* [RFC PATCH v2 0/3] Extend lan966x clock driver for clock gating support
@ 2021-10-29 12:19 Horatiu Vultur
2021-10-29 12:19 ` [RFC PATCH v2 1/3] dt-bindings: clock: lan966x: Extend for clock gate support Horatiu Vultur
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: Horatiu Vultur @ 2021-10-29 12:19 UTC (permalink / raw)
To: mturquette, sboyd, robh+dt, nicolas.ferre, kavyasree.kotagiri,
linux-clk, devicetree, linux-kernel
Cc: Horatiu Vultur
This patch series depends on the following series, therefor keep it as RFC.
https://www.spinics.net/lists/linux-clk/msg62795.html
This patch series extend the clock driver to support also clock gating.
v1->v2:
- add Acked-by tag for patch 2
- make the resource for clock gating as an optional resource
Horatiu Vultur (3):
dt-bindings: clock: lan966x: Extend for clock gate support
dt-bindings: clock: lan966x: Extend includes with clock gates
clk: lan966x: Extend lan966x clock driver for clock gating support
.../bindings/clock/microchip,lan966x-gck.yaml | 3 +-
drivers/clk/clk-lan966x.c | 78 ++++++++++++++++++-
include/dt-bindings/clock/microchip,lan966x.h | 8 +-
3 files changed, 83 insertions(+), 6 deletions(-)
--
2.33.0
^ permalink raw reply [flat|nested] 4+ messages in thread
* [RFC PATCH v2 1/3] dt-bindings: clock: lan966x: Extend for clock gate support
2021-10-29 12:19 [RFC PATCH v2 0/3] Extend lan966x clock driver for clock gating support Horatiu Vultur
@ 2021-10-29 12:19 ` Horatiu Vultur
2021-10-29 12:19 ` [RFC PATCH v2 2/3] dt-bindings: clock: lan966x: Extend includes with clock gates Horatiu Vultur
2021-10-29 12:19 ` [RFC PATCH v2 3/3] clk: lan966x: Extend lan966x clock driver for clock gating support Horatiu Vultur
2 siblings, 0 replies; 4+ messages in thread
From: Horatiu Vultur @ 2021-10-29 12:19 UTC (permalink / raw)
To: mturquette, sboyd, robh+dt, nicolas.ferre, kavyasree.kotagiri,
linux-clk, devicetree, linux-kernel
Cc: Horatiu Vultur
Allow to add an optional resource to be able to access the clock gate
registers.
Signed-off-by: Horatiu Vultur <horatiu.vultur@microchip.com>
---
.../devicetree/bindings/clock/microchip,lan966x-gck.yaml | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/Documentation/devicetree/bindings/clock/microchip,lan966x-gck.yaml b/Documentation/devicetree/bindings/clock/microchip,lan966x-gck.yaml
index fca83bd68e26..a53c889629da 100644
--- a/Documentation/devicetree/bindings/clock/microchip,lan966x-gck.yaml
+++ b/Documentation/devicetree/bindings/clock/microchip,lan966x-gck.yaml
@@ -19,7 +19,8 @@ properties:
const: microchip,lan966x-gck
reg:
- maxItems: 1
+ minItems: 1
+ maxItems: 2
clocks:
items:
--
2.33.0
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [RFC PATCH v2 2/3] dt-bindings: clock: lan966x: Extend includes with clock gates
2021-10-29 12:19 [RFC PATCH v2 0/3] Extend lan966x clock driver for clock gating support Horatiu Vultur
2021-10-29 12:19 ` [RFC PATCH v2 1/3] dt-bindings: clock: lan966x: Extend for clock gate support Horatiu Vultur
@ 2021-10-29 12:19 ` Horatiu Vultur
2021-10-29 12:19 ` [RFC PATCH v2 3/3] clk: lan966x: Extend lan966x clock driver for clock gating support Horatiu Vultur
2 siblings, 0 replies; 4+ messages in thread
From: Horatiu Vultur @ 2021-10-29 12:19 UTC (permalink / raw)
To: mturquette, sboyd, robh+dt, nicolas.ferre, kavyasree.kotagiri,
linux-clk, devicetree, linux-kernel
Cc: Horatiu Vultur, Rob Herring
On lan966x it is allow to control the clock to some peripherals like
USB. So extend the include file with these clocks.
Acked-by: Rob Herring <robh@kernel.org>
Signed-off-by: Horatiu Vultur <horatiu.vultur@microchip.com>
---
include/dt-bindings/clock/microchip,lan966x.h | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/include/dt-bindings/clock/microchip,lan966x.h b/include/dt-bindings/clock/microchip,lan966x.h
index fe36ed6d8b5f..6f9d43d76d5a 100644
--- a/include/dt-bindings/clock/microchip,lan966x.h
+++ b/include/dt-bindings/clock/microchip,lan966x.h
@@ -23,6 +23,12 @@
#define GCK_ID_TIMER 12
#define GCK_ID_USB_REFCLK 13
-#define N_CLOCKS 14
+/* Gate clocks */
+#define GCK_GATE_UHPHS 14
+#define GCK_GATE_UDPHS 15
+#define GCK_GATE_MCRAMC 16
+#define GCK_GATE_HMATRIX 17
+
+#define N_CLOCKS 18
#endif
--
2.33.0
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [RFC PATCH v2 3/3] clk: lan966x: Extend lan966x clock driver for clock gating support
2021-10-29 12:19 [RFC PATCH v2 0/3] Extend lan966x clock driver for clock gating support Horatiu Vultur
2021-10-29 12:19 ` [RFC PATCH v2 1/3] dt-bindings: clock: lan966x: Extend for clock gate support Horatiu Vultur
2021-10-29 12:19 ` [RFC PATCH v2 2/3] dt-bindings: clock: lan966x: Extend includes with clock gates Horatiu Vultur
@ 2021-10-29 12:19 ` Horatiu Vultur
2 siblings, 0 replies; 4+ messages in thread
From: Horatiu Vultur @ 2021-10-29 12:19 UTC (permalink / raw)
To: mturquette, sboyd, robh+dt, nicolas.ferre, kavyasree.kotagiri,
linux-clk, devicetree, linux-kernel
Cc: Horatiu Vultur
Extend the clock driver to add support also for clock gating. The
following peripherals can be gated: UHPHS, UDPHS, MCRAMC, HMATRIX.
Signed-off-by: Horatiu Vultur <horatiu.vultur@microchip.com>
---
drivers/clk/clk-lan966x.c | 78 +++++++++++++++++++++++++++++++++++++--
1 file changed, 74 insertions(+), 4 deletions(-)
diff --git a/drivers/clk/clk-lan966x.c b/drivers/clk/clk-lan966x.c
index 19bec94e1551..cd372e2c0654 100644
--- a/drivers/clk/clk-lan966x.c
+++ b/drivers/clk/clk-lan966x.c
@@ -48,6 +48,20 @@ static struct clk_init_data init = {
.num_parents = ARRAY_SIZE(lan966x_gck_pdata),
};
+struct clk_gate_soc_desc {
+ const char *name;
+ int bit_idx;
+};
+
+static const struct clk_gate_soc_desc clk_gate_desc[] = {
+ { "uhphs", 11 },
+ { "udphs", 10 },
+ { "mcramc", 9 },
+ { "hmatrix", 8 },
+ { }
+};
+
+static DEFINE_SPINLOCK(clk_gate_lock);
static void __iomem *base;
static int lan966x_gck_enable(struct clk_hw *hw)
@@ -188,11 +202,46 @@ static struct clk_hw *lan966x_gck_clk_register(struct device *dev, int i)
return &priv->hw;
};
+static int lan966x_gate_clk_register(struct device *dev,
+ struct clk_hw_onecell_data *hw_data,
+ void __iomem *gate_base)
+{
+ int i;
+
+ for (i = GCK_GATE_UHPHS; i < N_CLOCKS; ++i) {
+ int idx = i - GCK_GATE_UHPHS;
+
+ hw_data->hws[i] =
+ clk_hw_register_gate(dev, clk_gate_desc[idx].name,
+ "lan966x", 0, base,
+ clk_gate_desc[idx].bit_idx,
+ 0, &clk_gate_lock);
+
+ if (IS_ERR(hw_data->hws[i]))
+ return dev_err_probe(dev, PTR_ERR(hw_data->hws[i]),
+ "failed to register %s clock\n",
+ clk_gate_desc[idx].name);
+ }
+
+ return 0;
+}
+
+static void lan966x_gate_clk_unregister(struct clk_hw_onecell_data *hw_data)
+{
+ int i;
+
+ for (i = GCK_GATE_UHPHS; i < N_CLOCKS; ++i)
+ if (!IS_ERR(hw_data->hws[i]))
+ clk_hw_unregister(hw_data->hws[i]);
+}
+
static int lan966x_clk_probe(struct platform_device *pdev)
{
struct clk_hw_onecell_data *hw_data;
struct device *dev = &pdev->dev;
- int i;
+ void __iomem *gate_base;
+ struct resource *res;
+ int i, ret;
hw_data = devm_kzalloc(dev, struct_size(hw_data, hws, N_CLOCKS),
GFP_KERNEL);
@@ -205,9 +254,9 @@ static int lan966x_clk_probe(struct platform_device *pdev)
init.ops = &lan966x_gck_ops;
- hw_data->num = N_CLOCKS;
+ hw_data->num = GCK_GATE_UHPHS;
- for (i = 0; i < N_CLOCKS; i++) {
+ for (i = 0; i < GCK_GATE_UHPHS; i++) {
init.name = clk_names[i];
hw_data->hws[i] = lan966x_gck_clk_register(dev, i);
if (IS_ERR(hw_data->hws[i])) {
@@ -217,7 +266,28 @@ static int lan966x_clk_probe(struct platform_device *pdev)
}
}
- return devm_of_clk_add_hw_provider(dev, of_clk_hw_onecell_get, hw_data);
+ res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
+ if (res) {
+ gate_base = devm_ioremap_resource(&pdev->dev, res);
+ if (IS_ERR(gate_base))
+ return PTR_ERR(gate_base);
+
+ hw_data->num = N_CLOCKS;
+
+ ret = lan966x_gate_clk_register(dev, hw_data, gate_base);
+ if (ret)
+ goto unregister;
+ }
+
+ ret = devm_of_clk_add_hw_provider(dev, of_clk_hw_onecell_get, hw_data);
+ if (ret)
+ goto unregister;
+
+ return 0;
+
+unregister:
+ lan966x_gate_clk_unregister(hw_data);
+ return ret;
}
static const struct of_device_id lan966x_clk_dt_ids[] = {
--
2.33.0
^ permalink raw reply related [flat|nested] 4+ messages in thread
end of thread, other threads:[~2021-10-29 12:20 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-10-29 12:19 [RFC PATCH v2 0/3] Extend lan966x clock driver for clock gating support Horatiu Vultur
2021-10-29 12:19 ` [RFC PATCH v2 1/3] dt-bindings: clock: lan966x: Extend for clock gate support Horatiu Vultur
2021-10-29 12:19 ` [RFC PATCH v2 2/3] dt-bindings: clock: lan966x: Extend includes with clock gates Horatiu Vultur
2021-10-29 12:19 ` [RFC PATCH v2 3/3] clk: lan966x: Extend lan966x clock driver for clock gating support Horatiu Vultur
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.