Subject: [PATCHv2] ARM: debug: uncompress debug support for omap2plus

From: [email-masked] (Tony Lindgren)
Date: Tue, 2 Sep 2014 09:37:18 -0700

* kpark3469 at gmail.com <[email-masked]> [140826 01:29]:
> From: Sahara <[email-masked]>
> 
> Since OMAP low-level debug code places data in the .data section,
> The symbol DEBUG_UNCOMPRESS was defined with !DEBUG_OMAP2PLUS_UART.
> This patch removes the part using data section in debug/omap2plus.S,
> so DEBUG_UNCOMPRESS is now available on OMAP system.

Hmm the plan is to switch over to using the standard
DEBUG_LL_UART_8250 code and remove the runtime detection.

That will simplify things quite a bit and probably means this
patch won't be needed AFAIK.

Care to take a look at doing that instead? See for example
"[PATCH v9 5/9] arm: omap1: Migrate debug_ll macros to use 8250.S".

Regards,

Tony
 
> Signed-off-by: Sahara <[email-masked]>
> Tested-by: Afzal Mohammed <[email-masked]> (on am335x beagle
> bone white)
> ---
>  arch/arm/Kconfig.debug             |    3 +-
>  arch/arm/include/debug/omap2plus.S |   96 ++++++++++--------------------------
>  2 files changed, 27 insertions(+), 72 deletions(-)
> 
> diff --git a/arch/arm/Kconfig.debug b/arch/arm/Kconfig.debug
> index b11ad54..c0ad3e4 100644
> --- a/arch/arm/Kconfig.debug
> +++ b/arch/arm/Kconfig.debug
> @@ -1220,8 +1220,7 @@ config DEBUG_UART_8250_FLOW_CONTROL
>  config DEBUG_UNCOMPRESS
>  	bool
>  	depends on ARCH_MULTIPLATFORM || ARCH_MSM || PLAT_SAMSUNG
> -	default y if DEBUG_LL && !DEBUG_OMAP2PLUS_UART && \
> -		     (!DEBUG_TEGRA_UART || !ZBOOT_ROM)
> +	default y if DEBUG_LL && (!DEBUG_TEGRA_UART || !ZBOOT_ROM)
>  	help
>  	  This option influences the normal decompressor output for
>  	  multiplatform kernels.  Normally, multiplatform kernels disable
> diff --git a/arch/arm/include/debug/omap2plus.S b/arch/arm/include/debug/omap2plus.S
> index 6d867ae..0b7ec89 100644
> --- a/arch/arm/include/debug/omap2plus.S
> +++ b/arch/arm/include/debug/omap2plus.S
> @@ -58,115 +58,71 @@
>  
>  #define UART_OFFSET(addr)	((addr) & 0x00ffffff)
>  
> -		.pushsection .data
> -omap_uart_phys:	.word	0
> -omap_uart_virt:	.word	0
> -omap_uart_lsr:	.word	0
> -		.popsection
> -
>  		.macro	addruart, rp, rv, tmp
>  
> -		/* Use omap_uart_phys/virt if already configured */
> -10:		adr	\rp, 99f		@ get effective addr of 99f
> -		ldr	\rv, [\rp]		@ get absolute addr of 99f
> -		sub	\rv, \rv, \rp		@ offset between the two
> -		ldr	\rp, [\rp, #4]		@ abs addr of omap_uart_phys
> -		sub	\tmp, \rp, \rv		@ make it effective
> -		ldr	\rp, [\tmp, #0]		@ omap_uart_phys
> -		ldr	\rv, [\tmp, #4]		@ omap_uart_virt
> -		cmp	\rp, #0			@ is port configured?
> -		cmpne	\rv, #0
> -		bne	100f			@ already configured
> -
>  		/* Configure the UART offset from the phys/virt base */
> -#ifdef CONFIG_DEBUG_OMAP2UART1
> +#if defined(CONFIG_DEBUG_OMAP2UART1)
>  		mov	\rp, #UART_OFFSET(OMAP2_UART1_BASE)	@ omap2/3/4
>  		b	98f
> -#endif
> -#ifdef CONFIG_DEBUG_OMAP2UART2
> +#elif defined(CONFIG_DEBUG_OMAP2UART2)
>  		mov	\rp, #UART_OFFSET(OMAP2_UART2_BASE)	@ omap2/3/4
>  		b	98f
> -#endif
> -#ifdef CONFIG_DEBUG_OMAP2UART3
> +#elif defined(CONFIG_DEBUG_OMAP2UART3)
>  		mov	\rp, #UART_OFFSET(OMAP2_UART3_BASE)
>  		b	98f
> -#endif
> -#ifdef CONFIG_DEBUG_OMAP3UART3
> +#elif defined(CONFIG_DEBUG_OMAP3UART3)
>  		mov	\rp, #UART_OFFSET(OMAP3_UART1_BASE)
>  		add	\rp, \rp, #0x00fb0000
>  		add	\rp, \rp, #0x00006000		@ OMAP3_UART3_BASE
>  		b	98f
> -#endif
> -#ifdef CONFIG_DEBUG_OMAP4UART3
> +#elif defined(CONFIG_DEBUG_OMAP4UART3)
>  		mov	\rp, #UART_OFFSET(OMAP4_UART3_BASE)
>  		b	98f
> -#endif
> -#ifdef CONFIG_DEBUG_OMAP3UART4
> +#elif defined(CONFIG_DEBUG_OMAP3UART4)
>  		mov	\rp, #UART_OFFSET(OMAP3_UART1_BASE)
>  		add	\rp, \rp, #0x00fb0000
>  		add	\rp, \rp, #0x00028000		@ OMAP3_UART4_BASE
>  		b	98f
> -#endif
> -#ifdef CONFIG_DEBUG_OMAP4UART4
> +#elif defined(CONFIG_DEBUG_OMAP4UART4)
>  		mov	\rp, #UART_OFFSET(OMAP4_UART4_BASE)
>  		b	98f
> -#endif
> -#ifdef CONFIG_DEBUG_TI81XXUART1
> +#elif defined(CONFIG_DEBUG_TI81XXUART1)
>  		mov	\rp, #UART_OFFSET(TI81XX_UART1_BASE)
>  		b	98f
> -#endif
> -#ifdef CONFIG_DEBUG_TI81XXUART2
> +#elif defined(CONFIG_DEBUG_TI81XXUART2)
>  		mov	\rp, #UART_OFFSET(TI81XX_UART2_BASE)
>  		b	98f
> -#endif
> -#ifdef CONFIG_DEBUG_TI81XXUART3
> +#elif defined(CONFIG_DEBUG_TI81XXUART3)
>  		mov	\rp, #UART_OFFSET(TI81XX_UART3_BASE)
>  		b	98f
> -#endif
> -#ifdef CONFIG_DEBUG_AM33XXUART1
> +#elif defined(CONFIG_DEBUG_AM33XXUART1)
>  		ldr	\rp, =AM33XX_UART1_BASE
>  		and	\rp, \rp, #0x00ffffff
>  		b	97f
> -#endif
> -#ifdef CONFIG_DEBUG_ZOOM_UART
> +#elif defined(CONFIG_DEBUG_ZOOM_UART)
>  		ldr	\rp, =ZOOM_UART_BASE
> -		str	\rp, [\tmp, #0]		@ omap_uart_phys
> -		ldr	\rp, =ZOOM_UART_VIRT
> -		str	\rp, [\tmp, #4]		@ omap_uart_virt
> -		mov	\rp, #(UART_LSR << ZOOM_PORT_SHIFT)
> -		str	\rp, [\tmp, #8]		@ omap_uart_lsr
> +		ldr	\rv, =ZOOM_UART_VIRT
> +		mov	\tmp, #(UART_LSR << ZOOM_PORT_SHIFT)
> +		b	100f
> +#else
> +#error "Error! No proper debug option is defined."
>  #endif
> -		b	10b
>  
>  		/* AM33XX: Store both phys and virt address for the uart */
>  97:		add	\rp, \rp, #0x44000000	@ phys base
> -		str	\rp, [\tmp, #0]		@ omap_uart_phys
> -		sub	\rp, \rp, #0x44000000	@ phys base
> -		add	\rp, \rp, #0xf9000000	@ virt base
> -		str	\rp, [\tmp, #4]		@ omap_uart_virt
> -		mov	\rp, #(UART_LSR << OMAP_PORT_SHIFT)
> -		str	\rp, [\tmp, #8]		@ omap_uart_lsr
> +		sub	\rv, \rp, #0x44000000	@ phys base
> +		add	\rv, \rv, #0xf9000000	@ virt base
> +		mov	\tmp, #(UART_LSR << OMAP_PORT_SHIFT)
>  
> -		b	10b
> +		b	100f
>  
>  		/* Store both phys and virt address for the uart */
>  98:		add	\rp, \rp, #0x48000000	@ phys base
> -		str	\rp, [\tmp, #0]		@ omap_uart_phys
> -		sub	\rp, \rp, #0x48000000	@ phys base
> -		add	\rp, \rp, #0xfa000000	@ virt base
> -		str	\rp, [\tmp, #4]		@ omap_uart_virt
> -		mov	\rp, #(UART_LSR << OMAP_PORT_SHIFT)
> -		str	\rp, [\tmp, #8]		@ omap_uart_lsr
> -
> -		b	10b
> -
> -		.align
> -99:		.word	.
> -		.word	omap_uart_phys
> -		.ltorg
> -
> -100:		/* Pass the UART_LSR reg address */
> -		ldr	\tmp, [\tmp, #8]	@ omap_uart_lsr
> +		sub	\rv, \rp, #0x48000000	@ phys base
> +		add	\rv, \rv, #0xfa000000	@ virt base
> +		mov	\tmp, #(UART_LSR << OMAP_PORT_SHIFT)
> +
> +100:		/* Add the UART_LSR reg address */
>  		add	\rp, \rp, \tmp
>  		add	\rv, \rv, \tmp
>  		.endm
> -- 
> 1.7.9.5
>