[PATCH v2 1/5] ARM: davinci: uart: move to devid based clk_get

Manjunathappa, Prakash prakash.pm at ti.com
Wed Jun 19 05:24:16 EDT 2013


Hi Sekhar,

On Fri, Jun 07, 2013 at 11:05:47, Nori, Sekhar wrote:
> On 5/28/2013 1:58 PM, Manjunathappa, Prakash wrote:
> > 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 at ti.com>
> 
> > +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.

> > 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 ]---
> 



More information about the linux-arm-kernel mailing list