Commit d93d0f0cfef46293db97cbdc5e72c9e5bceadd02

Authored by Minkyu Kang
1 parent 6a69e11a79

S5P: Use accessor functions instead of SoC specific defines to access the base address

This patch is intended to prepare the other S5P SoC. (s5pc210)
If use SoC specific defines then can't share with other SoC.
So, make the accessor functions for access the base address by common way.

Signed-off-by: Minkyu Kang <mk7.kang@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>

Showing 13 changed files with 53 additions and 45 deletions Side-by-side Diff

arch/arm/cpu/armv7/s5pc1xx/clock.c
... ... @@ -45,7 +45,8 @@
45 45 /* s5pc110: return pll clock frequency */
46 46 static unsigned long s5pc100_get_pll_clk(int pllreg)
47 47 {
48   - struct s5pc100_clock *clk = (struct s5pc100_clock *)S5PC1XX_CLOCK_BASE;
  48 + struct s5pc100_clock *clk =
  49 + (struct s5pc100_clock *)samsung_get_base_clock();
49 50 unsigned long r, m, p, s, mask, fout;
50 51 unsigned int freq;
51 52  
... ... @@ -95,7 +96,8 @@
95 96 /* s5pc100: return pll clock frequency */
96 97 static unsigned long s5pc110_get_pll_clk(int pllreg)
97 98 {
98   - struct s5pc110_clock *clk = (struct s5pc110_clock *)S5PC1XX_CLOCK_BASE;
  99 + struct s5pc110_clock *clk =
  100 + (struct s5pc110_clock *)samsung_get_base_clock();
99 101 unsigned long r, m, p, s, mask, fout;
100 102 unsigned int freq;
101 103  
... ... @@ -151,7 +153,8 @@
151 153 /* s5pc110: return ARM clock frequency */
152 154 static unsigned long s5pc110_get_arm_clk(void)
153 155 {
154   - struct s5pc110_clock *clk = (struct s5pc110_clock *)S5PC1XX_CLOCK_BASE;
  156 + struct s5pc110_clock *clk =
  157 + (struct s5pc110_clock *)samsung_get_base_clock();
155 158 unsigned long div;
156 159 unsigned long dout_apll, armclk;
157 160 unsigned int apll_ratio;
... ... @@ -170,7 +173,8 @@
170 173 /* s5pc100: return ARM clock frequency */
171 174 static unsigned long s5pc100_get_arm_clk(void)
172 175 {
173   - struct s5pc100_clock *clk = (struct s5pc100_clock *)S5PC1XX_CLOCK_BASE;
  176 + struct s5pc100_clock *clk =
  177 + (struct s5pc100_clock *)samsung_get_base_clock();
174 178 unsigned long div;
175 179 unsigned long dout_apll, armclk;
176 180 unsigned int apll_ratio, arm_ratio;
... ... @@ -191,7 +195,8 @@
191 195 /* s5pc100: return HCLKD0 frequency */
192 196 static unsigned long get_hclk(void)
193 197 {
194   - struct s5pc100_clock *clk = (struct s5pc100_clock *)S5PC1XX_CLOCK_BASE;
  198 + struct s5pc100_clock *clk =
  199 + (struct s5pc100_clock *)samsung_get_base_clock();
195 200 unsigned long hclkd0;
196 201 uint div, d0_bus_ratio;
197 202  
... ... @@ -207,7 +212,8 @@
207 212 /* s5pc100: return PCLKD1 frequency */
208 213 static unsigned long get_pclkd1(void)
209 214 {
210   - struct s5pc100_clock *clk = (struct s5pc100_clock *)S5PC1XX_CLOCK_BASE;
  215 + struct s5pc100_clock *clk =
  216 + (struct s5pc100_clock *)samsung_get_base_clock();
211 217 unsigned long d1_bus, pclkd1;
212 218 uint div, d1_bus_ratio, pclkd1_ratio;
213 219  
... ... @@ -227,7 +233,8 @@
227 233 /* s5pc110: return HCLKs frequency */
228 234 static unsigned long get_hclk_sys(int dom)
229 235 {
230   - struct s5pc110_clock *clk = (struct s5pc110_clock *)S5PC1XX_CLOCK_BASE;
  236 + struct s5pc110_clock *clk =
  237 + (struct s5pc110_clock *)samsung_get_base_clock();
231 238 unsigned long hclk;
232 239 unsigned int div;
233 240 unsigned int offset;
... ... @@ -255,7 +262,8 @@
255 262 /* s5pc110: return PCLKs frequency */
256 263 static unsigned long get_pclk_sys(int dom)
257 264 {
258   - struct s5pc110_clock *clk = (struct s5pc110_clock *)S5PC1XX_CLOCK_BASE;
  265 + struct s5pc110_clock *clk =
  266 + (struct s5pc110_clock *)samsung_get_base_clock();
259 267 unsigned long pclk;
260 268 unsigned int div;
261 269 unsigned int offset;
arch/arm/cpu/armv7/s5pc1xx/cpu_info.c
... ... @@ -30,7 +30,7 @@
30 30 #ifdef CONFIG_ARCH_CPU_INIT
31 31 int arch_cpu_init(void)
32 32 {
33   - s5pc1xx_cpu_id = readl(S5PC1XX_PRO_ID);
  33 + s5pc1xx_cpu_id = readl(samsung_get_base_pro_id());
34 34 s5pc1xx_cpu_id = 0xC000 | ((s5pc1xx_cpu_id & 0x00FFF000) >> 12);
35 35  
36 36 s5pc1xx_clock_init();
arch/arm/cpu/armv7/s5pc1xx/reset.S
... ... @@ -28,7 +28,7 @@
28 28  
29 29 .globl reset_cpu
30 30 reset_cpu:
31   - ldr r1, =S5PC1XX_PRO_ID
  31 + ldr r1, =S5PC100_PRO_ID
32 32 ldr r2, [r1]
33 33 ldr r4, =0x00010000
34 34 and r4, r2, r4
arch/arm/cpu/armv7/s5pc1xx/sromc.c
... ... @@ -35,12 +35,8 @@
35 35 void s5pc1xx_config_sromc(u32 srom_bank, u32 smc_bw_conf, u32 smc_bc_conf)
36 36 {
37 37 u32 tmp;
38   - struct s5pc1xx_smc *srom;
39   -
40   - if (cpu_is_s5pc100())
41   - srom = (struct s5pc1xx_smc *)S5PC100_SROMC_BASE;
42   - else
43   - srom = (struct s5pc1xx_smc *)S5PC110_SROMC_BASE;
  38 + struct s5pc1xx_smc *srom =
  39 + (struct s5pc1xx_smc *)samsung_get_base_sromc();
44 40  
45 41 /* Configure SMC_BW register to handle proper SROMC bank */
46 42 tmp = srom->bw;
arch/arm/cpu/armv7/s5pc1xx/timer.c
... ... @@ -46,10 +46,7 @@
46 46 /* macro to read the 16 bit timer */
47 47 static inline struct s5pc1xx_timer *s5pc1xx_get_base_timer(void)
48 48 {
49   - if (cpu_is_s5pc110())
50   - return (struct s5pc1xx_timer *)S5PC110_TIMER_BASE;
51   - else
52   - return (struct s5pc1xx_timer *)S5PC100_TIMER_BASE;
  49 + return (struct s5pc1xx_timer *)samsung_get_base_timer();
53 50 }
54 51  
55 52 int timer_init(void)
arch/arm/include/asm/arch-s5pc1xx/cpu.h
... ... @@ -25,9 +25,9 @@
25 25  
26 26 #define S5PC1XX_ADDR_BASE 0xE0000000
27 27  
28   -#define S5PC1XX_CLOCK_BASE 0xE0100000
29   -
30 28 /* S5PC100 */
  29 +#define S5PC100_PRO_ID 0xE0000000
  30 +#define S5PC100_CLOCK_BASE 0xE0100000
31 31 #define S5PC100_GPIO_BASE 0xE0300000
32 32 #define S5PC100_VIC0_BASE 0xE4000000
33 33 #define S5PC100_VIC1_BASE 0xE4100000
... ... @@ -41,6 +41,8 @@
41 41 #define S5PC100_MMC_BASE 0xED800000
42 42  
43 43 /* S5PC110 */
  44 +#define S5PC110_PRO_ID 0xE0000000
  45 +#define S5PC110_CLOCK_BASE 0xE0100000
44 46 #define S5PC110_GPIO_BASE 0xE0200000
45 47 #define S5PC110_PWMTIMER_BASE 0xE2500000
46 48 #define S5PC110_WATCHDOG_BASE 0xE2700000
... ... @@ -54,9 +56,6 @@
54 56 #define S5PC110_VIC2_BASE 0xF2200000
55 57 #define S5PC110_VIC3_BASE 0xF2300000
56 58  
57   -/* Chip ID */
58   -#define S5PC1XX_PRO_ID 0xE0000000
59   -
60 59 #ifndef __ASSEMBLY__
61 60 /* CPU detection macros */
62 61 extern unsigned int s5pc1xx_cpu_id;
... ... @@ -69,6 +68,25 @@
69 68  
70 69 IS_SAMSUNG_TYPE(s5pc100, 0xc100)
71 70 IS_SAMSUNG_TYPE(s5pc110, 0xc110)
  71 +
  72 +#define SAMSUNG_BASE(device, base) \
  73 +static inline unsigned int samsung_get_base_##device(void) \
  74 +{ \
  75 + if (cpu_is_s5pc100()) \
  76 + return S5PC100_##base; \
  77 + else if (cpu_is_s5pc110()) \
  78 + return S5PC110_##base; \
  79 + else \
  80 + return 0; \
  81 +} \
  82 +
  83 +SAMSUNG_BASE(clock, CLOCK_BASE)
  84 +SAMSUNG_BASE(gpio, GPIO_BASE)
  85 +SAMSUNG_BASE(pro_id, PRO_ID)
  86 +SAMSUNG_BASE(mmc, MMC_BASE)
  87 +SAMSUNG_BASE(sromc, SROMC_BASE)
  88 +SAMSUNG_BASE(timer, PWMTIMER_BASE)
  89 +SAMSUNG_BASE(uart, UART_BASE)
72 90 #endif
73 91  
74 92 #endif /* _S5PC1XX_CPU_H */
arch/arm/include/asm/arch-s5pc1xx/pwm.h
... ... @@ -22,10 +22,6 @@
22 22 #ifndef __ASM_ARM_ARCH_PWM_H_
23 23 #define __ASM_ARM_ARCH_PWM_H_
24 24  
25   -/* PWM timer addressing */
26   -#define S5PC100_TIMER_BASE S5PC100_PWMTIMER_BASE
27   -#define S5PC110_TIMER_BASE S5PC110_PWMTIMER_BASE
28   -
29 25 /* Interval mode(Auto Reload) of PWM Timer 4 */
30 26 #define S5PC1XX_TCON4_AUTO_RELOAD (1 << 22)
31 27 /* Update TCNTB4 */
board/samsung/goni/lowlevel_init.S
... ... @@ -51,7 +51,7 @@
51 51 ldr r7, =S5PC100_GPIO_BASE
52 52 ldr r8, =S5PC100_GPIO_BASE
53 53 /* Read CPU ID */
54   - ldr r2, =S5PC1XX_PRO_ID
  54 + ldr r2, =S5PC110_PRO_ID
55 55 ldr r0, [r2]
56 56 mov r1, #0x00010000
57 57 and r0, r0, r1
... ... @@ -377,7 +377,7 @@
377 377 * void system_clock_init(void)
378 378 */
379 379 system_clock_init:
380   - ldr r0, =S5PC1XX_CLOCK_BASE @ 0xE0100000
  380 + ldr r0, =S5PC110_CLOCK_BASE @ 0xE0100000
381 381  
382 382 /* Check S5PC100 */
383 383 cmp r7, r8
... ... @@ -437,7 +437,7 @@
437 437 ldr r1, =0x3ff03ff
438 438 str r1, [r0, #0x114] @ S5PC110_CLAMP_STABLE
439 439  
440   - ldr r0, =S5PC1XX_CLOCK_BASE @ 0xE0100000
  440 + ldr r0, =S5PC110_CLOCK_BASE @ 0xE0100000
441 441  
442 442 /* Set Clock divider */
443 443 ldr r1, =0x14131330 @ 1:1:4:4, 1:4:5
board/samsung/smdkc100/lowlevel_init.S
... ... @@ -131,7 +131,7 @@
131 131 * void system_clock_init(void)
132 132 */
133 133 system_clock_init:
134   - ldr r8, =S5PC1XX_CLOCK_BASE @ 0xE0100000
  134 + ldr r8, =S5PC100_CLOCK_BASE @ 0xE0100000
135 135  
136 136 /* Set Clock divider */
137 137 ldr r1, =0x00011110
board/samsung/smdkc100/onenand.c
... ... @@ -35,7 +35,8 @@
35 35 void onenand_board_init(struct mtd_info *mtd)
36 36 {
37 37 struct onenand_chip *this = mtd->priv;
38   - struct s5pc100_clock *clk = (struct s5pc100_clock *)S5PC1XX_CLOCK_BASE;
  38 + struct s5pc100_clock *clk =
  39 + (struct s5pc100_clock *)samsung_get_base_clock();
39 40 struct samsung_onenand *onenand;
40 41 int value;
41 42  
board/samsung/smdkc100/smdkc100.c
... ... @@ -38,7 +38,7 @@
38 38 u32 smc_bw_conf, smc_bc_conf;
39 39  
40 40 struct s5pc100_gpio *const gpio =
41   - (struct s5pc100_gpio *)S5PC100_GPIO_BASE;
  41 + (struct s5pc100_gpio *)samsung_get_base_gpio();
42 42  
43 43 /* gpio configuration GPK0CON */
44 44 gpio_cfg_pin(&gpio->gpio_k0, CONFIG_ENV_SROM_BANK, GPIO_FUNC(2));
drivers/mmc/s5p_mmc.c
... ... @@ -30,11 +30,7 @@
30 30 static inline struct s5p_mmc *s5p_get_base_mmc(int dev_index)
31 31 {
32 32 unsigned long offset = dev_index * sizeof(struct s5p_mmc);
33   -
34   - if (cpu_is_s5pc100())
35   - return (struct s5p_mmc *)(S5PC100_MMC_BASE + offset);
36   - else
37   - return (struct s5p_mmc *)(S5PC110_MMC_BASE + offset);
  33 + return (struct s5p_mmc *)(samsung_get_base_mmc() + offset);
38 34 }
39 35  
40 36 static void mmc_prepare_data(struct mmc_host *host, struct mmc_data *data)
drivers/serial/serial_s5p.c
... ... @@ -30,11 +30,7 @@
30 30 static inline struct s5p_uart *s5p_get_base_uart(int dev_index)
31 31 {
32 32 u32 offset = dev_index * sizeof(struct s5p_uart);
33   -
34   - if (cpu_is_s5pc100())
35   - return (struct s5p_uart *)(S5PC100_UART_BASE + offset);
36   - else
37   - return (struct s5p_uart *)(S5PC110_UART_BASE + offset);
  33 + return (struct s5p_uart *)(samsung_get_base_uart() + offset);
38 34 }
39 35  
40 36 /*