[PATCH] Serial: Avoid enabling clocks when clock node is null.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This patch ensures that if a particular uart clock node
was not acquired then do not proceed with enabling clock
and device registration for that uart.

Without this patch if uart_ick/fck value was null
then it throw oops as below and boot will halt.

<1>Unable to handle kernel NULL pointer dereference at virtual address 0000001c
<1>pgd = c0004000
<1>[0000001c] *pgd=00000000
<0>Internal error: Oops: 5 [#1]
<0>last sysfs file:
<d>Modules linked in:
CPU: 0    Not tainted  (2.6.34-rc3-00006-g7da06f1-dirty #15)
PC is at omap_serial_init_port+0x64/0x3a0
LR is at 0x8
pc : [<c000f51c>]    lr : [<00000008>]    psr: 60000013
sp : dfc2bf80  ip : 00000000  fp : 00000000
r10: 000007c8  r9 : c05c65f8  r8 : 00000000
r7 : c05c6dc0  r6 : c000b44c  r5 : 00000000  r4 : 00000004
r3 : 00000007  r2 : c05c6538  r1 : fb020000  r0 : c05c6dc0
Flags: nZCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment kernel
Control: 10c5387f  Table: 80004019  DAC: 00000017
<0>Process swapper (pid: 1, stack limit = 0xdfc2a2f0)
<0>Stack: (0xdfc2bf80 to 0xdfc2c000)
<0>bf80: 00000003 fb020000 00000004 00000000 c000b44c 00000000 00000000 00000000
<0>bfa0: 00000000 c000f880 c002e288 c00135e0 c002e288 c00137f4 c002e288 c000b464
<0>bfc0: c002e288 c003e34c 00000031 00000000 00000000 00000192 00000000 c002e288
<0>bfe0: 00000000 00000000 00000000 c0008578 00000000 c003f970 ffffffff ffffffff
[<c000f51c>] (omap_serial_init_port+0x64/0x3a0) from [<c000f880>] (omap_serial_init+0x28/0x3c)
[<c000f880>] (omap_serial_init+0x28/0x3c) from [<c00135e0>] (zoom_peripherals_init+0x44/0x6c)
[<c00135e0>] (zoom_peripherals_init+0x44/0x6c) from [<c00137f4>] (omap_sdp_init+0x14/0x54)
[<c00137f4>] (omap_sdp_init+0x14/0x54) from [<c000b464>] (customize_machine+0x18/0x24)
[<c000b464>] (customize_machine+0x18/0x24) from [<c003e34c>] (do_one_initcall+0x5c/0x1b8)
[<c003e34c>] (do_one_initcall+0x5c/0x1b8) from [<c0008578>] (kernel_init+0x90/0x144)
[<c0008578>] (kernel_init+0x90/0x144) from [<c003f970>] (kernel_thread_exit+0x0/0x8)
<0>Code: eb00ef8f e597c06c e3a0e008 e3a03007 (e5dc201c)
<4>---[ end trace 1b75b31a2719ed1c ]---
<0>Kernel panic - not syncing: Attempted to kill init!

Cc: Tony Lindgren <tony@xxxxxxxxxxx>
Cc: Kevin Hilman <khilman@xxxxxxxxxxxxxxxxxxx>
Reported-by: Venkatraman S <svenkatr@xxxxxx>
Signed-off-by: Govindraj.R <govindraj.raja@xxxxxx>
---
 arch/arm/mach-omap2/serial.c |    8 ++++++++
 1 files changed, 8 insertions(+), 0 deletions(-)

diff --git a/arch/arm/mach-omap2/serial.c b/arch/arm/mach-omap2/serial.c
index da77930..6d21872 100644
--- a/arch/arm/mach-omap2/serial.c
+++ b/arch/arm/mach-omap2/serial.c
@@ -727,6 +727,14 @@ void __init omap_serial_init_port(int port)
 	pdev = &uart->pdev;
 	dev = &pdev->dev;

+	/*
+	 * If clock nodes where not acquired
+	 * then do not proceed with enabling
+	 * clocks and device registration.
+	 */
+	if (!uart->fck || !uart->ick)
+		return;
+
 	omap_uart_enable_clocks(uart);

 	omap_uart_reset(uart);
-- 
1.6.3.3




--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Arm (vger)]     [ARM Kernel]     [ARM MSM]     [Linux Tegra]     [Linux WPAN Networking]     [Linux Wireless Networking]     [Maemo Users]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux