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: 8+ 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
2026-06-11 14:17 ` Torsten Duwe
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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.