SpacemiT: Add linux-7.0.y patch set
Signed-off-by: Patrick Yavitz <pyavitz@gmail.com>
This commit is contained in:
parent
56a90c4256
commit
15174efc6d
@ -0,0 +1,310 @@
|
||||
From 87b63fe0a197562bfa30cc27954824a824a1fa0f Mon Sep 17 00:00:00 2001
|
||||
From: Patrick Yavitz <pyavitz@gmail.com>
|
||||
Date: Thu, 26 Feb 2026 07:29:43 -0500
|
||||
Subject: [PATCH] Update MusePi Pro DTS
|
||||
|
||||
Signed-off-by: Patrick Yavitz <pyavitz@gmail.com>
|
||||
---
|
||||
.../riscv/boot/dts/spacemit/k1-musepi-pro.dts | 270 ++++++++++++++++++
|
||||
1 file changed, 270 insertions(+)
|
||||
|
||||
diff --git a/arch/riscv/boot/dts/spacemit/k1-musepi-pro.dts b/arch/riscv/boot/dts/spacemit/k1-musepi-pro.dts
|
||||
index 29e333b670cf..9a2d4ce58b67 100644
|
||||
--- a/arch/riscv/boot/dts/spacemit/k1-musepi-pro.dts
|
||||
+++ b/arch/riscv/boot/dts/spacemit/k1-musepi-pro.dts
|
||||
@@ -16,6 +16,8 @@ / {
|
||||
|
||||
aliases {
|
||||
ethernet0 = ð0;
|
||||
+ i2c2 = &i2c2;
|
||||
+ i2c8 = &i2c8;
|
||||
serial0 = &uart0;
|
||||
};
|
||||
|
||||
@@ -33,6 +35,58 @@ led1 {
|
||||
default-state = "on";
|
||||
};
|
||||
};
|
||||
+
|
||||
+ pcie_vcc_3v3: regulator-pcie-vcc3v3 {
|
||||
+ compatible = "regulator-fixed";
|
||||
+ regulator-name = "PCIE_VCC3V3";
|
||||
+ regulator-min-microvolt = <3300000>;
|
||||
+ regulator-max-microvolt = <3300000>;
|
||||
+ regulator-always-on;
|
||||
+ };
|
||||
+
|
||||
+ reg_dc_in: regulator-dc-in-12v {
|
||||
+ compatible = "regulator-fixed";
|
||||
+ regulator-name = "dc_in_12v";
|
||||
+ regulator-min-microvolt = <12000000>;
|
||||
+ regulator-max-microvolt = <12000000>;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-always-on;
|
||||
+ };
|
||||
+
|
||||
+ reg_vcc_4v: regulator-vcc-4v {
|
||||
+ compatible = "regulator-fixed";
|
||||
+ regulator-name = "vcc_4v";
|
||||
+ regulator-min-microvolt = <4000000>;
|
||||
+ regulator-max-microvolt = <4000000>;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-always-on;
|
||||
+ vin-supply = <®_dc_in>;
|
||||
+ };
|
||||
+
|
||||
+ regulator-usb3-vbus-5v {
|
||||
+ compatible = "regulator-fixed";
|
||||
+ regulator-name = "USB30_VBUS";
|
||||
+ regulator-min-microvolt = <5000000>;
|
||||
+ regulator-max-microvolt = <5000000>;
|
||||
+ regulator-always-on;
|
||||
+ gpio = <&gpio K1_GPIO(79) GPIO_ACTIVE_HIGH>;
|
||||
+ enable-active-high;
|
||||
+ };
|
||||
+
|
||||
+ usb3_hub_5v: regulator-usb3-hub-5v {
|
||||
+ compatible = "regulator-fixed";
|
||||
+ regulator-name = "USB30_HUB";
|
||||
+ regulator-min-microvolt = <5000000>;
|
||||
+ regulator-max-microvolt = <5000000>;
|
||||
+ gpio = <&gpio K1_GPIO(127) GPIO_ACTIVE_HIGH>;
|
||||
+ enable-active-high;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&combo_phy {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&pcie0_3_cfg>;
|
||||
+ status = "okay";
|
||||
};
|
||||
|
||||
&emmc {
|
||||
@@ -72,8 +126,224 @@ &pdma {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
+&qspi {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&qspi_cfg>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&i2c2 {
|
||||
+ pinctrl-0 = <&i2c2_0_cfg>;
|
||||
+ pinctrl-names = "default";
|
||||
+ status = "okay";
|
||||
+
|
||||
+ eeprom@50 {
|
||||
+ compatible = "atmel,24c02";
|
||||
+ reg = <0x50>;
|
||||
+ vcc-supply = <&buck3_1v8>; /* EEPROM_VCC1V8 */
|
||||
+ pagesize = <16>;
|
||||
+ read-only;
|
||||
+ size = <256>;
|
||||
+
|
||||
+ nvmem-layout {
|
||||
+ compatible = "onie,tlv-layout";
|
||||
+
|
||||
+ mac-address {
|
||||
+ #nvmem-cell-cells = <1>;
|
||||
+ };
|
||||
+
|
||||
+ num-macs {
|
||||
+ };
|
||||
+
|
||||
+ serial-number {
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&i2c8 {
|
||||
+ pinctrl-0 = <&i2c8_cfg>;
|
||||
+ pinctrl-names = "default";
|
||||
+ status = "okay";
|
||||
+
|
||||
+ pmic@41 {
|
||||
+ compatible = "spacemit,p1";
|
||||
+ reg = <0x41>;
|
||||
+ interrupts = <64>;
|
||||
+ vin1-supply = <®_vcc_4v>;
|
||||
+ vin2-supply = <®_vcc_4v>;
|
||||
+ vin3-supply = <®_vcc_4v>;
|
||||
+ vin4-supply = <®_vcc_4v>;
|
||||
+ vin5-supply = <®_vcc_4v>;
|
||||
+ vin6-supply = <®_vcc_4v>;
|
||||
+ aldoin-supply = <®_vcc_4v>;
|
||||
+ dldoin1-supply = <&buck5>;
|
||||
+ dldoin2-supply = <&buck5>;
|
||||
+
|
||||
+ regulators {
|
||||
+ buck1 {
|
||||
+ regulator-min-microvolt = <500000>;
|
||||
+ regulator-max-microvolt = <3450000>;
|
||||
+ regulator-ramp-delay = <5000>;
|
||||
+ regulator-always-on;
|
||||
+ };
|
||||
+
|
||||
+ buck2 {
|
||||
+ regulator-min-microvolt = <500000>;
|
||||
+ regulator-max-microvolt = <3450000>;
|
||||
+ regulator-ramp-delay = <5000>;
|
||||
+ regulator-always-on;
|
||||
+ };
|
||||
+
|
||||
+ buck3_1v8: buck3 {
|
||||
+ regulator-min-microvolt = <500000>;
|
||||
+ regulator-max-microvolt = <1800000>;
|
||||
+ regulator-ramp-delay = <5000>;
|
||||
+ regulator-always-on;
|
||||
+ };
|
||||
+
|
||||
+ buck4: buck4 {
|
||||
+ regulator-min-microvolt = <500000>;
|
||||
+ regulator-max-microvolt = <3300000>;
|
||||
+ regulator-ramp-delay = <5000>;
|
||||
+ regulator-always-on;
|
||||
+ };
|
||||
+
|
||||
+ buck5: buck5 {
|
||||
+ regulator-min-microvolt = <500000>;
|
||||
+ regulator-max-microvolt = <3450000>;
|
||||
+ regulator-ramp-delay = <5000>;
|
||||
+ regulator-always-on;
|
||||
+ };
|
||||
+
|
||||
+ buck6 {
|
||||
+ regulator-min-microvolt = <500000>;
|
||||
+ regulator-max-microvolt = <3450000>;
|
||||
+ regulator-ramp-delay = <5000>;
|
||||
+ regulator-always-on;
|
||||
+ };
|
||||
+
|
||||
+ aldo1: aldo1 {
|
||||
+ regulator-min-microvolt = <500000>;
|
||||
+ regulator-max-microvolt = <3400000>;
|
||||
+ regulator-boot-on;
|
||||
+ };
|
||||
+
|
||||
+ aldo2 {
|
||||
+ regulator-min-microvolt = <500000>;
|
||||
+ regulator-max-microvolt = <3400000>;
|
||||
+ };
|
||||
+
|
||||
+ aldo3 {
|
||||
+ regulator-min-microvolt = <500000>;
|
||||
+ regulator-max-microvolt = <3400000>;
|
||||
+ };
|
||||
+
|
||||
+ aldo4 {
|
||||
+ regulator-min-microvolt = <500000>;
|
||||
+ regulator-max-microvolt = <3400000>;
|
||||
+ };
|
||||
+
|
||||
+ dldo1 {
|
||||
+ regulator-min-microvolt = <500000>;
|
||||
+ regulator-max-microvolt = <3400000>;
|
||||
+ regulator-boot-on;
|
||||
+ };
|
||||
+
|
||||
+ dldo2 {
|
||||
+ regulator-min-microvolt = <500000>;
|
||||
+ regulator-max-microvolt = <3400000>;
|
||||
+ };
|
||||
+
|
||||
+ dldo3 {
|
||||
+ regulator-min-microvolt = <500000>;
|
||||
+ regulator-max-microvolt = <3400000>;
|
||||
+ };
|
||||
+
|
||||
+ dldo4 {
|
||||
+ regulator-min-microvolt = <500000>;
|
||||
+ regulator-max-microvolt = <3400000>;
|
||||
+ regulator-always-on;
|
||||
+ };
|
||||
+
|
||||
+ dldo5 {
|
||||
+ regulator-min-microvolt = <500000>;
|
||||
+ regulator-max-microvolt = <3400000>;
|
||||
+ };
|
||||
+
|
||||
+ dldo6 {
|
||||
+ regulator-min-microvolt = <500000>;
|
||||
+ regulator-max-microvolt = <3400000>;
|
||||
+ regulator-always-on;
|
||||
+ };
|
||||
+
|
||||
+ dldo7 {
|
||||
+ regulator-min-microvolt = <500000>;
|
||||
+ regulator-max-microvolt = <3400000>;
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&pcie1_phy {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&pcie1_3_cfg>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&pcie1_port {
|
||||
+ phys = <&pcie1_phy>;
|
||||
+};
|
||||
+
|
||||
+&pcie1 {
|
||||
+ vpcie3v3-supply = <&pcie_vcc_3v3>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&pcie2_phy {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&pcie2_4_cfg>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&pcie2_port {
|
||||
+ phys = <&pcie2_phy>;
|
||||
+};
|
||||
+
|
||||
+&pcie2 {
|
||||
+ vpcie3v3-supply = <&pcie_vcc_3v3>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
&uart0 {
|
||||
pinctrl-0 = <&uart0_2_cfg>;
|
||||
pinctrl-names = "default";
|
||||
status = "okay";
|
||||
};
|
||||
+
|
||||
+&usbphy2 {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&usb_dwc3 {
|
||||
+ dr_mode = "host";
|
||||
+ #address-cells = <1>;
|
||||
+ #size-cells = <0>;
|
||||
+ status = "okay";
|
||||
+
|
||||
+ hub_2_0: hub@1 {
|
||||
+ compatible = "usb2109,2817";
|
||||
+ reg = <0x1>;
|
||||
+ vdd-supply = <&usb3_hub_5v>;
|
||||
+ peer-hub = <&hub_3_0>;
|
||||
+ reset-gpios = <&gpio K1_GPIO(123) GPIO_ACTIVE_LOW>;
|
||||
+ };
|
||||
+
|
||||
+ hub_3_0: hub@2 {
|
||||
+ compatible = "usb2109,817";
|
||||
+ reg = <0x2>;
|
||||
+ vdd-supply = <&usb3_hub_5v>;
|
||||
+ peer-hub = <&hub_2_0>;
|
||||
+ reset-gpios = <&gpio K1_GPIO(123) GPIO_ACTIVE_LOW>;
|
||||
+ };
|
||||
+};
|
||||
--
|
||||
2.51.0
|
||||
|
||||
@ -0,0 +1,629 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Shuwei Wu <shuweiwoo@163.com>
|
||||
Date: Mon, 19 Jan 2026 10:41:23 +0800
|
||||
Subject: [PATCH v3 3/3] riscv: dts: spacemit: Add thermal sensor for K1 SoC
|
||||
|
||||
Include the Thermal Sensor node in the SpacemiT K1 dtsi
|
||||
with definitions for registers, clocks, and interrupts.
|
||||
Additionally, configure thermal zones for the soc, package, gpu, and
|
||||
clusters to enable temperature monitoring via the thermal framework.
|
||||
|
||||
Signed-off-by: Shuwei Wu <shuweiwoo@163.com>
|
||||
---
|
||||
Changes in v2:
|
||||
- Update compatible to "spacemit,k1-tsensor"
|
||||
---
|
||||
arch/riscv/boot/dts/spacemit/k1.dtsi | 101 +++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 101 insertions(+)
|
||||
|
||||
diff --git a/arch/riscv/boot/dts/spacemit/k1.dtsi b/arch/riscv/boot/dts/spacemit/k1.dtsi
|
||||
index 7818ca4979b6..0fe7396ea6e4 100644
|
||||
--- a/arch/riscv/boot/dts/spacemit/k1.dtsi
|
||||
+++ b/arch/riscv/boot/dts/spacemit/k1.dtsi
|
||||
@@ -338,6 +338,96 @@ osc_32k: clock-32k {
|
||||
};
|
||||
};
|
||||
|
||||
+ thermal-zones {
|
||||
+ soc-thermal {
|
||||
+ polling-delay-passive = <0>;
|
||||
+ polling-delay = <0>;
|
||||
+ thermal-sensors = <&thermal 0>;
|
||||
+
|
||||
+ trips {
|
||||
+ soc-crit {
|
||||
+ temperature = <115000>;
|
||||
+ hysteresis = <0>;
|
||||
+ type = "critical";
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ package-thermal {
|
||||
+ polling-delay-passive = <0>;
|
||||
+ polling-delay = <0>;
|
||||
+ thermal-sensors = <&thermal 1>;
|
||||
+
|
||||
+ trips {
|
||||
+ package-crit {
|
||||
+ temperature = <115000>;
|
||||
+ hysteresis = <0>;
|
||||
+ type = "critical";
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ gpu-thermal {
|
||||
+ polling-delay-passive = <100>;
|
||||
+ polling-delay = <0>;
|
||||
+ thermal-sensors = <&thermal 2>;
|
||||
+
|
||||
+ trips {
|
||||
+ gpu-alert {
|
||||
+ temperature = <85000>;
|
||||
+ hysteresis = <2000>;
|
||||
+ type = "passive";
|
||||
+ };
|
||||
+
|
||||
+ gpu-crit {
|
||||
+ temperature = <115000>;
|
||||
+ hysteresis = <0>;
|
||||
+ type = "critical";
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ cluster0-thermal {
|
||||
+ polling-delay-passive = <100>;
|
||||
+ polling-delay = <0>;
|
||||
+ thermal-sensors = <&thermal 3>;
|
||||
+
|
||||
+ trips {
|
||||
+ cluster0-alert {
|
||||
+ temperature = <85000>;
|
||||
+ hysteresis = <2000>;
|
||||
+ type = "passive";
|
||||
+ };
|
||||
+
|
||||
+ cluster0-crit {
|
||||
+ temperature = <115000>;
|
||||
+ hysteresis = <0>;
|
||||
+ type = "critical";
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ cluster1-thermal {
|
||||
+ polling-delay-passive = <100>;
|
||||
+ polling-delay = <0>;
|
||||
+ thermal-sensors = <&thermal 4>;
|
||||
+
|
||||
+ trips {
|
||||
+ cluster1-alert {
|
||||
+ temperature = <85000>;
|
||||
+ hysteresis = <2000>;
|
||||
+ type = "passive";
|
||||
+ };
|
||||
+
|
||||
+ cluster1-crit {
|
||||
+ temperature = <115000>;
|
||||
+ hysteresis = <0>;
|
||||
+ type = "critical";
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
soc {
|
||||
compatible = "simple-bus";
|
||||
interrupt-parent = <&plic>;
|
||||
@@ -434,6 +524,17 @@ syscon_apbc: system-controller@d4015000 {
|
||||
#reset-cells = <1>;
|
||||
};
|
||||
|
||||
+ thermal: thermal@d4018000 {
|
||||
+ compatible = "spacemit,k1-tsensor";
|
||||
+ reg = <0x0 0xd4018000 0x0 0x100>;
|
||||
+ clocks = <&syscon_apbc CLK_TSEN>,
|
||||
+ <&syscon_apbc CLK_TSEN_BUS>;
|
||||
+ clock-names = "core", "bus";
|
||||
+ interrupts = <61>;
|
||||
+ resets = <&syscon_apbc RESET_TSEN>;
|
||||
+ #thermal-sensor-cells = <1>;
|
||||
+ };
|
||||
+
|
||||
i2c6: i2c@d4018800 {
|
||||
compatible = "spacemit,k1-i2c";
|
||||
reg = <0x0 0xd4018800 0x0 0x38>;
|
||||
|
||||
--
|
||||
2.52.0
|
||||
|
||||
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Shuwei Wu <shuweiwoo@163.com>
|
||||
Date: Mon, 19 Jan 2026 10:41:21 +0800
|
||||
Subject: [PATCH v3 1/3] dt-bindings: thermal: Add SpacemiT K1 thermal
|
||||
sensor
|
||||
|
||||
Document the SpacemiT K1 Thermal Sensor, which supports
|
||||
monitoring temperatures for five zones: soc, package, gpu, cluster0,
|
||||
and cluster1.
|
||||
|
||||
Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>
|
||||
Signed-off-by: Shuwei Wu <shuweiwoo@163.com>
|
||||
---
|
||||
Changes in v2:
|
||||
- Rename binding file to spacemit,k1-tsensor.yaml and update compatible
|
||||
---
|
||||
.../bindings/thermal/spacemit,k1-tsensor.yaml | 76 ++++++++++++++++++++++
|
||||
1 file changed, 76 insertions(+)
|
||||
|
||||
diff --git a/Documentation/devicetree/bindings/thermal/spacemit,k1-tsensor.yaml b/Documentation/devicetree/bindings/thermal/spacemit,k1-tsensor.yaml
|
||||
new file mode 100644
|
||||
index 000000000000..328101a7f083
|
||||
--- /dev/null
|
||||
+++ b/Documentation/devicetree/bindings/thermal/spacemit,k1-tsensor.yaml
|
||||
@@ -0,0 +1,76 @@
|
||||
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
|
||||
+%YAML 1.2
|
||||
+---
|
||||
+$id: http://devicetree.org/schemas/thermal/spacemit,k1-tsensor.yaml#
|
||||
+$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
+
|
||||
+title: SpacemiT K1 Thermal Sensor
|
||||
+
|
||||
+description:
|
||||
+ The SpacemiT K1 Thermal Sensor monitors the temperature of the SoC
|
||||
+ using multiple internal sensors (e.g., soc, package, gpu, clusters).
|
||||
+
|
||||
+maintainers:
|
||||
+ - Shuwei Wu <shuweiwoo@163.com>
|
||||
+
|
||||
+$ref: thermal-sensor.yaml#
|
||||
+
|
||||
+properties:
|
||||
+ compatible:
|
||||
+ const: spacemit,k1-tsensor
|
||||
+
|
||||
+ reg:
|
||||
+ maxItems: 1
|
||||
+
|
||||
+ clocks:
|
||||
+ items:
|
||||
+ - description: Core clock for thermal sensor
|
||||
+ - description: Bus clock for thermal sensor
|
||||
+
|
||||
+ clock-names:
|
||||
+ items:
|
||||
+ - const: core
|
||||
+ - const: bus
|
||||
+
|
||||
+ interrupts:
|
||||
+ maxItems: 1
|
||||
+
|
||||
+ resets:
|
||||
+ items:
|
||||
+ - description: Reset for the thermal sensor
|
||||
+
|
||||
+ "#thermal-sensor-cells":
|
||||
+ const: 1
|
||||
+ description:
|
||||
+ The first cell indicates the sensor ID.
|
||||
+ 0 = soc
|
||||
+ 1 = package
|
||||
+ 2 = gpu
|
||||
+ 3 = cluster0
|
||||
+ 4 = cluster1
|
||||
+
|
||||
+required:
|
||||
+ - compatible
|
||||
+ - reg
|
||||
+ - clocks
|
||||
+ - clock-names
|
||||
+ - interrupts
|
||||
+ - resets
|
||||
+ - "#thermal-sensor-cells"
|
||||
+
|
||||
+additionalProperties: false
|
||||
+
|
||||
+examples:
|
||||
+ - |
|
||||
+ #include <dt-bindings/clock/spacemit,k1-syscon.h>
|
||||
+
|
||||
+ thermal@d4018000 {
|
||||
+ compatible = "spacemit,k1-tsensor";
|
||||
+ reg = <0xd4018000 0x100>;
|
||||
+ clocks = <&syscon_apbc CLK_TSEN>,
|
||||
+ <&syscon_apbc CLK_TSEN_BUS>;
|
||||
+ clock-names = "core", "bus";
|
||||
+ interrupts = <61>;
|
||||
+ resets = <&syscon_apbc RESET_TSEN>;
|
||||
+ #thermal-sensor-cells = <1>;
|
||||
+ };
|
||||
|
||||
--
|
||||
2.52.0
|
||||
|
||||
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Shuwei Wu <shuweiwoo@163.com>
|
||||
Date: Mon, 19 Jan 2026 10:41:22 +0800
|
||||
Subject: [PATCH v3 2/3] thermal: spacemit: k1: Add thermal sensor support
|
||||
|
||||
The thermal sensor on K1 supports monitoring five temperature zones.
|
||||
The driver registers these sensors with the thermal framework
|
||||
and supports standard operations:
|
||||
- Reading temperature (millidegree Celsius)
|
||||
- Setting high/low thresholds for interrupts
|
||||
|
||||
Signed-off-by: Shuwei Wu <shuweiwoo@163.com>
|
||||
---
|
||||
Changes in v3:
|
||||
- Align multi-line assignments as suggested by reviewer
|
||||
- Remove unnecessary variable definitions
|
||||
|
||||
Changes in v2:
|
||||
- Rename k1_thermal.c to k1_tsensor.c for better hardware alignment
|
||||
- Move driver to drivers/thermal/spacemit/
|
||||
- Add Kconfig/Makefile for spacemit and update top-level build files
|
||||
- Refactor names, style, code alignment, and comments
|
||||
- Simplify probe and error handling
|
||||
---
|
||||
drivers/thermal/Kconfig | 2 +
|
||||
drivers/thermal/Makefile | 1 +
|
||||
drivers/thermal/spacemit/Kconfig | 19 +++
|
||||
drivers/thermal/spacemit/Makefile | 3 +
|
||||
drivers/thermal/spacemit/k1_tsensor.c | 281 ++++++++++++++++++++++++++++++++++
|
||||
5 files changed, 306 insertions(+)
|
||||
|
||||
diff --git a/drivers/thermal/Kconfig b/drivers/thermal/Kconfig
|
||||
index b10080d61860..1c4a5cd5a23e 100644
|
||||
--- a/drivers/thermal/Kconfig
|
||||
+++ b/drivers/thermal/Kconfig
|
||||
@@ -472,6 +472,8 @@ endmenu
|
||||
|
||||
source "drivers/thermal/renesas/Kconfig"
|
||||
|
||||
+source "drivers/thermal/spacemit/Kconfig"
|
||||
+
|
||||
source "drivers/thermal/tegra/Kconfig"
|
||||
|
||||
config GENERIC_ADC_THERMAL
|
||||
diff --git a/drivers/thermal/Makefile b/drivers/thermal/Makefile
|
||||
index bb21e7ea7fc6..3b249195c088 100644
|
||||
--- a/drivers/thermal/Makefile
|
||||
+++ b/drivers/thermal/Makefile
|
||||
@@ -65,6 +65,7 @@ obj-y += mediatek/
|
||||
obj-$(CONFIG_GENERIC_ADC_THERMAL) += thermal-generic-adc.o
|
||||
obj-$(CONFIG_UNIPHIER_THERMAL) += uniphier_thermal.o
|
||||
obj-$(CONFIG_AMLOGIC_THERMAL) += amlogic_thermal.o
|
||||
+obj-y += spacemit/
|
||||
obj-$(CONFIG_SPRD_THERMAL) += sprd_thermal.o
|
||||
obj-$(CONFIG_KHADAS_MCU_FAN_THERMAL) += khadas_mcu_fan.o
|
||||
obj-$(CONFIG_LOONGSON2_THERMAL) += loongson2_thermal.o
|
||||
diff --git a/drivers/thermal/spacemit/Kconfig b/drivers/thermal/spacemit/Kconfig
|
||||
new file mode 100644
|
||||
index 000000000000..fbfd22f8fcd3
|
||||
--- /dev/null
|
||||
+++ b/drivers/thermal/spacemit/Kconfig
|
||||
@@ -0,0 +1,19 @@
|
||||
+# SPDX-License-Identifier: GPL-2.0-only
|
||||
+menu "SpacemiT thermal drivers"
|
||||
+depends on ARCH_SPACEMIT || COMPILE_TEST
|
||||
+
|
||||
+config SPACEMIT_K1_TSENSOR
|
||||
+ tristate "SpacemiT K1 thermal sensor driver"
|
||||
+ depends on ARCH_SPACEMIT || COMPILE_TEST
|
||||
+ help
|
||||
+ This driver provides support for the thermal sensor
|
||||
+ integrated in the SpacemiT K1 SoC.
|
||||
+
|
||||
+ The thermal sensor monitors temperatures for five thermal zones:
|
||||
+ soc, package, gpu, cluster0, and cluster1. It supports reporting
|
||||
+ temperature values and handling high/low threshold interrupts.
|
||||
+
|
||||
+ Say Y here if you want to enable thermal monitoring on SpacemiT K1.
|
||||
+ If compiled as a module, it will be called k1_tsensor.
|
||||
+
|
||||
+endmenu
|
||||
diff --git a/drivers/thermal/spacemit/Makefile b/drivers/thermal/spacemit/Makefile
|
||||
new file mode 100644
|
||||
index 000000000000..82b30741e4ec
|
||||
--- /dev/null
|
||||
+++ b/drivers/thermal/spacemit/Makefile
|
||||
@@ -0,0 +1,3 @@
|
||||
+# SPDX-License-Identifier: GPL-2.0-only
|
||||
+
|
||||
+obj-$(CONFIG_SPACEMIT_K1_TSENSOR) += k1_tsensor.o
|
||||
diff --git a/drivers/thermal/spacemit/k1_tsensor.c b/drivers/thermal/spacemit/k1_tsensor.c
|
||||
new file mode 100644
|
||||
index 000000000000..4788ab47a086
|
||||
--- /dev/null
|
||||
+++ b/drivers/thermal/spacemit/k1_tsensor.c
|
||||
@@ -0,0 +1,281 @@
|
||||
+// SPDX-License-Identifier: GPL-2.0
|
||||
+/*
|
||||
+ * Thermal sensor driver for SpacemiT K1 SoC
|
||||
+ *
|
||||
+ * Copyright (C) 2026 Shuwei Wu <shuweiwoo@163.com>
|
||||
+ */
|
||||
+#include <linux/bitfield.h>
|
||||
+#include <linux/clk.h>
|
||||
+#include <linux/err.h>
|
||||
+#include <linux/interrupt.h>
|
||||
+#include <linux/io.h>
|
||||
+#include <linux/kernel.h>
|
||||
+#include <linux/module.h>
|
||||
+#include <linux/of.h>
|
||||
+#include <linux/platform_device.h>
|
||||
+#include <linux/reset.h>
|
||||
+#include <linux/slab.h>
|
||||
+#include <linux/thermal.h>
|
||||
+
|
||||
+#include "../thermal_hwmon.h"
|
||||
+
|
||||
+#define K1_TSENSOR_PCTRL_REG 0x00
|
||||
+#define K1_TSENSOR_PCTRL_ENABLE BIT(0)
|
||||
+#define K1_TSENSOR_PCTRL_TEMP_MODE BIT(3)
|
||||
+#define K1_TSENSOR_PCTRL_RAW_SEL BIT(7)
|
||||
+
|
||||
+#define K1_TSENSOR_PCTRL_CTUNE GENMASK(11, 8)
|
||||
+#define K1_TSENSOR_PCTRL_SW_CTRL GENMASK(21, 18)
|
||||
+#define K1_TSENSOR_PCTRL_HW_AUTO_MODE BIT(23)
|
||||
+
|
||||
+#define K1_TSENSOR_EN_REG 0x08
|
||||
+#define K1_TSENSOR_EN_ALL GENMASK(MAX_SENSOR_NUMBER - 1, 0)
|
||||
+
|
||||
+#define K1_TSENSOR_TIME_REG 0x0C
|
||||
+#define K1_TSENSOR_TIME_WAIT_REF_CNT GENMASK(3, 0)
|
||||
+#define K1_TSENSOR_TIME_ADC_CNT_RST GENMASK(7, 4)
|
||||
+#define K1_TSENSOR_TIME_FILTER_PERIOD GENMASK(21, 20)
|
||||
+#define K1_TSENSOR_TIME_MASK GENMASK(23, 0)
|
||||
+
|
||||
+#define K1_TSENSOR_INT_CLR_REG 0x10
|
||||
+#define K1_TSENSOR_INT_EN_REG 0x14
|
||||
+#define K1_TSENSOR_INT_STA_REG 0x18
|
||||
+
|
||||
+#define K1_TSENSOR_INT_EN_MASK BIT(0)
|
||||
+#define K1_TSENSOR_INT_MASK(x) (GENMASK(2, 1) << ((x) * 2))
|
||||
+
|
||||
+#define K1_TSENSOR_DATA_BASE_REG 0x20
|
||||
+#define K1_TSENSOR_DATA_REG(x) (K1_TSENSOR_DATA_BASE_REG + ((x) / 2) * 4)
|
||||
+#define K1_TSENSOR_DATA_LOW_MASK GENMASK(15, 0)
|
||||
+#define K1_TSENSOR_DATA_HIGH_MASK GENMASK(31, 16)
|
||||
+
|
||||
+#define K1_TSENSOR_THRSH_BASE_REG 0x40
|
||||
+#define K1_TSENSOR_THRSH_REG(x) (K1_TSENSOR_THRSH_BASE_REG + ((x) * 4))
|
||||
+#define K1_TSENSOR_THRSH_LOW_MASK GENMASK(15, 0)
|
||||
+#define K1_TSENSOR_THRSH_HIGH_MASK GENMASK(31, 16)
|
||||
+
|
||||
+#define MAX_SENSOR_NUMBER 5
|
||||
+
|
||||
+/* Hardware offset value required for temperature calculation */
|
||||
+#define TEMPERATURE_OFFSET 278
|
||||
+
|
||||
+struct k1_tsensor_channel {
|
||||
+ struct k1_tsensor *ts;
|
||||
+ struct thermal_zone_device *tzd;
|
||||
+ int id;
|
||||
+};
|
||||
+
|
||||
+struct k1_tsensor {
|
||||
+ void __iomem *base;
|
||||
+ struct k1_tsensor_channel ch[MAX_SENSOR_NUMBER];
|
||||
+};
|
||||
+
|
||||
+static void k1_tsensor_init(struct k1_tsensor *ts)
|
||||
+{
|
||||
+ u32 val;
|
||||
+
|
||||
+ /* Disable all the interrupts */
|
||||
+ writel(0xffffffff, ts->base + K1_TSENSOR_INT_EN_REG);
|
||||
+
|
||||
+ /* Configure ADC sampling time and filter period */
|
||||
+ val = readl(ts->base + K1_TSENSOR_TIME_REG);
|
||||
+ val &= ~K1_TSENSOR_TIME_MASK;
|
||||
+ val |= K1_TSENSOR_TIME_FILTER_PERIOD |
|
||||
+ K1_TSENSOR_TIME_ADC_CNT_RST |
|
||||
+ K1_TSENSOR_TIME_WAIT_REF_CNT;
|
||||
+ writel(val, ts->base + K1_TSENSOR_TIME_REG);
|
||||
+
|
||||
+ /*
|
||||
+ * Enable all sensors' auto mode, enable dither control,
|
||||
+ * consecutive mode, and power up sensor.
|
||||
+ */
|
||||
+ val = readl(ts->base + K1_TSENSOR_PCTRL_REG);
|
||||
+ val &= ~K1_TSENSOR_PCTRL_SW_CTRL;
|
||||
+ val &= ~K1_TSENSOR_PCTRL_CTUNE;
|
||||
+ val |= K1_TSENSOR_PCTRL_RAW_SEL |
|
||||
+ K1_TSENSOR_PCTRL_TEMP_MODE |
|
||||
+ K1_TSENSOR_PCTRL_HW_AUTO_MODE |
|
||||
+ K1_TSENSOR_PCTRL_ENABLE;
|
||||
+ writel(val, ts->base + K1_TSENSOR_PCTRL_REG);
|
||||
+
|
||||
+ /* Enable thermal interrupt */
|
||||
+ val = readl(ts->base + K1_TSENSOR_INT_EN_REG);
|
||||
+ val |= K1_TSENSOR_INT_EN_MASK;
|
||||
+ writel(val, ts->base + K1_TSENSOR_INT_EN_REG);
|
||||
+
|
||||
+ /* Enable each sensor */
|
||||
+ val = readl(ts->base + K1_TSENSOR_EN_REG);
|
||||
+ val |= K1_TSENSOR_EN_ALL;
|
||||
+ writel(val, ts->base + K1_TSENSOR_EN_REG);
|
||||
+}
|
||||
+
|
||||
+static void k1_tsensor_enable_irq(struct k1_tsensor_channel *ch)
|
||||
+{
|
||||
+ struct k1_tsensor *ts = ch->ts;
|
||||
+ u32 val;
|
||||
+
|
||||
+ val = readl(ts->base + K1_TSENSOR_INT_CLR_REG);
|
||||
+ val |= K1_TSENSOR_INT_MASK(ch->id);
|
||||
+ writel(val, ts->base + K1_TSENSOR_INT_CLR_REG);
|
||||
+
|
||||
+ val = readl(ts->base + K1_TSENSOR_INT_EN_REG);
|
||||
+ val &= ~K1_TSENSOR_INT_MASK(ch->id);
|
||||
+ writel(val, ts->base + K1_TSENSOR_INT_EN_REG);
|
||||
+}
|
||||
+
|
||||
+/*
|
||||
+ * The conversion formula used is:
|
||||
+ * T(m°C) = (((raw_value & mask) >> shift) - TEMPERATURE_OFFSET) * 1000
|
||||
+ */
|
||||
+static int k1_tsensor_get_temp(struct thermal_zone_device *tz, int *temp)
|
||||
+{
|
||||
+ struct k1_tsensor_channel *ch = thermal_zone_device_priv(tz);
|
||||
+ struct k1_tsensor *ts = ch->ts;
|
||||
+ u32 val;
|
||||
+
|
||||
+ val = readl(ts->base + K1_TSENSOR_DATA_REG(ch->id));
|
||||
+ if (ch->id % 2)
|
||||
+ *temp = FIELD_GET(K1_TSENSOR_DATA_HIGH_MASK, val);
|
||||
+ else
|
||||
+ *temp = FIELD_GET(K1_TSENSOR_DATA_LOW_MASK, val);
|
||||
+
|
||||
+ *temp -= TEMPERATURE_OFFSET;
|
||||
+ *temp *= 1000;
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+/*
|
||||
+ * For each sensor, the hardware threshold register is 32 bits:
|
||||
+ * - Lower 16 bits [15:0] configure the low threshold temperature.
|
||||
+ * - Upper 16 bits [31:16] configure the high threshold temperature.
|
||||
+ */
|
||||
+static int k1_tsensor_set_trips(struct thermal_zone_device *tz, int low, int high)
|
||||
+{
|
||||
+ struct k1_tsensor_channel *ch = thermal_zone_device_priv(tz);
|
||||
+ struct k1_tsensor *ts = ch->ts;
|
||||
+ u32 val;
|
||||
+
|
||||
+ if (low >= high)
|
||||
+ return -EINVAL;
|
||||
+
|
||||
+ if (low < 0)
|
||||
+ low = 0;
|
||||
+
|
||||
+ high = high / 1000 + TEMPERATURE_OFFSET;
|
||||
+ low = low / 1000 + TEMPERATURE_OFFSET;
|
||||
+
|
||||
+ val = readl(ts->base + K1_TSENSOR_THRSH_REG(ch->id));
|
||||
+ val &= ~K1_TSENSOR_THRSH_HIGH_MASK;
|
||||
+ val |= FIELD_PREP(K1_TSENSOR_THRSH_HIGH_MASK, high);
|
||||
+
|
||||
+ val &= ~K1_TSENSOR_THRSH_LOW_MASK;
|
||||
+ val |= FIELD_PREP(K1_TSENSOR_THRSH_LOW_MASK, low);
|
||||
+ writel(val, ts->base + K1_TSENSOR_THRSH_REG(ch->id));
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static const struct thermal_zone_device_ops k1_tsensor_ops = {
|
||||
+ .get_temp = k1_tsensor_get_temp,
|
||||
+ .set_trips = k1_tsensor_set_trips,
|
||||
+};
|
||||
+
|
||||
+static irqreturn_t k1_tsensor_irq_thread(int irq, void *data)
|
||||
+{
|
||||
+ struct k1_tsensor *ts = (struct k1_tsensor *)data;
|
||||
+ int mask, status, i;
|
||||
+
|
||||
+ status = readl(ts->base + K1_TSENSOR_INT_STA_REG);
|
||||
+
|
||||
+ for (i = 0; i < MAX_SENSOR_NUMBER; i++) {
|
||||
+ if (status & K1_TSENSOR_INT_MASK(i)) {
|
||||
+ mask = readl(ts->base + K1_TSENSOR_INT_CLR_REG);
|
||||
+ mask |= K1_TSENSOR_INT_MASK(i);
|
||||
+ writel(mask, ts->base + K1_TSENSOR_INT_CLR_REG);
|
||||
+ thermal_zone_device_update(ts->ch[i].tzd, THERMAL_EVENT_UNSPECIFIED);
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ return IRQ_HANDLED;
|
||||
+}
|
||||
+
|
||||
+static int k1_tsensor_probe(struct platform_device *pdev)
|
||||
+{
|
||||
+ struct device *dev = &pdev->dev;
|
||||
+ struct k1_tsensor *ts;
|
||||
+ struct reset_control *reset;
|
||||
+ struct clk *clk;
|
||||
+ int i, irq, ret;
|
||||
+
|
||||
+ ts = devm_kzalloc(dev, sizeof(*ts), GFP_KERNEL);
|
||||
+ if (!ts)
|
||||
+ return -ENOMEM;
|
||||
+
|
||||
+ ts->base = devm_platform_ioremap_resource(pdev, 0);
|
||||
+ if (IS_ERR(ts->base))
|
||||
+ return dev_err_probe(dev, PTR_ERR(ts->base), "Failed to get reg\n");
|
||||
+
|
||||
+ reset = devm_reset_control_get_exclusive_deasserted(dev, NULL);
|
||||
+ if (IS_ERR(reset))
|
||||
+ return dev_err_probe(dev, PTR_ERR(reset), "Failed to get/deassert reset control\n");
|
||||
+
|
||||
+ clk = devm_clk_get_enabled(dev, "core");
|
||||
+ if (IS_ERR(clk))
|
||||
+ return dev_err_probe(dev, PTR_ERR(clk), "Failed to get core clock\n");
|
||||
+
|
||||
+ clk = devm_clk_get_enabled(dev, "bus");
|
||||
+ if (IS_ERR(clk))
|
||||
+ return dev_err_probe(dev, PTR_ERR(clk), "Failed to get bus clock\n");
|
||||
+
|
||||
+ k1_tsensor_init(ts);
|
||||
+
|
||||
+ for (i = 0; i < MAX_SENSOR_NUMBER; ++i) {
|
||||
+ ts->ch[i].id = i;
|
||||
+ ts->ch[i].ts = ts;
|
||||
+ ts->ch[i].tzd = devm_thermal_of_zone_register(dev, i, ts->ch + i, &k1_tsensor_ops);
|
||||
+ if (IS_ERR(ts->ch[i].tzd))
|
||||
+ return PTR_ERR(ts->ch[i].tzd);
|
||||
+
|
||||
+ /* Attach sysfs hwmon attributes for userspace monitoring */
|
||||
+ ret = devm_thermal_add_hwmon_sysfs(dev, ts->ch[i].tzd);
|
||||
+ if (ret)
|
||||
+ dev_warn(dev, "Failed to add hwmon sysfs attributes\n");
|
||||
+
|
||||
+ k1_tsensor_enable_irq(ts->ch + i);
|
||||
+ }
|
||||
+
|
||||
+ irq = platform_get_irq(pdev, 0);
|
||||
+ if (irq < 0)
|
||||
+ return irq;
|
||||
+
|
||||
+ ret = devm_request_threaded_irq(dev, irq, NULL,
|
||||
+ k1_tsensor_irq_thread,
|
||||
+ IRQF_ONESHOT, "k1_tsensor", ts);
|
||||
+ if (ret < 0)
|
||||
+ return ret;
|
||||
+
|
||||
+ platform_set_drvdata(pdev, ts);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static const struct of_device_id k1_tsensor_dt_ids[] = {
|
||||
+ { .compatible = "spacemit,k1-tsensor" },
|
||||
+ { /* sentinel */ }
|
||||
+};
|
||||
+
|
||||
+MODULE_DEVICE_TABLE(of, k1_tsensor_dt_ids);
|
||||
+
|
||||
+static struct platform_driver k1_tsensor_driver = {
|
||||
+ .driver = {
|
||||
+ .name = "k1_tsensor",
|
||||
+ .of_match_table = k1_tsensor_dt_ids,
|
||||
+ },
|
||||
+ .probe = k1_tsensor_probe,
|
||||
+};
|
||||
+module_platform_driver(k1_tsensor_driver);
|
||||
+
|
||||
+MODULE_DESCRIPTION("SpacemiT K1 Thermal Sensor Driver");
|
||||
+MODULE_AUTHOR("Shuwei Wu <shuweiwoo@163.com>");
|
||||
+MODULE_LICENSE("GPL");
|
||||
|
||||
--
|
||||
2.52.0
|
||||
|
||||
@ -0,0 +1,236 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Guodong Xu <guodong@riscstar.com>
|
||||
Date: Thu, 22 Jan 2026 17:43:43 +0800
|
||||
Subject: [PATCH 2/4] dt-bindings: mfd: spacemit,p1: Add individual
|
||||
regulator supply properties
|
||||
|
||||
Add supply properties that match the P1 PMIC's actual hardware topology
|
||||
where each buck converter has its own VIN pin and LDO groups share
|
||||
common input pins. Supply names are defined according to the pinout
|
||||
names in the P1 datasheet.
|
||||
|
||||
This allows different boards to describe their actual
|
||||
power tree connections in devicetree rather than hardcoding supply
|
||||
relationships in the driver.
|
||||
|
||||
Signed-off-by: Guodong Xu <guodong@riscstar.com>
|
||||
---
|
||||
.../devicetree/bindings/mfd/spacemit,p1.yaml | 58 +++++++++++++++++++++-
|
||||
1 file changed, 56 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/Documentation/devicetree/bindings/mfd/spacemit,p1.yaml b/Documentation/devicetree/bindings/mfd/spacemit,p1.yaml
|
||||
index c6593ac6ef6adb72fc48af570dc13fc9edf77ccb..abdc93b9a67b1872c8fe6955abd950622a0b69e8 100644
|
||||
--- a/Documentation/devicetree/bindings/mfd/spacemit,p1.yaml
|
||||
+++ b/Documentation/devicetree/bindings/mfd/spacemit,p1.yaml
|
||||
@@ -27,8 +27,41 @@ properties:
|
||||
interrupts:
|
||||
maxItems: 1
|
||||
|
||||
- vin-supply:
|
||||
- description: Input supply phandle.
|
||||
+ vin1-supply:
|
||||
+ description:
|
||||
+ Power supply for BUCK1. Required if BUCK1 is defined.
|
||||
+
|
||||
+ vin2-supply:
|
||||
+ description:
|
||||
+ Power supply for BUCK2. Required if BUCK2 is defined.
|
||||
+
|
||||
+ vin3-supply:
|
||||
+ description:
|
||||
+ Power supply for BUCK3. Required if BUCK3 is defined.
|
||||
+
|
||||
+ vin4-supply:
|
||||
+ description:
|
||||
+ Power supply for BUCK4. Required if BUCK4 is defined.
|
||||
+
|
||||
+ vin5-supply:
|
||||
+ description:
|
||||
+ Power supply for BUCK5. Required if BUCK5 is defined.
|
||||
+
|
||||
+ vin6-supply:
|
||||
+ description:
|
||||
+ Power supply for BUCK6. Required if BUCK6 is defined.
|
||||
+
|
||||
+ aldoin-supply:
|
||||
+ description:
|
||||
+ Power supply for ALDO1-4. Required if any are defined.
|
||||
+
|
||||
+ dldoin1-supply:
|
||||
+ description:
|
||||
+ Power supply for DLDO1-4. Required if any are defined.
|
||||
+
|
||||
+ dldoin2-supply:
|
||||
+ description:
|
||||
+ Power supply for DLDO5-7. Required if any are defined.
|
||||
|
||||
regulators:
|
||||
type: object
|
||||
@@ -50,6 +83,15 @@ unevaluatedProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
+ / {
|
||||
+ reg_vcc_5v: regulator-vcc-5v {
|
||||
+ compatible = "regulator-fixed";
|
||||
+ regulator-name = "vcc_5v";
|
||||
+ regulator-min-microvolt = <5000000>;
|
||||
+ regulator-max-microvolt = <5000000>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
i2c {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
@@ -58,6 +100,10 @@ examples:
|
||||
compatible = "spacemit,p1";
|
||||
reg = <0x41>;
|
||||
interrupts = <64>;
|
||||
+ vin1-supply = <®_vcc_5v>;
|
||||
+ vin5-supply = <®_vcc_5v>;
|
||||
+ aldoin-supply = <®_vcc_5v>;
|
||||
+ dldoin1-supply = <&buck5>;
|
||||
|
||||
regulators {
|
||||
buck1 {
|
||||
@@ -68,6 +114,14 @@ examples:
|
||||
regulator-always-on;
|
||||
};
|
||||
|
||||
+ buck5: buck5 {
|
||||
+ regulator-name = "buck5";
|
||||
+ regulator-min-microvolt = <500000>;
|
||||
+ regulator-max-microvolt = <3450000>;
|
||||
+ regulator-ramp-delay = <5000>;
|
||||
+ regulator-always-on;
|
||||
+ };
|
||||
+
|
||||
aldo1 {
|
||||
regulator-name = "aldo1";
|
||||
regulator-min-microvolt = <500000>;
|
||||
|
||||
--
|
||||
2.43.0
|
||||
|
||||
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Guodong Xu <guodong@riscstar.com>
|
||||
Date: Thu, 22 Jan 2026 17:43:44 +0800
|
||||
Subject: [PATCH 3/4] regulator: spacemit-p1: Update supply names
|
||||
|
||||
Update supply names to match the P1 PMIC's actual hardware pinout where
|
||||
each buck has an individual VIN pin (vin1-vin6) and LDO groups have
|
||||
dedicated input pins (aldoin, dldoin1, dldoin2).
|
||||
|
||||
The supply is a board design decision and should not be hardcoded to any
|
||||
existing power source. This allows boards to specify their actual power
|
||||
tree topology in devicetree.
|
||||
|
||||
Signed-off-by: Guodong Xu <guodong@riscstar.com>
|
||||
---
|
||||
drivers/regulator/spacemit-p1.c | 25 ++++++++++++++-----------
|
||||
1 file changed, 14 insertions(+), 11 deletions(-)
|
||||
|
||||
diff --git a/drivers/regulator/spacemit-p1.c b/drivers/regulator/spacemit-p1.c
|
||||
index 2b585ba01a93d0ce163c33e14c8022a506bdce11..57e6e00a73fa416fd6e557eb5bcada7dc69df444 100644
|
||||
--- a/drivers/regulator/spacemit-p1.c
|
||||
+++ b/drivers/regulator/spacemit-p1.c
|
||||
@@ -87,13 +87,16 @@ static const struct linear_range p1_ldo_ranges[] = {
|
||||
}
|
||||
|
||||
#define P1_BUCK_DESC(_n) \
|
||||
- P1_REG_DESC(BUCK, buck, _n, "vin", 0x47, BUCK_MASK, 255, p1_buck_ranges)
|
||||
+ P1_REG_DESC(BUCK, buck, _n, "vin" #_n, 0x47, BUCK_MASK, 255, p1_buck_ranges)
|
||||
|
||||
#define P1_ALDO_DESC(_n) \
|
||||
- P1_REG_DESC(ALDO, aldo, _n, "vin", 0x5b, LDO_MASK, 128, p1_ldo_ranges)
|
||||
+ P1_REG_DESC(ALDO, aldo, _n, "aldoin", 0x5b, LDO_MASK, 128, p1_ldo_ranges)
|
||||
|
||||
-#define P1_DLDO_DESC(_n) \
|
||||
- P1_REG_DESC(DLDO, dldo, _n, "buck5", 0x67, LDO_MASK, 128, p1_ldo_ranges)
|
||||
+#define P1_DLDO1_DESC(_n) \
|
||||
+ P1_REG_DESC(DLDO, dldo, _n, "dldoin1", 0x67, LDO_MASK, 128, p1_ldo_ranges)
|
||||
+
|
||||
+#define P1_DLDO2_DESC(_n) \
|
||||
+ P1_REG_DESC(DLDO, dldo, _n, "dldoin2", 0x67, LDO_MASK, 128, p1_ldo_ranges)
|
||||
|
||||
static const struct regulator_desc p1_regulator_desc[] = {
|
||||
P1_BUCK_DESC(1),
|
||||
@@ -108,13 +111,13 @@ static const struct regulator_desc p1_regulator_desc[] = {
|
||||
P1_ALDO_DESC(3),
|
||||
P1_ALDO_DESC(4),
|
||||
|
||||
- P1_DLDO_DESC(1),
|
||||
- P1_DLDO_DESC(2),
|
||||
- P1_DLDO_DESC(3),
|
||||
- P1_DLDO_DESC(4),
|
||||
- P1_DLDO_DESC(5),
|
||||
- P1_DLDO_DESC(6),
|
||||
- P1_DLDO_DESC(7),
|
||||
+ P1_DLDO1_DESC(1),
|
||||
+ P1_DLDO1_DESC(2),
|
||||
+ P1_DLDO1_DESC(3),
|
||||
+ P1_DLDO1_DESC(4),
|
||||
+ P1_DLDO2_DESC(5),
|
||||
+ P1_DLDO2_DESC(6),
|
||||
+ P1_DLDO2_DESC(7),
|
||||
};
|
||||
|
||||
static int p1_regulator_probe(struct platform_device *pdev)
|
||||
|
||||
--
|
||||
2.43.0
|
||||
|
||||
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Guodong Xu <guodong@riscstar.com>
|
||||
Date: Thu, 22 Jan 2026 17:43:45 +0800
|
||||
Subject: [PATCH 4/4] riscv: dts: spacemit: k1-bananapi-f3: Update PMIC
|
||||
supply properties
|
||||
|
||||
Update individual supply properties in pmic node to accurately specify
|
||||
the board's power tree topology.
|
||||
|
||||
Previously these relationships were hardcoded in the driver; now they
|
||||
are explicitly defined in the devicetree per the updated binding
|
||||
document spacemit,p1.yaml.
|
||||
|
||||
Signed-off-by: Guodong Xu <guodong@riscstar.com>
|
||||
---
|
||||
arch/riscv/boot/dts/spacemit/k1-bananapi-f3.dts | 12 ++++++++++--
|
||||
1 file changed, 10 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/arch/riscv/boot/dts/spacemit/k1-bananapi-f3.dts b/arch/riscv/boot/dts/spacemit/k1-bananapi-f3.dts
|
||||
index 02f218a16318e5b6f512bcc37035fac37c25ee84..c30697732b627d764bdae9bc8ba44d7b503f0897 100644
|
||||
--- a/arch/riscv/boot/dts/spacemit/k1-bananapi-f3.dts
|
||||
+++ b/arch/riscv/boot/dts/spacemit/k1-bananapi-f3.dts
|
||||
@@ -157,7 +157,15 @@ pmic@41 {
|
||||
compatible = "spacemit,p1";
|
||||
reg = <0x41>;
|
||||
interrupts = <64>;
|
||||
- vin-supply = <®_vcc_4v>;
|
||||
+ vin1-supply = <®_vcc_4v>;
|
||||
+ vin2-supply = <®_vcc_4v>;
|
||||
+ vin3-supply = <®_vcc_4v>;
|
||||
+ vin4-supply = <®_vcc_4v>;
|
||||
+ vin5-supply = <®_vcc_4v>;
|
||||
+ vin6-supply = <®_vcc_4v>;
|
||||
+ aldoin-supply = <®_vcc_4v>;
|
||||
+ dldoin1-supply = <&buck5>;
|
||||
+ dldoin2-supply = <&buck5>;
|
||||
|
||||
regulators {
|
||||
buck1 {
|
||||
@@ -188,7 +196,7 @@ buck4 {
|
||||
regulator-always-on;
|
||||
};
|
||||
|
||||
- buck5 {
|
||||
+ buck5: buck5 {
|
||||
regulator-min-microvolt = <500000>;
|
||||
regulator-max-microvolt = <3450000>;
|
||||
regulator-ramp-delay = <5000>;
|
||||
|
||||
--
|
||||
2.43.0
|
||||
|
||||
@ -0,0 +1,94 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Vinod Koul <vkoul@kernel.org>
|
||||
Subject: [PATCH] phy: move spacemit pcie driver to its subfolder
|
||||
Date: Mon, 23 Feb 2026 12:12:39 +0530
|
||||
|
||||
Commit fe4bc1a08638 ("phy: spacemit: support K1 USB2.0 PHY controller")
|
||||
created spacemit subfolder with usb driver while commit 57e920b92724
|
||||
("phy: spacemit: Introduce PCIe/combo PHY") added pcie driver in phy
|
||||
folder. Move latter into spacemit subfolder and rename file to
|
||||
phy-k1-pcie.c
|
||||
|
||||
Signed-off-by: Vinod Koul <vkoul@kernel.org>
|
||||
---
|
||||
drivers/phy/Kconfig | 12 ------------
|
||||
drivers/phy/Makefile | 1 -
|
||||
drivers/phy/spacemit/Kconfig | 12 ++++++++++++
|
||||
drivers/phy/spacemit/Makefile | 1 +
|
||||
.../phy-k1-pcie.c} | 0
|
||||
5 files changed, 13 insertions(+), 13 deletions(-)
|
||||
rename drivers/phy/{phy-spacemit-k1-pcie.c => spacemit/phy-k1-pcie.c} (100%)
|
||||
|
||||
diff --git a/drivers/phy/Kconfig b/drivers/phy/Kconfig
|
||||
index 02467dfd4fb0..c0574e44f0a3 100644
|
||||
--- a/drivers/phy/Kconfig
|
||||
+++ b/drivers/phy/Kconfig
|
||||
@@ -134,18 +134,6 @@ config PHY_NXP_PTN3222
|
||||
schemes. It supports all three USB 2.0 data rates: Low Speed, Full
|
||||
Speed and High Speed.
|
||||
|
||||
-config PHY_SPACEMIT_K1_PCIE
|
||||
- tristate "PCIe and combo PHY driver for the SpacemiT K1 SoC"
|
||||
- depends on ARCH_SPACEMIT || COMPILE_TEST
|
||||
- depends on COMMON_CLK
|
||||
- depends on HAS_IOMEM
|
||||
- depends on OF
|
||||
- select GENERIC_PHY
|
||||
- default ARCH_SPACEMIT
|
||||
- help
|
||||
- Enable support for the PCIe and USB 3 combo PHY and two
|
||||
- PCIe-only PHYs used in the SpacemiT K1 SoC.
|
||||
-
|
||||
source "drivers/phy/allwinner/Kconfig"
|
||||
source "drivers/phy/amlogic/Kconfig"
|
||||
source "drivers/phy/apple/Kconfig"
|
||||
diff --git a/drivers/phy/Makefile b/drivers/phy/Makefile
|
||||
index a648c2e02a83..2773d596e543 100644
|
||||
--- a/drivers/phy/Makefile
|
||||
+++ b/drivers/phy/Makefile
|
||||
@@ -16,7 +16,6 @@ obj-$(CONFIG_PHY_SNPS_EUSB2) += phy-snps-eusb2.o
|
||||
obj-$(CONFIG_USB_LGM_PHY) += phy-lgm-usb.o
|
||||
obj-$(CONFIG_PHY_AIROHA_PCIE) += phy-airoha-pcie.o
|
||||
obj-$(CONFIG_PHY_NXP_PTN3222) += phy-nxp-ptn3222.o
|
||||
-obj-$(CONFIG_PHY_SPACEMIT_K1_PCIE) += phy-spacemit-k1-pcie.o
|
||||
obj-$(CONFIG_GENERIC_PHY) += allwinner/ \
|
||||
amlogic/ \
|
||||
apple/ \
|
||||
diff --git a/drivers/phy/spacemit/Kconfig b/drivers/phy/spacemit/Kconfig
|
||||
index 0136aee2e8a2..50b0005acf66 100644
|
||||
--- a/drivers/phy/spacemit/Kconfig
|
||||
+++ b/drivers/phy/spacemit/Kconfig
|
||||
@@ -2,6 +2,18 @@
|
||||
#
|
||||
# Phy drivers for SpacemiT platforms
|
||||
#
|
||||
+config PHY_SPACEMIT_K1_PCIE
|
||||
+ tristate "PCIe and combo PHY driver for the SpacemiT K1 SoC"
|
||||
+ depends on ARCH_SPACEMIT || COMPILE_TEST
|
||||
+ depends on COMMON_CLK
|
||||
+ depends on HAS_IOMEM
|
||||
+ depends on OF
|
||||
+ select GENERIC_PHY
|
||||
+ default ARCH_SPACEMIT
|
||||
+ help
|
||||
+ Enable support for the PCIe and USB 3 combo PHY and two
|
||||
+ PCIe-only PHYs used in the SpacemiT K1 SoC.
|
||||
+
|
||||
config PHY_SPACEMIT_K1_USB2
|
||||
tristate "SpacemiT K1 USB 2.0 PHY support"
|
||||
depends on (ARCH_SPACEMIT || COMPILE_TEST) && OF
|
||||
diff --git a/drivers/phy/spacemit/Makefile b/drivers/phy/spacemit/Makefile
|
||||
index fec0b425a948..a821a21d6142 100644
|
||||
--- a/drivers/phy/spacemit/Makefile
|
||||
+++ b/drivers/phy/spacemit/Makefile
|
||||
@@ -1,2 +1,3 @@
|
||||
# SPDX-License-Identifier: GPL-2.0-only
|
||||
+obj-$(CONFIG_PHY_SPACEMIT_K1_PCIE) += phy-k1-pcie.o
|
||||
obj-$(CONFIG_PHY_SPACEMIT_K1_USB2) += phy-k1-usb2.o
|
||||
diff --git a/drivers/phy/phy-spacemit-k1-pcie.c b/drivers/phy/spacemit/phy-k1-pcie.c
|
||||
similarity index 100%
|
||||
rename from drivers/phy/phy-spacemit-k1-pcie.c
|
||||
rename to drivers/phy/spacemit/phy-k1-pcie.c
|
||||
--
|
||||
2.43.0
|
||||
|
||||
@ -0,0 +1,100 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Yixun Lan <dlan@kernel.org>
|
||||
Date: Thu, 26 Feb 2026 09:35:00 +0000
|
||||
Subject: [PATCH] riscv: dts: spacemit: adapt regulator node name to
|
||||
preferred form
|
||||
|
||||
The preferred node name for fixed-regulators has changed to pattern [1]:
|
||||
'^regulator(-[0-9]+v[0-9]+|-[0-9a-z-]+)?$'
|
||||
|
||||
Adjust all SpacemiT DT regulator node names to fix this.
|
||||
|
||||
Link: https://lore.kernel.org/r/20240426215147.3138211-1-robh@kernel.org [1]
|
||||
Signed-off-by: Yixun Lan <dlan@kernel.org>
|
||||
---
|
||||
In Review of adding DTS for OrangePi, Chukun mentioned fixed-regulator
|
||||
has preferred node names [1], so let's change it now.
|
||||
|
||||
This isn't strictly a bug, so I've not added the Fixes tag.
|
||||
|
||||
Link: https://lore.kernel.org/r/20260123145015.1926865-1-amadeus@jmu.edu.cn [1]
|
||||
---
|
||||
arch/riscv/boot/dts/spacemit/k1-bananapi-f3.dts | 10 +++++-----
|
||||
arch/riscv/boot/dts/spacemit/k1-milkv-jupiter.dts | 4 ++--
|
||||
2 files changed, 7 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/arch/riscv/boot/dts/spacemit/k1-bananapi-f3.dts b/arch/riscv/boot/dts/spacemit/k1-bananapi-f3.dts
|
||||
index 5971605754b3..d55f3e148ed2 100644
|
||||
--- a/arch/riscv/boot/dts/spacemit/k1-bananapi-f3.dts
|
||||
+++ b/arch/riscv/boot/dts/spacemit/k1-bananapi-f3.dts
|
||||
@@ -33,7 +33,7 @@ led1 {
|
||||
};
|
||||
};
|
||||
|
||||
- pcie_vcc_3v3: pcie-vcc3v3 {
|
||||
+ pcie_vcc_3v3: regulator-pcie-vcc3v3 {
|
||||
compatible = "regulator-fixed";
|
||||
regulator-name = "PCIE_VCC3V3";
|
||||
regulator-min-microvolt = <3300000>;
|
||||
@@ -41,7 +41,7 @@ pcie_vcc_3v3: pcie-vcc3v3 {
|
||||
regulator-always-on;
|
||||
};
|
||||
|
||||
- reg_dc_in: dc-in-12v {
|
||||
+ reg_dc_in: regulator-dc-in-12v {
|
||||
compatible = "regulator-fixed";
|
||||
regulator-name = "dc_in_12v";
|
||||
regulator-min-microvolt = <12000000>;
|
||||
@@ -50,7 +50,7 @@ reg_dc_in: dc-in-12v {
|
||||
regulator-always-on;
|
||||
};
|
||||
|
||||
- reg_vcc_4v: vcc-4v {
|
||||
+ reg_vcc_4v: regulator-vcc-4v {
|
||||
compatible = "regulator-fixed";
|
||||
regulator-name = "vcc_4v";
|
||||
regulator-min-microvolt = <4000000>;
|
||||
@@ -60,7 +60,7 @@ reg_vcc_4v: vcc-4v {
|
||||
vin-supply = <®_dc_in>;
|
||||
};
|
||||
|
||||
- usb3-vbus-5v {
|
||||
+ regulator-usb3-vbus-5v {
|
||||
compatible = "regulator-fixed";
|
||||
regulator-name = "USB30_VBUS";
|
||||
regulator-min-microvolt = <5000000>;
|
||||
@@ -70,7 +70,7 @@ usb3-vbus-5v {
|
||||
enable-active-high;
|
||||
};
|
||||
|
||||
- usb3_hub_5v: usb3-hub-5v {
|
||||
+ usb3_hub_5v: regulator-usb3-hub-5v {
|
||||
compatible = "regulator-fixed";
|
||||
regulator-name = "USB30_HUB";
|
||||
regulator-min-microvolt = <5000000>;
|
||||
diff --git a/arch/riscv/boot/dts/spacemit/k1-milkv-jupiter.dts b/arch/riscv/boot/dts/spacemit/k1-milkv-jupiter.dts
|
||||
index 800a112d5d70..931887aee8e0 100644
|
||||
--- a/arch/riscv/boot/dts/spacemit/k1-milkv-jupiter.dts
|
||||
+++ b/arch/riscv/boot/dts/spacemit/k1-milkv-jupiter.dts
|
||||
@@ -21,7 +21,7 @@ chosen {
|
||||
stdout-path = "serial0";
|
||||
};
|
||||
|
||||
- reg_dc_in: dc-in-12v {
|
||||
+ reg_dc_in: regulator-dc-in-12v {
|
||||
compatible = "regulator-fixed";
|
||||
regulator-name = "dc_in_12v";
|
||||
regulator-min-microvolt = <12000000>;
|
||||
@@ -30,7 +30,7 @@ reg_dc_in: dc-in-12v {
|
||||
regulator-always-on;
|
||||
};
|
||||
|
||||
- reg_vcc_4v: vcc-4v {
|
||||
+ reg_vcc_4v: regulator-vcc-4v {
|
||||
compatible = "regulator-fixed";
|
||||
regulator-name = "vcc_4v";
|
||||
regulator-min-microvolt = <4000000>;
|
||||
|
||||
--
|
||||
2.43.0
|
||||
|
||||
@ -0,0 +1,29 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Aurelien Jarno <aurelien@aurel32.net>
|
||||
Subject: [PATCH v5 2/2] mfd: simple-mfd-i2c: add a reboot cell for the SpacemiT P1 chip
|
||||
Date: Mon, 3 Nov 2025 00:02:00 +0100
|
||||
|
||||
Add a "spacemit-p1-reboot" cell for the SpacemiT P1 chip.
|
||||
|
||||
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
|
||||
---
|
||||
v5: no changes
|
||||
|
||||
drivers/mfd/simple-mfd-i2c.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/drivers/mfd/simple-mfd-i2c.c b/drivers/mfd/simple-mfd-i2c.c
|
||||
index 0a607a1e3ca1d..542d378cdcd1f 100644
|
||||
--- a/drivers/mfd/simple-mfd-i2c.c
|
||||
+++ b/drivers/mfd/simple-mfd-i2c.c
|
||||
@@ -99,6 +99,7 @@ static const struct regmap_config spacemit_p1_regmap_config = {
|
||||
};
|
||||
|
||||
static const struct mfd_cell spacemit_p1_cells[] = {
|
||||
+ { .name = "spacemit-p1-reboot", },
|
||||
{ .name = "spacemit-p1-regulator", },
|
||||
{ .name = "spacemit-p1-rtc", },
|
||||
};
|
||||
--
|
||||
2.47.2
|
||||
|
||||
@ -0,0 +1,60 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Yixun Lan <dlan@kernel.org>
|
||||
Subject: [PATCH v3] phy: k1-usb: add disconnect function support
|
||||
Date: Mon, 16 Feb 2026 23:26:53 +0800
|
||||
|
||||
A disconnect status BIT of USB2 PHY need to be cleared, otherwise
|
||||
it will fail to work properly during next connection when devices
|
||||
connect to roothub directly.
|
||||
|
||||
Fixes: fe4bc1a08638 ("phy: spacemit: support K1 USB2.0 PHY controller")
|
||||
Signed-off-by: Yixun Lan <dlan@kernel.org>
|
||||
---
|
||||
|
||||
Change in v3:
|
||||
- split from v2 as bug fix
|
||||
- fix alignment to open parenthesis
|
||||
- http://lore.kernel.org/r/20260216090112.n5jjpui3luqsybb5@skbuf
|
||||
- Link to v2: https://lore.kernel.org/r/20260214-11-k3-usb2-phy-v2-0-6ed31e031ab4@kernel.org
|
||||
---
|
||||
drivers/phy/spacemit/phy-k1-usb2.c | 14 ++++++++++++++
|
||||
1 file changed, 14 insertions(+)
|
||||
|
||||
diff --git a/drivers/phy/spacemit/phy-k1-usb2.c b/drivers/phy/spacemit/phy-k1-usb2.c
|
||||
index 342061380012..9215d0b223b2 100644
|
||||
--- a/drivers/phy/spacemit/phy-k1-usb2.c
|
||||
+++ b/drivers/phy/spacemit/phy-k1-usb2.c
|
||||
@@ -48,6 +48,9 @@
|
||||
#define PHY_CLK_HSTXP_EN BIT(3) /* clock hstxp enable */
|
||||
#define PHY_HSTXP_MODE BIT(4) /* 0: force en_txp to be 1; 1: no force */
|
||||
|
||||
+#define PHY_K1_HS_HOST_DISC 0x40
|
||||
+#define PHY_K1_HS_HOST_DISC_CLR BIT(0)
|
||||
+
|
||||
#define PHY_PLL_DIV_CFG 0x98
|
||||
#define PHY_FDIV_FRACT_8_15 GENMASK(7, 0)
|
||||
#define PHY_FDIV_FRACT_16_19 GENMASK(11, 8)
|
||||
@@ -142,9 +145,20 @@ static int spacemit_usb2phy_exit(struct phy *phy)
|
||||
return 0;
|
||||
}
|
||||
|
||||
+static int spacemit_usb2phy_disconnect(struct phy *phy, int port)
|
||||
+{
|
||||
+ struct spacemit_usb2phy *sphy = phy_get_drvdata(phy);
|
||||
+
|
||||
+ regmap_update_bits(sphy->regmap_base, PHY_K1_HS_HOST_DISC,
|
||||
+ PHY_K1_HS_HOST_DISC_CLR, PHY_K1_HS_HOST_DISC_CLR);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
static const struct phy_ops spacemit_usb2phy_ops = {
|
||||
.init = spacemit_usb2phy_init,
|
||||
.exit = spacemit_usb2phy_exit,
|
||||
+ .disconnect = spacemit_usb2phy_disconnect,
|
||||
.owner = THIS_MODULE,
|
||||
};
|
||||
|
||||
--
|
||||
2.52.0
|
||||
|
||||
Loading…
Reference in New Issue
Block a user