Received: by 2002:ab2:6857:0:b0:1ef:ffd0:ce49 with SMTP id l23csp2623686lqp; Mon, 25 Mar 2024 04:56:24 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCWR1u1SzHihL2z04MayXShl7RcdJ04jJmKdop/OLzs6iS5HLmTYPSIKSsjYx92KZn/fCxnvRm8tfKHy6PGjK65GemCuw+r1VQtcVf83bg== X-Google-Smtp-Source: AGHT+IHfJfYHsY92Ft4xxoK//laSUfLA2ot+sfkA9TedWom55mcP93kDgBb4TAcQ8LItdJ5b71mE X-Received: by 2002:a05:6a21:6315:b0:1a3:b93f:530e with SMTP id wu21-20020a056a21631500b001a3b93f530emr6762437pzb.23.1711367783854; Mon, 25 Mar 2024 04:56:23 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1711367783; cv=pass; d=google.com; s=arc-20160816; b=cNrlGxHVMl/wmilakPs2E8jwGFq8umY0GN3qNdN0GFIf7DPzM89HjgxFa60yLq4uCb Ic8qS4BLmHCAdjj9q8S7HG8yzODKxNY/DmSjwat9GjQIlIjebr4fg4VoW5IBAqWK1nwq SxSv1vwI0esVrO9SmREkxRBydrczvBGyPnAzI98iSLyuh1wtpEK1DNLrqw2rUbdwixui oJ1uSu7pphiWGFZP4LODPFYIbesACXNbVgAZEpCm8lHdVqAQXLb4TVZ0H1ApeiqkJKT5 B2oJvJFCI2JNK1XV13s4N3JjRsslIq65B9Y3xd9Rj+QkHvCnL4CQYJzBR23KhRyyiBGM E3Fw== ARC-Message-Signature: i=2; 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:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=dra0oUvYPfRit8+U+cg6cgYstiz3zD6tuXcPTYJUjpw=; fh=RCygvVEv7s3V/Ezb7ZvqglaMDYPhmEjoEgGc41AwtVw=; b=pDPMXKQr/iYAVPuJv3wBnpsDBZVmgXsa1U9Ir4wdepuc6St+jtGJQWmgGDA0/s0P9C 2ra3B8S80/5kVN/eetEnUKvQ/Y4KB+8D4HZflzTx1JqypkxpaneDM0AzsIlxD4V9anzP Q4Mh70MlBaMYtuy72yF9JYU/Y6bzUKZ5/u88z1hLL15q/vqH1M3CqDeH6KQp80Yf/hGp hr8ibQEVaCNX7ueKCT3byWjeFGQ18oEv0hWQhGnJZbUGUkT83RyaOLDMBVXXA1zubl6b qznk+WkIUlum/4R7DzB+gsDv5JOeDgqkYKeEYOWI4nIvSDgvmV5EneXwZaJO+LPMKj9+ JU/g==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=mNE7Zcmt; arc=pass (i=1 dkim=pass dkdomain=kernel.org); spf=pass (google.com: domain of linux-kernel+bounces-116216-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-116216-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org. [2604:1380:45e3:2400::1]) by mx.google.com with ESMTPS id t5-20020a17090aba8500b0029c7873de80si4863575pjr.8.2024.03.25.04.56.23 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 25 Mar 2024 04:56:23 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel+bounces-116216-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) client-ip=2604:1380:45e3:2400::1; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=mNE7Zcmt; arc=pass (i=1 dkim=pass dkdomain=kernel.org); spf=pass (google.com: domain of linux-kernel+bounces-116216-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-116216-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=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 sv.mirrors.kernel.org (Postfix) with ESMTPS id 930772C4969 for ; Mon, 25 Mar 2024 11:48:33 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id A831C17D23C; Mon, 25 Mar 2024 03:34:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="mNE7Zcmt" Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 78D4717DC27; Sun, 24 Mar 2024 23:44:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711323846; cv=none; b=kaAkBmX6Ieawz3dnJfKA4SiMs+Mkq1jc/t/MLh1ud4sAADKjPbAQ+3/Q0cB9ntmmulC7xeCbS9hteCEiCfyWEI+tJ/PBJV7yAlHXnLIHqUA0Z8Xv6o38dxaS0uDI1bz5kIXxR0M/N7/yMMzAx9ZezqJ16x0rGPWYIxyLMp9LvnQ= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711323846; c=relaxed/simple; bh=tSxB22iFGtPiVhPzathK1TIaK50gCvqbq6v2j+yb1vI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=uMvqlgEVPKc9SRcjuMIP9p8BqbzzqgoZ4VLULy6fF4CvdBrPi/YMrwXXJxhEf47KL5qOj9nOaK3dbFwjoQajhjicbUcg3oZCn3gnD23JdcDIx0tK6lILlWy09xlL5GMN/RTka2qIZhsqfX6kYzNKH4sw4LtWXfdf+UnFPDuv6UY= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=mNE7Zcmt; arc=none smtp.client-ip=10.30.226.201 Received: by smtp.kernel.org (Postfix) with ESMTPSA id 9EB44C43394; Sun, 24 Mar 2024 23:44:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1711323846; bh=tSxB22iFGtPiVhPzathK1TIaK50gCvqbq6v2j+yb1vI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=mNE7Zcmtl80f+b8EljnybFRwZSyXXulPGsxXtBcmt8DuEmTBN2Hg1lhV7ZjX0x6xL cWZ5KQn8+qZa+nIO99H7kXKOektlPNn7ZynYYp7d+INnyJMslE2jpwKYhlVpOdNCwi zAGmrmDuSSf/dW3IB9Fqn7gocc3e6w7IZ1IQ6BlTEIF96DFXELp3I74Q2FgiyguJ/1 6QSUlcqLMJyCqHKDS03UuEIOYm+IrW6e+hSpiPlp6jKMBNwTGpS3CIhs1gSXOie8y0 R3N98R4cBhE2FKXclUNSrFxxYmopzeXWil1t8z/77lW7YGvAHUhsAYhL+Y1jEl24p2 KGJjU8oKLFPiQ== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: =?UTF-8?q?Ar=C4=B1n=C3=A7=20=C3=9CNAL?= , Justin Swartz , "David S . Miller" , Sasha Levin Subject: [PATCH 5.10 224/238] net: dsa: mt7530: prevent possible incorrect XTAL frequency selection Date: Sun, 24 Mar 2024 19:40:12 -0400 Message-ID: <20240324234027.1354210-225-sashal@kernel.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240324234027.1354210-1-sashal@kernel.org> References: <20240324234027.1354210-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: 8bit From: Arınç ÜNAL [ Upstream commit f490c492e946d8ffbe65ad4efc66de3c5ede30a4 ] On MT7530, the HT_XTAL_FSEL field of the HWTRAP register stores a 2-bit value that represents the frequency of the crystal oscillator connected to the switch IC. The field is populated by the state of the ESW_P4_LED_0 and ESW_P4_LED_0 pins, which is done right after reset is deasserted. ESW_P4_LED_0 ESW_P3_LED_0 Frequency ----------------------------------------- 0 0 Reserved 0 1 20MHz 1 0 40MHz 1 1 25MHz On MT7531, the XTAL25 bit of the STRAP register stores this. The LAN0LED0 pin is used to populate the bit. 25MHz when the pin is high, 40MHz when it's low. These pins are also used with LEDs, therefore, their state can be set to something other than the bootstrapping configuration. For example, a link may be established on port 3 before the DSA subdriver takes control of the switch which would set ESW_P3_LED_0 to high. Currently on mt7530_setup() and mt7531_setup(), 1000 - 1100 usec delay is described between reset assertion and deassertion. Some switch ICs in real life conditions cannot always have these pins set back to the bootstrapping configuration before reset deassertion in this amount of delay. This causes wrong crystal frequency to be selected which puts the switch in a nonfunctional state after reset deassertion. The tests below are conducted on an MT7530 with a 40MHz crystal oscillator by Justin Swartz. With a cable from an active peer connected to port 3 before reset, an incorrect crystal frequency (0b11 = 25MHz) is selected: [1] [3] [5] : : : _____________________________ __________________ ESW_P4_LED_0 |_______| _____________________________ ESW_P3_LED_0 |__________________________ : : : : : : [4]...: : : [2]................: [1] Reset is asserted. [2] Period of 1000 - 1100 usec. [3] Reset is deasserted. [4] Period of 315 usec. HWTRAP register is populated with incorrect XTAL frequency. [5] Signals reflect the bootstrapped configuration. Increase the delay between reset_control_assert() and reset_control_deassert(), and gpiod_set_value_cansleep(priv->reset, 0) and gpiod_set_value_cansleep(priv->reset, 1) to 5000 - 5100 usec. This amount ensures a higher possibility that the switch IC will have these pins back to the bootstrapping configuration before reset deassertion. With a cable from an active peer connected to port 3 before reset, the correct crystal frequency (0b10 = 40MHz) is selected: [1] [2-1] [3] [5] : : : : _____________________________ __________________ ESW_P4_LED_0 |_______| ___________________ _______ ESW_P3_LED_0 |_________| |__________________ : : : : : : [2-2]...: [4]...: [2]................: [1] Reset is asserted. [2] Period of 5000 - 5100 usec. [2-1] ESW_P3_LED_0 goes low. [2-2] Remaining period of 5000 - 5100 usec. [3] Reset is deasserted. [4] Period of 310 usec. HWTRAP register is populated with bootstrapped XTAL frequency. [5] Signals reflect the bootstrapped configuration. ESW_P3_LED_0 low period before reset deassertion: 5000 usec - 5100 usec TEST RESET HOLD # (usec) --------------------- 1 5410 2 5440 3 4375 4 5490 5 5475 6 4335 7 4370 8 5435 9 4205 10 4335 11 3750 12 3170 13 4395 14 4375 15 3515 16 4335 17 4220 18 4175 19 4175 20 4350 Min 3170 Max 5490 Median 4342.500 Avg 4466.500 Revert commit 2920dd92b980 ("net: dsa: mt7530: disable LEDs before reset"). Changing the state of pins via reset assertion is simpler and more efficient than doing so by setting the LED controller off. Fixes: b8f126a8d543 ("net-next: dsa: add dsa support for Mediatek MT7530 switch") Fixes: c288575f7810 ("net: dsa: mt7530: Add the support of MT7531 switch") Co-developed-by: Justin Swartz Signed-off-by: Justin Swartz Signed-off-by: Arınç ÜNAL Signed-off-by: David S. Miller Signed-off-by: Sasha Levin --- drivers/net/dsa/mt7530.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/drivers/net/dsa/mt7530.c b/drivers/net/dsa/mt7530.c index 4056ca4255be7..0fbed76bb9697 100644 --- a/drivers/net/dsa/mt7530.c +++ b/drivers/net/dsa/mt7530.c @@ -1581,11 +1581,11 @@ mt7530_setup(struct dsa_switch *ds) */ if (priv->mcm) { reset_control_assert(priv->rstc); - usleep_range(1000, 1100); + usleep_range(5000, 5100); reset_control_deassert(priv->rstc); } else { gpiod_set_value_cansleep(priv->reset, 0); - usleep_range(1000, 1100); + usleep_range(5000, 5100); gpiod_set_value_cansleep(priv->reset, 1); } @@ -1704,11 +1704,11 @@ mt7531_setup(struct dsa_switch *ds) */ if (priv->mcm) { reset_control_assert(priv->rstc); - usleep_range(1000, 1100); + usleep_range(5000, 5100); reset_control_deassert(priv->rstc); } else { gpiod_set_value_cansleep(priv->reset, 0); - usleep_range(1000, 1100); + usleep_range(5000, 5100); gpiod_set_value_cansleep(priv->reset, 1); } -- 2.43.0