Commit 6cc2120646a3230bcf4b57cb3cb937f4a1cfe150

Authored by Masahiro Yamada
1 parent afed8c1b6a

ARM: UniPhier: consolidate MEMCONF setting code

This code is duplicated in ph1-ld4/sg_init.c and ph1-pro4/sg_init.c.
Merge the same code into a new file, memconf.c.

The helper functions no longer have to be placed in the header file.
Also, move them into memconf.c.

Signed-off-by: Masahiro Yamada <yamada.m@jp.panasonic.com>

Showing 6 changed files with 116 additions and 141 deletions Side-by-side Diff

arch/arm/mach-uniphier/Makefile
... ... @@ -7,6 +7,7 @@
7 7 obj-y += lowlevel_init.o
8 8 obj-y += init_page_table.o
9 9 obj-y += spl.o
  10 +obj-y += memconf.o
10 11 obj-y += ddrphy_training.o
11 12  
12 13 else
arch/arm/mach-uniphier/include/mach/sg-regs.h
1 1 /*
2 2 * UniPhier SG (SoC Glue) block registers
3 3 *
4   - * Copyright (C) 2011-2014 Panasonic Corporation
  4 + * Copyright (C) 2011-2015 Panasonic Corporation
5 5 *
6 6 * SPDX-License-Identifier: GPL-2.0+
7 7 */
... ... @@ -108,7 +108,6 @@
108 108 #else
109 109  
110 110 #include <linux/types.h>
111   -#include <linux/sizes.h>
112 111 #include <asm/io.h>
113 112  
114 113 static inline void sg_set_pinsel(int n, int value)
... ... @@ -117,122 +116,6 @@
117 116 | SG_PINSEL_MODE(n, value), SG_PINSEL_ADDR(n));
118 117 }
119 118  
120   -static inline u32 sg_memconf_val_ch0(unsigned long size, int num)
121   -{
122   - int size_mb = size / num;
123   - u32 ret;
124   -
125   - switch (size_mb) {
126   - case SZ_64M:
127   - ret = SG_MEMCONF_CH0_SZ_64M;
128   - break;
129   - case SZ_128M:
130   - ret = SG_MEMCONF_CH0_SZ_128M;
131   - break;
132   - case SZ_256M:
133   - ret = SG_MEMCONF_CH0_SZ_256M;
134   - break;
135   - case SZ_512M:
136   - ret = SG_MEMCONF_CH0_SZ_512M;
137   - break;
138   - case SZ_1G:
139   - ret = SG_MEMCONF_CH0_SZ_1G;
140   - break;
141   - default:
142   - BUG();
143   - break;
144   - }
145   -
146   - switch (num) {
147   - case 1:
148   - ret |= SG_MEMCONF_CH0_NUM_1;
149   - break;
150   - case 2:
151   - ret |= SG_MEMCONF_CH0_NUM_2;
152   - break;
153   - default:
154   - BUG();
155   - break;
156   - }
157   - return ret;
158   -}
159   -
160   -static inline u32 sg_memconf_val_ch1(unsigned long size, int num)
161   -{
162   - int size_mb = size / num;
163   - u32 ret;
164   -
165   - switch (size_mb) {
166   - case SZ_64M:
167   - ret = SG_MEMCONF_CH1_SZ_64M;
168   - break;
169   - case SZ_128M:
170   - ret = SG_MEMCONF_CH1_SZ_128M;
171   - break;
172   - case SZ_256M:
173   - ret = SG_MEMCONF_CH1_SZ_256M;
174   - break;
175   - case SZ_512M:
176   - ret = SG_MEMCONF_CH1_SZ_512M;
177   - break;
178   - case SZ_1G:
179   - ret = SG_MEMCONF_CH1_SZ_1G;
180   - break;
181   - default:
182   - BUG();
183   - break;
184   - }
185   -
186   - switch (num) {
187   - case 1:
188   - ret |= SG_MEMCONF_CH1_NUM_1;
189   - break;
190   - case 2:
191   - ret |= SG_MEMCONF_CH1_NUM_2;
192   - break;
193   - default:
194   - BUG();
195   - break;
196   - }
197   - return ret;
198   -}
199   -
200   -static inline u32 sg_memconf_val_ch2(unsigned long size, int num)
201   -{
202   - int size_mb = size / num;
203   - u32 ret;
204   -
205   - switch (size_mb) {
206   - case SZ_64M:
207   - ret = SG_MEMCONF_CH2_SZ_64M;
208   - break;
209   - case SZ_128M:
210   - ret = SG_MEMCONF_CH2_SZ_128M;
211   - break;
212   - case SZ_256M:
213   - ret = SG_MEMCONF_CH2_SZ_256M;
214   - break;
215   - case SZ_512M:
216   - ret = SG_MEMCONF_CH2_SZ_512M;
217   - break;
218   - default:
219   - BUG();
220   - break;
221   - }
222   -
223   - switch (num) {
224   - case 1:
225   - ret |= SG_MEMCONF_CH2_NUM_1;
226   - break;
227   - case 2:
228   - ret |= SG_MEMCONF_CH2_NUM_2;
229   - break;
230   - default:
231   - BUG();
232   - break;
233   - }
234   - return ret;
235   -}
236 119 #endif /* __ASSEMBLY__ */
237 120  
238 121 #endif /* ARCH_SG_REGS_H */
arch/arm/mach-uniphier/memconf.c
  1 +/*
  2 + * Copyright (C) 2011-2015 Panasonic Corporation
  3 + * Author: Masahiro Yamada <yamada.m@jp.panasonic.com>
  4 + *
  5 + * SPDX-License-Identifier: GPL-2.0+
  6 + */
  7 +
  8 +#include <common.h>
  9 +#include <linux/sizes.h>
  10 +#include <asm/io.h>
  11 +#include <mach/sg-regs.h>
  12 +
  13 +static inline u32 sg_memconf_val_ch0(unsigned long size, int num)
  14 +{
  15 + int size_mb = size / num;
  16 + u32 ret;
  17 +
  18 + switch (size_mb) {
  19 + case SZ_64M:
  20 + ret = SG_MEMCONF_CH0_SZ_64M;
  21 + break;
  22 + case SZ_128M:
  23 + ret = SG_MEMCONF_CH0_SZ_128M;
  24 + break;
  25 + case SZ_256M:
  26 + ret = SG_MEMCONF_CH0_SZ_256M;
  27 + break;
  28 + case SZ_512M:
  29 + ret = SG_MEMCONF_CH0_SZ_512M;
  30 + break;
  31 + case SZ_1G:
  32 + ret = SG_MEMCONF_CH0_SZ_1G;
  33 + break;
  34 + default:
  35 + BUG();
  36 + break;
  37 + }
  38 +
  39 + switch (num) {
  40 + case 1:
  41 + ret |= SG_MEMCONF_CH0_NUM_1;
  42 + break;
  43 + case 2:
  44 + ret |= SG_MEMCONF_CH0_NUM_2;
  45 + break;
  46 + default:
  47 + BUG();
  48 + break;
  49 + }
  50 + return ret;
  51 +}
  52 +
  53 +static inline u32 sg_memconf_val_ch1(unsigned long size, int num)
  54 +{
  55 + int size_mb = size / num;
  56 + u32 ret;
  57 +
  58 + switch (size_mb) {
  59 + case SZ_64M:
  60 + ret = SG_MEMCONF_CH1_SZ_64M;
  61 + break;
  62 + case SZ_128M:
  63 + ret = SG_MEMCONF_CH1_SZ_128M;
  64 + break;
  65 + case SZ_256M:
  66 + ret = SG_MEMCONF_CH1_SZ_256M;
  67 + break;
  68 + case SZ_512M:
  69 + ret = SG_MEMCONF_CH1_SZ_512M;
  70 + break;
  71 + case SZ_1G:
  72 + ret = SG_MEMCONF_CH1_SZ_1G;
  73 + break;
  74 + default:
  75 + BUG();
  76 + break;
  77 + }
  78 +
  79 + switch (num) {
  80 + case 1:
  81 + ret |= SG_MEMCONF_CH1_NUM_1;
  82 + break;
  83 + case 2:
  84 + ret |= SG_MEMCONF_CH1_NUM_2;
  85 + break;
  86 + default:
  87 + BUG();
  88 + break;
  89 + }
  90 + return ret;
  91 +}
  92 +
  93 +void memconf_init(void)
  94 +{
  95 + u32 tmp;
  96 +
  97 + /* Set DDR size */
  98 + tmp = sg_memconf_val_ch0(CONFIG_SDRAM0_SIZE, CONFIG_DDR_NUM_CH0);
  99 + tmp |= sg_memconf_val_ch1(CONFIG_SDRAM1_SIZE, CONFIG_DDR_NUM_CH1);
  100 +#if CONFIG_SDRAM0_BASE + CONFIG_SDRAM0_SIZE < CONFIG_SDRAM1_BASE
  101 + tmp |= SG_MEMCONF_SPARSEMEM;
  102 +#endif
  103 + writel(tmp, SG_MEMCONF);
  104 +}
arch/arm/mach-uniphier/ph1-ld4/sg_init.c
1 1 /*
2   - * Copyright (C) 2011-2014 Panasonic Corporation
  2 + * Copyright (C) 2011-2015 Panasonic Corporation
3 3 * Author: Masahiro Yamada <yamada.m@jp.panasonic.com>
4 4 *
5 5 * SPDX-License-Identifier: GPL-2.0+
6 6 */
7 7  
8   -#include <common.h>
9 8 #include <asm/io.h>
10 9 #include <mach/sg-regs.h>
11 10  
12 11 void sg_init(void)
13 12 {
14 13 u32 tmp;
15   -
16   - /* Set DDR size */
17   - tmp = sg_memconf_val_ch0(CONFIG_SDRAM0_SIZE, CONFIG_DDR_NUM_CH0);
18   - tmp |= sg_memconf_val_ch1(CONFIG_SDRAM1_SIZE, CONFIG_DDR_NUM_CH1);
19   -#if CONFIG_SDRAM0_BASE + CONFIG_SDRAM0_SIZE < CONFIG_SDRAM1_BASE
20   - tmp |= SG_MEMCONF_SPARSEMEM;
21   -#endif
22   - writel(tmp, SG_MEMCONF);
23 14  
24 15 /* Input ports must be enabled before deasserting reset of cores */
25 16 tmp = readl(SG_IECTRL);
arch/arm/mach-uniphier/ph1-pro4/sg_init.c
1 1 /*
2   - * Copyright (C) 2011-2014 Panasonic Corporation
  2 + * Copyright (C) 2011-2015 Panasonic Corporation
3 3 * Author: Masahiro Yamada <yamada.m@jp.panasonic.com>
4 4 *
5 5 * SPDX-License-Identifier: GPL-2.0+
6 6 */
7 7  
8   -#include <common.h>
9 8 #include <asm/io.h>
10 9 #include <mach/sg-regs.h>
11 10  
12 11 void sg_init(void)
13 12 {
14 13 u32 tmp;
15   -
16   - /* Set DDR size */
17   - tmp = sg_memconf_val_ch0(CONFIG_SDRAM0_SIZE, CONFIG_DDR_NUM_CH0);
18   - tmp |= sg_memconf_val_ch1(CONFIG_SDRAM1_SIZE, CONFIG_DDR_NUM_CH1);
19   -#if CONFIG_SDRAM0_BASE + CONFIG_SDRAM0_SIZE < CONFIG_SDRAM1_BASE
20   - tmp |= SG_MEMCONF_SPARSEMEM;
21   -#endif
22   - writel(tmp, SG_MEMCONF);
23 14  
24 15 /* Input ports must be enabled before deasserting reset of cores */
25 16 tmp = readl(SG_IECTRL);
arch/arm/mach-uniphier/spl.c
... ... @@ -18,6 +18,7 @@
18 18 void sg_init(void);
19 19 void pll_init(void);
20 20 void pin_init(void);
  21 +void memconf_init(void);
21 22 void early_clkrst_init(void);
22 23 int umc_init(void);
23 24 void enable_dpll_ssc(void);
24 25  
... ... @@ -38,10 +39,14 @@
38 39  
39 40 led_write(L, 0, , );
40 41  
41   - early_clkrst_init();
  42 + memconf_init();
42 43  
43 44 led_write(L, 1, , );
44 45  
  46 + early_clkrst_init();
  47 +
  48 + led_write(L, 2, , );
  49 +
45 50 {
46 51 int res;
47 52  
48 53  
... ... @@ -51,10 +56,10 @@
51 56 ;
52 57 }
53 58 }
54   - led_write(L, 2, , );
  59 + led_write(L, 3, , );
55 60  
56 61 enable_dpll_ssc();
57 62  
58   - led_write(L, 3, , );
  63 + led_write(L, 4, , );
59 64 }