Commit 66c98a0c3807720a32ce49c9ba2a5808555062d7
Committed by
Tom Rini
1 parent
bba379d498
Exists in
v2017.01-smarct4x
and in
37 other branches
keystone2: ddr3: eliminate using global ddr3_size variable
KS2 ddr3 initialization uses ddr3_size global variable before u-boot relocation. Even if the variable is not being used after relocation, writing to it corrupts relocation table. This patch removes the global ddr3_size variable and uses local one instead. Signed-off-by: Vitaly Andrianov <vitalya@ti.com> Tested-by: Nishanth Menon <nm@ti.com>
Showing 6 changed files with 17 additions and 36 deletions Side-by-side Diff
arch/arm/cpu/armv7/keystone/ddr3.c
... | ... | @@ -263,17 +263,14 @@ |
263 | 263 | } |
264 | 264 | #endif |
265 | 265 | |
266 | -void ddr3_init_ecc(u32 base) | |
266 | +void ddr3_init_ecc(u32 base, u32 ddr3_size) | |
267 | 267 | { |
268 | - u32 ddr3_size; | |
269 | - | |
270 | 268 | if (!ddr3_ecc_support_rmw(base)) { |
271 | 269 | ddr3_disable_ecc(base); |
272 | 270 | return; |
273 | 271 | } |
274 | 272 | |
275 | 273 | ddr3_ecc_init_range(base); |
276 | - ddr3_size = ddr3_get_size(); | |
277 | 274 | ddr3_reset_data(CONFIG_SYS_SDRAM_BASE, ddr3_size); |
278 | 275 | |
279 | 276 | /* mapping DDR3 ECC system interrupt from CIC2 to GIC */ |
arch/arm/include/asm/arch-keystone/ddr3.h
... | ... | @@ -48,10 +48,9 @@ |
48 | 48 | unsigned int sdrfc; |
49 | 49 | }; |
50 | 50 | |
51 | -void ddr3_init(void); | |
52 | -int ddr3_get_size(void); | |
51 | +u32 ddr3_init(void); | |
53 | 52 | void ddr3_reset_ddrphy(void); |
54 | -void ddr3_init_ecc(u32 base); | |
53 | +void ddr3_init_ecc(u32 base, u32 ddr3_size); | |
55 | 54 | void ddr3_disable_ecc(u32 base); |
56 | 55 | void ddr3_check_ecc_int(u32 base); |
57 | 56 | int ddr3_ecc_support_rmw(u32 base); |
board/ti/ks2_evm/board.c
... | ... | @@ -35,12 +35,14 @@ |
35 | 35 | |
36 | 36 | int dram_init(void) |
37 | 37 | { |
38 | - ddr3_init(); | |
38 | + u32 ddr3_size; | |
39 | 39 | |
40 | + ddr3_size = ddr3_init(); | |
41 | + | |
40 | 42 | gd->ram_size = get_ram_size((long *)CONFIG_SYS_SDRAM_BASE, |
41 | 43 | CONFIG_MAX_RAM_BANK_SIZE); |
42 | 44 | aemif_init(ARRAY_SIZE(aemif_configs), aemif_configs); |
43 | - ddr3_init_ecc(KS2_DDR3A_EMIF_CTRL_BASE); | |
45 | + ddr3_init_ecc(KS2_DDR3A_EMIF_CTRL_BASE, ddr3_size); | |
44 | 46 | return 0; |
45 | 47 | } |
46 | 48 |
board/ti/ks2_evm/ddr3_k2e.c
... | ... | @@ -11,11 +11,11 @@ |
11 | 11 | #include "ddr3_cfg.h" |
12 | 12 | #include <asm/arch/ddr3.h> |
13 | 13 | |
14 | -static int ddr3_size; | |
15 | 14 | static struct pll_init_data ddr3_400 = DDR3_PLL_400; |
16 | 15 | |
17 | -void ddr3_init(void) | |
16 | +u32 ddr3_init(void) | |
18 | 17 | { |
18 | + u32 ddr3_size; | |
19 | 19 | char dimm_name[32]; |
20 | 20 | |
21 | 21 | if (~(readl(KS2_PLL_CNTRL_BASE + KS2_RSTCTRL_RSTYPE) & 0x1)) |
22 | 22 | |
23 | 23 | |
... | ... | @@ -43,14 +43,12 @@ |
43 | 43 | printf("DRAM: 4 GiB\n"); |
44 | 44 | ddr3_init_ddrphy(KS2_DDR3A_DDRPHYC, &ddr3phy_1600_4g); |
45 | 45 | ddr3_init_ddremif(KS2_DDR3A_EMIF_CTRL_BASE, &ddr3_1600_4g); |
46 | + } else { | |
47 | + printf("Unknown SO-DIMM. Cannot configure DDR3\n"); | |
48 | + while (1) | |
49 | + ; | |
46 | 50 | } |
47 | -} | |
48 | 51 | |
49 | -/** | |
50 | - * ddr3_get_size - return ddr3 size in GiB | |
51 | - */ | |
52 | -int ddr3_get_size(void) | |
53 | -{ | |
54 | 52 | return ddr3_size; |
55 | 53 | } |
board/ti/ks2_evm/ddr3_k2hk.c
... | ... | @@ -12,14 +12,13 @@ |
12 | 12 | #include <asm/arch/ddr3.h> |
13 | 13 | #include <asm/arch/hardware.h> |
14 | 14 | |
15 | -static int ddr3_size; | |
16 | - | |
17 | 15 | struct pll_init_data ddr3a_333 = DDR3_PLL_333(A); |
18 | 16 | struct pll_init_data ddr3a_400 = DDR3_PLL_400(A); |
19 | 17 | |
20 | -void ddr3_init(void) | |
18 | +u32 ddr3_init(void) | |
21 | 19 | { |
22 | 20 | char dimm_name[32]; |
21 | + u32 ddr3_size; | |
23 | 22 | |
24 | 23 | ddr3_get_dimm_params(dimm_name); |
25 | 24 | |
26 | 25 | |
... | ... | @@ -93,13 +92,7 @@ |
93 | 92 | /* Apply the workaround for PG 1.0 and 1.1 Silicons */ |
94 | 93 | if (cpu_revision() <= 1) |
95 | 94 | ddr3_err_reset_workaround(); |
96 | -} | |
97 | 95 | |
98 | -/** | |
99 | - * ddr3_get_size - return ddr3 size in GiB | |
100 | - */ | |
101 | -int ddr3_get_size(void) | |
102 | -{ | |
103 | 96 | return ddr3_size; |
104 | 97 | } |
board/ti/ks2_evm/ddr3_k2l.c
... | ... | @@ -11,29 +11,21 @@ |
11 | 11 | #include "ddr3_cfg.h" |
12 | 12 | #include <asm/arch/ddr3.h> |
13 | 13 | |
14 | -static int ddr3_size; | |
15 | 14 | static struct pll_init_data ddr3_400 = DDR3_PLL_400; |
16 | 15 | |
17 | -void ddr3_init(void) | |
16 | +u32 ddr3_init(void) | |
18 | 17 | { |
19 | 18 | init_pll(&ddr3_400); |
20 | 19 | |
21 | 20 | /* No SO-DIMM, 2GB discreet DDR */ |
22 | 21 | printf("DRAM: 2 GiB\n"); |
23 | - ddr3_size = 2; | |
24 | 22 | |
25 | 23 | /* Reset DDR3 PHY after PLL enabled */ |
26 | 24 | ddr3_reset_ddrphy(); |
27 | 25 | |
28 | 26 | ddr3_init_ddrphy(KS2_DDR3A_DDRPHYC, &ddr3phy_1600_2g); |
29 | 27 | ddr3_init_ddremif(KS2_DDR3A_EMIF_CTRL_BASE, &ddr3_1600_2g); |
30 | -} | |
31 | 28 | |
32 | -/** | |
33 | - * ddr3_get_size - return ddr3 size in GiB | |
34 | - */ | |
35 | -int ddr3_get_size(void) | |
36 | -{ | |
37 | - return ddr3_size; | |
29 | + return 2; | |
38 | 30 | } |