[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