[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