* [U-Boot-Users] [PATCH 04/13] microblaze: add Emaclite ethernet driver [not found] <de470d32d7222874eac8134583889844c80e4bcb.1206711077.git.monstr@monstr.eu> @ 2008-04-14 1:09 ` Wolfgang Denk 2008-04-14 6:53 ` Michal Simek 0 siblings, 1 reply; 6+ messages in thread From: Wolfgang Denk @ 2008-04-14 1:09 UTC (permalink / raw) To: u-boot In message <de470d32d7222874eac8134583889844c80e4bcb.1206711077.git.monstr@monstr.eu> you wrote: > From: Michal Simek <monstr@monstr.eu> > > > Signed-off-by: Michal Simek <monstr@monstr.eu> I see you sneaked this in via your microblaze custodian repo. This was a Bad Thing, and I ask you not to do such things. You were supposed to run this through the Net custodian. Ditto for [PATCH 05/13] microblaze: add Emac ethernet driver Best regards, Wolfgang Denk -- DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de You Don't Have To Be 'Damned' To Work Here, But It Helps!!! - Terry Pratchett, _Eric_ ^ permalink raw reply [flat|nested] 6+ messages in thread
* [U-Boot-Users] [PATCH 04/13] microblaze: add Emaclite ethernet driver 2008-04-14 1:09 ` [U-Boot-Users] [PATCH 04/13] microblaze: add Emaclite ethernet driver Wolfgang Denk @ 2008-04-14 6:53 ` Michal Simek 2008-04-14 19:50 ` Wolfgang Denk 0 siblings, 1 reply; 6+ messages in thread From: Michal Simek @ 2008-04-14 6:53 UTC (permalink / raw) To: u-boot Hi Wolfgang, this code was sent to mailing list I think twice. I think Grant reviewed this code once, didn't he? For Ben. Can you look at drivers/net/xilinx_emac.c and xilinx_emaclite.c? >> Signed-off-by: Michal Simek <monstr@monstr.eu> > > I see you sneaked this in via your microblaze custodian repo. This was > a Bad Thing, and I ask you not to do such things. You were supposed to > run this through the Net custodian. Sorry for that. Explanation is above. > Ditto for [PATCH 05/13] microblaze: add Emac ethernet driver > > Best regards, > > Wolfgang Denk Best regards, Michal Simek ^ permalink raw reply [flat|nested] 6+ messages in thread
* [U-Boot-Users] [PATCH 04/13] microblaze: add Emaclite ethernet driver 2008-04-14 6:53 ` Michal Simek @ 2008-04-14 19:50 ` Wolfgang Denk 2008-04-15 5:00 ` Ben Warren 0 siblings, 1 reply; 6+ messages in thread From: Wolfgang Denk @ 2008-04-14 19:50 UTC (permalink / raw) To: u-boot Dear Michal, in message <4802FF86.8010504@seznam.cz> you wrote: > > this code was sent to mailing list I think twice. I think Grant reviewed this > code once, didn't he? Maybe, I don't remember the details. But if Ben had accepted the patch, he would have checked it into the u-boot-net custodian repository, where network stuff belongs to. It should not go through other repositories normally (unless Ben gives his explicit permission). Best regards, Wolfgang Denk -- DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de "The lesser of two evils -- is evil." - Seymour (Sy) Leon ^ permalink raw reply [flat|nested] 6+ messages in thread
* [U-Boot-Users] [PATCH 04/13] microblaze: add Emaclite ethernet driver 2008-04-14 19:50 ` Wolfgang Denk @ 2008-04-15 5:00 ` Ben Warren 2008-04-15 13:01 ` Michal Simek 0 siblings, 1 reply; 6+ messages in thread From: Ben Warren @ 2008-04-15 5:00 UTC (permalink / raw) To: u-boot On Mon, Apr 14, 2008 at 3:50 PM, Wolfgang Denk <wd@denx.de> wrote: > Dear Michal, > > > in message <4802FF86.8010504@seznam.cz> you wrote: > > > > this code was sent to mailing list I think twice. I think Grant reviewed this > > code once, didn't he? > > Maybe, I don't remember the details. But if Ben had accepted the > patch, he would have checked it into the u-boot-net custodian > repository, where network stuff belongs to. > > It should not go through other repositories normally (unless Ben gives > his explicit permission). > I did see these patches, but haven't reviewed yet. I'll have a look in the next couple of days and will provide feedback. regards, Ben ^ permalink raw reply [flat|nested] 6+ messages in thread
* [U-Boot-Users] [PATCH 04/13] microblaze: add Emaclite ethernet driver 2008-04-15 5:00 ` Ben Warren @ 2008-04-15 13:01 ` Michal Simek 0 siblings, 0 replies; 6+ messages in thread From: Michal Simek @ 2008-04-15 13:01 UTC (permalink / raw) To: u-boot Hi Ben, >> Dear Michal, >> >> in message <4802FF86.8010504@seznam.cz> you wrote: >> > >> > this code was sent to mailing list I think twice. I think Grant reviewed this >> > code once, didn't he? >> >> Maybe, I don't remember the details. But if Ben had accepted the >> patch, he would have checked it into the u-boot-net custodian >> repository, where network stuff belongs to. >> >> It should not go through other repositories normally (unless Ben gives >> his explicit permission). >> > > I did see these patches, but haven't reviewed yet. I'll have a look > in the next couple of days and will provide feedback. > > regards, > Ben Thanks for it, Michal Simek ^ permalink raw reply [flat|nested] 6+ messages in thread
* [U-Boot-Users] Microblaze updates
@ 2008-04-04 10:52 monstr at seznam.cz
2008-04-04 10:52 ` [U-Boot-Users] [PATCH 01/13] microblaze: Clean Makefile from ancient emac driver monstr at seznam.cz
0 siblings, 1 reply; 6+ messages in thread
From: monstr at seznam.cz @ 2008-04-04 10:52 UTC (permalink / raw)
To: u-boot
Hi everybody,
I update microblaze repository. Every changes are in testing branch.
Thanks for your review,
Michal Simek
www.monstr.eu
The following changes since commit 74d1e66d22dac91388bc538b2fe19f735edc5b82:
Bartlomiej Sieka (1):
Fix host tool build breakage, take two
are available in the git repository at:
. testing
Michal Simek (13):
microblaze: Clean Makefile from ancient emac driver
microblaze: remove old setting for emac driver
microblaze: ML401 and XUPV2P remove emac and emaclite reference
microblaze: add Emaclite ethernet driver
microblaze: add Emac ethernet driver
microblaze: Add Emac driver to Makefile
microblaze: Add Emaclite driver to Makefile
microblaze: clean uart16550 and uartlite handling
microblaze: ml401 - add ifdef for GPIO
microblaze: ml401 fix config file for supporting FDT
microblaze: xupv2p fix config file for supporting FDT
microblaze: clean microblaze_config.mk
microblaze: Sort microblaze boards in MAKEALL script
MAKEALL | 2 +-
board/xilinx/ml401/Makefile | 17 +--
board/xilinx/ml401/xparameters.h | 12 +-
board/xilinx/xupv2p/Makefile | 17 +--
board/xilinx/xupv2p/xparameters.h | 12 +-
drivers/net/Makefile | 2 +
drivers/net/xilinx_emac.c | 462 +++++++++++++++++++++++++++++++++++++
drivers/net/xilinx_emaclite.c | 351 ++++++++++++++++++++++++++++
include/configs/ml401.h | 42 +++-
include/configs/xupv2p.h | 37 +++-
microblaze_config.mk | 16 +-
11 files changed, 890 insertions(+), 80 deletions(-)
create mode 100644 drivers/net/xilinx_emac.c
create mode 100644 drivers/net/xilinx_emaclite.c
^ permalink raw reply [flat|nested] 6+ messages in thread* [U-Boot-Users] [PATCH 01/13] microblaze: Clean Makefile from ancient emac driver 2008-04-04 10:52 [U-Boot-Users] Microblaze updates monstr at seznam.cz @ 2008-04-04 10:52 ` monstr at seznam.cz 2008-04-04 10:52 ` [U-Boot-Users] [PATCH 02/13] microblaze: remove old setting for " monstr at seznam.cz 0 siblings, 1 reply; 6+ messages in thread From: monstr at seznam.cz @ 2008-04-04 10:52 UTC (permalink / raw) To: u-boot From: Michal Simek <monstr@monstr.eu> Signed-off-by: Michal Simek <monstr@monstr.eu> --- board/xilinx/ml401/Makefile | 17 +---------------- board/xilinx/xupv2p/Makefile | 17 +---------------- 2 files changed, 2 insertions(+), 32 deletions(-) diff --git a/board/xilinx/ml401/Makefile b/board/xilinx/ml401/Makefile index 9ab5633..ee9b6d5 100644 --- a/board/xilinx/ml401/Makefile +++ b/board/xilinx/ml401/Makefile @@ -22,25 +22,10 @@ # include $(TOPDIR)/config.mk -ifneq ($(OBJTREE),$(SRCTREE)) -$(shell mkdir -p $(obj)../common) -$(shell mkdir -p $(obj)../xilinx_enet) -endif - -INCS := -I../common -I../xilinx_enet -CFLAGS += $(INCS) -HOST_CFLAGS += $(INCS) LIB = $(obj)lib$(BOARD).a -COBJS = $(BOARD).o \ - ../xilinx_enet/emac_adapter.o ../xilinx_enet/xemac.o \ - ../xilinx_enet/xemac_options.o ../xilinx_enet/xemac_polled.o \ - ../xilinx_enet/xemac_intr.o ../xilinx_enet/xemac_g.o \ - ../xilinx_enet/xemac_intr_dma.o ../common/xipif_v1_23_b.o \ - ../common/xbasic_types.o ../common/xdma_channel.o \ - ../common/xdma_channel_sg.o ../common/xpacket_fifo_v1_00_b.o \ - ../common/xversion.o \ +COBJS = $(BOARD).o SRCS := $(SOBJS:.o=.S) $(COBJS:.o=.c) OBJS := $(addprefix $(obj),$(COBJS)) diff --git a/board/xilinx/xupv2p/Makefile b/board/xilinx/xupv2p/Makefile index 9ab5633..ee9b6d5 100644 --- a/board/xilinx/xupv2p/Makefile +++ b/board/xilinx/xupv2p/Makefile @@ -22,25 +22,10 @@ # include $(TOPDIR)/config.mk -ifneq ($(OBJTREE),$(SRCTREE)) -$(shell mkdir -p $(obj)../common) -$(shell mkdir -p $(obj)../xilinx_enet) -endif - -INCS := -I../common -I../xilinx_enet -CFLAGS += $(INCS) -HOST_CFLAGS += $(INCS) LIB = $(obj)lib$(BOARD).a -COBJS = $(BOARD).o \ - ../xilinx_enet/emac_adapter.o ../xilinx_enet/xemac.o \ - ../xilinx_enet/xemac_options.o ../xilinx_enet/xemac_polled.o \ - ../xilinx_enet/xemac_intr.o ../xilinx_enet/xemac_g.o \ - ../xilinx_enet/xemac_intr_dma.o ../common/xipif_v1_23_b.o \ - ../common/xbasic_types.o ../common/xdma_channel.o \ - ../common/xdma_channel_sg.o ../common/xpacket_fifo_v1_00_b.o \ - ../common/xversion.o \ +COBJS = $(BOARD).o SRCS := $(SOBJS:.o=.S) $(COBJS:.o=.c) OBJS := $(addprefix $(obj),$(COBJS)) -- 1.5.4.GIT ^ permalink raw reply related [flat|nested] 6+ messages in thread
* [U-Boot-Users] [PATCH 02/13] microblaze: remove old setting for emac driver 2008-04-04 10:52 ` [U-Boot-Users] [PATCH 01/13] microblaze: Clean Makefile from ancient emac driver monstr at seznam.cz @ 2008-04-04 10:52 ` monstr at seznam.cz 2008-04-04 10:52 ` [U-Boot-Users] [PATCH 03/13] microblaze: ML401 and XUPV2P remove emac and emaclite reference monstr at seznam.cz 0 siblings, 1 reply; 6+ messages in thread From: monstr at seznam.cz @ 2008-04-04 10:52 UTC (permalink / raw) To: u-boot From: Michal Simek <monstr@monstr.eu> Signed-off-by: Michal Simek <monstr@monstr.eu> --- board/xilinx/ml401/xparameters.h | 8 +------- board/xilinx/xupv2p/xparameters.h | 8 +------- 2 files changed, 2 insertions(+), 14 deletions(-) diff --git a/board/xilinx/ml401/xparameters.h b/board/xilinx/ml401/xparameters.h index 1a116ea..becafc8 100644 --- a/board/xilinx/ml401/xparameters.h +++ b/board/xilinx/ml401/xparameters.h @@ -66,10 +66,4 @@ #define XILINX_SYSACE_MEM_WIDTH 16 /* Ethernet controller is Ethernet_MAC */ -#define XPAR_XEMAC_NUM_INSTANCES 1 -#define XPAR_OPB_ETHERNET_0_DEVICE_ID 0 -#define XPAR_OPB_ETHERNET_0_BASEADDR 0x40c00000 -#define XPAR_OPB_ETHERNET_0_HIGHADDR 0x40c0ffff -#define XPAR_OPB_ETHERNET_0_DMA_PRESENT 1 -#define XPAR_OPB_ETHERNET_0_ERR_COUNT_EXIST 1 -#define XPAR_OPB_ETHERNET_0_MII_EXIST 1 +#define XILINX_EMACLITE_BASEADDR 0x40C00000 diff --git a/board/xilinx/xupv2p/xparameters.h b/board/xilinx/xupv2p/xparameters.h index a96c693..19b81fd 100644 --- a/board/xilinx/xupv2p/xparameters.h +++ b/board/xilinx/xupv2p/xparameters.h @@ -55,10 +55,4 @@ #define XILINX_SYSACE_MEM_WIDTH 16 /* Ethernet controller is Ethernet_MAC */ -#define XPAR_XEMAC_NUM_INSTANCES 1 -#define XPAR_OPB_ETHERNET_0_DEVICE_ID 0 -#define XPAR_OPB_ETHERNET_0_BASEADDR 0x40c00000 -#define XPAR_OPB_ETHERNET_0_HIGHADDR 0x40c0ffff -#define XPAR_OPB_ETHERNET_0_DMA_PRESENT 1 -#define XPAR_OPB_ETHERNET_0_ERR_COUNT_EXIST 1 -#define XPAR_OPB_ETHERNET_0_MII_EXIST 1 +#define XILINX_EMACLITE_BASEADDR 0x40C00000 -- 1.5.4.GIT ^ permalink raw reply related [flat|nested] 6+ messages in thread
* [U-Boot-Users] [PATCH 03/13] microblaze: ML401 and XUPV2P remove emac and emaclite reference 2008-04-04 10:52 ` [U-Boot-Users] [PATCH 02/13] microblaze: remove old setting for " monstr at seznam.cz @ 2008-04-04 10:52 ` monstr at seznam.cz 2008-04-04 10:52 ` [U-Boot-Users] [PATCH 04/13] microblaze: add Emaclite ethernet driver monstr at seznam.cz 0 siblings, 1 reply; 6+ messages in thread From: monstr at seznam.cz @ 2008-04-04 10:52 UTC (permalink / raw) To: u-boot From: Michal Simek <monstr@monstr.eu> Signed-off-by: Michal Simek <monstr@monstr.eu> --- include/configs/ml401.h | 10 ++++++++-- include/configs/xupv2p.h | 14 ++++++++++---- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/include/configs/ml401.h b/include/configs/ml401.h index b320438..6db1c1a 100644 --- a/include/configs/ml401.h +++ b/include/configs/ml401.h @@ -41,8 +41,14 @@ /*#define CFG_RESET_ADDRESS TEXT_BASE*/ /* ethernet */ -#define CONFIG_EMACLITE 1 -#define XPAR_EMAC_0_DEVICE_ID XPAR_OPB_ETHERNET_0_DEVICE_ID +#ifdef XILINX_EMAC_BASEADDR +#define CONFIG_XILINX_EMAC 1 +#else +#ifdef XILINX_EMACLITE_BASEADDR +#define CONFIG_XILINX_EMACLITE 1 +#endif +#endif +#undef ET_DEBUG /* gpio */ #define CFG_GPIO_0 1 diff --git a/include/configs/xupv2p.h b/include/configs/xupv2p.h index c9320c2..eef4f72 100644 --- a/include/configs/xupv2p.h +++ b/include/configs/xupv2p.h @@ -36,10 +36,6 @@ #define CONFIG_BAUDRATE XILINX_UART_BAUDRATE #define CFG_BAUDRATE_TABLE { CONFIG_BAUDRATE } -/* ethernet */ -#define CONFIG_EMAC 1 -#define XPAR_EMAC_0_DEVICE_ID XPAR_XEMAC_NUM_INSTANCES - /* * setting reset address * @@ -51,6 +47,16 @@ */ /* #define CFG_RESET_ADDRESS 0x36000000 */ +/* ethernet */ +#ifdef XILINX_EMAC_BASEADDR +#define CONFIG_XILINX_EMAC 1 +#else +#ifdef XILINX_EMACLITE_BASEADDR +#define CONFIG_XILINX_EMACLITE 1 +#endif +#endif +#undef ET_DEBUG + /* gpio */ #ifdef XILINX_GPIO_BASEADDR #define CFG_GPIO_0 1 -- 1.5.4.GIT ^ permalink raw reply related [flat|nested] 6+ messages in thread
* [U-Boot-Users] [PATCH 04/13] microblaze: add Emaclite ethernet driver 2008-04-04 10:52 ` [U-Boot-Users] [PATCH 03/13] microblaze: ML401 and XUPV2P remove emac and emaclite reference monstr at seznam.cz @ 2008-04-04 10:52 ` monstr at seznam.cz 0 siblings, 0 replies; 6+ messages in thread From: monstr at seznam.cz @ 2008-04-04 10:52 UTC (permalink / raw) To: u-boot From: Michal Simek <monstr@monstr.eu> Signed-off-by: Michal Simek <monstr@monstr.eu> --- drivers/net/xilinx_emaclite.c | 351 +++++++++++++++++++++++++++++++++++++++++ 1 files changed, 351 insertions(+), 0 deletions(-) create mode 100644 drivers/net/xilinx_emaclite.c diff --git a/drivers/net/xilinx_emaclite.c b/drivers/net/xilinx_emaclite.c new file mode 100644 index 0000000..9ba4096 --- /dev/null +++ b/drivers/net/xilinx_emaclite.c @@ -0,0 +1,351 @@ +/****************************************************************************** + * + * XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS" + * AS A COURTESY TO YOU, SOLELY FOR USE IN DEVELOPING PROGRAMS AND + * SOLUTIONS FOR XILINX DEVICES. BY PROVIDING THIS DESIGN, CODE, + * OR INFORMATION AS ONE POSSIBLE IMPLEMENTATION OF THIS FEATURE, + * APPLICATION OR STANDARD, XILINX IS MAKING NO REPRESENTATION + * THAT THIS IMPLEMENTATION IS FREE FROM ANY CLAIMS OF INFRINGEMENT, + * AND YOU ARE RESPONSIBLE FOR OBTAINING ANY RIGHTS YOU MAY REQUIRE + * FOR YOUR IMPLEMENTATION. XILINX EXPRESSLY DISCLAIMS ANY + * WARRANTY WHATSOEVER WITH RESPECT TO THE ADEQUACY OF THE + * IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OR + * REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE FROM CLAIMS OF + * INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE. + * + * (C) Copyright 2007-2008 Michal Simek + * Michal SIMEK <monstr@monstr.eu> + * + * (c) Copyright 2003 Xilinx Inc. + * All rights reserved. + * + ******************************************************************************/ + +#include <common.h> +#include <net.h> +#include <config.h> +#include <asm/io.h> + +#undef DEBUG + +#define ENET_MAX_MTU PKTSIZE +#define ENET_MAX_MTU_ALIGNED PKTSIZE_ALIGN +#define ENET_ADDR_LENGTH 6 + +/* EmacLite constants */ +#define XEL_BUFFER_OFFSET 0x0800 /* Next buffer's offset */ +#define XEL_TPLR_OFFSET 0x07F4 /* Tx packet length */ +#define XEL_TSR_OFFSET 0x07FC /* Tx status */ +#define XEL_RSR_OFFSET 0x17FC /* Rx status */ +#define XEL_RXBUFF_OFFSET 0x1000 /* Receive Buffer */ + +/* Xmit complete */ +#define XEL_TSR_XMIT_BUSY_MASK 0x00000001UL +/* Xmit interrupt enable bit */ +#define XEL_TSR_XMIT_IE_MASK 0x00000008UL +/* Buffer is active, SW bit only */ +#define XEL_TSR_XMIT_ACTIVE_MASK 0x80000000UL +/* Program the MAC address */ +#define XEL_TSR_PROGRAM_MASK 0x00000002UL +/* define for programming the MAC address into the EMAC Lite */ +#define XEL_TSR_PROG_MAC_ADDR (XEL_TSR_XMIT_BUSY_MASK | XEL_TSR_PROGRAM_MASK) + +/* Transmit packet length upper byte */ +#define XEL_TPLR_LENGTH_MASK_HI 0x0000FF00UL +/* Transmit packet length lower byte */ +#define XEL_TPLR_LENGTH_MASK_LO 0x000000FFUL + +/* Recv complete */ +#define XEL_RSR_RECV_DONE_MASK 0x00000001UL +/* Recv interrupt enable bit */ +#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 */ +} xemaclite; + +static xemaclite emaclite; + +static char etherrxbuff[PKTSIZE_ALIGN/4]; /* Receive buffer */ + +/* hardcoded MAC address for the Xilinx EMAC Core when env is nowhere*/ +#ifdef CFG_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) +{ + unsigned int i; + u32 alignbuffer; + u32 *to32ptr; + u32 *from32ptr; + u8 *to8ptr; + u8 *from8ptr; + + from32ptr = (u32 *) srcptr; + + /* Word aligned buffer, no correction needed. */ + to32ptr = (u32 *) destptr; + while (bytecount > 3) { + *to32ptr++ = *from32ptr++; + bytecount -= 4; + } + to8ptr = (u8 *) to32ptr; + + alignbuffer = *from32ptr++; + from8ptr = (u8 *) & alignbuffer; + + for (i = 0; i < bytecount; i++) { + *to8ptr++ = *from8ptr++; + } +} + +void xemaclite_alignedwrite (void *srcptr, u32 destptr, unsigned bytecount) +{ + unsigned i; + u32 alignbuffer; + u32 *to32ptr = (u32 *) destptr; + u32 *from32ptr; + u8 *to8ptr; + u8 *from8ptr; + + from32ptr = (u32 *) srcptr; + while (bytecount > 3) { + + *to32ptr++ = *from32ptr++; + bytecount -= 4; + } + + alignbuffer = 0; + to8ptr = (u8 *) & alignbuffer; + from8ptr = (u8 *) from32ptr; + + for (i = 0; i < bytecount; i++) { + *to8ptr++ = *from8ptr++; + } + + *to32ptr++ = alignbuffer; +} + +void eth_halt (void) +{ + debug ("eth_halt\n"); +} + +int eth_init (bd_t * bis) +{ + debug ("EmacLite Initialization Started\n"); + memset (&emaclite, 0, sizeof (xemaclite)); + emaclite.baseaddress = XILINX_EMACLITE_BASEADDR; + + if (!getenv("ethaddr")) { + memcpy(bis->bi_enetaddr, emacaddr, ENET_ADDR_LENGTH); + } + +/* + * TX - TX_PING & TX_PONG initialization + */ + /* Restart PING TX */ + out_be32 (emaclite.baseaddress + XEL_TSR_OFFSET, 0); + /* Copy MAC address */ + xemaclite_alignedwrite (bis->bi_enetaddr, + emaclite.baseaddress, ENET_ADDR_LENGTH); + /* Set the length */ + out_be32 (emaclite.baseaddress + XEL_TPLR_OFFSET, ENET_ADDR_LENGTH); + /* Update the MAC address in the EMAC Lite */ + out_be32 (emaclite.baseaddress + XEL_TSR_OFFSET, XEL_TSR_PROG_MAC_ADDR); + /* Wait for EMAC Lite to finish with the MAC address update */ + while ((in_be32 (emaclite.baseaddress + XEL_TSR_OFFSET) & + XEL_TSR_PROG_MAC_ADDR) != 0) ; + +#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 (bis->bi_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, + XEL_TSR_PROG_MAC_ADDR); + while ((in_be32 (emaclite.baseaddress + XEL_TSR_OFFSET + + XEL_BUFFER_OFFSET) & XEL_TSR_PROG_MAC_ADDR) != 0) ; +#endif + +/* + * RX - RX_PING & RX_PONG initialization + */ + /* Write out the value to flush the RX buffer */ + out_be32 (emaclite.baseaddress + XEL_RSR_OFFSET, XEL_RSR_RECV_IE_MASK); +#ifdef CONFIG_XILINX_EMACLITE_RX_PING_PONG + out_be32 (emaclite.baseaddress + XEL_RSR_OFFSET + XEL_BUFFER_OFFSET, + XEL_RSR_RECV_IE_MASK); +#endif + + debug ("EmacLite Initialization complete\n"); + return 0; +} + +int xemaclite_txbufferavailable (xemaclite * instanceptr) +{ + u32 reg; + u32 txpingbusy; + u32 txpongbusy; + /* + * Read the other buffer register + * and determine if the other buffer is available + */ + reg = in_be32 (instanceptr->baseaddress + + instanceptr->nexttxbuffertouse + 0); + txpingbusy = ((reg & XEL_TSR_XMIT_BUSY_MASK) == + XEL_TSR_XMIT_BUSY_MASK); + + reg = in_be32 (instanceptr->baseaddress + + (instanceptr->nexttxbuffertouse ^ XEL_TSR_OFFSET) + 0); + txpongbusy = ((reg & XEL_TSR_XMIT_BUSY_MASK) == + XEL_TSR_XMIT_BUSY_MASK); + + return (!(txpingbusy && txpongbusy)); +} + +int eth_send (volatile void *ptr, int len) { + + unsigned int reg; + unsigned int baseaddress; + + unsigned maxtry = 1000; + + if (len > ENET_MAX_MTU) + len = ENET_MAX_MTU; + + while (!xemaclite_txbufferavailable (&emaclite) && maxtry) { + udelay (10); + maxtry--; + } + + if (!maxtry) { + printf ("Error: Timeout waiting for ethernet TX buffer\n"); + /* Restart PING TX */ + out_be32 (emaclite.baseaddress + XEL_TSR_OFFSET, 0); +#ifdef CONFIG_XILINX_EMACLITE_TX_PING_PONG + out_be32 (emaclite.baseaddress + XEL_TSR_OFFSET + + XEL_BUFFER_OFFSET, 0); +#endif + return 0; + } + + /* Determine the expected TX buffer address */ + baseaddress = (emaclite.baseaddress + emaclite.nexttxbuffertouse); + + /* Determine if the expected buffer address is empty */ + reg = in_be32 (baseaddress + XEL_TSR_OFFSET); + if (((reg & XEL_TSR_XMIT_BUSY_MASK) == 0) + && ((in_be32 ((baseaddress) + XEL_TSR_OFFSET) + & XEL_TSR_XMIT_ACTIVE_MASK) == 0)) { + +#ifdef CONFIG_XILINX_EMACLITE_TX_PING_PONG + emaclite.nexttxbuffertouse ^= XEL_BUFFER_OFFSET; +#endif + debug ("Send packet from 0x%x\n", baseaddress); + /* Write the frame to the buffer */ + xemaclite_alignedwrite ((void *) ptr, baseaddress, len); + out_be32 (baseaddress + XEL_TPLR_OFFSET,(len & + (XEL_TPLR_LENGTH_MASK_HI | XEL_TPLR_LENGTH_MASK_LO))); + reg = in_be32 (baseaddress + XEL_TSR_OFFSET); + reg |= XEL_TSR_XMIT_BUSY_MASK; + if ((reg & XEL_TSR_XMIT_IE_MASK) != 0) { + reg |= XEL_TSR_XMIT_ACTIVE_MASK; + } + out_be32 (baseaddress + XEL_TSR_OFFSET, reg); + return 1; + } +#ifdef CONFIG_XILINX_EMACLITE_TX_PING_PONG + /* Switch to second buffer */ + baseaddress ^= XEL_BUFFER_OFFSET; + /* Determine if the expected buffer address is empty */ + reg = in_be32 (baseaddress + XEL_TSR_OFFSET); + if (((reg & XEL_TSR_XMIT_BUSY_MASK) == 0) + && ((in_be32 ((baseaddress) + XEL_TSR_OFFSET) + & XEL_TSR_XMIT_ACTIVE_MASK) == 0)) { + debug ("Send packet from 0x%x\n", baseaddress); + /* Write the frame to the buffer */ + xemaclite_alignedwrite ((void *) ptr, baseaddress, len); + out_be32 (baseaddress + XEL_TPLR_OFFSET,(len & + (XEL_TPLR_LENGTH_MASK_HI | XEL_TPLR_LENGTH_MASK_LO))); + reg = in_be32 (baseaddress + XEL_TSR_OFFSET); + reg |= XEL_TSR_XMIT_BUSY_MASK; + if ((reg & XEL_TSR_XMIT_IE_MASK) != 0) { + reg |= XEL_TSR_XMIT_ACTIVE_MASK; + } + out_be32 (baseaddress + XEL_TSR_OFFSET, reg); + return 1; + } +#endif + puts ("Error while sending frame\n"); + return 0; +} + +int eth_rx (void) +{ + unsigned int length; + unsigned int reg; + unsigned int baseaddress; + + baseaddress = emaclite.baseaddress + emaclite.nextrxbuffertouse; + reg = in_be32 (baseaddress + XEL_RSR_OFFSET); + debug ("Testing data at address 0x%x\n", baseaddress); + if ((reg & XEL_RSR_RECV_DONE_MASK) == XEL_RSR_RECV_DONE_MASK) { +#ifdef CONFIG_XILINX_EMACLITE_RX_PING_PONG + emaclite.nextrxbuffertouse ^= XEL_BUFFER_OFFSET; +#endif + } else { +#ifndef CONFIG_XILINX_EMACLITE_RX_PING_PONG + debug ("No data was available - address 0x%x\n", baseaddress); + return 0; +#else + baseaddress ^= XEL_BUFFER_OFFSET; + reg = in_be32 (baseaddress + XEL_RSR_OFFSET); + if ((reg & XEL_RSR_RECV_DONE_MASK) != + XEL_RSR_RECV_DONE_MASK) { + debug ("No data was available - address 0x%x\n", + baseaddress); + return 0; + } +#endif + } + /* Get the length of the frame that arrived */ + switch(((in_be32 (baseaddress + XEL_RXBUFF_OFFSET + 0xC)) & + 0xFFFF0000 ) >> 16) { + case 0x806: + length = 42 + 20; /* FIXME size of ARP */ + debug ("ARP Packet\n"); + break; + case 0x800: + length = 14 + 14 + + (((in_be32 (baseaddress + XEL_RXBUFF_OFFSET + 0x10)) & + 0xFFFF0000) >> 16); /* FIXME size of IP packet */ + debug ("IP Packet\n"); + break; + default: + debug ("Other Packet\n"); + length = ENET_MAX_MTU; + break; + } + + xemaclite_alignedread ((u32 *) (baseaddress + XEL_RXBUFF_OFFSET), + etherrxbuff, length); + + /* Acknowledge the frame */ + reg = in_be32 (baseaddress + XEL_RSR_OFFSET); + reg &= ~XEL_RSR_RECV_DONE_MASK; + out_be32 (baseaddress + XEL_RSR_OFFSET, reg); + + debug ("Packet receive from 0x%x, length %dB\n", baseaddress, length); + NetReceive ((uchar *) etherrxbuff, length); + return 1; + +} -- 1.5.4.GIT ^ permalink raw reply related [flat|nested] 6+ messages in thread
end of thread, other threads:[~2008-04-15 13:01 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <de470d32d7222874eac8134583889844c80e4bcb.1206711077.git.monstr@monstr.eu>
2008-04-14 1:09 ` [U-Boot-Users] [PATCH 04/13] microblaze: add Emaclite ethernet driver Wolfgang Denk
2008-04-14 6:53 ` Michal Simek
2008-04-14 19:50 ` Wolfgang Denk
2008-04-15 5:00 ` Ben Warren
2008-04-15 13:01 ` Michal Simek
2008-04-04 10:52 [U-Boot-Users] Microblaze updates monstr at seznam.cz
2008-04-04 10:52 ` [U-Boot-Users] [PATCH 01/13] microblaze: Clean Makefile from ancient emac driver monstr at seznam.cz
2008-04-04 10:52 ` [U-Boot-Users] [PATCH 02/13] microblaze: remove old setting for " monstr at seznam.cz
2008-04-04 10:52 ` [U-Boot-Users] [PATCH 03/13] microblaze: ML401 and XUPV2P remove emac and emaclite reference monstr at seznam.cz
2008-04-04 10:52 ` [U-Boot-Users] [PATCH 04/13] microblaze: add Emaclite ethernet driver monstr at seznam.cz
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox