Skip to contentSkip to conversation

Microblaze/Xilinx drivers changes

U-Boot New Michal Simek 4 participants 40 messages Sep 13, 2011 – Sep 14, 2011

Subsystems (3)
lore
Share & tools
lore

Michal Simek

author maintainer
#0 lore raw

Hi,

here is the whole package with Microblaze and Xilinx driver changes.
All patches are available in git://www.denx.de/git/u-boot-microblaze.git master branch if you like to test them.

Thanks for your review,
Michal

Michal Simek (26):
net: emaclite: Change driver name and add address
net: emaclite: Remove deviceid property
net: emaclite: Use calloc instead of malloc
net: emaclite: Remove baseaddress from xemaclite
net: emaclite: Use dynamic allocation
net: emaclite: Setup RX/TX ping pong for every instance
net: emaclite: Use unsigned long for baseaddr
net: emaclite: Move RX/TX ping pong initialization to board
net: emaclite: Use PKTSIZE directly
net: emaclite: Fix coding style
microblaze: Support CTRL+C when tftp is running
microblaze: Support flashes on lower addresses
microblaze: Initialize jumptable and console
microblaze: Fix unaligned.h for endians
microblaze: Copy bootfile from variables
microblaze: Remove debug saving value
microblaze: Setup MB vectors if feature is enable for u-boot
microblaze: Save and restore first unused vector
microblaze: Clean up reset asm code
microblaze: Do not select NFS for platforms without ethernet
microblaze: Remove address offset for uart16550
microblaze: Enable FDT/FIT support
serial: uartlite: Support for SERIAL_MULTI
microblaze: Enable SERIAL_MULTI
net: axi_ethernet: Add driver to u-boot
microblaze: Wire up axi_ethernet driver initialization

 arch/microblaze/cpu/start.S                        |   67 +--
 arch/microblaze/include/asm/processor.h            |    5 +-
 arch/microblaze/include/asm/unaligned.h            |   17 +-
 arch/microblaze/lib/board.c                        |   19 +
 .../xilinx/microblaze-generic/microblaze-generic.c |   24 +-
 common/serial.c                                    |   14 +
 drivers/net/Makefile                               |    1 +
 drivers/net/xilinx_axi_emac.c                      |  664 ++++++++++++++++++++
 drivers/net/xilinx_emaclite.c                      |  250 ++++----
 drivers/serial/serial_xuartlite.c                  |  142 ++++-
 include/configs/microblaze-generic.h               |   15 +-
 include/netdev.h                                   |    5 +-
 include/serial.h                                   |    9 +-
 13 files changed, 1033 insertions(+), 199 deletions(-)
 create mode 100644 drivers/net/xilinx_axi_emac.c
author maintainer
#1 lore raw

PATCH 1/26 net: emaclite: Change driver name and add address

Current xilinx emaclite use net multi registration but doesn't support several emaclites interfaces. Changing driver name with adding address to name is the first step how to distiguish several drivers.

---
 drivers/net/xilinx_emaclite.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)
drivers/net/xilinx_emaclite.c +1 -1
index 3c7c250..8d170a3 100644
@@ -350,7 +350,7 @@ int xilinx_emaclite_initialize (bd_t *bis, int base_addr)
 		return -1;
 
 	memset(dev, 0, sizeof(*dev));
-	sprintf(dev->name, "Xilinx_Emaclite");
+	sprintf(dev->name, "Xelite.%x", base_addr);
 
 	dev->iobase = base_addr;
 	dev->priv = 0;
Signature · 1 line
1.5.5.6
author maintainer
#2 lore raw

PATCH 2/26 net: emaclite: Remove deviceid property

Cleanup structure.

---
 drivers/net/xilinx_emaclite.c |    1 -
 1 files changed, 0 insertions(+), 1 deletions(-)
drivers/net/xilinx_emaclite.c +0 -1
index 8d170a3..2a5c5e1 100644
@@ -67,7 +67,6 @@ typedef struct {
 	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;
Signature · 1 line
1.5.5.6
author maintainer
#3 lore raw

PATCH 3/26 net: emaclite: Use calloc instead of malloc

Simplify driver logic and clear eth_device structure in one command.

---
 drivers/net/xilinx_emaclite.c |    3 +--
 1 files changed, 1 insertions(+), 2 deletions(-)
drivers/net/xilinx_emaclite.c +1 -2
index 2a5c5e1..28aab97 100644
@@ -344,11 +344,10 @@ int xilinx_emaclite_initialize (bd_t *bis, int base_addr)
 {
 	struct eth_device *dev;
 
-	dev = malloc(sizeof(*dev));
+	dev = calloc(1, sizeof(*dev));
 	if (dev == NULL)
 		return -1;
 
-	memset(dev, 0, sizeof(*dev));
 	sprintf(dev->name, "Xelite.%x", base_addr);
 
 	dev->iobase = base_addr;
Signature · 1 line
1.5.5.6
author maintainer
#4 lore raw

PATCH 4/26 net: emaclite: Remove baseaddress from xemaclite

Use dev->iobase instead of baseaddress.

---
 drivers/net/xilinx_emaclite.c |   42 ++++++++++++++++++++--------------------
 1 files changed, 21 insertions(+), 21 deletions(-)
drivers/net/xilinx_emaclite.c +21 -21
index 28aab97..805da17 100644
@@ -64,7 +64,6 @@
 #define XEL_RSR_RECV_IE_MASK		0x00000008UL
 
 typedef struct {
-	u32 baseaddress;	/* Base address for device (IPIF) */
 	u32 nexttxbuffertouse;	/* Next TX buffer to write to */
 	u32 nextrxbuffertouse;	/* Next RX buffer to read from */
 } xemaclite;
@@ -136,43 +135,44 @@ static int emaclite_init(struct eth_device *dev, bd_t *bis)
 {
 	debug ("EmacLite Initialization Started\n");
 	memset (&emaclite, 0, sizeof (xemaclite));
-	emaclite.baseaddress = dev->iobase;
 
 /*
  * TX - TX_PING & TX_PONG initialization
  */
 	/* Restart PING TX */
-	out_be32 (emaclite.baseaddress + XEL_TSR_OFFSET, 0);
+	out_be32 (dev->iobase + XEL_TSR_OFFSET, 0);
 	/* Copy MAC address */
 	xemaclite_alignedwrite (dev->enetaddr,
-		emaclite.baseaddress, ENET_ADDR_LENGTH);
+		dev->iobase, ENET_ADDR_LENGTH);
 	/* Set the length */
-	out_be32 (emaclite.baseaddress + XEL_TPLR_OFFSET, ENET_ADDR_LENGTH);
+	out_be32 (dev->iobase + 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);
+	out_be32 (dev->iobase + 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) ;
+	while ((in_be32 (dev->iobase + 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 (dev->enetaddr, emaclite.baseaddress +
+	out_be32 (dev->iobase + XEL_TSR_OFFSET + XEL_BUFFER_OFFSET, 0);
+	xemaclite_alignedwrite(dev->enetaddr, dev->iobase +
 		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,
+	out_be32 (dev->iobase + XEL_TPLR_OFFSET, ENET_ADDR_LENGTH);
+	out_be32 (dev->iobase + 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) ;
+	while ((in_be32 (dev->iobase + 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);
+	out_be32 (dev->iobase + 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,
+	out_be32 (dev->iobase + XEL_RSR_OFFSET + XEL_BUFFER_OFFSET,
 		XEL_RSR_RECV_IE_MASK);
 #endif
 
@@ -220,16 +220,16 @@ static int emaclite_send (struct eth_device *dev, volatile void *ptr, int len)
 	if (!maxtry) {
 		printf ("Error: Timeout waiting for ethernet TX buffer\n");
 		/* Restart PING TX */
-		out_be32 (emaclite.baseaddress + XEL_TSR_OFFSET, 0);
+		out_be32 (dev->iobase + XEL_TSR_OFFSET, 0);
 #ifdef CONFIG_XILINX_EMACLITE_TX_PING_PONG
-		out_be32 (emaclite.baseaddress + XEL_TSR_OFFSET +
+		out_be32 (dev->iobase + XEL_TSR_OFFSET +
 		XEL_BUFFER_OFFSET, 0);
 #endif
 		return -1;
 	}
 
 	/* Determine the expected TX buffer address */
-	baseaddress = (emaclite.baseaddress + emaclite.nexttxbuffertouse);
+	baseaddress = (dev->iobase + emaclite.nexttxbuffertouse);
 
 	/* Determine if the expected buffer address is empty */
 	reg = in_be32 (baseaddress + XEL_TSR_OFFSET);
@@ -261,7 +261,7 @@ static int emaclite_send (struct eth_device *dev, volatile void *ptr, int len)
 	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);
+		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 &
@@ -285,7 +285,7 @@ static int emaclite_recv(struct eth_device *dev)
 	u32 reg;
 	u32 baseaddress;
 
-	baseaddress = emaclite.baseaddress + emaclite.nextrxbuffertouse;
+	baseaddress = dev->iobase + 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) {
Signature · 1 line
1.5.5.6
author maintainer
#5 lore raw

PATCH 5/26 net: emaclite: Use dynamic allocation

Every emaclite instance use own setting.

---
v2: Free allocated space when private data allocation failed

---
 drivers/net/xilinx_emaclite.c |   41 +++++++++++++++++++++++++----------------
 1 files changed, 25 insertions(+), 16 deletions(-)
drivers/net/xilinx_emaclite.c +25 -16
index 805da17..8e574cd 100644
@@ -63,12 +63,10 @@
 /* Recv interrupt enable bit */
 #define XEL_RSR_RECV_IE_MASK		0x00000008UL
 
-typedef struct {
+struct xemaclite {
 	u32 nexttxbuffertouse;	/* Next TX buffer to write to */
 	u32 nextrxbuffertouse;	/* Next RX buffer to read from */
-} xemaclite;
-
-static xemaclite emaclite;
+};
 
 static u32 etherrxbuff[PKTSIZE_ALIGN/4]; /* Receive buffer */
 
@@ -134,7 +132,6 @@ static void emaclite_halt(struct eth_device *dev)
 static int emaclite_init(struct eth_device *dev, bd_t *bis)
 {
 	debug ("EmacLite Initialization Started\n");
-	memset (&emaclite, 0, sizeof (xemaclite));
 
 /*
  * TX - TX_PING & TX_PONG initialization
@@ -180,22 +177,24 @@ static int emaclite_init(struct eth_device *dev, bd_t *bis)
 	return 0;
 }
 
-static int xemaclite_txbufferavailable (xemaclite *instanceptr)
+static int xemaclite_txbufferavailable(struct eth_device *dev)
 {
 	u32 reg;
 	u32 txpingbusy;
 	u32 txpongbusy;
+	struct xemaclite *emaclite = dev->priv;
+
 	/*
 	 * Read the other buffer register
 	 * and determine if the other buffer is available
 	 */
-	reg = in_be32 (instanceptr->baseaddress +
-			instanceptr->nexttxbuffertouse + 0);
+	reg = in_be32 (dev->iobase +
+			emaclite->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);
+	reg = in_be32 (dev->iobase +
+			(emaclite->nexttxbuffertouse ^ XEL_TSR_OFFSET) + 0);
 	txpongbusy = ((reg & XEL_TSR_XMIT_BUSY_MASK) ==
 			XEL_TSR_XMIT_BUSY_MASK);
 
@@ -206,13 +205,14 @@ static int emaclite_send (struct eth_device *dev, volatile void *ptr, int len)
 {
 	u32 reg;
 	u32 baseaddress;
+	struct xemaclite *emaclite = dev->priv;
 
 	u32 maxtry = 1000;
 
 	if (len > ENET_MAX_MTU)
 		len = ENET_MAX_MTU;
 
-	while (!xemaclite_txbufferavailable (&emaclite) && maxtry) {
+	while (!xemaclite_txbufferavailable(dev) && maxtry) {
 		udelay (10);
 		maxtry--;
 	}
@@ -229,7 +229,7 @@ static int emaclite_send (struct eth_device *dev, volatile void *ptr, int len)
 	}
 
 	/* Determine the expected TX buffer address */
-	baseaddress = (dev->iobase + emaclite.nexttxbuffertouse);
+	baseaddress = (dev->iobase + emaclite->nexttxbuffertouse);
 
 	/* Determine if the expected buffer address is empty */
 	reg = in_be32 (baseaddress + XEL_TSR_OFFSET);
@@ -238,7 +238,7 @@ static int emaclite_send (struct eth_device *dev, volatile void *ptr, int len)
 			& XEL_TSR_XMIT_ACTIVE_MASK) == 0)) {
 
 #ifdef CONFIG_XILINX_EMACLITE_TX_PING_PONG
-		emaclite.nexttxbuffertouse ^= XEL_BUFFER_OFFSET;
+		emaclite->nexttxbuffertouse ^= XEL_BUFFER_OFFSET;
 #endif
 		debug ("Send packet from 0x%x\n", baseaddress);
 		/* Write the frame to the buffer */
@@ -284,13 +284,14 @@ static int emaclite_recv(struct eth_device *dev)
 	u32 length;
 	u32 reg;
 	u32 baseaddress;
+	struct xemaclite *emaclite = dev->priv;
 
-	baseaddress = dev->iobase + emaclite.nextrxbuffertouse;
+	baseaddress = dev->iobase + 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;
+		emaclite->nextrxbuffertouse ^= XEL_BUFFER_OFFSET;
 #endif
 	} else {
 #ifndef CONFIG_XILINX_EMACLITE_RX_PING_PONG
@@ -343,15 +344,23 @@ static int emaclite_recv(struct eth_device *dev)
 int xilinx_emaclite_initialize (bd_t *bis, int base_addr)
 {
 	struct eth_device *dev;
+	struct xemaclite *emaclite;
 
 	dev = calloc(1, sizeof(*dev));
 	if (dev == NULL)
 		return -1;
 
+	emaclite = calloc(1, sizeof(struct xemaclite));
+	if (emaclite == NULL) {
+		free(dev);
+		return -1;
+	}
+
+	dev->priv = emaclite;
+
 	sprintf(dev->name, "Xelite.%x", base_addr);
 
 	dev->iobase = base_addr;
-	dev->priv = 0;
 	dev->init = emaclite_init;
 	dev->halt = emaclite_halt;
 	dev->send = emaclite_send;
Signature · 1 line
1.5.5.6
author maintainer
#6 lore raw

PATCH 6/26 net: emaclite: Setup RX/TX ping pong for every instance

Setup RX/TX ping-pong buffer for every emaclite IP separately. The next patch move initialization directly to board code.

---
 drivers/net/xilinx_emaclite.c |  123 ++++++++++++++++++++++------------------
 1 files changed, 68 insertions(+), 55 deletions(-)
drivers/net/xilinx_emaclite.c +68 -55
index 8e574cd..9342476 100644
@@ -66,6 +66,8 @@
 struct xemaclite {
 	u32 nexttxbuffertouse;	/* Next TX buffer to write to */
 	u32 nextrxbuffertouse;	/* Next RX buffer to read from */
+	u32 txpp;		/* TX ping pong buffer */
+	u32 rxpp;		/* RX ping pong buffer */
 };
 
 static u32 etherrxbuff[PKTSIZE_ALIGN/4]; /* Receive buffer */
@@ -131,6 +133,7 @@ static void emaclite_halt(struct eth_device *dev)
 
 static int emaclite_init(struct eth_device *dev, bd_t *bis)
 {
+	struct xemaclite *emaclite = dev->priv;
 	debug ("EmacLite Initialization Started\n");
 
 /*
@@ -150,28 +153,28 @@ static int emaclite_init(struct eth_device *dev, bd_t *bis)
 		XEL_TSR_PROG_MAC_ADDR) != 0)
 		;
 
-#ifdef CONFIG_XILINX_EMACLITE_TX_PING_PONG
-	/* The same operation with PONG TX */
-	out_be32 (dev->iobase + XEL_TSR_OFFSET + XEL_BUFFER_OFFSET, 0);
-	xemaclite_alignedwrite(dev->enetaddr, dev->iobase +
-		XEL_BUFFER_OFFSET, ENET_ADDR_LENGTH);
-	out_be32 (dev->iobase + XEL_TPLR_OFFSET, ENET_ADDR_LENGTH);
-	out_be32 (dev->iobase + XEL_TSR_OFFSET + XEL_BUFFER_OFFSET,
-		XEL_TSR_PROG_MAC_ADDR);
-	while ((in_be32 (dev->iobase + XEL_TSR_OFFSET +
-		XEL_BUFFER_OFFSET) & XEL_TSR_PROG_MAC_ADDR) != 0)
-		;
-#endif
+	if (emaclite->txpp) {
+		/* The same operation with PONG TX */
+		out_be32 (dev->iobase + XEL_TSR_OFFSET + XEL_BUFFER_OFFSET, 0);
+		xemaclite_alignedwrite(dev->enetaddr, dev->iobase +
+			XEL_BUFFER_OFFSET, ENET_ADDR_LENGTH);
+		out_be32 (dev->iobase + XEL_TPLR_OFFSET, ENET_ADDR_LENGTH);
+		out_be32 (dev->iobase + XEL_TSR_OFFSET + XEL_BUFFER_OFFSET,
+			XEL_TSR_PROG_MAC_ADDR);
+		while ((in_be32 (dev->iobase + XEL_TSR_OFFSET +
+			XEL_BUFFER_OFFSET) & XEL_TSR_PROG_MAC_ADDR) != 0)
+			;
+	}
 
 /*
  * RX - RX_PING & RX_PONG initialization
  */
 	/* Write out the value to flush the RX buffer */
 	out_be32 (dev->iobase + XEL_RSR_OFFSET, XEL_RSR_RECV_IE_MASK);
-#ifdef CONFIG_XILINX_EMACLITE_RX_PING_PONG
-	out_be32 (dev->iobase + XEL_RSR_OFFSET + XEL_BUFFER_OFFSET,
-		XEL_RSR_RECV_IE_MASK);
-#endif
+
+	if (emaclite->rxpp)
+		out_be32 (dev->iobase + XEL_RSR_OFFSET + XEL_BUFFER_OFFSET,
+			XEL_RSR_RECV_IE_MASK);
 
 	debug ("EmacLite Initialization complete\n");
 	return 0;
@@ -221,10 +224,10 @@ static int emaclite_send (struct eth_device *dev, volatile void *ptr, int len)
 		printf ("Error: Timeout waiting for ethernet TX buffer\n");
 		/* Restart PING TX */
 		out_be32 (dev->iobase + XEL_TSR_OFFSET, 0);
-#ifdef CONFIG_XILINX_EMACLITE_TX_PING_PONG
-		out_be32 (dev->iobase + XEL_TSR_OFFSET +
-		XEL_BUFFER_OFFSET, 0);
-#endif
+		if (emaclite->txpp) {
+			out_be32 (dev->iobase + XEL_TSR_OFFSET +
+				XEL_BUFFER_OFFSET, 0);
+		}
 		return -1;
 	}
 
@@ -237,9 +240,9 @@ static int emaclite_send (struct eth_device *dev, volatile void *ptr, int len)
 		&& ((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
+		if (emaclite->txpp)
+			emaclite->nexttxbuffertouse ^= XEL_BUFFER_OFFSET;
+
 		debug ("Send packet from 0x%x\n", baseaddress);
 		/* Write the frame to the buffer */
 		xemaclite_alignedwrite ((void *) ptr, baseaddress, len);
@@ -253,28 +256,30 @@ static int emaclite_send (struct eth_device *dev, volatile void *ptr, int len)
 		out_be32 (baseaddress + XEL_TSR_OFFSET, reg);
 		return 0;
 	}
-#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)));
+
+	if (emaclite->txpp) {
+		/* Switch to second buffer */
+		baseaddress ^= XEL_BUFFER_OFFSET;
+		/* Determine if the expected buffer address is empty */
 		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;
+		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 0;
 		}
-		out_be32 (baseaddress + XEL_TSR_OFFSET, reg);
-		return 0;
 	}
-#endif
+
 	puts ("Error while sending frame\n");
 	return -1;
 }
@@ -290,23 +295,24 @@ static int emaclite_recv(struct eth_device *dev)
 	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
+		if (emaclite->rxpp)
+			emaclite->nextrxbuffertouse ^= XEL_BUFFER_OFFSET;
 	} 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) {
+
+		if (!emaclite->rxpp) {
 			debug ("No data was available - address 0x%x\n",
-					baseaddress);
+								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(((ntohl(in_be32 (baseaddress + XEL_RXBUFF_OFFSET + 0xC))) &
@@ -358,6 +364,13 @@ int xilinx_emaclite_initialize (bd_t *bis, int base_addr)
 
 	dev->priv = emaclite;
 
+#ifdef CONFIG_XILINX_EMACLITE_TX_PING_PONG
+	emaclite->txpp = 1;
+#endif
+#ifdef CONFIG_XILINX_EMACLITE_RX_PING_PONG
+	emaclite->rxpp = 1;
+#endif
+
 	sprintf(dev->name, "Xelite.%x", base_addr);
 
 	dev->iobase = base_addr;
Signature · 1 line
1.5.5.6
author maintainer
#7 lore raw

PATCH 7/26 net: emaclite: Use unsigned long for baseaddr

Baseaddr should be unsigned long.

---
 drivers/net/xilinx_emaclite.c |    4 ++--
 include/netdev.h              |    2 +-
 2 files changed, 3 insertions(+), 3 deletions(-)
drivers/net/xilinx_emaclite.c +2 -2
index 9342476..c4366c2 100644
@@ -347,7 +347,7 @@ static int emaclite_recv(struct eth_device *dev)
 
 }
 
-int xilinx_emaclite_initialize (bd_t *bis, int base_addr)
+int xilinx_emaclite_initialize(bd_t *bis, unsigned long base_addr)
 {
 	struct eth_device *dev;
 	struct xemaclite *emaclite;
@@ -371,7 +371,7 @@ int xilinx_emaclite_initialize (bd_t *bis, int base_addr)
 	emaclite->rxpp = 1;
 #endif
 
-	sprintf(dev->name, "Xelite.%x", base_addr);
+	sprintf(dev->name, "Xelite.%lx", base_addr);
 
 	dev->iobase = base_addr;
 	dev->init = emaclite_init;
include/netdev.h +1 -1
index 96c7b9b..5d78148 100644
@@ -94,7 +94,7 @@ int smc911x_initialize(u8 dev_num, int base_addr);
 int tsi108_eth_initialize(bd_t *bis);
 int uec_standard_init(bd_t *bis);
 int uli526x_initialize(bd_t *bis);
-int xilinx_emaclite_initialize (bd_t *bis, int base_addr);
+int xilinx_emaclite_initialize(bd_t *bis, unsigned long base_addr);
 
 /* Boards with PCI network controllers can call this from their board_eth_init()
  * function to initialize whatever's on board.
Signature · 1 line
1.5.5.6
author maintainer
#8 lore raw

PATCH 8/26 net: emaclite: Move RX/TX ping pong initialization to board

Init RX/TX ping pong directly from board not in the driver.

---
 .../xilinx/microblaze-generic/microblaze-generic.c |   18 ++++++++++++------
 drivers/net/xilinx_emaclite.c                      |   11 ++++-------
 include/netdev.h                                   |    3 ++-
 3 files changed, 18 insertions(+), 14 deletions(-)
board/xilinx/microblaze-generic/microblaze-generic.c +12 -6
index 183e4dc..9b2952f 100644
@@ -71,12 +71,18 @@ int fsl_init2 (void) {
 
 int board_eth_init(bd_t *bis)
 {
-	/*
-	 * This board either has PCI NICs or uses the CPU's TSECs
-	 * pci_eth_init() will return 0 if no NICs found, so in that case
-	 * returning -1 will force cpu_eth_init() to be called.
-	 */
+	int ret = 0;
 #ifdef CONFIG_XILINX_EMACLITE
-	return xilinx_emaclite_initialize(bis, XILINX_EMACLITE_BASEADDR);
+	u32 txpp = 0;
+	u32 rxpp = 0;
+# ifdef CONFIG_XILINX_EMACLITE_TX_PING_PONG
+	txpp = 1;
+# endif
+# ifdef CONFIG_XILINX_EMACLITE_RX_PING_PONG
+	rxpp = 1;
+# endif
+	ret |= xilinx_emaclite_initialize(bis, XILINX_EMACLITE_BASEADDR,
+			txpp, rxpp);
 #endif
+	return ret;
 }
drivers/net/xilinx_emaclite.c +4 -7
index c4366c2..eca6ef9 100644
@@ -347,7 +347,8 @@ static int emaclite_recv(struct eth_device *dev)
 
 }
 
-int xilinx_emaclite_initialize(bd_t *bis, unsigned long base_addr)
+int xilinx_emaclite_initialize(bd_t *bis, unsigned long base_addr,
+							int txpp, int rxpp)
 {
 	struct eth_device *dev;
 	struct xemaclite *emaclite;
@@ -364,12 +365,8 @@ int xilinx_emaclite_initialize(bd_t *bis, unsigned long base_addr)
 
 	dev->priv = emaclite;
 
-#ifdef CONFIG_XILINX_EMACLITE_TX_PING_PONG
-	emaclite->txpp = 1;
-#endif
-#ifdef CONFIG_XILINX_EMACLITE_RX_PING_PONG
-	emaclite->rxpp = 1;
-#endif
+	emaclite->txpp = txpp;
+	emaclite->rxpp = rxpp;
 
 	sprintf(dev->name, "Xelite.%lx", base_addr);
 
include/netdev.h +2 -1
index 5d78148..8b71011 100644
@@ -94,7 +94,8 @@ int smc911x_initialize(u8 dev_num, int base_addr);
 int tsi108_eth_initialize(bd_t *bis);
 int uec_standard_init(bd_t *bis);
 int uli526x_initialize(bd_t *bis);
-int xilinx_emaclite_initialize(bd_t *bis, unsigned long base_addr);
+int xilinx_emaclite_initialize(bd_t *bis, unsigned long base_addr,
+							int txpp, int rxpp);
 
 /* Boards with PCI network controllers can call this from their board_eth_init()
  * function to initialize whatever's on board.
Signature · 1 line
1.5.5.6
author maintainer
#9 lore raw

PATCH 9/26 net: emaclite: Use PKTSIZE directly

Do not setup additional ENET_MAX_MTU macro.

---
 drivers/net/xilinx_emaclite.c |   10 ++++------
 1 files changed, 4 insertions(+), 6 deletions(-)
drivers/net/xilinx_emaclite.c +4 -6
index eca6ef9..5ce95f8 100644
@@ -31,8 +31,6 @@
 
 #undef DEBUG
 
-#define ENET_MAX_MTU		PKTSIZE
-#define ENET_MAX_MTU_ALIGNED	PKTSIZE_ALIGN
 #define ENET_ADDR_LENGTH	6
 
 /* EmacLite constants */
@@ -212,8 +210,8 @@ static int emaclite_send (struct eth_device *dev, volatile void *ptr, int len)
 
 	u32 maxtry = 1000;
 
-	if (len > ENET_MAX_MTU)
-		len = ENET_MAX_MTU;
+	if (len > PKTSIZE)
+		len = PKTSIZE;
 
 	while (!xemaclite_txbufferavailable(dev) && maxtry) {
 		udelay (10);
@@ -328,8 +326,8 @@ static int emaclite_recv(struct eth_device *dev)
 			debug ("IP Packet\n");
 			break;
 		default:
-			debug ("Other Packet\n");
-			length = ENET_MAX_MTU;
+			debug("Other Packet\n");
+			length = PKTSIZE;
 			break;
 	}
 
Signature · 1 line
1.5.5.6
author maintainer
#10 lore raw

PATCH 10/26 net: emaclite: Fix coding style

Coding style should follow linux coding style.

---
 drivers/net/xilinx_emaclite.c |   57 +++++++++++++++++++---------------------
 1 files changed, 27 insertions(+), 30 deletions(-)
drivers/net/xilinx_emaclite.c +27 -30
index 5ce95f8..9791b9a 100644
@@ -70,7 +70,7 @@ struct xemaclite {
 
 static u32 etherrxbuff[PKTSIZE_ALIGN/4]; /* Receive buffer */
 
-static void xemaclite_alignedread (u32 *srcptr, void *destptr, u32 bytecount)
+static void xemaclite_alignedread(u32 *srcptr, void *destptr, u32 bytecount)
 {
 	u32 i;
 	u32 alignbuffer;
@@ -90,14 +90,13 @@ static void xemaclite_alignedread (u32 *srcptr, void *destptr, u32 bytecount)
 	to8ptr = (u8 *) to32ptr;
 
 	alignbuffer = *from32ptr++;
-	from8ptr = (u8 *) & alignbuffer;
+	from8ptr = (u8 *) &alignbuffer;
 
-	for (i = 0; i < bytecount; i++) {
+	for (i = 0; i < bytecount; i++)
 		*to8ptr++ = *from8ptr++;
-	}
 }
 
-static void xemaclite_alignedwrite (void *srcptr, u32 destptr, u32 bytecount)
+static void xemaclite_alignedwrite(void *srcptr, u32 destptr, u32 bytecount)
 {
 	u32 i;
 	u32 alignbuffer;
@@ -114,25 +113,24 @@ static void xemaclite_alignedwrite (void *srcptr, u32 destptr, u32 bytecount)
 	}
 
 	alignbuffer = 0;
-	to8ptr = (u8 *) & alignbuffer;
+	to8ptr = (u8 *) &alignbuffer;
 	from8ptr = (u8 *) from32ptr;
 
-	for (i = 0; i < bytecount; i++) {
+	for (i = 0; i < bytecount; i++)
 		*to8ptr++ = *from8ptr++;
-	}
 
 	*to32ptr++ = alignbuffer;
 }
 
 static void emaclite_halt(struct eth_device *dev)
 {
-	debug ("eth_halt\n");
+	debug("eth_halt\n");
 }
 
 static int emaclite_init(struct eth_device *dev, bd_t *bis)
 {
 	struct xemaclite *emaclite = dev->priv;
-	debug ("EmacLite Initialization Started\n");
+	debug("EmacLite Initialization Started\n");
 
 /*
  * TX - TX_PING & TX_PONG initialization
@@ -140,8 +138,7 @@ static int emaclite_init(struct eth_device *dev, bd_t *bis)
 	/* Restart PING TX */
 	out_be32 (dev->iobase + XEL_TSR_OFFSET, 0);
 	/* Copy MAC address */
-	xemaclite_alignedwrite (dev->enetaddr,
-		dev->iobase, ENET_ADDR_LENGTH);
+	xemaclite_alignedwrite(dev->enetaddr, dev->iobase, ENET_ADDR_LENGTH);
 	/* Set the length */
 	out_be32 (dev->iobase + XEL_TPLR_OFFSET, ENET_ADDR_LENGTH);
 	/* Update the MAC address in the EMAC Lite */
@@ -174,7 +171,7 @@ static int emaclite_init(struct eth_device *dev, bd_t *bis)
 		out_be32 (dev->iobase + XEL_RSR_OFFSET + XEL_BUFFER_OFFSET,
 			XEL_RSR_RECV_IE_MASK);
 
-	debug ("EmacLite Initialization complete\n");
+	debug("EmacLite Initialization complete\n");
 	return 0;
 }
 
@@ -199,10 +196,10 @@ static int xemaclite_txbufferavailable(struct eth_device *dev)
 	txpongbusy = ((reg & XEL_TSR_XMIT_BUSY_MASK) ==
 			XEL_TSR_XMIT_BUSY_MASK);
 
-	return (!(txpingbusy && txpongbusy));
+	return !(txpingbusy && txpongbusy);
 }
 
-static int emaclite_send (struct eth_device *dev, volatile void *ptr, int len)
+static int emaclite_send(struct eth_device *dev, volatile void *ptr, int len)
 {
 	u32 reg;
 	u32 baseaddress;
@@ -214,12 +211,12 @@ static int emaclite_send (struct eth_device *dev, volatile void *ptr, int len)
 		len = PKTSIZE;
 
 	while (!xemaclite_txbufferavailable(dev) && maxtry) {
-		udelay (10);
+		udelay(10);
 		maxtry--;
 	}
 
 	if (!maxtry) {
-		printf ("Error: Timeout waiting for ethernet TX buffer\n");
+		printf("Error: Timeout waiting for ethernet TX buffer\n");
 		/* Restart PING TX */
 		out_be32 (dev->iobase + XEL_TSR_OFFSET, 0);
 		if (emaclite->txpp) {
@@ -241,16 +238,15 @@ static int emaclite_send (struct eth_device *dev, volatile void *ptr, int len)
 		if (emaclite->txpp)
 			emaclite->nexttxbuffertouse ^= XEL_BUFFER_OFFSET;
 
-		debug ("Send packet from 0x%x\n", baseaddress);
+		debug("Send packet from 0x%x\n", baseaddress);
 		/* Write the frame to the buffer */
-		xemaclite_alignedwrite ((void *) ptr, baseaddress, len);
+		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) {
+		if ((reg & XEL_TSR_XMIT_IE_MASK) != 0)
 			reg |= XEL_TSR_XMIT_ACTIVE_MASK;
-		}
 		out_be32 (baseaddress + XEL_TSR_OFFSET, reg);
 		return 0;
 	}
@@ -278,7 +274,7 @@ static int emaclite_send (struct eth_device *dev, volatile void *ptr, int len)
 		}
 	}
 
-	puts ("Error while sending frame\n");
+	puts("Error while sending frame\n");
 	return -1;
 }
 
@@ -291,14 +287,14 @@ static int emaclite_recv(struct eth_device *dev)
 
 	baseaddress = dev->iobase + emaclite->nextrxbuffertouse;
 	reg = in_be32 (baseaddress + XEL_RSR_OFFSET);
-	debug ("Testing data at address 0x%x\n", baseaddress);
+	debug("Testing data at address 0x%x\n", baseaddress);
 	if ((reg & XEL_RSR_RECV_DONE_MASK) == XEL_RSR_RECV_DONE_MASK) {
 		if (emaclite->rxpp)
 			emaclite->nextrxbuffertouse ^= XEL_BUFFER_OFFSET;
 	} else {
 
 		if (!emaclite->rxpp) {
-			debug ("No data was available - address 0x%x\n",
+			debug("No data was available - address 0x%x\n",
 								baseaddress);
 			return 0;
 		} else {
@@ -317,12 +313,13 @@ static int emaclite_recv(struct eth_device *dev)
 			0xFFFF0000 ) >> 16) {
 		case 0x806:
 			length = 42 + 20; /* FIXME size of ARP */
-			debug ("ARP Packet\n");
+			debug("ARP Packet\n");
 			break;
 		case 0x800:
 			length = 14 + 14 +
-			(((ntohl(in_be32 (baseaddress + XEL_RXBUFF_OFFSET + 0x10))) &
-			0xFFFF0000) >> 16); /* FIXME size of IP packet */
+			(((ntohl(in_be32 (baseaddress + XEL_RXBUFF_OFFSET +
+						0x10))) & 0xFFFF0000) >> 16);
+			/* FIXME size of IP packet */
 			debug ("IP Packet\n");
 			break;
 		default:
@@ -331,7 +328,7 @@ static int emaclite_recv(struct eth_device *dev)
 			break;
 	}
 
-	xemaclite_alignedread ((u32 *) (baseaddress + XEL_RXBUFF_OFFSET),
+	xemaclite_alignedread((u32 *) (baseaddress + XEL_RXBUFF_OFFSET),
 			etherrxbuff, length);
 
 	/* Acknowledge the frame */
@@ -339,8 +336,8 @@ static int emaclite_recv(struct eth_device *dev)
 	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);
+	debug("Packet receive from 0x%x, length %dB\n", baseaddress, length);
+	NetReceive((uchar *) etherrxbuff, length);
 	return length;
 
 }
Signature · 1 line
1.5.5.6
author maintainer
#11 lore raw

PATCH 11/26 microblaze: Support CTRL+C when tftp is running

---
 arch/microblaze/lib/board.c |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)
arch/microblaze/lib/board.c +1 -0
index d97543b..5510c12 100644
@@ -68,6 +68,7 @@ typedef int (init_fnc_t) (void);
 init_fnc_t *init_sequence[] = {
 	env_init,
 	serial_init,
+	console_init_f,
 #ifdef CONFIG_SYS_GPIO_0
 	gpio_init,
 #endif
Signature · 1 line
1.5.5.6
author maintainer
#12 lore raw

PATCH 12/26 microblaze: Support flashes on lower addresses

---
v2: Change symbol references provided by a linker script

v3: Move externs to header

---
 arch/microblaze/include/asm/processor.h |    5 ++++-
 arch/microblaze/lib/board.c             |    4 ++++
 2 files changed, 8 insertions(+), 1 deletions(-)
arch/microblaze/include/asm/processor.h +4 -1
index 78b8976..f35e31e 100644
@@ -1 +1,4 @@
-/* FIXME: Implement this! */
+
+/* References to section boundaries */
+extern char __end[];
+extern char __text_start[];
arch/microblaze/lib/board.c +4 -0
index 5510c12..af33a15 100644
@@ -84,6 +84,8 @@ init_fnc_t *init_sequence[] = {
 	NULL,
 };
 
+unsigned long monitor_flash_len;
+
 void board_init (void)
 {
 	bd_t *bd;
@@ -105,6 +107,8 @@ void board_init (void)
 	bd->bi_memsize = CONFIG_SYS_SDRAM_SIZE;
 	gd->flags |= GD_FLG_RELOC;      /* tell others: relocation done */
 
+	monitor_flash_len = __end - __text_start;
+
 	/*
 	 * The Malloc area is immediately below the monitor copy in DRAM
 	 * aka CONFIG_SYS_MONITOR_BASE - Note there is no need for reloc_off
Signature · 1 line
1.5.5.6
author maintainer
#13 lore raw

PATCH 13/26 microblaze: Initialize jumptable and console

This changes were done to get support for netconsole.

---
v2: Fix commit message

v3: Fix coding style

---
 arch/microblaze/lib/board.c |    6 ++++++
 1 files changed, 6 insertions(+), 0 deletions(-)
arch/microblaze/lib/board.c +6 -0
index af33a15..75748f3 100644
@@ -165,6 +165,12 @@ void board_init (void)
 	/* Initialize stdio devices */
 	stdio_init ();
 
+	/* Initialize the jump table for applications */
+	jumptable_init();
+
+	/* Initialize the console (after the relocation and devices init) */
+	console_init_r();
+
 	if ((s = getenv ("loadaddr")) != NULL) {
 		load_addr = simple_strtoul (s, NULL, 16);
 	}
Signature · 1 line
1.5.5.6
author maintainer
#14 lore raw

PATCH 14/26 microblaze: Fix unaligned.h for endians

Also support little endian MB.

---
 arch/microblaze/include/asm/unaligned.h |   17 +----------------
 1 files changed, 1 insertions(+), 16 deletions(-)
arch/microblaze/include/asm/unaligned.h +1 -16
index 785c2e9..6cecbbb 100644
@@ -1,16 +1 @@
-#ifndef _ASM_MICROBLAZE_UNALIGNED_H
-#define _ASM_MICROBLAZE_UNALIGNED_H
-
-#ifdef __KERNEL__
-
-/*
- * The Microblaze can do unaligned accesses itself in big endian mode.
- */
-#include <linux/unaligned/access_ok.h>
-#include <linux/unaligned/generic.h>
-
-#define get_unaligned	__get_unaligned_be
-#define put_unaligned	__put_unaligned_be
-
-#endif	/* __KERNEL__ */
-#endif	/* _ASM_MICROBLAZE_UNALIGNED_H */
+#include <asm-generic/unaligned.h>
Signature · 1 line
1.5.5.6
author maintainer
#15 lore raw

PATCH 15/26 microblaze: Copy bootfile from variables

Setup bootfile.

---
 arch/microblaze/lib/board.c |    4 ++++
 1 files changed, 4 insertions(+), 0 deletions(-)
arch/microblaze/lib/board.c +4 -0
index 75748f3..8865a60 100644
@@ -185,6 +185,10 @@ void board_init (void)
 	uchar enetaddr[6];
 	eth_getenv_enetaddr("ethaddr", enetaddr);
 	printf("MAC:   %pM\n", enetaddr);
+
+	s = getenv("bootfile");
+	if (s != NULL)
+		copy_filename(BootFile, s, sizeof(BootFile));
 #endif
 
 	/* main_loop */
Signature · 1 line
1.5.5.6
author maintainer
#16 lore raw

PATCH 16/26 microblaze: Remove debug saving value

Forget to remove debug code.

---
 arch/microblaze/cpu/start.S |    2 --
 1 files changed, 0 insertions(+), 2 deletions(-)
arch/microblaze/cpu/start.S +0 -2
index 93a9efd..d3370c4 100644
@@ -46,8 +46,6 @@ _start:
 	addik	r6, r0, 0x2 /* BIG/LITTLE endian offset */
 	swi	r6, r0, 0
 	lbui	r10, r0, 0
-	swi	r6, r0, 0x40
-	swi	r10, r0, 0x50
 
 	/* add opcode instruction for 32bit jump - 2 instruction imm & brai*/
 	addi	r6, r0, 0xb0000000	/* hex b000 opcode imm */
Signature · 1 line
1.5.5.6
author maintainer
#17 lore raw

PATCH 17/26 microblaze: Setup MB vectors if feature is enable for u-boot

For example: Setup reset vectors if reset address is setup. Setup user exception vector if user exception is enabled

---
 arch/microblaze/cpu/start.S |   34 ++++++++++++++++++++++------------
 1 files changed, 22 insertions(+), 12 deletions(-)
arch/microblaze/cpu/start.S +22 -12
index d3370c4..17c0e28 100644
@@ -30,6 +30,13 @@
 	.text
 	.global _start
 _start:
+	/*
+	 * reserve registers:
+	 * r10: Stores little/big endian offset for vectors
+	 * r2: Stores imm opcode
+	 * r3: Stores brai opcode
+	 */
+
 	mts	rmsr, r0	/* disable cache */
 	addi	r1, r0, CONFIG_SYS_INIT_SP_OFFSET
 	addi	r1, r1, -4	/* Decrement SP to top of memory */
@@ -47,21 +54,15 @@ _start:
 	swi	r6, r0, 0
 	lbui	r10, r0, 0
 
-	/* add opcode instruction for 32bit jump - 2 instruction imm & brai*/
-	addi	r6, r0, 0xb0000000	/* hex b000 opcode imm */
-	swi	r6, r0, 0x0	/* reset address */
-	swi	r6, r0, 0x8	/* user vector exception */
-	swi	r6, r0, 0x10	/* interrupt */
-	swi	r6, r0, 0x20	/* hardware exception */
-
-	addi	r6, r0, 0xb8080000	/* hew b808 opcode brai*/
-	swi	r6, r0, 0x4	/* reset address */
-	swi	r6, r0, 0xC	/* user vector exception */
-	swi	r6, r0, 0x14	/* interrupt */
-	swi	r6, r0, 0x24	/* hardware exception */
+	/* add opcode instruction for 32bit jump - 2 instruction imm & brai */
+	addi	r2, r0, 0xb0000000	/* hex b000 opcode imm */
+	addi	r3, r0, 0xb8080000	/* hew b808 opcode brai */
 
 #ifdef CONFIG_SYS_RESET_ADDRESS
 	/* reset address */
+	swi	r2, r0, 0x0	/* reset address - imm opcode */
+	swi	r3, r0, 0x4	/* reset address - brai opcode */
+
 	addik	r6, r0, CONFIG_SYS_RESET_ADDRESS
 	sw	r6, r1, r0
 	lhu	r7, r1, r0
@@ -88,6 +89,9 @@ _start:
 
 #ifdef CONFIG_SYS_USR_EXCEP
 	/* user_vector_exception */
+	swi	r2, r0, 0x8	/* user vector exception - imm opcode */
+	swi	r3, r0, 0xC	/* user vector exception - brai opcode */
+
 	addik	r6, r0, _exception_handler
 	sw	r6, r1, r0
 	/*
@@ -119,6 +123,9 @@ _start:
 
 #ifdef CONFIG_SYS_INTC_0
 	/* interrupt_handler */
+	swi	r2, r0, 0x10	/* interrupt - imm opcode */
+	swi	r3, r0, 0x14	/* interrupt - brai opcode */
+
 	addik	r6, r0, _interrupt_handler
 	sw	r6, r1, r0
 	lhu	r7, r1, r10
@@ -129,6 +136,9 @@ _start:
 #endif
 
 	/* hardware exception */
+	swi	r2, r0, 0x20	/* hardware exception - imm opcode */
+	swi	r3, r0, 0x24	/* hardware exception - brai opcode */
+
 	addik	r6, r0, _hw_exception_handler
 	sw	r6, r1, r0
 	lhu	r7, r1, r10
Signature · 1 line
1.5.5.6
author maintainer
#18 lore raw

PATCH 18/26 microblaze: Save and restore first unused vector

Use one memory space to detect little/big endian platforms.
The first unused address(0x28) is used instead 0x0 address (reset vectors). Detection rewrited reset vector setup from first stage bootloader.

Workflow:
1. Store 0x28 to r7
2. Do little/big endian test
3. Restore r7 to 0x28

---
 arch/microblaze/cpu/start.S |    6 ++++--
 1 files changed, 4 insertions(+), 2 deletions(-)
arch/microblaze/cpu/start.S +4 -2
index 17c0e28..42104fa 100644
@@ -51,8 +51,10 @@ _start:
 	 * 4b) BIG endian - r10 contains 0x0 because 0x2 offset is on addr 0x3
 	 */
 	addik	r6, r0, 0x2 /* BIG/LITTLE endian offset */
-	swi	r6, r0, 0
-	lbui	r10, r0, 0
+	lwi	r7, r0, 0x28
+	swi	r6, r0, 0x28 /* used first unused MB vector */
+	lbui	r10, r0, 0x28 /* used first unused MB vector */
+	swi	r7, r0, 0x28
 
 	/* add opcode instruction for 32bit jump - 2 instruction imm & brai */
 	addi	r2, r0, 0xb0000000	/* hex b000 opcode imm */
Signature · 1 line
1.5.5.6
author maintainer
#19 lore raw

PATCH 19/26 microblaze: Clean up reset asm code

- Remove code copying
- Reset address is setup from first stage bootloader
- Support reset vector setup on little endian

---
 arch/microblaze/cpu/start.S |   25 +++++--------------------
 1 files changed, 5 insertions(+), 20 deletions(-)
arch/microblaze/cpu/start.S +5 -20
index 42104fa..9077f74 100644
@@ -67,26 +67,11 @@ _start:
 
 	addik	r6, r0, CONFIG_SYS_RESET_ADDRESS
 	sw	r6, r1, r0
-	lhu	r7, r1, r0
-	shi	r7, r0, 0x2
-	shi	r6, r0, 0x6
-/*
- * Copy U-Boot code to CONFIG_SYS_TEXT_BASE
- * solve problem with sbrk_base
- */
-#if (CONFIG_SYS_RESET_ADDRESS != CONFIG_SYS_TEXT_BASE)
-	addi	r4, r0, __end
-	addi	r5, r0, __text_start
-	rsub	r4, r5, r4	/* size = __end - __text_start */
-	addi	r6, r0, CONFIG_SYS_RESET_ADDRESS	/* source address */
-	addi	r7, r0, 0	/* counter */
-4:
-	lw	r8, r6, r7
-	sw	r8, r5, r7
-	addi	r7, r7, 0x4
-	cmp	r8, r4, r7
-	blti	r8, 4b
-#endif
+	lhu	r7, r1, r10
+	rsubi	r8, r10, 0x2
+	sh	r7, r0, r8
+	rsubi	r8, r10, 0x6
+	sh	r6, r0, r8
 #endif
 
 #ifdef CONFIG_SYS_USR_EXCEP
Signature · 1 line
1.5.5.6
author maintainer
#20 lore raw

PATCH 20/26 microblaze: Do not select NFS for platforms without ethernet

Undefined network functionality for systems without ethernet and disable NFS support.

---
 include/configs/microblaze-generic.h |    2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)
include/configs/microblaze-generic.h +2 -0
index 090ab3b..8cdd72a 100644
@@ -60,6 +60,7 @@
 /*#define	CONFIG_SYS_RESET_ADDRESS	CONFIG_SYS_TEXT_BASE*/
 
 /* ethernet */
+#undef CONFIG_SYS_ENET
 #ifdef XILINX_EMACLITE_BASEADDR
 # define CONFIG_XILINX_EMACLITE		1
 # define CONFIG_SYS_ENET
@@ -243,6 +244,7 @@
 #ifndef CONFIG_SYS_ENET
 # undef CONFIG_CMD_NET
 # undef CONFIG_NET_MULTI
+# undef CONFIG_CMD_NFS
 #else
 # define CONFIG_CMD_PING
 # define CONFIG_CMD_DHCP
Signature · 1 line
1.5.5.6
author maintainer
#21 lore raw

PATCH 21/26 microblaze: Remove address offset for uart16550

U-Boot BSP handle 0x3 offset for big endian systems. Little endian Microblaze systems don't use any offset.

---
 include/configs/microblaze-generic.h |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)
include/configs/microblaze-generic.h +1 -1
index 8cdd72a..a334110 100644
@@ -44,7 +44,7 @@
 # define CONFIG_SYS_NS16550_REG_SIZE	-4
 # define CONFIG_CONS_INDEX		1
 # define CONFIG_SYS_NS16550_COM1 \
-			(XILINX_UART16550_BASEADDR + 0x1000 + 0x3)
+			(XILINX_UART16550_BASEADDR + 0x1000)
 # define CONFIG_SYS_NS16550_CLK	XILINX_UART16550_CLOCK_HZ
 # define CONFIG_BAUDRATE	115200
 
Signature · 1 line
1.5.5.6
author maintainer
#22 lore raw

PATCH 22/26 microblaze: Enable FDT/FIT support

Enable FDT and FIT support.

---
 include/configs/microblaze-generic.h |    5 +++++
 1 files changed, 5 insertions(+), 0 deletions(-)
include/configs/microblaze-generic.h +5 -0
index a334110..a811b76 100644
@@ -327,4 +327,9 @@
 # define CONFIG_SYS_PROMPT_HUSH_PS2 "> "
 #endif
 
+/* Enable flat device tree support */
+#define CONFIG_LMB		1
+#define CONFIG_FIT		1
+#define CONFIG_OF_LIBFDT	1
+
 #endif	/* __CONFIG_H */
Signature · 1 line
1.5.5.6
author maintainer
#23 lore raw

PATCH 23/26 serial: uartlite: Support for SERIAL_MULTI

Add support for SERIAL MULTI for uartlite.

---
v2: Use in/out_be32 functions
Clean coding style

---
 common/serial.c                   |   14 ++++
 drivers/serial/serial_xuartlite.c |  142 ++++++++++++++++++++++++++++++++-----
 include/serial.h                  |    7 ++
 3 files changed, 145 insertions(+), 18 deletions(-)
common/serial.c +14 -0
index 995d268..df02fa5 100644
@@ -108,6 +108,20 @@ void serial_initialize (void)
 #if defined(CONFIG_SYS_BFIN_UART)
 	serial_register_bfin_uart();
 #endif
+#if defined(CONFIG_XILINX_UARTLITE)
+# ifdef XILINX_UARTLITE_BASEADDR
+	serial_register(&uartlite_serial0_device);
+# endif /* XILINX_UARTLITE_BASEADDR */
+# ifdef XILINX_UARTLITE_BASEADDR1
+	serial_register(&uartlite_serial1_device);
+# endif /* XILINX_UARTLITE_BASEADDR1 */
+# ifdef XILINX_UARTLITE_BASEADDR2
+	serial_register(&uartlite_serial2_device);
+# endif /* XILINX_UARTLITE_BASEADDR2 */
+# ifdef XILINX_UARTLITE_BASEADDR3
+	serial_register(&uartlite_serial3_device);
+# endif /* XILINX_UARTLITE_BASEADDR3 */
+#endif /* CONFIG_XILINX_UARTLITE */
 	serial_assign (default_serial_console ()->name);
 }
 
drivers/serial/serial_xuartlite.c +124 -18

170 lines not on this page · raw message

include/serial.h +7 -0
index ff1ce99..5926244 100644
@@ -50,6 +50,13 @@ extern struct serial_device serial4_device;
 extern struct serial_device serial6_device;
 #endif
 
+#if defined(CONFIG_XILINX_UARTLITE)
+extern struct serial_device uartlite_serial0_device;
+extern struct serial_device uartlite_serial1_device;
+extern struct serial_device uartlite_serial2_device;
+extern struct serial_device uartlite_serial3_device;
+#endif
+
 #if defined(CONFIG_S3C2410)
 extern struct serial_device s3c24xx_serial0_device;
 extern struct serial_device s3c24xx_serial1_device;
Signature · 1 line
1.5.5.6
author maintainer
#24 lore raw

PATCH 24/26 microblaze: Enable SERIAL_MULTI

Enable support for SERIAL_MULTI.

Microblaze can use uart16550 and uartlite drivers.

---
Note:
Follow serial.h conding style.

---
 arch/microblaze/lib/board.c          |    4 ++++
 include/configs/microblaze-generic.h |    2 ++
 include/serial.h                     |    2 +-
 3 files changed, 7 insertions(+), 1 deletions(-)
arch/microblaze/lib/board.c +4 -0
index 8865a60..4e195ac 100644
@@ -31,6 +31,7 @@
 #include <watchdog.h>
 #include <stdio_dev.h>
 #include <net.h>
+#include <serial.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -109,6 +110,9 @@ void board_init (void)
 
 	monitor_flash_len = __end - __text_start;
 
+#ifdef CONFIG_SERIAL_MULTI
+	serial_initialize();
+#endif
 	/*
 	 * The Malloc area is immediately below the monitor copy in DRAM
 	 * aka CONFIG_SYS_MONITOR_BASE - Note there is no need for reloc_off
include/configs/microblaze-generic.h +2 -0
index a811b76..c526006 100644
@@ -31,6 +31,8 @@
 #define	CONFIG_MICROBLAZE	1
 #define	MICROBLAZE_V5		1
 
+#define CONFIG_SERIAL_MULTI 1
+
 /* uart */
 #ifdef XILINX_UARTLITE_BASEADDR
 # define CONFIG_XILINX_UARTLITE
include/serial.h +1 -1
index 5926244..f047d2f 100644
@@ -31,7 +31,7 @@ extern struct serial_device * default_serial_console (void);
     defined(CONFIG_MB86R0x) || defined(CONFIG_MPC5xxx) || \
     defined(CONFIG_MPC83xx) || defined(CONFIG_MPC85xx) || \
     defined(CONFIG_MPC86xx) || defined(CONFIG_SYS_SC520) || \
-    defined(CONFIG_TEGRA2)
+    defined(CONFIG_TEGRA2) || defined(CONFIG_MICROBLAZE)
 extern struct serial_device serial0_device;
 extern struct serial_device serial1_device;
 #if defined(CONFIG_SYS_NS16550_SERIAL)
Signature · 1 line
1.5.5.6
author maintainer
#25 lore raw

PATCH 25/26 net: axi_ethernet: Add driver to u-boot

Add axi_ethernet driver for little-endian Microblaze.

RX/TX BDs and rxframe buffer are shared among all axi_ethernet MACs. Only one MAC can work in one time.

---

v2: Fix cammelcase weirdness
Create mdio_wait function with timeouts Synchronize debug messages
Remove base address + offset notation -> use struct instead

v3: Fix comments
Add timeouts/delays to waiting loops
Use in/out_be32 for dma accesses
Setup return values for phy functions

---
 drivers/net/Makefile          |    1 +
 drivers/net/xilinx_axi_emac.c |  664 +++++++++++++++++++++++++++++++++++++++++
 include/netdev.h              |    2 +
 3 files changed, 667 insertions(+), 0 deletions(-)
 create mode 100644 drivers/net/xilinx_axi_emac.c
drivers/net/Makefile +1 -0
index 819b197..0489ffa 100644
@@ -83,6 +83,7 @@ COBJS-$(CONFIG_TSEC_ENET) += tsec.o fsl_mdio.o
 COBJS-$(CONFIG_TSI108_ETH) += tsi108_eth.o
 COBJS-$(CONFIG_ULI526X) += uli526x.o
 COBJS-$(CONFIG_VSC7385_ENET) += vsc7385.o
+COBJS-$(CONFIG_XILINX_AXIEMAC) += xilinx_axi_emac.o
 COBJS-$(CONFIG_XILINX_EMACLITE) += xilinx_emaclite.o
 
 COBJS	:= $(sort $(COBJS-y))
drivers/net/xilinx_axi_emac.c new file +664 -0

664 lines not on this page · raw message

include/netdev.h +2 -0
index 8b71011..f9bbe65 100644
@@ -94,6 +94,8 @@ int smc911x_initialize(u8 dev_num, int base_addr);
 int tsi108_eth_initialize(bd_t *bis);
 int uec_standard_init(bd_t *bis);
 int uli526x_initialize(bd_t *bis);
+int xilinx_axiemac_initialize(bd_t *bis, unsigned long base_addr,
+							unsigned long dma_addr);
 int xilinx_emaclite_initialize(bd_t *bis, unsigned long base_addr,
 							int txpp, int rxpp);
 
Signature · 1 line
1.5.5.6
author maintainer
#26 lore raw

PATCH 26/26 microblaze: Wire up axi_ethernet driver initialization

Initialize axi_ethernet driver.

---
 .../xilinx/microblaze-generic/microblaze-generic.c |    6 ++++++
 include/configs/microblaze-generic.h               |    4 ++++
 2 files changed, 10 insertions(+), 0 deletions(-)
board/xilinx/microblaze-generic/microblaze-generic.c +6 -0
index 9b2952f..c4c13a6 100644
@@ -72,6 +72,12 @@ int fsl_init2 (void) {
 int board_eth_init(bd_t *bis)
 {
 	int ret = 0;
+
+#ifdef CONFIG_XILINX_AXIEMAC
+	ret |= xilinx_axiemac_initialize(bis, XILINX_AXIEMAC_BASEADDR,
+						XILINX_AXIDMA_BASEADDR);
+#endif
+
 #ifdef CONFIG_XILINX_EMACLITE
 	u32 txpp = 0;
 	u32 rxpp = 0;
include/configs/microblaze-generic.h +4 -0
index c526006..f010169 100644
@@ -70,6 +70,10 @@
 # define CONFIG_XILINX_LL_TEMAC		1
 # define CONFIG_SYS_ENET
 #endif
+#if defined(XILINX_AXIEMAC_BASEADDR)
+# define CONFIG_XILINX_AXIEMAC	1
+# define CONFIG_SYS_ENET
+#endif
 
 #undef ET_DEBUG
 
Signature · 1 line
1.5.5.6
#27 lore raw

PATCH 23/26 serial: uartlite: Support for SERIAL_MULTI

In reply to Michal Simek
Quoted 1 line · On Tuesday, September 13, 2011 03:10:18 Michal Simek wrote:

+static struct uartlite *userial_ports[4] = {

pretty sure this should be:

	static struct uartlite * const userial_ports[4] = {

drivers/serial/serial_xuartlite.c line 48

Quoted 5 lines
drivers/serial/serial_xuartlite.c +5 -0
+#ifdef XILINX_UARTLITE_BASEADDR
+	(struct uartlite *)XILINX_UARTLITE_BASEADDR,
+#else
+	NULL,
+#endif

simpler code:
#ifdef XILINX_UARTLITE_BASEADDR
[0] = (struct uartlite *)XILINX_UARTLITE_BASEADDR,
#endif
-mike
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 836 bytes
Desc: This is a digitally signed message part.
Url : http://lists.denx.de/pipermail/u-boot/attachments/20110913/dc26a584/attachment.pgp

#28 lore raw

PATCH 12/26 microblaze: Support flashes on lower addresses

In reply to Michal Simek

arch/microblaze/include/asm/processor.h line 4

Quoted 8 lines · On Tuesday, September 13, 2011 03:10:07 Michal Simek wrote:
arch/microblaze/include/asm/processor.h +4 -1
@@ -1 +1,4 @@
-/* FIXME: Implement this! */
+
+/* References to section boundaries */
+extern char __end[];
+extern char __text_start[];

should have proper #ifdef protection against multiple inclusion, and be nice to have a copyright/license comment block.
-mike
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 836 bytes
Desc: This is a digitally signed message part.
Url : http://lists.denx.de/pipermail/u-boot/attachments/20110913/46952e4b/attachment.pgp

author maintainer
#29 lore raw

PATCH 12/26 microblaze: Support flashes on lower addresses

Quoted 12 lines · Mike Frysinger

arch/microblaze/include/asm/processor.h line 4

Quoted 8 lines · On Tuesday, September 13, 2011 03:10:07 Michal Simek wrote:
arch/microblaze/include/asm/processor.h +4 -1
@@ -1 +1,4 @@
-/* FIXME: Implement this! */
+
+/* References to section boundaries */
+extern char __end[];
+extern char __text_start[];

should have proper #ifdef protection against multiple inclusion, and be nice to have a copyright/license comment block.

Fixed.

Thanks,
Michal

Signature · 4 lines
Michal Simek, Ing. (M.Eng)
w: www.monstr.eu p: +42-0-721842854
Maintainer of Linux kernel 2.6 Microblaze Linux - http://www.monstr.eu/fdt/
Microblaze U-BOOT custodian
#30 lore raw

PATCH 11/26 microblaze: Support CTRL+C when tftp is running

In reply to Michal Simek
Quoted 10 lines · On Tuesday, September 13, 2011 03:10:06 Michal Simek wrote:
---
 arch/microblaze/lib/board.c |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)
arch/microblaze/lib/board.c +0 -0
index d97543b..5510c12 100644

arch/microblaze/lib/board.c typedef int (init_fnc_t) (void); · line 74

Quoted 7 lines
arch/microblaze/lib/board.c +1 -0
@@ -68,6 +68,7 @@ typedef int (init_fnc_t) (void);
 init_fnc_t *init_sequence[] = {
 	env_init,
 	serial_init,
+	console_init_f,
 #ifdef CONFIG_SYS_GPIO_0
 	gpio_init,
 #endif

the summary/changelog is still confusing here. what i'd use is:
microblaze: call common console_init_f initialization function

All arches are supposed to call the common console_init_f func when setting things up. If we don't, code like tftp and netconsole don't operate correctly.
-mike
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 836 bytes
Desc: This is a digitally signed message part.
Url : http://lists.denx.de/pipermail/u-boot/attachments/20110913/b6a08d98/attachment.pgp

#31 lore raw

PATCH 11/26 microblaze: Support CTRL+C when tftp is running

Quoted 1 line · On Tuesday, September 13, 2011 13:33:57 Mike Frysinger wrote:

the summary/changelog is still confusing here

sorry, i was thinking of "microblaze: Initialize jumptable and console". but my suggestion mostly still stands.
-mike
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 836 bytes
Desc: This is a digitally signed message part.
Url : http://lists.denx.de/pipermail/u-boot/attachments/20110913/ca07a062/attachment.pgp

author maintainer
#32 lore raw

PATCH 11/26 microblaze: Support CTRL+C when tftp is running

In reply to Mike Frysinger
Quoted 6 lines · Mike Frysinger
Quoted 5 lines · On Tuesday, September 13, 2011 03:10:06 Michal Simek wrote:
---
 arch/microblaze/lib/board.c |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)
Quoted 15 lines

arch/microblaze/lib/board.c typedef int (init_fnc_t) (void); · line 74

Quoted 12 lines
arch/microblaze/lib/board.c +1 -0
index d97543b..5510c12 100644
@@ -68,6 +68,7 @@ typedef int (init_fnc_t) (void);
 init_fnc_t *init_sequence[] = {
 	env_init,
 	serial_init,
+	console_init_f,
 #ifdef CONFIG_SYS_GPIO_0
 	gpio_init,
 #endif

the summary/changelog is still confusing here. what i'd use is:
microblaze: call common console_init_f initialization function

Fixed

Thanks,
Michal

Signature · 4 lines
Michal Simek, Ing. (M.Eng)
w: www.monstr.eu p: +42-0-721842854
Maintainer of Linux kernel 2.6 Microblaze Linux - http://www.monstr.eu/fdt/
Microblaze U-BOOT custodian
#33 lore raw
In reply to Michal Simek

Dear Michal Simek,

Quoted 4 lines · In message <[email protected]> you wrote:

here is the whole package with Microblaze and Xilinx driver changes.
All patches are available in git://www.denx.de/git/u-boot-microblaze.git master branch if you like to test them.

Arghhh. No. It does not work like that. And you should know it, I've told you before.

This is not a new set of patches, some of them have been posted, and reviewd, before. Yet you fail to mention this in any way: there is no "V2" or so in the Subject: lines, nor is there any comment of hwat you changed compared to the initial submission.

I am not going to compare all this stuff myself.

Full NAK to the whole series, without even looking at it.

Please stick to the rules.

Best regards,

Wolfgang Denk

Signature · 4 lines
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
Where would we be without rhetorical questions?
author maintainer
#34 lore raw

Dear Wolfgang Denk,

Quoted 5 lines
Quoted 3 lines · In message <[email protected]> you wrote:

here is the whole package with Microblaze and Xilinx driver changes.
All patches are available in git://www.denx.de/git/u-boot-microblaze.git master branch if you like to test them.

Quoted 7 lines

Arghhh. No. It does not work like that. And you should know it, I've told you before.

This is not a new set of patches, some of them have been posted, and reviewd, before. Yet you fail to mention this in any way: there is no "V2" or so in the Subject: lines, nor is there any comment of hwat you changed compared to the initial submission.

True that I haven't change subject for patches but version changes are in every patch. Some of them weren't commented that's why they are just resent.

If you like, I can add version string to subject in every patch and write resent for patches which weren't commented.

Regards,
Michal

Signature · 4 lines
Michal Simek, Ing. (M.Eng)
w: www.monstr.eu p: +42-0-721842854
Maintainer of Linux kernel 2.6 Microblaze Linux - http://www.monstr.eu/fdt/
Microblaze U-BOOT custodian
#35 lore raw
Quoted 10 lines · Michal Simek

Dear Wolfgang Denk,

Quoted 8 lines
Quoted 3 lines · In message <[email protected]> you wrote:

here is the whole package with Microblaze and Xilinx driver changes. All patches are available in git://www.denx.de/git/u-boot-microblaze.git
master branch if you like to test them.

Arghhh. No. It does not work like that. And you should know it, I've told you before.

Quoted 8 lines
Quoted 4 lines

This is not a new set of patches, some of them have been posted, and reviewd, before. Yet you fail to mention this in any way: there is no "V2" or so in the Subject: lines, nor is there any comment of hwat you changed compared to the initial submission.

True that I haven't change subject for patches but version changes are in every patch. Some of them weren't commented that's why they are just resent.

Please read:
http://www.denx.de/wiki/view/U-Boot/Patches#Sending_updated_patch_versions

Quoted 6 lines

If you like, I can add version string to subject in every patch and write resent for patches which weren't commented.

Regards,
Michal

author maintainer
#36 lore raw
Quoted 14 lines · Marek Vasut
Quoted 13 lines · Michal Simek

Dear Wolfgang Denk,

Quoted 11 lines
Quoted 3 lines · In message <[email protected]> you wrote:

here is the whole package with Microblaze and Xilinx driver changes. All patches are available in git://www.denx.de/git/u-boot-microblaze.git
master branch if you like to test them.

Arghhh. No. It does not work like that. And you should know it, I've told you before.

This is not a new set of patches, some of them have been posted, and reviewd, before. Yet you fail to mention this in any way: there is no "V2" or so in the Subject: lines, nor is there any comment of hwat you changed compared to the initial submission.

Quoted 6 lines
Quoted 3 lines

True that I haven't change subject for patches but version changes are in every patch. Some of them weren't commented that's why they are just resent.

Please read:
http://www.denx.de/wiki/view/U-Boot/Patches#Sending_updated_patch_versions

What about patch resubmit or resend?

Thanks,
Michal

Signature · 4 lines
Michal Simek, Ing. (M.Eng)
w: www.monstr.eu p: +42-0-721842854
Maintainer of Linux kernel 2.6 Microblaze Linux - http://www.monstr.eu/fdt/
Microblaze U-BOOT custodian
#37 lore raw
Quoted 22 lines · Michal Simek
Quoted 21 lines · Marek Vasut
Quoted 19 lines · Michal Simek

Dear Wolfgang Denk,

Quoted 6 lines
Quoted 4 lines · In message <[email protected]> you wrote:

here is the whole package with Microblaze and Xilinx driver changes. All patches are available in
git://www.denx.de/git/u-boot-microblaze.git master branch if you like to test them.

Quoted 7 lines

Arghhh. No. It does not work like that. And you should know it, I've told you before.

This is not a new set of patches, some of them have been posted, and reviewd, before. Yet you fail to mention this in any way: there is no "V2" or so in the Subject: lines, nor is there any comment of hwat you changed compared to the initial submission.

True that I haven't change subject for patches but version changes are in every patch. Some of them weren't commented that's why they are just resent.

Quoted 5 lines
Quoted 3 lines

Please read:
http://www.denx.de/wiki/view/U-Boot/Patches#Sending_updated_patch_version
s

What about patch resubmit or resend?

Add [PATCH x/y RESEND] to the header.

Cheers

Quoted 3 lines

Thanks,
Michal

#38 lore raw
In reply to Michal Simek

Dear Michal Simek,

Quoted 5 lines · In message <[email protected]> you wrote:
Quoted 3 lines

Please read:
http://www.denx.de/wiki/view/U-Boot/Patches#Sending_updated_patch_versions

What about patch resubmit or resend?

Resending unchanged patches should be avoided, if possible. First, it just wastes bandwith and storage space. Second (and more important), PatchWork has problems with this: it locates patcehs based on their hashes, and for reposted patches, it will always find the _oldest_ matching patch. So even if we set N-1 of your repostings to "Superseded" or similar, Patchwork will set the oldest of these as "Accepted" and your Nth posting remains in state "New".

[Only the body of the patch is relevant here, so even postings of the same patch by different people or with changed commit messages will be handled like that.]

So only resend when you have large series of patches with very few unchanged patches in them.

Best regards,

Wolfgang Denk

Signature · 5 lines
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
"It may be that our role on this planet is not to worship God but  to
create him."                                       - Arthur C. Clarke
author maintainer
#39 lore raw
Quoted 15 lines · Wolfgang Denk

Dear Michal Simek,

Quoted 3 lines · In message <[email protected]> you wrote:
Quoted 2 lines

Please read:
http://www.denx.de/wiki/view/U-Boot/Patches#Sending_updated_patch_versions

What about patch resubmit or resend?

Resending unchanged patches should be avoided, if possible. First, it just wastes bandwith and storage space. Second (and more important), PatchWork has problems with this: it locates patcehs based on their hashes, and for reposted patches, it will always find the _oldest_ matching patch. So even if we set N-1 of your repostings to "Superseded" or similar, Patchwork will set the oldest of these as "Accepted" and your Nth posting remains in state "New".

Quoted 7 lines

[Only the body of the patch is relevant here, so even postings of the same patch by different people or with changed commit messages will be handled like that.]

So only resend when you have large series of patches with very few unchanged patches in them.

ok. Let's look at it.

I my repo are 4 patch series.
1. emaclite: 10 patches. At least 6 will be resubmit.
http://patchwork.ozlabs.org/patch/111768/
http://patchwork.ozlabs.org/patch/111769/
http://patchwork.ozlabs.org/patch/111770/
http://patchwork.ozlabs.org/patch/111771/

Probably not possible to apply because of v2 in 111772
http://patchwork.ozlabs.org/patch/111773/
http://patchwork.ozlabs.org/patch/111775/

2. microblaze series - 4 resubmits
http://patchwork.ozlabs.org/patch/112528/
http://patchwork.ozlabs.org/patch/112529/
http://patchwork.ozlabs.org/patch/112530/ - depend on patch from emaclite series not functional - just to avoid conflict
http://patchwork.ozlabs.org/patch/112531/

+ 3 patches which I can't see on patchwork but can see it on mailing list.

3. serial multi uartlite v3 required - 1 resubmit
+ http://patchwork.ozlabs.org/patch/113567/ - wire up for MB

4. axi ethernet v3 required - 1 resubmit
+ http://patchwork.ozlabs.org/patch/112533/ - wire up for MB

Series 3 and 4 should go together because the first patch must be driver change and then MB changes.

ok. Can I delegate patches through patchwork which are not review and probably should be reviewed or applied? Or change subjects for every patch if is new version or resend?

Regards,
Michal

Signature · 4 lines
Michal Simek, Ing. (M.Eng)
w: www.monstr.eu p: +42-0-721842854
Maintainer of Linux kernel 2.6 Microblaze Linux - http://www.monstr.eu/fdt/
Microblaze U-BOOT custodian