From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 4E7F3C88E7F for ; Tue, 15 Sep 2026 12:39:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=iMx0MGAbown237lRZwGTvI2NDsSTVgu4t3Fa4GhaH/A=; b=UuK2dMbqdbQmmr cs0AbIORdl6BPgsvqKcH5k3MAwF4/eDYKcTDsMhPQaG1fScrNTTrrpvAMj6xnbTLdPG7jkcMEH0E1 7sOPcCI9SkwcdNugoRECBAG1wH9G34ugdPKogexbNyuaP6IOBNWJHBnBY+/kBFpCIvkV40wxa25jc zFqiMemRjpELS7xx0zs/KKagyqdOJ9sdctpGubQXcOHktWagEpB7jnxXWJNwSXvzaPYabxpeS72/b wXN7UomOBa9C5LE3Ph0A9kg4WpHQfwwJONFNUX5BSeoCkjMK+J1sJc5YypcDMPho3K+SOiMOviD+r /Qk+6/6ZD53AJKgJYeEg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1x6SRb-00000006XzM-2zZG; Tue, 15 Sep 2026 12:39:27 +0000 Received: from mail-pj2-x01.google.com ([2607:f8b0:4864:39::1]) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1x6SRR-00000006Xbp-0pdK for linux-phy@lists.infradead.org; Tue, 15 Sep 2026 12:39:19 +0000 Received: by mail-pj2-x01.google.com with SMTP id 98e67ed59e1d1-3989fdf58bcso265463a91.0 for ; Tue, 15 Sep 2026 05:39:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1789475956; x=1790080756; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=Yjmztt9FS1A5qxNaZfWYg6PvzN0Znz9LRYwH9/qf2Qg=; b=kFFOELM0IIPP2w8nU98hUf7NC64kCzK7hgLrXnHJL10AbwtN2/2vLzizLTIzI87lgh Z9EXHtBb3gi9uqVaFoYGPcqbaZmo8gsJlxFbz+l9og1Pk3qL24FvCrgPrD2bqt2D2sea GhO9pHNht+Mlmqe1Rx5qmzqSUBfSSSmijnv/aB39yUq4j8L0kY2Os3lREiUQs4BdEO8m n+NIhqlwGSDsej1KbZ/A4b5KJM3HCUdN6H6kLLhIrPAtEMy9VgmnSoJvhWjrBGDxz/Dw knIjL6bDE/lkWU8rUIrs3L1n3ImyGDCbZwszkXmv7+tV7UJ/UhhqhjT2J98uobYg1rIt I/8A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1789475956; x=1790080756; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=Yjmztt9FS1A5qxNaZfWYg6PvzN0Znz9LRYwH9/qf2Qg=; b=sibY4fGpiBCSLvgPTmPTHOMtAxUMqoezJ+MFR0Tta7eIHZRKKfuP9VuiVDuomld0HS XCosCh2cCyhiLy8jyTT4g0bbyiG9NvFOOAQfAfelhEh8XQUsZB5IzgaUQWmOk/9Lpew9 kucbRTPIU6yoouu+uKzSAxpuDhrtERdyEIiF8qrN74AHJRUvSEB6xwI3Mrg5eFrFKAc7 VbHWE7VAzHC2dwqa6u31GpMN/eOZy9EzyfStznD+sb1SAw71nGsMTOVf1Pgzb2P2u1TZ ZiL6ax1PGzt8zZpnlBR2stVtHiqFfsM3B+lDk9dLnpd7tR3HpHxGvyLM9d9EnN9X6nSN L+ew== X-Forwarded-Encrypted: i=1; AKwUvBzHFYvQO4NB4W3FUUSbhcMKiMJiqmgw2VSJTcR7Q1c6q+27TDEhnjF4jOeuBhrTV9rfnNWJ1wz/lPU=@lists.infradead.org X-Gm-Message-State: AFuF++lQY+J7Fjfoc+WFEYJhHnGTdkhtAy5QR6py2W2XDSIiosZYpxR1 YUH69Ap5zg0gAAv6E7vpz7kgNAn3yQ+/DDuHjBA/LwSc3OF78LKjAx8h X-Gm-Gg: AYBFou2rrh2oUXrCM+ZYM3N7TQgJ+Z5hhwqrqt0fPFFjHdtz/K+L8ZdZ50juj+TVIIW ocA/E2kyv877qC0f7RIMhyNVkeG06d3/6aR3KKAzKSH/XKFh9QKWTqLv4EJ7q+mfuA0L+jJ8HH/ PNKIr6yeCjrhdoaRwYBrGH+Qj+zkYn5pfwNFplaiCF3DKijU4PmfnTcBNqCI0nd4QZWdr+ifRYC hkjNEedzJbIdbq+ppGT3qtlD9/vTFGXqfmA9nrPzAwNTJ4vNFoPFb44q38r6Peoz5uAXuEue19/ Ote/khUCz4N/enWCb3ObihYhX8KAPdDxZg+0ScZCakV3moJErRrEYsCiA5TgdcBYMeuyGo91csw rUbf95UCURbGQasHaSaJ1L9Gec3X8DtH6GXqKrT9gM797B5B6zcICyqJMKq4Nk9+N7tO9Yvgve5 SWNY48WhNi166P+YMcVopG/69JtrEJ09P7CwV0+abNHmGtEvUbj5YWw7cPwpYDu8krepLH6w== X-Received: by 2002:a17:90b:498e:b0:39d:feca:f48d with SMTP id 98e67ed59e1d1-39dfecaf6bfmr3959422a91.3.1789475956259; Tue, 15 Sep 2026 05:39:16 -0700 (PDT) Received: from server.lan ([168.138.199.194]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-39dfdd28acbsm5307259a91.10.2026.09.15.05.39.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 15 Sep 2026 05:39:15 -0700 (PDT) From: Coia Prant To: Andrew Lunn , "David S . Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Heiko Stuebner , Vinod Koul , Maxime Chevallier , Maxime Coquelin , Alexandre Torgue , Lad Prabhakar , Romain Gantois , Heiner Kallweit , Coia Prant Cc: Neil Armstrong , Russell King , Shawn Lin , David Heidelberg , netdev@vger.kernel.org, linux-rockchip@lists.infradead.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-phy@lists.infradead.org, linux-stm32@st-md-mailman.stormreply.com, linux-renesas-soc@vger.kernel.org, Jiawen Wu Subject: [PATCH net-next v6 06/11] net: pcs: xpcs: add ANRESTART support for SGMII link recovery Date: Tue, 15 Sep 2026 20:37:55 +0800 Message-ID: <20260915123802.1561724-7-coiaprant@gmail.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260915123802.1561724-1-coiaprant@gmail.com> References: <20260915123802.1561724-1-coiaprant@gmail.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.9.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20260915_053917_313257_9443604B X-CRM114-Status: GOOD ( 19.42 ) X-BeenThere: linux-phy@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Linux Phy Mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-phy" Errors-To: linux-phy-bounces+linux-phy=archiver.kernel.org@lists.infradead.org On some hardware using the DesignWare XPCS IP (e.g., RK3568 MAC side SGMII), the PCS does not automatically restart auto-negotiation when the link goes down and comes back up. Without an explicit ANRESTART, the link stays down forever. Add BMCR_ANRESTART in two places: 1. In xpcs_config_aneg_c37_sgmii(), when starting AN, set ANRESTART alongside ANENABLE to initiate a fresh negotiation. 2. In xpcs_get_state_c37_sgmii(), when link is down and AN completion is detected, clear the interrupt and trigger ANRESTART to restart the negotiation process. Propagate the return value of the restart so errors are not silently ignored. Also clear DW_VR_MII_AN_INTR_STS in xpcs_config_aneg_c37_sgmii() before starting AN, matching what xpcs_config_aneg_c37_1000basex() already does. On the non-inband path the function now returns the result of that write instead of the DIG_CTRL1 modify. Update the comment in xpcs_config_aneg_c37_sgmii() to note that although the DesignWare databook says AN restart is not needed for MAC side SGMII, some implementations (e.g. Rockchip RK3568) require it to recover the link after a disconnect. This is not a fix for an existing mainline platform: the affected platform (RK3568 XPCS) is introduced later in the same series. Tested-by: Jiawen Wu Tested-by: Maxime Chevallier Signed-off-by: Coia Prant --- drivers/net/pcs/pcs-xpcs.c | 35 +++++++++++++++++++++++++++++------ 1 file changed, 29 insertions(+), 6 deletions(-) diff --git a/drivers/net/pcs/pcs-xpcs.c b/drivers/net/pcs/pcs-xpcs.c index 0337e2bcc0125..8c3875b6985b9 100644 --- a/drivers/net/pcs/pcs-xpcs.c +++ b/drivers/net/pcs/pcs-xpcs.c @@ -761,7 +761,9 @@ static int xpcs_config_aneg_c37_sgmii(struct dw_xpcs *xpcs, * DW xPCS used with DW EQoS MAC is always MAC side SGMII. * 4) VR_MII_DIG_CTRL1 Bit(9) [MAC_AUTO_SW] = 1b (Automatic * speed/duplex mode change by HW after SGMII AN complete) - * 5) VR_MII_MMD_CTRL Bit(12) [AN_ENABLE] = 1b (Enable SGMII AN) + * 5) VR_MII_AN_INTR_STS = 0x0 (Clear CL37 AN complete status) + * 6) VR_MII_MMD_CTRL Bit(12) [AN_ENABLE] = 1b (Enable SGMII AN) + * VR_MII_MMD_CTRL Bit(9) [AN_RESTART] = 1b (Restart SGMII AN) * * Note that VR_MII_MMD_CTRL is MII_BMCR. * @@ -769,7 +771,14 @@ static int xpcs_config_aneg_c37_sgmii(struct dw_xpcs *xpcs, * SR_MII_AN_ADV. MAC side SGMII receives AN Tx Config from * PHY about the link state change after C28 AN is completed * between PHY and Link Partner. There is also no need to - * trigger AN restart for MAC-side SGMII. + * trigger AN restart for MAC-side SGMII on most devices. + * + * Note: While the DesignWare databook states that AN restart is + * not needed for MAC side SGMII, some implementations (e.g. + * Rockchip RK3568) exhibit a timing quirk when integrated with + * phylink and do not restart AN automatically when the link + * comes back up. An explicit AN restart is required on those + * parts to recover the link after a disconnect. */ mdio_ctrl = xpcs_read(xpcs, MDIO_MMD_VEND2, MII_BMCR); if (mdio_ctrl < 0) @@ -816,9 +825,14 @@ static int xpcs_config_aneg_c37_sgmii(struct dw_xpcs *xpcs, if (ret < 0) return ret; + /* Clear CL37 AN complete status */ + ret = xpcs_write(xpcs, MDIO_MMD_VEND2, DW_VR_MII_AN_INTR_STS, 0); + if (ret < 0) + return ret; + if (neg_mode == PHYLINK_PCS_NEG_INBAND_ENABLED) ret = xpcs_write(xpcs, MDIO_MMD_VEND2, MII_BMCR, - mdio_ctrl | BMCR_ANENABLE); + mdio_ctrl | BMCR_ANENABLE | BMCR_ANRESTART); return ret; } @@ -1093,9 +1107,18 @@ static int xpcs_get_state_c37_sgmii(struct dw_xpcs *xpcs, return 0; } - /* Clear AN complete status or interrupt */ - if (state->an_complete) - xpcs_write(xpcs, MDIO_MMD_VEND2, DW_VR_MII_AN_INTR_STS, 0); + if (state->an_complete) { + /* Clear AN complete status or interrupt */ + ret = xpcs_write(xpcs, MDIO_MMD_VEND2, DW_VR_MII_AN_INTR_STS, 0); + if (ret < 0) + return ret; + + /* Initiate the next round of AN */ + ret = xpcs_modify(xpcs, MDIO_MMD_VEND2, MII_BMCR, BMCR_ANRESTART, + BMCR_ANRESTART); + if (ret < 0) + return ret; + } return 0; } -- 2.47.3 -- linux-phy mailing list linux-phy@lists.infradead.org https://lists.infradead.org/mailman/listinfo/linux-phy From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id F20B3C88E7B for ; Tue, 15 Sep 2026 12:39:52 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=Yjmztt9FS1A5qxNaZfWYg6PvzN0Znz9LRYwH9/qf2Qg=; b=FZQQLEVBz9Ky9swFfF67YOlMLr HCo8feS11Lg1gRd8V1rUp2K0AwoDAyEY3Ix+15oLOf5Haa+RsYMT0vEEIcw6eL2+M7a8v5GPfzIJa oNQnlSKDPsRuwpICN7tFxRjKwPSB9zqNpAQQllW+48nqCbie7L1ScwFVJnLc8uHQNwcq1B66+T2Qt qcs761Z3/msNRDRL3EgAaF7aJReVybdPcksAG4f5wiNHpiZBrP6xBtVhoyOkRuipHNdk6efbpSXMR vDwv3Ar5I36aXoQ3wfGWY51Xp3q93kln4mrKeNy7ZkfpyEDTw5a+txoNKC5WD3tEUqS3ZoU1okXY2 MFGLjY3A==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1x6SRm-00000006YHw-3gpd; Tue, 15 Sep 2026 12:39:38 +0000 Received: from mail-pj2-x03.google.com ([2607:f8b0:4864:39::3]) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1x6SRR-00000006Xbr-1srm for linux-arm-kernel@lists.infradead.org; Tue, 15 Sep 2026 12:39:21 +0000 Received: by mail-pj2-x03.google.com with SMTP id 98e67ed59e1d1-3859292bb51so247645a91.1 for ; Tue, 15 Sep 2026 05:39:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1789475956; x=1790080756; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=Yjmztt9FS1A5qxNaZfWYg6PvzN0Znz9LRYwH9/qf2Qg=; b=kFFOELM0IIPP2w8nU98hUf7NC64kCzK7hgLrXnHJL10AbwtN2/2vLzizLTIzI87lgh Z9EXHtBb3gi9uqVaFoYGPcqbaZmo8gsJlxFbz+l9og1Pk3qL24FvCrgPrD2bqt2D2sea GhO9pHNht+Mlmqe1Rx5qmzqSUBfSSSmijnv/aB39yUq4j8L0kY2Os3lREiUQs4BdEO8m n+NIhqlwGSDsej1KbZ/A4b5KJM3HCUdN6H6kLLhIrPAtEMy9VgmnSoJvhWjrBGDxz/Dw knIjL6bDE/lkWU8rUIrs3L1n3ImyGDCbZwszkXmv7+tV7UJ/UhhqhjT2J98uobYg1rIt I/8A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1789475956; x=1790080756; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=Yjmztt9FS1A5qxNaZfWYg6PvzN0Znz9LRYwH9/qf2Qg=; b=ZvTT5AuyhEUMY3hy0f32dsDK78E5oa+d4HsEqA9sx9x6v3cwA1m8X9ieUXfd4x12Lf HVcRvqMtBIxSYUpXHyo+Uy0BJINrVRQT2JIsjp1+fVP/mQ4Cm+RekxTX/EZQ/K9zynUJ SdMa6ylmBv3jRTUmJB3+rt6NCpPjUZwHSJiwViDUfCf38a+G+2AUZesUuo14U3ocuNbs W4AIdyhmGphx3xKQ20uUTden1FTCFCLI6P6tPj1WrnjMtDg25ORHRzXyr8QvO4dK9I6f YUOkZO+56hENkJhe7L3d4XLQbEJBRjq02zySpWNsjEz/D/LW/UCHoOnJ/ds8Th8DM3MB CGzg== X-Forwarded-Encrypted: i=1; AKwUvByEeTrDj8F5QkyAeehSeFvwQtjsnVW0FauSjBC20p0tMgBhrsnnvXXUNyoWRsMB/wXNCGVJgqDq+/jFhLGRsKpS@lists.infradead.org X-Gm-Message-State: AFuF++lHKjgAglDEr5XCVCUfzdkWzO/bVl88Cx94TWhI+C7p9k86iJD2 u3pjuqTTv7s1LUpdeGpVZ1droa2LyNfYEq8qntwiG+TsfmbFN6MDWTVK X-Gm-Gg: AYBFou2ULkeV1k2FJrYdNQgxxFEM3l8mEhNPy2SoKZsBgFF8K9ax/NIuGu2G8vMVNbR Rruyapn2dK8tjjTjzcuIhcO8sl0TtGy/gJCsnw+56DMvujuu6DrI2GJXcvT14qbWoG7pH8BoOxK Gy3kpyHb+csT/qdR1VzLCLxpSbhLwh0P4yKIWMV+A5Jj2rmYs6F1VddT2ncigQUEdtAnLV6KUXu 9JZlGiTzdXbQzy77SRcwlqgwSV2uDPECP98pRnkFU3UeMDmiXFqs4ts1ZnKscBQDgMTuE4hE2c9 PadnrxYBOycvRo2ATwPOHl6IBQh7VCqggPrubiJeMRq992y4YGdKzts2M8KoFc2/HRlfd9cO3yd Yil1dSEfkGDWWvfvSIPK78FqVH4hZJCaInz+8D/PzGft6sJ1Cr+UEVniGvW2Z4lxjWo+HVqNx2p xLTKLi3ShXLqAfcJs8Tdd9v+fYW4OWYaAaO2B0yGojGS0cRoTYPVHxcOXMT6oSwQOgA5iRiA== X-Received: by 2002:a17:90b:498e:b0:39d:feca:f48d with SMTP id 98e67ed59e1d1-39dfecaf6bfmr3959422a91.3.1789475956259; Tue, 15 Sep 2026 05:39:16 -0700 (PDT) Received: from server.lan ([168.138.199.194]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-39dfdd28acbsm5307259a91.10.2026.09.15.05.39.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 15 Sep 2026 05:39:15 -0700 (PDT) From: Coia Prant To: Andrew Lunn , "David S . Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Heiko Stuebner , Vinod Koul , Maxime Chevallier , Maxime Coquelin , Alexandre Torgue , Lad Prabhakar , Romain Gantois , Heiner Kallweit , Coia Prant Cc: Neil Armstrong , Russell King , Shawn Lin , David Heidelberg , netdev@vger.kernel.org, linux-rockchip@lists.infradead.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-phy@lists.infradead.org, linux-stm32@st-md-mailman.stormreply.com, linux-renesas-soc@vger.kernel.org, Jiawen Wu Subject: [PATCH net-next v6 06/11] net: pcs: xpcs: add ANRESTART support for SGMII link recovery Date: Tue, 15 Sep 2026 20:37:55 +0800 Message-ID: <20260915123802.1561724-7-coiaprant@gmail.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260915123802.1561724-1-coiaprant@gmail.com> References: <20260915123802.1561724-1-coiaprant@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.9.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20260915_053917_603253_EC3FECF9 X-CRM114-Status: GOOD ( 21.05 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org On some hardware using the DesignWare XPCS IP (e.g., RK3568 MAC side SGMII), the PCS does not automatically restart auto-negotiation when the link goes down and comes back up. Without an explicit ANRESTART, the link stays down forever. Add BMCR_ANRESTART in two places: 1. In xpcs_config_aneg_c37_sgmii(), when starting AN, set ANRESTART alongside ANENABLE to initiate a fresh negotiation. 2. In xpcs_get_state_c37_sgmii(), when link is down and AN completion is detected, clear the interrupt and trigger ANRESTART to restart the negotiation process. Propagate the return value of the restart so errors are not silently ignored. Also clear DW_VR_MII_AN_INTR_STS in xpcs_config_aneg_c37_sgmii() before starting AN, matching what xpcs_config_aneg_c37_1000basex() already does. On the non-inband path the function now returns the result of that write instead of the DIG_CTRL1 modify. Update the comment in xpcs_config_aneg_c37_sgmii() to note that although the DesignWare databook says AN restart is not needed for MAC side SGMII, some implementations (e.g. Rockchip RK3568) require it to recover the link after a disconnect. This is not a fix for an existing mainline platform: the affected platform (RK3568 XPCS) is introduced later in the same series. Tested-by: Jiawen Wu Tested-by: Maxime Chevallier Signed-off-by: Coia Prant --- drivers/net/pcs/pcs-xpcs.c | 35 +++++++++++++++++++++++++++++------ 1 file changed, 29 insertions(+), 6 deletions(-) diff --git a/drivers/net/pcs/pcs-xpcs.c b/drivers/net/pcs/pcs-xpcs.c index 0337e2bcc0125..8c3875b6985b9 100644 --- a/drivers/net/pcs/pcs-xpcs.c +++ b/drivers/net/pcs/pcs-xpcs.c @@ -761,7 +761,9 @@ static int xpcs_config_aneg_c37_sgmii(struct dw_xpcs *xpcs, * DW xPCS used with DW EQoS MAC is always MAC side SGMII. * 4) VR_MII_DIG_CTRL1 Bit(9) [MAC_AUTO_SW] = 1b (Automatic * speed/duplex mode change by HW after SGMII AN complete) - * 5) VR_MII_MMD_CTRL Bit(12) [AN_ENABLE] = 1b (Enable SGMII AN) + * 5) VR_MII_AN_INTR_STS = 0x0 (Clear CL37 AN complete status) + * 6) VR_MII_MMD_CTRL Bit(12) [AN_ENABLE] = 1b (Enable SGMII AN) + * VR_MII_MMD_CTRL Bit(9) [AN_RESTART] = 1b (Restart SGMII AN) * * Note that VR_MII_MMD_CTRL is MII_BMCR. * @@ -769,7 +771,14 @@ static int xpcs_config_aneg_c37_sgmii(struct dw_xpcs *xpcs, * SR_MII_AN_ADV. MAC side SGMII receives AN Tx Config from * PHY about the link state change after C28 AN is completed * between PHY and Link Partner. There is also no need to - * trigger AN restart for MAC-side SGMII. + * trigger AN restart for MAC-side SGMII on most devices. + * + * Note: While the DesignWare databook states that AN restart is + * not needed for MAC side SGMII, some implementations (e.g. + * Rockchip RK3568) exhibit a timing quirk when integrated with + * phylink and do not restart AN automatically when the link + * comes back up. An explicit AN restart is required on those + * parts to recover the link after a disconnect. */ mdio_ctrl = xpcs_read(xpcs, MDIO_MMD_VEND2, MII_BMCR); if (mdio_ctrl < 0) @@ -816,9 +825,14 @@ static int xpcs_config_aneg_c37_sgmii(struct dw_xpcs *xpcs, if (ret < 0) return ret; + /* Clear CL37 AN complete status */ + ret = xpcs_write(xpcs, MDIO_MMD_VEND2, DW_VR_MII_AN_INTR_STS, 0); + if (ret < 0) + return ret; + if (neg_mode == PHYLINK_PCS_NEG_INBAND_ENABLED) ret = xpcs_write(xpcs, MDIO_MMD_VEND2, MII_BMCR, - mdio_ctrl | BMCR_ANENABLE); + mdio_ctrl | BMCR_ANENABLE | BMCR_ANRESTART); return ret; } @@ -1093,9 +1107,18 @@ static int xpcs_get_state_c37_sgmii(struct dw_xpcs *xpcs, return 0; } - /* Clear AN complete status or interrupt */ - if (state->an_complete) - xpcs_write(xpcs, MDIO_MMD_VEND2, DW_VR_MII_AN_INTR_STS, 0); + if (state->an_complete) { + /* Clear AN complete status or interrupt */ + ret = xpcs_write(xpcs, MDIO_MMD_VEND2, DW_VR_MII_AN_INTR_STS, 0); + if (ret < 0) + return ret; + + /* Initiate the next round of AN */ + ret = xpcs_modify(xpcs, MDIO_MMD_VEND2, MII_BMCR, BMCR_ANRESTART, + BMCR_ANRESTART); + if (ret < 0) + return ret; + } return 0; } -- 2.47.3 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id E23E8C88E53 for ; Tue, 15 Sep 2026 12:39:30 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=uDjfqMRCEUO4zz5G3LhF/esDwZ5UCLIVBtz698gg+1Q=; b=Ogd1r838XTsVjn 0NgquX9Uv/YnJCYA9Pwk6T5N4OxSdcGQ9HM/qbYKshVvlvP8jejjQY0/FdGlTj+fGLx65Cq/rkBHz sSnasY1ytuziDZgG2mhlidywAjO6ZPylCNyTbosMsN9aWEOCRg2aWklWvSNtrpfAYHdIkYvoZWbmj hZHZL2i1FH3laePKw39P2mpi3X8L/RiSUf33Q33Uz2bIzsirGMgi9v2VWZmmsdAFI5C+9XGjA08o1 BqVnH+h6dQwAIgGd/AKmvAbw/jwOoUvQeaORQW8jjUPTdjs1DifWP6nA98c5J7XIyKpX6pOC5qgLL E0QCVP7SYoSrDvBa/sEg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1x6SRc-00000006Y0V-1uZU; Tue, 15 Sep 2026 12:39:28 +0000 Received: from mail-pj2-x03.google.com ([2607:f8b0:4864:39::3]) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1x6SRR-00000006Xbq-1tpS for linux-rockchip@lists.infradead.org; Tue, 15 Sep 2026 12:39:21 +0000 Received: by mail-pj2-x03.google.com with SMTP id 98e67ed59e1d1-3859292bb51so247642a91.1 for ; Tue, 15 Sep 2026 05:39:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1789475956; x=1790080756; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=Yjmztt9FS1A5qxNaZfWYg6PvzN0Znz9LRYwH9/qf2Qg=; b=kFFOELM0IIPP2w8nU98hUf7NC64kCzK7hgLrXnHJL10AbwtN2/2vLzizLTIzI87lgh Z9EXHtBb3gi9uqVaFoYGPcqbaZmo8gsJlxFbz+l9og1Pk3qL24FvCrgPrD2bqt2D2sea GhO9pHNht+Mlmqe1Rx5qmzqSUBfSSSmijnv/aB39yUq4j8L0kY2Os3lREiUQs4BdEO8m n+NIhqlwGSDsej1KbZ/A4b5KJM3HCUdN6H6kLLhIrPAtEMy9VgmnSoJvhWjrBGDxz/Dw knIjL6bDE/lkWU8rUIrs3L1n3ImyGDCbZwszkXmv7+tV7UJ/UhhqhjT2J98uobYg1rIt I/8A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1789475956; x=1790080756; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=Yjmztt9FS1A5qxNaZfWYg6PvzN0Znz9LRYwH9/qf2Qg=; b=o+Jwr6G7mibpFxSXOGUko65ICLASELFLOsdIyd1RHgSqu4IquO1pOq0NHlbCDXHCjt 3lm6q4ykZbPKY5eX1Aq+8lcXYBtSyTEhtEFnpD70VUITB9e51qzhXPRaSZhJ8yKjoadu Rw7c2ToAfrv+m19FuMm0QfuvC5i6B6216Kx5L5IDRbEyjC0WyeLkNkh18R53/dFAp/58 ZJS/y33r/LAn7ChKkWPyNwHp65XvMnTGESnEcNeFtfEuZnp3ot3+l0BrsJEuEZv1ONwV zOFNJoN376yeZ6NvFI+9RpovuP3RtMo5L5L3Fw3qPQuudw9nUP0mZJ4bVHnsd0PN3Lf7 4mwA== X-Forwarded-Encrypted: i=1; AKwUvBy3As6IzxdD8hbsT6XzDBWTLk/ElqpcVPYLvJ4jE8X7UV3Y9Iw1rzsHLGzv8+e5mVt84Clc2595zsrBZgz/oA==@lists.infradead.org X-Gm-Message-State: AFuF++kQFU3tB+sAZKI03eKXAmTwB/Ca482+D7S7N8QCIgw0EHIH1BoZ 8ZD3UnHFScgEKR3sQ+3VUliY5Ny+v/LkTeuKTKFB/o6mRIeUB/qMthAx X-Gm-Gg: AYBFou1Ogo7Ha8t5xryDDN3ICuEx8UDU70hy1A6unCd79zT+rC6JxHmj12eC2vs00Ja ZiI0ObJmJ5QD0bS9Si29vbAXiorhblaUikMRYmYlW8dLnXoIg/lqN0db2s36CRrgZrLASDZgPU2 R9/pOsIUvky+3FD7TZW27RoTgzHKFXT4odiS6vRLKyHIBhrKpqZmuwA9in1ekXf+XvGUzVBzyQK 7OMN8tngJ9/CL2swggaJZGOtkWAoIuVQK28xEvqjvUXQ2lf5vGqsaI2uu3FjMd74rr41x8NS79I UCPle9KagurekFknXJOUq2NS0CZgIJSdIaRXVn+2B9KTDdrjdE3sIovE7uP55Yvrqt70KkzvY1v wBUAbJp6iHJ9IlGPq+xJEnRdNFlehbfWncFTJd4J3FjOJ46R9+R1xYOVzl/u1bpdi8jszq/wR6S psc7QSYrD+z3jH4Jq5FwNLC6jaJoHMZESuYGPSceIpaPFVxkIJFx8xRftP79pu1hT2D7te3g== X-Received: by 2002:a17:90b:498e:b0:39d:feca:f48d with SMTP id 98e67ed59e1d1-39dfecaf6bfmr3959422a91.3.1789475956259; Tue, 15 Sep 2026 05:39:16 -0700 (PDT) Received: from server.lan ([168.138.199.194]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-39dfdd28acbsm5307259a91.10.2026.09.15.05.39.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 15 Sep 2026 05:39:15 -0700 (PDT) From: Coia Prant To: Andrew Lunn , "David S . Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Heiko Stuebner , Vinod Koul , Maxime Chevallier , Maxime Coquelin , Alexandre Torgue , Lad Prabhakar , Romain Gantois , Heiner Kallweit , Coia Prant Cc: Neil Armstrong , Russell King , Shawn Lin , David Heidelberg , netdev@vger.kernel.org, linux-rockchip@lists.infradead.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-phy@lists.infradead.org, linux-stm32@st-md-mailman.stormreply.com, linux-renesas-soc@vger.kernel.org, Jiawen Wu Subject: [PATCH net-next v6 06/11] net: pcs: xpcs: add ANRESTART support for SGMII link recovery Date: Tue, 15 Sep 2026 20:37:55 +0800 Message-ID: <20260915123802.1561724-7-coiaprant@gmail.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260915123802.1561724-1-coiaprant@gmail.com> References: <20260915123802.1561724-1-coiaprant@gmail.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.9.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20260915_053917_619620_55BAF003 X-CRM114-Status: GOOD ( 19.63 ) X-BeenThere: linux-rockchip@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Upstream kernel work for Rockchip platforms List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "Linux-rockchip" Errors-To: linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org On some hardware using the DesignWare XPCS IP (e.g., RK3568 MAC side SGMII), the PCS does not automatically restart auto-negotiation when the link goes down and comes back up. Without an explicit ANRESTART, the link stays down forever. Add BMCR_ANRESTART in two places: 1. In xpcs_config_aneg_c37_sgmii(), when starting AN, set ANRESTART alongside ANENABLE to initiate a fresh negotiation. 2. In xpcs_get_state_c37_sgmii(), when link is down and AN completion is detected, clear the interrupt and trigger ANRESTART to restart the negotiation process. Propagate the return value of the restart so errors are not silently ignored. Also clear DW_VR_MII_AN_INTR_STS in xpcs_config_aneg_c37_sgmii() before starting AN, matching what xpcs_config_aneg_c37_1000basex() already does. On the non-inband path the function now returns the result of that write instead of the DIG_CTRL1 modify. Update the comment in xpcs_config_aneg_c37_sgmii() to note that although the DesignWare databook says AN restart is not needed for MAC side SGMII, some implementations (e.g. Rockchip RK3568) require it to recover the link after a disconnect. This is not a fix for an existing mainline platform: the affected platform (RK3568 XPCS) is introduced later in the same series. Tested-by: Jiawen Wu Tested-by: Maxime Chevallier Signed-off-by: Coia Prant --- drivers/net/pcs/pcs-xpcs.c | 35 +++++++++++++++++++++++++++++------ 1 file changed, 29 insertions(+), 6 deletions(-) diff --git a/drivers/net/pcs/pcs-xpcs.c b/drivers/net/pcs/pcs-xpcs.c index 0337e2bcc0125..8c3875b6985b9 100644 --- a/drivers/net/pcs/pcs-xpcs.c +++ b/drivers/net/pcs/pcs-xpcs.c @@ -761,7 +761,9 @@ static int xpcs_config_aneg_c37_sgmii(struct dw_xpcs *xpcs, * DW xPCS used with DW EQoS MAC is always MAC side SGMII. * 4) VR_MII_DIG_CTRL1 Bit(9) [MAC_AUTO_SW] = 1b (Automatic * speed/duplex mode change by HW after SGMII AN complete) - * 5) VR_MII_MMD_CTRL Bit(12) [AN_ENABLE] = 1b (Enable SGMII AN) + * 5) VR_MII_AN_INTR_STS = 0x0 (Clear CL37 AN complete status) + * 6) VR_MII_MMD_CTRL Bit(12) [AN_ENABLE] = 1b (Enable SGMII AN) + * VR_MII_MMD_CTRL Bit(9) [AN_RESTART] = 1b (Restart SGMII AN) * * Note that VR_MII_MMD_CTRL is MII_BMCR. * @@ -769,7 +771,14 @@ static int xpcs_config_aneg_c37_sgmii(struct dw_xpcs *xpcs, * SR_MII_AN_ADV. MAC side SGMII receives AN Tx Config from * PHY about the link state change after C28 AN is completed * between PHY and Link Partner. There is also no need to - * trigger AN restart for MAC-side SGMII. + * trigger AN restart for MAC-side SGMII on most devices. + * + * Note: While the DesignWare databook states that AN restart is + * not needed for MAC side SGMII, some implementations (e.g. + * Rockchip RK3568) exhibit a timing quirk when integrated with + * phylink and do not restart AN automatically when the link + * comes back up. An explicit AN restart is required on those + * parts to recover the link after a disconnect. */ mdio_ctrl = xpcs_read(xpcs, MDIO_MMD_VEND2, MII_BMCR); if (mdio_ctrl < 0) @@ -816,9 +825,14 @@ static int xpcs_config_aneg_c37_sgmii(struct dw_xpcs *xpcs, if (ret < 0) return ret; + /* Clear CL37 AN complete status */ + ret = xpcs_write(xpcs, MDIO_MMD_VEND2, DW_VR_MII_AN_INTR_STS, 0); + if (ret < 0) + return ret; + if (neg_mode == PHYLINK_PCS_NEG_INBAND_ENABLED) ret = xpcs_write(xpcs, MDIO_MMD_VEND2, MII_BMCR, - mdio_ctrl | BMCR_ANENABLE); + mdio_ctrl | BMCR_ANENABLE | BMCR_ANRESTART); return ret; } @@ -1093,9 +1107,18 @@ static int xpcs_get_state_c37_sgmii(struct dw_xpcs *xpcs, return 0; } - /* Clear AN complete status or interrupt */ - if (state->an_complete) - xpcs_write(xpcs, MDIO_MMD_VEND2, DW_VR_MII_AN_INTR_STS, 0); + if (state->an_complete) { + /* Clear AN complete status or interrupt */ + ret = xpcs_write(xpcs, MDIO_MMD_VEND2, DW_VR_MII_AN_INTR_STS, 0); + if (ret < 0) + return ret; + + /* Initiate the next round of AN */ + ret = xpcs_modify(xpcs, MDIO_MMD_VEND2, MII_BMCR, BMCR_ANRESTART, + BMCR_ANRESTART); + if (ret < 0) + return ret; + } return 0; } -- 2.47.3 _______________________________________________ Linux-rockchip mailing list Linux-rockchip@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-rockchip