]>
Commit | Line | Data |
---|---|---|
7cc5a5d3 TT |
1 | /* |
2 | * Copyright Altera Corporation (C) 2016. All rights reserved. | |
3 | * | |
4 | * This program is free software; you can redistribute it and/or modify it | |
5 | * under the terms and conditions of the GNU General Public License, | |
6 | * version 2, as published by the Free Software Foundation. | |
7 | * | |
8 | * This program is distributed in the hope it will be useful, but WITHOUT | |
9 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
10 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | |
11 | * more details. | |
12 | * | |
13 | * You should have received a copy of the GNU General Public License along with | |
14 | * this program. If not, see <http://www.gnu.org/licenses/>. | |
15 | */ | |
16 | #include <linux/io.h> | |
17 | #include <linux/genalloc.h> | |
18 | #include <linux/module.h> | |
19 | #include <linux/of_address.h> | |
20 | #include <linux/of_platform.h> | |
21 | ||
22 | #define ALTR_OCRAM_CLEAR_ECC 0x00000018 | |
23 | #define ALTR_OCRAM_ECC_EN 0x00000019 | |
24 | ||
25 | void socfpga_init_ocram_ecc(void) | |
26 | { | |
27 | struct device_node *np; | |
28 | void __iomem *mapped_ocr_edac_addr; | |
29 | ||
30 | /* Find the OCRAM EDAC device tree node */ | |
31 | np = of_find_compatible_node(NULL, NULL, "altr,socfpga-ocram-ecc"); | |
32 | if (!np) { | |
33 | pr_err("Unable to find socfpga-ocram-ecc\n"); | |
34 | return; | |
35 | } | |
36 | ||
37 | mapped_ocr_edac_addr = of_iomap(np, 0); | |
38 | of_node_put(np); | |
39 | if (!mapped_ocr_edac_addr) { | |
40 | pr_err("Unable to map OCRAM ecc regs.\n"); | |
41 | return; | |
42 | } | |
43 | ||
44 | /* Clear any pending OCRAM ECC interrupts, then enable ECC */ | |
45 | writel(ALTR_OCRAM_CLEAR_ECC, mapped_ocr_edac_addr); | |
46 | writel(ALTR_OCRAM_ECC_EN, mapped_ocr_edac_addr); | |
47 | ||
48 | iounmap(mapped_ocr_edac_addr); | |
49 | } |