[PATCH v28 2/3] reset: npcm: register npcm8xx clock auxiliary bus device
Tomer Maimon
tmaimon77 at gmail.com
Mon Mar 17 21:39:20 AEDT 2025
Hi Guenter,
Yes, of course, it works in real hardware.
The modification was made since the reset and clock share the same
register memory region.
To enable the clock change needs to be done in the device tree as
follows (we are planning to send these change patches soon):
diff -Naur a/arch/arm64/boot/dts/nuvoton/nuvoton-common-npcm8xx.dtsi
b/arch/arm64/boot/dts/nuvoton/nuvoton-common-npcm8xx.dtsi
--- a/arch/arm64/boot/dts/nuvoton/nuvoton-common-npcm8xx.dtsi
2025-02-26 16:20:39.000000000 +0200
+++ b/arch/arm64/boot/dts/nuvoton/nuvoton-common-npcm8xx.dtsi
2025-03-17 12:29:17.876551537 +0200
@@ -47,19 +47,16 @@
interrupt-parent = <&gic>;
ranges;
- rstc: reset-controller at f0801000 {
+ clk: rstc: reset-controller at f0801000 {
compatible = "nuvoton,npcm845-reset";
- reg = <0x0 0xf0801000 0x0 0x78>;
- #reset-cells = <2>;
+ reg = <0x0 0xf0801000 0x0 0xC4>;
nuvoton,sysgcr = <&gcr>;
- };
-
- clk: clock-controller at f0801000 {
- compatible = "nuvoton,npcm845-clk";
+ #reset-cells = <2>;
+ clocks = <&refclk>;
#clock-cells = <1>;
- reg = <0x0 0xf0801000 0x0 0x1000>;
};
+
apb {
#address-cells = <1>;
#size-cells = <1>;
diff -Naur a/arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts
b/arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts
--- a/arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts
2025-02-26 16:20:39.000000000 +0200
+++ b/arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts
2025-03-17 12:24:52.293171764 +0200
@@ -19,6 +19,13 @@
memory at 0 {
reg = <0x0 0x0 0x0 0x40000000>;
};
+
+ refclk: refclk-25mhz {
+ compatible = "fixed-clock";
+ clock-output-names = "ref";
+ clock-frequency = <25000000>;
+ #clock-cells = <0>;
+ };
};
&serial0 {
Is it better to modify the reset driver with your suggestion or change
the device tree?
Thanks,
Tomer
On Sun, 16 Mar 2025 at 17:22, Guenter Roeck <linux at roeck-us.net> wrote:
>
> Hi,
>
> On Thu, Sep 12, 2024 at 10:10:37PM +0300, Tomer Maimon wrote:
> > Add NPCM8xx clock controller auxiliary bus device registration.
> >
> > The NPCM8xx clock controller is registered as an aux device because the
> > reset and the clock controller share the same register region.
> >
> > Signed-off-by: Tomer Maimon <tmaimon77 at gmail.com>
> > Tested-by: Benjamin Fair <benjaminfair at google.com>
> > Reviewed-by: Philipp Zabel <p.zabel at pengutronix.de>
>
> Does this work with real hardware ? I tried with the new qemu emulation,
> but that gets stuck in the serial driver initialization. I found that the clock
> device instantiates but does not register as clock provider because it does
> not have a device node. I needed something like the patch below to get beyond
> that point.
>
> Thanks,
> Guenter
>
> ---
> From: Guenter Roeck <linux at roeck-us.net>
> Subject: [PATCH] reset: npcm: Provide device node to clock driver
>
> Without device node, the clock driver can not register itself as clock
> provider. With debugging enabled, this manifests itself with
>
> of_serial f0000000.serial: error -EPROBE_DEFER: failed to get clock
> of_serial f0000000.serial: Driver of_serial requests probe deferral
> platform f0000000.serial: Added to deferred list
> ...
> Warning: unable to open an initial console.
>
> Look up the device node and attach it to the clock device to solve the
> problem.
>
> Fixes: 22823157d90c ("reset: npcm: register npcm8xx clock auxiliary bus device")
> Signed-off-by: Guenter Roeck <linux at roeck-us.net>
> ---
> drivers/reset/reset-npcm.c | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/drivers/reset/reset-npcm.c b/drivers/reset/reset-npcm.c
> index e5b6127783a7..43bc46755e82 100644
> --- a/drivers/reset/reset-npcm.c
> +++ b/drivers/reset/reset-npcm.c
> @@ -409,6 +409,8 @@ static struct auxiliary_device *npcm_clock_adev_alloc(struct npcm_rc_data *rst_d
> adev->name = clk_name;
> adev->dev.parent = rst_data->dev;
> adev->dev.release = npcm_clock_adev_release;
> + adev->dev.of_node = of_find_compatible_node(rst_data->dev->parent->of_node,
> + NULL, "nuvoton,npcm845-clk");
> adev->id = 555u;
>
> ret = auxiliary_device_init(adev);
> --
> 2.45.2
>
More information about the openbmc
mailing list