> -----Original Message----- > From: linux-omap-owner@vger.kernel.org > [mailto:linux-omap-owner@vger.kernel.org] On Behalf Of Tony Lindgren > Sent: Saturday, January 16, 2010 7:05 AM > To: linux-arm-kernel@lists.infradead.org > Cc: linux-omap@vger.kernel.org > Subject: [PATCH 2/4] omap: Make uncompress code and DEBUG_LL > code generic > > Define arch_decomp_setup() the same way as some other > architectures do. Use arch_id to configure the debug uart > based on the machine_is by storing it into the uart > scratchpad register for DEBUG_LL code to use. > > Signed-off-by: Tony Lindgren > --- > arch/arm/mach-omap1/include/mach/debug-macro.S | 67 +++++++++- > arch/arm/mach-omap1/serial.c | 12 ++ > arch/arm/mach-omap2/include/mach/debug-macro.S | 76 ++++++++--- > arch/arm/mach-omap2/serial.c | 11 ++ > arch/arm/plat-omap/include/plat/serial.h | 18 +++ > arch/arm/plat-omap/include/plat/uncompress.h | 168 > +++++++++++++++++------- > 6 files changed, 276 insertions(+), 76 deletions(-) > .... > static struct plat_serial8250_port serial_platform_data[] = { > diff --git a/arch/arm/mach-omap2/include/mach/debug-macro.S > b/arch/arm/mach-omap2/include/mach/debug-macro.S > index 0c96e1c..1b83584 100644 > --- a/arch/arm/mach-omap2/include/mach/debug-macro.S > +++ b/arch/arm/mach-omap2/include/mach/debug-macro.S > @@ -15,32 +15,66 @@ > > #include > > +omap_uart_phys: .word 0x0 > +omap_uart_virt: .word 0x0 > + > + /* > + * Note that this code won't work if the > bootloader passes > + * a wrong machine ID number in r1. To debug, > just hardcode > + * the desired UART phys and virt addresses > temporarily into > + * the omap_uart_phys and omap_uart_virt above. > + */ > .macro addruart,rx > + > + /* Use omap_uart_phys/virt if already configured */ > +10: mrc p15, 0, \rx, c1, c0 > + tst \rx, #1 @ MMU enabled? > + ldreq \rx, omap_uart_phys @ physical base address > + ldrne \rx, omap_uart_virt @ virtual base > + cmp \rx, #0 @ is port configured? > + bne 99f @ already configured > + > + /* Check UART1 scratchpad register for uart to use */ > mrc p15, 0, \rx, c1, c0 > tst \rx, #1 @ MMU enabled? > -#ifdef CONFIG_ARCH_OMAP2 > moveq \rx, #0x48000000 @ physical base address > movne \rx, #0xfa000000 @ 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, #0xfa000000 @ 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 > -#endif > + orr \rx, \rx, #0x0006a000 @ uart1 on omap2/3/4 > + ldrb \rx, [\rx, #(UART_SCR << > OMAP_PORT_SHIFT)] @ scratchpad > + > + /* Select the UART to use based on the UART1 > scratchpad value */ > + cmp \rx, #0 @ no port configured? > + beq 21f @ if none, try > to use UART1 > + cmp \rx, #OMAP2UART1 @ OMAP2/3/4UART1 > + beq 21f @ configure > OMAP2/3/4UART1 > + cmp \rx, #OMAP2UART2 @ OMAP2/3/4UART2 > + beq 22f @ configure > OMAP2/3/4UART2 > + cmp \rx, #OMAP2UART3 @ only on 24xx > + beq 23f @ configure OMAP2UART3 > + cmp \rx, #OMAP3UART3 @ only on 34xx > + beq 33f @ configure OMAP3UART3 Can you please add add OMAP4 UART3 case as well here using "OMAP4UART3". Attached patch fixes UART3 support for OMAP4 on top of your patches. Tested this on OMAP4430 SDP. You can fold this patch if you like @ configure OMAP4UART3 > + > + /* Configure the UART offset from the phys/virt base */ > +21: mov \rx, #0x0006a000 @ OMAP2/3/4UART1 > +22: mov \rx, #0x0006a000 > + add \rx, \rx, #0x00002000 @ OMAP2/3/4UART2 > + b 98f > +23: mov \rx, #0x0006a000 @ OMAP2/3/4UART1 > + add \rx, \rx, #0x00004000 @ OMAP2UART3 > + b 98f > +33: mov \rx, #0x0006a000 @ OMAP2/3/4UART1 > + add \rx, \rx, #0x00fb0000 > + add \rx, \rx, #0x00006000 @ OMAP3UART3 > + > + /* Store both phys and virt address for the uart */ > +98: add \rx, \rx, #0x48000000 @ phys base > + str \rx, omap_uart_phys > + sub \rx, \rx, #0x48000000 @ phys base > + add \rx, \rx, #0xfa000000 @ virt base > + str \rx, omap_uart_virt > + b 10b > +99: > .endm > > .macro senduart,rd,rx