Commit 688911c2 authored by Giuseppe CAVALLARO's avatar Giuseppe CAVALLARO Committed by David S. Miller

stmmac: fix Transmit FIFO flush operation

Fix the Transmit FIFO flush operation; it was
disabled while reworking the descriptor structures.
Signed-off-by: default avatarGiuseppe Cavallaro <peppe.cavallaro@st.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 56b106ae
...@@ -244,3 +244,4 @@ extern void stmmac_set_mac_addr(unsigned long ioaddr, u8 addr[6], ...@@ -244,3 +244,4 @@ extern void stmmac_set_mac_addr(unsigned long ioaddr, u8 addr[6],
unsigned int high, unsigned int low); unsigned int high, unsigned int low);
extern void stmmac_get_mac_addr(unsigned long ioaddr, unsigned char *addr, extern void stmmac_get_mac_addr(unsigned long ioaddr, unsigned char *addr,
unsigned int high, unsigned int low); unsigned int high, unsigned int low);
extern void dwmac_dma_flush_tx_fifo(unsigned long ioaddr);
...@@ -172,7 +172,6 @@ enum rfd { ...@@ -172,7 +172,6 @@ enum rfd {
deac_full_minus_4 = 0x00401800, deac_full_minus_4 = 0x00401800,
}; };
#define DMA_CONTROL_TSF 0x00200000 /* Transmit Store and Forward */ #define DMA_CONTROL_TSF 0x00200000 /* Transmit Store and Forward */
#define DMA_CONTROL_FTF 0x00100000 /* Flush transmit FIFO */
enum ttc_control { enum ttc_control {
DMA_CONTROL_TTC_64 = 0x00000000, DMA_CONTROL_TTC_64 = 0x00000000,
......
...@@ -58,15 +58,6 @@ static int dwmac1000_dma_init(unsigned long ioaddr, int pbl, u32 dma_tx, ...@@ -58,15 +58,6 @@ static int dwmac1000_dma_init(unsigned long ioaddr, int pbl, u32 dma_tx,
return 0; return 0;
} }
/* Transmit FIFO flush operation */
static void dwmac1000_flush_tx_fifo(unsigned long ioaddr)
{
u32 csr6 = readl(ioaddr + DMA_CONTROL);
writel((csr6 | DMA_CONTROL_FTF), ioaddr + DMA_CONTROL);
do {} while ((readl(ioaddr + DMA_CONTROL) & DMA_CONTROL_FTF));
}
static void dwmac1000_dma_operation_mode(unsigned long ioaddr, int txmode, static void dwmac1000_dma_operation_mode(unsigned long ioaddr, int txmode,
int rxmode) int rxmode)
{ {
......
...@@ -95,6 +95,7 @@ ...@@ -95,6 +95,7 @@
#define DMA_STATUS_TU 0x00000004 /* Transmit Buffer Unavailable */ #define DMA_STATUS_TU 0x00000004 /* Transmit Buffer Unavailable */
#define DMA_STATUS_TPS 0x00000002 /* Transmit Process Stopped */ #define DMA_STATUS_TPS 0x00000002 /* Transmit Process Stopped */
#define DMA_STATUS_TI 0x00000001 /* Transmit Interrupt */ #define DMA_STATUS_TI 0x00000001 /* Transmit Interrupt */
#define DMA_CONTROL_FTF 0x00100000 /* Flush transmit FIFO */
extern void dwmac_enable_dma_transmission(unsigned long ioaddr); extern void dwmac_enable_dma_transmission(unsigned long ioaddr);
extern void dwmac_enable_dma_irq(unsigned long ioaddr); extern void dwmac_enable_dma_irq(unsigned long ioaddr);
......
...@@ -227,6 +227,13 @@ int dwmac_dma_interrupt(unsigned long ioaddr, ...@@ -227,6 +227,13 @@ int dwmac_dma_interrupt(unsigned long ioaddr,
return ret; return ret;
} }
void dwmac_dma_flush_tx_fifo(unsigned long ioaddr)
{
u32 csr6 = readl(ioaddr + DMA_CONTROL);
writel((csr6 | DMA_CONTROL_FTF), ioaddr + DMA_CONTROL);
do {} while ((readl(ioaddr + DMA_CONTROL) & DMA_CONTROL_FTF));
}
void stmmac_set_mac_addr(unsigned long ioaddr, u8 addr[6], void stmmac_set_mac_addr(unsigned long ioaddr, u8 addr[6],
unsigned int high, unsigned int low) unsigned int high, unsigned int low)
......
...@@ -40,7 +40,7 @@ static int enh_desc_get_tx_status(void *data, struct stmmac_extra_stats *x, ...@@ -40,7 +40,7 @@ static int enh_desc_get_tx_status(void *data, struct stmmac_extra_stats *x,
if (unlikely(p->des01.etx.frame_flushed)) { if (unlikely(p->des01.etx.frame_flushed)) {
CHIP_DBG(KERN_ERR "\tframe_flushed error\n"); CHIP_DBG(KERN_ERR "\tframe_flushed error\n");
x->tx_frame_flushed++; x->tx_frame_flushed++;
/*enh_desc_flush_tx_fifo(ioaddr);*/ dwmac_dma_flush_tx_fifo(ioaddr);
} }
if (unlikely(p->des01.etx.loss_carrier)) { if (unlikely(p->des01.etx.loss_carrier)) {
...@@ -68,7 +68,7 @@ static int enh_desc_get_tx_status(void *data, struct stmmac_extra_stats *x, ...@@ -68,7 +68,7 @@ static int enh_desc_get_tx_status(void *data, struct stmmac_extra_stats *x,
if (unlikely(p->des01.etx.underflow_error)) { if (unlikely(p->des01.etx.underflow_error)) {
CHIP_DBG(KERN_ERR "\tunderflow error\n"); CHIP_DBG(KERN_ERR "\tunderflow error\n");
/*enh_desc_flush_tx_fifo(ioaddr);*/ dwmac_dma_flush_tx_fifo(ioaddr);
x->tx_underflow++; x->tx_underflow++;
} }
...@@ -80,7 +80,7 @@ static int enh_desc_get_tx_status(void *data, struct stmmac_extra_stats *x, ...@@ -80,7 +80,7 @@ static int enh_desc_get_tx_status(void *data, struct stmmac_extra_stats *x,
if (unlikely(p->des01.etx.payload_error)) { if (unlikely(p->des01.etx.payload_error)) {
CHIP_DBG(KERN_ERR "\tAddr/Payload csum error\n"); CHIP_DBG(KERN_ERR "\tAddr/Payload csum error\n");
x->tx_payload_error++; x->tx_payload_error++;
/*enh_desc_flush_tx_fifo(ioaddr);*/ dwmac_dma_flush_tx_fifo(ioaddr);
} }
ret = -1; ret = -1;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment