Bug 54231
Summary: | r8169 driver regression caused by the commit aee77e4accbeb2c86b1d294cd84fec4a12dde3bd | ||
---|---|---|---|
Product: | Networking | Reporter: | Tomi Orava (tomimo) |
Component: | Other | Assignee: | Francois Romieu (romieu) |
Status: | RESOLVED CODE_FIX | ||
Severity: | normal | CC: | romieu |
Priority: | P1 | ||
Hardware: | All | ||
OS: | Linux | ||
Kernel Version: | 3.4.x 3.7.x 3.8.x | Subsystem: | |
Regression: | Yes | Bisected commit-id: |
Description
Tomi Orava
2013-02-22 16:32:15 UTC
Although the r8169 has been working just fine on 3.4.31 for the past 5 days, it seems that I missed the second DMA Burst setting in the previous patch that should get fixed as well: --- a/drivers/net/ethernet/realtek/r8169.c +++ b/drivers/net/ethernet/realtek/r8169.c @@ -77,6 +77,7 @@ static const int multicast_filter_limit = 32; #define MAX_READ_REQUEST_SHIFT 12 +#define TX_DMA_BURST_512 5 /* Maximum PCI burst, limited to 512 */ #define TX_DMA_BURST 7 /* Maximum PCI burst, '7' is unlimited */ #define InterFrameGap 0x03 /* 3 means InterFrameGap = the shortest one */ @@ -4406,8 +4407,14 @@ static void rtl_set_rx_tx_config_registers(struct rtl8169_private *tp) void __iomem *ioaddr = tp->mmio_addr; /* Set DMA burst size and Interframe Gap Time */ - RTL_W32(TxConfig, (TX_DMA_BURST << TxDMAShift) | - (InterFrameGap << TxInterFrameGapShift)); + + if (tp->mac_version == RTL_GIGA_MAC_VER_11) { + RTL_W32(TxConfig, (TX_DMA_BURST_512 << TxDMAShift) | + (InterFrameGap << TxInterFrameGapShift)); + } else { + RTL_W32(TxConfig, (TX_DMA_BURST << TxDMAShift) | + (InterFrameGap << TxInterFrameGapShift)); + } } static void rtl_hw_start(struct net_device *dev) @@ -5148,8 +5155,13 @@ static void rtl_hw_start_8168(struct net_device *dev) rtl_set_rx_mode(dev); - RTL_W32(TxConfig, (TX_DMA_BURST << TxDMAShift) | - (InterFrameGap << TxInterFrameGapShift)); + if (tp->mac_version == RTL_GIGA_MAC_VER_11) { + RTL_W32(TxConfig, (TX_DMA_BURST_512 << TxDMAShift) | + (InterFrameGap << TxInterFrameGapShift)); + } else { + RTL_W32(TxConfig, (TX_DMA_BURST << TxDMAShift) | + (InterFrameGap << TxInterFrameGapShift)); + } RTL_R8(IntrMask); It was diagnosed as a jumbo settings init bug and fixed in faf1e7857a1b87cd8baf48c3e962142e21ad417c -- Ueimor |