[RESEND][PATCH] ARM: debug: add support for Palmchip 16550-like UART

Mason slash.tmp at free.fr
Wed Nov 4 07:39:36 PST 2015


On 27/10/2015 13:57, Mans Rullgard wrote:

> Some SoCs have a Palmchip UART with a non-standard register layout.
> This allows the debug console to work with these.
> 
> Signed-off-by: Mans Rullgard <mans at mansr.com>
> ---
>  arch/arm/Kconfig.debug        |  8 ++++++++
>  arch/arm/include/debug/8250.S | 12 ++++++++++++
>  2 files changed, 20 insertions(+)
> 
> diff --git a/arch/arm/Kconfig.debug b/arch/arm/Kconfig.debug
> index 0cfd7f9..9039fff 100644
> --- a/arch/arm/Kconfig.debug
> +++ b/arch/arm/Kconfig.debug
> @@ -1597,6 +1597,14 @@ config DEBUG_UART_8250_WORD
>  		DEBUG_BCM_KONA_UART || DEBUG_RK32_UART2 || \
>  		DEBUG_BRCMSTB_UART
>  
> +config DEBUG_UART_8250_PALMCHIP
> +	bool "8250 UART is Palmchip variant"
> +	depends on DEBUG_LL_UART_8250 || DEBUG_UART_8250

I am 100% clueless about the UART sequence in Linux.

There's earlyprintk, the boot console (polled?), the "full-blown"
console (with IRQs)...

If I want earlyprintk, I have to enable DEBUG_LL (?) so I'll have
DEBUG_LL_UART_8250, right? There's no way to pick DEBUG_UART_8250
in menuconfig, is there?

So I picked the following options:

CONFIG_DEBUG_LL=y
# CONFIG_DEBUG_ICEDCC is not set
# CONFIG_DEBUG_SEMIHOSTING is not set
CONFIG_DEBUG_LL_UART_8250=y
# CONFIG_DEBUG_LL_UART_PL01X is not set
CONFIG_DEBUG_LL_INCLUDE="debug/8250.S"
# CONFIG_DEBUG_UART_8250 is not set
# CONFIG_DEBUG_UART_BCM63XX is not set
CONFIG_DEBUG_UART_PHYS=0x10700
CONFIG_DEBUG_UART_VIRT=0xf0010700
CONFIG_DEBUG_UART_8250_SHIFT=2
CONFIG_DEBUG_UART_8250_WORD=y
CONFIG_DEBUG_UART_8250_PALMCHIP=y
# CONFIG_DEBUG_UART_8250_FLOW_CONTROL is not set
CONFIG_DEBUG_UNCOMPRESS=y
CONFIG_UNCOMPRESS_INCLUDE="debug/uncompress.h"
CONFIG_EARLY_PRINTK=y

I suppose I have to provide DEBUG_UART_PHYS because it needs
the address before it can parse the DT? But how am I supposed
to know the virtual address? Isn't that from iomap(UART_PHYS)?

'make' wouldn't let me proceed unless I gave something...

Then I have to add earlyprintk to my boot command line, right?
Do I need to specify more than that?
According to the documentation,

	earlyprintk=	[X86,SH,BLACKFIN,ARM,M68k]
			earlyprintk=vga
			earlyprintk=efi
			earlyprintk=xen
			earlyprintk=serial[,ttySn[,baudrate]]
			earlyprintk=serial[,0x...[,baudrate]]
			earlyprintk=ttySn[,baudrate]
			earlyprintk=dbgp[debugController#]
			earlyprintk=pciserial,bus:device.function[,baudrate]

> +	help
> +	  Palmchip provides a UART implementation compatible with 16550
> +	  except for having a different register layout.  Say Y here if
> +	  the debug UART is of this type.
> +
>  config DEBUG_UART_8250_FLOW_CONTROL
>  	bool "Enable flow control for 8250 UART"
>  	depends on DEBUG_LL_UART_8250 || DEBUG_UART_8250
> diff --git a/arch/arm/include/debug/8250.S b/arch/arm/include/debug/8250.S
> index 7f7446f..2332f40 100644
> --- a/arch/arm/include/debug/8250.S
> +++ b/arch/arm/include/debug/8250.S
> @@ -9,6 +9,18 @@
>   */
>  #include <linux/serial_reg.h>
>  
> +#ifdef CONFIG_DEBUG_UART_8250_PALMCHIP
> +
> +#undef UART_TX
> +#undef UART_LSR
> +#undef UART_MSR
> +
> +#define UART_TX 1
> +#define UART_LSR 7
> +#define UART_MSR 8
> +
> +#endif
> +
>  		.macro	addruart, rp, rv, tmp
>  		ldr	\rp, =CONFIG_DEBUG_UART_PHYS
>  		ldr	\rv, =CONFIG_DEBUG_UART_VIRT
> 

Regards.




More information about the linux-arm-kernel mailing list