diff options
Diffstat (limited to 'arch/arm/mach-exynos')
-rw-r--r-- | arch/arm/mach-exynos/Kconfig | 24 | ||||
-rw-r--r-- | arch/arm/mach-exynos/Makefile | 6 | ||||
-rw-r--r-- | arch/arm/mach-exynos/clock.c | 229 | ||||
-rw-r--r-- | arch/arm/mach-exynos/cpu.c | 17 | ||||
-rw-r--r-- | arch/arm/mach-exynos/dma.c | 229 | ||||
-rw-r--r-- | arch/arm/mach-exynos/include/mach/entry-macro.S | 1 | ||||
-rw-r--r-- | arch/arm/mach-exynos/include/mach/irqs.h | 8 | ||||
-rw-r--r-- | arch/arm/mach-exynos/init.c | 21 | ||||
-rw-r--r-- | arch/arm/mach-exynos/mach-exynos4-dt.c | 85 | ||||
-rw-r--r-- | arch/arm/mach-exynos/setup-sdhci.c | 22 |
10 files changed, 348 insertions, 294 deletions
diff --git a/arch/arm/mach-exynos/Kconfig b/arch/arm/mach-exynos/Kconfig index 5ca0bddf65fa..0da2ced1ae48 100644 --- a/arch/arm/mach-exynos/Kconfig +++ b/arch/arm/mach-exynos/Kconfig | |||
@@ -57,6 +57,11 @@ config EXYNOS4_MCT | |||
57 | help | 57 | help |
58 | Use MCT (Multi Core Timer) as kernel timers | 58 | Use MCT (Multi Core Timer) as kernel timers |
59 | 59 | ||
60 | config EXYNOS4_DEV_DMA | ||
61 | bool | ||
62 | help | ||
63 | Compile in amba device definitions for DMA controller | ||
64 | |||
60 | config EXYNOS4_DEV_AHCI | 65 | config EXYNOS4_DEV_AHCI |
61 | bool | 66 | bool |
62 | help | 67 | help |
@@ -182,6 +187,7 @@ config MACH_SMDKV310 | |||
182 | select SAMSUNG_DEV_BACKLIGHT | 187 | select SAMSUNG_DEV_BACKLIGHT |
183 | select EXYNOS4_DEV_AHCI | 188 | select EXYNOS4_DEV_AHCI |
184 | select SAMSUNG_DEV_KEYPAD | 189 | select SAMSUNG_DEV_KEYPAD |
190 | select EXYNOS4_DEV_DMA | ||
185 | select EXYNOS4_DEV_PD | 191 | select EXYNOS4_DEV_PD |
186 | select SAMSUNG_DEV_PWM | 192 | select SAMSUNG_DEV_PWM |
187 | select EXYNOS4_DEV_USB_OHCI | 193 | select EXYNOS4_DEV_USB_OHCI |
@@ -203,6 +209,7 @@ config MACH_ARMLEX4210 | |||
203 | select S3C_DEV_HSMMC2 | 209 | select S3C_DEV_HSMMC2 |
204 | select S3C_DEV_HSMMC3 | 210 | select S3C_DEV_HSMMC3 |
205 | select EXYNOS4_DEV_AHCI | 211 | select EXYNOS4_DEV_AHCI |
212 | select EXYNOS4_DEV_DMA | ||
206 | select EXYNOS4_DEV_SYSMMU | 213 | select EXYNOS4_DEV_SYSMMU |
207 | select EXYNOS4_SETUP_SDHCI | 214 | select EXYNOS4_SETUP_SDHCI |
208 | help | 215 | help |
@@ -228,6 +235,7 @@ config MACH_UNIVERSAL_C210 | |||
228 | select S5P_DEV_MFC | 235 | select S5P_DEV_MFC |
229 | select S5P_DEV_ONENAND | 236 | select S5P_DEV_ONENAND |
230 | select S5P_DEV_TV | 237 | select S5P_DEV_TV |
238 | select EXYNOS4_DEV_DMA | ||
231 | select EXYNOS4_DEV_PD | 239 | select EXYNOS4_DEV_PD |
232 | select EXYNOS4_SETUP_FIMD0 | 240 | select EXYNOS4_SETUP_FIMD0 |
233 | select EXYNOS4_SETUP_I2C1 | 241 | select EXYNOS4_SETUP_I2C1 |
@@ -261,6 +269,7 @@ config MACH_NURI | |||
261 | select S5P_DEV_MFC | 269 | select S5P_DEV_MFC |
262 | select S5P_DEV_USB_EHCI | 270 | select S5P_DEV_USB_EHCI |
263 | select S5P_SETUP_MIPIPHY | 271 | select S5P_SETUP_MIPIPHY |
272 | select EXYNOS4_DEV_DMA | ||
264 | select EXYNOS4_DEV_PD | 273 | select EXYNOS4_DEV_PD |
265 | select EXYNOS4_SETUP_FIMC | 274 | select EXYNOS4_SETUP_FIMC |
266 | select EXYNOS4_SETUP_FIMD0 | 275 | select EXYNOS4_SETUP_FIMD0 |
@@ -293,6 +302,7 @@ config MACH_ORIGEN | |||
293 | select S5P_DEV_USB_EHCI | 302 | select S5P_DEV_USB_EHCI |
294 | select SAMSUNG_DEV_BACKLIGHT | 303 | select SAMSUNG_DEV_BACKLIGHT |
295 | select SAMSUNG_DEV_PWM | 304 | select SAMSUNG_DEV_PWM |
305 | select EXYNOS4_DEV_DMA | ||
296 | select EXYNOS4_DEV_PD | 306 | select EXYNOS4_DEV_PD |
297 | select EXYNOS4_DEV_USB_OHCI | 307 | select EXYNOS4_DEV_USB_OHCI |
298 | select EXYNOS4_SETUP_FIMD0 | 308 | select EXYNOS4_SETUP_FIMD0 |
@@ -334,6 +344,20 @@ config MACH_SMDK4412 | |||
334 | Machine support for Samsung SMDK4412 | 344 | Machine support for Samsung SMDK4412 |
335 | endif | 345 | endif |
336 | 346 | ||
347 | comment "Flattened Device Tree based board for Exynos4 based SoC" | ||
348 | |||
349 | config MACH_EXYNOS4_DT | ||
350 | bool "Samsung Exynos4 Machine using device tree" | ||
351 | select CPU_EXYNOS4210 | ||
352 | select USE_OF | ||
353 | select ARM_AMBA | ||
354 | select HAVE_SAMSUNG_KEYPAD if INPUT_KEYBOARD | ||
355 | help | ||
356 | Machine support for Samsung Exynos4 machine with device tree enabled. | ||
357 | Select this if a fdt blob is available for the Exynos4 SoC based board. | ||
358 | Note: This is under development and not all peripherals can be supported | ||
359 | with this machine file. | ||
360 | |||
337 | if ARCH_EXYNOS4 | 361 | if ARCH_EXYNOS4 |
338 | 362 | ||
339 | comment "Configuration for HSMMC 8-bit bus width" | 363 | comment "Configuration for HSMMC 8-bit bus width" |
diff --git a/arch/arm/mach-exynos/Makefile b/arch/arm/mach-exynos/Makefile index f5f3b7994923..a0959ad04077 100644 --- a/arch/arm/mach-exynos/Makefile +++ b/arch/arm/mach-exynos/Makefile | |||
@@ -13,7 +13,7 @@ obj- := | |||
13 | # Core support for EXYNOS4 system | 13 | # Core support for EXYNOS4 system |
14 | 14 | ||
15 | obj-$(CONFIG_ARCH_EXYNOS4) += cpu.o init.o clock.o irq-combiner.o setup-i2c0.o | 15 | obj-$(CONFIG_ARCH_EXYNOS4) += cpu.o init.o clock.o irq-combiner.o setup-i2c0.o |
16 | obj-$(CONFIG_ARCH_EXYNOS4) += irq-eint.o dma.o pmu.o | 16 | obj-$(CONFIG_ARCH_EXYNOS4) += irq-eint.o pmu.o |
17 | obj-$(CONFIG_CPU_EXYNOS4210) += clock-exynos4210.o | 17 | obj-$(CONFIG_CPU_EXYNOS4210) += clock-exynos4210.o |
18 | obj-$(CONFIG_SOC_EXYNOS4212) += clock-exynos4212.o | 18 | obj-$(CONFIG_SOC_EXYNOS4212) += clock-exynos4212.o |
19 | obj-$(CONFIG_PM) += pm.o | 19 | obj-$(CONFIG_PM) += pm.o |
@@ -37,6 +37,8 @@ obj-$(CONFIG_MACH_ORIGEN) += mach-origen.o | |||
37 | obj-$(CONFIG_MACH_SMDK4212) += mach-smdk4x12.o | 37 | obj-$(CONFIG_MACH_SMDK4212) += mach-smdk4x12.o |
38 | obj-$(CONFIG_MACH_SMDK4412) += mach-smdk4x12.o | 38 | obj-$(CONFIG_MACH_SMDK4412) += mach-smdk4x12.o |
39 | 39 | ||
40 | obj-$(CONFIG_MACH_EXYNOS4_DT) += mach-exynos4-dt.o | ||
41 | |||
40 | # device support | 42 | # device support |
41 | 43 | ||
42 | obj-$(CONFIG_ARCH_EXYNOS4) += dev-audio.o | 44 | obj-$(CONFIG_ARCH_EXYNOS4) += dev-audio.o |
@@ -44,6 +46,7 @@ obj-$(CONFIG_EXYNOS4_DEV_AHCI) += dev-ahci.o | |||
44 | obj-$(CONFIG_EXYNOS4_DEV_PD) += dev-pd.o | 46 | obj-$(CONFIG_EXYNOS4_DEV_PD) += dev-pd.o |
45 | obj-$(CONFIG_EXYNOS4_DEV_SYSMMU) += dev-sysmmu.o | 47 | obj-$(CONFIG_EXYNOS4_DEV_SYSMMU) += dev-sysmmu.o |
46 | obj-$(CONFIG_EXYNOS4_DEV_DWMCI) += dev-dwmci.o | 48 | obj-$(CONFIG_EXYNOS4_DEV_DWMCI) += dev-dwmci.o |
49 | obj-$(CONFIG_EXYNOS4_DEV_DMA) += dma.o | ||
47 | obj-$(CONFIG_EXYNOS4_DEV_USB_OHCI) += dev-ohci.o | 50 | obj-$(CONFIG_EXYNOS4_DEV_USB_OHCI) += dev-ohci.o |
48 | 51 | ||
49 | obj-$(CONFIG_EXYNOS4_SETUP_FIMC) += setup-fimc.o | 52 | obj-$(CONFIG_EXYNOS4_SETUP_FIMC) += setup-fimc.o |
@@ -56,6 +59,5 @@ obj-$(CONFIG_EXYNOS4_SETUP_I2C5) += setup-i2c5.o | |||
56 | obj-$(CONFIG_EXYNOS4_SETUP_I2C6) += setup-i2c6.o | 59 | obj-$(CONFIG_EXYNOS4_SETUP_I2C6) += setup-i2c6.o |
57 | obj-$(CONFIG_EXYNOS4_SETUP_I2C7) += setup-i2c7.o | 60 | obj-$(CONFIG_EXYNOS4_SETUP_I2C7) += setup-i2c7.o |
58 | obj-$(CONFIG_EXYNOS4_SETUP_KEYPAD) += setup-keypad.o | 61 | obj-$(CONFIG_EXYNOS4_SETUP_KEYPAD) += setup-keypad.o |
59 | obj-$(CONFIG_EXYNOS4_SETUP_SDHCI) += setup-sdhci.o | ||
60 | obj-$(CONFIG_EXYNOS4_SETUP_SDHCI_GPIO) += setup-sdhci-gpio.o | 62 | obj-$(CONFIG_EXYNOS4_SETUP_SDHCI_GPIO) += setup-sdhci-gpio.o |
61 | obj-$(CONFIG_EXYNOS4_SETUP_USB_PHY) += setup-usb-phy.o | 63 | obj-$(CONFIG_EXYNOS4_SETUP_USB_PHY) += setup-usb-phy.o |
diff --git a/arch/arm/mach-exynos/clock.c b/arch/arm/mach-exynos/clock.c index 2894f0adef5c..5d8d4831e244 100644 --- a/arch/arm/mach-exynos/clock.c +++ b/arch/arm/mach-exynos/clock.c | |||
@@ -553,16 +553,6 @@ static struct clk init_clocks_off[] = { | |||
553 | .enable = exynos4_clk_dac_ctrl, | 553 | .enable = exynos4_clk_dac_ctrl, |
554 | .ctrlbit = (1 << 0), | 554 | .ctrlbit = (1 << 0), |
555 | }, { | 555 | }, { |
556 | .name = "dma", | ||
557 | .devname = "dma-pl330.0", | ||
558 | .enable = exynos4_clk_ip_fsys_ctrl, | ||
559 | .ctrlbit = (1 << 0), | ||
560 | }, { | ||
561 | .name = "dma", | ||
562 | .devname = "dma-pl330.1", | ||
563 | .enable = exynos4_clk_ip_fsys_ctrl, | ||
564 | .ctrlbit = (1 << 1), | ||
565 | }, { | ||
566 | .name = "adc", | 556 | .name = "adc", |
567 | .enable = exynos4_clk_ip_peril_ctrl, | 557 | .enable = exynos4_clk_ip_peril_ctrl, |
568 | .ctrlbit = (1 << 15), | 558 | .ctrlbit = (1 << 15), |
@@ -778,6 +768,20 @@ static struct clk init_clocks[] = { | |||
778 | } | 768 | } |
779 | }; | 769 | }; |
780 | 770 | ||
771 | static struct clk clk_pdma0 = { | ||
772 | .name = "dma", | ||
773 | .devname = "dma-pl330.0", | ||
774 | .enable = exynos4_clk_ip_fsys_ctrl, | ||
775 | .ctrlbit = (1 << 0), | ||
776 | }; | ||
777 | |||
778 | static struct clk clk_pdma1 = { | ||
779 | .name = "dma", | ||
780 | .devname = "dma-pl330.1", | ||
781 | .enable = exynos4_clk_ip_fsys_ctrl, | ||
782 | .ctrlbit = (1 << 1), | ||
783 | }; | ||
784 | |||
781 | struct clk *clkset_group_list[] = { | 785 | struct clk *clkset_group_list[] = { |
782 | [0] = &clk_ext_xtal_mux, | 786 | [0] = &clk_ext_xtal_mux, |
783 | [1] = &clk_xusbxti, | 787 | [1] = &clk_xusbxti, |
@@ -1009,46 +1013,6 @@ static struct clksrc_clk clk_dout_mmc4 = { | |||
1009 | 1013 | ||
1010 | static struct clksrc_clk clksrcs[] = { | 1014 | static struct clksrc_clk clksrcs[] = { |
1011 | { | 1015 | { |
1012 | .clk = { | ||
1013 | .name = "uclk1", | ||
1014 | .devname = "s5pv210-uart.0", | ||
1015 | .enable = exynos4_clksrc_mask_peril0_ctrl, | ||
1016 | .ctrlbit = (1 << 0), | ||
1017 | }, | ||
1018 | .sources = &clkset_group, | ||
1019 | .reg_src = { .reg = S5P_CLKSRC_PERIL0, .shift = 0, .size = 4 }, | ||
1020 | .reg_div = { .reg = S5P_CLKDIV_PERIL0, .shift = 0, .size = 4 }, | ||
1021 | }, { | ||
1022 | .clk = { | ||
1023 | .name = "uclk1", | ||
1024 | .devname = "s5pv210-uart.1", | ||
1025 | .enable = exynos4_clksrc_mask_peril0_ctrl, | ||
1026 | .ctrlbit = (1 << 4), | ||
1027 | }, | ||
1028 | .sources = &clkset_group, | ||
1029 | .reg_src = { .reg = S5P_CLKSRC_PERIL0, .shift = 4, .size = 4 }, | ||
1030 | .reg_div = { .reg = S5P_CLKDIV_PERIL0, .shift = 4, .size = 4 }, | ||
1031 | }, { | ||
1032 | .clk = { | ||
1033 | .name = "uclk1", | ||
1034 | .devname = "s5pv210-uart.2", | ||
1035 | .enable = exynos4_clksrc_mask_peril0_ctrl, | ||
1036 | .ctrlbit = (1 << 8), | ||
1037 | }, | ||
1038 | .sources = &clkset_group, | ||
1039 | .reg_src = { .reg = S5P_CLKSRC_PERIL0, .shift = 8, .size = 4 }, | ||
1040 | .reg_div = { .reg = S5P_CLKDIV_PERIL0, .shift = 8, .size = 4 }, | ||
1041 | }, { | ||
1042 | .clk = { | ||
1043 | .name = "uclk1", | ||
1044 | .devname = "s5pv210-uart.3", | ||
1045 | .enable = exynos4_clksrc_mask_peril0_ctrl, | ||
1046 | .ctrlbit = (1 << 12), | ||
1047 | }, | ||
1048 | .sources = &clkset_group, | ||
1049 | .reg_src = { .reg = S5P_CLKSRC_PERIL0, .shift = 12, .size = 4 }, | ||
1050 | .reg_div = { .reg = S5P_CLKDIV_PERIL0, .shift = 12, .size = 4 }, | ||
1051 | }, { | ||
1052 | .clk = { | 1016 | .clk = { |
1053 | .name = "sclk_pwm", | 1017 | .name = "sclk_pwm", |
1054 | .enable = exynos4_clksrc_mask_peril0_ctrl, | 1018 | .enable = exynos4_clksrc_mask_peril0_ctrl, |
@@ -1192,42 +1156,6 @@ static struct clksrc_clk clksrcs[] = { | |||
1192 | .reg_div = { .reg = S5P_CLKDIV_MFC, .shift = 0, .size = 4 }, | 1156 | .reg_div = { .reg = S5P_CLKDIV_MFC, .shift = 0, .size = 4 }, |
1193 | }, { | 1157 | }, { |
1194 | .clk = { | 1158 | .clk = { |
1195 | .name = "sclk_mmc", | ||
1196 | .devname = "s3c-sdhci.0", | ||
1197 | .parent = &clk_dout_mmc0.clk, | ||
1198 | .enable = exynos4_clksrc_mask_fsys_ctrl, | ||
1199 | .ctrlbit = (1 << 0), | ||
1200 | }, | ||
1201 | .reg_div = { .reg = S5P_CLKDIV_FSYS1, .shift = 8, .size = 8 }, | ||
1202 | }, { | ||
1203 | .clk = { | ||
1204 | .name = "sclk_mmc", | ||
1205 | .devname = "s3c-sdhci.1", | ||
1206 | .parent = &clk_dout_mmc1.clk, | ||
1207 | .enable = exynos4_clksrc_mask_fsys_ctrl, | ||
1208 | .ctrlbit = (1 << 4), | ||
1209 | }, | ||
1210 | .reg_div = { .reg = S5P_CLKDIV_FSYS1, .shift = 24, .size = 8 }, | ||
1211 | }, { | ||
1212 | .clk = { | ||
1213 | .name = "sclk_mmc", | ||
1214 | .devname = "s3c-sdhci.2", | ||
1215 | .parent = &clk_dout_mmc2.clk, | ||
1216 | .enable = exynos4_clksrc_mask_fsys_ctrl, | ||
1217 | .ctrlbit = (1 << 8), | ||
1218 | }, | ||
1219 | .reg_div = { .reg = S5P_CLKDIV_FSYS2, .shift = 8, .size = 8 }, | ||
1220 | }, { | ||
1221 | .clk = { | ||
1222 | .name = "sclk_mmc", | ||
1223 | .devname = "s3c-sdhci.3", | ||
1224 | .parent = &clk_dout_mmc3.clk, | ||
1225 | .enable = exynos4_clksrc_mask_fsys_ctrl, | ||
1226 | .ctrlbit = (1 << 12), | ||
1227 | }, | ||
1228 | .reg_div = { .reg = S5P_CLKDIV_FSYS2, .shift = 24, .size = 8 }, | ||
1229 | }, { | ||
1230 | .clk = { | ||
1231 | .name = "sclk_dwmmc", | 1159 | .name = "sclk_dwmmc", |
1232 | .parent = &clk_dout_mmc4.clk, | 1160 | .parent = &clk_dout_mmc4.clk, |
1233 | .enable = exynos4_clksrc_mask_fsys_ctrl, | 1161 | .enable = exynos4_clksrc_mask_fsys_ctrl, |
@@ -1237,6 +1165,98 @@ static struct clksrc_clk clksrcs[] = { | |||
1237 | } | 1165 | } |
1238 | }; | 1166 | }; |
1239 | 1167 | ||
1168 | static struct clksrc_clk clk_sclk_uart0 = { | ||
1169 | .clk = { | ||
1170 | .name = "uclk1", | ||
1171 | .devname = "exynos4210-uart.0", | ||
1172 | .enable = exynos4_clksrc_mask_peril0_ctrl, | ||
1173 | .ctrlbit = (1 << 0), | ||
1174 | }, | ||
1175 | .sources = &clkset_group, | ||
1176 | .reg_src = { .reg = S5P_CLKSRC_PERIL0, .shift = 0, .size = 4 }, | ||
1177 | .reg_div = { .reg = S5P_CLKDIV_PERIL0, .shift = 0, .size = 4 }, | ||
1178 | }; | ||
1179 | |||
1180 | static struct clksrc_clk clk_sclk_uart1 = { | ||
1181 | .clk = { | ||
1182 | .name = "uclk1", | ||
1183 | .devname = "exynos4210-uart.1", | ||
1184 | .enable = exynos4_clksrc_mask_peril0_ctrl, | ||
1185 | .ctrlbit = (1 << 4), | ||
1186 | }, | ||
1187 | .sources = &clkset_group, | ||
1188 | .reg_src = { .reg = S5P_CLKSRC_PERIL0, .shift = 4, .size = 4 }, | ||
1189 | .reg_div = { .reg = S5P_CLKDIV_PERIL0, .shift = 4, .size = 4 }, | ||
1190 | }; | ||
1191 | |||
1192 | static struct clksrc_clk clk_sclk_uart2 = { | ||
1193 | .clk = { | ||
1194 | .name = "uclk1", | ||
1195 | .devname = "exynos4210-uart.2", | ||
1196 | .enable = exynos4_clksrc_mask_peril0_ctrl, | ||
1197 | .ctrlbit = (1 << 8), | ||
1198 | }, | ||
1199 | .sources = &clkset_group, | ||
1200 | .reg_src = { .reg = S5P_CLKSRC_PERIL0, .shift = 8, .size = 4 }, | ||
1201 | .reg_div = { .reg = S5P_CLKDIV_PERIL0, .shift = 8, .size = 4 }, | ||
1202 | }; | ||
1203 | |||
1204 | static struct clksrc_clk clk_sclk_uart3 = { | ||
1205 | .clk = { | ||
1206 | .name = "uclk1", | ||
1207 | .devname = "exynos4210-uart.3", | ||
1208 | .enable = exynos4_clksrc_mask_peril0_ctrl, | ||
1209 | .ctrlbit = (1 << 12), | ||
1210 | }, | ||
1211 | .sources = &clkset_group, | ||
1212 | .reg_src = { .reg = S5P_CLKSRC_PERIL0, .shift = 12, .size = 4 }, | ||
1213 | .reg_div = { .reg = S5P_CLKDIV_PERIL0, .shift = 12, .size = 4 }, | ||
1214 | }; | ||
1215 | |||
1216 | static struct clksrc_clk clk_sclk_mmc0 = { | ||
1217 | .clk = { | ||
1218 | .name = "sclk_mmc", | ||
1219 | .devname = "s3c-sdhci.0", | ||
1220 | .parent = &clk_dout_mmc0.clk, | ||
1221 | .enable = exynos4_clksrc_mask_fsys_ctrl, | ||
1222 | .ctrlbit = (1 << 0), | ||
1223 | }, | ||
1224 | .reg_div = { .reg = S5P_CLKDIV_FSYS1, .shift = 8, .size = 8 }, | ||
1225 | }; | ||
1226 | |||
1227 | static struct clksrc_clk clk_sclk_mmc1 = { | ||
1228 | .clk = { | ||
1229 | .name = "sclk_mmc", | ||
1230 | .devname = "s3c-sdhci.1", | ||
1231 | .parent = &clk_dout_mmc1.clk, | ||
1232 | .enable = exynos4_clksrc_mask_fsys_ctrl, | ||
1233 | .ctrlbit = (1 << 4), | ||
1234 | }, | ||
1235 | .reg_div = { .reg = S5P_CLKDIV_FSYS1, .shift = 24, .size = 8 }, | ||
1236 | }; | ||
1237 | |||
1238 | static struct clksrc_clk clk_sclk_mmc2 = { | ||
1239 | .clk = { | ||
1240 | .name = "sclk_mmc", | ||
1241 | .devname = "s3c-sdhci.2", | ||
1242 | .parent = &clk_dout_mmc2.clk, | ||
1243 | .enable = exynos4_clksrc_mask_fsys_ctrl, | ||
1244 | .ctrlbit = (1 << 8), | ||
1245 | }, | ||
1246 | .reg_div = { .reg = S5P_CLKDIV_FSYS2, .shift = 8, .size = 8 }, | ||
1247 | }; | ||
1248 | |||
1249 | static struct clksrc_clk clk_sclk_mmc3 = { | ||
1250 | .clk = { | ||
1251 | .name = "sclk_mmc", | ||
1252 | .devname = "s3c-sdhci.3", | ||
1253 | .parent = &clk_dout_mmc3.clk, | ||
1254 | .enable = exynos4_clksrc_mask_fsys_ctrl, | ||
1255 | .ctrlbit = (1 << 12), | ||
1256 | }, | ||
1257 | .reg_div = { .reg = S5P_CLKDIV_FSYS2, .shift = 24, .size = 8 }, | ||
1258 | }; | ||
1259 | |||
1240 | /* Clock initialization code */ | 1260 | /* Clock initialization code */ |
1241 | static struct clksrc_clk *sysclks[] = { | 1261 | static struct clksrc_clk *sysclks[] = { |
1242 | &clk_mout_apll, | 1262 | &clk_mout_apll, |
@@ -1271,6 +1291,35 @@ static struct clksrc_clk *sysclks[] = { | |||
1271 | &clk_mout_mfc1, | 1291 | &clk_mout_mfc1, |
1272 | }; | 1292 | }; |
1273 | 1293 | ||
1294 | static struct clk *clk_cdev[] = { | ||
1295 | &clk_pdma0, | ||
1296 | &clk_pdma1, | ||
1297 | }; | ||
1298 | |||
1299 | static struct clksrc_clk *clksrc_cdev[] = { | ||
1300 | &clk_sclk_uart0, | ||
1301 | &clk_sclk_uart1, | ||
1302 | &clk_sclk_uart2, | ||
1303 | &clk_sclk_uart3, | ||
1304 | &clk_sclk_mmc0, | ||
1305 | &clk_sclk_mmc1, | ||
1306 | &clk_sclk_mmc2, | ||
1307 | &clk_sclk_mmc3, | ||
1308 | }; | ||
1309 | |||
1310 | static struct clk_lookup exynos4_clk_lookup[] = { | ||
1311 | CLKDEV_INIT("exynos4210-uart.0", "clk_uart_baud0", &clk_sclk_uart0.clk), | ||
1312 | CLKDEV_INIT("exynos4210-uart.1", "clk_uart_baud0", &clk_sclk_uart1.clk), | ||
1313 | CLKDEV_INIT("exynos4210-uart.2", "clk_uart_baud0", &clk_sclk_uart2.clk), | ||
1314 | CLKDEV_INIT("exynos4210-uart.3", "clk_uart_baud0", &clk_sclk_uart3.clk), | ||
1315 | CLKDEV_INIT("s3c-sdhci.0", "mmc_busclk.2", &clk_sclk_mmc0.clk), | ||
1316 | CLKDEV_INIT("s3c-sdhci.1", "mmc_busclk.2", &clk_sclk_mmc1.clk), | ||
1317 | CLKDEV_INIT("s3c-sdhci.2", "mmc_busclk.2", &clk_sclk_mmc2.clk), | ||
1318 | CLKDEV_INIT("s3c-sdhci.3", "mmc_busclk.2", &clk_sclk_mmc3.clk), | ||
1319 | CLKDEV_INIT("dma-pl330.0", "apb_pclk", &clk_pdma0), | ||
1320 | CLKDEV_INIT("dma-pl330.1", "apb_pclk", &clk_pdma1), | ||
1321 | }; | ||
1322 | |||
1274 | static int xtal_rate; | 1323 | static int xtal_rate; |
1275 | 1324 | ||
1276 | static unsigned long exynos4_fout_apll_get_rate(struct clk *clk) | 1325 | static unsigned long exynos4_fout_apll_get_rate(struct clk *clk) |
@@ -1478,11 +1527,19 @@ void __init exynos4_register_clocks(void) | |||
1478 | for (ptr = 0; ptr < ARRAY_SIZE(sclk_tv); ptr++) | 1527 | for (ptr = 0; ptr < ARRAY_SIZE(sclk_tv); ptr++) |
1479 | s3c_register_clksrc(sclk_tv[ptr], 1); | 1528 | s3c_register_clksrc(sclk_tv[ptr], 1); |
1480 | 1529 | ||
1530 | for (ptr = 0; ptr < ARRAY_SIZE(clksrc_cdev); ptr++) | ||
1531 | s3c_register_clksrc(clksrc_cdev[ptr], 1); | ||
1532 | |||
1481 | s3c_register_clksrc(clksrcs, ARRAY_SIZE(clksrcs)); | 1533 | s3c_register_clksrc(clksrcs, ARRAY_SIZE(clksrcs)); |
1482 | s3c_register_clocks(init_clocks, ARRAY_SIZE(init_clocks)); | 1534 | s3c_register_clocks(init_clocks, ARRAY_SIZE(init_clocks)); |
1483 | 1535 | ||
1536 | s3c24xx_register_clocks(clk_cdev, ARRAY_SIZE(clk_cdev)); | ||
1537 | for (ptr = 0; ptr < ARRAY_SIZE(clk_cdev); ptr++) | ||
1538 | s3c_disable_clocks(clk_cdev[ptr], 1); | ||
1539 | |||
1484 | s3c_register_clocks(init_clocks_off, ARRAY_SIZE(init_clocks_off)); | 1540 | s3c_register_clocks(init_clocks_off, ARRAY_SIZE(init_clocks_off)); |
1485 | s3c_disable_clocks(init_clocks_off, ARRAY_SIZE(init_clocks_off)); | 1541 | s3c_disable_clocks(init_clocks_off, ARRAY_SIZE(init_clocks_off)); |
1542 | clkdev_add_table(exynos4_clk_lookup, ARRAY_SIZE(exynos4_clk_lookup)); | ||
1486 | 1543 | ||
1487 | register_syscore_ops(&exynos4_clock_syscore_ops); | 1544 | register_syscore_ops(&exynos4_clock_syscore_ops); |
1488 | s3c24xx_register_clock(&dummy_apb_pclk); | 1545 | s3c24xx_register_clock(&dummy_apb_pclk); |
diff --git a/arch/arm/mach-exynos/cpu.c b/arch/arm/mach-exynos/cpu.c index 90ec247f3b37..0eb7b6a6903d 100644 --- a/arch/arm/mach-exynos/cpu.c +++ b/arch/arm/mach-exynos/cpu.c | |||
@@ -10,6 +10,8 @@ | |||
10 | 10 | ||
11 | #include <linux/sched.h> | 11 | #include <linux/sched.h> |
12 | #include <linux/sysdev.h> | 12 | #include <linux/sysdev.h> |
13 | #include <linux/of.h> | ||
14 | #include <linux/of_irq.h> | ||
13 | 15 | ||
14 | #include <asm/mach/map.h> | 16 | #include <asm/mach/map.h> |
15 | #include <asm/mach/irq.h> | 17 | #include <asm/mach/irq.h> |
@@ -218,13 +220,26 @@ static void exynos4_gic_irq_fix_base(struct irq_data *d) | |||
218 | (gic_bank_offset * smp_processor_id()); | 220 | (gic_bank_offset * smp_processor_id()); |
219 | } | 221 | } |
220 | 222 | ||
223 | #ifdef CONFIG_OF | ||
224 | static const struct of_device_id exynos4_dt_irq_match[] = { | ||
225 | { .compatible = "arm,cortex-a9-gic", .data = gic_of_init, }, | ||
226 | {}, | ||
227 | }; | ||
228 | #endif | ||
229 | |||
221 | void __init exynos4_init_irq(void) | 230 | void __init exynos4_init_irq(void) |
222 | { | 231 | { |
223 | int irq; | 232 | int irq; |
224 | 233 | ||
225 | gic_bank_offset = soc_is_exynos4412() ? 0x4000 : 0x8000; | 234 | gic_bank_offset = soc_is_exynos4412() ? 0x4000 : 0x8000; |
226 | 235 | ||
227 | gic_init(0, IRQ_PPI(0), S5P_VA_GIC_DIST, S5P_VA_GIC_CPU); | 236 | if (!of_have_populated_dt()) |
237 | gic_init(0, IRQ_PPI(0), S5P_VA_GIC_DIST, S5P_VA_GIC_CPU); | ||
238 | #ifdef CONFIG_OF | ||
239 | else | ||
240 | of_irq_init(exynos4_dt_irq_match); | ||
241 | #endif | ||
242 | |||
228 | gic_arch_extn.irq_eoi = exynos4_gic_irq_fix_base; | 243 | gic_arch_extn.irq_eoi = exynos4_gic_irq_fix_base; |
229 | gic_arch_extn.irq_unmask = exynos4_gic_irq_fix_base; | 244 | gic_arch_extn.irq_unmask = exynos4_gic_irq_fix_base; |
230 | gic_arch_extn.irq_mask = exynos4_gic_irq_fix_base; | 245 | gic_arch_extn.irq_mask = exynos4_gic_irq_fix_base; |
diff --git a/arch/arm/mach-exynos/dma.c b/arch/arm/mach-exynos/dma.c index 9667c61e64fb..b10fcd270f07 100644 --- a/arch/arm/mach-exynos/dma.c +++ b/arch/arm/mach-exynos/dma.c | |||
@@ -24,6 +24,7 @@ | |||
24 | #include <linux/dma-mapping.h> | 24 | #include <linux/dma-mapping.h> |
25 | #include <linux/amba/bus.h> | 25 | #include <linux/amba/bus.h> |
26 | #include <linux/amba/pl330.h> | 26 | #include <linux/amba/pl330.h> |
27 | #include <linux/of.h> | ||
27 | 28 | ||
28 | #include <asm/irq.h> | 29 | #include <asm/irq.h> |
29 | #include <plat/devs.h> | 30 | #include <plat/devs.h> |
@@ -35,95 +36,42 @@ | |||
35 | 36 | ||
36 | static u64 dma_dmamask = DMA_BIT_MASK(32); | 37 | static u64 dma_dmamask = DMA_BIT_MASK(32); |
37 | 38 | ||
38 | struct dma_pl330_peri pdma0_peri[28] = { | 39 | u8 pdma0_peri[] = { |
39 | { | 40 | DMACH_PCM0_RX, |
40 | .peri_id = (u8)DMACH_PCM0_RX, | 41 | DMACH_PCM0_TX, |
41 | .rqtype = DEVTOMEM, | 42 | DMACH_PCM2_RX, |
42 | }, { | 43 | DMACH_PCM2_TX, |
43 | .peri_id = (u8)DMACH_PCM0_TX, | 44 | DMACH_MSM_REQ0, |
44 | .rqtype = MEMTODEV, | 45 | DMACH_MSM_REQ2, |
45 | }, { | 46 | DMACH_SPI0_RX, |
46 | .peri_id = (u8)DMACH_PCM2_RX, | 47 | DMACH_SPI0_TX, |
47 | .rqtype = DEVTOMEM, | 48 | DMACH_SPI2_RX, |
48 | }, { | 49 | DMACH_SPI2_TX, |
49 | .peri_id = (u8)DMACH_PCM2_TX, | 50 | DMACH_I2S0S_TX, |
50 | .rqtype = MEMTODEV, | 51 | DMACH_I2S0_RX, |
51 | }, { | 52 | DMACH_I2S0_TX, |
52 | .peri_id = (u8)DMACH_MSM_REQ0, | 53 | DMACH_I2S2_RX, |
53 | }, { | 54 | DMACH_I2S2_TX, |
54 | .peri_id = (u8)DMACH_MSM_REQ2, | 55 | DMACH_UART0_RX, |
55 | }, { | 56 | DMACH_UART0_TX, |
56 | .peri_id = (u8)DMACH_SPI0_RX, | 57 | DMACH_UART2_RX, |
57 | .rqtype = DEVTOMEM, | 58 | DMACH_UART2_TX, |
58 | }, { | 59 | DMACH_UART4_RX, |
59 | .peri_id = (u8)DMACH_SPI0_TX, | 60 | DMACH_UART4_TX, |
60 | .rqtype = MEMTODEV, | 61 | DMACH_SLIMBUS0_RX, |
61 | }, { | 62 | DMACH_SLIMBUS0_TX, |
62 | .peri_id = (u8)DMACH_SPI2_RX, | 63 | DMACH_SLIMBUS2_RX, |
63 | .rqtype = DEVTOMEM, | 64 | DMACH_SLIMBUS2_TX, |
64 | }, { | 65 | DMACH_SLIMBUS4_RX, |
65 | .peri_id = (u8)DMACH_SPI2_TX, | 66 | DMACH_SLIMBUS4_TX, |
66 | .rqtype = MEMTODEV, | 67 | DMACH_AC97_MICIN, |
67 | }, { | 68 | DMACH_AC97_PCMIN, |
68 | .peri_id = (u8)DMACH_I2S0S_TX, | 69 | DMACH_AC97_PCMOUT, |
69 | .rqtype = MEMTODEV, | ||
70 | }, { | ||
71 | .peri_id = (u8)DMACH_I2S0_RX, | ||
72 | .rqtype = DEVTOMEM, | ||
73 | }, { | ||
74 | .peri_id = (u8)DMACH_I2S0_TX, | ||
75 | .rqtype = MEMTODEV, | ||
76 | }, { | ||
77 | .peri_id = (u8)DMACH_UART0_RX, | ||
78 | .rqtype = DEVTOMEM, | ||
79 | }, { | ||
80 | .peri_id = (u8)DMACH_UART0_TX, | ||
81 | .rqtype = MEMTODEV, | ||
82 | }, { | ||
83 | .peri_id = (u8)DMACH_UART2_RX, | ||
84 | .rqtype = DEVTOMEM, | ||
85 | }, { | ||
86 | .peri_id = (u8)DMACH_UART2_TX, | ||
87 | .rqtype = MEMTODEV, | ||
88 | }, { | ||
89 | .peri_id = (u8)DMACH_UART4_RX, | ||
90 | .rqtype = DEVTOMEM, | ||
91 | }, { | ||
92 | .peri_id = (u8)DMACH_UART4_TX, | ||
93 | .rqtype = MEMTODEV, | ||
94 | }, { | ||
95 | .peri_id = (u8)DMACH_SLIMBUS0_RX, | ||
96 | .rqtype = DEVTOMEM, | ||
97 | }, { | ||
98 | .peri_id = (u8)DMACH_SLIMBUS0_TX, | ||
99 | .rqtype = MEMTODEV, | ||
100 | }, { | ||
101 | .peri_id = (u8)DMACH_SLIMBUS2_RX, | ||
102 | .rqtype = DEVTOMEM, | ||
103 | }, { | ||
104 | .peri_id = (u8)DMACH_SLIMBUS2_TX, | ||
105 | .rqtype = MEMTODEV, | ||
106 | }, { | ||
107 | .peri_id = (u8)DMACH_SLIMBUS4_RX, | ||
108 | .rqtype = DEVTOMEM, | ||
109 | }, { | ||
110 | .peri_id = (u8)DMACH_SLIMBUS4_TX, | ||
111 | .rqtype = MEMTODEV, | ||
112 | }, { | ||
113 | .peri_id = (u8)DMACH_AC97_MICIN, | ||
114 | .rqtype = DEVTOMEM, | ||
115 | }, { | ||
116 | .peri_id = (u8)DMACH_AC97_PCMIN, | ||
117 | .rqtype = DEVTOMEM, | ||
118 | }, { | ||
119 | .peri_id = (u8)DMACH_AC97_PCMOUT, | ||
120 | .rqtype = MEMTODEV, | ||
121 | }, | ||
122 | }; | 70 | }; |
123 | 71 | ||
124 | struct dma_pl330_platdata exynos4_pdma0_pdata = { | 72 | struct dma_pl330_platdata exynos4_pdma0_pdata = { |
125 | .nr_valid_peri = ARRAY_SIZE(pdma0_peri), | 73 | .nr_valid_peri = ARRAY_SIZE(pdma0_peri), |
126 | .peri = pdma0_peri, | 74 | .peri_id = pdma0_peri, |
127 | }; | 75 | }; |
128 | 76 | ||
129 | struct amba_device exynos4_device_pdma0 = { | 77 | struct amba_device exynos4_device_pdma0 = { |
@@ -142,86 +90,37 @@ struct amba_device exynos4_device_pdma0 = { | |||
142 | .periphid = 0x00041330, | 90 | .periphid = 0x00041330, |
143 | }; | 91 | }; |
144 | 92 | ||
145 | struct dma_pl330_peri pdma1_peri[25] = { | 93 | u8 pdma1_peri[] = { |
146 | { | 94 | DMACH_PCM0_RX, |
147 | .peri_id = (u8)DMACH_PCM0_RX, | 95 | DMACH_PCM0_TX, |
148 | .rqtype = DEVTOMEM, | 96 | DMACH_PCM1_RX, |
149 | }, { | 97 | DMACH_PCM1_TX, |
150 | .peri_id = (u8)DMACH_PCM0_TX, | 98 | DMACH_MSM_REQ1, |
151 | .rqtype = MEMTODEV, | 99 | DMACH_MSM_REQ3, |
152 | }, { | 100 | DMACH_SPI1_RX, |
153 | .peri_id = (u8)DMACH_PCM1_RX, | 101 | DMACH_SPI1_TX, |
154 | .rqtype = DEVTOMEM, | 102 | DMACH_I2S0S_TX, |
155 | }, { | 103 | DMACH_I2S0_RX, |
156 | .peri_id = (u8)DMACH_PCM1_TX, | 104 | DMACH_I2S0_TX, |
157 | .rqtype = MEMTODEV, | 105 | DMACH_I2S1_RX, |
158 | }, { | 106 | DMACH_I2S1_TX, |
159 | .peri_id = (u8)DMACH_MSM_REQ1, | 107 | DMACH_UART0_RX, |
160 | }, { | 108 | DMACH_UART0_TX, |
161 | .peri_id = (u8)DMACH_MSM_REQ3, | 109 | DMACH_UART1_RX, |
162 | }, { | 110 | DMACH_UART1_TX, |
163 | .peri_id = (u8)DMACH_SPI1_RX, | 111 | DMACH_UART3_RX, |
164 | .rqtype = DEVTOMEM, | 112 | DMACH_UART3_TX, |
165 | }, { | 113 | DMACH_SLIMBUS1_RX, |
166 | .peri_id = (u8)DMACH_SPI1_TX, | 114 | DMACH_SLIMBUS1_TX, |
167 | .rqtype = MEMTODEV, | 115 | DMACH_SLIMBUS3_RX, |
168 | }, { | 116 | DMACH_SLIMBUS3_TX, |
169 | .peri_id = (u8)DMACH_I2S0S_TX, | 117 | DMACH_SLIMBUS5_RX, |
170 | .rqtype = MEMTODEV, | 118 | DMACH_SLIMBUS5_TX, |
171 | }, { | ||
172 | .peri_id = (u8)DMACH_I2S0_RX, | ||
173 | .rqtype = DEVTOMEM, | ||
174 | }, { | ||
175 | .peri_id = (u8)DMACH_I2S0_TX, | ||
176 | .rqtype = MEMTODEV, | ||
177 | }, { | ||
178 | .peri_id = (u8)DMACH_I2S1_RX, | ||
179 | .rqtype = DEVTOMEM, | ||
180 | }, { | ||
181 | .peri_id = (u8)DMACH_I2S1_TX, | ||
182 | .rqtype = MEMTODEV, | ||
183 | }, { | ||
184 | .peri_id = (u8)DMACH_UART0_RX, | ||
185 | .rqtype = DEVTOMEM, | ||
186 | }, { | ||
187 | .peri_id = (u8)DMACH_UART0_TX, | ||
188 | .rqtype = MEMTODEV, | ||
189 | }, { | ||
190 | .peri_id = (u8)DMACH_UART1_RX, | ||
191 | .rqtype = DEVTOMEM, | ||
192 | }, { | ||
193 | .peri_id = (u8)DMACH_UART1_TX, | ||
194 | .rqtype = MEMTODEV, | ||
195 | }, { | ||
196 | .peri_id = (u8)DMACH_UART3_RX, | ||
197 | .rqtype = DEVTOMEM, | ||
198 | }, { | ||
199 | .peri_id = (u8)DMACH_UART3_TX, | ||
200 | .rqtype = MEMTODEV, | ||
201 | }, { | ||
202 | .peri_id = (u8)DMACH_SLIMBUS1_RX, | ||
203 | .rqtype = DEVTOMEM, | ||
204 | }, { | ||
205 | .peri_id = (u8)DMACH_SLIMBUS1_TX, | ||
206 | .rqtype = MEMTODEV, | ||
207 | }, { | ||
208 | .peri_id = (u8)DMACH_SLIMBUS3_RX, | ||
209 | .rqtype = DEVTOMEM, | ||
210 | }, { | ||
211 | .peri_id = (u8)DMACH_SLIMBUS3_TX, | ||
212 | .rqtype = MEMTODEV, | ||
213 | }, { | ||
214 | .peri_id = (u8)DMACH_SLIMBUS5_RX, | ||
215 | .rqtype = DEVTOMEM, | ||
216 | }, { | ||
217 | .peri_id = (u8)DMACH_SLIMBUS5_TX, | ||
218 | .rqtype = MEMTODEV, | ||
219 | }, | ||
220 | }; | 119 | }; |
221 | 120 | ||
222 | struct dma_pl330_platdata exynos4_pdma1_pdata = { | 121 | struct dma_pl330_platdata exynos4_pdma1_pdata = { |
223 | .nr_valid_peri = ARRAY_SIZE(pdma1_peri), | 122 | .nr_valid_peri = ARRAY_SIZE(pdma1_peri), |
224 | .peri = pdma1_peri, | 123 | .peri_id = pdma1_peri, |
225 | }; | 124 | }; |
226 | 125 | ||
227 | struct amba_device exynos4_device_pdma1 = { | 126 | struct amba_device exynos4_device_pdma1 = { |
@@ -242,7 +141,15 @@ struct amba_device exynos4_device_pdma1 = { | |||
242 | 141 | ||
243 | static int __init exynos4_dma_init(void) | 142 | static int __init exynos4_dma_init(void) |
244 | { | 143 | { |
144 | if (of_have_populated_dt()) | ||
145 | return 0; | ||
146 | |||
147 | dma_cap_set(DMA_SLAVE, exynos4_pdma0_pdata.cap_mask); | ||
148 | dma_cap_set(DMA_CYCLIC, exynos4_pdma0_pdata.cap_mask); | ||
245 | amba_device_register(&exynos4_device_pdma0, &iomem_resource); | 149 | amba_device_register(&exynos4_device_pdma0, &iomem_resource); |
150 | |||
151 | dma_cap_set(DMA_SLAVE, exynos4_pdma1_pdata.cap_mask); | ||
152 | dma_cap_set(DMA_CYCLIC, exynos4_pdma1_pdata.cap_mask); | ||
246 | amba_device_register(&exynos4_device_pdma1, &iomem_resource); | 153 | amba_device_register(&exynos4_device_pdma1, &iomem_resource); |
247 | 154 | ||
248 | return 0; | 155 | return 0; |
diff --git a/arch/arm/mach-exynos/include/mach/entry-macro.S b/arch/arm/mach-exynos/include/mach/entry-macro.S index f5e9fd8e37b4..d7dfcd7eb921 100644 --- a/arch/arm/mach-exynos/include/mach/entry-macro.S +++ b/arch/arm/mach-exynos/include/mach/entry-macro.S | |||
@@ -72,7 +72,6 @@ | |||
72 | cmpcc \irqnr, \irqnr | 72 | cmpcc \irqnr, \irqnr |
73 | cmpne \irqnr, \tmp | 73 | cmpne \irqnr, \tmp |
74 | cmpcs \irqnr, \irqnr | 74 | cmpcs \irqnr, \irqnr |
75 | addne \irqnr, \irqnr, #32 | ||
76 | 75 | ||
77 | .endm | 76 | .endm |
78 | 77 | ||
diff --git a/arch/arm/mach-exynos/include/mach/irqs.h b/arch/arm/mach-exynos/include/mach/irqs.h index dfd4b7eecb90..713dd5251c64 100644 --- a/arch/arm/mach-exynos/include/mach/irqs.h +++ b/arch/arm/mach-exynos/include/mach/irqs.h | |||
@@ -17,13 +17,13 @@ | |||
17 | 17 | ||
18 | /* PPI: Private Peripheral Interrupt */ | 18 | /* PPI: Private Peripheral Interrupt */ |
19 | 19 | ||
20 | #define IRQ_PPI(x) S5P_IRQ(x+16) | 20 | #define IRQ_PPI(x) (x+16) |
21 | 21 | ||
22 | #define IRQ_MCT_LOCALTIMER IRQ_PPI(12) | 22 | #define IRQ_MCT_LOCALTIMER IRQ_PPI(12) |
23 | 23 | ||
24 | /* SPI: Shared Peripheral Interrupt */ | 24 | /* SPI: Shared Peripheral Interrupt */ |
25 | 25 | ||
26 | #define IRQ_SPI(x) S5P_IRQ(x+32) | 26 | #define IRQ_SPI(x) (x+32) |
27 | 27 | ||
28 | #define IRQ_EINT0 IRQ_SPI(16) | 28 | #define IRQ_EINT0 IRQ_SPI(16) |
29 | #define IRQ_EINT1 IRQ_SPI(17) | 29 | #define IRQ_EINT1 IRQ_SPI(17) |
@@ -163,7 +163,9 @@ | |||
163 | #define IRQ_GPIO2_NR_GROUPS 9 | 163 | #define IRQ_GPIO2_NR_GROUPS 9 |
164 | #define IRQ_GPIO_END (S5P_GPIOINT_BASE + S5P_GPIOINT_COUNT) | 164 | #define IRQ_GPIO_END (S5P_GPIOINT_BASE + S5P_GPIOINT_COUNT) |
165 | 165 | ||
166 | #define IRQ_TIMER_BASE (IRQ_GPIO_END + 64) | ||
167 | |||
166 | /* Set the default NR_IRQS */ | 168 | /* Set the default NR_IRQS */ |
167 | #define NR_IRQS (IRQ_GPIO_END + 64) | 169 | #define NR_IRQS (IRQ_TIMER_BASE + IRQ_TIMER_COUNT) |
168 | 170 | ||
169 | #endif /* __ASM_ARCH_IRQS_H */ | 171 | #endif /* __ASM_ARCH_IRQS_H */ |
diff --git a/arch/arm/mach-exynos/init.c b/arch/arm/mach-exynos/init.c index a8a83e3881a4..5b35978029be 100644 --- a/arch/arm/mach-exynos/init.c +++ b/arch/arm/mach-exynos/init.c | |||
@@ -14,29 +14,14 @@ | |||
14 | #include <plat/devs.h> | 14 | #include <plat/devs.h> |
15 | #include <plat/regs-serial.h> | 15 | #include <plat/regs-serial.h> |
16 | 16 | ||
17 | static struct s3c24xx_uart_clksrc exynos4_serial_clocks[] = { | ||
18 | [0] = { | ||
19 | .name = "uclk1", | ||
20 | .divisor = 1, | ||
21 | .min_baud = 0, | ||
22 | .max_baud = 0, | ||
23 | }, | ||
24 | }; | ||
25 | |||
26 | /* uart registration process */ | 17 | /* uart registration process */ |
27 | void __init exynos4_common_init_uarts(struct s3c2410_uartcfg *cfg, int no) | 18 | void __init exynos4_common_init_uarts(struct s3c2410_uartcfg *cfg, int no) |
28 | { | 19 | { |
29 | struct s3c2410_uartcfg *tcfg = cfg; | 20 | struct s3c2410_uartcfg *tcfg = cfg; |
30 | u32 ucnt; | 21 | u32 ucnt; |
31 | 22 | ||
32 | for (ucnt = 0; ucnt < no; ucnt++, tcfg++) { | 23 | for (ucnt = 0; ucnt < no; ucnt++, tcfg++) |
33 | if (!tcfg->clocks) { | 24 | tcfg->has_fracval = 1; |
34 | tcfg->has_fracval = 1; | ||
35 | tcfg->clocks = exynos4_serial_clocks; | ||
36 | tcfg->clocks_size = ARRAY_SIZE(exynos4_serial_clocks); | ||
37 | } | ||
38 | tcfg->flags |= NO_NEED_CHECK_CLKSRC; | ||
39 | } | ||
40 | 25 | ||
41 | s3c24xx_init_uartdevs("s5pv210-uart", s5p_uart_resources, cfg, no); | 26 | s3c24xx_init_uartdevs("exynos4210-uart", s5p_uart_resources, cfg, no); |
42 | } | 27 | } |
diff --git a/arch/arm/mach-exynos/mach-exynos4-dt.c b/arch/arm/mach-exynos/mach-exynos4-dt.c new file mode 100644 index 000000000000..85fa02767d67 --- /dev/null +++ b/arch/arm/mach-exynos/mach-exynos4-dt.c | |||
@@ -0,0 +1,85 @@ | |||
1 | /* | ||
2 | * Samsung's Exynos4210 flattened device tree enabled machine | ||
3 | * | ||
4 | * Copyright (c) 2010-2011 Samsung Electronics Co., Ltd. | ||
5 | * http://www.samsung.com | ||
6 | * Copyright (c) 2010-2011 Linaro Ltd. | ||
7 | * www.linaro.org | ||
8 | * | ||
9 | * This program is free software; you can redistribute it and/or modify | ||
10 | * it under the terms of the GNU General Public License version 2 as | ||
11 | * published by the Free Software Foundation. | ||
12 | */ | ||
13 | |||
14 | #include <linux/of_platform.h> | ||
15 | #include <linux/serial_core.h> | ||
16 | |||
17 | #include <asm/mach/arch.h> | ||
18 | #include <mach/map.h> | ||
19 | |||
20 | #include <plat/cpu.h> | ||
21 | #include <plat/regs-serial.h> | ||
22 | #include <plat/exynos4.h> | ||
23 | |||
24 | /* | ||
25 | * The following lookup table is used to override device names when devices | ||
26 | * are registered from device tree. This is temporarily added to enable | ||
27 | * device tree support addition for the Exynos4 architecture. | ||
28 | * | ||
29 | * For drivers that require platform data to be provided from the machine | ||
30 | * file, a platform data pointer can also be supplied along with the | ||
31 | * devices names. Usually, the platform data elements that cannot be parsed | ||
32 | * from the device tree by the drivers (example: function pointers) are | ||
33 | * supplied. But it should be noted that this is a temporary mechanism and | ||
34 | * at some point, the drivers should be capable of parsing all the platform | ||
35 | * data from the device tree. | ||
36 | */ | ||
37 | static const struct of_dev_auxdata exynos4210_auxdata_lookup[] __initconst = { | ||
38 | OF_DEV_AUXDATA("samsung,exynos4210-uart", S5P_PA_UART0, | ||
39 | "exynos4210-uart.0", NULL), | ||
40 | OF_DEV_AUXDATA("samsung,exynos4210-uart", S5P_PA_UART1, | ||
41 | "exynos4210-uart.1", NULL), | ||
42 | OF_DEV_AUXDATA("samsung,exynos4210-uart", S5P_PA_UART2, | ||
43 | "exynos4210-uart.2", NULL), | ||
44 | OF_DEV_AUXDATA("samsung,exynos4210-uart", S5P_PA_UART3, | ||
45 | "exynos4210-uart.3", NULL), | ||
46 | OF_DEV_AUXDATA("samsung,exynos4210-sdhci", EXYNOS4_PA_HSMMC(0), | ||
47 | "exynos4-sdhci.0", NULL), | ||
48 | OF_DEV_AUXDATA("samsung,exynos4210-sdhci", EXYNOS4_PA_HSMMC(1), | ||
49 | "exynos4-sdhci.1", NULL), | ||
50 | OF_DEV_AUXDATA("samsung,exynos4210-sdhci", EXYNOS4_PA_HSMMC(2), | ||
51 | "exynos4-sdhci.2", NULL), | ||
52 | OF_DEV_AUXDATA("samsung,exynos4210-sdhci", EXYNOS4_PA_HSMMC(3), | ||
53 | "exynos4-sdhci.3", NULL), | ||
54 | OF_DEV_AUXDATA("samsung,s3c2440-i2c", EXYNOS4_PA_IIC(0), | ||
55 | "s3c2440-i2c.0", NULL), | ||
56 | OF_DEV_AUXDATA("arm,pl330", EXYNOS4_PA_PDMA0, "dma-pl330.0", NULL), | ||
57 | OF_DEV_AUXDATA("arm,pl330", EXYNOS4_PA_PDMA1, "dma-pl330.1", NULL), | ||
58 | {}, | ||
59 | }; | ||
60 | |||
61 | static void __init exynos4210_dt_map_io(void) | ||
62 | { | ||
63 | s5p_init_io(NULL, 0, S5P_VA_CHIPID); | ||
64 | s3c24xx_init_clocks(24000000); | ||
65 | } | ||
66 | |||
67 | static void __init exynos4210_dt_machine_init(void) | ||
68 | { | ||
69 | of_platform_populate(NULL, of_default_bus_match_table, | ||
70 | exynos4210_auxdata_lookup, NULL); | ||
71 | } | ||
72 | |||
73 | static char const *exynos4210_dt_compat[] __initdata = { | ||
74 | "samsung,exynos4210", | ||
75 | NULL | ||
76 | }; | ||
77 | |||
78 | DT_MACHINE_START(EXYNOS4210_DT, "Samsung Exynos4 (Flattened Device Tree)") | ||
79 | /* Maintainer: Thomas Abraham <thomas.abraham@linaro.org> */ | ||
80 | .init_irq = exynos4_init_irq, | ||
81 | .map_io = exynos4210_dt_map_io, | ||
82 | .init_machine = exynos4210_dt_machine_init, | ||
83 | .timer = &exynos4_timer, | ||
84 | .dt_compat = exynos4210_dt_compat, | ||
85 | MACHINE_END | ||
diff --git a/arch/arm/mach-exynos/setup-sdhci.c b/arch/arm/mach-exynos/setup-sdhci.c deleted file mode 100644 index 92937b410906..000000000000 --- a/arch/arm/mach-exynos/setup-sdhci.c +++ /dev/null | |||
@@ -1,22 +0,0 @@ | |||
1 | /* linux/arch/arm/mach-exynos4/setup-sdhci.c | ||
2 | * | ||
3 | * Copyright (c) 2010-2011 Samsung Electronics Co., Ltd. | ||
4 | * http://www.samsung.com | ||
5 | * | ||
6 | * EXYNOS4 - Helper functions for settign up SDHCI device(s) (HSMMC) | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | */ | ||
12 | |||
13 | #include <linux/types.h> | ||
14 | |||
15 | /* clock sources for the mmc bus clock, order as for the ctrl2[5..4] */ | ||
16 | |||
17 | char *exynos4_hsmmc_clksrcs[4] = { | ||
18 | [0] = NULL, | ||
19 | [1] = NULL, | ||
20 | [2] = "sclk_mmc", /* mmc_bus */ | ||
21 | [3] = NULL, | ||
22 | }; | ||