Received: by 2002:a05:7412:e794:b0:fa:551:50a7 with SMTP id o20csp577390rdd; Tue, 9 Jan 2024 12:53:14 -0800 (PST) X-Google-Smtp-Source: AGHT+IGbP28JjIqaCcwncl9BFv6W0s3XjjVIa8WxJH1wYG+OTrovokCVHUjVGBaW69I941ypeR7a X-Received: by 2002:a05:6870:b012:b0:205:c935:9378 with SMTP id y18-20020a056870b01200b00205c9359378mr71152oae.68.1704833593904; Tue, 09 Jan 2024 12:53:13 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1704833593; cv=none; d=google.com; s=arc-20160816; b=HMXuP/WLLiLbaFK+A5SmweCoGCK7HYxMDNdwDJaNAL1t5Y/7JlqNmH/l13luK067cZ eWJhgTVHm3lwIircSlWHEmD4NSxknDAGmLZYzvFHyBdcwX7nX7I6P5aQduKn6xSRdtUz gaIGDqcmh4watrX9ogwveVKY3idlLM0nOZx3qwi1SLo6+X13vxYixTnlm2Knwl8lvZFV PrHRWB6VmfdkKnGUPhfhjczwZGydeeni4Pwghb05zh3uL1LK0+4xSmflkHr9wmPnCmTy 4nAU5+N8hNFHXilHYenDDWs/EKW4quWunAbtsQgG56dA2rZGVjDpvymJ2E022TX5kjl1 P3nQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:message-id:date:subject:cc:to :from:dkim-signature; bh=nAIjW3Vd6AO7npgt9Xb/HqJrmYFkWeDl3YQgZw/BnJA=; fh=jBEbAODqrgdKK1JxuHCSX8HOPapmLla0AeCIag1F1oE=; b=DAmCO9Y9aq+9bSCuQABEEnfumm0wPWNjaha0lVY1g+xcOFFVLtfMaCJgGZmvyq6IPH yXTQD30HzYX/LoqtAyvGHsKSeTeN2Kc8uDsCGBE7Eu0ppwqjGroNolimkrxCXAq6YI0v FXg3Bt/wSi3Vuh0oP830SS7zAQQy9xNEf3JBK/t38uUPwwV7C4OYlogeWUSLvvvV/run ms/s+3pr760Oyt9GgwRu2JrCAZjesoQ6Pd6g+1GUsRsQhxH4YIgiP9mYpChZDfANx6qx w/CuzKnAqNo4GRVkOGmPYDrzbRCm5DZWPjNAoyEK+M8NbwG0hrF6H37mU0LAmqYS+TgT M8Mg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@sang-engineering.com header.s=k1 header.b="aoRbrk/G"; spf=pass (google.com: domain of linux-kernel+bounces-21402-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:40f1:3f00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-21402-linux.lists.archive=gmail.com@vger.kernel.org" Return-Path: Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org. [2604:1380:40f1:3f00::1]) by mx.google.com with ESMTPS id w70-20020a638249000000b005c65aafd65fsi2200085pgd.93.2024.01.09.12.53.13 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 09 Jan 2024 12:53:13 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-21402-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:40f1:3f00::1 as permitted sender) client-ip=2604:1380:40f1:3f00::1; Authentication-Results: mx.google.com; dkim=pass header.i=@sang-engineering.com header.s=k1 header.b="aoRbrk/G"; spf=pass (google.com: domain of linux-kernel+bounces-21402-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:40f1:3f00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-21402-linux.lists.archive=gmail.com@vger.kernel.org" Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sy.mirrors.kernel.org (Postfix) with ESMTPS id 6C740B246A1 for ; Tue, 9 Jan 2024 20:53:12 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 4C28E3D99D; Tue, 9 Jan 2024 20:53:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=sang-engineering.com header.i=@sang-engineering.com header.b="aoRbrk/G" Received: from mail.zeus03.de (www.zeus03.de [194.117.254.33]) (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 1CA253D0B9 for ; Tue, 9 Jan 2024 20:52:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=sang-engineering.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=sang-engineering.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= sang-engineering.com; h=from:to:cc:subject:date:message-id :mime-version:content-transfer-encoding; s=k1; bh=nAIjW3Vd6AO7np gt9Xb/HqJrmYFkWeDl3YQgZw/BnJA=; b=aoRbrk/G0kEMU3fMqSP/zuBGxnipqQ W/IL/0pu0zKEh5gwSrc2625INKWMeAdvM0BCmicDgZkqT3l+FOGPeNwdU4Paw4cJ FCWb6LG2qB2FiCHDinX3nkuJ5VXk64DDa44Rfr3kTw+GDaXvtTPHBk2VQhuSRgCW rHr6S4uRQ9fggP+cWqWU7BGb4d1HbYj5CXn345uOHizdf26IMVFlwAKNZAwXUT5b vXauhpOxhixgq0zt62ge8Az5TABXH90s8QTQDrRFWP+sal4V3FKBhJE7N9ccYd3x BqRbakLoAeT0c1ILGMmOZJ4TMKw8I6niTxRbs9Xybfr5HiIfMMG32QHQ== Received: (qmail 354471 invoked from network); 9 Jan 2024 21:52:45 +0100 Received: by mail.zeus03.de with ESMTPSA (TLS_AES_256_GCM_SHA384 encrypted, authenticated); 9 Jan 2024 21:52:45 +0100 X-UD-Smtp-Session: l3s3148p1@Ly0Of4kOTpRehhrQ From: Wolfram Sang To: linux-renesas-soc@vger.kernel.org Cc: netdev@vger.kernel.org, Philippe Schenker , Francesco Dolcini , Wolfram Sang , Andrew Lunn , Heiner Kallweit , Russell King , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , linux-kernel@vger.kernel.org Subject: [RFC PATCH] net: phy: micrel: reset KSZ9x31 when resuming Date: Tue, 9 Jan 2024 21:52:22 +0100 Message-Id: <20240109205223.40219-1-wsa+renesas@sang-engineering.com> X-Mailer: git-send-email 2.39.2 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit On a Renesas Ebisu board, the KSZ9031 PHY is stalled after resuming if the interface has not been brought up before suspending. If it had been brought up before, phylib ensures that reset is asserted before suspending. But if it had never been brought up, there is no instance which could ensure that reset is asserted. And upon resume, the PHY is in an unknown state without reset being asserted. To bring it back to a known state, simply reset it when it is about to be resumed. This likely also helps another issue [1] where a KSZ9131 can be powered using regulators. After switching power on again in resume, a reset is also needed. [1] https://patchwork.kernel.org/project/netdevbpf/patch/20211214121638.138784-4-philippe.schenker@toradex.com/ Signed-off-by: Wolfram Sang --- This is a different solution to a problem I already tried to solve here[2]. Back then, I added code to the MAC, but I now believe it should be solved on PHY level. We never saw the problem with other PHYs. Looking at [1], it seems that KSZ9x31 is also sensitive to being powered down without reset being asserted. I know it is not a perfect proof, but I guess these assumptions are all we have. Philippe, Francesco: do you still have access to machines with this issue? Could you kindly test if so? Patch is based on 6.7. Looking forward for comments if this is the correct layer to tackle the problem. Thanks! [2] https://lore.kernel.org/all/20230321103357.18940-1-wsa+renesas@sang-engineering.com/ drivers/net/phy/micrel.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/drivers/net/phy/micrel.c b/drivers/net/phy/micrel.c index 08e3915001c3..c38d7982c06c 100644 --- a/drivers/net/phy/micrel.c +++ b/drivers/net/phy/micrel.c @@ -1984,6 +1984,14 @@ static int kszphy_resume(struct phy_device *phydev) return 0; } +static int ksz9x31_resume(struct phy_device *phydev) +{ + phy_device_reset(phydev, 1); + phy_device_reset(phydev, 0); + + return kszphy_resume(phydev); +} + static int kszphy_probe(struct phy_device *phydev) { const struct kszphy_type *type = phydev->drv->driver_data; @@ -4778,7 +4786,7 @@ static struct phy_driver ksphy_driver[] = { .get_strings = kszphy_get_strings, .get_stats = kszphy_get_stats, .suspend = kszphy_suspend, - .resume = kszphy_resume, + .resume = ksz9x31_resume, .cable_test_start = ksz9x31_cable_test_start, .cable_test_get_status = ksz9x31_cable_test_get_status, }, { @@ -4851,7 +4859,7 @@ static struct phy_driver ksphy_driver[] = { .get_strings = kszphy_get_strings, .get_stats = kszphy_get_stats, .suspend = kszphy_suspend, - .resume = kszphy_resume, + .resume = ksz9x31_resume, .cable_test_start = ksz9x31_cable_test_start, .cable_test_get_status = ksz9x31_cable_test_get_status, .get_features = ksz9477_get_features, -- 2.39.2