lkml.org 
[lkml]   [2018]   [May]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.16 21/55] r8169: fix powering up RTL8168h
    Date
    4.16-stable review patch.  If anyone has any objections, please let me know.

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

    From: Heiner Kallweit <hkallweit1@gmail.com>

    [ Upstream commit 3148dedfe79e422f448a10250d3e2cdf8b7ee617 ]

    Since commit a92a08499b1f "r8169: improve runtime pm in general and
    suspend unused ports" interfaces w/o link are runtime-suspended after
    10s. On systems where drivers take longer to load this can lead to the
    situation that the interface is runtime-suspended already when it's
    initially brought up.
    This shouldn't be a problem because rtl_open() resumes MAC/PHY.
    However with at least one chip version the interface doesn't properly
    come up, as reported here:
    https://bugzilla.kernel.org/show_bug.cgi?id=199549

    The vendor driver uses a delay to give certain chip versions some
    time to resume before starting the PHY configuration. So let's do
    the same. I don't know which chip versions may be affected,
    therefore apply this delay always.

    This patch was reported to fix the issue for RTL8168h.
    I was able to reproduce the issue on an Asus H310I-Plus which also
    uses a RTL8168h. Also in my case the patch fixed the issue.

    Reported-by: Slava Kardakov <ojab@ojab.ru>
    Tested-by: Slava Kardakov <ojab@ojab.ru>
    Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    drivers/net/ethernet/realtek/r8169.c | 3 +++
    1 file changed, 3 insertions(+)

    --- a/drivers/net/ethernet/realtek/r8169.c
    +++ b/drivers/net/ethernet/realtek/r8169.c
    @@ -5087,6 +5087,9 @@ static void rtl_pll_power_down(struct rt
    static void rtl_pll_power_up(struct rtl8169_private *tp)
    {
    rtl_generic_op(tp, tp->pll_power_ops.up);
    +
    + /* give MAC/PHY some time to resume */
    + msleep(20);
    }

    static void rtl_init_pll_power_ops(struct rtl8169_private *tp)

    \
     
     \ /
      Last update: 2018-05-18 11:13    [W:2.420 / U:0.056 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site