aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-omap2/serial.c
diff options
context:
space:
mode:
authorSergio Aguirre <saaguirre@ti.com>2010-02-27 15:13:43 -0500
committerSergio Aguirre <saaguirre@ti.com>2010-03-15 17:33:31 -0400
commite88d556dc5f0ef437e3538277a1dd33e5038be77 (patch)
tree3c32688dfa091dfb9718527cffec76617cadf0d6 /arch/arm/mach-omap2/serial.c
parent29b2ee5af5f3a02846bd38a1e2121d62ee5f6aca (diff)
OMAP3: serial: Check for zero-based physical addr
This is for protecting a wrong mapping attempt of a zero-based physical address. The result is that, no serial port will be attempted to be mapped. Also add an additional protection for NULL clocks before attempting to enable them (if above condition applies) Signed-off-by: Sergio Aguirre <saaguirre@ti.com>
Diffstat (limited to 'arch/arm/mach-omap2/serial.c')
-rw-r--r--arch/arm/mach-omap2/serial.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/arch/arm/mach-omap2/serial.c b/arch/arm/mach-omap2/serial.c
index da77930480e..ef91fc0390b 100644
--- a/arch/arm/mach-omap2/serial.c
+++ b/arch/arm/mach-omap2/serial.c
@@ -664,6 +664,12 @@ void __init omap_serial_early_init(void)
664 struct device *dev = &pdev->dev; 664 struct device *dev = &pdev->dev;
665 struct plat_serial8250_port *p = dev->platform_data; 665 struct plat_serial8250_port *p = dev->platform_data;
666 666
667 /* Don't map zero-based physical address */
668 if (p->mapbase == 0) {
669 printk(KERN_WARNING "omap serial: No physical address"
670 " for uart#%d, so skipping early_init...\n", i);
671 continue;
672 }
667 /* 673 /*
668 * Module 4KB + L4 interconnect 4KB 674 * Module 4KB + L4 interconnect 4KB
669 * Static mapping, never released 675 * Static mapping, never released
@@ -727,6 +733,13 @@ void __init omap_serial_init_port(int port)
727 pdev = &uart->pdev; 733 pdev = &uart->pdev;
728 dev = &pdev->dev; 734 dev = &pdev->dev;
729 735
736 /* Don't proceed if there's no clocks available */
737 if (unlikely(!uart->ick || !uart->fck)) {
738 WARN(1, "%s: can't init uart%d, no clocks available\n",
739 kobject_name(&dev->kobj), port);
740 return;
741 }
742
730 omap_uart_enable_clocks(uart); 743 omap_uart_enable_clocks(uart);
731 744
732 omap_uart_reset(uart); 745 omap_uart_reset(uart);