Re: [PATCH v28 2/3] reset: npcm: register npcm8xx clock auxiliary bus device

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@f0801000 {
+               clk: rstc: reset-controller@f0801000 {
                        compatible = "nuvoton,npcm845-reset";
-                       reg = <0x0 0xf0801000 0x0 0x78>;
-                       #reset-cells = <2>;
+                       reg = <0x0 0xf0801000 0x0 0xC4>;
                        nuvoton,sysgcr = <&gcr>;
-               };
-
-               clk: clock-controller@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@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@xxxxxxxxxxxx> 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@xxxxxxxxx>
> > Tested-by: Benjamin Fair <benjaminfair@xxxxxxxxxx>
> > Reviewed-by: Philipp Zabel <p.zabel@xxxxxxxxxxxxxx>
>
> 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@xxxxxxxxxxxx>
> 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@xxxxxxxxxxxx>
> ---
>  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
>




[Index of Archives]     [Device Tree Compilter]     [Device Tree Spec]     [Linux Driver Backports]     [Video for Linux]     [Linux USB Devel]     [Linux PCI Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Yosemite Backpacking]


  Powered by Linux