diff mbox

[v3,4/4] ARM: omap: pass minimal SoC/board data for UART from dt

Message ID 1323863746-18145-5-git-send-email-rnayak@ti.com
State Accepted
Commit cf3c79de2b90711a32ce767f7fab2da05966db3c
Headers show

Commit Message

Rajendra Nayak Dec. 14, 2011, 11:55 a.m. UTC
Pass minimal data needed for console boot, from dt, for
OMAP4 panda/sdp and OMAP3 beagle boards, and get rid of the
static initialization from generic board file.

Acked-by: Rob Herring <rob.herring@calxeda.com>
Signed-off-by: Rajendra Nayak <rnayak@ti.com>
---
 arch/arm/boot/dts/omap3.dtsi        |   31 +++++++++++++++++++++++++++++++
 arch/arm/boot/dts/omap4.dtsi        |   28 ++++++++++++++++++++++++++++
 arch/arm/mach-omap2/board-generic.c |    1 -
 3 files changed, 59 insertions(+), 1 deletions(-)

Comments

Tony Lindgren Dec. 14, 2011, 7:25 p.m. UTC | #1
* Rajendra Nayak <rnayak@ti.com> [111214 03:24]:
> Pass minimal data needed for console boot, from dt, for
> OMAP4 panda/sdp and OMAP3 beagle boards, and get rid of the
> static initialization from generic board file.
> 
> Acked-by: Rob Herring <rob.herring@calxeda.com>
> Signed-off-by: Rajendra Nayak <rnayak@ti.com>

This we can't merge because this breaks serial console for
omap2 because you're not adding the omap2 specific dtsi
entries for omap2..

> --- a/arch/arm/mach-omap2/board-generic.c
> +++ b/arch/arm/mach-omap2/board-generic.c
> @@ -69,7 +69,6 @@ static void __init omap_generic_init(void)
>  	if (node)
>  		irq_domain_add_simple(node, 0);
>  
> -	omap_serial_init();
>  	omap_sdrc_init(NULL, NULL);
>  
>  	of_platform_populate(NULL, omap_dt_match_table, NULL, NULL);

..and you're removing the call for omap_serial_init.

Please just update this patch with the omap2 entries
as well. Other than that looks good to me.

Tony
Rajendra Nayak Dec. 15, 2011, 6:52 a.m. UTC | #2
On Thursday 15 December 2011 12:55 AM, Tony Lindgren wrote:
> * Rajendra Nayak<rnayak@ti.com>  [111214 03:24]:
>> Pass minimal data needed for console boot, from dt, for
>> OMAP4 panda/sdp and OMAP3 beagle boards, and get rid of the
>> static initialization from generic board file.
>>
>> Acked-by: Rob Herring<rob.herring@calxeda.com>
>> Signed-off-by: Rajendra Nayak<rnayak@ti.com>
>
> This we can't merge because this breaks serial console for
> omap2 because you're not adding the omap2 specific dtsi
> entries for omap2..

But we never had omap2 working with DT, because we never added
a .dtsi file for omap2 or a .dts file for any omap2 board variants.

Until now the DT support on OMAP has been limited to OMAP3 and OMAP4
with boards limited to omap3beagle/omap4Panda and omap4sdp.

So when we do add base support for omap2, we could update those
with the serial entries.

>
>> --- a/arch/arm/mach-omap2/board-generic.c
>> +++ b/arch/arm/mach-omap2/board-generic.c
>> @@ -69,7 +69,6 @@ static void __init omap_generic_init(void)
>>   	if (node)
>>   		irq_domain_add_simple(node, 0);
>>
>> -	omap_serial_init();
>>   	omap_sdrc_init(NULL, NULL);
>>
>>   	of_platform_populate(NULL, omap_dt_match_table, NULL, NULL);
>
> ..and you're removing the call for omap_serial_init.
>
> Please just update this patch with the omap2 entries
> as well. Other than that looks good to me.
>
> Tony
Cousson, Benoit Dec. 15, 2011, 10:06 a.m. UTC | #3
Hi Tony,

On 12/15/2011 7:52 AM, Rajendra Nayak wrote:
> On Thursday 15 December 2011 12:55 AM, Tony Lindgren wrote:
>> * Rajendra Nayak<rnayak@ti.com> [111214 03:24]:
>>> Pass minimal data needed for console boot, from dt, for
>>> OMAP4 panda/sdp and OMAP3 beagle boards, and get rid of the
>>> static initialization from generic board file.
>>>
>>> Acked-by: Rob Herring<rob.herring@calxeda.com>
>>> Signed-off-by: Rajendra Nayak<rnayak@ti.com>
>>
>> This we can't merge because this breaks serial console for
>> omap2 because you're not adding the omap2 specific dtsi
>> entries for omap2..
>
> But we never had omap2 working with DT, because we never added
> a .dtsi file for omap2 or a .dts file for any omap2 board variants.
>
> Until now the DT support on OMAP has been limited to OMAP3 and OMAP4
> with boards limited to omap3beagle/omap4Panda and omap4sdp.
>
> So when we do add base support for omap2, we could update those
> with the serial entries.

I'm quite confused as well... Have you tried the current 3.2 kernel on 
an OMAP2 board?

So far I've been taking care of keeping the OMAP2 support into the 
board-generic.c file, but I've never added any omap2.dtsi or 
omap2-board.dts file to support it.

Regards,
Benoit
Cousson, Benoit Dec. 16, 2011, 3:21 p.m. UTC | #4
Hi Rajendra,

Just one minor comment if you plan to repost.

On 12/14/2011 12:55 PM, Rajendra Nayak wrote:
> Pass minimal data needed for console boot, from dt, for
> OMAP4 panda/sdp and OMAP3 beagle boards, and get rid of the
> static initialization from generic board file.
>
> Acked-by: Rob Herring<rob.herring@calxeda.com>
> Signed-off-by: Rajendra Nayak<rnayak@ti.com>

Tested-by: Benoit Cousson <b-cousson@ti.com>

>   arch/arm/boot/dts/omap3.dtsi        |   31 +++++++++++++++++++++++++++++++
>   arch/arm/boot/dts/omap4.dtsi        |   28 ++++++++++++++++++++++++++++
>   arch/arm/mach-omap2/board-generic.c |    1 -
>   3 files changed, 59 insertions(+), 1 deletions(-)
>
> diff --git a/arch/arm/boot/dts/omap3.dtsi b/arch/arm/boot/dts/omap3.dtsi
> index d202bb5..216c331 100644
> --- a/arch/arm/boot/dts/omap3.dtsi
> +++ b/arch/arm/boot/dts/omap3.dtsi
> @@ -13,6 +13,13 @@
>   / {
>   	compatible = "ti,omap3430", "ti,omap3";
>
> +	aliases {
> +		serial0 =&uart1;
> +		serial1 =&uart2;
> +		serial2 =&uart3;
> +		serial3 =&uart4;
> +	};
> +
>   	cpus {
>   		cpu@0 {
>   			compatible = "arm,cortex-a8";
> @@ -59,5 +66,29 @@
>   			interrupt-controller;
>   			#interrupt-cells =<1>;
>   		};
> +
> +		uart1: serial@0x4806a000 {

Could you get rid of the 0x prefix for consistency?
This is applicable for the omap4.dtsi as well.

Thanks,
Benoit
Ramirez Luna, Omar April 11, 2012, 12:16 a.m. UTC | #5
Hi,

On Wed, Dec 14, 2011 at 5:55 AM, Rajendra Nayak <rnayak@ti.com> wrote:
> Pass minimal data needed for console boot, from dt, for
> OMAP4 panda/sdp and OMAP3 beagle boards, and get rid of the
> static initialization from generic board file.
...
> diff --git a/arch/arm/mach-omap2/board-generic.c b/arch/arm/mach-omap2/board-generic.c
> index 63b5416..a508ed5 100644
> --- a/arch/arm/mach-omap2/board-generic.c
> +++ b/arch/arm/mach-omap2/board-generic.c
> @@ -69,7 +69,6 @@ static void __init omap_generic_init(void)
>        if (node)
>                irq_domain_add_simple(node, 0);
>
> -       omap_serial_init();
>        omap_sdrc_init(NULL, NULL);
>
>        of_platform_populate(NULL, omap_dt_match_table, NULL, NULL);
> --
> 1.7.1

I'm fairly new to DT and I'm trying to boot it with pandaboard and
k3.3, however above hunk deletes omap serial initialization, which
causes a panic on boot, because pdata is NULL:

static void serial_omap_start_tx(struct uart_port *port)
{
...
                if (pdata->set_noidle)

Perhaps because this change skips the following path:

omap_serial_init->omap_serial_board_init->omap_serial_init_port

Where pdata is built in omap_device_build.

I'm just trying to confirm that I'm not alone or doing some silly
thing before getting in depth with the code.

Here it is the panic:

[    2.024688] Unable to handle kernel NULL pointer dereference at
virtual address 00000028
[    2.031005] pgd = ed6f0000
[    2.036315] [00000028] *pgd=af339831, *pte=00000000, *ppte=00000000
[    2.042907] Internal error: Oops: 17 [#1] SMP
[    2.046630] Modules linked in:
[    2.046630] CPU: 0    Not tainted  (3.3.0-00002-gda19af1-dirty #11)
[    2.046630] PC is at serial_omap_start_tx+0x1cc/0x218
[    2.046630] LR is at serial_omap_start_tx+0x1b8/0x218
[    2.067840] pc : [<c02b3a54>]    lr : [<c02b3a40>]    psr: 60000193
[    2.067840] sp : c21cbe70  ip : 00000001  fp : a0000113
[    2.073699] r10: ef107000  r9 : ed684600  r8 : 0000001c
[    2.085327] r7 : 00000002  r6 : 00000007  r5 : 00000000  r4 : ed684600
[    2.086029] r3 : ef1281c0  r2 : fa020000  r1 : 00000004  r0 : c02b3a40
[    2.086029] Flags: nZCv  IRQs off  FIQs on  Mode SVC_32  ISA ARM
Segment user
[    2.101684] Control: 10c53c7d  Table: ad6f004a  DAC: 00000015
[    2.101684] Process S10udev (pid: 497, stack limit = 0xc21ca2f8)
[    2.116973] Stack: (0xc21cbe70 to 0xc21cc000)
[    2.123443] be60:                                     a0000113
c0475b74 00000002 00000000
[    2.126007] be80: c02ac7e0 ef107000 ed684600 20000113 00000000
c02ac830 00000000 ed690ad0
[    2.139099] bea0: ed6e981c c02ae348 c02ae288 ef107000 c21ca000
0000001c ed6e9800 ef1074fc
[    2.145385] bec0: c049cab4 ef1dcd80 ed6e9800 c0296aa8 60000113
c02925e8 ef107194 ef107120
[    2.152191] bee0: ef0003c0 00000000 ef1281c0 c0076214 ef1071b4
ef1071b4 ef1074b4 ef1dcd80
[    2.159790] bf00: ef107000 b6f5c000 0000001c c21ca000 00000400
00000000 c02968c8 c0292638
[    2.159790] bf20: c06e3ea0 0000001c c02968c8 ef168b80 c21cbf80
00000000 ef1281c0 ef1dcd80
[    2.175811] bf40: 0000001c b6f5c000 c21cbf80 00000000 00000000
00000000 00000000 c010841c
[    2.188476] bf60: c0014400 ef1281c0 ef1dcd80 b6f5c000 0000001c
00000004 00000000 c0108570
[    2.195068] bf80: 00000000 00000000 0000001c 00000000 0000001c
b6f345c8 0000001c c00144a8
[    2.195068] bfa0: c21ca000 c00142e0 0000001c b6f345c8 00000001
b6f5c000 0000001c 00000000
[    2.210723] bfc0: 0000001c b6f345c8 0000001c 00000004 b6f5c000
00000000 00000001 00000000
[    2.210723] bfe0: 00000000 be988948 b6e5ae98 b6eb7adc 60000110
00000001 89389af9 fef855e7
[    2.226379] [<c02b3a54>] (serial_omap_start_tx+0x1cc/0x218) from
[<c02ac830>] (uart_start+0x68/0x6c)
[    2.241973] [<c02ac830>] (uart_start+0x68/0x6c) from [<c02ae348>]
(uart_write+0xc0/0xe4)
[    2.241973] [<c02ae348>] (uart_write+0xc0/0xe4) from [<c0296aa8>]
(n_tty_write+0x1e0/0x42c)
[    2.257629] [<c0296aa8>] (n_tty_write+0x1e0/0x42c) from
[<c0292638>] (tty_write+0x140/0x23c)
[    2.270446] [<c0292638>] (tty_write+0x140/0x23c) from [<c010841c>]
(vfs_write+0xb0/0x134)
[    2.278594] [<c010841c>] (vfs_write+0xb0/0x134) from [<c0108570>]
(sys_write+0x40/0x70)
[    2.281311] [<c0108570>] (sys_write+0x40/0x70) from [<c00142e0>]
(ret_fast_syscall+0x0/0x3c)

Regards,

Omar
Cousson, Benoit April 11, 2012, 8:39 a.m. UTC | #6
Hi Omar,

On 4/11/2012 2:16 AM, Ramirez Luna, Omar wrote:
> Hi,
>
> On Wed, Dec 14, 2011 at 5:55 AM, Rajendra Nayak<rnayak@ti.com>  wrote:
>> Pass minimal data needed for console boot, from dt, for
>> OMAP4 panda/sdp and OMAP3 beagle boards, and get rid of the
>> static initialization from generic board file.
> ...
>> diff --git a/arch/arm/mach-omap2/board-generic.c b/arch/arm/mach-omap2/board-generic.c
>> index 63b5416..a508ed5 100644
>> --- a/arch/arm/mach-omap2/board-generic.c
>> +++ b/arch/arm/mach-omap2/board-generic.c
>> @@ -69,7 +69,6 @@ static void __init omap_generic_init(void)
>>         if (node)
>>                 irq_domain_add_simple(node, 0);
>>
>> -       omap_serial_init();
>>         omap_sdrc_init(NULL, NULL);
>>
>>         of_platform_populate(NULL, omap_dt_match_table, NULL, NULL);
>> --
>> 1.7.1
>
> I'm fairly new to DT and I'm trying to boot it with pandaboard and
> k3.3, however above hunk deletes omap serial initialization, which
> causes a panic on boot, because pdata is NULL:
>
> static void serial_omap_start_tx(struct uart_port *port)
> {
> ...
>                  if (pdata->set_noidle)
>
> Perhaps because this change skips the following path:
>
> omap_serial_init->omap_serial_board_init->omap_serial_init_port
>
> Where pdata is built in omap_device_build.
>
> I'm just trying to confirm that I'm not alone or doing some silly
> thing before getting in depth with the code.

Yes, it is a known issue and the fix was unfortunately was not merged 
during -rc phases but is fixed in 3.4 and should be fixed in 3.3 stable 
branch as well. I received the notification from Greg KH 2 weeks ago 
about the stable: Patch "tty: serial: OMAP: Fix oops due to NULL pdata 
in DT boot" has been added to the 3.3-stable tree

You should just switch to 3.4-rc2 or get the patch if you are stuck to 3.3.

Regards,
Benoit
Ramirez Luna, Omar April 11, 2012, 3:57 p.m. UTC | #7
On Wed, Apr 11, 2012 at 3:39 AM, Cousson, Benoit <b-cousson@ti.com> wrote:
> Yes, it is a known issue and the fix was unfortunately was not merged during
> -rc phases but is fixed in 3.4 and should be fixed in 3.3 stable branch as
> well. I received the notification from Greg KH 2 weeks ago about the stable:
> Patch "tty: serial: OMAP: Fix oops due to NULL pdata in DT boot" has been
> added to the 3.3-stable tree
>
> You should just switch to 3.4-rc2 or get the patch if you are stuck to 3.3.

Thanks, switching to 3.4-rc kernels fixed the problem (for cramfs),
and right now this works for me.

Regards,

Omar
diff mbox

Patch

diff --git a/arch/arm/boot/dts/omap3.dtsi b/arch/arm/boot/dts/omap3.dtsi
index d202bb5..216c331 100644
--- a/arch/arm/boot/dts/omap3.dtsi
+++ b/arch/arm/boot/dts/omap3.dtsi
@@ -13,6 +13,13 @@ 
 / {
 	compatible = "ti,omap3430", "ti,omap3";
 
+	aliases {
+		serial0 = &uart1;
+		serial1 = &uart2;
+		serial2 = &uart3;
+		serial3 = &uart4;
+	};
+
 	cpus {
 		cpu@0 {
 			compatible = "arm,cortex-a8";
@@ -59,5 +66,29 @@ 
 			interrupt-controller;
 			#interrupt-cells = <1>;
 		};
+
+		uart1: serial@0x4806a000 {
+			compatible = "ti,omap3-uart";
+			ti,hwmods = "uart1";
+			clock-frequency = <48000000>;
+		};
+
+		uart2: serial@0x4806c000 {
+			compatible = "ti,omap3-uart";
+			ti,hwmods = "uart2";
+			clock-frequency = <48000000>;
+		};
+
+		uart3: serial@0x49020000 {
+			compatible = "ti,omap3-uart";
+			ti,hwmods = "uart3";
+			clock-frequency = <48000000>;
+		};
+
+		uart4: serial@0x49042000 {
+			compatible = "ti,omap3-uart";
+			ti,hwmods = "uart4";
+			clock-frequency = <48000000>;
+		};
 	};
 };
diff --git a/arch/arm/boot/dts/omap4.dtsi b/arch/arm/boot/dts/omap4.dtsi
index 4c61c82..e8fe75f 100644
--- a/arch/arm/boot/dts/omap4.dtsi
+++ b/arch/arm/boot/dts/omap4.dtsi
@@ -21,6 +21,10 @@ 
 	interrupt-parent = <&gic>;
 
 	aliases {
+		serial0 = &uart1;
+		serial1 = &uart2;
+		serial2 = &uart3;
+		serial3 = &uart4;
 	};
 
 	cpus {
@@ -99,5 +103,29 @@ 
 			reg = <0x48241000 0x1000>,
 			      <0x48240100 0x0100>;
 		};
+
+		uart1: serial@0x4806a000 {
+			compatible = "ti,omap4-uart";
+			ti,hwmods = "uart1";
+			clock-frequency = <48000000>;
+		};
+
+		uart2: serial@0x4806c000 {
+			compatible = "ti,omap4-uart";
+			ti,hwmods = "uart2";
+			clock-frequency = <48000000>;
+		};
+
+		uart3: serial@0x48020000 {
+			compatible = "ti,omap4-uart";
+			ti,hwmods = "uart3";
+			clock-frequency = <48000000>;
+		};
+
+		uart4: serial@0x4806e000 {
+			compatible = "ti,omap4-uart";
+			ti,hwmods = "uart4";
+			clock-frequency = <48000000>;
+		};
 	};
 };
diff --git a/arch/arm/mach-omap2/board-generic.c b/arch/arm/mach-omap2/board-generic.c
index 63b5416..a508ed5 100644
--- a/arch/arm/mach-omap2/board-generic.c
+++ b/arch/arm/mach-omap2/board-generic.c
@@ -69,7 +69,6 @@  static void __init omap_generic_init(void)
 	if (node)
 		irq_domain_add_simple(node, 0);
 
-	omap_serial_init();
 	omap_sdrc_init(NULL, NULL);
 
 	of_platform_populate(NULL, omap_dt_match_table, NULL, NULL);