<snip>
> -----Original Message-----
> From: linux-omap-ow...@vger.kernel.org 
> [mailto:linux-omap-ow...@vger.kernel.org] On Behalf Of Tony Lindgren
> Sent: Saturday, January 16, 2010 7:05 AM
> To: linux-arm-ker...@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 <t...@atomide.com>
> ---
>  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 <plat/serial.h>
>  
> +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

Attachment: 0001-Update-DEBUG_LL-for-OMAP4.patch
Description: 0001-Update-DEBUG_LL-for-OMAP4.patch

Reply via email to