From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from metis.whiteo.stw.pengutronix.de (metis.whiteo.stw.pengutronix.de [185.203.201.7]) (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 A27E9426D1C for ; Tue, 31 Mar 2026 16:37:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.203.201.7 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774975031; cv=none; b=M05SxuV2YELUn3toH2Nc8YJzaRa82rx51EKt0IKCml8NoXhpRzPwYw+KJFO5dKxXoglLneAHguoYEocNQg9fvxHLvmEmebLERI6S6NC/8wVJ8StYLc5YpyBiNUuPYPZyxm91YGQdMGjwiVK25KXql8xc+zXZPB3l+fpmHFEMO5o= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774975031; c=relaxed/simple; bh=+UP5jDRgRrhTKDpe4/Eb6DFbB/J0Uu9rOaYB30d1NG0=; h=Message-ID:Subject:From:To:Cc:Date:In-Reply-To:References: Content-Type:MIME-Version; b=R/rgES6S9MUrYo/C5EMQv0D0kRcyPbXrfC9YwWO8T0Xr3v9yLxtbWsuWcyNyIrLz5+TmqEhKQJ67VA5PsxGsXASoX8tGl2OLYy4fMM2/SkGGKo7IQZvR1SddHKtqsDD9Qn3kGFy1hOIEFx2nclWgI1lz8j3U4gU9HEOuo1gtDYk= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de; spf=pass smtp.mailfrom=pengutronix.de; arc=none smtp.client-ip=185.203.201.7 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pengutronix.de Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.whiteo.stw.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1w7c59-0000dv-0A; Tue, 31 Mar 2026 18:36:47 +0200 Received: from lupine.office.stw.pengutronix.de ([2a0a:edc0:0:900:1d::4e] helo=lupine) by drehscheibe.grey.stw.pengutronix.de with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w7c58-0034QK-0Z; Tue, 31 Mar 2026 18:36:46 +0200 Received: from pza by lupine with local (Exim 4.98.2) (envelope-from ) id 1w7c58-00000000Guu-0KUb; Tue, 31 Mar 2026 18:36:46 +0200 Message-ID: <283a6336658045be8906ee219620c994e85c7fb8.camel@pengutronix.de> Subject: Re: [PATCH v9 5/6] reset: rzv2h-usb2phy: Convert to regmap API From: Philipp Zabel To: Tommaso Merciai , tomm.merciai@gmail.com, peda@axentia.se Cc: linux-renesas-soc@vger.kernel.org, biju.das.jz@bp.renesas.com, Fabrizio Castro , Lad Prabhakar , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Geert Uytterhoeven , Magnus Damm , Greg Kroah-Hartman , Josua Mayer , Ulf Hansson , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Date: Tue, 31 Mar 2026 18:36:45 +0200 In-Reply-To: <0259040014396ea03d58a87c2ce2a3f9eff2b0b6.1774601289.git.tommaso.merciai.xr@bp.renesas.com> References: <0259040014396ea03d58a87c2ce2a3f9eff2b0b6.1774601289.git.tommaso.merciai.xr@bp.renesas.com> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable User-Agent: Evolution 3.56.2-0+deb13u1 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-SA-Exim-Connect-IP: 2a0a:edc0:0:c01:1d::a2 X-SA-Exim-Mail-From: p.zabel@pengutronix.de X-SA-Exim-Scanned: No (on metis.whiteo.stw.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org On Fr, 2026-03-27 at 19:08 +0100, Tommaso Merciai wrote: > Replace raw MMIO accesses (void __iomem *, readl/writel) with > regmap_read/regmap_write via devm_regmap_init_mmio(). Regmap > provides its own internal locking, so the manual spinlock and > scoped_guard() wrappers are no longer needed. >=20 > Signed-off-by: Tommaso Merciai > --- > v8->v9: > - New patch >=20 > drivers/reset/Kconfig | 1 + > drivers/reset/reset-rzv2h-usb2phy.c | 42 ++++++++++++++++------------- > 2 files changed, 24 insertions(+), 19 deletions(-) >=20 > diff --git a/drivers/reset/Kconfig b/drivers/reset/Kconfig > index 5165006be693..c539ca88518f 100644 > --- a/drivers/reset/Kconfig > +++ b/drivers/reset/Kconfig > @@ -257,6 +257,7 @@ config RESET_RZG2L_USBPHY_CTRL > config RESET_RZV2H_USB2PHY > tristate "Renesas RZ/V2H(P) (and similar SoCs) USB2PHY Reset driver" > depends on ARCH_RENESAS || COMPILE_TEST > + select REGMAP_MMIO > help > Support for USB2PHY Port reset Control found on the RZ/V2H(P) SoC > (and similar SoCs). > diff --git a/drivers/reset/reset-rzv2h-usb2phy.c b/drivers/reset/reset-rz= v2h-usb2phy.c > index 5bdd39274612..4014eff0f017 100644 > --- a/drivers/reset/reset-rzv2h-usb2phy.c > +++ b/drivers/reset/reset-rzv2h-usb2phy.c > @@ -5,13 +5,13 @@ > * Copyright (C) 2025 Renesas Electronics Corporation > */ > =20 > -#include > #include > #include > #include > #include > #include > #include > +#include > #include > #include > =20 > @@ -37,10 +37,9 @@ struct rzv2h_usb2phy_reset_of_data { > =20 > struct rzv2h_usb2phy_reset_priv { > const struct rzv2h_usb2phy_reset_of_data *data; > - void __iomem *base; > + struct regmap *regmap; > struct device *dev; > struct reset_controller_dev rcdev; > - spinlock_t lock; /* protects register accesses */ > }; > =20 > static inline struct rzv2h_usb2phy_reset_priv > @@ -55,10 +54,8 @@ static int rzv2h_usbphy_reset_assert(struct reset_cont= roller_dev *rcdev, > struct rzv2h_usb2phy_reset_priv *priv =3D rzv2h_usbphy_rcdev_to_priv(rc= dev); > const struct rzv2h_usb2phy_reset_of_data *data =3D priv->data; > =20 > - scoped_guard(spinlock, &priv->lock) { > - writel(data->reset2_acquire_val, priv->base + data->reset2_reg); > - writel(data->reset_assert_val, priv->base + data->reset_reg); > - } > + regmap_write(priv->regmap, data->reset2_reg, data->reset2_acquire_val); > + regmap_write(priv->regmap, data->reset_reg, data->reset_assert_val); What is the spinlock protecting? acquire/assert registers being set together, without another acquire/assert or deassert/release register access pair interleaving? In that case you still need the lock. Or use regmap_multi_reg_write(). You could even directly store the sequences as struct reg_sequence in rzv2h_usb2phy_reset_of_data. > usleep_range(11, 20); > =20 > @@ -71,11 +68,9 @@ static int rzv2h_usbphy_reset_deassert(struct reset_co= ntroller_dev *rcdev, > struct rzv2h_usb2phy_reset_priv *priv =3D rzv2h_usbphy_rcdev_to_priv(rc= dev); > const struct rzv2h_usb2phy_reset_of_data *data =3D priv->data; > =20 > - scoped_guard(spinlock, &priv->lock) { > - writel(data->reset_deassert_val, priv->base + data->reset_reg); > - writel(data->reset2_release_val, priv->base + data->reset2_reg); > - writel(data->reset_release_val, priv->base + data->reset_reg); > - } > + regmap_write(priv->regmap, data->reset_reg, data->reset_deassert_val); > + regmap_write(priv->regmap, data->reset2_reg, data->reset2_release_val); > + regmap_write(priv->regmap, data->reset_reg, data->reset_release_val); Same as above. [...] > @@ -149,7 +153,7 @@ static int rzv2h_usb2phy_reset_probe(struct platform_= device *pdev) > return dev_err_probe(dev, error, "unable to register cleanup action\n"= ); > =20 > for (unsigned int i =3D 0; i < data->init_val_count; i++) > - writel(data->init_vals[i].val, priv->base + data->init_vals[i].reg); > + regmap_write(priv->regmap, data->init_vals[i].reg, data->init_vals[i].= val); Not required for locking, but this could use regmap_multi_reg_write() as well. regards Philipp