From: Torsten Duwe <duwe@lst.de>
To: u-boot@lists.denx.de
Cc: Daniele Briguglio <hello@superkali.me>,
Jonas Karlman <jonas@kwiboo.se>, Tom Rini <trini@konsulko.com>,
Lukasz Majewski <lukma@denx.de>,
Heinrich Schuchardt <xypron.glpk@gmx.de>,
David Lechner <dlechner@baylibre.com>,
Julien Stephan <jstephan@baylibre.com>,
Simon Glass <sjg@chromium.org>,
Peter Korsgaard <peter@korsgaard.com>,
Heiko Stuebner <heiko@sntech.de>
Subject: [PATCH] clk: enhance clk-gpio to also handle gated-fixed-clock
Date: Thu, 28 May 2026 13:22:06 +0200 [thread overview]
Message-ID: <20260528132206.2fe9f474@lst.de> (raw)
Devicetree commit a198185b9b5 introduced a new type of clock,
"gated-fixed-clock", for which Das U-Boot does not have
a driver yet. The required code is similar to gpio-gate-clock,
and can be added using little extra text space.
Use this code e.g. to boot a Rock5 ITX from NVMe
Signed-off-by: Torsten Duwe <duwe@lst.de>
---
Hi all,
I have a Rock 5 ITX, too, and got struck by Heiko's change ;)
Instead of Copy & Waste I merged the required changes into
clk-gpio, which results in 121 extra code bytes and a driver
which accepts a superset of both DT bindings.
size clk-gated-fixed.o clk-gpio*.o
text data bss dec hex filename
673 120 0 793 319 clk-gated-fixed.o
665 120 0 785 311 clk-gpio.o
544 120 0 664 298 clk-gpio-orig.o
All I want to do here is present it as an alternative to Daniele's
approach[1] and let the maintainers decide how to proceed. This is
a "works for me" raw cut, feel free to review if we want to go this
way.
Torsten
[1] https://lists.denx.de/pipermail/u-boot/2026-May/619110.html
---
configs/rock-5-itx-rk3588_defconfig | 1 +
drivers/clk/clk-gpio.c | 29 ++++++++++++++++++++++-------
2 files changed, 23 insertions(+), 7 deletions(-)
diff --git a/configs/rock-5-itx-rk3588_defconfig b/configs/rock-5-itx-rk3588_defconfig
index cb014de4188..adb20c2f3a0 100644
--- a/configs/rock-5-itx-rk3588_defconfig
+++ b/configs/rock-5-itx-rk3588_defconfig
@@ -52,6 +52,7 @@ CONFIG_AHCI=y
CONFIG_AHCI_PCI=y
CONFIG_DWC_AHCI=y
CONFIG_SPL_CLK=y
+CONFIG_CLK_GPIO=y
# CONFIG_USB_FUNCTION_FASTBOOT is not set
CONFIG_ROCKCHIP_GPIO=y
CONFIG_SYS_I2C_ROCKCHIP=y
diff --git a/drivers/clk/clk-gpio.c b/drivers/clk/clk-gpio.c
index 4ed14306575..b7abc891ed2 100644
--- a/drivers/clk/clk-gpio.c
+++ b/drivers/clk/clk-gpio.c
@@ -6,6 +6,7 @@
#include <clk.h>
#include <clk-uclass.h>
#include <dm.h>
+#include <power/regulator.h>
#include <linux/clk-provider.h>
#include <asm/gpio.h>
@@ -13,14 +14,18 @@
struct clk_gpio_priv {
struct gpio_desc enable; /* GPIO, controlling the gate */
struct clk *clk; /* Gated clock */
+ struct udevice *vdd_supply;
};
static int clk_gpio_enable(struct clk *clk)
{
struct clk_gpio_priv *priv = dev_get_priv(clk->dev);
- clk_enable(priv->clk);
- dm_gpio_set_value(&priv->enable, 1);
+ if (priv->clk)
+ clk_enable(priv->clk);
+
+ if (priv->enable.dev)
+ dm_gpio_set_value(&priv->enable, 1);
return 0;
}
@@ -29,8 +34,11 @@ static int clk_gpio_disable(struct clk *clk)
{
struct clk_gpio_priv *priv = dev_get_priv(clk->dev);
- dm_gpio_set_value(&priv->enable, 0);
- clk_disable(priv->clk);
+ if (priv->enable.dev)
+ dm_gpio_set_value(&priv->enable, 0);
+
+ if (priv->clk)
+ clk_disable(priv->clk);
return 0;
}
@@ -39,7 +47,7 @@ static ulong clk_gpio_get_rate(struct clk *clk)
{
struct clk_gpio_priv *priv = dev_get_priv(clk->dev);
- return clk_get_rate(priv->clk);
+ return (priv->clk) ? clk_get_rate(priv->clk) : -1;
}
const struct clk_ops clk_gpio_ops = {
@@ -57,7 +65,7 @@ static int clk_gpio_probe(struct udevice *dev)
if (IS_ERR(priv->clk)) {
log_debug("%s: Could not get gated clock: %ld\n",
__func__, PTR_ERR(priv->clk));
- return PTR_ERR(priv->clk);
+ priv->clk = 0;
}
ret = gpio_request_by_name(dev, "enable-gpios", 0,
@@ -65,9 +73,15 @@ static int clk_gpio_probe(struct udevice *dev)
if (ret) {
log_debug("%s: Could not decode enable-gpios (%d)\n",
__func__, ret);
- return ret;
}
+ ret = device_get_supply_regulator(dev, "vdd-supply",
+ &priv->vdd_supply);
+ if (ret == 0)
+ ret = regulator_set_enable(priv->vdd_supply, true);
+
+ log_debug("%s: %s regulator = %d\n", __func__, dev->name, ret);
+
return 0;
}
@@ -80,6 +94,7 @@ static int clk_gpio_probe(struct udevice *dev)
*/
static const struct udevice_id clk_gpio_match[] = {
{ .compatible = "gpio-gate-clock" },
+ { .compatible = "gated-fixed-clock" },
{ /* sentinel */ }
};
--
2.54.0
next reply other threads:[~2026-05-28 11:22 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-28 11:22 Torsten Duwe [this message]
2026-05-28 12:42 ` [PATCH] clk: enhance clk-gpio to also handle gated-fixed-clock Jonas Karlman
2026-06-11 13:48 ` Tom Rini
2026-06-11 13:58 ` Jonas Karlman
2026-06-11 14:01 ` Tom Rini
[not found] ` <20260611161755.447cabc8@lst.de>
2026-06-11 14:20 ` Tom Rini
2026-06-11 14:39 ` Jonas Karlman
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260528132206.2fe9f474@lst.de \
--to=duwe@lst.de \
--cc=dlechner@baylibre.com \
--cc=heiko@sntech.de \
--cc=hello@superkali.me \
--cc=jonas@kwiboo.se \
--cc=jstephan@baylibre.com \
--cc=lukma@denx.de \
--cc=peter@korsgaard.com \
--cc=sjg@chromium.org \
--cc=trini@konsulko.com \
--cc=u-boot@lists.denx.de \
--cc=xypron.glpk@gmx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox