[U-Boot] [PATCH] arm: Kirkwood: Add memory barriers to kwgbe_send/recv

Stefan Roese sr at denx.de
Wed Jul 1 19:09:21 CEST 2009


Hi Detlev,

On Wednesday 01 July 2009 18:56:18 Detlev Zundel wrote:
> > Add memory barriers to kwgbe_send/recv
> >
> > kwgbe_send/recv both have loops waiting for the hardware to set  a bit.
> > GCC 4.3.3 cleverly optimizes this to ... a while(1); loop. This patch
> > introduces memory barriers to force re-loading of the transmit
> > descriptor.
> >
> > mb() wasn't defined for arm, but perhaps it should?
>
> You should rather use read/write accessor macros which "do the right
> thing".  Try using readl() for the loop.  Memory barriers do not belong
> into "upper level" code.

I know that we advertised the usage of the io accessor functions for quite 
some time now. But I'm not so sure here anymore. One disadvantage of this 
usage could be speed penalty by the usage of too many unnecessary barriers 
(included via the accessor functions on some platforms). 

I remember a discussion either on the linuxppc-dev, linux-arm-kernel or the 
nextdev list about removing the accessor functions from the Linux version of 
this Marvell ethernet drivers (mv643xx_eth.c) at some time because of this 
speed penalty. Sorry but I don't have a link for this mlist discussion.

Just my 0.02$.

Best regards,
Stefan

=====================================================================
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-0 Fax: +49-8142-66989-80  Email: office at denx.de
=====================================================================


More information about the U-Boot mailing list