[PATCH 6/6] drivers/net: add designware driver
Johannes Stezenbach
js at sig21.net
Wed Jun 20 04:11:58 EDT 2012
Hi Sascha,
On Wed, Jun 20, 2012 at 09:13:01AM +0200, Sascha Hauer wrote:
> On Mon, Jun 18, 2012 at 04:48:00PM +0200, Johannes Stezenbach wrote:
> > Straight forward port of Synopsys Designware ethernet
> > driver from u-boot v2012.04.01.
...
> > +config DRIVER_NET_DESIGNWARE
> > + bool "Designware Universal MAC ethernet driver"
> > + select MIIDEV
> > + depends on HAS_DESIGNWARE_ETH
> > + help
> > + This option enables support for the Synopsys
> > + Designware Core Univesal MAC 10M/100M/1G ethernet IP.
>
> This driver uses DMA, but it has no cache flush/invalidation. At least
> on ARM this means that it won't work with MMU enabled, so we should
> either add the following to Kconfig:
>
> depends on !ARM || !MMU
>
> Or add the dma_* functions. I added hints where to add these functions
> inline, but I can't test this.
Well, the driver was tested on a platform with ARM926EJ-S CPU
and works -- because it uses dma_alloc_coherent(). That
might not be optimal wrt performance, but it matches what
the u-boot driver is doing. Do you want me to convert it
to use cachable memory and dma flush/inv?
> > + start = get_time_ns();
> > + while (readl(&mac_p->miiaddr) & MII_BUSY) {
> > + if (is_timeout(start, 10 * MSECOND)) {
> > + dev_err(&priv->netdev.dev, "MDIO timeout\n");
> > + return -EIO;
> > + }
> > + udelay(10);
>
> We do not need udelay in timeout loops as we are polling anyway.
OK, will fix
> > +#if defined(CONFIG_DW_ALTDESCRIPTOR)
>
> Do we need this? If yes, we should add an (invisible, board selectable)
> option to Kconfig.
>
> In U-Boot this is described with:
>
> 1. CONFIG_DW_ALTDESCRIPTOR
> Define this to use the Alternate/Enhanced Descriptor configurations.
>
> Does this mean this is an alternative way to use this hardware or does
> this mean it's another version (or IP core configuration) of this hardware?
This depends on IP core configuration. (The major difference of the
alternate descriptor is that it has a larger length field
with can support jumbo packets.)
I wasn't sure about Kconfig because of the arch/arm/board/*/config.h.
To me it looked like config.h is a good place for this?
Thanks,
Johannes
More information about the barebox
mailing list