[U-Boot] [PATCH 2/4] net: Move Emaclite to NET_MULTI

Ben Warren biggerbadderben at gmail.com
Wed Sep 1 07:48:10 CEST 2010


  Hi Michal,

Sorry for the delay in reviewing

On 8/2/2010 5:49 AM, Michal Simek wrote:
> Emaclite was using old net api that's why
> this patch move emaclite to NET_MULTI api.
>
> Signed-off-by: Michal Simek<monstr at monstr.eu>
> ---
>   drivers/net/xilinx_emaclite.c |   84 +++++++++++++++++++++++------------------
>   include/netdev.h              |    1 +
>   2 files changed, 48 insertions(+), 37 deletions(-)
>
> diff --git a/drivers/net/xilinx_emaclite.c b/drivers/net/xilinx_emaclite.c
> index 0820daa..f460525 100644
> --- a/drivers/net/xilinx_emaclite.c
> +++ b/drivers/net/xilinx_emaclite.c
> @@ -26,6 +26,7 @@
>   #include<common.h>
>   #include<net.h>
>   #include<config.h>
> +#include<malloc.h>
>   #include<asm/io.h>
>
>   #undef DEBUG
> @@ -63,26 +64,19 @@
>   #define XEL_RSR_RECV_IE_MASK		0x00000008UL
>
>   typedef struct {
> -	unsigned int baseaddress;	/* Base address for device (IPIF) */
> -	unsigned int nexttxbuffertouse;	/* Next TX buffer to write to */
> -	unsigned int nextrxbuffertouse;	/* Next RX buffer to read from */
> -	unsigned char deviceid;		/* Unique ID of device - for future */
> +	u32 baseaddress;	/* Base address for device (IPIF) */
> +	u32 nexttxbuffertouse;	/* Next TX buffer to write to */
> +	u32 nextrxbuffertouse;	/* Next RX buffer to read from */
> +	uchar deviceid;		/* Unique ID of device - for future */
>   } xemaclite;
>
>   static xemaclite emaclite;
>
>   static u32 etherrxbuff[PKTSIZE_ALIGN/4]; /* Receive buffer */
>
> -/* hardcoded MAC address for the Xilinx EMAC Core when env is nowhere*/
> -#ifdef CONFIG_ENV_IS_NOWHERE
> -static u8 emacaddr[ENET_ADDR_LENGTH] = { 0x00, 0x0a, 0x35, 0x00, 0x22, 0x01 };
> -#else
> -static u8 emacaddr[ENET_ADDR_LENGTH];
> -#endif
> -
> -void xemaclite_alignedread (u32 * srcptr, void *destptr, unsigned bytecount)
> +static void xemaclite_alignedread (u32 *srcptr, void *destptr, u32 bytecount)
>   {
> -	unsigned int i;
> +	u32 i;
>   	u32 alignbuffer;
>   	u32 *to32ptr;
>   	u32 *from32ptr;
> @@ -107,9 +101,9 @@ void xemaclite_alignedread (u32 * srcptr, void *destptr, unsigned bytecount)
>   	}
>   }
>
> -void xemaclite_alignedwrite (void *srcptr, u32 destptr, unsigned bytecount)
> +static void xemaclite_alignedwrite (void *srcptr, u32 destptr, u32 bytecount)
>   {
> -	unsigned i;
> +	u32 i;
>   	u32 alignbuffer;
>   	u32 *to32ptr = (u32 *) destptr;
>   	u32 *from32ptr;
> @@ -134,23 +128,16 @@ void xemaclite_alignedwrite (void *srcptr, u32 destptr, unsigned bytecount)
>   	*to32ptr++ = alignbuffer;
>   }
>
> -void eth_halt (void)
> +static void emaclite_halt(struct eth_device *dev)
>   {
>   	debug ("eth_halt\n");
>   }
>
> -int eth_init (bd_t * bis)
> +static int emaclite_init(struct eth_device *dev, bd_t *bis)
>   {
> -	uchar enetaddr[6];
> -
>   	debug ("EmacLite Initialization Started\n");
>   	memset (&emaclite, 0, sizeof (xemaclite));
> -	emaclite.baseaddress = XILINX_EMACLITE_BASEADDR;
> -
> -	if (!eth_getenv_enetaddr("ethaddr", enetaddr)) {
> -		memcpy(enetaddr, emacaddr, ENET_ADDR_LENGTH);
> -		eth_setenv_enetaddr("ethaddr", enetaddr);
> -	}
> +	emaclite.baseaddress = dev->iobase;
>
>   /*
>    * TX - TX_PING&  TX_PONG initialization
> @@ -158,7 +145,7 @@ int eth_init (bd_t * bis)
>   	/* Restart PING TX */
>   	out_be32 (emaclite.baseaddress + XEL_TSR_OFFSET, 0);
>   	/* Copy MAC address */
> -	xemaclite_alignedwrite (enetaddr,
> +	xemaclite_alignedwrite (dev->enetaddr,
>   		emaclite.baseaddress, ENET_ADDR_LENGTH);
>   	/* Set the length */
>   	out_be32 (emaclite.baseaddress + XEL_TPLR_OFFSET, ENET_ADDR_LENGTH);
> @@ -171,7 +158,7 @@ int eth_init (bd_t * bis)
>   #ifdef CONFIG_XILINX_EMACLITE_TX_PING_PONG
>   	/* The same operation with PONG TX */
>   	out_be32 (emaclite.baseaddress + XEL_TSR_OFFSET + XEL_BUFFER_OFFSET, 0);
> -	xemaclite_alignedwrite (enetaddr, emaclite.baseaddress +
> +	xemaclite_alignedwrite (dev->enetaddr, emaclite.baseaddress +
>   		XEL_BUFFER_OFFSET, ENET_ADDR_LENGTH);
>   	out_be32 (emaclite.baseaddress + XEL_TPLR_OFFSET, ENET_ADDR_LENGTH);
Please consider moving this stuff to a separate function.  If you bind 
it to dev->write_hwaddr(), programming will occur at initialization time.
>   	out_be32 (emaclite.baseaddress + XEL_TSR_OFFSET + XEL_BUFFER_OFFSET,
> @@ -194,7 +181,7 @@ int eth_init (bd_t * bis)
>   	return 0;
>   }
>
> -int xemaclite_txbufferavailable (xemaclite * instanceptr)
> +static int xemaclite_txbufferavailable (xemaclite *instanceptr)
>   {
>   	u32 reg;
>   	u32 txpingbusy;
> @@ -216,12 +203,12 @@ int xemaclite_txbufferavailable (xemaclite * instanceptr)
>   	return (!(txpingbusy&&  txpongbusy));
>   }
>
> -int eth_send (volatile void *ptr, int len) {
> -
> -	unsigned int reg;
> -	unsigned int baseaddress;
> +static int emaclite_send (struct eth_device *dev, volatile void *ptr, int len)
> +{
> +	u32 reg;
> +	u32 baseaddress;
>
> -	unsigned maxtry = 1000;
> +	u32 maxtry = 1000;
>
>   	if (len>  ENET_MAX_MTU)
>   		len = ENET_MAX_MTU;
> @@ -293,11 +280,11 @@ int eth_send (volatile void *ptr, int len) {
>   	return 0;
>   }
>
> -int eth_rx (void)
> +static int emaclite_recv(struct eth_device *dev)
>   {
> -	unsigned int length;
> -	unsigned int reg;
> -	unsigned int baseaddress;
> +	u32 length;
> +	u32 reg;
> +	u32 baseaddress;
>
>   	baseaddress = emaclite.baseaddress + emaclite.nextrxbuffertouse;
>   	reg = in_be32 (baseaddress + XEL_RSR_OFFSET);
> @@ -353,3 +340,26 @@ int eth_rx (void)
>   	return 1;
>
>   }
> +
> +int xilinx_emaclite_initialize (bd_t *bis)
> +{
> +	struct eth_device *dev;
> +
> +	dev = malloc(sizeof(*dev));
> +	if (dev == NULL)
> +		hang();
> +
> +	memset(dev, 0, sizeof(*dev));
> +	sprintf(dev->name, "Xilinx Emaclite");
> +
> +	dev->iobase = XILINX_EMACLITE_BASEADDR;
Can you pass this in as a parameter instead?  You don't seem to use 
'bis', so it's not necessary
> +	dev->priv = 0;
> +	dev->init = emaclite_init;
> +	dev->halt = emaclite_halt;
> +	dev->send = emaclite_send;
> +	dev->recv = emaclite_recv;
> +
> +	eth_register(dev);
> +
> +	return 0;
> +}
> diff --git a/include/netdev.h b/include/netdev.h
> index 94eedfe..979fb57 100644
> --- a/include/netdev.h
> +++ b/include/netdev.h
> @@ -88,6 +88,7 @@ int tsi108_eth_initialize(bd_t *bis);
>   int uec_initialize(int index);
>   int uec_standard_init(bd_t *bis);
>   int uli526x_initialize(bd_t *bis);
> +int xilinx_emaclite_initialize (bd_t *bis);
>   int sh_eth_initialize(bd_t *bis);
>   int dm9000_initialize(bd_t *bis);
regards,
Ben


More information about the U-Boot mailing list