[U-Boot] [PATCH] microblaze: usable uart16550 for big endian systems

Stephan Linz linz at li-pro.net
Thu Nov 24 19:29:40 CET 2011


Am Mittwoch, den 23.11.2011, 15:40 +0100 schrieb Michal Simek: 
> Hi Stephan,
> 
> >> Stephan Linz wrote:
> >>> As a result of the commit 6833260 the uart16550 driver
> >>> is broken for Microblaze big endian systems, because of
> >>> the missing 3 byte offset. Other than as described, the
> >>> U-Boot BSP does not treat properly the 3 byte offset.
> >>>
> >>> However, with the new 32 bit access to ns16550 registers
> >>> we can enable correct register access for Microblaze big
> >>> and little endian systems in the same manner.
> >> The reason why I have applied that patch is that baseaddress generation
> >> was moved to u-boot BSP out of u-boot configs.
> >>
> >> --snip--
> > 
> >> Anyway you solution looks interesting and I will test it.
> > 
> > However since commit 79df120 we can use direct 32 bit access to 8 bit
> > NS16550 registers without gap generation in ns16550.h ... we need sane
> > in_*/out_* implementation.
> > 
> 
> I have look at it and tested on BE/LE. For 32bit accesses we need to implement
> in/out_le32 functions which we don't have right now

Hi Michal,

Oh yes, of course. There are no *_le32 operations, not yet.

> that's why please remove this macro
> from your patch.
> 
> Our BSP generates/ed +3 offset that's why I prefer to mask it in the same patch
> to be sure that baseaddr is correct and compatible with old versions.
> 
> Here is patch I have used. Please add that changes to v2 patch.

I'll do it this way. Give me a little time to change and test it.
Currently I am sill working on refactoring of the LL TEMAC driver. I
hope, the refactored driver than can merge in mainline ...


Thanks,
Stephan

> diff --git a/include/configs/microblaze-generic.h b/include/configs/microblaze-generic.h
> index b740a28..8085130 100644
> --- a/include/configs/microblaze-generic.h
> +++ b/include/configs/microblaze-generic.h
> @@ -55,10 +55,16 @@
>   #elif XILINX_UART16550_BASEADDR
>   # define CONFIG_SYS_NS16550            1
>   # define CONFIG_SYS_NS16550_SERIAL
> +
> +#if defined(__MICROBLAZEEL__)
>   # define CONFIG_SYS_NS16550_REG_SIZE   -4
> +#else
> +# define CONFIG_SYS_NS16550_REG_SIZE   4
> +#endif
> +
>   # define CONFIG_CONS_INDEX             1
>   # define CONFIG_SYS_NS16550_COM1 \
> -                       (XILINX_UART16550_BASEADDR + 0x1000)
> +                       ((XILINX_UART16550_BASEADDR & ~0xF) + 0x1000)
>   # define CONFIG_SYS_NS16550_CLK        XILINX_UART16550_CLOCK_HZ
>   # define CONFIG_BAUDRATE       115200
> 
> 
> 

-- 
Viele Grüße,
Stephan Linz
______________________________________________________________________________
MB-Ref: http://www.li-pro.de/xilinx_mb:mbref:start
OpenDCC: http://www.li-pro.net/opendcc.phtml
PC/M: http://www.li-pro.net/pcm.phtml
Sourceforge: http://sourceforge.net/users/slz
Gitorious: https://gitorious.org/~slz



More information about the U-Boot mailing list