Skip to contentSkip to conversation

LoongArch: Add built-in dtb support

PATCH Superseded Binbin Zhou 7 participants 19 messages Aug 23, 2023 – Aug 25, 2023

Subsystems (2)

v4 of 6 Superseded Latest is v6 →

lore
Share & tools
lore
#0 lore raw

v4 cover LoongArch: Add built-in dtb support

Hi all:

This patchset introduces LoongArch's built-in dtb support.

As we know, the Loongson-2K family supports DT. Inevitably, some systems do not provide a useful device tree to the kernel at boot time. Chasing around bootloaders for these systems is a headache, so we just keep a device tree table in the kernel, keyed by the dts filename, that contains the relevant DTBs.

Thanks.

-----
V4:
patch(1/7):
- Drop device_type property.
patch(2/7):
- Rename board.yaml to loongson.yaml.
patch(4/7):
- Keep the ranges attribute after compatible;
- Add bootargs = "ttyS0,115200", which is needed for reference board;
patch(5/7):
- Keep the ranges attribute after compatible;
- Add bootargs = "ttyS0,115200", which is needed for reference board;
- Change node name global-utilities to chipid.
patch(6/7):
- Keep the ranges attribute after compatible;
- Add bootargs = "ttyS0,115200", which is needed for reference board.

Link to V3:
https://lore.kernel.org/all/[email protected]/

V3:
patch(1/7):
- Add reference to the common cpu schema.
patch(2/7):
- Add reviewed-by tag.
patch(4/7):
- Drop bootargs;
- Move the cpus node to dtsi, which is part of the SoC.
patch(5/7):
- Drop bootargs;
- Move the cpus node to dtsi, which is part of the SoC;
- Fix gmac0/1-mdio node: compatible is always the first property;
- Drop i2c-gpio node.
patch(6/7):
- Drop bootargs;
- Move the cpus node to dtsi, which is part of the SoC.
- Changes liointc to liointc-1.0, for Loongson-2K2000 has 32 interrupt sources.

Link to V2:
https://lore.kernel.org/all/[email protected]/

V2:
patch(1/7):
- Drop model and clock-frequency properties;
- Add clocks property;
- Rewrite the description.
patch(2/7):
- Add the proper compatibles for boards.
patch(4/7)(5/7)(6/7):
- Format commit message head;
- Drop undocumented compatible, such as pci_bridge compatible;
- Distinguish the attributes, put SoC-related into DTSI and

    board-related into DTS;

- Check DTS with 'make dtbs_check W=1'.
patch(7/7)
- New patch;
- Parses Molde name and CPU MHz from the DTS attribute.

Link to V1:
https://lore.kernel.org/loongarch/[email protected]/

Binbin Zhou (7):
dt-bindings: loongarch: Add CPU bindings for LoongArch
dt-bindings: loongarch: Add Loongson SoC boards compatibles
LoongArch: Allow device trees to be built into the kernel
LoongArch: dts: DeviceTree for Loongson-2K0500
LoongArch: dts: DeviceTree for Loongson-2K1000
LoongArch: dts: DeviceTree for Loongson-2K2000
LoongArch: Parsing CPU-related information from DTS

 .../devicetree/bindings/loongarch/cpus.yaml   |  61 +++
 .../bindings/loongarch/loongson.yaml          |  34 ++
 arch/loongarch/Kconfig                        |  16 +
 arch/loongarch/Makefile                       |  10 +-
 arch/loongarch/boot/dts/Makefile              |   7 +-
 .../boot/dts/loongson-2k0500-ref.dts          |  89 ++++
 arch/loongarch/boot/dts/loongson-2k0500.dtsi  | 254 +++++++++++
 .../boot/dts/loongson-2k1000-ref.dts          | 172 ++++++++
 arch/loongarch/boot/dts/loongson-2k1000.dtsi  | 397 ++++++++++++++++++
 .../boot/dts/loongson-2k2000-ref.dts          |  73 ++++
 arch/loongarch/boot/dts/loongson-2k2000.dtsi  | 291 +++++++++++++
 arch/loongarch/kernel/env.c                   |  33 ++
 arch/loongarch/kernel/setup.c                 |   9 +-
 13 files changed, 1440 insertions(+), 6 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/loongarch/cpus.yaml
 create mode 100644 Documentation/devicetree/bindings/loongarch/loongson.yaml
 create mode 100644 arch/loongarch/boot/dts/loongson-2k0500-ref.dts
 create mode 100644 arch/loongarch/boot/dts/loongson-2k0500.dtsi
 create mode 100644 arch/loongarch/boot/dts/loongson-2k1000-ref.dts
 create mode 100644 arch/loongarch/boot/dts/loongson-2k1000.dtsi
 create mode 100644 arch/loongarch/boot/dts/loongson-2k2000-ref.dts
 create mode 100644 arch/loongarch/boot/dts/loongson-2k2000.dtsi
Signature · 1 line
2.39.3
#1 lore raw

PATCH v4 1/7 dt-bindings: loongarch: Add CPU bindings for LoongArch

Add the available CPUs in LoongArch binding with DT schema format using json-schema.

---
 .../devicetree/bindings/loongarch/cpus.yaml   | 61 +++++++++++++++++++
 1 file changed, 61 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/loongarch/cpus.yaml
Documentation/devicetree/bindings/loongarch/cpus.yaml new file +61 -0
new file mode 100644
index 000000000000..f175872995e1
@@ -0,0 +1,61 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/loongarch/cpus.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: LoongArch CPUs
+
+maintainers:
+  - Binbin Zhou <[email protected]>
+
+description:
+  This document describes the list of LoongArch CPU cores that support FDT,
+  it describe the layout of CPUs in a system through the "cpus" node.
+
+allOf:
+  - $ref: /schemas/cpu.yaml#
+
+properties:
+  compatible:
+    enum:
+      - loongson,la264
+      - loongson,la364
+
+  reg:
+    maxItems: 1
+
+  clocks:
+    maxItems: 1
+
+required:
+  - compatible
+  - reg
+  - clocks
+
+unevaluatedProperties: false
+
+examples:
+  - |
+    #include <dt-bindings/clock/loongson,ls2k-clk.h>
+
+    cpus {
+        #size-cells = <0>;
+        #address-cells = <1>;
+
+        cpu@0 {
+            compatible = "loongson,la264";
+            device_type = "cpu";
+            reg = <0>;
+            clocks = <&clk LOONGSON2_NODE_CLK>;
+        };
+
+        cpu@1 {
+            compatible = "loongson,la264";
+            device_type = "cpu";
+            reg = <1>;
+            clocks = <&clk LOONGSON2_NODE_CLK>;
+        };
+    };
+
+...
Signature · 1 line
2.39.3
#3 lore raw

PATCH v4 2/7 dt-bindings: loongarch: Add Loongson SoC boards compatibles

In reply to Binbin Zhou

Add Loongson SoC boards binding with DT schema format using json-schema.

---
 .../bindings/loongarch/loongson.yaml          | 34 +++++++++++++++++++
 1 file changed, 34 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/loongarch/loongson.yaml
Documentation/devicetree/bindings/loongarch/loongson.yaml new file +34 -0
new file mode 100644
index 000000000000..e1a4a97b7576
@@ -0,0 +1,34 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/loongarch/loongson.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Loongson SoC-based boards
+
+maintainers:
+  - Binbin Zhou <[email protected]>
+
+properties:
+  $nodename:
+    const: '/'
+  compatible:
+    oneOf:
+      - description: Loongson-2K0500 processor based boards
+        items:
+          - const: loongson,ls2k0500-ref
+          - const: loongson,ls2k0500
+
+      - description: Loongson-2K1000 processor based boards
+        items:
+          - const: loongson,ls2k1000-ref
+          - const: loongson,ls2k1000
+
+      - description: Loongson-2K2000 processor based boards
+        items:
+          - const: loongson,ls2k2000-ref
+          - const: loongson,ls2k2000
+
+additionalProperties: true
+
+...
Signature · 1 line
2.39.3
#4 lore raw

PATCH v4 3/7 LoongArch: Allow device trees to be built into the kernel

In reply to Binbin Zhou

Some systems do not provide a useful device tree to the kernel at boot time. Let's keep a device tree table in the kernel, keyed by the dts filename, containing the relevant DTBs.

---
 arch/loongarch/Kconfig           | 16 ++++++++++++++++
 arch/loongarch/Makefile          | 10 ++++++++--
 arch/loongarch/boot/dts/Makefile |  3 +--
 arch/loongarch/kernel/setup.c    |  9 +++++++--
 4 files changed, 32 insertions(+), 6 deletions(-)
arch/loongarch/Kconfig +16 -0
index 46b4c217da14..61febadd4fce 100644
@@ -326,6 +326,22 @@ config 64KB_3LEVEL
 
 endchoice
 
+config BUILTIN_DTB
+	bool "Enable builtin dtb in kernel"
+	depends on OF
+	help
+	  Some systems do not provide a useful device tree to the kernel at boot
+	  time. Let's keep a device tree table in the kernel, keyed by the dts
+	  filename, containing the relevant DTBs.
+
+config BUILTIN_DTB_NAME
+	string "Source file for LoongArch builtin dtb"
+	depends on BUILTIN_DTB
+	help
+	  Base name (without suffix, relative to arch/loongarch/boot/dts/)
+	  for the DTS file that will be used to produce the DTB linked into the
+	  kernel.
+
 config CMDLINE
 	string "Built-in kernel command line"
 	help
arch/loongarch/Makefile +8 -2
index fb0fada43197..abaa3df9fd6f 100644
@@ -5,7 +5,8 @@
 
 boot	:= arch/loongarch/boot
 
-KBUILD_DEFCONFIG := loongson3_defconfig
+KBUILD_DEFCONFIG		:= loongson3_defconfig
+KBUILD_DTBS			:= dtbs
 
 image-name-y			:= vmlinux
 image-name-$(CONFIG_EFI_ZBOOT)	:= vmlinuz
@@ -140,11 +141,14 @@ PHONY += vdso_install
 vdso_install:
 	$(Q)$(MAKE) $(build)=arch/loongarch/vdso $@
 
-all:	$(notdir $(KBUILD_IMAGE))
+all:	$(notdir $(KBUILD_IMAGE)) $(KBUILD_DTBS)
 
 vmlinux.elf vmlinux.efi vmlinuz.efi: vmlinux
 	$(Q)$(MAKE) $(build)=$(boot) $(bootvars-y) $(boot)/$@
 
+# device-trees
+core-y += arch/loongarch/boot/dts/
+
 install:
 	$(Q)install -D -m 755 $(KBUILD_IMAGE) $(INSTALL_PATH)/$(image-name-y)-$(KERNELRELEASE)
 	$(Q)install -D -m 644 .config $(INSTALL_PATH)/config-$(KERNELRELEASE)
@@ -152,5 +156,7 @@ install:
 
 define archhelp
 	echo '  install              - install kernel into $(INSTALL_PATH)'
+	echo '  dtbs                 - Device-tree blobs for enabled boards'
+	echo '  dtbs_install         - Install dtbs to $(INSTALL_DTBS_PATH)'
 	echo
 endef
arch/loongarch/boot/dts/Makefile +1 -2
index 5f1f55e911ad..1e24cdb5180a 100644
@@ -1,4 +1,3 @@
 # SPDX-License-Identifier: GPL-2.0-only
-dtstree	:= $(srctree)/$(src)
 
-dtb-y := $(patsubst $(dtstree)/%.dts,%.dtb, $(wildcard $(dtstree)/*.dts))
+obj-$(CONFIG_BUILTIN_DTB)	+= $(addsuffix .dtb.o, $(CONFIG_BUILTIN_DTB_NAME))
arch/loongarch/kernel/setup.c +7 -2
index 7783f0a3d742..e5008890beda 100644
@@ -296,8 +296,13 @@ static void __init fdt_setup(void)
 	if (acpi_os_get_root_pointer())
 		return;
 
-	/* Look for a device tree configuration table entry */
-	fdt_pointer = efi_fdt_pointer();
+	/* We prefer to try to use built-in dtb, checking its legality first. */
+	if (!fdt_check_header(__dtb_start))
+		fdt_pointer = __dtb_start;
+	else
+		/* Fallback to efi dtb, when built-in dtb is not available. */
+		fdt_pointer = efi_fdt_pointer();
+
 	if (!fdt_pointer || fdt_check_header(fdt_pointer))
 		return;
 
Signature · 1 line
2.39.3
maintainer
#5 lore raw

Re: [PATCH v4 3/7] LoongArch: Allow device trees to be built into the kernel

Quoted 3 lines · Binbin Zhou

Some systems do not provide a useful device tree to the kernel at boot time. Let's keep a device tree table in the kernel, keyed by the dts filename, containing the relevant DTBs.

Support for this in other arches was added to support legacy bootloaders with no DT support. You should not need this for a new architecture. Fix the bootloader to provide a useful DT.

Rob

#6 lore raw

Re: [PATCH v4 3/7] LoongArch: Allow device trees to be built into the kernel

Hi Rob:

Quoted 10 lines · Rob Herring
Quoted 3 lines · Binbin Zhou

Some systems do not provide a useful device tree to the kernel at boot time. Let's keep a device tree table in the kernel, keyed by the dts filename, containing the relevant DTBs.

Support for this in other arches was added to support legacy bootloaders with no DT support. You should not need this for a new architecture. Fix the bootloader to provide a useful DT.

Yes, our bootloader already supports DT.

Our original intention of providing kernel built-in DTS is to describe all possible device information of that SoC, so that everyone can use it as a reference during development; we will unlikely to add more .dts files to the kernel besides the reference ones.

And as a reference, our built-in DTS provides the most basic bootable combinations (so it is generic enough) as an alternative in case the DTS in the bootloader is unexpected.

Does this make any sense?

Thanks.
Binbin

Quoted 1 line

Rob

#7 lore raw

Re: [PATCH v4 3/7] LoongArch: Allow device trees to be built into the kernel

Quoted 20 lines · Binbin Zhou

Hi Rob:

Quoted 10 lines · Rob Herring
Quoted 3 lines · Binbin Zhou

Some systems do not provide a useful device tree to the kernel at boot time. Let's keep a device tree table in the kernel, keyed by the dts filename, containing the relevant DTBs.

Support for this in other arches was added to support legacy bootloaders with no DT support. You should not need this for a new architecture. Fix the bootloader to provide a useful DT.

Yes, our bootloader already supports DT.

Our original intention of providing kernel built-in DTS is to describe all possible device information of that SoC, so that everyone can use it as a reference during development; we will unlikely to add more .dts files to the kernel besides the reference ones.

Quoted 5 lines

And as a reference, our built-in DTS provides the most basic bootable combinations (so it is generic enough) as an alternative in case the DTS in the bootloader is unexpected.

Does this make any sense?

I don't see how this answers the question - as far as I can tell Rob was asking specifically about the building the dtb into the kernel, whereas your response seems to talk about havint the dts files in the kernel tree.

maintainer
#8 lore raw

Re: [PATCH v4 3/7] LoongArch: Allow device trees to be built into the kernel

Hi, Conor,

Quoted 26 lines · Conor Dooley
Quoted 24 lines · Binbin Zhou

Hi Rob:

Quoted 10 lines · Rob Herring
Quoted 3 lines · Binbin Zhou

Some systems do not provide a useful device tree to the kernel at boot time. Let's keep a device tree table in the kernel, keyed by the dts filename, containing the relevant DTBs.

Support for this in other arches was added to support legacy bootloaders with no DT support. You should not need this for a new architecture. Fix the bootloader to provide a useful DT.

Yes, our bootloader already supports DT.

Our original intention of providing kernel built-in DTS is to describe all possible device information of that SoC, so that everyone can use it as a reference during development; we will unlikely to add more .dts files to the kernel besides the reference ones.

And as a reference, our built-in DTS provides the most basic bootable combinations (so it is generic enough) as an alternative in case the DTS in the bootloader is unexpected.

Quoted 6 lines
Quoted 1 line

Does this make any sense?

I don't see how this answers the question - as far as I can tell Rob was asking specifically about the building the dtb into the kernel, whereas your response seems to talk about havint the dts files in the kernel tree.

I'm sorry, but from my point of view, giving users a chance to build the reference dts file into the kernel is not a bad idea. Of course the commit message can be improved.

Huacai

#9 lore raw

PATCH v4 4/7 LoongArch: dts: DeviceTree for Loongson-2K0500

In reply to Binbin Zhou

Add DeviceTree file for Loongson-2K0500 processor, which integrates one 64-bit dual emission superscalar LA264 processor core.

---
 arch/loongarch/boot/dts/Makefile              |   2 +
 .../boot/dts/loongson-2k0500-ref.dts          |  89 ++++++
 arch/loongarch/boot/dts/loongson-2k0500.dtsi  | 254 ++++++++++++++++++
 3 files changed, 345 insertions(+)
 create mode 100644 arch/loongarch/boot/dts/loongson-2k0500-ref.dts
 create mode 100644 arch/loongarch/boot/dts/loongson-2k0500.dtsi
arch/loongarch/boot/dts/Makefile +2 -0
index 1e24cdb5180a..aa0b21d73d4e 100644
@@ -1,3 +1,5 @@
 # SPDX-License-Identifier: GPL-2.0-only
 
+dtb-$(CONFIG_MACH_LOONGSON64)	= loongson-2k0500-ref.dtb
+
 obj-$(CONFIG_BUILTIN_DTB)	+= $(addsuffix .dtb.o, $(CONFIG_BUILTIN_DTB_NAME))
arch/loongarch/boot/dts/loongson-2k0500-ref.dts new file +89 -0

89 lines not on this page · raw message

arch/loongarch/boot/dts/loongson-2k0500.dtsi new file +254 -0

254 lines not on this page · raw message

Signature · 1 line
2.39.3
#10 lore raw

Re: [PATCH v4 4/7] LoongArch: dts: DeviceTree for Loongson-2K0500

Quoted 6 lines · Binbin Zhou

Add DeviceTree file for Loongson-2K0500 processor, which integrates one 64-bit dual emission superscalar LA264 processor core.

Quoted 7 lines
---
 arch/loongarch/boot/dts/Makefile              |   2 +
 .../boot/dts/loongson-2k0500-ref.dts          |  89 ++++++
 arch/loongarch/boot/dts/loongson-2k0500.dtsi  | 254 ++++++++++++++++++
 3 files changed, 345 insertions(+)
 create mode 100644 arch/loongarch/boot/dts/loongson-2k0500-ref.dts
 create mode 100644 arch/loongarch/boot/dts/loongson-2k0500.dtsi

This introduces some warnings which don't seem to be addressed by your fixes to loongson,liointc.yaml:

/home/rob/proj/linux-dt/.build-loongarch/arch/loongarch/boot/dts/loongson-2k0500-ref.dtb:
interrupt-controller@1fe11400: reg-names: ['main', 'isr0'] is too
short
from schema $id:
http://devicetree.org/schemas/interrupt-controller/loongson,liointc.yaml#
/home/rob/proj/linux-dt/.build-loongarch/arch/loongarch/boot/dts/loongson-2k0500-ref.dtb:
interrupt-controller@1fe11400: Unevaluated properties are not allowed ('reg-names' was unexpected)
from schema $id:
http://devicetree.org/schemas/interrupt-controller/loongson,liointc.yaml#
/home/rob/proj/linux-dt/.build-loongarch/arch/loongarch/boot/dts/loongson-2k0500-ref.dtb:
interrupt-controller@1fe11400: reg: [[0, 534844416, 0, 64], [0,
534843456, 0, 8]] is too short
from schema $id:
http://devicetree.org/schemas/interrupt-controller/loongson,liointc.yaml#
/home/rob/proj/linux-dt/.build-loongarch/arch/loongarch/boot/dts/loongson-2k0500-ref.dtb:
interrupt-controller@1fe11440: reg-names: ['main', 'isr0'] is too
short
from schema $id:
http://devicetree.org/schemas/interrupt-controller/loongson,liointc.yaml#
/home/rob/proj/linux-dt/.build-loongarch/arch/loongarch/boot/dts/loongson-2k0500-ref.dtb:
interrupt-controller@1fe11440: interrupt-names:0: 'int0' was expected
from schema $id:
http://devicetree.org/schemas/interrupt-controller/loongson,liointc.yaml#
/home/rob/proj/linux-dt/.build-loongarch/arch/loongarch/boot/dts/loongson-2k0500-ref.dtb:
interrupt-controller@1fe11440: Unevaluated properties are not allowed ('interrupt-names', 'reg-names' were unexpected)
from schema $id:
http://devicetree.org/schemas/interrupt-controller/loongson,liointc.yaml#
/home/rob/proj/linux-dt/.build-loongarch/arch/loongarch/boot/dts/loongson-2k0500-ref.dtb:
interrupt-controller@1fe11440: reg: [[0, 534844480, 0, 64], [0,
534843464, 0, 8]] is too short
from schema $id:
http://devicetree.org/schemas/interrupt-controller/loongson,liointc.yaml#

Rob

#11 lore raw

PATCH v4 5/7 LoongArch: dts: DeviceTree for Loongson-2K1000

In reply to Binbin Zhou

Add DeviceTree file for Loongson-2K1000 processor, which integrates two 64-bit dual emission superscalar LA264 processor cores.

---
 arch/loongarch/boot/dts/Makefile              |   3 +-
 .../boot/dts/loongson-2k1000-ref.dts          | 172 ++++++++
 arch/loongarch/boot/dts/loongson-2k1000.dtsi  | 397 ++++++++++++++++++
 3 files changed, 571 insertions(+), 1 deletion(-)
 create mode 100644 arch/loongarch/boot/dts/loongson-2k1000-ref.dts
 create mode 100644 arch/loongarch/boot/dts/loongson-2k1000.dtsi
arch/loongarch/boot/dts/Makefile +2 -1
index aa0b21d73d4e..dc0782315bed 100644
@@ -1,5 +1,6 @@
 # SPDX-License-Identifier: GPL-2.0-only
 
-dtb-$(CONFIG_MACH_LOONGSON64)	= loongson-2k0500-ref.dtb
+dtb-$(CONFIG_MACH_LOONGSON64)	= loongson-2k0500-ref.dtb \
+				  loongson-2k1000-ref.dtb
 
 obj-$(CONFIG_BUILTIN_DTB)	+= $(addsuffix .dtb.o, $(CONFIG_BUILTIN_DTB_NAME))
arch/loongarch/boot/dts/loongson-2k1000-ref.dts new file +172 -0

172 lines not on this page · raw message

arch/loongarch/boot/dts/loongson-2k1000.dtsi new file +397 -0

397 lines not on this page · raw message

Signature · 1 line
2.39.3
#12 lore raw

PATCH v4 6/7 LoongArch: dts: DeviceTree for Loongson-2K2000

In reply to Binbin Zhou

Add DeviceTree file for Loongson-2K2000 processor, which integrates two 64-bit triple emission superscalar LA364 processor cores.

---
 arch/loongarch/boot/dts/Makefile              |   3 +-
 .../boot/dts/loongson-2k2000-ref.dts          |  73 +++++
 arch/loongarch/boot/dts/loongson-2k2000.dtsi  | 291 ++++++++++++++++++
 3 files changed, 366 insertions(+), 1 deletion(-)
 create mode 100644 arch/loongarch/boot/dts/loongson-2k2000-ref.dts
 create mode 100644 arch/loongarch/boot/dts/loongson-2k2000.dtsi
arch/loongarch/boot/dts/Makefile +2 -1
index dc0782315bed..c019d6676f7e 100644
@@ -1,6 +1,7 @@
 # SPDX-License-Identifier: GPL-2.0-only
 
 dtb-$(CONFIG_MACH_LOONGSON64)	= loongson-2k0500-ref.dtb \
-				  loongson-2k1000-ref.dtb
+				  loongson-2k1000-ref.dtb \
+				  loongson-2k2000-ref.dtb
 
 obj-$(CONFIG_BUILTIN_DTB)	+= $(addsuffix .dtb.o, $(CONFIG_BUILTIN_DTB_NAME))
arch/loongarch/boot/dts/loongson-2k2000-ref.dts new file +73 -0

73 lines not on this page · raw message

arch/loongarch/boot/dts/loongson-2k2000.dtsi new file +291 -0

291 lines not on this page · raw message

Signature · 1 line
2.39.3
#13 lore raw

PATCH v4 7/7 LoongArch: Parsing CPU-related information from DTS

In reply to Binbin Zhou

Generally, we can get cpu-related information, such as model name, from /proc/cpuinfo. for DT-based systems, we need to parse the relevant information from DTS.

---
 arch/loongarch/kernel/env.c | 33 +++++++++++++++++++++++++++++++++
 1 file changed, 33 insertions(+)
arch/loongarch/kernel/env.c +33 -0
index 6b3bfb0092e6..0191fe20b535 100644
@@ -5,13 +5,16 @@
  * Copyright (C) 2020-2022 Loongson Technology Corporation Limited
  */
 #include <linux/acpi.h>
+#include <linux/clk.h>
 #include <linux/efi.h>
 #include <linux/export.h>
 #include <linux/memblock.h>
+#include <linux/of_clk.h>
 #include <asm/early_ioremap.h>
 #include <asm/bootinfo.h>
 #include <asm/loongson.h>
 #include <asm/setup.h>
+#include <asm/time.h>
 
 u64 efi_system_table;
 struct loongson_system_configuration loongson_sysconf;
@@ -34,9 +37,39 @@ void __init init_environ(void)
 	efi_system_table = fw_arg2;
 }
 
+static int __init fdt_cpu_clk_init(void)
+{
+	struct clk *clk;
+	struct device_node *np;
+
+	np = of_get_cpu_node(0, NULL);
+	if (!np)
+		return -ENODEV;
+
+	clk = of_clk_get(np, 0);
+	if (IS_ERR(clk))
+		return -ENODEV;
+
+	cpu_clock_freq = clk_get_rate(clk);
+	clk_put(clk);
+
+	return 0;
+}
+late_initcall(fdt_cpu_clk_init);
+
 static int __init init_cpu_fullname(void)
 {
 	int cpu;
+	char *prop;
+	struct device_node *root;
+
+	/* Parsing cpuname from DTS model property */
+	root = of_find_node_by_path("/");
+	if (root) {
+		of_property_read_string(root, "model", (const char **)&prop);
+		if (prop)
+			loongson_sysconf.cpuname = strsep(&prop, " ");
+	}
 
 	if (loongson_sysconf.cpuname && !strncmp(loongson_sysconf.cpuname, "Loongson", 8)) {
 		for (cpu = 0; cpu < NR_CPUS; cpu++)
Signature · 1 line
2.39.3
maintainer
#14 lore raw
In reply to Binbin Zhou

This series looks good enough to me now, if no one has objections, I will queue it to loongarch-next.

Huacai

Quoted 110 lines · Binbin Zhou

Hi all:

This patchset introduces LoongArch's built-in dtb support.

As we know, the Loongson-2K family supports DT. Inevitably, some systems do not provide a useful device tree to the kernel at boot time. Chasing around bootloaders for these systems is a headache, so we just keep a device tree table in the kernel, keyed by the dts filename, that contains the relevant DTBs.

Thanks.

-----
V4:
patch(1/7):
- Drop device_type property.
patch(2/7):
- Rename board.yaml to loongson.yaml.
patch(4/7):
- Keep the ranges attribute after compatible;
- Add bootargs = "ttyS0,115200", which is needed for reference board;
patch(5/7):
- Keep the ranges attribute after compatible;
- Add bootargs = "ttyS0,115200", which is needed for reference board;
- Change node name global-utilities to chipid.
patch(6/7):
- Keep the ranges attribute after compatible;
- Add bootargs = "ttyS0,115200", which is needed for reference board.

Link to V3:
https://lore.kernel.org/all/[email protected]/

V3:
patch(1/7):
- Add reference to the common cpu schema.
patch(2/7):
- Add reviewed-by tag.
patch(4/7):
- Drop bootargs;
- Move the cpus node to dtsi, which is part of the SoC.
patch(5/7):
- Drop bootargs;
- Move the cpus node to dtsi, which is part of the SoC;
- Fix gmac0/1-mdio node: compatible is always the first property;
- Drop i2c-gpio node.
patch(6/7):
- Drop bootargs;
- Move the cpus node to dtsi, which is part of the SoC.
- Changes liointc to liointc-1.0, for Loongson-2K2000 has 32 interrupt sources.

Link to V2:
https://lore.kernel.org/all/[email protected]/

V2:
patch(1/7):
- Drop model and clock-frequency properties;
- Add clocks property;
- Rewrite the description.
patch(2/7):
- Add the proper compatibles for boards.
patch(4/7)(5/7)(6/7):
- Format commit message head;
- Drop undocumented compatible, such as pci_bridge compatible;
- Distinguish the attributes, put SoC-related into DTSI and

    board-related into DTS;

- Check DTS with 'make dtbs_check W=1'.
patch(7/7)
- New patch;
- Parses Molde name and CPU MHz from the DTS attribute.

Link to V1:
https://lore.kernel.org/loongarch/[email protected]/

Binbin Zhou (7):
dt-bindings: loongarch: Add CPU bindings for LoongArch
dt-bindings: loongarch: Add Loongson SoC boards compatibles
LoongArch: Allow device trees to be built into the kernel
LoongArch: dts: DeviceTree for Loongson-2K0500
LoongArch: dts: DeviceTree for Loongson-2K1000
LoongArch: dts: DeviceTree for Loongson-2K2000
LoongArch: Parsing CPU-related information from DTS

 .../devicetree/bindings/loongarch/cpus.yaml   |  61 +++
 .../bindings/loongarch/loongson.yaml          |  34 ++
 arch/loongarch/Kconfig                        |  16 +
 arch/loongarch/Makefile                       |  10 +-
 arch/loongarch/boot/dts/Makefile              |   7 +-
 .../boot/dts/loongson-2k0500-ref.dts          |  89 ++++
 arch/loongarch/boot/dts/loongson-2k0500.dtsi  | 254 +++++++++++
 .../boot/dts/loongson-2k1000-ref.dts          | 172 ++++++++
 arch/loongarch/boot/dts/loongson-2k1000.dtsi  | 397 ++++++++++++++++++
 .../boot/dts/loongson-2k2000-ref.dts          |  73 ++++
 arch/loongarch/boot/dts/loongson-2k2000.dtsi  | 291 +++++++++++++
 arch/loongarch/kernel/env.c                   |  33 ++
 arch/loongarch/kernel/setup.c                 |   9 +-
 13 files changed, 1440 insertions(+), 6 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/loongarch/cpus.yaml
 create mode 100644 Documentation/devicetree/bindings/loongarch/loongson.yaml
 create mode 100644 arch/loongarch/boot/dts/loongson-2k0500-ref.dts
 create mode 100644 arch/loongarch/boot/dts/loongson-2k0500.dtsi
 create mode 100644 arch/loongarch/boot/dts/loongson-2k1000-ref.dts
 create mode 100644 arch/loongarch/boot/dts/loongson-2k1000.dtsi
 create mode 100644 arch/loongarch/boot/dts/loongson-2k2000-ref.dts
 create mode 100644 arch/loongarch/boot/dts/loongson-2k2000.dtsi

--
2.39.3

#15 lore raw
Quoted 2 lines · Huacai Chen

This series looks good enough to me now, if no one has objections, I will queue it to loongarch-next.

Have you not read Rob's replies?

maintainer
#16 lore raw

Hi, Conor,

Quoted 6 lines · Conor Dooley
Quoted 2 lines · Huacai Chen

This series looks good enough to me now, if no one has objections, I will queue it to loongarch-next.

Have you not read Rob's replies?

I'm sorry, I have read but I thought Binbin's reply has answered Rob's question.

Huacai

#17 lore raw
Quoted 10 lines · Huacai Chen

Hi, Conor,

Quoted 6 lines · Conor Dooley
Quoted 2 lines · Huacai Chen

This series looks good enough to me now, if no one has objections, I will queue it to loongarch-next.

Have you not read Rob's replies?

I'm sorry, I have read but I thought Binbin's reply has answered Rob's question.

As far as I can tell, it didn't - but there were was a reply from Rob about dtbs_check issues too IIRC.

maintainer
#18 lore raw

Hi, Conor,

Quoted 7 lines · Conor Dooley
Quoted 5 lines · Huacai Chen

Hi, Conor,

Quoted 2 lines · Conor Dooley

On Fri, Aug 25, 2023 at 07:38:31PM +0800, Huacai Chen wrote:

Quoted 8 lines
Quoted 5 lines
Quoted 4 lines
Quoted 2 lines

This series looks good enough to me now, if no one has objections, I will queue it to loongarch-next.

Have you not read Rob's replies?

I'm sorry, I have read but I thought Binbin's reply has answered Rob's question.

As far as I can tell, it didn't - but there were was a reply from Rob about dtbs_check issues too IIRC.

OK, I see. The dtbs_check warning is being fixed in [1], but it seems that Binbin hasn't got the key point of Krzysztof.

https://lore.kernel.org/linux-mips/[email protected]/T/#t

Huacai