From patchwork Wed May 17 14:12:14 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Russell King (Oracle)" X-Patchwork-Id: 13245093 X-Patchwork-Delegate: kuba@kernel.org Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net [23.128.96.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 879DA18B16 for ; Wed, 17 May 2023 14:12:29 +0000 (UTC) Received: from pandora.armlinux.org.uk (pandora.armlinux.org.uk [IPv6:2001:4d48:ad52:32c8:5054:ff:fe00:142]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 390F56596 for ; Wed, 17 May 2023 07:12:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=armlinux.org.uk; s=pandora-2019; h=Date:Sender:Message-Id:Content-Type: Content-Transfer-Encoding:MIME-Version:Subject:Cc:To:From:References: In-Reply-To:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help: List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=s+vBPjWEOlIvEhpPzhVOL686Xa7ubsLGVUGXMttduQo=; b=a+W+KDO6JhhH9XkmWBQaBQKocW u3ChYM5CItN3Q7OC4CJ/AU8ilS/5cs0b7VFNIrA/qCXCtAN/JBtQTeWRTkmI1QnrqMOp+diI4UF6i wZhxnvnlG5PnSAFbEdqRD0F5DGf5hLfsa/Lye2brWU/lKmnc3GplQGKuL+/UayxHcG9QpWESTklva QW8m+KjrjBk7Ih3mwhkTreQPgXYxIwPRIABFqBwszjSfpf45PtquJ+RTE5q8bWo601JyQ94ZY74lM kMqcwGxRioPQ5u676xhJhDCzH4Pgm+q+Ow+jwzxBUqLUnpyTZeK3TZh3ziGOXuG6xYaClxqowZg9f 3Uf74udw==; Received: from e0022681537dd.dyn.armlinux.org.uk ([fd8f:7570:feb6:1:222:68ff:fe15:37dd]:45988 helo=rmk-PC.armlinux.org.uk) by pandora.armlinux.org.uk with esmtpsa (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1pzHt1-00080b-1v; Wed, 17 May 2023 15:12:15 +0100 Received: from rmk by rmk-PC.armlinux.org.uk with local (Exim 4.94.2) (envelope-from ) id 1pzHt0-005sgL-FQ; Wed, 17 May 2023 15:12:14 +0100 In-Reply-To: References: From: "Russell King (Oracle)" To: Jose Abreu Cc: Andrew Lunn , Heiner Kallweit , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , netdev@vger.kernel.org Subject: [PATCH RFC net-next 6/9] net: pcs: xpcs: correct lp_advertising contents Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Disposition: inline Message-Id: Sender: Russell King Date: Wed, 17 May 2023 15:12:14 +0100 X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED,SPF_HELO_NONE, SPF_NONE,T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net X-Patchwork-Delegate: kuba@kernel.org X-Patchwork-State: RFC lp_advertising is supposed to reflect the link partner's advertisement unmodified by the local advertisement, but xpcs bitwise ands it with the local advertisement prior to calculating the resolution of the negotiation. Fix this by moving the bitwise and to xpcs_resolve_lpa_c73() so it can place the results in a temporary bitmap before passing that to ixpcs_get_max_usxgmii_speed(). Reviewed-by: Andrew Lunn Signed-off-by: Russell King (Oracle) --- drivers/net/pcs/pcs-xpcs.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/drivers/net/pcs/pcs-xpcs.c b/drivers/net/pcs/pcs-xpcs.c index 16fcc7891f92..43115d04c01a 100644 --- a/drivers/net/pcs/pcs-xpcs.c +++ b/drivers/net/pcs/pcs-xpcs.c @@ -531,18 +531,19 @@ static int xpcs_read_lpa_c73(struct dw_xpcs *xpcs, mii_c73_mod_linkmode(state->lp_advertising, lpa); - linkmode_and(state->lp_advertising, state->lp_advertising, - state->advertising); return 0; } static void xpcs_resolve_lpa_c73(struct dw_xpcs *xpcs, struct phylink_link_state *state) { - int max_speed = xpcs_get_max_usxgmii_speed(state->lp_advertising); + __ETHTOOL_DECLARE_LINK_MODE_MASK(res); + + /* Calculate the union of the advertising masks */ + linkmode_and(res, state->lp_advertising, state->advertising); state->pause = MLO_PAUSE_TX | MLO_PAUSE_RX; - state->speed = max_speed; + state->speed = xpcs_get_max_usxgmii_speed(res); state->duplex = DUPLEX_FULL; }