[PATCH v2 1/5] ARM: davinci: uart: move to devid based clk_get
From: Manjunathappa, Prakash <hidden>
Date: 2013-06-19 09:24:16
Also in:
linux-devicetree, linux-serial
Hi Sekhar, On Fri, Jun 07, 2013 at 11:05:47, Nori, Sekhar wrote:
On 5/28/2013 1:58 PM, Manjunathappa, Prakash wrote:quoted
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 <redacted>quoted
+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 + } + }You should include trailing ',' when defining structures like these (except on the sentinel value).
Will fix this.
quoted
diff --git a/arch/arm/mach-davinci/include/mach/serial.h b/arch/arm/mach-davinci/include/mach/serial.h index 62ad300..34d9877 100644 --- a/arch/arm/mach-davinci/include/mach/serial.h +++ b/arch/arm/mach-davinci/include/mach/serial.h@@ -44,6 +44,10 @@ struct davinci_uart_config { extern int davinci_serial_init(struct davinci_uart_config *); extern int davinci_serial_setup_clk(unsigned instance, unsigned int *rate); +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[];This patch fails to build because of these extern definitions here. Looks like they belong to 5/5. Also, add them to the local davinci.h instead of globally visible serial.h - no need for rest of the kernel to know about these.
Moved them to davinci.h and merged it with 5/5.
After this is fixed locally, applying this patch to master branch of my tree leads to the attached crash (sorry about the broken linewrap, I hope its readable). Please fix this issue along with others that I already pointed out and resubmit.
I do not see this crash any more, with earlier comments fixed. I tested it on da850-evm for both DT and non-DT boot. Submitted next version of patch considering all comments: http://davinci-linux-open-source.1494791.n2.nabble.com/PATCH-v3-0-5-ARM-davinci-fix-UART-clock-enabling-tt7583378.html Thanks, Prakash
Thanks, Sekhar Serial: 8250/16550 driver, 3 ports, IRQ sharing disabled serial8250.0: ttyS0 at MMIO 0x1c20000 (irq = 40) is a 16550A console [ttyS0] enabled serial8250 serial8250.0: unable to register port at index 1 (IO0 MEM1c20400 IRQ41): -22 serial8250 serial8250.0: unable to register port at index 2 (IO0 MEM1c20800 IRQ42): -22 Unable to handle kernel paging request at virtual address 019bfcc0 pgd = c0004000 [019bfcc0] *pgd=00000000 Internal error: Oops: 80000005 [#1] PREEMPT ARM Modules linked in: CPU: 0 PID: 1 Comm: swapper Not tainted 3.10.0-rc4-08028-gc89afd8-dirty #32 task: cf836000 ti: cf838000 task.ti: cf838000 PC is at 0x19bfcc0 LR is at serial8250_config_port+0x13c/0x668 pc : [<019bfcc0>] lr : [<c01bb99c>] psr: 40000093 sp : cf839bd0 ip : cf839bd0 fp : cf839c04 r10: c03f6528 r9 : c0396484 r8 : 00000000 r7 : 20000013 r6 : fffffffe r5 : 00000001 r4 : c03f6628 r3 : 019bfcc0 r2 : 10000002 r1 : 00000001 r0 : c03f6628 Flags: nZcv IRQs off FIQs on Mode SVC_32 ISA ARM Segment kernel Control: 0005317f Table: 80004000 DAC: 00000017 Process swapper (pid: 1, stack limit = 0xcf8381b8) Stack: (0xcf839bd0 to 0xcf83a000) 9bc0: cf8acd08 cf838000 c0396484 cf8accb0 9be0: c03ccbf4 c03f6628 cf8acd08 cf838000 c0396484 c03f6528 cf839c94 cf839c08 9c00: c01b6584 c01bb870 cf8e3cfc 0000000f cf8acd08 c03ccbf4 cf839c44 cf839c28 9c20: c0178bf8 c0178d08 0000000f cf8acd08 c03ccacc cf838000 cf839c64 cf839c48 9c40: c02a8150 c005167c 00000000 cf8accb0 cf8acd08 c03ccbf4 cf839c74 cf839c68 9c60: c02a8224 c02a80f4 cf839c94 cf839cd0 c03f6628 00000003 c03f6728 c03f6524 9c80: c0396484 c03f6528 cf839cbc cf839c98 c01ba788 c01b6434 c03aecb0 00000003 9ca0: c03ada80 00000000 00000000 00000000 cf839df4 cf839cc0 c01ba8d8 c01ba518 9cc0: 01c20800 00000000 0000002a ffffffea 01c40800 fec40800 019bfcc0 0000001f 9ce0: c0332db0 ffffffff 00000000 00000000 00000000 019bfcc0 0000001f 00000000 9d00: 000c0000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 9d20: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 9d40: 00000000 00000002 00000000 00000000 00000000 00000000 00000000 00000000 9d60: 00000001 c03ada80 000000c4 00000000 01c40c00 00000000 00000000 00000000 9d80: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 9da0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 9dc0: 00000000 00000000 00000000 00000000 c00fb518 c03ada80 c03f6d70 c03adab4 9de0: c03ccc40 cfa0da10 cf839e04 cf839df8 c01c472c c01ba7c8 cf839e24 cf839e08 9e00: c01c32f8 c01c4720 c03ada80 c03ccc40 c03adab4 00000000 cf839e44 cf839e28 9e20: c01c352c c01c3284 00000000 00000000 c03ccc40 c01c3498 cf839e6c cf839e48 9e40: c01c1894 c01c34a8 cf822258 cf894270 cf9b7cf4 c03ccc40 cf9b7cc0 c03cd240 9e60: cf839e7c cf839e70 c01c2e80 c01c1844 cf839eac cf839e80 c01c29fc c01c2e70 9e80: c0332ed0 00000003 cf839eac c03ccc40 c03f6528 00000003 c02c3ba4 cfa0da10 9ea0: cf839ed4 cf839eb0 c01c3a54 c01c2930 c03ccbf4 c03f6528 00000003 c02c3ba4 9ec0: cfa0da10 00000000 cf839ee4 cf839ed8 c01c49f4 c01c39e4 cf839f0c cf839ee8 9ee0: c038c0d8 c01c49b8 00000000 c039df5c 00000006 cf838000 c03d39a0 c038bfd0 9f00: cf839f4c cf839f10 c00088c4 c038bfe0 00000006 c0376610 00000000 c034b6ac 9f20: cf839f4c c039df5c 00000006 c03d39a0 c037826c c0396490 c0396484 0000004f 9f40: cf839f94 cf839f50 c0378968 c00087e8 00000006 00000006 c037826c 00000000 9f60: 00000000 00000000 cf839f94 00000000 c02a2a90 00000000 00000000 00000000 9f80: 00000000 00000000 cf839fac cf839f98 c02a2aa0 c0378884 00000000 00000000 9fa0: 00000000 cf839fb0 c00094d0 c02a2aa0 00000000 00000000 00000000 00000000 9fc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 9fe0: 00000000 00000000 00000000 00000000 00000013 00000000 00000000 00000000 Backtrace: [<c01bb860>] (serial8250_config_port+0x0/0x668) from [<c01b6584>] (uart_add_one_port+0x160/0x3d4) [<c01b6424>] (uart_add_one_port+0x0/0x3d4) from [<c01ba788>] (serial8250_register_8250_port+0x280/0x2b0) [<c01ba508>] (serial8250_register_8250_port+0x0/0x2b0) from [<c01ba8d8>] (serial8250_probe+0x120/0x174) [<c01ba7b8>] (serial8250_probe+0x0/0x174) from [<c01c472c>] (platform_drv_probe+0x1c/0x20) r8:cfa0da10 r7:c03ccc40 r6:c03adab4 r5:c03f6d70 r4:c03ada80 [<c01c4710>] (platform_drv_probe+0x0/0x20) from [<c01c32f8>] (driver_probe_device+0x84/0x224) [<c01c3274>] (driver_probe_device+0x0/0x224) from [<c01c352c>] (__driver_attach+0x94/0x98) r7:00000000 r6:c03adab4 r5:c03ccc40 r4:c03ada80 [<c01c3498>] (__driver_attach+0x0/0x98) from [<c01c1894>] (bus_for_each_dev+0x60/0x90) r6:c01c3498 r5:c03ccc40 r4:00000000 r3:00000000 [<c01c1834>] (bus_for_each_dev+0x0/0x90) from [<c01c2e80>] (driver_attach+0x20/0x28) r6:c03cd240 r5:cf9b7cc0 r4:c03ccc40 [<c01c2e60>] (driver_attach+0x0/0x28) from [<c01c29fc>] (bus_add_driver+0xdc/0x238) [<c01c2920>] (bus_add_driver+0x0/0x238) from [<c01c3a54>] (driver_register+0x80/0x154) r8:cfa0da10 r7:c02c3ba4 r6:00000003 r5:c03f6528 r4:c03ccc40 [<c01c39d4>] (driver_register+0x0/0x154) from [<c01c49f4>] (platform_driver_register+0x4c/0x60) [<c01c49a8>] (platform_driver_register+0x0/0x60) from [<c038c0d8>] (serial8250_init+0x108/0x160) [<c038bfd0>] (serial8250_init+0x0/0x160) from [<c00088c4>] (do_one_initcall+0xec/0x158) r8:c038bfd0 r7:c03d39a0 r6:cf838000 r5:00000006 r4:c039df5c r3:00000000 [<c00087d8>] (do_one_initcall+0x0/0x158) from [<c0378968>] (kernel_init_freeable+0xf4/0x1b8) [<c0378874>] (kernel_init_freeable+0x0/0x1b8) from [<c02a2aa0>] (kernel_init+0x10/0xec) [<c02a2a90>] (kernel_init+0x0/0xec) from [<c00094d0>] (ret_from_fork+0x14/0x24) r4:00000000 r3:00000000 Code: bad PC value ---[ end trace ad321c8a03a56474 ]---