* [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] 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 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 ` [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