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 137CBC88E72 for ; Thu, 17 Sep 2026 20:48:15 +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=s/eBjsMbUu4KmQPd6dfybXXRKRWzlAuXWPZqO5pNdlA=; b=I6MBq2nv/i2D4J0KKWbtmsehSu hQPLnr+NRfZA494Ki1Suyr5sC6jkVJjH7HvJOEpF+vhW1SYZLMOGpnZ/taItgvpS/DKZGhGApyad5 qdRIW0Ho2YDMkWayFAXb0GW7dgk4fuz9qdGjj3gAiX4B/TCvmLU3VTRsoTv4lKy6PDOYEq+xh3jsJ s/Mwp7LYZgfSTQNUNSHPdDF5JvWDSWF5/kc+mmJLBj4OSew/0EpviGXltZ7f6ydG7dxlIVU1qn497 jzxRWK16YCMt8GkOeBSQJ8ZltD7b4JPbac0Iylswk/54ecnsiYzIIhw1DWkLIiD95fR3au/9mb6v4 sd3jvsqA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1x7J1a-0000000CTAs-3Ai5; Thu, 17 Sep 2026 20:48:06 +0000 Received: from mail-pj2-x0b.google.com ([2607:f8b0:4864:39::b]) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1x7J1U-0000000CT5A-1TTw for linux-arm-kernel@lists.infradead.org; Thu, 17 Sep 2026 20:48:04 +0000 Received: by mail-pj2-x0b.google.com with SMTP id 98e67ed59e1d1-39569e136f9so64918a91.0 for ; Thu, 17 Sep 2026 13:48:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1789678080; x=1790282880; 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=s/eBjsMbUu4KmQPd6dfybXXRKRWzlAuXWPZqO5pNdlA=; b=NOUcx1jTo5AAVU0+kMLcfcCJ/UzuQa9G0J1PXfZQxoe3/4UUer2t2AZq+mFlus3unD NAf4axxVtP3i/pjcf1kjI39wsb9vJfPJP6+uFf0yNEX/0NZbpThbWBMhzYgmMPzxg/ix J4HshZF6orWtu6wBy6VqGEs038kLEsUy5UcvxoWH5YbWvt0kyLKgjf1WccePDEIItwF+ WWeer3HbMRUNOq5wOJ4jnNh6UxM3CVKMWg+CJN+qQSc4lpKaqPbUHkEc9eIilhRp5MLx 7EhEDHdpczH6ysyjLJfR9ZGKdOwelvq8wwVp5V5l6TyZEZqiRfP3Pf+mHzbLYOHd2rtu urCA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1789678080; x=1790282880; 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=s/eBjsMbUu4KmQPd6dfybXXRKRWzlAuXWPZqO5pNdlA=; b=jgbX2+EofmAQVqQhTEPefVde+yl8ye6+8AR2bnJU+j128z5sfnMho+zJDAsXgNiXqz d5HVUY5evirAfJfwsAlLgrqx9QZjlmB5ilZ5syAt1heuewnruqryoVHg4Bfbszdpx264 NhSbSDBwKJc8swcjJa967SKYvb/uS5EbW+ZArWWCoLRrTz2XflJuT2ZNC/u467phB8Xs q/0wmdOQMmY6MqzZdoq5xjggZVC7bfs48a5k9/OqGUUlwSiFq1RJrqzjwhS7IP04xixu hlip6wmQqLH5HlJWB3ycn3eabAO1TbB38b+LMC1FwXjBqfxdtyGAlTSHzUyQhrqtxMD3 KHkg== X-Forwarded-Encrypted: i=1; AKwUvByzwB3XZsR0xC/9elQLI7p7SPgtRthTqRjDBizXocVZZkzwrX1YEe8RLHW9WRCEaQ54ovwD48mLYoqCPwZk0E5p@lists.infradead.org X-Gm-Message-State: AFuF++ldDd94S72GT+9IABHnCW8hgEUXY/yqiPQN609e+JxXUOqWfzQL aNbJBj7io5KDF7eJAIdqpDfdZ8liyizBT33QMg44M2UIcLflHchgiFr4 X-Gm-Gg: AYBFou1gwpAtNDs9+grtyQmCdNVTuUVxa8CncZrOA8cks44Z6dmfFB5XxlHjvMrzVYw sS0I5354HwTlGP7i+pHTCVh4aPuf4nQ0AQazTWSUTyfVIiRFsJehmWKyIFN0HVkiHn5oo4jSsOQ 6yNFlmSfrH6HOAYN8ETLazkozIEFbY7xdkyx0ZjYze4LgjH0QgECABVif7O/indaYSGpFzzdmlH kOCjHDwovbrJth0Ffm60HSCNx/QUthqgMAaGNXRs8CWeJS/p8kybBej5I9XQoucLNzZGCk5q/q3 K+CLx3QwLn4TsniyKg5qMl7Kn5Dg8zW6JOTvwL8UiI2PgN1iSFoCPP3NGgggyxB9QQFonze5cvh A0PbYKz25JqVofQDky4d8p/2+5HqUsjU68RAZVrte6He0T+KySnXRLLkj3pLvgpB6owF0SBE1gD Yt1hmHa8tCx6S2PUOYWOCrplqs7/Xc2cuoIlH+dViyii5vG7K4QszyZMD/bb8KoGyC/PG+94k= X-Received: by 2002:a17:90b:3147:b0:39d:eda6:8a0b with SMTP id 98e67ed59e1d1-39e54c9ccdemr697045a91.21.1789678079561; Thu, 17 Sep 2026 13:47:59 -0700 (PDT) Received: from server.lan ([168.138.199.194]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-39e50a4bc22sm1232196a91.17.2026.09.17.13.47.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 17 Sep 2026 13:47:58 -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 v7 06/11] net: pcs: xpcs: add ANRESTART support for SGMII link recovery Date: Fri, 18 Sep 2026 04:46:17 +0800 Message-ID: <20260917204624.2427486-7-coiaprant@gmail.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260917204624.2427486-1-coiaprant@gmail.com> References: <20260917204624.2427486-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-20260917_134800_436149_5D7DBD8D X-CRM114-Status: GOOD ( 22.17 ) 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. The restart cannot go through the .pcs_an_restart op: phylink only calls it for 802.3z interfaces, and SGMII is not one. Changing hardware state from pcs_get_state() is already done elsewhere in this driver (xpcs_get_state_c73() calls xpcs_soft_reset() and xpcs_do_config()), so the same pattern is used here. The latch is cleared before issuing the restart, not after: clearing it afterwards would discard a freshly latched ANCMPLT from the new negotiation. If an MDIO access fails at this point, it indicates an unrecoverable hardware condition until reset. 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 44FE3C88E72 for ; Thu, 17 Sep 2026 20:48:07 +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=/oQpvm+CvnSeBaGbnMf9s9toYpNviDw0fJEDmeEumn4=; b=FSQ4BWkpjfYfNv zcZQVJHZcZQJfwgySB/p4N2+mC87ZH/ZUz8ztoNK2lSSVU6ynyLaLq10nq4F/5JMtwlUZSu2eUVY2 m4Lt++1tZr//L+t1OU/SZrunpdG3Zo53y07xzwJn1JjM8vlCQhU3WuxyrYz63saEWWTLs/zVwGp/T 7/QTizdHthxxUCU3uvaediA+htCjVyg9G4I5BHrAbTERRcd8ldEYFlxWAXQJGv+cJhxpr9pAwGvfi Aqr4L1uR8GWrX7CVOLxPgGdDXBuNaH7t4lfdJASXdyy0HFD3Q2GD98mFGfFvkeQ2CKuRBkgp7EABx NmtYYsXxjMCxMKtQ/Avg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1x7J1a-0000000CTBA-3t5r; Thu, 17 Sep 2026 20:48:06 +0000 Received: from mail-pj2-x07.google.com ([2607:f8b0:4864:39::7]) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1x7J1U-0000000CT5B-2BJz for linux-phy@lists.infradead.org; Thu, 17 Sep 2026 20:48:06 +0000 Received: by mail-pj2-x07.google.com with SMTP id 98e67ed59e1d1-398e10200a6so44220a91.1 for ; Thu, 17 Sep 2026 13:48:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1789678080; x=1790282880; 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=s/eBjsMbUu4KmQPd6dfybXXRKRWzlAuXWPZqO5pNdlA=; b=NOUcx1jTo5AAVU0+kMLcfcCJ/UzuQa9G0J1PXfZQxoe3/4UUer2t2AZq+mFlus3unD NAf4axxVtP3i/pjcf1kjI39wsb9vJfPJP6+uFf0yNEX/0NZbpThbWBMhzYgmMPzxg/ix J4HshZF6orWtu6wBy6VqGEs038kLEsUy5UcvxoWH5YbWvt0kyLKgjf1WccePDEIItwF+ WWeer3HbMRUNOq5wOJ4jnNh6UxM3CVKMWg+CJN+qQSc4lpKaqPbUHkEc9eIilhRp5MLx 7EhEDHdpczH6ysyjLJfR9ZGKdOwelvq8wwVp5V5l6TyZEZqiRfP3Pf+mHzbLYOHd2rtu urCA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1789678080; x=1790282880; 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=s/eBjsMbUu4KmQPd6dfybXXRKRWzlAuXWPZqO5pNdlA=; b=06LGvH4mS1WKY0MNUJwt8a/sT42na+uiIvE3WeMgDnc8dVy0LzRCccaiW0V1Fi91/+ QAtYMAHz7Do+fhNWhMtEaTEbBc8M8MLlhEd134a1oGv3vioRhTvppHxIPXr8WfL9QWe/ 9K8B6diTXOfB1ljsaMkFt9E2IO2bKvGnLAYAor/4VUWtXw5Ww9RIk71UlxK/yZtgK7dN RNvMAn8CfWwmgspsPsTNf28QfAm2ZPhppQoSsTAjnu/5+OZm8UdSvLe5Hh7NI6d243WW ehCJSyeno6oZvnwNa2BTtfhe9W2zg3SMAwxUsX8RUwMzn002Mf1TWmapqJCQtHGoQr57 LWng== X-Forwarded-Encrypted: i=1; AKwUvBwsAIXryzWdF9zhulV7+jRBka0eNjsLSEcu5++dw508nrALlNSAkEJaMLJDvg9fqzm1AWyu64n90Sc=@lists.infradead.org X-Gm-Message-State: AFuF++nKInN9iXLT4YIrjrdWBSPdy8Dp4nFy4AUkG2UABwoWej2Mcn81 o4+XF2Av1xOiO6CGWWzInsxtzCvVEF/m2YEgvSPfkSXtEQcQxU2b0ASK X-Gm-Gg: AYBFou2MZ35b6U4p/fapjAaorUweEMMe/KuJs5CTasCgt/Q12idQ3/l/8xh7WjiO7+V R3XJ4neZb4ZSnPKUUTz7DpUgliZZVnL5fJHY5fjx0zH+4Q2ssU24RzJ1IOMhAe0xwYL6l+xW/ss lbYQjZYw5P0uFgMwRP0DSm0cjuxS1CSdpKv3nF8/ML2aOZbnfPn0mtHPkT8YtzUwcrYjSxWfD9M 1+Po2aTNYcMAjDtR6t38O7ZZmOQDp+c/Iu3gRkNzbW6L4EbyParrTq/2CTnX41ZoYr2kJXt4U/o NrCdz2/8vT/HOZAHnVOJQDyi/9/3YfnZMUG979ydFUfm2QoRzVWIxtNM0FahuVP7I072krb+nUK bMHL2dFU/kGsVduVk+qP+6o/VIWO+cjgwdoLyHcIQ8c8aJz5jF4089xN7kBW9PnELxcr7HiUOoG zsHlcI1u+KDIEnQUCuZtqDFAERGaft1ixojn53vLQkFUsgzLODhOUwYla15q8d4Ne5l2LyFBQ= X-Received: by 2002:a17:90b:3147:b0:39d:eda6:8a0b with SMTP id 98e67ed59e1d1-39e54c9ccdemr697045a91.21.1789678079561; Thu, 17 Sep 2026 13:47:59 -0700 (PDT) Received: from server.lan ([168.138.199.194]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-39e50a4bc22sm1232196a91.17.2026.09.17.13.47.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 17 Sep 2026 13:47:58 -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 v7 06/11] net: pcs: xpcs: add ANRESTART support for SGMII link recovery Date: Fri, 18 Sep 2026 04:46:17 +0800 Message-ID: <20260917204624.2427486-7-coiaprant@gmail.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260917204624.2427486-1-coiaprant@gmail.com> References: <20260917204624.2427486-1-coiaprant@gmail.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.9.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20260917_134800_588823_7DC8D516 X-CRM114-Status: GOOD ( 20.91 ) 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. The restart cannot go through the .pcs_an_restart op: phylink only calls it for 802.3z interfaces, and SGMII is not one. Changing hardware state from pcs_get_state() is already done elsewhere in this driver (xpcs_get_state_c73() calls xpcs_soft_reset() and xpcs_do_config()), so the same pattern is used here. The latch is cleared before issuing the restart, not after: clearing it afterwards would discard a freshly latched ANCMPLT from the new negotiation. If an MDIO access fails at this point, it indicates an unrecoverable hardware condition until reset. 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 BFDA8C88E72 for ; Thu, 17 Sep 2026 20:48:10 +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=nYXlDMXNZIXCCvZlS20iMVsm/Rz+zXikhStSbs3GIc8=; b=gUltL+dGcyEl3t m1W6XMkLAr0uETqKO71gvLMQh6d/+L8/qHOoCQ5JYLbgzzwNMTF+K2K/vELgfHtFFPEIG1wyI01Cz XGoVdB5n2i47u8WQi8sJRYlNhWsY/7a5OjlithTjouic3uZKXyPuHvKZtXN7Xzfw+5YRWYc98dMdz eSSxk+eoBAqQTfsdvYwzj6mKSoJvJPPIRy6AchmAol16S/PrZB18TYgoiFc99F6ubjAP2KUi5W1Ht NdLwHMUcWzL7SxLLZsr6oAbkG7PNEyVqFDcl1AMUJdAD+hw9jXiJ0U6RmRV775H3ts52VACXItIIF ybppR5osxRb+Iqp9IVDA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1x7J1c-0000000CTCf-0ytl; Thu, 17 Sep 2026 20:48:08 +0000 Received: from mail-pj2-x0b.google.com ([2607:f8b0:4864:39::b]) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1x7J1U-0000000CT59-1YL3 for linux-rockchip@lists.infradead.org; Thu, 17 Sep 2026 20:48:06 +0000 Received: by mail-pj2-x0b.google.com with SMTP id 98e67ed59e1d1-39569e136f9so64917a91.0 for ; Thu, 17 Sep 2026 13:48:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1789678080; x=1790282880; 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=s/eBjsMbUu4KmQPd6dfybXXRKRWzlAuXWPZqO5pNdlA=; b=NOUcx1jTo5AAVU0+kMLcfcCJ/UzuQa9G0J1PXfZQxoe3/4UUer2t2AZq+mFlus3unD NAf4axxVtP3i/pjcf1kjI39wsb9vJfPJP6+uFf0yNEX/0NZbpThbWBMhzYgmMPzxg/ix J4HshZF6orWtu6wBy6VqGEs038kLEsUy5UcvxoWH5YbWvt0kyLKgjf1WccePDEIItwF+ WWeer3HbMRUNOq5wOJ4jnNh6UxM3CVKMWg+CJN+qQSc4lpKaqPbUHkEc9eIilhRp5MLx 7EhEDHdpczH6ysyjLJfR9ZGKdOwelvq8wwVp5V5l6TyZEZqiRfP3Pf+mHzbLYOHd2rtu urCA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1789678080; x=1790282880; 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=s/eBjsMbUu4KmQPd6dfybXXRKRWzlAuXWPZqO5pNdlA=; b=rwUmK/lcTOEyk/4WwZ9Bd0v2Vjmwau/MbdyITrRwU5dvxfawg/jN1j9cDjGH9jQGli eNwiXYLOJW5B8xyJ+IGaOxXhpeAWxMyEB5bMMWf9CG4pexCAuGB/FUwy9WgJOMSjFUgU +bLoanpbLtxCoeWFXTt5BLu6w6Ya+dfrpJt08d3/dhL2yu1S4DShGbnIL7693AnKG93S 1aPki50pvuiW2BPehTN9o4ALeIxpDYO3d59CTBjbwH7tA6I9p40hiozClh/NPPpyvTBb XKUuUcTzIRAKiVd8LrIip0QjvXDu2BFD1XTMVtATZ79k4OU8VUw47ixUalyEiLG8g9+v JIBQ== X-Forwarded-Encrypted: i=1; AKwUvByVw2b9AXVPWAZVNNPnVb86Vwvro1ELbajtQQ4f8+Ahs01vtyqc593mF6FKc7cJIz3hJUTRsycBeNqAS1huVQ==@lists.infradead.org X-Gm-Message-State: AFuF++mcglpeI4kBUsIU1n8oG3lIWAjscMhtJf8PjwDmF75bgFMZba/G H6xpVKnCHQDg4OC4sq2X4GzIUCmr6qSJEkkWOKAYqsSBysZMmo6OIGB+GHpgMeAihEK4Ww== X-Gm-Gg: AYBFou0ua1DSNtSaNz7YEpgUNNZ1kp2FrwenPEHmOidJrcIgNkBPG89ZoLaac0vdBN2 cS3L5xr+ELB830mFPHY+/N2rTsioKMvvTq8OnADJgVK4mCAX3pcGMlToXKdFIsiME4IpvK1tcwK vsR9Ek3Whhxldgkts+OswjAUH69LxgwOqHJuBmsWPoQX7262KqlPFAkdf2uUYH1ffcNvGUm1fSM wjX6wnoNOqMjtoxo1nKURHMfhcOruta5NcfidKSWZHvx8DxQQ6FVeuT+rmrinHQz6l7oZMmN6I7 Jemkd4InwjUrVVRWjeme8DdltJXnid5uBqoh1BdxTRuA9Bh6Uv+IIswWSoIaUkK93PjH01wtb8c xK35+SYYsxZrN4lyKqMFTCad01A3yRW3bNoX1DYlO1TY/Nh0Z3FvebORqflkLzN6Js1Y91B1r1c FmTAT126ealivTbtMqWOPXjAAkI5TQeBCLB/srjC+2jixf1TU8v7MusmzmkfPX04HM+v2KA6s= X-Received: by 2002:a17:90b:3147:b0:39d:eda6:8a0b with SMTP id 98e67ed59e1d1-39e54c9ccdemr697045a91.21.1789678079561; Thu, 17 Sep 2026 13:47:59 -0700 (PDT) Received: from server.lan ([168.138.199.194]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-39e50a4bc22sm1232196a91.17.2026.09.17.13.47.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 17 Sep 2026 13:47:58 -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 v7 06/11] net: pcs: xpcs: add ANRESTART support for SGMII link recovery Date: Fri, 18 Sep 2026 04:46:17 +0800 Message-ID: <20260917204624.2427486-7-coiaprant@gmail.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260917204624.2427486-1-coiaprant@gmail.com> References: <20260917204624.2427486-1-coiaprant@gmail.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.9.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20260917_134800_438838_B5651E19 X-CRM114-Status: GOOD ( 21.01 ) 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. The restart cannot go through the .pcs_an_restart op: phylink only calls it for 802.3z interfaces, and SGMII is not one. Changing hardware state from pcs_get_state() is already done elsewhere in this driver (xpcs_get_state_c73() calls xpcs_soft_reset() and xpcs_do_config()), so the same pattern is used here. The latch is cleared before issuing the restart, not after: clearing it afterwards would discard a freshly latched ANCMPLT from the new negotiation. If an MDIO access fails at this point, it indicates an unrecoverable hardware condition until reset. 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