[PATCH v2 1/8] dt-bindings: clock: loongson2: Add Loongson 2K0300 compatible

Yao Zi posted 8 patches 3 months, 3 weeks ago
There is a newer version of this series
[PATCH v2 1/8] dt-bindings: clock: loongson2: Add Loongson 2K0300 compatible
Posted by Yao Zi 3 months, 3 weeks ago
Document the clock controller shipped in Loongson 2K0300 SoC, which
generates various clock signals for SoC peripherals.

Differing from previous generations of SoCs, 2K0300 requires a 120MHz
external clock input, and a separate dt-binding header is used for
cleanness.

Signed-off-by: Yao Zi <ziyao@disroot.org>
---
 .../bindings/clock/loongson,ls2k-clk.yaml     | 26 ++++++---
 MAINTAINERS                                   |  1 +
 .../dt-bindings/clock/loongson,ls2k0300-clk.h | 54 +++++++++++++++++++
 3 files changed, 75 insertions(+), 6 deletions(-)
 create mode 100644 include/dt-bindings/clock/loongson,ls2k0300-clk.h

diff --git a/Documentation/devicetree/bindings/clock/loongson,ls2k-clk.yaml b/Documentation/devicetree/bindings/clock/loongson,ls2k-clk.yaml
index 4f79cdb417ab..3e0a894cfb2f 100644
--- a/Documentation/devicetree/bindings/clock/loongson,ls2k-clk.yaml
+++ b/Documentation/devicetree/bindings/clock/loongson,ls2k-clk.yaml
@@ -16,6 +16,7 @@ description: |
 properties:
   compatible:
     enum:
+      - loongson,ls2k0300-clk
       - loongson,ls2k0500-clk
       - loongson,ls2k-clk  # This is for Loongson-2K1000
       - loongson,ls2k2000-clk
@@ -24,19 +25,32 @@ properties:
     maxItems: 1
 
   clocks:
-    items:
-      - description: 100m ref
+    maxItems: 1
 
-  clock-names:
-    items:
-      - const: ref_100m
+  clock-names: true
 
   '#clock-cells':
     const: 1
     description:
       The clock consumer should specify the desired clock by having the clock
       ID in its "clocks" phandle cell. See include/dt-bindings/clock/loongson,ls2k-clk.h
-      for the full list of Loongson-2 SoC clock IDs.
+      and include/dt-bindings/clock/loongson,ls2k0300-clk.h for the full list of
+      Loongson-2 SoC clock IDs.
+
+allOf:
+  - if:
+      properties:
+        compatible:
+          contains:
+            const: loongson,ls2k0300-clk
+    then:
+      properties:
+        clock-names:
+          const: ref_120m
+    else:
+      properties:
+        clock-names:
+          const: ref_100m
 
 required:
   - compatible
diff --git a/MAINTAINERS b/MAINTAINERS
index dd844ac8d910..9b7c4b2b7f58 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -13954,6 +13954,7 @@ S:	Maintained
 F:	Documentation/devicetree/bindings/clock/loongson,ls2k-clk.yaml
 F:	drivers/clk/clk-loongson2.c
 F:	include/dt-bindings/clock/loongson,ls2k-clk.h
+F:	include/dt-bindings/clock/loongson,ls2k0300-clk.h
 
 LOONGSON SPI DRIVER
 M:	Yinbo Zhu <zhuyinbo@loongson.cn>
diff --git a/include/dt-bindings/clock/loongson,ls2k0300-clk.h b/include/dt-bindings/clock/loongson,ls2k0300-clk.h
new file mode 100644
index 000000000000..5e8f7b2f33f2
--- /dev/null
+++ b/include/dt-bindings/clock/loongson,ls2k0300-clk.h
@@ -0,0 +1,54 @@
+/* SPDX-License-Identifier: (GPL-2.0-only OR MIT) */
+/*
+ * Copyright (C) 2025 Yao Zi <ziyao@disroot.org>
+ */
+#ifndef _DT_BINDINGS_CLK_LOONGSON_LS2K300_H_
+#define _DT_BINDINGS_CLK_LOONGSON_LS2K300_H_
+
+/* Derivied from REFCLK */
+#define LS2K0300_CLK_STABLE			0
+#define LS2K0300_PLL_NODE			1
+#define LS2K0300_PLL_DDR			2
+#define LS2K0300_PLL_PIX			3
+#define LS2K0300_CLK_THSENS			4
+
+/* Derived from PLL_NODE */
+#define LS2K0300_CLK_NODE_DIV			5
+#define LS2K0300_CLK_NODE_PLL_GATE		6
+#define LS2K0300_CLK_NODE_SCALE			7
+#define LS2K0300_CLK_NODE_GATE			8
+#define LS2K0300_CLK_GMAC_DIV			9
+#define LS2K0300_CLK_GMAC_GATE			10
+#define LS2K0300_CLK_I2S_DIV			11
+#define LS2K0300_CLK_I2S_SCALE			12
+#define LS2K0300_CLK_I2S_GATE			13
+
+/* Derived from PLL_DDR */
+#define LS2K0300_CLK_DDR_DIV			14
+#define LS2K0300_CLK_DDR_GATE			15
+#define LS2K0300_CLK_NET_DIV			16
+#define LS2K0300_CLK_NET_GATE			17
+#define LS2K0300_CLK_DEV_DIV			18
+#define LS2K0300_CLK_DEV_GATE			19
+
+/* Derived from PLL_PIX */
+#define LS2K0300_CLK_PIX_DIV			20
+#define LS2K0300_CLK_PIX_PLL_GATE		21
+#define LS2K0300_CLK_PIX_SCALE			22
+#define LS2K0300_CLK_PIX_GATE			23
+#define LS2K0300_CLK_GMACBP_DIV			24
+#define LS2K0300_CLK_GMACBP_GATE		25
+
+/* Derived from CLK_DEV */
+#define LS2K0300_CLK_USB_SCALE			26
+#define LS2K0300_CLK_USB_GATE			27
+#define LS2K0300_CLK_APB_SCALE			28
+#define LS2K0300_CLK_APB_GATE			29
+#define LS2K0300_CLK_BOOT_SCALE			30
+#define LS2K0300_CLK_BOOT_GATE			31
+#define LS2K0300_CLK_SDIO_SCALE			32
+#define LS2K0300_CLK_SDIO_GATE			33
+
+#define LS2K0300_CLK_GMAC_IN			34
+
+#endif // _DT_BINDINGS_CLK_LOONGSON_LS2K300_H_
-- 
2.49.0
Re: [PATCH v2 1/8] dt-bindings: clock: loongson2: Add Loongson 2K0300 compatible
Posted by Krzysztof Kozlowski 3 months, 2 weeks ago
On Tue, Jun 17, 2025 at 04:24:19PM +0000, Yao Zi wrote:
> Document the clock controller shipped in Loongson 2K0300 SoC, which
> generates various clock signals for SoC peripherals.
> 
> Differing from previous generations of SoCs, 2K0300 requires a 120MHz
> external clock input, and a separate dt-binding header is used for
> cleanness.
> 
> Signed-off-by: Yao Zi <ziyao@disroot.org>
> ---
>  .../bindings/clock/loongson,ls2k-clk.yaml     | 26 ++++++---
>  MAINTAINERS                                   |  1 +
>  .../dt-bindings/clock/loongson,ls2k0300-clk.h | 54 +++++++++++++++++++
>  3 files changed, 75 insertions(+), 6 deletions(-)
>  create mode 100644 include/dt-bindings/clock/loongson,ls2k0300-clk.h
> 
> diff --git a/Documentation/devicetree/bindings/clock/loongson,ls2k-clk.yaml b/Documentation/devicetree/bindings/clock/loongson,ls2k-clk.yaml
> index 4f79cdb417ab..3e0a894cfb2f 100644
> --- a/Documentation/devicetree/bindings/clock/loongson,ls2k-clk.yaml
> +++ b/Documentation/devicetree/bindings/clock/loongson,ls2k-clk.yaml
> @@ -16,6 +16,7 @@ description: |
>  properties:
>    compatible:
>      enum:
> +      - loongson,ls2k0300-clk
>        - loongson,ls2k0500-clk
>        - loongson,ls2k-clk  # This is for Loongson-2K1000
>        - loongson,ls2k2000-clk
> @@ -24,19 +25,32 @@ properties:
>      maxItems: 1
>  
>    clocks:
> -    items:
> -      - description: 100m ref
> +    maxItems: 1
>  
> -  clock-names:
> -    items:
> -      - const: ref_100m
> +  clock-names: true

No. How does this implement my comment?

It makes no sense, why 100m even appeared here. I already objected last
time!


>  
>    '#clock-cells':
>      const: 1
>      description:
>        The clock consumer should specify the desired clock by having the clock
>        ID in its "clocks" phandle cell. See include/dt-bindings/clock/loongson,ls2k-clk.h
> -      for the full list of Loongson-2 SoC clock IDs.
> +      and include/dt-bindings/clock/loongson,ls2k0300-clk.h for the full list of
> +      Loongson-2 SoC clock IDs.
> +
> +allOf:
> +  - if:
> +      properties:
> +        compatible:
> +          contains:
> +            const: loongson,ls2k0300-clk
> +    then:
> +      properties:
> +        clock-names:
> +          const: ref_120m

NAK, stop doing this pattern. You already got comment on this.

Best regards,
Krzysztof
Re: [PATCH v2 1/8] dt-bindings: clock: loongson2: Add Loongson 2K0300 compatible
Posted by Yao Zi 3 months, 2 weeks ago
On Fri, Jun 27, 2025 at 10:03:53AM +0200, Krzysztof Kozlowski wrote:
> On Tue, Jun 17, 2025 at 04:24:19PM +0000, Yao Zi wrote:
> > Document the clock controller shipped in Loongson 2K0300 SoC, which
> > generates various clock signals for SoC peripherals.
> > 
> > Differing from previous generations of SoCs, 2K0300 requires a 120MHz
> > external clock input, and a separate dt-binding header is used for
> > cleanness.
> > 
> > Signed-off-by: Yao Zi <ziyao@disroot.org>
> > ---
> >  .../bindings/clock/loongson,ls2k-clk.yaml     | 26 ++++++---
> >  MAINTAINERS                                   |  1 +
> >  .../dt-bindings/clock/loongson,ls2k0300-clk.h | 54 +++++++++++++++++++
> >  3 files changed, 75 insertions(+), 6 deletions(-)
> >  create mode 100644 include/dt-bindings/clock/loongson,ls2k0300-clk.h
> > 
> > diff --git a/Documentation/devicetree/bindings/clock/loongson,ls2k-clk.yaml b/Documentation/devicetree/bindings/clock/loongson,ls2k-clk.yaml
> > index 4f79cdb417ab..3e0a894cfb2f 100644
> > --- a/Documentation/devicetree/bindings/clock/loongson,ls2k-clk.yaml
> > +++ b/Documentation/devicetree/bindings/clock/loongson,ls2k-clk.yaml
> > @@ -16,6 +16,7 @@ description: |
> >  properties:
> >    compatible:
> >      enum:
> > +      - loongson,ls2k0300-clk
> >        - loongson,ls2k0500-clk
> >        - loongson,ls2k-clk  # This is for Loongson-2K1000
> >        - loongson,ls2k2000-clk
> > @@ -24,19 +25,32 @@ properties:
> >      maxItems: 1
> >  
> >    clocks:
> > -    items:
> > -      - description: 100m ref
> > +    maxItems: 1
> >  
> > -  clock-names:
> > -    items:
> > -      - const: ref_100m
> > +  clock-names: true
> 
> No. How does this implement my comment?

I'm sorry that I forgot about the suggestion of dropping clock-names for
the new compatible.

Is it acceptable to remove the description of clocks property, keep
clock-names property as-is, and use an allOf block to disallow
clocks-names for the new 2K0300 compatible? Thanks for your explanation.

> It makes no sense, why 100m even appeared here. I already objected last
> time!
> 
> 
> >  
> >    '#clock-cells':
> >      const: 1
> >      description:
> >        The clock consumer should specify the desired clock by having the clock
> >        ID in its "clocks" phandle cell. See include/dt-bindings/clock/loongson,ls2k-clk.h
> > -      for the full list of Loongson-2 SoC clock IDs.
> > +      and include/dt-bindings/clock/loongson,ls2k0300-clk.h for the full list of
> > +      Loongson-2 SoC clock IDs.
> > +
> > +allOf:
> > +  - if:
> > +      properties:
> > +        compatible:
> > +          contains:
> > +            const: loongson,ls2k0300-clk
> > +    then:
> > +      properties:
> > +        clock-names:
> > +          const: ref_120m
> 
> NAK, stop doing this pattern. You already got comment on this.

Oops, I missed the comment about dropping the frequency (or the full
clock-names property) from clock-names when writing v2, and I've decided
to drop the clock-names property completely for the 2K0300 compatible.

Sorry again for my mistake.

> Best regards,
> Krzysztof
> 
> 

Best regards,
Yao Zi
Re: [PATCH v2 1/8] dt-bindings: clock: loongson2: Add Loongson 2K0300 compatible
Posted by Yao Zi 3 months ago
On Fri, Jun 27, 2025 at 11:52:41AM +0000, Yao Zi wrote:
> On Fri, Jun 27, 2025 at 10:03:53AM +0200, Krzysztof Kozlowski wrote:
> > On Tue, Jun 17, 2025 at 04:24:19PM +0000, Yao Zi wrote:
> > > Document the clock controller shipped in Loongson 2K0300 SoC, which
> > > generates various clock signals for SoC peripherals.
> > > 
> > > Differing from previous generations of SoCs, 2K0300 requires a 120MHz
> > > external clock input, and a separate dt-binding header is used for
> > > cleanness.
> > > 
> > > Signed-off-by: Yao Zi <ziyao@disroot.org>
> > > ---
> > >  .../bindings/clock/loongson,ls2k-clk.yaml     | 26 ++++++---
> > >  MAINTAINERS                                   |  1 +
> > >  .../dt-bindings/clock/loongson,ls2k0300-clk.h | 54 +++++++++++++++++++
> > >  3 files changed, 75 insertions(+), 6 deletions(-)
> > >  create mode 100644 include/dt-bindings/clock/loongson,ls2k0300-clk.h
> > > 
> > > diff --git a/Documentation/devicetree/bindings/clock/loongson,ls2k-clk.yaml b/Documentation/devicetree/bindings/clock/loongson,ls2k-clk.yaml
> > > index 4f79cdb417ab..3e0a894cfb2f 100644
> > > --- a/Documentation/devicetree/bindings/clock/loongson,ls2k-clk.yaml
> > > +++ b/Documentation/devicetree/bindings/clock/loongson,ls2k-clk.yaml
> > > @@ -16,6 +16,7 @@ description: |
> > >  properties:
> > >    compatible:
> > >      enum:
> > > +      - loongson,ls2k0300-clk
> > >        - loongson,ls2k0500-clk
> > >        - loongson,ls2k-clk  # This is for Loongson-2K1000
> > >        - loongson,ls2k2000-clk
> > > @@ -24,19 +25,32 @@ properties:
> > >      maxItems: 1
> > >  
> > >    clocks:
> > > -    items:
> > > -      - description: 100m ref
> > > +    maxItems: 1
> > >  
> > > -  clock-names:
> > > -    items:
> > > -      - const: ref_100m
> > > +  clock-names: true
> > 
> > No. How does this implement my comment?

Hi Krzysztof,

> I'm sorry that I forgot about the suggestion of dropping clock-names for
> the new compatible.
> 
> Is it acceptable to remove the description of clocks property, keep
> clock-names property as-is, and use an allOf block to disallow
> clocks-names for the new 2K0300 compatible? Thanks for your explanation.

Could you please provide some further comments on this? The schema will
look like,

	clocks:
	  maxItems: 1

	clock-names:
	  items:
	    - const: ref_100m

	...

	allOf:
	  - if:
	      properties:
	        compatible:
	          contains:
	            const: loongson,ls2k0300-clk
	    then:
	      properties:
	        clock-names: false
	    else:
	      required:
	        - clock-names

Thanks for your time and suggestion.

> > It makes no sense, why 100m even appeared here. I already objected last
> > time!
> > 
> > >  
> > >    '#clock-cells':
> > >      const: 1
> > >      description:
> > >        The clock consumer should specify the desired clock by having the clock
> > >        ID in its "clocks" phandle cell. See include/dt-bindings/clock/loongson,ls2k-clk.h
> > > -      for the full list of Loongson-2 SoC clock IDs.
> > > +      and include/dt-bindings/clock/loongson,ls2k0300-clk.h for the full list of
> > > +      Loongson-2 SoC clock IDs.
> > > +
> > > +allOf:
> > > +  - if:
> > > +      properties:
> > > +        compatible:
> > > +          contains:
> > > +            const: loongson,ls2k0300-clk
> > > +    then:
> > > +      properties:
> > > +        clock-names:
> > > +          const: ref_120m
> > 
> > NAK, stop doing this pattern. You already got comment on this.
> 
> Oops, I missed the comment about dropping the frequency (or the full
> clock-names property) from clock-names when writing v2, and I've decided
> to drop the clock-names property completely for the 2K0300 compatible.
> 
> Sorry again for my mistake.
> 
> > Best regards,
> > Krzysztof
> > 
> > 
> 
> Best regards,
> Yao Zi
> 

Regards,
Yao Zi