summaryrefslogtreecommitdiff
path: root/include/clk.h
diff options
context:
space:
mode:
authorPatrick Delaunay <patrick.delaunay@foss.st.com>2025-05-27 15:27:46 +0200
committerPatrice Chotard <patrice.chotard@foss.st.com>2025-06-11 09:42:55 +0200
commit0846bad0d08b53f6abaa4c8afe812dba93057424 (patch)
treeac1b211b41cf6c1173eb318e59547cc7150a3326 /include/clk.h
parent49bc67b3fa0f245dacc7e88797d88343a72163a5 (diff)
clk: add CONFIG_CLK_AUTO_ID
Add a new config CONFIG_CLK_AUTO_ID to support a unique clk id for all the clock providers, managed by clk uclass, when the clock reference arg[0] is the same. When the CONFIG is activated, the clock id is limited to the lower CLK_ID_SZ = 24 bits in default clock xlate function and the sequence number + 1 of the clk provider device is added for the 8 higher bits. We use sequence number + 1 to avoid the "dummy" clock id = 0, used for invalid clock when CCF is activated. When this config is activated, the new function clk_get_id() should be used to get back the internal reference to clock for the each clock provider. Signed-off-by: Patrick Delaunay <patrick.delaunay@foss.st.com> Signed-off-by: Patrice Chotard <patrice.chotard@foss.st.com> Cc: Lukasz Majewski <lukma@denx.de> Cc: Sean Anderson <seanga2@gmail.com> Reviewed-by: Patrick Delaunay <patrick.delaunay@foss.st.com> Reviewed-by: Patrice Chotard <patrice.chotard@foss.st.com>
Diffstat (limited to 'include/clk.h')
-rw-r--r--include/clk.h24
1 files changed, 24 insertions, 0 deletions
diff --git a/include/clk.h b/include/clk.h
index a6ef4e02692..f94135ff778 100644
--- a/include/clk.h
+++ b/include/clk.h
@@ -13,6 +13,15 @@
#include <linux/errno.h>
#include <linux/types.h>
+#ifdef CONFIG_CLK_AUTO_ID
+#define CLK_ID_SZ 24
+#define CLK_ID_MSK GENMASK(23, 0)
+#define CLK_ID(dev, id) (((dev_seq(dev) + 1) << CLK_ID_SZ) | ((id) & CLK_ID_MSK))
+#else
+#define CLK_ID_MSK (~0UL)
+#define CLK_ID(dev, id) id
+#endif
+
/**
* DOC: Overview
*
@@ -570,6 +579,16 @@ int clk_get_by_id(ulong id, struct clk **clkp);
*/
bool clk_dev_binded(struct clk *clk);
+/**
+ * clk_get_id - get clk id
+ *
+ * @clk: A clock struct
+ *
+ * Return: the clock identifier as it is defined by the clock provider in
+ * device tree or in platdata
+ */
+ulong clk_get_id(const struct clk *clk);
+
#else /* CONFIG_IS_ENABLED(CLK) */
static inline int clk_request(struct udevice *dev, struct clk *clk)
@@ -641,6 +660,11 @@ static inline bool clk_dev_binded(struct clk *clk)
{
return false;
}
+
+static inline ulong clk_get_id(const struct clk *clk)
+{
+ return 0;
+}
#endif /* CONFIG_IS_ENABLED(CLK) */
/**