[U-Boot] [PATCH v3] ns16550: change to allow 32 bit access to registers

Wolfgang Denk wd at denx.de
Wed Sep 7 23:22:24 CEST 2011


Dear Dave Aldridge,

In message <1314877212-31552-1-git-send-email-fovsoft at gmail.com> you wrote:
> If CONFIG_SYS_NS16550_MEM32 is defined then 32 bit memory
> mapped access will be used to read/write the uart registers.
> 
> This is especially useful for SoC devices that implement 16550
> compatible uarts but that have peripheral access width constraints.
> 
> Signed-off-by: Dave Aldridge <fovsoft at gmail.com>
...

> --- a/drivers/serial/ns16550.c
> +++ b/drivers/serial/ns16550.c
> @@ -19,6 +19,12 @@
>  #ifdef CONFIG_SYS_NS16550_PORT_MAPPED
>  #define serial_out(x,y)	outb(x,(ulong)y)
>  #define serial_in(y)	inb((ulong)y)
> +#elif defined(CONFIG_SYS_NS16550_MEM32) && (CONFIG_SYS_NS16550_REG_SIZE > 0)
> +#define serial_out(x,y) out_be32(y,x)
> +#define serial_in(y) 	in_be32(y)
> +#elif defined(CONFIG_SYS_NS16550_MEM32) && (CONFIG_SYS_NS16550_REG_SIZE < 0)
> +#define serial_out(x,y) out_le32(y,x)
> +#define serial_in(y) 	in_le32(y)

Sorry for the dumb question, but in which way is REG_SIZE > 0 or
REG_SIZE < 0 connected to the endianess of the target system?

My understanding is that this only defines how byte wide registers
need to be padded, i. e. wether they are connected to the highest or
to the lowest byte lane.  THis has nothing to do with the endianess of
the system, and it appears wrong to me, to imply such a relation here.

Detlev, what do you think?

>  #else
>  #define serial_out(x,y) writeb(x,y)
>  #define serial_in(y) 	readb(y)
> diff --git a/include/ns16550.h b/include/ns16550.h
> index 9ea81e9..d4ffac9 100644
> --- a/include/ns16550.h
> +++ b/include/ns16550.h
> @@ -23,6 +23,8 @@
>  
>  #if !defined(CONFIG_SYS_NS16550_REG_SIZE) || (CONFIG_SYS_NS16550_REG_SIZE == 0)
>  #error "Please define NS16550 registers size."
> +#elif defined(CONFIG_SYS_NS16550_MEM32)
> +#define UART_REG(x) unsigned int x;

I think you should rather use an explicit 32 bit data type here;
"int" may be 64 bits on some systems.

Best regards,

Wolfgang Denk

-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
"I like your game but we have to change the rules."


More information about the U-Boot mailing list