layerscape: add 64b/32b target for ls1012ardb device
[openwrt/staging/yousong.git] / package / boot / uboot-layerscape / patches / 0066-armv8-pfe-Enable-UDP-checksum-for-proper-tftp-operat.patch
diff --git a/package/boot/uboot-layerscape/patches/0066-armv8-pfe-Enable-UDP-checksum-for-proper-tftp-operat.patch b/package/boot/uboot-layerscape/patches/0066-armv8-pfe-Enable-UDP-checksum-for-proper-tftp-operat.patch
new file mode 100644 (file)
index 0000000..b375cf7
--- /dev/null
@@ -0,0 +1,113 @@
+From 35efc0f34b56ca9d5fb5d080d5de0833ded7e3b8 Mon Sep 17 00:00:00 2001
+From: Anji J <anji.jagarlmudi@freescale.com>
+Date: Tue, 21 Jun 2016 13:25:12 +0530
+Subject: [PATCH 66/93] armv8:pfe Enable UDP checksum for proper tftp
+ operation
+
+1. Add CONFIG_UDP_CHECKSUM flag to perform UDP checksum in S/W
+   instead of hardware
+2. Rx descriptor model changed back to original
+   removed strobe mode
+3. Send more than one dummy packets to bring HIF BD to idle state
+
+Signed-off-by: Anji J <anji.jagarlmudi@freescale.com>
+---
+ common/cmd_pfe_commands.c        |   12 +++++++-----
+ drivers/net/pfe_eth/pfe_driver.c |   19 +++----------------
+ include/configs/ls1012a_common.h |    1 +
+ 3 files changed, 11 insertions(+), 21 deletions(-)
+
+diff --git a/common/cmd_pfe_commands.c b/common/cmd_pfe_commands.c
+index 92917e0..3575ad4 100644
+--- a/common/cmd_pfe_commands.c
++++ b/common/cmd_pfe_commands.c
+@@ -929,7 +929,7 @@ static void send_dummy_pkt_to_hif(void)
+ static void pfe_command_stop(int argc, char * const argv[])
+ {
+-      int id;
++      int id, hif_stop_loop = 10;
+       u32 rx_status;
+       printf("Stopping PFE... \n");
+@@ -937,10 +937,12 @@ static void pfe_command_stop(int argc, char * const argv[])
+       hif_rx_desc_disable();
+       /*If HIF Rx BDP is busy send a dummy packet */
+-      rx_status = readl(HIF_RX_STATUS);
+-      if(rx_status & BDP_CSR_RX_DMA_ACTV)
+-              send_dummy_pkt_to_hif();
+-      udelay(10);
++      do {
++              rx_status = readl(HIF_RX_STATUS);
++              if (rx_status & BDP_CSR_RX_DMA_ACTV)
++                      send_dummy_pkt_to_hif();
++              udelay(10);
++      } while (hif_stop_loop--);
+       if(readl(HIF_RX_STATUS) & BDP_CSR_RX_DMA_ACTV)
+               printf("Unable to stop HIF\n");
+diff --git a/drivers/net/pfe_eth/pfe_driver.c b/drivers/net/pfe_eth/pfe_driver.c
+index e252fcf..6774fb4 100644
+--- a/drivers/net/pfe_eth/pfe_driver.c
++++ b/drivers/net/pfe_eth/pfe_driver.c
+@@ -37,13 +37,8 @@ int pfe_recv(unsigned int *pkt_ptr, int *phy_port)
+       bd = rx_desc->rxBase + rx_desc->rxToRead;
+-      if (bd->ctrl & BD_CTRL_DESC_EN) {
+-              if(!(readl(HIF_RX_STATUS) & BDP_CSR_RX_DMA_ACTV)){
+-                      /*If BDP is not active give write strobe */
+-                      writel((readl(HIF_RX_CTRL) | HIF_CTRL_BDP_CH_START_WSTB), HIF_RX_CTRL);
+-              }
++      if (bd->ctrl & BD_CTRL_DESC_EN)
+               return len; //No pending Rx packet
+-      }
+       /* this len include hif_header(8bytes) */
+       len = bd->ctrl & 0xFFFF;
+@@ -72,15 +67,10 @@ int pfe_recv(unsigned int *pkt_ptr, int *phy_port)
+       *phy_port = hif_header->port_no;
+       len -= sizeof(struct hif_header_s);
+-#if defined(PFE_LS1012A_RESET_WA)
+-      /* reset bd control field */
+-      ctrl = (MAX_FRAME_SIZE | BD_CTRL_LAST_BD | BD_CTRL_LIFM | BD_CTRL_DESC_EN | BD_CTRL_DIR);
+-#else
+       /* reset bd control field */
+       ctrl = (MAX_FRAME_SIZE | BD_CTRL_LIFM | BD_CTRL_DESC_EN | BD_CTRL_DIR);
+-      /* If we use BD_CTRL_LAST_BD, rxToRead never changes */
+       rx_desc->rxToRead = (rx_desc->rxToRead + 1) & (rx_desc->rxRingSize - 1);
+-#endif
++
+       bd->ctrl = ctrl;
+       bd->status = 0;
+@@ -363,11 +353,8 @@ static int hif_rx_desc_init(struct pfe *pfe)
+       memset(bd_va, 0, sizeof(struct bufDesc) * rx_desc->rxRingSize);
+-#if defined(PFE_LS1012A_RESET_WA)
+-      ctrl = (MAX_FRAME_SIZE | BD_CTRL_LAST_BD | BD_CTRL_DESC_EN | BD_CTRL_DIR | BD_CTRL_LIFM);
+-#else
+       ctrl = (MAX_FRAME_SIZE | BD_CTRL_DESC_EN | BD_CTRL_DIR | BD_CTRL_LIFM);
+-#endif
++
+       for (i=0; i < rx_desc->rxRingSize; i++) {
+               bd_va->next = (unsigned long)(bd_pa + 1);
+               bd_va->ctrl = ctrl;
+diff --git a/include/configs/ls1012a_common.h b/include/configs/ls1012a_common.h
+index 4c7c697..47b8ec3 100644
+--- a/include/configs/ls1012a_common.h
++++ b/include/configs/ls1012a_common.h
+@@ -116,6 +116,7 @@
+ #ifdef CONFIG_FSL_PPFE
+ #define CONFIG_CMD_PFE_COMMANDS
+ #define CONFIG_UTIL_PE_DISABLED
++#define CONFIG_UDP_CHECKSUM
+ #endif
+-- 
+1.7.9.5
+