summaryrefslogtreecommitdiffstats
path: root/0001-ARM-davinci-uart-move-to-devid-based-clk_get.patch
diff options
context:
space:
mode:
authorPeter Robinson <pbrobinson@gmail.com>2013-09-04 02:43:18 +0100
committerPeter Robinson <pbrobinson@gmail.com>2013-09-04 02:43:18 +0100
commitbad69a54fc999f7ed3871b472a31c1a760ed1e81 (patch)
tree16a0df217b495c859746080ca7f3cc4e1ff26366 /0001-ARM-davinci-uart-move-to-devid-based-clk_get.patch
parent7ad7e4c4014b96bb176b000b8be71063cf5fc60f (diff)
downloadkernel-bad69a54fc999f7ed3871b472a31c1a760ed1e81.tar.gz
kernel-bad69a54fc999f7ed3871b472a31c1a760ed1e81.tar.xz
kernel-bad69a54fc999f7ed3871b472a31c1a760ed1e81.zip
Add patch set to fix MMC on AM33xx, Add basic support for BeagleBone Black
Diffstat (limited to '0001-ARM-davinci-uart-move-to-devid-based-clk_get.patch')
-rw-r--r--0001-ARM-davinci-uart-move-to-devid-based-clk_get.patch724
1 files changed, 724 insertions, 0 deletions
diff --git a/0001-ARM-davinci-uart-move-to-devid-based-clk_get.patch b/0001-ARM-davinci-uart-move-to-devid-based-clk_get.patch
new file mode 100644
index 000000000..0e5b12d42
--- /dev/null
+++ b/0001-ARM-davinci-uart-move-to-devid-based-clk_get.patch
@@ -0,0 +1,724 @@
+From da41a8e42998c4bff8b19ee3d9fdfed6a5951c3f Mon Sep 17 00:00:00 2001
+From: "Manjunathappa, Prakash" <prakash.pm@ti.com>
+Date: Wed, 19 Jun 2013 14:45:38 +0530
+Subject: [PATCH 01/13] ARM: davinci: uart: move to devid based clk_get
+
+For modules having single clock, clk_get should be done with dev_id.
+But current davinci implementation handles multiple instances
+of the UART devices with single platform_device_register. Hence clk_get
+is based on con_id rather than dev_id, this is not correct. Do
+platform_device_register for each instance and clk_get on dev_id.
+
+Signed-off-by: Manjunathappa, Prakash <prakash.pm@ti.com>
+Signed-off-by: Sekhar Nori <nsekhar@ti.com>
+---
+ arch/arm/mach-davinci/da830.c | 8 ++--
+ arch/arm/mach-davinci/da850.c | 8 ++--
+ arch/arm/mach-davinci/devices-da8xx.c | 42 +++++++++++++++++----
+ arch/arm/mach-davinci/devices-tnetv107x.c | 37 +++++++++++++++---
+ arch/arm/mach-davinci/dm355.c | 52 ++++++++++++++++++++------
+ arch/arm/mach-davinci/dm365.c | 38 +++++++++++++------
+ arch/arm/mach-davinci/dm644x.c | 52 ++++++++++++++++++++------
+ arch/arm/mach-davinci/dm646x.c | 52 ++++++++++++++++++++------
+ arch/arm/mach-davinci/include/mach/da8xx.h | 2 +-
+ arch/arm/mach-davinci/include/mach/tnetv107x.h | 2 +-
+ arch/arm/mach-davinci/serial.c | 19 ++++++----
+ arch/arm/mach-davinci/tnetv107x.c | 8 ++--
+ 12 files changed, 239 insertions(+), 81 deletions(-)
+
+diff --git a/arch/arm/mach-davinci/da830.c b/arch/arm/mach-davinci/da830.c
+index abbaf02..a3ffd52 100644
+--- a/arch/arm/mach-davinci/da830.c
++++ b/arch/arm/mach-davinci/da830.c
+@@ -395,9 +395,9 @@ static struct clk_lookup da830_clks[] = {
+ CLK(NULL, "tptc0", &tptc0_clk),
+ CLK(NULL, "tptc1", &tptc1_clk),
+ CLK("da830-mmc.0", NULL, &mmcsd_clk),
+- CLK(NULL, "uart0", &uart0_clk),
+- CLK(NULL, "uart1", &uart1_clk),
+- CLK(NULL, "uart2", &uart2_clk),
++ CLK("serial8250.0", NULL, &uart0_clk),
++ CLK("serial8250.1", NULL, &uart1_clk),
++ CLK("serial8250.2", NULL, &uart2_clk),
+ CLK("spi_davinci.0", NULL, &spi0_clk),
+ CLK("spi_davinci.1", NULL, &spi1_clk),
+ CLK(NULL, "ecap0", &ecap0_clk),
+@@ -1199,7 +1199,7 @@ static struct davinci_soc_info davinci_soc_info_da830 = {
+ .gpio_base = DA8XX_GPIO_BASE,
+ .gpio_num = 128,
+ .gpio_irq = IRQ_DA8XX_GPIO0,
+- .serial_dev = &da8xx_serial_device,
++ .serial_dev = da8xx_serial_device,
+ .emac_pdata = &da8xx_emac_pdata,
+ };
+
+diff --git a/arch/arm/mach-davinci/da850.c b/arch/arm/mach-davinci/da850.c
+index a0d4f60..d4274ab 100644
+--- a/arch/arm/mach-davinci/da850.c
++++ b/arch/arm/mach-davinci/da850.c
+@@ -451,9 +451,9 @@ static struct clk_lookup da850_clks[] = {
+ CLK(NULL, "tpcc1", &tpcc1_clk),
+ CLK(NULL, "tptc2", &tptc2_clk),
+ CLK("pruss_uio", "pruss", &pruss_clk),
+- CLK(NULL, "uart0", &uart0_clk),
+- CLK(NULL, "uart1", &uart1_clk),
+- CLK(NULL, "uart2", &uart2_clk),
++ CLK("serial8250.0", NULL, &uart0_clk),
++ CLK("serial8250.1", NULL, &uart1_clk),
++ CLK("serial8250.2", NULL, &uart2_clk),
+ CLK(NULL, "aintc", &aintc_clk),
+ CLK(NULL, "gpio", &gpio_clk),
+ CLK("i2c_davinci.2", NULL, &i2c1_clk),
+@@ -1301,7 +1301,7 @@ static struct davinci_soc_info davinci_soc_info_da850 = {
+ .gpio_base = DA8XX_GPIO_BASE,
+ .gpio_num = 144,
+ .gpio_irq = IRQ_DA8XX_GPIO0,
+- .serial_dev = &da8xx_serial_device,
++ .serial_dev = da8xx_serial_device,
+ .emac_pdata = &da8xx_emac_pdata,
+ .sram_dma = DA8XX_SHARED_RAM_BASE,
+ .sram_len = SZ_128K,
+diff --git a/arch/arm/mach-davinci/devices-da8xx.c b/arch/arm/mach-davinci/devices-da8xx.c
+index 71a46a3..280f67d 100644
+--- a/arch/arm/mach-davinci/devices-da8xx.c
++++ b/arch/arm/mach-davinci/devices-da8xx.c
+@@ -68,7 +68,7 @@
+ void __iomem *da8xx_syscfg0_base;
+ void __iomem *da8xx_syscfg1_base;
+
+-static struct plat_serial8250_port da8xx_serial_pdata[] = {
++static struct plat_serial8250_port da8xx_serial0_pdata[] = {
+ {
+ .mapbase = DA8XX_UART0_BASE,
+ .irq = IRQ_DA8XX_UARTINT0,
+@@ -78,6 +78,11 @@ static struct plat_serial8250_port da8xx_serial_pdata[] = {
+ .regshift = 2,
+ },
+ {
++ .flags = 0,
++ }
++};
++static struct plat_serial8250_port da8xx_serial1_pdata[] = {
++ {
+ .mapbase = DA8XX_UART1_BASE,
+ .irq = IRQ_DA8XX_UARTINT1,
+ .flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST |
+@@ -86,6 +91,11 @@ static struct plat_serial8250_port da8xx_serial_pdata[] = {
+ .regshift = 2,
+ },
+ {
++ .flags = 0,
++ }
++};
++static struct plat_serial8250_port da8xx_serial2_pdata[] = {
++ {
+ .mapbase = DA8XX_UART2_BASE,
+ .irq = IRQ_DA8XX_UARTINT2,
+ .flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST |
+@@ -95,15 +105,33 @@ static struct plat_serial8250_port da8xx_serial_pdata[] = {
+ },
+ {
+ .flags = 0,
+- },
++ }
+ };
+
+-struct platform_device da8xx_serial_device = {
+- .name = "serial8250",
+- .id = PLAT8250_DEV_PLATFORM,
+- .dev = {
+- .platform_data = da8xx_serial_pdata,
++struct platform_device da8xx_serial_device[] = {
++ {
++ .name = "serial8250",
++ .id = PLAT8250_DEV_PLATFORM,
++ .dev = {
++ .platform_data = da8xx_serial0_pdata,
++ }
++ },
++ {
++ .name = "serial8250",
++ .id = PLAT8250_DEV_PLATFORM1,
++ .dev = {
++ .platform_data = da8xx_serial1_pdata,
++ }
+ },
++ {
++ .name = "serial8250",
++ .id = PLAT8250_DEV_PLATFORM2,
++ .dev = {
++ .platform_data = da8xx_serial2_pdata,
++ }
++ },
++ {
++ }
+ };
+
+ static s8 da8xx_queue_tc_mapping[][2] = {
+diff --git a/arch/arm/mach-davinci/devices-tnetv107x.c b/arch/arm/mach-davinci/devices-tnetv107x.c
+index 128cb9a..fc4a0fe 100644
+--- a/arch/arm/mach-davinci/devices-tnetv107x.c
++++ b/arch/arm/mach-davinci/devices-tnetv107x.c
+@@ -126,7 +126,7 @@ static struct platform_device edma_device = {
+ .dev.platform_data = tnetv107x_edma_info,
+ };
+
+-static struct plat_serial8250_port serial_data[] = {
++static struct plat_serial8250_port serial0_platform_data[] = {
+ {
+ .mapbase = TNETV107X_UART0_BASE,
+ .irq = IRQ_TNETV107X_UART0,
+@@ -137,6 +137,11 @@ static struct plat_serial8250_port serial_data[] = {
+ .regshift = 2,
+ },
+ {
++ .flags = 0,
++ }
++};
++static struct plat_serial8250_port serial1_platform_data[] = {
++ {
+ .mapbase = TNETV107X_UART1_BASE,
+ .irq = IRQ_TNETV107X_UART1,
+ .flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST |
+@@ -146,6 +151,11 @@ static struct plat_serial8250_port serial_data[] = {
+ .regshift = 2,
+ },
+ {
++ .flags = 0,
++ }
++};
++static struct plat_serial8250_port serial2_platform_data[] = {
++ {
+ .mapbase = TNETV107X_UART2_BASE,
+ .irq = IRQ_TNETV107X_UART2,
+ .flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST |
+@@ -156,13 +166,28 @@ static struct plat_serial8250_port serial_data[] = {
+ },
+ {
+ .flags = 0,
+- },
++ }
+ };
+
+-struct platform_device tnetv107x_serial_device = {
+- .name = "serial8250",
+- .id = PLAT8250_DEV_PLATFORM,
+- .dev.platform_data = serial_data,
++
++struct platform_device tnetv107x_serial_device[] = {
++ {
++ .name = "serial8250",
++ .id = PLAT8250_DEV_PLATFORM,
++ .dev.platform_data = serial0_platform_data,
++ },
++ {
++ .name = "serial8250",
++ .id = PLAT8250_DEV_PLATFORM1,
++ .dev.platform_data = serial1_platform_data,
++ },
++ {
++ .name = "serial8250",
++ .id = PLAT8250_DEV_PLATFORM2,
++ .dev.platform_data = serial2_platform_data,
++ },
++ {
++ }
+ };
+
+ static struct resource mmc0_resources[] = {
+diff --git a/arch/arm/mach-davinci/dm355.c b/arch/arm/mach-davinci/dm355.c
+index 86100d1..1701a2d 100644
+--- a/arch/arm/mach-davinci/dm355.c
++++ b/arch/arm/mach-davinci/dm355.c
+@@ -357,9 +357,9 @@ static struct clk_lookup dm355_clks[] = {
+ CLK(NULL, "clkout3", &clkout3_clk),
+ CLK(NULL, "arm", &arm_clk),
+ CLK(NULL, "mjcp", &mjcp_clk),
+- CLK(NULL, "uart0", &uart0_clk),
+- CLK(NULL, "uart1", &uart1_clk),
+- CLK(NULL, "uart2", &uart2_clk),
++ CLK("serial8250.0", NULL, &uart0_clk),
++ CLK("serial8250.1", NULL, &uart1_clk),
++ CLK("serial8250.2", NULL, &uart2_clk),
+ CLK("i2c_davinci.1", NULL, &i2c_clk),
+ CLK("davinci-mcbsp.0", NULL, &asp0_clk),
+ CLK("davinci-mcbsp.1", NULL, &asp1_clk),
+@@ -922,7 +922,7 @@ static struct davinci_timer_info dm355_timer_info = {
+ .clocksource_id = T0_TOP,
+ };
+
+-static struct plat_serial8250_port dm355_serial_platform_data[] = {
++static struct plat_serial8250_port dm355_serial0_platform_data[] = {
+ {
+ .mapbase = DAVINCI_UART0_BASE,
+ .irq = IRQ_UARTINT0,
+@@ -932,6 +932,11 @@ static struct plat_serial8250_port dm355_serial_platform_data[] = {
+ .regshift = 2,
+ },
+ {
++ .flags = 0,
++ }
++};
++static struct plat_serial8250_port dm355_serial1_platform_data[] = {
++ {
+ .mapbase = DAVINCI_UART1_BASE,
+ .irq = IRQ_UARTINT1,
+ .flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST |
+@@ -940,6 +945,11 @@ static struct plat_serial8250_port dm355_serial_platform_data[] = {
+ .regshift = 2,
+ },
+ {
++ .flags = 0,
++ }
++};
++static struct plat_serial8250_port dm355_serial2_platform_data[] = {
++ {
+ .mapbase = DM355_UART2_BASE,
+ .irq = IRQ_DM355_UARTINT2,
+ .flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST |
+@@ -948,16 +958,34 @@ static struct plat_serial8250_port dm355_serial_platform_data[] = {
+ .regshift = 2,
+ },
+ {
+- .flags = 0
+- },
++ .flags = 0,
++ }
+ };
+
+-static struct platform_device dm355_serial_device = {
+- .name = "serial8250",
+- .id = PLAT8250_DEV_PLATFORM,
+- .dev = {
+- .platform_data = dm355_serial_platform_data,
++static struct platform_device dm355_serial_device[] = {
++ {
++ .name = "serial8250",
++ .id = PLAT8250_DEV_PLATFORM,
++ .dev = {
++ .platform_data = dm355_serial0_platform_data,
++ }
++ },
++ {
++ .name = "serial8250",
++ .id = PLAT8250_DEV_PLATFORM1,
++ .dev = {
++ .platform_data = dm355_serial1_platform_data,
++ }
+ },
++ {
++ .name = "serial8250",
++ .id = PLAT8250_DEV_PLATFORM2,
++ .dev = {
++ .platform_data = dm355_serial2_platform_data,
++ }
++ },
++ {
++ }
+ };
+
+ static struct davinci_soc_info davinci_soc_info_dm355 = {
+@@ -981,7 +1009,7 @@ static struct davinci_soc_info davinci_soc_info_dm355 = {
+ .gpio_base = DAVINCI_GPIO_BASE,
+ .gpio_num = 104,
+ .gpio_irq = IRQ_DM355_GPIOBNK0,
+- .serial_dev = &dm355_serial_device,
++ .serial_dev = dm355_serial_device,
+ .sram_dma = 0x00010000,
+ .sram_len = SZ_32K,
+ };
+diff --git a/arch/arm/mach-davinci/dm365.c b/arch/arm/mach-davinci/dm365.c
+index dad2802..5b3a1bc 100644
+--- a/arch/arm/mach-davinci/dm365.c
++++ b/arch/arm/mach-davinci/dm365.c
+@@ -455,8 +455,8 @@ static struct clk_lookup dm365_clks[] = {
+ CLK("vpss", "master", &vpss_master_clk),
+ CLK("vpss", "slave", &vpss_slave_clk),
+ CLK(NULL, "arm", &arm_clk),
+- CLK(NULL, "uart0", &uart0_clk),
+- CLK(NULL, "uart1", &uart1_clk),
++ CLK("serial8250.0", NULL, &uart0_clk),
++ CLK("serial8250.1", NULL, &uart1_clk),
+ CLK("i2c_davinci.1", NULL, &i2c_clk),
+ CLK("da830-mmc.0", NULL, &mmcsd0_clk),
+ CLK("da830-mmc.1", NULL, &mmcsd1_clk),
+@@ -1041,7 +1041,7 @@ static struct davinci_timer_info dm365_timer_info = {
+
+ #define DM365_UART1_BASE (IO_PHYS + 0x106000)
+
+-static struct plat_serial8250_port dm365_serial_platform_data[] = {
++static struct plat_serial8250_port dm365_serial0_platform_data[] = {
+ {
+ .mapbase = DAVINCI_UART0_BASE,
+ .irq = IRQ_UARTINT0,
+@@ -1051,6 +1051,11 @@ static struct plat_serial8250_port dm365_serial_platform_data[] = {
+ .regshift = 2,
+ },
+ {
++ .flags = 0,
++ }
++};
++static struct plat_serial8250_port dm365_serial1_platform_data[] = {
++ {
+ .mapbase = DM365_UART1_BASE,
+ .irq = IRQ_UARTINT1,
+ .flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST |
+@@ -1059,16 +1064,27 @@ static struct plat_serial8250_port dm365_serial_platform_data[] = {
+ .regshift = 2,
+ },
+ {
+- .flags = 0
+- },
++ .flags = 0,
++ }
+ };
+
+-static struct platform_device dm365_serial_device = {
+- .name = "serial8250",
+- .id = PLAT8250_DEV_PLATFORM,
+- .dev = {
+- .platform_data = dm365_serial_platform_data,
++static struct platform_device dm365_serial_device[] = {
++ {
++ .name = "serial8250",
++ .id = PLAT8250_DEV_PLATFORM,
++ .dev = {
++ .platform_data = dm365_serial0_platform_data,
++ }
++ },
++ {
++ .name = "serial8250",
++ .id = PLAT8250_DEV_PLATFORM1,
++ .dev = {
++ .platform_data = dm365_serial1_platform_data,
++ }
+ },
++ {
++ }
+ };
+
+ static struct davinci_soc_info davinci_soc_info_dm365 = {
+@@ -1093,7 +1109,7 @@ static struct davinci_soc_info davinci_soc_info_dm365 = {
+ .gpio_num = 104,
+ .gpio_irq = IRQ_DM365_GPIO0,
+ .gpio_unbanked = 8, /* really 16 ... skip muxed GPIOs */
+- .serial_dev = &dm365_serial_device,
++ .serial_dev = dm365_serial_device,
+ .emac_pdata = &dm365_emac_pdata,
+ .sram_dma = 0x00010000,
+ .sram_len = SZ_32K,
+diff --git a/arch/arm/mach-davinci/dm644x.c b/arch/arm/mach-davinci/dm644x.c
+index a49d182..490eb8c 100644
+--- a/arch/arm/mach-davinci/dm644x.c
++++ b/arch/arm/mach-davinci/dm644x.c
+@@ -303,9 +303,9 @@ static struct clk_lookup dm644x_clks[] = {
+ CLK("vpss", "master", &vpss_master_clk),
+ CLK("vpss", "slave", &vpss_slave_clk),
+ CLK(NULL, "arm", &arm_clk),
+- CLK(NULL, "uart0", &uart0_clk),
+- CLK(NULL, "uart1", &uart1_clk),
+- CLK(NULL, "uart2", &uart2_clk),
++ CLK("serial8250.0", NULL, &uart0_clk),
++ CLK("serial8250.1", NULL, &uart1_clk),
++ CLK("serial8250.2", NULL, &uart2_clk),
+ CLK("davinci_emac.1", NULL, &emac_clk),
+ CLK("i2c_davinci.1", NULL, &i2c_clk),
+ CLK("palm_bk3710", NULL, &ide_clk),
+@@ -813,7 +813,7 @@ static struct davinci_timer_info dm644x_timer_info = {
+ .clocksource_id = T0_TOP,
+ };
+
+-static struct plat_serial8250_port dm644x_serial_platform_data[] = {
++static struct plat_serial8250_port dm644x_serial0_platform_data[] = {
+ {
+ .mapbase = DAVINCI_UART0_BASE,
+ .irq = IRQ_UARTINT0,
+@@ -823,6 +823,11 @@ static struct plat_serial8250_port dm644x_serial_platform_data[] = {
+ .regshift = 2,
+ },
+ {
++ .flags = 0,
++ }
++};
++static struct plat_serial8250_port dm644x_serial1_platform_data[] = {
++ {
+ .mapbase = DAVINCI_UART1_BASE,
+ .irq = IRQ_UARTINT1,
+ .flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST |
+@@ -831,6 +836,11 @@ static struct plat_serial8250_port dm644x_serial_platform_data[] = {
+ .regshift = 2,
+ },
+ {
++ .flags = 0,
++ }
++};
++static struct plat_serial8250_port dm644x_serial2_platform_data[] = {
++ {
+ .mapbase = DAVINCI_UART2_BASE,
+ .irq = IRQ_UARTINT2,
+ .flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST |
+@@ -839,16 +849,34 @@ static struct plat_serial8250_port dm644x_serial_platform_data[] = {
+ .regshift = 2,
+ },
+ {
+- .flags = 0
+- },
++ .flags = 0,
++ }
+ };
+
+-static struct platform_device dm644x_serial_device = {
+- .name = "serial8250",
+- .id = PLAT8250_DEV_PLATFORM,
+- .dev = {
+- .platform_data = dm644x_serial_platform_data,
++static struct platform_device dm644x_serial_device[] = {
++ {
++ .name = "serial8250",
++ .id = PLAT8250_DEV_PLATFORM,
++ .dev = {
++ .platform_data = dm644x_serial0_platform_data,
++ }
+ },
++ {
++ .name = "serial8250",
++ .id = PLAT8250_DEV_PLATFORM1,
++ .dev = {
++ .platform_data = dm644x_serial1_platform_data,
++ }
++ },
++ {
++ .name = "serial8250",
++ .id = PLAT8250_DEV_PLATFORM2,
++ .dev = {
++ .platform_data = dm644x_serial2_platform_data,
++ }
++ },
++ {
++ }
+ };
+
+ static struct davinci_soc_info davinci_soc_info_dm644x = {
+@@ -872,7 +900,7 @@ static struct davinci_soc_info davinci_soc_info_dm644x = {
+ .gpio_base = DAVINCI_GPIO_BASE,
+ .gpio_num = 71,
+ .gpio_irq = IRQ_GPIOBNK0,
+- .serial_dev = &dm644x_serial_device,
++ .serial_dev = dm644x_serial_device,
+ .emac_pdata = &dm644x_emac_pdata,
+ .sram_dma = 0x00008000,
+ .sram_len = SZ_16K,
+diff --git a/arch/arm/mach-davinci/dm646x.c b/arch/arm/mach-davinci/dm646x.c
+index d1259e8..23609b1 100644
+--- a/arch/arm/mach-davinci/dm646x.c
++++ b/arch/arm/mach-davinci/dm646x.c
+@@ -342,9 +342,9 @@ static struct clk_lookup dm646x_clks[] = {
+ CLK(NULL, "edma_tc1", &edma_tc1_clk),
+ CLK(NULL, "edma_tc2", &edma_tc2_clk),
+ CLK(NULL, "edma_tc3", &edma_tc3_clk),
+- CLK(NULL, "uart0", &uart0_clk),
+- CLK(NULL, "uart1", &uart1_clk),
+- CLK(NULL, "uart2", &uart2_clk),
++ CLK("serial8250.0", NULL, &uart0_clk),
++ CLK("serial8250.1", NULL, &uart1_clk),
++ CLK("serial8250.2", NULL, &uart2_clk),
+ CLK("i2c_davinci.1", NULL, &i2c_clk),
+ CLK(NULL, "gpio", &gpio_clk),
+ CLK("davinci-mcasp.0", NULL, &mcasp0_clk),
+@@ -790,7 +790,7 @@ static struct davinci_timer_info dm646x_timer_info = {
+ .clocksource_id = T0_TOP,
+ };
+
+-static struct plat_serial8250_port dm646x_serial_platform_data[] = {
++static struct plat_serial8250_port dm646x_serial0_platform_data[] = {
+ {
+ .mapbase = DAVINCI_UART0_BASE,
+ .irq = IRQ_UARTINT0,
+@@ -800,6 +800,11 @@ static struct plat_serial8250_port dm646x_serial_platform_data[] = {
+ .regshift = 2,
+ },
+ {
++ .flags = 0,
++ }
++};
++static struct plat_serial8250_port dm646x_serial1_platform_data[] = {
++ {
+ .mapbase = DAVINCI_UART1_BASE,
+ .irq = IRQ_UARTINT1,
+ .flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST |
+@@ -808,6 +813,11 @@ static struct plat_serial8250_port dm646x_serial_platform_data[] = {
+ .regshift = 2,
+ },
+ {
++ .flags = 0,
++ }
++};
++static struct plat_serial8250_port dm646x_serial2_platform_data[] = {
++ {
+ .mapbase = DAVINCI_UART2_BASE,
+ .irq = IRQ_DM646X_UARTINT2,
+ .flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST |
+@@ -816,16 +826,34 @@ static struct plat_serial8250_port dm646x_serial_platform_data[] = {
+ .regshift = 2,
+ },
+ {
+- .flags = 0
+- },
++ .flags = 0,
++ }
+ };
+
+-static struct platform_device dm646x_serial_device = {
+- .name = "serial8250",
+- .id = PLAT8250_DEV_PLATFORM,
+- .dev = {
+- .platform_data = dm646x_serial_platform_data,
++static struct platform_device dm646x_serial_device[] = {
++ {
++ .name = "serial8250",
++ .id = PLAT8250_DEV_PLATFORM,
++ .dev = {
++ .platform_data = dm646x_serial0_platform_data,
++ }
++ },
++ {
++ .name = "serial8250",
++ .id = PLAT8250_DEV_PLATFORM1,
++ .dev = {
++ .platform_data = dm646x_serial1_platform_data,
++ }
+ },
++ {
++ .name = "serial8250",
++ .id = PLAT8250_DEV_PLATFORM2,
++ .dev = {
++ .platform_data = dm646x_serial2_platform_data,
++ }
++ },
++ {
++ }
+ };
+
+ static struct davinci_soc_info davinci_soc_info_dm646x = {
+@@ -849,7 +877,7 @@ static struct davinci_soc_info davinci_soc_info_dm646x = {
+ .gpio_base = DAVINCI_GPIO_BASE,
+ .gpio_num = 43, /* Only 33 usable */
+ .gpio_irq = IRQ_DM646X_GPIOBNK0,
+- .serial_dev = &dm646x_serial_device,
++ .serial_dev = dm646x_serial_device,
+ .emac_pdata = &dm646x_emac_pdata,
+ .sram_dma = 0x10010000,
+ .sram_len = SZ_32K,
+diff --git a/arch/arm/mach-davinci/include/mach/da8xx.h b/arch/arm/mach-davinci/include/mach/da8xx.h
+index 7b41a5e..aae5307 100644
+--- a/arch/arm/mach-davinci/include/mach/da8xx.h
++++ b/arch/arm/mach-davinci/include/mach/da8xx.h
+@@ -111,7 +111,7 @@ void da8xx_restart(enum reboot_mode mode, const char *cmd);
+ void da8xx_rproc_reserve_cma(void);
+ int da8xx_register_rproc(void);
+
+-extern struct platform_device da8xx_serial_device;
++extern struct platform_device da8xx_serial_device[];
+ extern struct emac_platform_data da8xx_emac_pdata;
+ extern struct da8xx_lcdc_platform_data sharp_lcd035q3dg01_pdata;
+ extern struct da8xx_lcdc_platform_data sharp_lk043t1dg01_pdata;
+diff --git a/arch/arm/mach-davinci/include/mach/tnetv107x.h b/arch/arm/mach-davinci/include/mach/tnetv107x.h
+index 16314c6..beb7c0e 100644
+--- a/arch/arm/mach-davinci/include/mach/tnetv107x.h
++++ b/arch/arm/mach-davinci/include/mach/tnetv107x.h
+@@ -50,7 +50,7 @@ struct tnetv107x_device_info {
+ };
+
+ extern struct platform_device tnetv107x_wdt_device;
+-extern struct platform_device tnetv107x_serial_device;
++extern struct platform_device tnetv107x_serial_device[];
+
+ extern void tnetv107x_init(void);
+ extern void tnetv107x_devices_init(struct tnetv107x_device_info *);
+diff --git a/arch/arm/mach-davinci/serial.c b/arch/arm/mach-davinci/serial.c
+index f262581..57e6150 100644
+--- a/arch/arm/mach-davinci/serial.c
++++ b/arch/arm/mach-davinci/serial.c
+@@ -76,7 +76,7 @@ int __init davinci_serial_setup_clk(unsigned instance, unsigned int *rate)
+ char name[16];
+ struct clk *clk;
+ struct davinci_soc_info *soc_info = &davinci_soc_info;
+- struct device *dev = &soc_info->serial_dev->dev;
++ struct device *dev = &soc_info->serial_dev[instance].dev;
+
+ sprintf(name, "uart%d", instance);
+ clk = clk_get(dev, name);
+@@ -96,19 +96,25 @@ int __init davinci_serial_setup_clk(unsigned instance, unsigned int *rate)
+
+ int __init davinci_serial_init(struct davinci_uart_config *info)
+ {
+- int i, ret;
++ int i, ret = 0;
+ struct davinci_soc_info *soc_info = &davinci_soc_info;
+- struct device *dev = &soc_info->serial_dev->dev;
+- struct plat_serial8250_port *p = dev->platform_data;
++ struct device *dev;
++ struct plat_serial8250_port *p;
+
+ /*
+ * Make sure the serial ports are muxed on at this point.
+ * You have to mux them off in device drivers later on if not needed.
+ */
+- for (i = 0; p->flags; i++, p++) {
++ for (i = 0; soc_info->serial_dev[i].dev.platform_data != NULL; i++) {
++ dev = &soc_info->serial_dev[i].dev;
++ p = dev->platform_data;
+ if (!(info->enabled_uarts & (1 << i)))
+ continue;
+
++ ret = platform_device_register(&soc_info->serial_dev[i]);
++ if (ret)
++ continue;
++
+ ret = davinci_serial_setup_clk(i, &p->uartclk);
+ if (ret)
+ continue;
+@@ -125,6 +131,5 @@ int __init davinci_serial_init(struct davinci_uart_config *info)
+ if (p->membase && p->type != PORT_AR7)
+ davinci_serial_reset(p);
+ }
+-
+- return platform_device_register(soc_info->serial_dev);
++ return ret;
+ }
+diff --git a/arch/arm/mach-davinci/tnetv107x.c b/arch/arm/mach-davinci/tnetv107x.c
+index 4545667..f4d7fbb 100644
+--- a/arch/arm/mach-davinci/tnetv107x.c
++++ b/arch/arm/mach-davinci/tnetv107x.c
+@@ -264,7 +264,7 @@ static struct clk_lookup clks[] = {
+ CLK(NULL, "clk_chipcfg", &clk_chipcfg),
+ CLK("tnetv107x-ts.0", NULL, &clk_tsc),
+ CLK(NULL, "clk_rom", &clk_rom),
+- CLK(NULL, "uart2", &clk_uart2),
++ CLK("serial8250.2", NULL, &clk_uart2),
+ CLK(NULL, "clk_pktsec", &clk_pktsec),
+ CLK("tnetv107x-rng.0", NULL, &clk_rng),
+ CLK("tnetv107x-pka.0", NULL, &clk_pka),
+@@ -274,8 +274,8 @@ static struct clk_lookup clks[] = {
+ CLK(NULL, "clk_gpio", &clk_gpio),
+ CLK(NULL, "clk_mdio", &clk_mdio),
+ CLK("dm6441-mmc.0", NULL, &clk_sdio0),
+- CLK(NULL, "uart0", &clk_uart0),
+- CLK(NULL, "uart1", &clk_uart1),
++ CLK("serial8250.0", NULL, &clk_uart0),
++ CLK("serial8250.1", NULL, &clk_uart1),
+ CLK(NULL, "timer0", &clk_timer0),
+ CLK(NULL, "timer1", &clk_timer1),
+ CLK("tnetv107x_wdt.0", NULL, &clk_wdt_arm),
+@@ -757,7 +757,7 @@ static struct davinci_soc_info tnetv107x_soc_info = {
+ .gpio_type = GPIO_TYPE_TNETV107X,
+ .gpio_num = TNETV107X_N_GPIO,
+ .timer_info = &timer_info,
+- .serial_dev = &tnetv107x_serial_device,
++ .serial_dev = tnetv107x_serial_device,
+ };
+
+ void __init tnetv107x_init(void)
+--
+1.8.2.1
+