* [U-Boot] [PATCH] net: Fix emaclite driver to support little-endian microblaze
@ 2010-10-11 1:41 Michal Simek
2010-10-11 1:41 ` [U-Boot] [PATCH v2] net: Move Emaclite to NET_MULTI Michal Simek
` (2 more replies)
0 siblings, 3 replies; 5+ messages in thread
From: Michal Simek @ 2010-10-11 1:41 UTC (permalink / raw)
To: u-boot
Support New emaclite AXI IP.
Signed-off-by: Michal Simek <monstr@monstr.eu>
CC: Ben Warren <biggerbadderben@gmail.com>
---
drivers/net/xilinx_emaclite.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/net/xilinx_emaclite.c b/drivers/net/xilinx_emaclite.c
index 455ce0c..76af939 100644
--- a/drivers/net/xilinx_emaclite.c
+++ b/drivers/net/xilinx_emaclite.c
@@ -309,7 +309,7 @@ static int emaclite_recv(struct eth_device *dev)
#endif
}
/* Get the length of the frame that arrived */
- switch(((in_be32 (baseaddress + XEL_RXBUFF_OFFSET + 0xC)) &
+ switch(((ntohl(in_be32 (baseaddress + XEL_RXBUFF_OFFSET + 0xC))) &
0xFFFF0000 ) >> 16) {
case 0x806:
length = 42 + 20; /* FIXME size of ARP */
@@ -317,7 +317,7 @@ static int emaclite_recv(struct eth_device *dev)
break;
case 0x800:
length = 14 + 14 +
- (((in_be32 (baseaddress + XEL_RXBUFF_OFFSET + 0x10)) &
+ (((ntohl(in_be32 (baseaddress + XEL_RXBUFF_OFFSET + 0x10))) &
0xFFFF0000) >> 16); /* FIXME size of IP packet */
debug ("IP Packet\n");
break;
--
1.5.5.1
^ permalink raw reply related [flat|nested] 5+ messages in thread* [U-Boot] [PATCH v2] net: Move Emaclite to NET_MULTI 2010-10-11 1:41 [U-Boot] [PATCH] net: Fix emaclite driver to support little-endian microblaze Michal Simek @ 2010-10-11 1:41 ` Michal Simek 2010-10-12 6:34 ` Ben Warren 2010-10-12 6:34 ` [U-Boot] [PATCH] net: Fix emaclite driver to support little-endian microblaze Ben Warren 2010-10-14 19:26 ` Sergei Shtylyov 2 siblings, 1 reply; 5+ messages in thread From: Michal Simek @ 2010-10-11 1:41 UTC (permalink / raw) To: u-boot Emaclite was using old net api that's why this patch move emaclite to NET_MULTI api. Signed-off-by: Michal Simek <monstr@monstr.eu> CC: Ben Warren <biggerbadderben@gmail.com> --- v2: Pass base_addr as parameter v1: Initial version --- 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..455ce0c 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); 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, int base_addr) +{ + struct eth_device *dev; + + dev = malloc(sizeof(*dev)); + if (dev == NULL) + hang(); + + memset(dev, 0, sizeof(*dev)); + sprintf(dev->name, "Xilinx_Emaclite"); + + dev->iobase = base_addr; + 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..64bdf7b 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 base_addr); int sh_eth_initialize(bd_t *bis); int dm9000_initialize(bd_t *bis); -- 1.5.5.1 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* [U-Boot] [PATCH v2] net: Move Emaclite to NET_MULTI 2010-10-11 1:41 ` [U-Boot] [PATCH v2] net: Move Emaclite to NET_MULTI Michal Simek @ 2010-10-12 6:34 ` Ben Warren 0 siblings, 0 replies; 5+ messages in thread From: Ben Warren @ 2010-10-12 6:34 UTC (permalink / raw) To: u-boot Hi Michal, On 10/10/2010 6:41 PM, 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@monstr.eu> > CC: Ben Warren<biggerbadderben@gmail.com> > > --- > > v2: Pass base_addr as parameter > > v1: Initial version > --- > drivers/net/xilinx_emaclite.c | 84 +++++++++++++++++++++++------------------ > include/netdev.h | 1 + > 2 files changed, 48 insertions(+), 37 deletions(-) Applied to net repo. thanks, Ben ^ permalink raw reply [flat|nested] 5+ messages in thread
* [U-Boot] [PATCH] net: Fix emaclite driver to support little-endian microblaze 2010-10-11 1:41 [U-Boot] [PATCH] net: Fix emaclite driver to support little-endian microblaze Michal Simek 2010-10-11 1:41 ` [U-Boot] [PATCH v2] net: Move Emaclite to NET_MULTI Michal Simek @ 2010-10-12 6:34 ` Ben Warren 2010-10-14 19:26 ` Sergei Shtylyov 2 siblings, 0 replies; 5+ messages in thread From: Ben Warren @ 2010-10-12 6:34 UTC (permalink / raw) To: u-boot Hi Michal, On 10/10/2010 6:41 PM, Michal Simek wrote: > Support New emaclite AXI IP. > > Signed-off-by: Michal Simek<monstr@monstr.eu> > CC: Ben Warren<biggerbadderben@gmail.com> > --- > drivers/net/xilinx_emaclite.c | 4 ++-- > 1 files changed, 2 insertions(+), 2 deletions(-) > > diff --git a/drivers/net/xilinx_emaclite.c b/drivers/net/xilinx_emaclite.c > index 455ce0c..76af939 100644 > --- a/drivers/net/xilinx_emaclite.c > +++ b/drivers/net/xilinx_emaclite.c > @@ -309,7 +309,7 @@ static int emaclite_recv(struct eth_device *dev) > #endif > } > /* Get the length of the frame that arrived */ > - switch(((in_be32 (baseaddress + XEL_RXBUFF_OFFSET + 0xC))& > + switch(((ntohl(in_be32 (baseaddress + XEL_RXBUFF_OFFSET + 0xC)))& > 0xFFFF0000 )>> 16) { > case 0x806: > length = 42 + 20; /* FIXME size of ARP */ > @@ -317,7 +317,7 @@ static int emaclite_recv(struct eth_device *dev) > break; > case 0x800: > length = 14 + 14 + > - (((in_be32 (baseaddress + XEL_RXBUFF_OFFSET + 0x10))& > + (((ntohl(in_be32 (baseaddress + XEL_RXBUFF_OFFSET + 0x10)))& > 0xFFFF0000)>> 16); /* FIXME size of IP packet */ > debug ("IP Packet\n"); > break; Applied to net repo. thanks, Ben ^ permalink raw reply [flat|nested] 5+ messages in thread
* [U-Boot] [PATCH] net: Fix emaclite driver to support little-endian microblaze 2010-10-11 1:41 [U-Boot] [PATCH] net: Fix emaclite driver to support little-endian microblaze Michal Simek 2010-10-11 1:41 ` [U-Boot] [PATCH v2] net: Move Emaclite to NET_MULTI Michal Simek 2010-10-12 6:34 ` [U-Boot] [PATCH] net: Fix emaclite driver to support little-endian microblaze Ben Warren @ 2010-10-14 19:26 ` Sergei Shtylyov 2 siblings, 0 replies; 5+ messages in thread From: Sergei Shtylyov @ 2010-10-14 19:26 UTC (permalink / raw) To: u-boot Hello. On 10/11/10 05:41, Michal Simek wrote: > Support New emaclite AXI IP. > Signed-off-by: Michal Simek<monstr@monstr.eu> > CC: Ben Warren<biggerbadderben@gmail.com> [...] > diff --git a/drivers/net/xilinx_emaclite.c b/drivers/net/xilinx_emaclite.c > index 455ce0c..76af939 100644 > --- a/drivers/net/xilinx_emaclite.c > +++ b/drivers/net/xilinx_emaclite.c > @@ -309,7 +309,7 @@ static int emaclite_recv(struct eth_device *dev) > #endif > } > /* Get the length of the frame that arrived */ > - switch(((in_be32 (baseaddress + XEL_RXBUFF_OFFSET + 0xC)) & > + switch(((ntohl(in_be32 (baseaddress + XEL_RXBUFF_OFFSET + 0xC))) & This wouldn't pass checkpatch.pl -- spaces before ( not allowed. > 0xFFFF0000 )>> 16) { > case 0x806: > length = 42 + 20; /* FIXME size of ARP */ > @@ -317,7 +317,7 @@ static int emaclite_recv(struct eth_device *dev) > break; > case 0x800: > length = 14 + 14 + > - (((in_be32 (baseaddress + XEL_RXBUFF_OFFSET + 0x10)) & > + (((ntohl(in_be32 (baseaddress + XEL_RXBUFF_OFFSET + 0x10))) & Same here. WBR, Sergei ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2010-10-14 19:26 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2010-10-11 1:41 [U-Boot] [PATCH] net: Fix emaclite driver to support little-endian microblaze Michal Simek 2010-10-11 1:41 ` [U-Boot] [PATCH v2] net: Move Emaclite to NET_MULTI Michal Simek 2010-10-12 6:34 ` Ben Warren 2010-10-12 6:34 ` [U-Boot] [PATCH] net: Fix emaclite driver to support little-endian microblaze Ben Warren 2010-10-14 19:26 ` Sergei Shtylyov
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox