diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2012-01-09 17:28:38 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-01-09 17:28:38 -0500 |
commit | dfc1ebe76663d582a01c9dc572395cf8086d01de (patch) | |
tree | 54a5ac91214a90f82c27b6e38099a4470837729e /arch/arm/mach-exynos | |
parent | acc952c1f373bf3f66cc7a10680eee1762bed40b (diff) | |
parent | b001befe58691ef3627458cd814e8cee7f845c5f (diff) |
Merge tag 'dt' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc
Device tree conversions for samsung and tegra
Both platforms had some initial device tree support, but this adds
much more to actually make it usable.
* tag 'dt' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc: (45 commits)
ARM: dts: Add intial dts file for EXYNOS4210 SoC, SMDKV310 and ORIGEN
ARM: EXYNOS: Add Exynos4 device tree enabled board file
rtc: rtc-s3c: Add device tree support
input: samsung-keypad: Add device tree support
ARM: S5PV210: Modify platform data for pl330 driver
ARM: S5PC100: Modify platform data for pl330 driver
ARM: S5P64x0: Modify platform data for pl330 driver
ARM: EXYNOS: Add a alias for pdma clocks
ARM: EXYNOS: Limit usage of pl330 device instance to non-dt build
ARM: SAMSUNG: Add device tree support for pl330 dma engine wrappers
DMA: PL330: Add device tree support
ARM: EXYNOS: Modify platform data for pl330 driver
DMA: PL330: Infer transfer direction from transfer request instead of platform data
DMA: PL330: move filter function into driver
serial: samsung: Fix build for non-Exynos4210 devices
serial: samsung: add device tree support
serial: samsung: merge probe() function from all SoC specific extensions
serial: samsung: merge all SoC specific port reset functions
ARM: SAMSUNG: register uart clocks to clock lookup list
serial: samsung: remove all uses of get_clksrc and set_clksrc
...
Fix up fairly trivial conflicts in arch/arm/mach-s3c2440/clock.c and
drivers/tty/serial/Kconfig both due to just adding code close to
changes.
Diffstat (limited to 'arch/arm/mach-exynos')
-rw-r--r-- | arch/arm/mach-exynos/Kconfig | 24 | ||||
-rw-r--r-- | arch/arm/mach-exynos/Makefile | 5 | ||||
-rw-r--r-- | arch/arm/mach-exynos/clock.c | 141 | ||||
-rw-r--r-- | arch/arm/mach-exynos/common.c | 37 | ||||
-rw-r--r-- | arch/arm/mach-exynos/dma.c | 229 | ||||
-rw-r--r-- | arch/arm/mach-exynos/include/mach/irqs.h | 8 | ||||
-rw-r--r-- | arch/arm/mach-exynos/mach-exynos4-dt.c | 85 |
7 files changed, 295 insertions, 234 deletions
diff --git a/arch/arm/mach-exynos/Kconfig b/arch/arm/mach-exynos/Kconfig index e1efbca2a539..b4bdf297e9fa 100644 --- a/arch/arm/mach-exynos/Kconfig +++ b/arch/arm/mach-exynos/Kconfig | |||
@@ -59,6 +59,11 @@ config EXYNOS4_MCT | |||
59 | help | 59 | help |
60 | Use MCT (Multi Core Timer) as kernel timers | 60 | Use MCT (Multi Core Timer) as kernel timers |
61 | 61 | ||
62 | config EXYNOS4_DEV_DMA | ||
63 | bool | ||
64 | help | ||
65 | Compile in amba device definitions for DMA controller | ||
66 | |||
62 | config EXYNOS4_DEV_AHCI | 67 | config EXYNOS4_DEV_AHCI |
63 | bool | 68 | bool |
64 | help | 69 | help |
@@ -179,6 +184,7 @@ config MACH_SMDKV310 | |||
179 | select SAMSUNG_DEV_BACKLIGHT | 184 | select SAMSUNG_DEV_BACKLIGHT |
180 | select EXYNOS4_DEV_AHCI | 185 | select EXYNOS4_DEV_AHCI |
181 | select SAMSUNG_DEV_KEYPAD | 186 | select SAMSUNG_DEV_KEYPAD |
187 | select EXYNOS4_DEV_DMA | ||
182 | select EXYNOS4_DEV_PD | 188 | select EXYNOS4_DEV_PD |
183 | select SAMSUNG_DEV_PWM | 189 | select SAMSUNG_DEV_PWM |
184 | select EXYNOS4_DEV_SYSMMU | 190 | select EXYNOS4_DEV_SYSMMU |
@@ -199,6 +205,7 @@ config MACH_ARMLEX4210 | |||
199 | select S3C_DEV_HSMMC2 | 205 | select S3C_DEV_HSMMC2 |
200 | select S3C_DEV_HSMMC3 | 206 | select S3C_DEV_HSMMC3 |
201 | select EXYNOS4_DEV_AHCI | 207 | select EXYNOS4_DEV_AHCI |
208 | select EXYNOS4_DEV_DMA | ||
202 | select EXYNOS4_DEV_SYSMMU | 209 | select EXYNOS4_DEV_SYSMMU |
203 | select EXYNOS4_SETUP_SDHCI | 210 | select EXYNOS4_SETUP_SDHCI |
204 | help | 211 | help |
@@ -224,6 +231,7 @@ config MACH_UNIVERSAL_C210 | |||
224 | select S5P_DEV_MFC | 231 | select S5P_DEV_MFC |
225 | select S5P_DEV_ONENAND | 232 | select S5P_DEV_ONENAND |
226 | select S5P_DEV_TV | 233 | select S5P_DEV_TV |
234 | select EXYNOS4_DEV_DMA | ||
227 | select EXYNOS4_DEV_PD | 235 | select EXYNOS4_DEV_PD |
228 | select EXYNOS4_SETUP_FIMD0 | 236 | select EXYNOS4_SETUP_FIMD0 |
229 | select EXYNOS4_SETUP_I2C1 | 237 | select EXYNOS4_SETUP_I2C1 |
@@ -257,6 +265,7 @@ config MACH_NURI | |||
257 | select S5P_DEV_MFC | 265 | select S5P_DEV_MFC |
258 | select S5P_DEV_USB_EHCI | 266 | select S5P_DEV_USB_EHCI |
259 | select S5P_SETUP_MIPIPHY | 267 | select S5P_SETUP_MIPIPHY |
268 | select EXYNOS4_DEV_DMA | ||
260 | select EXYNOS4_DEV_PD | 269 | select EXYNOS4_DEV_PD |
261 | select EXYNOS4_SETUP_FIMC | 270 | select EXYNOS4_SETUP_FIMC |
262 | select EXYNOS4_SETUP_FIMD0 | 271 | select EXYNOS4_SETUP_FIMD0 |
@@ -289,6 +298,7 @@ config MACH_ORIGEN | |||
289 | select S5P_DEV_USB_EHCI | 298 | select S5P_DEV_USB_EHCI |
290 | select SAMSUNG_DEV_BACKLIGHT | 299 | select SAMSUNG_DEV_BACKLIGHT |
291 | select SAMSUNG_DEV_PWM | 300 | select SAMSUNG_DEV_PWM |
301 | select EXYNOS4_DEV_DMA | ||
292 | select EXYNOS4_DEV_PD | 302 | select EXYNOS4_DEV_PD |
293 | select EXYNOS4_SETUP_FIMD0 | 303 | select EXYNOS4_SETUP_FIMD0 |
294 | select EXYNOS4_SETUP_SDHCI | 304 | select EXYNOS4_SETUP_SDHCI |
@@ -329,6 +339,20 @@ config MACH_SMDK4412 | |||
329 | Machine support for Samsung SMDK4412 | 339 | Machine support for Samsung SMDK4412 |
330 | endif | 340 | endif |
331 | 341 | ||
342 | comment "Flattened Device Tree based board for Exynos4 based SoC" | ||
343 | |||
344 | config MACH_EXYNOS4_DT | ||
345 | bool "Samsung Exynos4 Machine using device tree" | ||
346 | select CPU_EXYNOS4210 | ||
347 | select USE_OF | ||
348 | select ARM_AMBA | ||
349 | select HAVE_SAMSUNG_KEYPAD if INPUT_KEYBOARD | ||
350 | help | ||
351 | Machine support for Samsung Exynos4 machine with device tree enabled. | ||
352 | Select this if a fdt blob is available for the Exynos4 SoC based board. | ||
353 | Note: This is under development and not all peripherals can be supported | ||
354 | with this machine file. | ||
355 | |||
332 | if ARCH_EXYNOS4 | 356 | if ARCH_EXYNOS4 |
333 | 357 | ||
334 | comment "Configuration for HSMMC 8-bit bus width" | 358 | comment "Configuration for HSMMC 8-bit bus width" |
diff --git a/arch/arm/mach-exynos/Makefile b/arch/arm/mach-exynos/Makefile index bcb9efc576e9..fd0d9e9be382 100644 --- a/arch/arm/mach-exynos/Makefile +++ b/arch/arm/mach-exynos/Makefile | |||
@@ -19,7 +19,7 @@ obj-$(CONFIG_SOC_EXYNOS4212) += clock-exynos4212.o | |||
19 | obj-$(CONFIG_PM) += pm.o | 19 | obj-$(CONFIG_PM) += pm.o |
20 | obj-$(CONFIG_CPU_IDLE) += cpuidle.o | 20 | obj-$(CONFIG_CPU_IDLE) += cpuidle.o |
21 | 21 | ||
22 | obj-$(CONFIG_ARCH_EXYNOS4) += dma.o pmu.o | 22 | obj-$(CONFIG_ARCH_EXYNOS4) += pmu.o |
23 | 23 | ||
24 | obj-$(CONFIG_SMP) += platsmp.o headsmp.o | 24 | obj-$(CONFIG_SMP) += platsmp.o headsmp.o |
25 | 25 | ||
@@ -39,6 +39,8 @@ obj-$(CONFIG_MACH_ORIGEN) += mach-origen.o | |||
39 | obj-$(CONFIG_MACH_SMDK4212) += mach-smdk4x12.o | 39 | obj-$(CONFIG_MACH_SMDK4212) += mach-smdk4x12.o |
40 | obj-$(CONFIG_MACH_SMDK4412) += mach-smdk4x12.o | 40 | obj-$(CONFIG_MACH_SMDK4412) += mach-smdk4x12.o |
41 | 41 | ||
42 | obj-$(CONFIG_MACH_EXYNOS4_DT) += mach-exynos4-dt.o | ||
43 | |||
42 | # device support | 44 | # device support |
43 | 45 | ||
44 | obj-$(CONFIG_ARCH_EXYNOS4) += dev-audio.o | 46 | obj-$(CONFIG_ARCH_EXYNOS4) += dev-audio.o |
@@ -46,6 +48,7 @@ obj-$(CONFIG_EXYNOS4_DEV_AHCI) += dev-ahci.o | |||
46 | obj-$(CONFIG_EXYNOS4_DEV_PD) += dev-pd.o | 48 | obj-$(CONFIG_EXYNOS4_DEV_PD) += dev-pd.o |
47 | obj-$(CONFIG_EXYNOS4_DEV_SYSMMU) += dev-sysmmu.o | 49 | obj-$(CONFIG_EXYNOS4_DEV_SYSMMU) += dev-sysmmu.o |
48 | obj-$(CONFIG_EXYNOS4_DEV_DWMCI) += dev-dwmci.o | 50 | obj-$(CONFIG_EXYNOS4_DEV_DWMCI) += dev-dwmci.o |
51 | obj-$(CONFIG_EXYNOS4_DEV_DMA) += dma.o | ||
49 | 52 | ||
50 | obj-$(CONFIG_ARCH_EXYNOS4) += setup-i2c0.o | 53 | obj-$(CONFIG_ARCH_EXYNOS4) += setup-i2c0.o |
51 | obj-$(CONFIG_EXYNOS4_SETUP_FIMC) += setup-fimc.o | 54 | obj-$(CONFIG_EXYNOS4_SETUP_FIMC) += setup-fimc.o |
diff --git a/arch/arm/mach-exynos/clock.c b/arch/arm/mach-exynos/clock.c index 83616a039b15..befee4e13391 100644 --- a/arch/arm/mach-exynos/clock.c +++ b/arch/arm/mach-exynos/clock.c | |||
@@ -554,16 +554,6 @@ static struct clk init_clocks_off[] = { | |||
554 | .enable = exynos4_clk_dac_ctrl, | 554 | .enable = exynos4_clk_dac_ctrl, |
555 | .ctrlbit = (1 << 0), | 555 | .ctrlbit = (1 << 0), |
556 | }, { | 556 | }, { |
557 | .name = "dma", | ||
558 | .devname = "dma-pl330.0", | ||
559 | .enable = exynos4_clk_ip_fsys_ctrl, | ||
560 | .ctrlbit = (1 << 0), | ||
561 | }, { | ||
562 | .name = "dma", | ||
563 | .devname = "dma-pl330.1", | ||
564 | .enable = exynos4_clk_ip_fsys_ctrl, | ||
565 | .ctrlbit = (1 << 1), | ||
566 | }, { | ||
567 | .name = "adc", | 557 | .name = "adc", |
568 | .enable = exynos4_clk_ip_peril_ctrl, | 558 | .enable = exynos4_clk_ip_peril_ctrl, |
569 | .ctrlbit = (1 << 15), | 559 | .ctrlbit = (1 << 15), |
@@ -779,6 +769,20 @@ static struct clk init_clocks[] = { | |||
779 | } | 769 | } |
780 | }; | 770 | }; |
781 | 771 | ||
772 | static struct clk clk_pdma0 = { | ||
773 | .name = "dma", | ||
774 | .devname = "dma-pl330.0", | ||
775 | .enable = exynos4_clk_ip_fsys_ctrl, | ||
776 | .ctrlbit = (1 << 0), | ||
777 | }; | ||
778 | |||
779 | static struct clk clk_pdma1 = { | ||
780 | .name = "dma", | ||
781 | .devname = "dma-pl330.1", | ||
782 | .enable = exynos4_clk_ip_fsys_ctrl, | ||
783 | .ctrlbit = (1 << 1), | ||
784 | }; | ||
785 | |||
782 | struct clk *clkset_group_list[] = { | 786 | struct clk *clkset_group_list[] = { |
783 | [0] = &clk_ext_xtal_mux, | 787 | [0] = &clk_ext_xtal_mux, |
784 | [1] = &clk_xusbxti, | 788 | [1] = &clk_xusbxti, |
@@ -1010,46 +1014,6 @@ static struct clksrc_clk clk_dout_mmc4 = { | |||
1010 | 1014 | ||
1011 | static struct clksrc_clk clksrcs[] = { | 1015 | static struct clksrc_clk clksrcs[] = { |
1012 | { | 1016 | { |
1013 | .clk = { | ||
1014 | .name = "uclk1", | ||
1015 | .devname = "s5pv210-uart.0", | ||
1016 | .enable = exynos4_clksrc_mask_peril0_ctrl, | ||
1017 | .ctrlbit = (1 << 0), | ||
1018 | }, | ||
1019 | .sources = &clkset_group, | ||
1020 | .reg_src = { .reg = S5P_CLKSRC_PERIL0, .shift = 0, .size = 4 }, | ||
1021 | .reg_div = { .reg = S5P_CLKDIV_PERIL0, .shift = 0, .size = 4 }, | ||
1022 | }, { | ||
1023 | .clk = { | ||
1024 | .name = "uclk1", | ||
1025 | .devname = "s5pv210-uart.1", | ||
1026 | .enable = exynos4_clksrc_mask_peril0_ctrl, | ||
1027 | .ctrlbit = (1 << 4), | ||
1028 | }, | ||
1029 | .sources = &clkset_group, | ||
1030 | .reg_src = { .reg = S5P_CLKSRC_PERIL0, .shift = 4, .size = 4 }, | ||
1031 | .reg_div = { .reg = S5P_CLKDIV_PERIL0, .shift = 4, .size = 4 }, | ||
1032 | }, { | ||
1033 | .clk = { | ||
1034 | .name = "uclk1", | ||
1035 | .devname = "s5pv210-uart.2", | ||
1036 | .enable = exynos4_clksrc_mask_peril0_ctrl, | ||
1037 | .ctrlbit = (1 << 8), | ||
1038 | }, | ||
1039 | .sources = &clkset_group, | ||
1040 | .reg_src = { .reg = S5P_CLKSRC_PERIL0, .shift = 8, .size = 4 }, | ||
1041 | .reg_div = { .reg = S5P_CLKDIV_PERIL0, .shift = 8, .size = 4 }, | ||
1042 | }, { | ||
1043 | .clk = { | ||
1044 | .name = "uclk1", | ||
1045 | .devname = "s5pv210-uart.3", | ||
1046 | .enable = exynos4_clksrc_mask_peril0_ctrl, | ||
1047 | .ctrlbit = (1 << 12), | ||
1048 | }, | ||
1049 | .sources = &clkset_group, | ||
1050 | .reg_src = { .reg = S5P_CLKSRC_PERIL0, .shift = 12, .size = 4 }, | ||
1051 | .reg_div = { .reg = S5P_CLKDIV_PERIL0, .shift = 12, .size = 4 }, | ||
1052 | }, { | ||
1053 | .clk = { | 1017 | .clk = { |
1054 | .name = "sclk_pwm", | 1018 | .name = "sclk_pwm", |
1055 | .enable = exynos4_clksrc_mask_peril0_ctrl, | 1019 | .enable = exynos4_clksrc_mask_peril0_ctrl, |
@@ -1238,6 +1202,54 @@ static struct clksrc_clk clksrcs[] = { | |||
1238 | } | 1202 | } |
1239 | }; | 1203 | }; |
1240 | 1204 | ||
1205 | static struct clksrc_clk clk_sclk_uart0 = { | ||
1206 | .clk = { | ||
1207 | .name = "uclk1", | ||
1208 | .devname = "exynos4210-uart.0", | ||
1209 | .enable = exynos4_clksrc_mask_peril0_ctrl, | ||
1210 | .ctrlbit = (1 << 0), | ||
1211 | }, | ||
1212 | .sources = &clkset_group, | ||
1213 | .reg_src = { .reg = S5P_CLKSRC_PERIL0, .shift = 0, .size = 4 }, | ||
1214 | .reg_div = { .reg = S5P_CLKDIV_PERIL0, .shift = 0, .size = 4 }, | ||
1215 | }; | ||
1216 | |||
1217 | static struct clksrc_clk clk_sclk_uart1 = { | ||
1218 | .clk = { | ||
1219 | .name = "uclk1", | ||
1220 | .devname = "exynos4210-uart.1", | ||
1221 | .enable = exynos4_clksrc_mask_peril0_ctrl, | ||
1222 | .ctrlbit = (1 << 4), | ||
1223 | }, | ||
1224 | .sources = &clkset_group, | ||
1225 | .reg_src = { .reg = S5P_CLKSRC_PERIL0, .shift = 4, .size = 4 }, | ||
1226 | .reg_div = { .reg = S5P_CLKDIV_PERIL0, .shift = 4, .size = 4 }, | ||
1227 | }; | ||
1228 | |||
1229 | static struct clksrc_clk clk_sclk_uart2 = { | ||
1230 | .clk = { | ||
1231 | .name = "uclk1", | ||
1232 | .devname = "exynos4210-uart.2", | ||
1233 | .enable = exynos4_clksrc_mask_peril0_ctrl, | ||
1234 | .ctrlbit = (1 << 8), | ||
1235 | }, | ||
1236 | .sources = &clkset_group, | ||
1237 | .reg_src = { .reg = S5P_CLKSRC_PERIL0, .shift = 8, .size = 4 }, | ||
1238 | .reg_div = { .reg = S5P_CLKDIV_PERIL0, .shift = 8, .size = 4 }, | ||
1239 | }; | ||
1240 | |||
1241 | static struct clksrc_clk clk_sclk_uart3 = { | ||
1242 | .clk = { | ||
1243 | .name = "uclk1", | ||
1244 | .devname = "exynos4210-uart.3", | ||
1245 | .enable = exynos4_clksrc_mask_peril0_ctrl, | ||
1246 | .ctrlbit = (1 << 12), | ||
1247 | }, | ||
1248 | .sources = &clkset_group, | ||
1249 | .reg_src = { .reg = S5P_CLKSRC_PERIL0, .shift = 12, .size = 4 }, | ||
1250 | .reg_div = { .reg = S5P_CLKDIV_PERIL0, .shift = 12, .size = 4 }, | ||
1251 | }; | ||
1252 | |||
1241 | /* Clock initialization code */ | 1253 | /* Clock initialization code */ |
1242 | static struct clksrc_clk *sysclks[] = { | 1254 | static struct clksrc_clk *sysclks[] = { |
1243 | &clk_mout_apll, | 1255 | &clk_mout_apll, |
@@ -1272,6 +1284,27 @@ static struct clksrc_clk *sysclks[] = { | |||
1272 | &clk_mout_mfc1, | 1284 | &clk_mout_mfc1, |
1273 | }; | 1285 | }; |
1274 | 1286 | ||
1287 | static struct clk *clk_cdev[] = { | ||
1288 | &clk_pdma0, | ||
1289 | &clk_pdma1, | ||
1290 | }; | ||
1291 | |||
1292 | static struct clksrc_clk *clksrc_cdev[] = { | ||
1293 | &clk_sclk_uart0, | ||
1294 | &clk_sclk_uart1, | ||
1295 | &clk_sclk_uart2, | ||
1296 | &clk_sclk_uart3, | ||
1297 | }; | ||
1298 | |||
1299 | static struct clk_lookup exynos4_clk_lookup[] = { | ||
1300 | CLKDEV_INIT("exynos4210-uart.0", "clk_uart_baud0", &clk_sclk_uart0.clk), | ||
1301 | CLKDEV_INIT("exynos4210-uart.1", "clk_uart_baud0", &clk_sclk_uart1.clk), | ||
1302 | CLKDEV_INIT("exynos4210-uart.2", "clk_uart_baud0", &clk_sclk_uart2.clk), | ||
1303 | CLKDEV_INIT("exynos4210-uart.3", "clk_uart_baud0", &clk_sclk_uart3.clk), | ||
1304 | CLKDEV_INIT("dma-pl330.0", "apb_pclk", &clk_pdma0), | ||
1305 | CLKDEV_INIT("dma-pl330.1", "apb_pclk", &clk_pdma1), | ||
1306 | }; | ||
1307 | |||
1275 | static int xtal_rate; | 1308 | static int xtal_rate; |
1276 | 1309 | ||
1277 | static unsigned long exynos4_fout_apll_get_rate(struct clk *clk) | 1310 | static unsigned long exynos4_fout_apll_get_rate(struct clk *clk) |
@@ -1479,11 +1512,19 @@ void __init exynos4_register_clocks(void) | |||
1479 | for (ptr = 0; ptr < ARRAY_SIZE(sclk_tv); ptr++) | 1512 | for (ptr = 0; ptr < ARRAY_SIZE(sclk_tv); ptr++) |
1480 | s3c_register_clksrc(sclk_tv[ptr], 1); | 1513 | s3c_register_clksrc(sclk_tv[ptr], 1); |
1481 | 1514 | ||
1515 | for (ptr = 0; ptr < ARRAY_SIZE(clksrc_cdev); ptr++) | ||
1516 | s3c_register_clksrc(clksrc_cdev[ptr], 1); | ||
1517 | |||
1482 | s3c_register_clksrc(clksrcs, ARRAY_SIZE(clksrcs)); | 1518 | s3c_register_clksrc(clksrcs, ARRAY_SIZE(clksrcs)); |
1483 | s3c_register_clocks(init_clocks, ARRAY_SIZE(init_clocks)); | 1519 | s3c_register_clocks(init_clocks, ARRAY_SIZE(init_clocks)); |
1484 | 1520 | ||
1521 | s3c24xx_register_clocks(clk_cdev, ARRAY_SIZE(clk_cdev)); | ||
1522 | for (ptr = 0; ptr < ARRAY_SIZE(clk_cdev); ptr++) | ||
1523 | s3c_disable_clocks(clk_cdev[ptr], 1); | ||
1524 | |||
1485 | s3c_register_clocks(init_clocks_off, ARRAY_SIZE(init_clocks_off)); | 1525 | s3c_register_clocks(init_clocks_off, ARRAY_SIZE(init_clocks_off)); |
1486 | s3c_disable_clocks(init_clocks_off, ARRAY_SIZE(init_clocks_off)); | 1526 | s3c_disable_clocks(init_clocks_off, ARRAY_SIZE(init_clocks_off)); |
1527 | clkdev_add_table(exynos4_clk_lookup, ARRAY_SIZE(exynos4_clk_lookup)); | ||
1487 | 1528 | ||
1488 | register_syscore_ops(&exynos4_clock_syscore_ops); | 1529 | register_syscore_ops(&exynos4_clock_syscore_ops); |
1489 | s3c24xx_register_clock(&dummy_apb_pclk); | 1530 | s3c24xx_register_clock(&dummy_apb_pclk); |
diff --git a/arch/arm/mach-exynos/common.c b/arch/arm/mach-exynos/common.c index 647c8434610c..c59e18871006 100644 --- a/arch/arm/mach-exynos/common.c +++ b/arch/arm/mach-exynos/common.c | |||
@@ -17,6 +17,8 @@ | |||
17 | #include <linux/gpio.h> | 17 | #include <linux/gpio.h> |
18 | #include <linux/sched.h> | 18 | #include <linux/sched.h> |
19 | #include <linux/serial_core.h> | 19 | #include <linux/serial_core.h> |
20 | #include <linux/of.h> | ||
21 | #include <linux/of_irq.h> | ||
20 | 22 | ||
21 | #include <asm/proc-fns.h> | 23 | #include <asm/proc-fns.h> |
22 | #include <asm/exception.h> | 24 | #include <asm/exception.h> |
@@ -385,6 +387,13 @@ static void __init combiner_init(unsigned int combiner_nr, void __iomem *base, | |||
385 | } | 387 | } |
386 | } | 388 | } |
387 | 389 | ||
390 | #ifdef CONFIG_OF | ||
391 | static const struct of_device_id exynos4_dt_irq_match[] = { | ||
392 | { .compatible = "arm,cortex-a9-gic", .data = gic_of_init, }, | ||
393 | {}, | ||
394 | }; | ||
395 | #endif | ||
396 | |||
388 | void __init exynos4_init_irq(void) | 397 | void __init exynos4_init_irq(void) |
389 | { | 398 | { |
390 | int irq; | 399 | int irq; |
@@ -392,7 +401,12 @@ void __init exynos4_init_irq(void) | |||
392 | 401 | ||
393 | gic_bank_offset = soc_is_exynos4412() ? 0x4000 : 0x8000; | 402 | gic_bank_offset = soc_is_exynos4412() ? 0x4000 : 0x8000; |
394 | 403 | ||
395 | gic_init_bases(0, IRQ_PPI(0), S5P_VA_GIC_DIST, S5P_VA_GIC_CPU, gic_bank_offset); | 404 | if (!of_have_populated_dt()) |
405 | gic_init_bases(0, IRQ_PPI(0), S5P_VA_GIC_DIST, S5P_VA_GIC_CPU, gic_bank_offset); | ||
406 | #ifdef CONFIG_OF | ||
407 | else | ||
408 | of_irq_init(exynos4_dt_irq_match); | ||
409 | #endif | ||
396 | 410 | ||
397 | for (irq = 0; irq < MAX_COMBINER_NR; irq++) { | 411 | for (irq = 0; irq < MAX_COMBINER_NR; irq++) { |
398 | 412 | ||
@@ -460,15 +474,6 @@ int __init exynos_init(void) | |||
460 | return device_register(&exynos4_dev); | 474 | return device_register(&exynos4_dev); |
461 | } | 475 | } |
462 | 476 | ||
463 | static struct s3c24xx_uart_clksrc exynos4_serial_clocks[] = { | ||
464 | [0] = { | ||
465 | .name = "uclk1", | ||
466 | .divisor = 1, | ||
467 | .min_baud = 0, | ||
468 | .max_baud = 0, | ||
469 | }, | ||
470 | }; | ||
471 | |||
472 | /* uart registration process */ | 477 | /* uart registration process */ |
473 | 478 | ||
474 | void __init exynos4_init_uarts(struct s3c2410_uartcfg *cfg, int no) | 479 | void __init exynos4_init_uarts(struct s3c2410_uartcfg *cfg, int no) |
@@ -476,16 +481,10 @@ void __init exynos4_init_uarts(struct s3c2410_uartcfg *cfg, int no) | |||
476 | struct s3c2410_uartcfg *tcfg = cfg; | 481 | struct s3c2410_uartcfg *tcfg = cfg; |
477 | u32 ucnt; | 482 | u32 ucnt; |
478 | 483 | ||
479 | for (ucnt = 0; ucnt < no; ucnt++, tcfg++) { | 484 | for (ucnt = 0; ucnt < no; ucnt++, tcfg++) |
480 | if (!tcfg->clocks) { | 485 | tcfg->has_fracval = 1; |
481 | tcfg->has_fracval = 1; | ||
482 | tcfg->clocks = exynos4_serial_clocks; | ||
483 | tcfg->clocks_size = ARRAY_SIZE(exynos4_serial_clocks); | ||
484 | } | ||
485 | tcfg->flags |= NO_NEED_CHECK_CLKSRC; | ||
486 | } | ||
487 | 486 | ||
488 | s3c24xx_init_uartdevs("s5pv210-uart", s5p_uart_resources, cfg, no); | 487 | s3c24xx_init_uartdevs("exynos4210-uart", s5p_uart_resources, cfg, no); |
489 | } | 488 | } |
490 | 489 | ||
491 | static DEFINE_SPINLOCK(eint_lock); | 490 | static DEFINE_SPINLOCK(eint_lock); |
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/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/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 | ||