lkml.org 
[lkml]   [2013]   [May]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 053/115] r8169: honor jumbo settings when chipset is requested to start.
    Date
    3.5.7.13 -stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: =?UTF-8?q?fran=C3=A7ois=20romieu?= <romieu@fr.zoreil.com>

    commit faf1e7857a1b87cd8baf48c3e962142e21ad417c upstream.

    Some hardware start settings implicitely assume an usual 1500 bytes mtu
    that can't be guaranteed because changes of mtu may be requested both
    before and after the hardware is started.

    Reported-by: Tomi Orava <tomimo@ncircle.nullnet.fi>
    Signed-off-by: Francois Romieu <romieu@fr.zoreil.com>
    Cc: Hayes Wang <hayeswang@realtek.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Luis Henriques <luis.henriques@canonical.com>
    ---
    drivers/net/ethernet/realtek/r8169.c | 27 ++++++++++++++++++---------
    1 file changed, 18 insertions(+), 9 deletions(-)

    diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c
    index 6c595f9..f250232 100644
    --- a/drivers/net/ethernet/realtek/r8169.c
    +++ b/drivers/net/ethernet/realtek/r8169.c
    @@ -4574,8 +4574,10 @@ static void rtl_hw_start_8168bb(struct rtl8169_private *tp)

    RTL_W16(CPlusCmd, RTL_R16(CPlusCmd) & ~R8168_CPCMD_QUIRK_MASK);

    - rtl_tx_performance_tweak(pdev,
    - (0x5 << MAX_READ_REQUEST_SHIFT) | PCI_EXP_DEVCTL_NOSNOOP_EN);
    + if (tp->dev->mtu <= ETH_DATA_LEN) {
    + rtl_tx_performance_tweak(pdev, (0x5 << MAX_READ_REQUEST_SHIFT) |
    + PCI_EXP_DEVCTL_NOSNOOP_EN);
    + }
    }

    static void rtl_hw_start_8168bef(struct rtl8169_private *tp)
    @@ -4598,7 +4600,8 @@ static void __rtl_hw_start_8168cp(struct rtl8169_private *tp)

    RTL_W8(Config3, RTL_R8(Config3) & ~Beacon_en);

    - rtl_tx_performance_tweak(pdev, 0x5 << MAX_READ_REQUEST_SHIFT);
    + if (tp->dev->mtu <= ETH_DATA_LEN)
    + rtl_tx_performance_tweak(pdev, 0x5 << MAX_READ_REQUEST_SHIFT);

    rtl_disable_clock_request(pdev);

    @@ -4632,7 +4635,8 @@ static void rtl_hw_start_8168cp_2(struct rtl8169_private *tp)

    RTL_W8(Config3, RTL_R8(Config3) & ~Beacon_en);

    - rtl_tx_performance_tweak(pdev, 0x5 << MAX_READ_REQUEST_SHIFT);
    + if (tp->dev->mtu <= ETH_DATA_LEN)
    + rtl_tx_performance_tweak(pdev, 0x5 << MAX_READ_REQUEST_SHIFT);

    RTL_W16(CPlusCmd, RTL_R16(CPlusCmd) & ~R8168_CPCMD_QUIRK_MASK);
    }
    @@ -4651,7 +4655,8 @@ static void rtl_hw_start_8168cp_3(struct rtl8169_private *tp)

    RTL_W8(MaxTxPacketSize, TxPacketMax);

    - rtl_tx_performance_tweak(pdev, 0x5 << MAX_READ_REQUEST_SHIFT);
    + if (tp->dev->mtu <= ETH_DATA_LEN)
    + rtl_tx_performance_tweak(pdev, 0x5 << MAX_READ_REQUEST_SHIFT);

    RTL_W16(CPlusCmd, RTL_R16(CPlusCmd) & ~R8168_CPCMD_QUIRK_MASK);
    }
    @@ -4712,7 +4717,8 @@ static void rtl_hw_start_8168d(struct rtl8169_private *tp)

    RTL_W8(MaxTxPacketSize, TxPacketMax);

    - rtl_tx_performance_tweak(pdev, 0x5 << MAX_READ_REQUEST_SHIFT);
    + if (tp->dev->mtu <= ETH_DATA_LEN)
    + rtl_tx_performance_tweak(pdev, 0x5 << MAX_READ_REQUEST_SHIFT);

    RTL_W16(CPlusCmd, RTL_R16(CPlusCmd) & ~R8168_CPCMD_QUIRK_MASK);
    }
    @@ -4724,7 +4730,8 @@ static void rtl_hw_start_8168dp(struct rtl8169_private *tp)

    rtl_csi_access_enable_1(tp);

    - rtl_tx_performance_tweak(pdev, 0x5 << MAX_READ_REQUEST_SHIFT);
    + if (tp->dev->mtu <= ETH_DATA_LEN)
    + rtl_tx_performance_tweak(pdev, 0x5 << MAX_READ_REQUEST_SHIFT);

    RTL_W8(MaxTxPacketSize, TxPacketMax);

    @@ -4783,7 +4790,8 @@ static void rtl_hw_start_8168e_1(struct rtl8169_private *tp)

    rtl_ephy_init(ioaddr, e_info_8168e_1, ARRAY_SIZE(e_info_8168e_1));

    - rtl_tx_performance_tweak(pdev, 0x5 << MAX_READ_REQUEST_SHIFT);
    + if (tp->dev->mtu <= ETH_DATA_LEN)
    + rtl_tx_performance_tweak(pdev, 0x5 << MAX_READ_REQUEST_SHIFT);

    RTL_W8(MaxTxPacketSize, TxPacketMax);

    @@ -4809,7 +4817,8 @@ static void rtl_hw_start_8168e_2(struct rtl8169_private *tp)

    rtl_ephy_init(ioaddr, e_info_8168e_2, ARRAY_SIZE(e_info_8168e_2));

    - rtl_tx_performance_tweak(pdev, 0x5 << MAX_READ_REQUEST_SHIFT);
    + if (tp->dev->mtu <= ETH_DATA_LEN)
    + rtl_tx_performance_tweak(pdev, 0x5 << MAX_READ_REQUEST_SHIFT);

    rtl_eri_write(ioaddr, 0xc0, ERIAR_MASK_0011, 0x0000, ERIAR_EXGMAC);
    rtl_eri_write(ioaddr, 0xb8, ERIAR_MASK_0011, 0x0000, ERIAR_EXGMAC);
    --
    1.8.1.2


    \
     
     \ /
      Last update: 2013-05-20 14:01    [W:4.130 / U:0.044 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site