From nobody Wed Oct 8 03:52:57 2025 Received: from relmlie5.idc.renesas.com (relmlor1.renesas.com [210.160.252.171]) by smtp.subspace.kernel.org (Postfix) with ESMTP id F3EF22E173B; Thu, 3 Jul 2025 11:08:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=210.160.252.171 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751540903; cv=none; b=KvyWs9h/IpE/ig4U+xVDOybJqYXf6uRZexA/bnIK3ky71A0r7SLYeJo3Evtq30neCh/o/p+Odf3BRChtFFW/Wz2U81qhj6qK5pp7QEyOBFgVvEwEcAnHguViQJNJua7DftXV4f8aEssgbS+eP3LHOUJkLvK7NWbKycldlq3+/fY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751540903; c=relaxed/simple; bh=8bUXCSo65pFuL9K7IKGHK785dYGPeGX435gMmbBZl8I=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=AeSB1dwfwvBmasApW//3gfcYArTbIRAHYAbzGTYc5bMK1ZyEDAKh0fTkxT9yBSCjBfpccpx449aKSCcKLDCUMyUtsr/7+PL5TEEOYfLIWyg/2QHG7mEW5bF4HJcbUUahtimIjEY3Kz7vAbWtsirp5sw9zqoPh04GUCEu2OFkcS0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=renesas.com; spf=pass smtp.mailfrom=renesas.com; arc=none smtp.client-ip=210.160.252.171 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=renesas.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=renesas.com X-CSE-ConnectionGUID: JN4MplTaR6CRhVIxAG6TIw== X-CSE-MsgGUID: Ow2QnL7bQpSsRM+ot9wbNQ== Received: from unknown (HELO relmlir5.idc.renesas.com) ([10.200.68.151]) by relmlie5.idc.renesas.com with ESMTP; 03 Jul 2025 20:08:14 +0900 Received: from [127.0.1.1] (unknown [10.226.78.19]) by relmlir5.idc.renesas.com (Postfix) with ESMTP id 2A29140015C3; Thu, 3 Jul 2025 20:08:11 +0900 (JST) From: Michael Dege Date: Thu, 03 Jul 2025 13:07:24 +0200 Subject: [PATCH v4 2/2] phy: renesas: r8a779f0-ether-serdes: add new step added to latest datasheet 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" Content-Transfer-Encoding: quoted-printable Message-Id: <20250703-renesas-serdes-update-v4-2-1db5629cac2b@renesas.com> References: <20250703-renesas-serdes-update-v4-0-1db5629cac2b@renesas.com> In-Reply-To: <20250703-renesas-serdes-update-v4-0-1db5629cac2b@renesas.com> To: Vinod Koul , Kishon Vijay Abraham I , Yoshihiro Shimoda Cc: Michael Dege , =?utf-8?q?Uwe_Kleine-K=C3=B6nig?= , linux-phy@lists.infradead.org, linux-kernel@vger.kernel.org, linux-renesas-soc@vger.kernel.org X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1751540886; l=2379; i=michael.dege@renesas.com; s=20250523; h=from:subject:message-id; bh=8bUXCSo65pFuL9K7IKGHK785dYGPeGX435gMmbBZl8I=; b=N+7Y1YmhEfzvZj8B4ak0niBxiWyifklTIn5OXhVwstLDCXpiZLn3r+9uKNMYjS8DlMiqlGs04 SK/OcKCtFGtAQY9of/Pi/4ZppshAU35xAvr+7asFlc90N539Nt39CZ/ X-Developer-Key: i=michael.dege@renesas.com; a=ed25519; pk=+gYTlVQ3/MlOju88OuKnXA7MlapP4lYqJn1F81HZGSo= R-Car S4-8 datasheet Rev.1.20 describes some additional register settings at the end of the initialization. Signed-off-by: Michael Dege --- drivers/phy/renesas/r8a779f0-ether-serdes.c | 28 +++++++++++++++++++++++++= +++ 1 file changed, 28 insertions(+) diff --git a/drivers/phy/renesas/r8a779f0-ether-serdes.c b/drivers/phy/rene= sas/r8a779f0-ether-serdes.c index ed83c46f6d00c255852cc5af867c89ab0d0db02a..8a6b6f366fe376d21f5fee77958= 93f5aac0feae4 100644 --- a/drivers/phy/renesas/r8a779f0-ether-serdes.c +++ b/drivers/phy/renesas/r8a779f0-ether-serdes.c @@ -49,6 +49,13 @@ static void r8a779f0_eth_serdes_write32(void __iomem *ad= dr, u32 offs, u32 bank, iowrite32(data, addr + offs); } =20 +static u32 r8a779f0_eth_serdes_read32(void __iomem *addr, u32 offs, u32 b= ank) +{ + iowrite32(bank, addr + R8A779F0_ETH_SERDES_BANK_SELECT); + + return ioread32(addr + offs); +} + static int r8a779f0_eth_serdes_reg_wait(struct r8a779f0_eth_serdes_channel *channel, u32 offs, u32 bank, u32 mask, u32 expected) @@ -319,6 +326,7 @@ static int r8a779f0_eth_serdes_hw_init_late(struct r8a7= 79f0_eth_serdes_channel *channel) { int ret; + u32 val; =20 ret =3D r8a779f0_eth_serdes_chan_setting(channel); if (ret) @@ -332,6 +340,26 @@ static int r8a779f0_eth_serdes_hw_init_late(struct r8a= 779f0_eth_serdes_channel =20 r8a779f0_eth_serdes_write32(channel->addr, 0x03d0, 0x380, 0x0000); =20 + val =3D r8a779f0_eth_serdes_read32(channel->addr, 0x00c0, 0x180); + r8a779f0_eth_serdes_write32(channel->addr, 0x00c0, 0x180, val | BIT(8)); + ret =3D r8a779f0_eth_serdes_reg_wait(channel, 0x0100, 0x180, BIT(0), 1); + if (ret) + return ret; + r8a779f0_eth_serdes_write32(channel->addr, 0x00c0, 0x180, val & ~BIT(8)); + ret =3D r8a779f0_eth_serdes_reg_wait(channel, 0x0100, 0x180, BIT(0), 0); + if (ret) + return ret; + + val =3D r8a779f0_eth_serdes_read32(channel->addr, 0x0144, 0x180); + r8a779f0_eth_serdes_write32(channel->addr, 0x0144, 0x180, val | BIT(4)); + ret =3D r8a779f0_eth_serdes_reg_wait(channel, 0x0180, 0x180, BIT(0), 1); + if (ret) + return ret; + r8a779f0_eth_serdes_write32(channel->addr, 0x0144, 0x180, val & ~BIT(4)); + ret =3D r8a779f0_eth_serdes_reg_wait(channel, 0x0180, 0x180, BIT(0), 0); + if (ret) + return ret; + return r8a779f0_eth_serdes_monitor_linkup(channel); } =20 --=20 2.25.1