aboutsummaryrefslogtreecommitdiffstats
path: root/meta/recipes-kernel/linux/linux-omap3-pm-git/zoom2
diff options
context:
space:
mode:
Diffstat (limited to 'meta/recipes-kernel/linux/linux-omap3-pm-git/zoom2')
-rw-r--r--meta/recipes-kernel/linux/linux-omap3-pm-git/zoom2/0001-OMAP1-2-3-4-DEBUG_LL-cleanup.patch217
-rw-r--r--meta/recipes-kernel/linux/linux-omap3-pm-git/zoom2/0002-OMAP1-2-3-4-Adapt-board-files-for-cleand-DEBUG_LL-in.patch268
-rw-r--r--meta/recipes-kernel/linux/linux-omap3-pm-git/zoom2/0003-OMAP-Zoom2-Add-DEBUG_LL-interface-using-external-Qua.patch171
-rw-r--r--meta/recipes-kernel/linux/linux-omap3-pm-git/zoom2/0005-OMAP-Zoom2-Release-Dbg-board-detect-gpio.patch41
4 files changed, 697 insertions, 0 deletions
diff --git a/meta/recipes-kernel/linux/linux-omap3-pm-git/zoom2/0001-OMAP1-2-3-4-DEBUG_LL-cleanup.patch b/meta/recipes-kernel/linux/linux-omap3-pm-git/zoom2/0001-OMAP1-2-3-4-DEBUG_LL-cleanup.patch
new file mode 100644
index 0000000000..e1e216c915
--- /dev/null
+++ b/meta/recipes-kernel/linux/linux-omap3-pm-git/zoom2/0001-OMAP1-2-3-4-DEBUG_LL-cleanup.patch
@@ -0,0 +1,217 @@
+From 51f967864f0e30225c8a8e50e0bbaf92258c0032 Mon Sep 17 00:00:00 2001
+From: Vikram Pandita <vikram.pandita@ti.com>
+Date: Thu, 20 Aug 2009 16:13:20 -0500
+Subject: [PATCH 1/5] OMAP1/2/3/4: DEBUG_LL: cleanup
+
+This patch cleans up the DEBUG_LL infrastructure for omap boards.
+
+The three stages of log printing infrastructure is using their own #defines
+The patch integrates the three stages to use the same variable.
+
+Three stages are:
+Stage 1: Prints - Uncompressing Linux......
+ File getting used: arch/arm/plat-omap/include/mach/uncompress.h
+Stage 2: Prints - <5>Linux version 2.6.31
+ File getting used: arch/arm/plat-omap/include/mach/debug-macro.S
+Stage 3: Kernel ttyS console takes over
+
+On enabling the DEBUG_LL menuconfig item
+[Kernel Hacking -> Kernel low-level debugging functions]
+
+the following entry gets auto selected
+[Systerm Type -> TI OMAP Implementations -> Low-level Debug console UART]
+
+This is the physical address of the UART getting used for the board.
+The physical address of debug uart is provided as a menuconfig option now.
+
+Issue with current system:
+(a) Zoom2 board has a detachable debug board having the TL16CP754 Quad uart chip.
+If the debug board is not attached, _NO_ debug uart is available.
+OMAP internal uarts are not used for traces on zoom2 board.
+Current framework does not account for boards that may not have a debug uart
+at all. The Stage 1 always accesses one of the uarts. Thats fixed now.
+
+(b) this patch does a cleanup of arch/arm/plat-omap/include/mach/debug-macro.S
+
+Signed-off-by: Vikram Pandita <vikram.pandita@ti.com>
+---
+ arch/arm/plat-omap/Kconfig | 50 ++++++++++++++++++-------
+ arch/arm/plat-omap/include/mach/common.h | 7 +++
+ arch/arm/plat-omap/include/mach/debug-macro.S | 40 ++++----------------
+ arch/arm/plat-omap/include/mach/uncompress.h | 12 +----
+ 4 files changed, 54 insertions(+), 55 deletions(-)
+
+diff --git a/arch/arm/plat-omap/Kconfig b/arch/arm/plat-omap/Kconfig
+index ab9f9ef..2fefb64 100644
+--- a/arch/arm/plat-omap/Kconfig
++++ b/arch/arm/plat-omap/Kconfig
+@@ -162,21 +162,43 @@ config OMAP_DM_TIMER
+ help
+ Select this option if you want to use OMAP Dual-Mode timers.
+
+-choice
+- prompt "Low-level debug console UART"
+- depends on ARCH_OMAP
+- default OMAP_LL_DEBUG_UART1
+-
+-config OMAP_LL_DEBUG_UART1
+- bool "UART1"
+-
+-config OMAP_LL_DEBUG_UART2
+- bool "UART2"
+
+-config OMAP_LL_DEBUG_UART3
+- bool "UART3"
+-
+-endchoice
++config OMAP_DEBUG_LL_UART_PHY_ADDR
++ hex "Low-level debug console UART Physical Address"
++ depends on ARCH_OMAP && DEBUG_LL
++
++ default "0xfffb0800" if ARCH_OMAP1 && (MACH_OMAP_PALMTT || MACH_SX1)
++ default "0xfffb0000" if ARCH_OMAP1
++ default "0x4806e000" if ARCH_OMAP2 && MACH_NOKIA_N8X0
++ default "0x4806a000" if ARCH_OMAP2
++ default "0x49020000" if ARCH_OMAP3 && (MACH_NOKIA_RX51 || MACH_OMAP_BEAGLE)
++ default "0x49020000" if ARCH_OMAP3 && (MACH_OMAP3_PANDORA || MACH_OMAP_LDP || MACH_OVERO)
++ default "0x10000000" if ARCH_OMAP3 && MACH_OMAP_ZOOM2
++ default "0x4806a000" if ARCH_OMAP3
++ default "0x4806a000" if ARCH_OMAP4
++ help
++ Specify the Physical address of Low level debug UART
++ Specify 0x0 in case you do not want DEBUG_LL functions to iterfere with your board uarts
++
++ OMAP1:
++ -------------------
++ UART1 -> 0xfffb0000 (default)
++ UART2 -> 0xfffb0800
++ UART3 -> 0xfffb9800 (sx1, palmtt)
++
++ OMAP2:
++ -------------------
++ UART1 -> 0x4806a000 (default)
++ UART2 -> 0x4806c000
++ UART3 -> 0x4806e000 (N8X0)
++
++ OMAP3/4:
++ -------------------
++ UART1 -> 0x4806a000 (default: except following)
++ UART2 -> 0x4806c000
++ UART3 -> 0x49020000 (rx51, beagle, pendora, ldp, overo)
++ UART4 -> 0x4806e000
++ UART_EXT -> 0x10000000 (zoom2: Debug uart is on external debug board)
+
+ config OMAP_SERIAL_WAKE
+ bool "Enable wake-up events for serial ports"
+diff --git a/arch/arm/plat-omap/include/mach/common.h b/arch/arm/plat-omap/include/mach/common.h
+index fdeab42..f29d31f 100644
+--- a/arch/arm/plat-omap/include/mach/common.h
++++ b/arch/arm/plat-omap/include/mach/common.h
+@@ -68,4 +68,11 @@ void omap2_set_globals_sdrc(struct omap_globals *);
+ void omap2_set_globals_control(struct omap_globals *);
+ void omap2_set_globals_prcm(struct omap_globals *);
+
++/* In case Low Level debug is not defined
++ * make the low level uart address as zero
++ */
++#if !defined(CONFIG_DEBUG_LL)
++#define CONFIG_OMAP_DEBUG_LL_UART_PHY_ADDR 0
++#endif
++
+ #endif /* __ARCH_ARM_MACH_OMAP_COMMON_H */
+diff --git a/arch/arm/plat-omap/include/mach/debug-macro.S b/arch/arm/plat-omap/include/mach/debug-macro.S
+index ac24050..f546d6c 100644
+--- a/arch/arm/plat-omap/include/mach/debug-macro.S
++++ b/arch/arm/plat-omap/include/mach/debug-macro.S
+@@ -10,43 +10,19 @@
+ * published by the Free Software Foundation.
+ *
+ */
++#include "io.h"
+
+ .macro addruart,rx
+ mrc p15, 0, \rx, c1, c0
+ tst \rx, #1 @ MMU enabled?
+ #ifdef CONFIG_ARCH_OMAP1
+- moveq \rx, #0xff000000 @ physical base address
+- movne \rx, #0xfe000000 @ virtual base
+- orr \rx, \rx, #0x00fb0000
+-#ifdef CONFIG_OMAP_LL_DEBUG_UART3
+- orr \rx, \rx, #0x00009000 @ UART 3
+-#endif
+-#if defined(CONFIG_OMAP_LL_DEBUG_UART2) || defined(CONFIG_OMAP_LL_DEBUG_UART3)
+- orr \rx, \rx, #0x00000800 @ UART 2 & 3
+-#endif
+-
+-#elif CONFIG_ARCH_OMAP2
+- moveq \rx, #0x48000000 @ physical base address
+- movne \rx, #0xd8000000 @ virtual base
+- orr \rx, \rx, #0x0006a000
+-#ifdef CONFIG_OMAP_LL_DEBUG_UART2
+- add \rx, \rx, #0x00002000 @ UART 2
+-#endif
+-#ifdef CONFIG_OMAP_LL_DEBUG_UART3
+- add \rx, \rx, #0x00004000 @ UART 3
+-#endif
+-
+-#elif defined(CONFIG_ARCH_OMAP3) || defined(CONFIG_ARCH_OMAP4)
+- moveq \rx, #0x48000000 @ physical base address
+- movne \rx, #0xd8000000 @ virtual base
+- orr \rx, \rx, #0x0006a000
+-#ifdef CONFIG_OMAP_LL_DEBUG_UART2
+- add \rx, \rx, #0x00002000 @ UART 2
+-#endif
+-#ifdef CONFIG_OMAP_LL_DEBUG_UART3
+- add \rx, \rx, #0x00fb0000 @ UART 3
+- add \rx, \rx, #0x00006000
+-#endif
++ /* omap1 */
++ ldr \rx, =CONFIG_OMAP_DEBUG_LL_UART_PHY_ADDR @ physical base address
++ subne \rx, #CONFIG_OMAP_DEBUG_LL_UART_PHY_ADDR, #OMAP1_IO_OFFSET @ virtual base
++#else
++ /* omap2/omap3/omap4 */
++ ldr \rx, =CONFIG_OMAP_DEBUG_LL_UART_PHY_ADDR @ physical base address
++ orrne \rx, \rx, #OMAP2_IO_OFFSET @ virtual base
+ #endif
+ .endm
+
+diff --git a/arch/arm/plat-omap/include/mach/uncompress.h b/arch/arm/plat-omap/include/mach/uncompress.h
+index 0814c5f..0e21eb3 100644
+--- a/arch/arm/plat-omap/include/mach/uncompress.h
++++ b/arch/arm/plat-omap/include/mach/uncompress.h
+@@ -38,14 +38,8 @@ static void putc(int c)
+ return;
+ #endif
+
+-#ifdef CONFIG_ARCH_OMAP
+-#ifdef CONFIG_OMAP_LL_DEBUG_UART3
+- uart = (volatile u8 *)(OMAP_UART3_BASE);
+-#elif defined(CONFIG_OMAP_LL_DEBUG_UART2)
+- uart = (volatile u8 *)(OMAP_UART2_BASE);
+-#else
+- uart = (volatile u8 *)(OMAP_UART1_BASE);
+-#endif
++#if defined(CONFIG_DEBUG_LL)
++ uart = (volatile u8 *)(CONFIG_OMAP_DEBUG_LL_UART_PHY_ADDR);
+
+ #ifdef CONFIG_ARCH_OMAP1
+ /* Determine which serial port to use */
+@@ -62,7 +56,6 @@ static void putc(int c)
+ return;
+ } while (0);
+ #endif /* CONFIG_ARCH_OMAP1 */
+-#endif
+
+ /*
+ * Now, xmit each character
+@@ -70,6 +63,7 @@ static void putc(int c)
+ while (!(uart[UART_LSR << shift] & UART_LSR_THRE))
+ barrier();
+ uart[UART_TX << shift] = c;
++#endif /* CONFIG_DEBUG_LL */
+ }
+
+ static inline void flush(void)
+--
+1.6.3.2
+
diff --git a/meta/recipes-kernel/linux/linux-omap3-pm-git/zoom2/0002-OMAP1-2-3-4-Adapt-board-files-for-cleand-DEBUG_LL-in.patch b/meta/recipes-kernel/linux/linux-omap3-pm-git/zoom2/0002-OMAP1-2-3-4-Adapt-board-files-for-cleand-DEBUG_LL-in.patch
new file mode 100644
index 0000000000..8019631b1d
--- /dev/null
+++ b/meta/recipes-kernel/linux/linux-omap3-pm-git/zoom2/0002-OMAP1-2-3-4-Adapt-board-files-for-cleand-DEBUG_LL-in.patch
@@ -0,0 +1,268 @@
+From 533dc09b3515211d6bee1f63aa3ddd659d0d319c Mon Sep 17 00:00:00 2001
+From: Vikram Pandita <vikram.pandita@ti.com>
+Date: Thu, 20 Aug 2009 16:58:42 -0500
+Subject: [PATCH 2/5] OMAP1/2/3/4: Adapt board files for cleand DEBUG_LL interface
+
+This patch assigns the physical address of debug uart as defined
+in menucoinfig item CONFIG_OMAP_DEBUG_LL_UART_PHY_ADDR to phys_io
+
+The virtual address for io_pg_offset is calculated as per static
+mapping
+
+CONFIG_OMAP_DEBUG_LL_UART_PHY_ADDR is a hex value and for boards
+like Zoom2, the phy address can be zero, in case debug board
+is not attached.
+
+Signed-off-by: Vikram Pandita <vikram.pandita@ti.com>
+---
+ arch/arm/mach-omap2/board-2430sdp.c | 4 ++--
+ arch/arm/mach-omap2/board-3430sdp.c | 4 ++--
+ arch/arm/mach-omap2/board-4430sdp.c | 4 ++--
+ arch/arm/mach-omap2/board-apollon.c | 4 ++--
+ arch/arm/mach-omap2/board-generic.c | 4 ++--
+ arch/arm/mach-omap2/board-h4.c | 4 ++--
+ arch/arm/mach-omap2/board-ldp.c | 4 ++--
+ arch/arm/mach-omap2/board-n8x0.c | 12 ++++++------
+ arch/arm/mach-omap2/board-omap3beagle.c | 4 ++--
+ arch/arm/mach-omap2/board-omap3evm.c | 4 ++--
+ arch/arm/mach-omap2/board-omap3pandora.c | 4 ++--
+ arch/arm/mach-omap2/board-overo.c | 4 ++--
+ arch/arm/mach-omap2/board-rx51.c | 4 ++--
+ arch/arm/mach-omap2/board-zoom2.c | 4 ++--
+ 14 files changed, 32 insertions(+), 32 deletions(-)
+
+diff --git a/arch/arm/mach-omap2/board-2430sdp.c b/arch/arm/mach-omap2/board-2430sdp.c
+index c693668..9ed2f2c 100644
+--- a/arch/arm/mach-omap2/board-2430sdp.c
++++ b/arch/arm/mach-omap2/board-2430sdp.c
+@@ -225,8 +225,8 @@ static void __init omap_2430sdp_map_io(void)
+
+ MACHINE_START(OMAP_2430SDP, "OMAP2430 sdp2430 board")
+ /* Maintainer: Syed Khasim - Texas Instruments Inc */
+- .phys_io = 0x48000000,
+- .io_pg_offst = ((0xd8000000) >> 18) & 0xfffc,
++ .phys_io = CONFIG_OMAP_DEBUG_LL_UART_PHY_ADDR,
++ .io_pg_offst = ((CONFIG_OMAP_DEBUG_LL_UART_PHY_ADDR + OMAP2_IO_OFFSET) >> 18) & 0xfffc,
+ .boot_params = 0x80000100,
+ .map_io = omap_2430sdp_map_io,
+ .init_irq = omap_2430sdp_init_irq,
+diff --git a/arch/arm/mach-omap2/board-3430sdp.c b/arch/arm/mach-omap2/board-3430sdp.c
+index c71417f..f085eee 100644
+--- a/arch/arm/mach-omap2/board-3430sdp.c
++++ b/arch/arm/mach-omap2/board-3430sdp.c
+@@ -505,8 +505,8 @@ static void __init omap_3430sdp_map_io(void)
+
+ MACHINE_START(OMAP_3430SDP, "OMAP3430 3430SDP board")
+ /* Maintainer: Syed Khasim - Texas Instruments Inc */
+- .phys_io = 0x48000000,
+- .io_pg_offst = ((0xd8000000) >> 18) & 0xfffc,
++ .phys_io = CONFIG_OMAP_DEBUG_LL_UART_PHY_ADDR,
++ .io_pg_offst = ((CONFIG_OMAP_DEBUG_LL_UART_PHY_ADDR + OMAP2_IO_OFFSET) >> 18) & 0xfffc,
+ .boot_params = 0x80000100,
+ .map_io = omap_3430sdp_map_io,
+ .init_irq = omap_3430sdp_init_irq,
+diff --git a/arch/arm/mach-omap2/board-4430sdp.c b/arch/arm/mach-omap2/board-4430sdp.c
+index 646079f..4c1a166 100644
+--- a/arch/arm/mach-omap2/board-4430sdp.c
++++ b/arch/arm/mach-omap2/board-4430sdp.c
+@@ -83,8 +83,8 @@ static void __init omap_4430sdp_map_io(void)
+
+ MACHINE_START(OMAP_4430SDP, "OMAP4430 4430SDP board")
+ /* Maintainer: Santosh Shilimkar - Texas Instruments Inc */
+- .phys_io = 0x48000000,
+- .io_pg_offst = ((0xd8000000) >> 18) & 0xfffc,
++ .phys_io = CONFIG_OMAP_DEBUG_LL_UART_PHY_ADDR,
++ .io_pg_offst = ((CONFIG_OMAP_DEBUG_LL_UART_PHY_ADDR + OMAP2_IO_OFFSET) >> 18) & 0xfffc,
+ .boot_params = 0x80000100,
+ .map_io = omap_4430sdp_map_io,
+ .init_irq = omap_4430sdp_init_irq,
+diff --git a/arch/arm/mach-omap2/board-apollon.c b/arch/arm/mach-omap2/board-apollon.c
+index e2947fd..61da659 100644
+--- a/arch/arm/mach-omap2/board-apollon.c
++++ b/arch/arm/mach-omap2/board-apollon.c
+@@ -336,8 +336,8 @@ static void __init omap_apollon_map_io(void)
+
+ MACHINE_START(OMAP_APOLLON, "OMAP24xx Apollon")
+ /* Maintainer: Kyungmin Park <kyungmin.park@samsung.com> */
+- .phys_io = 0x48000000,
+- .io_pg_offst = ((0xd8000000) >> 18) & 0xfffc,
++ .phys_io = CONFIG_OMAP_DEBUG_LL_UART_PHY_ADDR,
++ .io_pg_offst = ((CONFIG_OMAP_DEBUG_LL_UART_PHY_ADDR + OMAP2_IO_OFFSET) >> 18) & 0xfffc,
+ .boot_params = 0x80000100,
+ .map_io = omap_apollon_map_io,
+ .init_irq = omap_apollon_init_irq,
+diff --git a/arch/arm/mach-omap2/board-generic.c b/arch/arm/mach-omap2/board-generic.c
+index fc9eccb..6d39eaa 100644
+--- a/arch/arm/mach-omap2/board-generic.c
++++ b/arch/arm/mach-omap2/board-generic.c
+@@ -59,8 +59,8 @@ static void __init omap_generic_map_io(void)
+
+ MACHINE_START(OMAP_GENERIC, "Generic OMAP24xx")
+ /* Maintainer: Paul Mundt <paul.mundt@nokia.com> */
+- .phys_io = 0x48000000,
+- .io_pg_offst = ((0xd8000000) >> 18) & 0xfffc,
++ .phys_io = CONFIG_OMAP_DEBUG_LL_UART_PHY_ADDR,
++ .io_pg_offst = ((CONFIG_OMAP_DEBUG_LL_UART_PHY_ADDR - OMAP1_IO_OFFSET) >> 18) & 0xfffc,
+ .boot_params = 0x80000100,
+ .map_io = omap_generic_map_io,
+ .init_irq = omap_generic_init_irq,
+diff --git a/arch/arm/mach-omap2/board-h4.c b/arch/arm/mach-omap2/board-h4.c
+index 7eda321..4ce760f 100644
+--- a/arch/arm/mach-omap2/board-h4.c
++++ b/arch/arm/mach-omap2/board-h4.c
+@@ -379,8 +379,8 @@ static void __init omap_h4_map_io(void)
+
+ MACHINE_START(OMAP_H4, "OMAP2420 H4 board")
+ /* Maintainer: Paul Mundt <paul.mundt@nokia.com> */
+- .phys_io = 0x48000000,
+- .io_pg_offst = ((0xd8000000) >> 18) & 0xfffc,
++ .phys_io = CONFIG_OMAP_DEBUG_LL_UART_PHY_ADDR,
++ .io_pg_offst = ((CONFIG_OMAP_DEBUG_LL_UART_PHY_ADDR + OMAP2_IO_OFFSET) >> 18) & 0xfffc,
+ .boot_params = 0x80000100,
+ .map_io = omap_h4_map_io,
+ .init_irq = omap_h4_init_irq,
+diff --git a/arch/arm/mach-omap2/board-ldp.c b/arch/arm/mach-omap2/board-ldp.c
+index 4a4b300..5f06434 100644
+--- a/arch/arm/mach-omap2/board-ldp.c
++++ b/arch/arm/mach-omap2/board-ldp.c
+@@ -398,8 +398,8 @@ static void __init omap_ldp_map_io(void)
+ }
+
+ MACHINE_START(OMAP_LDP, "OMAP LDP board")
+- .phys_io = 0x48000000,
+- .io_pg_offst = ((0xd8000000) >> 18) & 0xfffc,
++ .phys_io = CONFIG_OMAP_DEBUG_LL_UART_PHY_ADDR,
++ .io_pg_offst = ((CONFIG_OMAP_DEBUG_LL_UART_PHY_ADDR + OMAP2_IO_OFFSET) >> 18) & 0xfffc,
+ .boot_params = 0x80000100,
+ .map_io = omap_ldp_map_io,
+ .init_irq = omap_ldp_init_irq,
+diff --git a/arch/arm/mach-omap2/board-n8x0.c b/arch/arm/mach-omap2/board-n8x0.c
+index af6fcee..464b432 100644
+--- a/arch/arm/mach-omap2/board-n8x0.c
++++ b/arch/arm/mach-omap2/board-n8x0.c
+@@ -125,8 +125,8 @@ static void __init n8x0_init_machine(void)
+ }
+
+ MACHINE_START(NOKIA_N800, "Nokia N800")
+- .phys_io = 0x48000000,
+- .io_pg_offst = ((0xd8000000) >> 18) & 0xfffc,
++ .phys_io = CONFIG_OMAP_DEBUG_LL_UART_PHY_ADDR,
++ .io_pg_offst = ((CONFIG_OMAP_DEBUG_LL_UART_PHY_ADDR + OMAP2_IO_OFFSET) >> 18) & 0xfffc,
+ .boot_params = 0x80000100,
+ .map_io = n8x0_map_io,
+ .init_irq = n8x0_init_irq,
+@@ -135,8 +135,8 @@ MACHINE_START(NOKIA_N800, "Nokia N800")
+ MACHINE_END
+
+ MACHINE_START(NOKIA_N810, "Nokia N810")
+- .phys_io = 0x48000000,
+- .io_pg_offst = ((0xd8000000) >> 18) & 0xfffc,
++ .phys_io = CONFIG_OMAP_DEBUG_LL_UART_PHY_ADDR,
++ .io_pg_offst = ((CONFIG_OMAP_DEBUG_LL_UART_PHY_ADDR + OMAP2_IO_OFFSET) >> 18) & 0xfffc,
+ .boot_params = 0x80000100,
+ .map_io = n8x0_map_io,
+ .init_irq = n8x0_init_irq,
+@@ -145,8 +145,8 @@ MACHINE_START(NOKIA_N810, "Nokia N810")
+ MACHINE_END
+
+ MACHINE_START(NOKIA_N810_WIMAX, "Nokia N810 WiMAX")
+- .phys_io = 0x48000000,
+- .io_pg_offst = ((0xd8000000) >> 18) & 0xfffc,
++ .phys_io = CONFIG_OMAP_DEBUG_LL_UART_PHY_ADDR,
++ .io_pg_offst = ((CONFIG_OMAP_DEBUG_LL_UART_PHY_ADDR + OMAP2_IO_OFFSET) >> 18) & 0xfffc,
+ .boot_params = 0x80000100,
+ .map_io = n8x0_map_io,
+ .init_irq = n8x0_init_irq,
+diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
+index 07aee90..4d30948 100644
+--- a/arch/arm/mach-omap2/board-omap3beagle.c
++++ b/arch/arm/mach-omap2/board-omap3beagle.c
+@@ -428,8 +428,8 @@ static void __init omap3_beagle_map_io(void)
+
+ MACHINE_START(OMAP3_BEAGLE, "OMAP3 Beagle Board")
+ /* Maintainer: Syed Mohammed Khasim - http://beagleboard.org */
+- .phys_io = 0x48000000,
+- .io_pg_offst = ((0xd8000000) >> 18) & 0xfffc,
++ .phys_io = CONFIG_OMAP_DEBUG_LL_UART_PHY_ADDR,
++ .io_pg_offst = ((CONFIG_OMAP_DEBUG_LL_UART_PHY_ADDR + OMAP2_IO_OFFSET) >> 18) & 0xfffc,
+ .boot_params = 0x80000100,
+ .map_io = omap3_beagle_map_io,
+ .init_irq = omap3_beagle_init_irq,
+diff --git a/arch/arm/mach-omap2/board-omap3evm.c b/arch/arm/mach-omap2/board-omap3evm.c
+index c0cb29d..8f24dd6 100644
+--- a/arch/arm/mach-omap2/board-omap3evm.c
++++ b/arch/arm/mach-omap2/board-omap3evm.c
+@@ -324,8 +324,8 @@ static void __init omap3_evm_map_io(void)
+
+ MACHINE_START(OMAP3EVM, "OMAP3 EVM")
+ /* Maintainer: Syed Mohammed Khasim - Texas Instruments */
+- .phys_io = 0x48000000,
+- .io_pg_offst = ((0xd8000000) >> 18) & 0xfffc,
++ .phys_io = CONFIG_OMAP_DEBUG_LL_UART_PHY_ADDR,
++ .io_pg_offst = ((CONFIG_OMAP_DEBUG_LL_UART_PHY_ADDR + OMAP2_IO_OFFSET) >> 18) & 0xfffc,
+ .boot_params = 0x80000100,
+ .map_io = omap3_evm_map_io,
+ .init_irq = omap3_evm_init_irq,
+diff --git a/arch/arm/mach-omap2/board-omap3pandora.c b/arch/arm/mach-omap2/board-omap3pandora.c
+index 1991f19..05d1994 100644
+--- a/arch/arm/mach-omap2/board-omap3pandora.c
++++ b/arch/arm/mach-omap2/board-omap3pandora.c
+@@ -412,8 +412,8 @@ static void __init omap3pandora_map_io(void)
+ }
+
+ MACHINE_START(OMAP3_PANDORA, "Pandora Handheld Console")
+- .phys_io = 0x48000000,
+- .io_pg_offst = ((0xd8000000) >> 18) & 0xfffc,
++ .phys_io = CONFIG_OMAP_DEBUG_LL_UART_PHY_ADDR,
++ .io_pg_offst = ((CONFIG_OMAP_DEBUG_LL_UART_PHY_ADDR + OMAP2_IO_OFFSET) >> 18) & 0xfffc,
+ .boot_params = 0x80000100,
+ .map_io = omap3pandora_map_io,
+ .init_irq = omap3pandora_init_irq,
+diff --git a/arch/arm/mach-omap2/board-overo.c b/arch/arm/mach-omap2/board-overo.c
+index a9d7c2e..4057a1b 100644
+--- a/arch/arm/mach-omap2/board-overo.c
++++ b/arch/arm/mach-omap2/board-overo.c
+@@ -454,8 +454,8 @@ static void __init overo_map_io(void)
+ }
+
+ MACHINE_START(OVERO, "Gumstix Overo")
+- .phys_io = 0x48000000,
+- .io_pg_offst = ((0xd8000000) >> 18) & 0xfffc,
++ .phys_io = CONFIG_OMAP_DEBUG_LL_UART_PHY_ADDR,
++ .io_pg_offst = ((CONFIG_OMAP_DEBUG_LL_UART_PHY_ADDR + OMAP2_IO_OFFSET) >> 18) & 0xfffc,
+ .boot_params = 0x80000100,
+ .map_io = overo_map_io,
+ .init_irq = overo_init_irq,
+diff --git a/arch/arm/mach-omap2/board-rx51.c b/arch/arm/mach-omap2/board-rx51.c
+index 8a3dc61..4b97fe8 100644
+--- a/arch/arm/mach-omap2/board-rx51.c
++++ b/arch/arm/mach-omap2/board-rx51.c
+@@ -88,8 +88,8 @@ static void __init rx51_map_io(void)
+
+ MACHINE_START(NOKIA_RX51, "Nokia RX-51 board")
+ /* Maintainer: Lauri Leukkunen <lauri.leukkunen@nokia.com> */
+- .phys_io = 0x48000000,
+- .io_pg_offst = ((0xd8000000) >> 18) & 0xfffc,
++ .phys_io = CONFIG_OMAP_DEBUG_LL_UART_PHY_ADDR,
++ .io_pg_offst = ((CONFIG_OMAP_DEBUG_LL_UART_PHY_ADDR + OMAP2_IO_OFFSET) >> 18) & 0xfffc,
+ .boot_params = 0x80000100,
+ .map_io = rx51_map_io,
+ .init_irq = rx51_init_irq,
+diff --git a/arch/arm/mach-omap2/board-zoom2.c b/arch/arm/mach-omap2/board-zoom2.c
+index 4d295d5..58baee3 100644
+--- a/arch/arm/mach-omap2/board-zoom2.c
++++ b/arch/arm/mach-omap2/board-zoom2.c
+@@ -280,8 +280,8 @@ static void __init omap_zoom2_map_io(void)
+ }
+
+ MACHINE_START(OMAP_ZOOM2, "OMAP Zoom2 board")
+- .phys_io = 0x48000000,
+- .io_pg_offst = ((0xd8000000) >> 18) & 0xfffc,
++ .phys_io = CONFIG_OMAP_DEBUG_LL_UART_PHY_ADDR,
++ .io_pg_offst = ((ZOOM2_EXT_QUART_VIRT) >> 18) & 0xfffc,
+ .boot_params = 0x80000100,
+ .map_io = omap_zoom2_map_io,
+ .init_irq = omap_zoom2_init_irq,
+--
+1.6.3.2
+
diff --git a/meta/recipes-kernel/linux/linux-omap3-pm-git/zoom2/0003-OMAP-Zoom2-Add-DEBUG_LL-interface-using-external-Qua.patch b/meta/recipes-kernel/linux/linux-omap3-pm-git/zoom2/0003-OMAP-Zoom2-Add-DEBUG_LL-interface-using-external-Qua.patch
new file mode 100644
index 0000000000..e39090f6cf
--- /dev/null
+++ b/meta/recipes-kernel/linux/linux-omap3-pm-git/zoom2/0003-OMAP-Zoom2-Add-DEBUG_LL-interface-using-external-Qua.patch
@@ -0,0 +1,171 @@
+From 98d46e88ffe23a9adcf6ae1acf19b210d5ac3737 Mon Sep 17 00:00:00 2001
+From: Vikram Pandita <vikram.pandita@ti.com>
+Date: Thu, 20 Aug 2009 17:16:24 -0500
+Subject: [PATCH 3/5] OMAP: Zoom2: Add DEBUG_LL interface using external Quart
+
+This patch adds DEBUG_LL interface for Zoom2 board.
+The low level debug uart now points corrctly to External Quad uart
+controller on detachable debug board.
+
+The Quad uart is available over GPMC chip select with physical address
+0x10000000.
+
+This physical address has been mapped to virtual address 0xFB000000
+as per static mapping.
+
+Also the register accesses to Quad uart have a requirement of shift=1
+based on the h/w mapping of the registers
+
+This patch is adapted from a version by Erik Gilling:
+http://android.git.kernel.org/?p=kernel/omap.git;
+a=commit;h=e9d72efdd88877d2d6ea74a08983ace0dcc771d3
+
+Signed-off-by: Vikram Pandita <vikram.pandita@ti.com>
+Cc: Erik Gilling <konkers@android.com>
+---
+ arch/arm/mach-omap2/board-zoom-debugboard.c | 5 +++--
+ arch/arm/mach-omap2/board-zoom2.c | 15 +++++++++++++++
+ arch/arm/plat-omap/include/mach/debug-macro.S | 14 ++++++++++++--
+ arch/arm/plat-omap/include/mach/io.h | 6 ++++++
+ arch/arm/plat-omap/include/mach/uncompress.h | 7 +++++++
+ 5 files changed, 43 insertions(+), 4 deletions(-)
+
+diff --git a/arch/arm/mach-omap2/board-zoom-debugboard.c b/arch/arm/mach-omap2/board-zoom-debugboard.c
+index f546063..f8b0726 100644
+--- a/arch/arm/mach-omap2/board-zoom-debugboard.c
++++ b/arch/arm/mach-omap2/board-zoom-debugboard.c
+@@ -82,9 +82,10 @@ static inline void __init zoom2_init_smsc911x(void)
+
+ static struct plat_serial8250_port serial_platform_data[] = {
+ {
+- .mapbase = 0x10000000,
++ .membase = IOMEM(ZOOM2_EXT_QUART_VIRT),
++ .mapbase = ZOOM2_EXT_QUART_PHYS,
+ .irq = OMAP_GPIO_IRQ(102),
+- .flags = UPF_BOOT_AUTOCONF|UPF_IOREMAP|UPF_SHARE_IRQ,
++ .flags = UPF_BOOT_AUTOCONF|UPF_SHARE_IRQ,
+ .irqflags = IRQF_SHARED | IRQF_TRIGGER_RISING,
+ .iotype = UPIO_MEM,
+ .regshift = 1,
+diff --git a/arch/arm/mach-omap2/board-zoom2.c b/arch/arm/mach-omap2/board-zoom2.c
+index 58baee3..fc27b07 100644
+--- a/arch/arm/mach-omap2/board-zoom2.c
++++ b/arch/arm/mach-omap2/board-zoom2.c
+@@ -16,9 +16,11 @@
+ #include <linux/gpio.h>
+ #include <linux/i2c/twl4030.h>
+ #include <linux/regulator/machine.h>
++#include <linux/io.h>
+
+ #include <asm/mach-types.h>
+ #include <asm/mach/arch.h>
++#include <asm/mach/map.h>
+
+ #include <mach/common.h>
+ #include <mach/usb.h>
+@@ -273,9 +275,22 @@ static void __init omap_zoom2_init(void)
+ usb_musb_init();
+ }
+
++static struct map_desc zoom2_io_desc[] __initdata = {
++ {
++ .virtual = ZOOM2_EXT_QUART_VIRT,
++ .pfn = __phys_to_pfn(ZOOM2_EXT_QUART_PHYS),
++ .length = ZOOM2_EXT_QUART_SIZE,
++ .type = MT_DEVICE
++ }
++};
++
+ static void __init omap_zoom2_map_io(void)
+ {
+ omap2_set_globals_343x();
++
++ /* Map external quad UART virt to phy mapping */
++ iotable_init(zoom2_io_desc, ARRAY_SIZE(zoom2_io_desc));
++
+ omap2_map_common_io();
+ }
+
+diff --git a/arch/arm/plat-omap/include/mach/debug-macro.S b/arch/arm/plat-omap/include/mach/debug-macro.S
+index f546d6c..a97f2fb 100644
+--- a/arch/arm/plat-omap/include/mach/debug-macro.S
++++ b/arch/arm/plat-omap/include/mach/debug-macro.S
+@@ -12,6 +12,14 @@
+ */
+ #include "io.h"
+
++#if (CONFIG_OMAP_DEBUG_LL_UART_PHY_ADDR == 0x10000000)
++#define REGSHIFT 1
++#define UART_VIRT_TO_PHY_OFFSET ZOOM2_EXT_QUART_PHY_TO_VIRT_OFF
++#else
++#define REGSHIFT 2
++#define UART_VIRT_TO_PHY_OFFSET OMAP2_IO_OFFSET
++#endif
++
+ .macro addruart,rx
+ mrc p15, 0, \rx, c1, c0
+ tst \rx, #1 @ MMU enabled?
+@@ -22,7 +30,7 @@
+ #else
+ /* omap2/omap3/omap4 */
+ ldr \rx, =CONFIG_OMAP_DEBUG_LL_UART_PHY_ADDR @ physical base address
+- orrne \rx, \rx, #OMAP2_IO_OFFSET @ virtual base
++ orrne \rx, \rx, #UART_VIRT_TO_PHY_OFFSET @ virtual base
+ #endif
+ .endm
+
+@@ -31,13 +39,15 @@
+ .endm
+
+ .macro busyuart,rd,rx
+-1001: ldrb \rd, [\rx, #(0x5 << 2)] @ OMAP-1510 and friends
++1001: ldrb \rd, [\rx, #(0x5 << REGSHIFT)] @ OMAP-1510 and friends
+ and \rd, \rd, #0x60
+ teq \rd, #0x60
++#if (CONFIG_OMAP_DEBUG_LL_UART_PHY_ADDR != 0x10000000)
+ beq 1002f
+ ldrb \rd, [\rx, #(0x5 << 0)] @ OMAP-730 only
+ and \rd, \rd, #0x60
+ teq \rd, #0x60
++#endif
+ bne 1001b
+ 1002:
+ .endm
+diff --git a/arch/arm/plat-omap/include/mach/io.h b/arch/arm/plat-omap/include/mach/io.h
+index 8d32df3..97702e6 100644
+--- a/arch/arm/plat-omap/include/mach/io.h
++++ b/arch/arm/plat-omap/include/mach/io.h
+@@ -169,6 +169,12 @@
+ #define DSP_MMU_34XX_VIRT 0xe2000000
+ #define DSP_MMU_34XX_SIZE SZ_4K
+
++/* Map External Quad UART for Zoom2 board */
++#define ZOOM2_EXT_QUART_PHYS 0x10000000 /* PHY address if fixed */
++#define ZOOM2_EXT_QUART_PHY_TO_VIRT_OFF 0xeb000000
++#define ZOOM2_EXT_QUART_VIRT 0xfb000000
++#define ZOOM2_EXT_QUART_SIZE SZ_16
++
+ /*
+ * ----------------------------------------------------------------------------
+ * Omap4 specific IO mapping
+diff --git a/arch/arm/plat-omap/include/mach/uncompress.h b/arch/arm/plat-omap/include/mach/uncompress.h
+index 0e21eb3..959195a 100644
+--- a/arch/arm/plat-omap/include/mach/uncompress.h
++++ b/arch/arm/plat-omap/include/mach/uncompress.h
+@@ -41,6 +41,13 @@ static void putc(int c)
+ #if defined(CONFIG_DEBUG_LL)
+ uart = (volatile u8 *)(CONFIG_OMAP_DEBUG_LL_UART_PHY_ADDR);
+
++#if (CONFIG_OMAP_DEBUG_LL_UART_PHY_ADDR == 0x10000000)
++ /* External UART has a shift=1 requirement
++ * Internal OMAP UARTs have shift=2 requirement
++ */
++ shift = 1;
++#endif
++
+ #ifdef CONFIG_ARCH_OMAP1
+ /* Determine which serial port to use */
+ do {
+--
+1.6.3.2
+
diff --git a/meta/recipes-kernel/linux/linux-omap3-pm-git/zoom2/0005-OMAP-Zoom2-Release-Dbg-board-detect-gpio.patch b/meta/recipes-kernel/linux/linux-omap3-pm-git/zoom2/0005-OMAP-Zoom2-Release-Dbg-board-detect-gpio.patch
new file mode 100644
index 0000000000..a01f65f890
--- /dev/null
+++ b/meta/recipes-kernel/linux/linux-omap3-pm-git/zoom2/0005-OMAP-Zoom2-Release-Dbg-board-detect-gpio.patch
@@ -0,0 +1,41 @@
+From 04c8398ae7dfdbe0d9aaf27fdda35f6ab91e8b85 Mon Sep 17 00:00:00 2001
+From: Vikram Pandita <vikram.pandita@ti.com>
+Date: Thu, 20 Aug 2009 17:31:58 -0500
+Subject: [PATCH 5/5] OMAP: Zoom2: Release Dbg board detect gpio
+
+Release the Dbg board detection gpio once its purpose is served
+
+Signed-off-by: Vikram Pandita <vikram.pandita@ti.com>
+---
+ arch/arm/mach-omap2/board-zoom-debugboard.c | 7 ++++---
+ 1 files changed, 4 insertions(+), 3 deletions(-)
+
+diff --git a/arch/arm/mach-omap2/board-zoom-debugboard.c b/arch/arm/mach-omap2/board-zoom-debugboard.c
+index 4dd714d..d80e448 100644
+--- a/arch/arm/mach-omap2/board-zoom-debugboard.c
++++ b/arch/arm/mach-omap2/board-zoom-debugboard.c
+@@ -130,6 +130,7 @@ static inline void __init zoom2_init_quaduart(void)
+ static inline int omap_zoom2_debugboard_detect(void)
+ {
+ int debug_board_detect = 0;
++ int ret = 1;
+
+ debug_board_detect = ZOOM2_SMSC911X_GPIO;
+
+@@ -141,10 +142,10 @@ static inline int omap_zoom2_debugboard_detect(void)
+ gpio_direction_input(debug_board_detect);
+
+ if (!gpio_get_value(debug_board_detect)) {
+- gpio_free(debug_board_detect);
+- return 0;
++ ret = 0;
+ }
+- return 1;
++ gpio_free(debug_board_detect);
++ return ret;
+ }
+
+ static struct platform_device *zoom2_devices[] __initdata = {
+--
+1.6.3.2
+