diff options
Diffstat (limited to 'package/boot/uboot-layerscape/patches/0066-armv8-pfe-Enable-UDP-checksum-for-proper-tftp-operat.patch')
-rw-r--r-- | package/boot/uboot-layerscape/patches/0066-armv8-pfe-Enable-UDP-checksum-for-proper-tftp-operat.patch | 113 |
1 files changed, 113 insertions, 0 deletions
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 index 0000000000..b375cf750f --- /dev/null +++ b/package/boot/uboot-layerscape/patches/0066-armv8-pfe-Enable-UDP-checksum-for-proper-tftp-operat.patch @@ -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 + |