Received: by 2002:a25:d7c1:0:0:0:0:0 with SMTP id o184csp2252974ybg; Sun, 27 Oct 2019 14:27:09 -0700 (PDT) X-Google-Smtp-Source: APXvYqz9K8d7YZD4GSwCsSBQ8bZsej9Toqd1m6g7cOTjBhjMdg5QMaS/JrlD3Quf0OLseljHT1Gc X-Received: by 2002:a50:870c:: with SMTP id i12mr9747623edb.16.1572211629351; Sun, 27 Oct 2019 14:27:09 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1572211629; cv=none; d=google.com; s=arc-20160816; b=I/tNNiKmHVgvM+NUom4KlG/PXaIQeQlw9EatJ6Ec8jnSmy9FJuRiaB+s3GY6LL3En5 ceuAwkPTIuXwkSAlEg1QQqB5nDxVzSl9B3ILtG9Ug7Ri31L7XQeFI8lPxcrzSctFAQcr +TX3UAEZgWifr+V4ZrG7PB5GaUkNFxADKZN6u8eF6CQlYjq3O7pprpkMbCfdG7AOiVI5 pn1vbVyreLJPcxXtNfrqn/ADPoMsn1YNVFF8gI3rqSmfGiM5L5mPRt0Vg4Rp8AKBJ6A5 33nGb8gTBh11b1Hs+K5q+Qc7JE748RQWyHxC1X0UZJ6q19pIVApNYzo+G9bEVi3YrtfC MkOQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=zaaIJ4vWvTJ1aVvPiOKeS82FQ8mX/iXKdDaEOwmEGQ0=; b=nW/V4WKiz5YT8pxj1D+q6UOLcPkLxcwFwpJ3u6djgmt+Ljw1tepDj60D6XIiUuSwoA JrQm6IIT9rS+7XAXrEh1s7+lis17RxSSVGw2xFSWNm6lKN5GKDMk+cSsJDFyqiIcnm1Z qv0ICDViPa5Cgk4oYhQDu9SxXNIp+FP0TdInOlaZts0AwGaOhLUOcpPtmErUS+l+zqfR 7xhrjYJxHOUVeKrERERJyaAHKrgGZ0I5WW9EsDGdG7bcpg35mWwFzMSbNkAIj9vJVSeh sg2kQpNtui4W1CNOS5Z3thqfOr/O/zjqOBkfwH2W7EfaNN9ZAPlRGk6LEm0BhHSR/51/ RUIg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=GsgMSTO+; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id j12si6243630eda.406.2019.10.27.14.26.45; Sun, 27 Oct 2019 14:27:09 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=GsgMSTO+; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732322AbfJ0VXN (ORCPT + 99 others); Sun, 27 Oct 2019 17:23:13 -0400 Received: from mail.kernel.org ([198.145.29.99]:44354 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1732313AbfJ0VXM (ORCPT ); Sun, 27 Oct 2019 17:23:12 -0400 Received: from localhost (100.50.158.77.rev.sfr.net [77.158.50.100]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id F2E74205C9; Sun, 27 Oct 2019 21:23:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1572211391; bh=M7uTjsI+o9WXBFHqdAS9+KC8Ahfs6NAOz4ByIO1AcQg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=GsgMSTO+QjtIenxns4uoq/IworbfOj6hidoT3dPU3r6pmXemjy21xq2d712l5Ksxa UyzTPFmZlybFYyTqu9fG1/DyJgrk5E/6hOdoQjgkze7DKebceLwOXZ91DAkVOFeU8a B9c8H+NZFJ0Q1CvLvMNqniUE3/cugJbmKthoS2K4= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Yonglong Liu , Heiner Kallweit , "David S. Miller" Subject: [PATCH 5.3 091/197] net: phy: Fix "link partner" information disappear issue Date: Sun, 27 Oct 2019 22:00:09 +0100 Message-Id: <20191027203356.656590032@linuxfoundation.org> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191027203351.684916567@linuxfoundation.org> References: <20191027203351.684916567@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Yonglong Liu [ Upstream commit 3de5ae54712c75cf3c517a288e0a704784ec6cf5 ] Some drivers just call phy_ethtool_ksettings_set() to set the links, for those phy drivers that use genphy_read_status(), if autoneg is on, and the link is up, than execute "ethtool -s ethx autoneg on" will cause "link partner" information disappear. The call trace is phy_ethtool_ksettings_set()->phy_start_aneg() ->linkmode_zero(phydev->lp_advertising)->genphy_read_status(), the link didn't change, so genphy_read_status() just return, and phydev->lp_advertising is zero now. This patch moves the clear operation of lp_advertising from phy_start_aneg() to genphy_read_lpa()/genphy_c45_read_lpa(), and if autoneg on and autoneg not complete, just clear what the generic functions care about. Fixes: 88d6272acaaa ("net: phy: avoid unneeded MDIO reads in genphy_read_status") Signed-off-by: Yonglong Liu Reviewed-by: Heiner Kallweit Signed-off-by: David S. Miller Signed-off-by: Greg Kroah-Hartman --- drivers/net/phy/phy-c45.c | 2 ++ drivers/net/phy/phy.c | 3 --- drivers/net/phy/phy_device.c | 9 ++++++++- 3 files changed, 10 insertions(+), 4 deletions(-) --- a/drivers/net/phy/phy-c45.c +++ b/drivers/net/phy/phy-c45.c @@ -323,6 +323,8 @@ int genphy_c45_read_pma(struct phy_devic { int val; + linkmode_zero(phydev->lp_advertising); + val = phy_read_mmd(phydev, MDIO_MMD_PMAPMD, MDIO_CTRL1); if (val < 0) return val; --- a/drivers/net/phy/phy.c +++ b/drivers/net/phy/phy.c @@ -566,9 +566,6 @@ int phy_start_aneg(struct phy_device *ph if (AUTONEG_DISABLE == phydev->autoneg) phy_sanitize_settings(phydev); - /* Invalidate LP advertising flags */ - linkmode_zero(phydev->lp_advertising); - err = phy_config_aneg(phydev); if (err < 0) goto out_unlock; --- a/drivers/net/phy/phy_device.c +++ b/drivers/net/phy/phy_device.c @@ -1823,7 +1823,14 @@ int genphy_read_status(struct phy_device linkmode_zero(phydev->lp_advertising); - if (phydev->autoneg == AUTONEG_ENABLE && phydev->autoneg_complete) { + if (phydev->autoneg == AUTONEG_ENABLE) { + if (!phydev->autoneg_complete) { + mii_stat1000_mod_linkmode_lpa_t(phydev->lp_advertising, + 0); + mii_lpa_mod_linkmode_lpa_t(phydev->lp_advertising, 0); + return 0; + } + if (phydev->is_gigabit_capable) { lpagb = phy_read(phydev, MII_STAT1000); if (lpagb < 0)