ARM: davinci: fix UART clock enabling
Subsystems (5)
v3 cover ARM: davinci: fix UART clock enabling
Patch series addresses below issues:
1) Do clk_get on dev_id when there is single clock for a module
2) Fix garbled UART log with DT kernel on da850-evm.
3) Cleanup of serila platform code.
Applies on top of v3.10-rc6 of Linus's.
Tested on da850-evm. Able to see proper bootup log and console on UART2.
Since v2:
1) Added missing sentinel value for struct plat_serial8250_port, .flags = 0.
2) Added Sentinel value for struct platform_device serial_device array's with.
3) Move serial_device array declarations to davinci.h instead of globally visible serial.h
Since v1:
Change names of platform data names appropriately. Added 5/5: platform code cleanup.
Manjunathappa, Prakash (5):
ARM: davinci: uart: move to devid based clk_get
ARM: davinci: da850: override device name of UART in DT kernel
ARM: davinci: da850: do not specify clock_frequency for UART DT node
ARM: davinci: da8xx: remove da8xx_uart_clk_enable
ARM: davinci: serial: platform code cleanup
arch/arm/boot/dts/da850.dtsi | 3 - arch/arm/mach-davinci/board-da830-evm.c | 6 +-- arch/arm/mach-davinci/board-da850-evm.c | 6 +-- arch/arm/mach-davinci/board-dm355-evm.c | 6 +-- arch/arm/mach-davinci/board-dm355-leopard.c | 6 +-- arch/arm/mach-davinci/board-dm365-evm.c | 6 +-- arch/arm/mach-davinci/board-dm644x-evm.c | 6 +-- arch/arm/mach-davinci/board-dm646x-evm.c | 6 +-- arch/arm/mach-davinci/board-mityomapl138.c | 6 +-- arch/arm/mach-davinci/board-neuros-osd2.c | 6 +-- arch/arm/mach-davinci/board-omapl138-hawk.c | 6 +-- arch/arm/mach-davinci/board-sffsdr.c | 7 +-- arch/arm/mach-davinci/da830.c | 7 +-- arch/arm/mach-davinci/da850.c | 7 +-- arch/arm/mach-davinci/da8xx-dt.c | 11 +---- arch/arm/mach-davinci/davinci.h | 5 ++ arch/arm/mach-davinci/devices-da8xx.c | 42 +++++++++++++++--- arch/arm/mach-davinci/devices-tnetv107x.c | 39 ++++++++++++++--- arch/arm/mach-davinci/dm355.c | 51 +++++++++++++++++----- arch/arm/mach-davinci/dm365.c | 37 +++++++++++----- arch/arm/mach-davinci/dm644x.c | 51 +++++++++++++++++----- arch/arm/mach-davinci/dm646x.c | 51 +++++++++++++++++----- arch/arm/mach-davinci/include/mach/common.h | 1 - arch/arm/mach-davinci/include/mach/da8xx.h | 2 +- arch/arm/mach-davinci/include/mach/serial.h | 10 +--- arch/arm/mach-davinci/include/mach/tnetv107x.h | 3 +- arch/arm/mach-davinci/serial.c | 54 +++++++++--------------- arch/arm/mach-davinci/tnetv107x.c | 8 ++-- 28 files changed, 265 insertions(+), 184 deletions(-)
Signature · 1 line
1.7.4.1
PATCH v3 1/5 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.
---
Since v2:
1) Added missing sentinel value for struct plat_serial8250_port, .flags = 0.
2) Added sentinel value for struct platform_device serial_device array's.
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(-)
arch/arm/mach-davinci/da830.c +4 -4
@@ -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, };
arch/arm/mach-davinci/da850.c +4 -4
@@ -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,
arch/arm/mach-davinci/devices-da8xx.c +35 -7
69 lines not on this page · raw message
arch/arm/mach-davinci/devices-tnetv107x.c +31 -6
@@ -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[] = {
arch/arm/mach-davinci/dm355.c +40 -12
91 lines not on this page · raw message
arch/arm/mach-davinci/dm365.c +27 -11
@@ -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,
arch/arm/mach-davinci/dm644x.c +40 -12
91 lines not on this page · raw message
arch/arm/mach-davinci/dm646x.c +40 -12
91 lines not on this page · raw message
arch/arm/mach-davinci/include/mach/da8xx.h +1 -1
@@ -110,7 +110,7 @@ void da8xx_restart(char 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;
arch/arm/mach-davinci/include/mach/tnetv107x.h +1 -1
@@ -49,7 +49,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 __init tnetv107x_init (void );extern void __init tnetv107x_devices_init (struct tnetv107x_device_info *);
arch/arm/mach-davinci/serial.c +12 -7
@@ -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; }
arch/arm/mach-davinci/tnetv107x.c +4 -4
@@ -263,7 +263,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),
@@ -273,8 +273,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),
@@ -756,7 +756,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 )
Signature · 1 line
1.7.4.1
PATCH v3 1/5 ARM: davinci: uart: move to devid based clk_get
Quoted 7 lines · Prakash
For modules having single clock,
clk_getshould be done withdev_id. But current davinci implementation handles multiple instances of the UART devices with singleplatform_device_register. Henceclk_getis based oncon_idrather thandev_id, this is not correct. Doplatform_device_registerfor each instance andclk_getondev_id.Signed-off-by Manjunathappa, Prakash <[email protected]>
[...]
arch/arm/mach-davinci/serial.c int __init davinci_serial_setup_clk(unsigned instance, unsigned int *rate) · line 82
Quoted 13 lines
arch/arm/mach-davinci/serial.c +1
-1@@ -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);
Since the subject of your patch is to use avoid using the con_id for clk_get() match, you should stop passing 'name' here. So instead do
clk = clk_get(dev, NULL);
I did this change locally (along with removal of now useless sprintf call and name variable) and committed for inclusion in v3.12. Final patch attached for reference.
Thanks,
Sekhar
---8<---
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.
arch/arm/mach-davinci/da830.c +4 -4
@@ -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, };
arch/arm/mach-davinci/da850.c +4 -4
@@ -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,
arch/arm/mach-davinci/devices-da8xx.c +35 -7
69 lines not on this page · raw message
arch/arm/mach-davinci/devices-tnetv107x.c +31 -6
@@ -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[] = {
arch/arm/mach-davinci/dm355.c +40 -12
91 lines not on this page · raw message
arch/arm/mach-davinci/dm365.c +27 -11
@@ -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,
arch/arm/mach-davinci/dm644x.c +40 -12
91 lines not on this page · raw message
arch/arm/mach-davinci/dm646x.c +40 -12
91 lines not on this page · raw message
arch/arm/mach-davinci/include/mach/da8xx.h +1 -1
@@ -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;
arch/arm/mach-davinci/include/mach/tnetv107x.h +1 -1
@@ -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 *);
arch/arm/mach-davinci/serial.c +13 -10
@@ -73,13 +73,11 @@ static void __init davinci_serial_reset(struct plat_serial8250_port *p)/* Enable UART clock and obtain its rate */ 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); + clk =clk_get (dev,NULL );if (IS_ERR (clk)) {pr_err ("%s:%d: failed to get UART%d clock\n" , __func__, __LINE__, instance);
@@ -96,19 +94,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 +129,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; }
arch/arm/mach-davinci/tnetv107x.c +4 -4
@@ -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 )
PATCH v3 2/5 ARM: davinci: da850: override device name of UART in DT kernel
In reply to Manjunathappa, PrakashPopulate OF_DEV_AUXDATA with desired device name so as to prevent clk_get failures.
--- arch/arm/mach-davinci/da8xx-dt.c | 3 +++ 1 files changed, 3 insertions(+), 0 deletions(-)
arch/arm/mach-davinci/da8xx-dt.c +3 -0
@@ -47,6 +47,9 @@ static struct of_dev_auxdata da850_auxdata_lookup[] __initdata = {OF_DEV_AUXDATA ("ti,da850-ecap" ,0x01f07000 ,"ecap" ,NULL ),OF_DEV_AUXDATA ("ti,da850-ecap" ,0x01f08000 ,"ecap" ,NULL ),OF_DEV_AUXDATA ("ti,da830-spi" ,0x01f0e000 ,"spi_davinci.1" ,NULL ), +OF_DEV_AUXDATA ("ns16550a" ,0x01c42000 ,"serial8250.0" ,NULL ), +OF_DEV_AUXDATA ("ns16550a" ,0x01d0c000 ,"serial8250.1" ,NULL ), + OF_DEV_AUXDATA("ns16550a", 0x01d0d000, "serial8250.2", NULL), {} };
Signature · 1 line
1.7.4.1
PATCH v3 2/5 ARM: davinci: da850: override device name of UART in DT kernel
Quoted 2 lines · Prakash
Populate
OF_DEV_AUXDATAwith desired device name so as to preventclk_getfailures.
This can be folded into 1/5 itself.
Thanks,
Sekhar
PATCH v3 3/5 ARM: davinci: da850: do not specify clock_frequency for UART DT node
In reply to Manjunathappa, PrakashDT kernel on da850-evm comes up with garbled UART logs. This is because of mismatch in actual module clock rate and rate specified(clock-frequency) in DT blob. kernel should not assume or depend on bootloaders clock configuration, instead let it find the clock rate at runtime.
Issue discussed here before arriving on this implementation:
"ARM: davinci: da850 evm: update clock rate for UART 1/2 DT nodes"
https://patchwork.kernel.org/patch/2162271/
--- arch/arm/boot/dts/da850.dtsi | 3 --- 1 files changed, 0 insertions(+), 3 deletions(-)
arch/arm/boot/dts/da850.dtsi +0 -3
@@ -129,7 +129,6 @@ serial0: serial at 1c42000 { compatible = "ns16550a"; reg = <0x42000 0x100>; - clock-frequency = <150000000>; reg-shift = <2>; interrupts = <25>; status = "disabled";
@@ -137,7 +136,6 @@ serial1: serial at 1d0c000 { compatible = "ns16550a"; reg = <0x10c000 0x100>; - clock-frequency = <150000000>; reg-shift = <2>; interrupts = <53>; status = "disabled";
@@ -145,7 +143,6 @@ serial2: serial at 1d0d000 { compatible = "ns16550a"; reg = <0x10d000 0x100>; - clock-frequency = <150000000>; reg-shift = <2>; interrupts = <61>; status = "disabled";
Signature · 1 line
1.7.4.1
PATCH v3 3/5 ARM: davinci: da850: do not specify clock_frequency for UART DT node
Quoted 10 lines · Prakash
DT kernel on da850-evm comes up with garbled UART logs. This is because of mismatch in actual module clock rate and rate specified(clock-frequency) in DT blob. kernel should not assume or depend on bootloaders clock configuration, instead let it find the clock rate at runtime.
Issue discussed here before arriving on this implementation:
"ARM: davinci: da850 evm: update clock rate for UART 1/2 DT nodes"
https://patchwork.kernel.org/patch/2162271/Signed-off-by Manjunathappa, Prakash <[email protected]>
Adding to v3.12/soc branch of my tree.
Thanks,
Sekhar
PATCH v3 4/5 ARM: davinci: da8xx: remove da8xx_uart_clk_enable
In reply to Manjunathappa, PrakashSerial clocks are enabled from of_platform_serial_setup:of_serial.c, so remove davinci_serial_setup_clk from here.
--- arch/arm/mach-davinci/da8xx-dt.c | 8 -------- 1 files changed, 0 insertions(+), 8 deletions(-)
arch/arm/mach-davinci/da8xx-dt.c +0 -8
@@ -20,13 +20,6 @@#define DA8XX_NUM_UARTS 3 -static void __init da8xx_uart_clk_enable (void ) -{ -int i; -for (i =0 ; i <DA8XX_NUM_UARTS ; i++) -davinci_serial_setup_clk (i,NULL ); -} -static struct of_device_id da8xx_irq_match[]__initdata = { { .compatible ="ti,cp-intc" , .data = cp_intc_of_init, }, { }
@@ -60,7 +53,6 @@ static void __init da850_init_machine(void)of_platform_populate (NULL , of_default_bus_match_table, da850_auxdata_lookup,NULL ); -da8xx_uart_clk_enable (); }static const char *da850_boards_compat[]__initdata = {
Signature · 1 line
1.7.4.1
PATCH v3 4/5 ARM: davinci: da8xx: remove da8xx_uart_clk_enable
Quoted 4 lines · Prakash
Serial clocks are enabled from of_platform_serial_setup:of_serial.c, so remove
davinci_serial_setup_clkfrom here.Signed-off-by Manjunathappa, Prakash <[email protected]>
Adding to v3.12/soc branch.
Thanks,
Sekhar
PATCH v3 5/5 ARM: davinci: serial: platform code cleanup
In reply to Manjunathappa, Prakash1) "struct davinci_uart_config" is introduced to specify UART ports brought out or enabled on the board. But none of the boards use them for that purpose, so clean it up.
2) Have pointer to platform device as a argument for davinci_serial_init(), no need of serial_dev in struct soc_info now.
3) No need of davinci_serial_setup_clk(), not called from multiple places, hence reduce function call overhead.
--- arch/arm/mach-davinci/board-da830-evm.c | 6 +--- arch/arm/mach-davinci/board-da850-evm.c | 6 +--- arch/arm/mach-davinci/board-dm355-evm.c | 6 +--- arch/arm/mach-davinci/board-dm355-leopard.c | 6 +--- arch/arm/mach-davinci/board-dm365-evm.c | 6 +--- arch/arm/mach-davinci/board-dm644x-evm.c | 6 +--- arch/arm/mach-davinci/board-dm646x-evm.c | 6 +--- arch/arm/mach-davinci/board-mityomapl138.c | 6 +--- arch/arm/mach-davinci/board-neuros-osd2.c | 6 +--- arch/arm/mach-davinci/board-omapl138-hawk.c | 6 +--- arch/arm/mach-davinci/board-sffsdr.c | 7 +--- arch/arm/mach-davinci/da830.c | 1 - arch/arm/mach-davinci/da850.c | 1 - arch/arm/mach-davinci/davinci.h | 5 +++ arch/arm/mach-davinci/devices-tnetv107x.c | 2 +- arch/arm/mach-davinci/dm355.c | 3 +- arch/arm/mach-davinci/dm365.c | 3 +- arch/arm/mach-davinci/dm644x.c | 3 +- arch/arm/mach-davinci/dm646x.c | 3 +- arch/arm/mach-davinci/include/mach/common.h | 1 - arch/arm/mach-davinci/include/mach/serial.h | 10 ++---- arch/arm/mach-davinci/include/mach/tnetv107x.h | 1 - arch/arm/mach-davinci/serial.c | 47 +++++++----------------- 23 files changed, 39 insertions(+), 108 deletions(-)
arch/arm/mach-davinci/board-da830-evm.c +1 -5
@@ -185,10 +185,6 @@ static __init void da830_evm_usb_init(void) __func__, ret); } -static struct davinci_uart_config da830_evm_uart_config__initdata = { - .enabled_uarts =0x7 , -}; -static const short da830_evm_mcasp1_pins[] = {DA830_AHCLKX1 ,DA830_ACLKX1 ,DA830_AFSX1 ,DA830_AHCLKR1 ,DA830_AFSR1 ,DA830_AMUTE1 ,DA830_AXR1_0 ,DA830_AXR1_1 ,DA830_AXR1_2 ,DA830_AXR1_5 ,
@@ -630,7 +626,7 @@ static __init void da830_evm_init(void)pr_warning ("da830_evm_init: watchdog registration failed: %d\n" , ret); -davinci_serial_init (&da830_evm_uart_config); +davinci_serial_init (da8xx_serial_device);i2c_register_board_info (1 , da830_evm_i2c_devices,ARRAY_SIZE (da830_evm_i2c_devices));
arch/arm/mach-davinci/board-da850-evm.c +1 -5
@@ -746,10 +746,6 @@ static struct davinci_i2c_platform_data da850_evm_i2c_0_pdata = { .bus_delay = 0, /* usec */ }; -static struct davinci_uart_config da850_evm_uart_config__initdata = { - .enabled_uarts =0x7 , -}; -/* davinci da850 evm audio machine driver */ static u8 da850_iis_serializer_direction[] = {INACTIVE_MODE ,INACTIVE_MODE ,INACTIVE_MODE ,INACTIVE_MODE ,
@@ -1495,7 +1491,7 @@ static __init void da850_evm_init(void) __func__, ret); } -davinci_serial_init (&da850_evm_uart_config); +davinci_serial_init (da8xx_serial_device);i2c_register_board_info (1 , da850_evm_i2c_devices,ARRAY_SIZE (da850_evm_i2c_devices));
arch/arm/mach-davinci/board-dm355-evm.c +1 -5
@@ -314,10 +314,6 @@ static struct platform_device *davinci_evm_devices[] __initdata = { &davinci_nand_device, }; -static struct davinci_uart_config uart_config__initdata = { - .enabled_uarts = (1 <<0 ), -}; -static void __init dm355_evm_map_io (void ) {dm355_init ();
@@ -393,7 +389,7 @@ static __init void dm355_evm_init(void)platform_add_devices (davinci_evm_devices,ARRAY_SIZE (davinci_evm_devices));evm_init_i2c (); -davinci_serial_init (&uart_config); +davinci_serial_init (dm355_serial_device);/* NOTE: NAND flash timings set by the UBL are slower than * needed by MT29F16G08FAA chips ... EMIF.A1CR is 0x40400204
arch/arm/mach-davinci/board-dm355-leopard.c +1 -5
@@ -172,10 +172,6 @@ static struct platform_device *davinci_leopard_devices[] __initdata = { &davinci_nand_device, }; -static struct davinci_uart_config uart_config__initdata = { - .enabled_uarts = (1 <<0 ), -}; -static void __init dm355_leopard_map_io (void ) {dm355_init ();
@@ -251,7 +247,7 @@ static __init void dm355_leopard_init(void)platform_add_devices (davinci_leopard_devices,ARRAY_SIZE (davinci_leopard_devices));leopard_init_i2c (); -davinci_serial_init (&uart_config); +davinci_serial_init (dm355_serial_device);/* NOTE: NAND flash timings set by the UBL are slower than * needed by MT29F16G08FAA chips ... EMIF.A1CR is 0x40400204
arch/arm/mach-davinci/board-dm365-evm.c +1 -5
@@ -719,10 +719,6 @@ fail:/* REVISIT export switches: NTSC/PAL (SW5.6), EXTRA1 (SW5.2), etc */ } -static struct davinci_uart_config uart_config__initdata = { - .enabled_uarts = (1 <<0 ), -}; -static void __init dm365_evm_map_io (void ) {dm365_init ();
@@ -749,7 +745,7 @@ static struct spi_board_info dm365_evm_spi_info[] __initconst = {static __init void dm365_evm_init (void ) {evm_init_i2c (); -davinci_serial_init (&uart_config); +davinci_serial_init (dm365_serial_device);dm365evm_emac_configure ();dm365evm_mmc_configure ();
arch/arm/mach-davinci/board-dm644x-evm.c +1 -5
@@ -726,10 +726,6 @@ static struct platform_device *davinci_evm_devices[] __initdata = { &rtc_dev, }; -static struct davinci_uart_config uart_config__initdata = { - .enabled_uarts = (1 <<0 ), -}; -static void __init davinci_evm_map_io (void ) {
@@ -791,7 +787,7 @@ static __init void davinci_evm_init(void)davinci_setup_mmc (0 , &dm6446evm_mmc_config);dm644x_init_video (&dm644xevm_capture_cfg, &dm644xevm_display_cfg); -davinci_serial_init (&uart_config); +davinci_serial_init (dm644x_serial_device);dm644x_init_asp (&dm644x_evm_snd_data);/* irlml6401 switches over 1A, in under 8 msec */
arch/arm/mach-davinci/board-dm646x-evm.c +1 -5
@@ -749,10 +749,6 @@ static void __init davinci_map_io(void)cdce_clk_init (); } -static struct davinci_uart_config uart_config__initdata = { - .enabled_uarts = (1 <<0 ), -}; -#define DM646X_EVM_PHY_ID "davinci_mdio-0:01"/* * The following EDMA channels/slots are not being used by drivers (for
@@ -792,7 +788,7 @@ static __init void evm_init(void)struct davinci_soc_info *soc_info = &davinci_soc_info;evm_init_i2c (); -davinci_serial_init (&uart_config); +davinci_serial_init (dm646x_serial_device);dm646x_init_mcasp0 (&dm646x_evm_snd_data[0 ]);dm646x_init_mcasp1 (&dm646x_evm_snd_data[1 ]);
arch/arm/mach-davinci/board-mityomapl138.c +1 -5
@@ -434,10 +434,6 @@ static void __init mityomapl138_setup_nand(void) ARRAY_SIZE(mityomapl138_devices)); } -static struct davinci_uart_config mityomapl138_uart_config__initdata = { - .enabled_uarts =0x7 , -}; -static const short mityomap_mii_pins[] = {DA850_MII_TXEN ,DA850_MII_TXCLK ,DA850_MII_COL ,DA850_MII_TXD_3 ,DA850_MII_TXD_2 ,DA850_MII_TXD_1 ,DA850_MII_TXD_0 ,DA850_MII_RXER ,
@@ -517,7 +513,7 @@ static void __init mityomapl138_init(void)if (ret)pr_warning ("watchdog registration failed: %d\n" , ret); -davinci_serial_init (&mityomapl138_uart_config); +davinci_serial_init (da8xx_serial_device); ret =da8xx_register_i2c (0 , &mityomap_i2c_0_pdata);if (ret)
arch/arm/mach-davinci/board-neuros-osd2.c +1 -5
@@ -153,10 +153,6 @@ static struct platform_device *davinci_ntosd2_devices[] __initdata = { &ntosd2_leds_dev, }; -static struct davinci_uart_config uart_config__initdata = { - .enabled_uarts = (1 <<0 ), -}; -static void __init davinci_ntosd2_map_io (void ) {dm644x_init ();
@@ -197,7 +193,7 @@ static __init void davinci_ntosd2_init(void)platform_add_devices (davinci_ntosd2_devices,ARRAY_SIZE (davinci_ntosd2_devices)); -davinci_serial_init (&uart_config); +davinci_serial_init (dm644x_serial_device);dm644x_init_asp (&dm644x_ntosd2_snd_data); soc_info->emac_pdata->phy_id =NEUROS_OSD2_PHY_ID ;
arch/arm/mach-davinci/board-omapl138-hawk.c +1 -5
@@ -286,15 +286,11 @@ usb11_setup_oc_fail:gpio_free (DA850_USB1_VBUS_PIN ); } -static struct davinci_uart_config omapl138_hawk_uart_config__initdata = { - .enabled_uarts =0x7 , -}; -static __init void omapl138_hawk_init (void ) {int ret; -davinci_serial_init (&omapl138_hawk_uart_config); +davinci_serial_init (da8xx_serial_device);omapl138_hawk_config_emac ();
arch/arm/mach-davinci/board-sffsdr.c +2 -5
@@ -44,6 +44,7 @@#include "davinci.h" #define SFFSDR_PHY_ID "davinci_mdio-0:01" +static struct mtd_partition davinci_sffsdr_nandflash_partition[] = {/* U-Boot Environment: Block 0 * UBL: Block 1
@@ -125,10 +126,6 @@ static struct platform_device *davinci_sffsdr_devices[] __initdata = { &davinci_sffsdr_nandflash_device, }; -static struct davinci_uart_config uart_config__initdata = { - .enabled_uarts = (1 <<0 ), -}; -static void __init davinci_sffsdr_map_io (void ) {dm644x_init ();
@@ -141,7 +138,7 @@ static __init void davinci_sffsdr_init(void)platform_add_devices (davinci_sffsdr_devices,ARRAY_SIZE (davinci_sffsdr_devices));sffsdr_init_i2c (); -davinci_serial_init (&uart_config); +davinci_serial_init (dm644x_serial_device); soc_info->emac_pdata->phy_id =SFFSDR_PHY_ID ;davinci_setup_usb (0 ,0 );/* We support only peripheral mode. */
arch/arm/mach-davinci/da830.c +0 -1
@@ -1199,7 +1199,6 @@ 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, .emac_pdata = &da8xx_emac_pdata, };
arch/arm/mach-davinci/da850.c +0 -1
@@ -1301,7 +1301,6 @@ 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, .emac_pdata = &da8xx_emac_pdata, .sram_dma = DA8XX_SHARED_RAM_BASE, .sram_len = SZ_128K,
arch/arm/mach-davinci/davinci.h +5 -0
@@ -106,4 +106,9 @@ int __init dm646x_init_edma(struct edma_rsv_info *rsv);void dm646x_video_init (void );void dm646x_setup_vpif (struct vpif_display_config *,struct vpif_capture_config *); + +extern struct platform_device dm365_serial_device[]; +extern struct platform_device dm355_serial_device[]; +extern struct platform_device dm644x_serial_device[]; +extern struct platform_device dm646x_serial_device[];#endif /*__DAVINCI_H */
arch/arm/mach-davinci/devices-tnetv107x.c +1 -1
@@ -410,7 +410,7 @@ void __init tnetv107x_devices_init(struct tnetv107x_device_info *info)platform_device_register (&tsc_device);if (info->serial_config) -davinci_serial_init (info->serial_config); +davinci_serial_init (tnetv107x_serial_device);for (i =0 ; i <2 ; i++)if (info->mmc_config[i]) {
arch/arm/mach-davinci/dm355.c +1 -2
@@ -962,7 +962,7 @@ static struct plat_serial8250_port dm355_serial2_platform_data[] = { } }; -static struct platform_device dm355_serial_device[] = { +struct platform_device dm355_serial_device[] = { { .name ="serial8250" , .id =PLAT8250_DEV_PLATFORM ,
@@ -1009,7 +1009,6 @@ 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, .sram_dma = 0x00010000, .sram_len = SZ_32K, };
arch/arm/mach-davinci/dm365.c +1 -2
@@ -1068,7 +1068,7 @@ static struct plat_serial8250_port dm365_serial1_platform_data[] = { } }; -static struct platform_device dm365_serial_device[] = { +struct platform_device dm365_serial_device[] = { { .name ="serial8250" , .id =PLAT8250_DEV_PLATFORM ,
@@ -1109,7 +1109,6 @@ 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, .emac_pdata = &dm365_emac_pdata, .sram_dma = 0x00010000, .sram_len = SZ_32K,
arch/arm/mach-davinci/dm644x.c +1 -2
@@ -853,7 +853,7 @@ static struct plat_serial8250_port dm644x_serial2_platform_data[] = { } }; -static struct platform_device dm644x_serial_device[] = { +struct platform_device dm644x_serial_device[] = { { .name ="serial8250" , .id =PLAT8250_DEV_PLATFORM ,
@@ -900,7 +900,6 @@ 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, .emac_pdata = &dm644x_emac_pdata, .sram_dma = 0x00008000, .sram_len = SZ_16K,
arch/arm/mach-davinci/dm646x.c +1 -2
@@ -830,7 +830,7 @@ static struct plat_serial8250_port dm646x_serial2_platform_data[] = { } }; -static struct platform_device dm646x_serial_device[] = { +struct platform_device dm646x_serial_device[] = { { .name ="serial8250" , .id =PLAT8250_DEV_PLATFORM ,
@@ -877,7 +877,6 @@ 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, .emac_pdata = &dm646x_emac_pdata, .sram_dma = 0x10010000, .sram_len = SZ_32K,
arch/arm/mach-davinci/include/mach/common.h +0 -1
@@ -71,7 +71,6 @@ struct davinci_soc_info {unsigned gpio_unbanked;struct davinci_gpio_controller *gpio_ctlrs;int gpio_ctlrs_num; -struct platform_device *serial_dev;struct emac_platform_data *emac_pdata;dma_addr_t sram_dma;unsigned sram_len;
arch/arm/mach-davinci/include/mach/serial.h +3 -7
@@ -15,6 +15,8 @@#include <mach/hardware.h> +#include <linux/platform_device.h> +#define DAVINCI_UART0_BASE (IO_PHYS + 0x20000)#define DAVINCI_UART1_BASE (IO_PHYS + 0x20400)#define DAVINCI_UART2_BASE (IO_PHYS + 0x20800)
@@ -37,13 +39,7 @@#define UART_DM646X_SCR_TX_WATERMARK 0x08#ifndef __ASSEMBLY__ -struct davinci_uart_config { -/* Bit field of UARTs present; bit 0 --> UART0 */ -unsigned int enabled_uarts; -}; - -extern int davinci_serial_init (struct davinci_uart_config *); -extern int davinci_serial_setup_clk (unsigned instance,unsigned int *rate); +extern int davinci_serial_init (struct platform_device *);#endif #endif /* __ASM_ARCH_SERIAL_H */
arch/arm/mach-davinci/include/mach/tnetv107x.h +0 -1
@@ -41,7 +41,6 @@#include <mach/serial.h> struct tnetv107x_device_info { -struct davinci_uart_config *serial_config;struct davinci_mmc_config *mmc_config[2 ];/* 2 controllers */ struct davinci_nand_pdata *nand_config[4 ];/* 4 chipsels */ struct matrix_keypad_platform_data *keypad_config;
arch/arm/mach-davinci/serial.c +14 -33
68 lines not on this page · raw message
Signature · 1 line
1.7.4.1
PATCH v3 5/5 ARM: davinci: serial: platform code cleanup
Quoted 9 lines · Prakash
1) "struct
davinci_uart_config" is introduced to specify UART ports brought out or enabled on the board. But none of the boards use them for that purpose, so clean it up.
2) Have pointer to platform device as a argument fordavinci_serial_init(), no need ofserial_devin structsoc_infonow.
3) No need ofdavinci_serial_setup_clk(), not called from multiple places, hence reduce function call overhead.
1) and 2) are related but 3) can be moved into a different patch - this patch will otherwise be doing too many things (hint for that is a vague headline and too many items to list in description)
Can you respin just this patch based on v3.12/soc branch of my tree?
Thanks,
Sekhar
PATCH v3 5/5 ARM: davinci: serial: platform code cleanup
Hi Prakash,
Quoted 11 lines · Sekhar Nori
Quoted 9 lines · Prakash
1) "struct
davinci_uart_config" is introduced to specify UART ports brought out or enabled on the board. But none of the boards use them for that purpose, so clean it up.
2) Have pointer to platform device as a argument fordavinci_serial_init(), no need ofserial_devin structsoc_infonow.
3) No need ofdavinci_serial_setup_clk(), not called from multiple places, hence reduce function call overhead.
Quoted 5 lines
1) and 2) are related but 3) can be moved into a different patch - this patch will otherwise be doing too many things (hint for that is a vague headline and too many items to list in description)
Can you respin just this patch based on v3.12/soc branch of my tree?
Since I did not get a response to this and the window for v3.12 is closing fast, I went ahead and did the split myself. Here is the result:
https://git.kernel.org/cgit/linux/kernel/git/nsekhar/linux-davinci.git/log/?h=v3.12/soc
Thanks,
Sekhar