LoongArch: Add built-in dtb support
Subsystems (2)
v3 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.
-----
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/boards.yaml | 34 ++ .../devicetree/bindings/loongarch/cpus.yaml | 63 +++ arch/loongarch/Kconfig | 16 + arch/loongarch/Makefile | 10 +- arch/loongarch/boot/dts/Makefile | 7 +- .../boot/dts/loongson-2k0500-ref.dts | 88 ++++ arch/loongarch/boot/dts/loongson-2k0500.dtsi | 254 ++++++++++++ .../boot/dts/loongson-2k1000-ref.dts | 171 ++++++++ arch/loongarch/boot/dts/loongson-2k1000.dtsi | 375 ++++++++++++++++++ .../boot/dts/loongson-2k2000-ref.dts | 72 ++++ arch/loongarch/boot/dts/loongson-2k2000.dtsi | 291 ++++++++++++++ arch/loongarch/kernel/env.c | 33 ++ arch/loongarch/kernel/setup.c | 9 +- 13 files changed, 1417 insertions(+), 6 deletions(-) create mode 100644 Documentation/devicetree/bindings/loongarch/boards.yaml create mode 100644 Documentation/devicetree/bindings/loongarch/cpus.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
PATCH v3 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 | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 Documentation/devicetree/bindings/loongarch/cpus.yaml
Documentation/devicetree/bindings/loongarch/cpus.yaml new file +63 -0
@@ -0,0 +1,63 @@ +# 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 + + device_type: true + +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
Re: [PATCH v3 1/7] dt-bindings: loongarch: Add CPU bindings for LoongArch
Quoted 13 lines · Binbin Zhou
Add the available CPUs in LoongArch binding with DT schema format using json-schema.
Signed-off-by Binbin Zhou <[email protected]>Documentation/devicetree/bindings/loongarch/cpus.yaml new file +7
-0+ +allOf: + - $ref: /schemas/cpu.yaml# + +properties: + compatible: + enum:
Documentation/devicetree/bindings/loongarch/cpus.yaml line 31
Quoted 10 lines
Documentation/devicetree/bindings/loongarch/cpus.yaml new file +10
-0+ - loongson,la264 + - loongson,la364 + + reg: + maxItems: 1 + + clocks: + maxItems: 1 + + device_type: true
Drop
Documentation/devicetree/bindings/loongarch/cpus.yaml line 36
Quoted 5 lines
Documentation/devicetree/bindings/loongarch/cpus.yaml new file +5
-0+ +required: + - compatible + - reg + - clocks
Best regards,
Krzysztof
PATCH v3 2/7 dt-bindings: loongarch: Add Loongson SoC boards compatibles
In reply to Binbin ZhouAdd Loongson SoC boards binding with DT schema format using json-schema.
--- .../devicetree/bindings/loongarch/boards.yaml | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 Documentation/devicetree/bindings/loongarch/boards.yaml
Documentation/devicetree/bindings/loongarch/boards.yaml new file +34 -0
@@ -0,0 +1,34 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/loongarch/boards.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
Re: [PATCH v3 2/7] dt-bindings: loongarch: Add Loongson SoC boards compatibles
Documentation/devicetree/bindings/loongarch/boards.yaml
Quoted 14 lines · Binbin Zhou
Add Loongson SoC boards binding with DT schema format using json-schema.
Signed-off-by Binbin Zhou <[email protected]>Reviewed-by Conor Dooley <[email protected]>--- .../devicetree/bindings/loongarch/boards.yaml | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 Documentation/devicetree/bindings/loongarch/boards.yamlDocumentation/devicetree/bindings/loongarch/boards.yaml new file +0
-0
loongson.yaml
I suppose you might have here different manufacturers?
Documentation/devicetree/bindings/loongarch/boards.yaml line 8
Quoted 9 lines
Documentation/devicetree/bindings/loongarch/boards.yaml new file +8
-0@@ -0,0 +1,34 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/loongarch/boards.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Loongson SoC-based boards +
Best regards,
Krzysztof
PATCH v3 3/7 LoongArch: Allow device trees to be built into the kernel
In reply to Binbin ZhouSome 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
@@ -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
@@ -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
@@ -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
@@ -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
PATCH v3 4/7 LoongArch: dts: DeviceTree for Loongson-2K0500
In reply to Binbin ZhouAdd 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 | 88 ++++++ arch/loongarch/boot/dts/loongson-2k0500.dtsi | 254 ++++++++++++++++++ 3 files changed, 344 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
@@ -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 +88 -0
88 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
Re: [PATCH v3 4/7] LoongArch: dts: DeviceTree for Loongson-2K0500
Quoted 167 lines · Binbin Zhou
Add DeviceTree file for Loongson-2K0500 processor, which integrates one 64-bit dual emission superscalar LA264 processor core.
Signed-off-by Binbin Zhou <[email protected]>--- arch/loongarch/boot/dts/Makefile | 2 + .../boot/dts/loongson-2k0500-ref.dts | 88 ++++++ arch/loongarch/boot/dts/loongson-2k0500.dtsi | 254 ++++++++++++++++++ 3 files changed, 344 insertions(+) create mode 100644 arch/loongarch/boot/dts/loongson-2k0500-ref.dts create mode 100644 arch/loongarch/boot/dts/loongson-2k0500.dtsiarch/loongarch/boot/dts/Makefile +2
-0@@ -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 +88
-0@@ -0,0 +1,88 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (C) 2023 Loongson Technology Corporation Limited + */ + +/dts-v1/; + +#include "loongson-2k0500.dtsi" + +/ { + compatible = "loongson,ls2k0500-ref", "loongson,ls2k0500"; + model = "Loongson-2K0500 Reference Board"; + + aliases { + ethernet0 = &gmac0; + ethernet1 = &gmac1; + serial0 = &uart0; + }; + + chosen { + stdout-path = "serial0:115200n8"; + }; + + memory@200000 { + device_type = "memory"; + reg = <0x0 0x200000 0x0 0xee00000>, /* 238 MB at 2 MB */ + <0x0 0x90000000 0x0 0x60000000>; + }; + + reserved-memory { + #address-cells = <2>; + #size-cells = <2>; + ranges; + + linux,cma { + compatible = "shared-dma-pool"; + reusable; + size = <0x0 0x2000000>; + linux,cma-default; + }; + }; +}; + +&gmac0 { + status = "okay"; + + phy-mode = "rgmii"; + bus_id = <0x0>; +}; + +&gmac1 { + status = "okay"; + + phy-mode = "rgmii"; + bus_id = <0x1>; +}; + +&i2c0 { + status = "okay"; + + #address-cells = <1>; + #size-cells = <0>; + eeprom@57{ + compatible = "atmel,24c16"; + reg = <0x57>; + pagesize = <16>; + }; +}; + +&ehci0 { + status = "okay"; +}; + +&ohci0 { + status = "okay"; +}; + +&sata { + status = "okay"; +}; + +&uart0 { + status = "okay"; +}; + +&rtc0 { + status = "okay"; +};arch/loongarch/boot/dts/loongson-2k0500.dtsi new file +45
-0@@ -0,0 +1,254 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (C) 2023 Loongson Technology Corporation Limited + */ + +/dts-v1/; + +#include <dt-bindings/interrupt-controller/irq.h> + +/ { + #address-cells = <2>; + #size-cells = <2>; + + cpus { + #address-cells = <1>; + #size-cells = <0>; + + cpu-map { + cluster0 { + core0 { + cpu = <&cpu0>; + }; + }; + }; + + cpu0: cpu@0 { + compatible = "loongson,la264"; + device_type = "cpu"; + reg = <0x0>; + clocks = <&cpu_clk>; + }; + }; + + cpu_clk: cpu-clk { + compatible = "fixed-clock"; + #clock-cells = <0>; + clock-frequency = <500000000>; + }; + + cpuintc: interrupt-controller { + compatible = "loongson,cpu-interrupt-controller"; + #interrupt-cells = <1>; + interrupt-controller; + }; +
arch/loongarch/boot/dts/loongson-2k0500.dtsi line 55
Quoted 10 lines
arch/loongarch/boot/dts/loongson-2k0500.dtsi new file +10
-0+ bus@10000000 { + compatible = "simple-bus"; + #address-cells = <2>; + #size-cells = <2>; + + ranges = <0x0 0x10000000 0x0 0x10000000 0x0 0x10000000>, + <0x0 0x2000000 0x0 0x2000000 0x0 0x2000000>, + <0x0 0x20000000 0x0 0x20000000 0x0 0x10000000>, + <0x0 0x40000000 0x0 0x40000000 0x0 0x40000000>, + <0xfe 0x0 0xfe 0x0 0x0 0x40000000>;
ranges should be after compatible, just like reg is.
Anyway, that's a nit, so:
Best regards,
Krzysztof
PATCH v3 5/7 LoongArch: dts: DeviceTree for Loongson-2K1000
In reply to Binbin ZhouAdd 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 | 171 ++++++++ arch/loongarch/boot/dts/loongson-2k1000.dtsi | 375 ++++++++++++++++++ 3 files changed, 548 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
@@ -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 +171 -0
171 lines not on this page · raw message
arch/loongarch/boot/dts/loongson-2k1000.dtsi new file +375 -0
375 lines not on this page · raw message
Signature · 1 line
2.39.3
Re: [PATCH v3 5/7] LoongArch: dts: DeviceTree for Loongson-2K1000
Quoted 33 lines · Binbin Zhou
Add DeviceTree file for Loongson-2K1000 processor, which integrates two 64-bit dual emission superscalar LA264 processor cores.
Signed-off-by Binbin Zhou <[email protected]>--- arch/loongarch/boot/dts/Makefile | 3 +- .../boot/dts/loongson-2k1000-ref.dts | 171 ++++++++ arch/loongarch/boot/dts/loongson-2k1000.dtsi | 375 ++++++++++++++++++ 3 files changed, 548 insertions(+), 1 deletion(-) create mode 100644 arch/loongarch/boot/dts/loongson-2k1000-ref.dts create mode 100644 arch/loongarch/boot/dts/loongson-2k1000.dtsiarch/loongarch/boot/dts/Makefile +2
-1@@ -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 +3
-0@@ -0,0 +1,171 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (C) 2023 Loongson Technology Corporation Limited
...
Quoted 8 lines
arch/loongarch/boot/dts/loongson-2k1000-ref.dts new file +8
-0+ liointc1: interrupt-controller@1fe01440 { + compatible = "loongson,liointc-2.0"; + reg = <0x0 0x1fe01440 0x0 0x40>, + <0x0 0x1fe01048 0x0 0x8>, + <0x0 0x1fe01148 0x0 0x8>; + reg-names = "main", "isr0", "isr1"; + interrupt-controller; + #interrupt-cells = <2>;
arch/loongarch/boot/dts/loongson-2k1000-ref.dts
Quoted 10 lines
arch/loongarch/boot/dts/loongson-2k1000-ref.dts new file +10
-0+ interrupt-parent = <&cpuintc>; + interrupts = <3>; + interrupt-names = "int1"; + loongson,parent_int_map = <0x00000000>, /* int0 */ + <0xffffffff>, /* int1 */ + <0x00000000>, /* int2 */ + <0x00000000>; /* int3 */ + }; + + global-utilities@1fe00000 {
I have no clue what "globla-utilities" are for a SoC. Compatible suggests it is chipid.
Best regards,
Krzysztof
PATCH v3 6/7 LoongArch: dts: DeviceTree for Loongson-2K2000
In reply to Binbin ZhouAdd 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 | 72 +++++ arch/loongarch/boot/dts/loongson-2k2000.dtsi | 291 ++++++++++++++++++ 3 files changed, 365 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
@@ -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 +72 -0
72 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
PATCH v3 7/7 LoongArch: Parsing CPU-related information from DTS
In reply to Binbin ZhouGenerally, 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
@@ -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