* [PATCH 0/3] Generic SPMI NVMEM cell driver
@ 2025-04-15 21:52 Sasha Finkelstein via B4 Relay
2025-04-15 21:52 ` [PATCH 1/3] dt-bindings: spmi: Add generic SPMI NVMEM Sasha Finkelstein via B4 Relay
` (2 more replies)
0 siblings, 3 replies; 16+ messages in thread
From: Sasha Finkelstein via B4 Relay @ 2025-04-15 21:52 UTC (permalink / raw)
To: Sven Peter, Janne Grunau, Alyssa Rosenzweig, Neal Gompa,
Srinivas Kandagatla, Rob Herring, Krzysztof Kozlowski,
Conor Dooley
Cc: asahi, linux-arm-kernel, devicetree, linux-kernel,
Sasha Finkelstein, Hector Martin
Hi.
This patch series adds a driver for exposing a set of SPMI registers
as NVMEM cells. This is used on Apple ARM platforms to store the RTC
offset and to communicate platform power state between the OS and
boot firmware.
The NVMEM cell consumer drivers will be sent in a further series.
Signed-off-by: Sasha Finkelstein <fnkl.kernel@gmail.com>
---
Hector Martin (2):
nvmem: Add spmi-nvmem driver
arm64: dts: apple: Add PMU NVMEM
Sasha Finkelstein (1):
dt-bindings: spmi: Add generic SPMI NVMEM
.../devicetree/bindings/nvmem/spmi-nvmem.yaml | 44 +++++++++++++++
MAINTAINERS | 2 +
arch/arm64/boot/dts/apple/t6001.dtsi | 1 +
arch/arm64/boot/dts/apple/t6002.dtsi | 1 +
arch/arm64/boot/dts/apple/t600x-die0.dtsi | 50 +++++++++++++++++
arch/arm64/boot/dts/apple/t8103.dtsi | 50 +++++++++++++++++
arch/arm64/boot/dts/apple/t8112.dtsi | 50 +++++++++++++++++
drivers/nvmem/Kconfig | 14 +++++
drivers/nvmem/Makefile | 2 +
drivers/nvmem/spmi-nvmem.c | 62 ++++++++++++++++++++++
10 files changed, 276 insertions(+)
---
base-commit: 2e0e70c95077172b29a5b13716c4b159d578e82c
change-id: 20250415-spmi-nvmem-e08635316175
Best regards,
--
Sasha Finkelstein <fnkl.kernel@gmail.com>
^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH 1/3] dt-bindings: spmi: Add generic SPMI NVMEM
2025-04-15 21:52 [PATCH 0/3] Generic SPMI NVMEM cell driver Sasha Finkelstein via B4 Relay
@ 2025-04-15 21:52 ` Sasha Finkelstein via B4 Relay
2025-04-16 0:18 ` Nick Chan
2025-04-15 21:52 ` [PATCH 2/3] nvmem: Add spmi-nvmem driver Sasha Finkelstein via B4 Relay
2025-04-15 21:52 ` [PATCH 3/3] arm64: dts: apple: Add PMU NVMEM Sasha Finkelstein via B4 Relay
2 siblings, 1 reply; 16+ messages in thread
From: Sasha Finkelstein via B4 Relay @ 2025-04-15 21:52 UTC (permalink / raw)
To: Sven Peter, Janne Grunau, Alyssa Rosenzweig, Neal Gompa,
Srinivas Kandagatla, Rob Herring, Krzysztof Kozlowski,
Conor Dooley
Cc: asahi, linux-arm-kernel, devicetree, linux-kernel,
Sasha Finkelstein
From: Sasha Finkelstein <fnkl.kernel@gmail.com>
Add bindings for exposing SPMI registers as NVMEM cells
Signed-off-by: Sasha Finkelstein <fnkl.kernel@gmail.com>
---
.../devicetree/bindings/nvmem/spmi-nvmem.yaml | 44 ++++++++++++++++++++++
MAINTAINERS | 1 +
2 files changed, 45 insertions(+)
diff --git a/Documentation/devicetree/bindings/nvmem/spmi-nvmem.yaml b/Documentation/devicetree/bindings/nvmem/spmi-nvmem.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..0041babefc37ed4d82d7d6f68fc67d29eed53d9f
--- /dev/null
+++ b/Documentation/devicetree/bindings/nvmem/spmi-nvmem.yaml
@@ -0,0 +1,44 @@
+# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/nvmem/spmi-nvmem.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Generic SPMI NVMEM
+
+description: Exports a series of SPMI registers as NVMEM cells
+
+maintainers:
+ - Sasha Finkelstein <fnkl.kernel@gmail.com>
+
+allOf:
+ - $ref: nvmem.yaml#
+
+properties:
+ compatible:
+ items:
+ - enum:
+ - apple,maverick-pmu
+ - apple,sera-pmu
+ - apple,stowe-pmu
+ - const: spmi-nvmem
+
+ reg:
+ maxItems: 1
+
+required:
+ - compatible
+ - reg
+
+unevaluatedProperties: false
+
+examples:
+ - |
+ #include <dt-bindings/spmi/spmi.h>
+
+ pmu@f {
+ compatible = "apple,maverick-pmu", "spmi-nvmem";
+ reg = <0xf SPMI_USID>;
+ };
+
+...
diff --git a/MAINTAINERS b/MAINTAINERS
index 96b82704950184bd71623ff41fc4df31e4c7fe87..e7b2d0df81b387ba5398957131971588dc7b89dc 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -2277,6 +2277,7 @@ F: Documentation/devicetree/bindings/mailbox/apple,mailbox.yaml
F: Documentation/devicetree/bindings/net/bluetooth/brcm,bcm4377-bluetooth.yaml
F: Documentation/devicetree/bindings/nvme/apple,nvme-ans.yaml
F: Documentation/devicetree/bindings/nvmem/apple,efuses.yaml
+F: Documentation/devicetree/bindings/nvmem/spmi-nvmem.yaml
F: Documentation/devicetree/bindings/pci/apple,pcie.yaml
F: Documentation/devicetree/bindings/pinctrl/apple,pinctrl.yaml
F: Documentation/devicetree/bindings/power/apple*
--
2.49.0
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH 2/3] nvmem: Add spmi-nvmem driver
2025-04-15 21:52 [PATCH 0/3] Generic SPMI NVMEM cell driver Sasha Finkelstein via B4 Relay
2025-04-15 21:52 ` [PATCH 1/3] dt-bindings: spmi: Add generic SPMI NVMEM Sasha Finkelstein via B4 Relay
@ 2025-04-15 21:52 ` Sasha Finkelstein via B4 Relay
2025-04-16 1:40 ` Neal Gompa
` (2 more replies)
2025-04-15 21:52 ` [PATCH 3/3] arm64: dts: apple: Add PMU NVMEM Sasha Finkelstein via B4 Relay
2 siblings, 3 replies; 16+ messages in thread
From: Sasha Finkelstein via B4 Relay @ 2025-04-15 21:52 UTC (permalink / raw)
To: Sven Peter, Janne Grunau, Alyssa Rosenzweig, Neal Gompa,
Srinivas Kandagatla, Rob Herring, Krzysztof Kozlowski,
Conor Dooley
Cc: asahi, linux-arm-kernel, devicetree, linux-kernel,
Sasha Finkelstein, Hector Martin
From: Hector Martin <marcan@marcan.st>
This driver exposes a SPMI device as an NVMEM device.
It is intended to be used with e.g. PMUs/PMICs that are used to
hold power management configuration, such as used on Apple Silicon
Macs.
Signed-off-by: Hector Martin <marcan@marcan.st>
Signed-off-by: Sasha Finkelstein <fnkl.kernel@gmail.com>
---
MAINTAINERS | 1 +
drivers/nvmem/Kconfig | 14 +++++++++++
drivers/nvmem/Makefile | 2 ++
drivers/nvmem/spmi-nvmem.c | 62 ++++++++++++++++++++++++++++++++++++++++++++++
4 files changed, 79 insertions(+)
diff --git a/MAINTAINERS b/MAINTAINERS
index e7b2d0df81b387ba5398957131971588dc7b89dc..63c12f901aed1f3e6de8227d6db34af1bd046fe6 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -2298,6 +2298,7 @@ F: drivers/iommu/io-pgtable-dart.c
F: drivers/irqchip/irq-apple-aic.c
F: drivers/nvme/host/apple.c
F: drivers/nvmem/apple-efuses.c
+F: drivers/nvmem/spmi-nvmem.c
F: drivers/pinctrl/pinctrl-apple-gpio.c
F: drivers/pwm/pwm-apple.c
F: drivers/soc/apple/*
diff --git a/drivers/nvmem/Kconfig b/drivers/nvmem/Kconfig
index 8671b7c974b933e147154bb40b5d41b5730518d2..9ec907d8aa6ef7df0ea45cc35e92d8239d2705ee 100644
--- a/drivers/nvmem/Kconfig
+++ b/drivers/nvmem/Kconfig
@@ -310,6 +310,20 @@ config NVMEM_SNVS_LPGPR
This driver can also be built as a module. If so, the module
will be called nvmem-snvs-lpgpr.
+config NVMEM_SPMI
+ tristate "Generic SPMI NVMEM"
+ default ARCH_APPLE
+ depends on SPMI
+ select REGMAP_SPMI
+ help
+ Say y here to build a generic driver to expose a SPMI device
+ as a NVMEM provider. This can be used for PMIC/PMU devices which
+ are used to store power and RTC-related settings on certain
+ platforms, such as Apple Silicon Macs.
+
+ This driver can also be built as a module. If so, the module
+ will be called nvmem-spmi.
+
config NVMEM_SPMI_SDAM
tristate "SPMI SDAM Support"
depends on SPMI
diff --git a/drivers/nvmem/Makefile b/drivers/nvmem/Makefile
index 5b77bbb6488bf89bfb305750a1cbf4a6731a0a58..b639f4284184db026bb27b11e04d54b8f7ff166f 100644
--- a/drivers/nvmem/Makefile
+++ b/drivers/nvmem/Makefile
@@ -64,6 +64,8 @@ obj-$(CONFIG_NVMEM_SC27XX_EFUSE) += nvmem-sc27xx-efuse.o
nvmem-sc27xx-efuse-y := sc27xx-efuse.o
obj-$(CONFIG_NVMEM_SNVS_LPGPR) += nvmem_snvs_lpgpr.o
nvmem_snvs_lpgpr-y := snvs_lpgpr.o
+obj-$(CONFIG_NVMEM_SPMI) += nvmem_spmi.o
+nvmem_spmi-y := spmi-nvmem.o
obj-$(CONFIG_NVMEM_SPMI_SDAM) += nvmem_qcom-spmi-sdam.o
nvmem_qcom-spmi-sdam-y += qcom-spmi-sdam.o
obj-$(CONFIG_NVMEM_SPRD_EFUSE) += nvmem_sprd_efuse.o
diff --git a/drivers/nvmem/spmi-nvmem.c b/drivers/nvmem/spmi-nvmem.c
new file mode 100644
index 0000000000000000000000000000000000000000..fff6162cb22dd7ab45883f004f5b63ebae014698
--- /dev/null
+++ b/drivers/nvmem/spmi-nvmem.c
@@ -0,0 +1,62 @@
+// SPDX-License-Identifier: GPL-2.0-only OR MIT
+/*
+ * Generic SPMI NVMEM driver
+ *
+ * Copyright The Asahi Linux Contributors
+ */
+
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/nvmem-provider.h>
+#include <linux/of.h>
+#include <linux/spmi.h>
+#include <linux/regmap.h>
+
+static const struct regmap_config spmi_regmap_config = {
+ .reg_bits = 16,
+ .val_bits = 8,
+ .max_register = 0xffff,
+};
+
+static int spmi_nvmem_probe(struct spmi_device *sdev)
+{
+ struct regmap *regmap;
+ struct nvmem_config nvmem_cfg = {
+ .dev = &sdev->dev,
+ .name = "spmi_nvmem",
+ .id = NVMEM_DEVID_AUTO,
+ .word_size = 1,
+ .stride = 1,
+ .size = 0xffff,
+ .reg_read = (void *)regmap_bulk_read,
+ .reg_write = (void *)regmap_bulk_write,
+ };
+
+ regmap = devm_regmap_init_spmi_ext(sdev, &spmi_regmap_config);
+ if (IS_ERR(regmap))
+ return PTR_ERR(regmap);
+
+ nvmem_cfg.priv = regmap;
+
+ return PTR_ERR_OR_ZERO(devm_nvmem_register(&sdev->dev, &nvmem_cfg));
+}
+
+static const struct of_device_id spmi_nvmem_id_table[] = {
+ { .compatible = "spmi-nvmem" },
+ { },
+};
+MODULE_DEVICE_TABLE(of, spmi_nvmem_id_table);
+
+static struct spmi_driver spmi_nvmem_driver = {
+ .probe = spmi_nvmem_probe,
+ .driver = {
+ .name = "spmi-nvmem",
+ .of_match_table = spmi_nvmem_id_table,
+ },
+};
+
+module_spmi_driver(spmi_nvmem_driver);
+
+MODULE_LICENSE("Dual MIT/GPL");
+MODULE_AUTHOR("Hector Martin <marcan@marcan.st>");
+MODULE_DESCRIPTION("SPMI NVMEM driver");
--
2.49.0
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH 3/3] arm64: dts: apple: Add PMU NVMEM
2025-04-15 21:52 [PATCH 0/3] Generic SPMI NVMEM cell driver Sasha Finkelstein via B4 Relay
2025-04-15 21:52 ` [PATCH 1/3] dt-bindings: spmi: Add generic SPMI NVMEM Sasha Finkelstein via B4 Relay
2025-04-15 21:52 ` [PATCH 2/3] nvmem: Add spmi-nvmem driver Sasha Finkelstein via B4 Relay
@ 2025-04-15 21:52 ` Sasha Finkelstein via B4 Relay
2025-04-16 0:28 ` Nick Chan
2 siblings, 1 reply; 16+ messages in thread
From: Sasha Finkelstein via B4 Relay @ 2025-04-15 21:52 UTC (permalink / raw)
To: Sven Peter, Janne Grunau, Alyssa Rosenzweig, Neal Gompa,
Srinivas Kandagatla, Rob Herring, Krzysztof Kozlowski,
Conor Dooley
Cc: asahi, linux-arm-kernel, devicetree, linux-kernel,
Sasha Finkelstein, Hector Martin
From: Hector Martin <marcan@marcan.st>
Add device tree entries for NVMEM cells present on the PMU
Signed-off-by: Hector Martin <marcan@marcan.st>
Signed-off-by: Sasha Finkelstein <fnkl.kernel@gmail.com>
---
arch/arm64/boot/dts/apple/t6001.dtsi | 1 +
arch/arm64/boot/dts/apple/t6002.dtsi | 1 +
arch/arm64/boot/dts/apple/t600x-die0.dtsi | 50 +++++++++++++++++++++++++++++++
arch/arm64/boot/dts/apple/t8103.dtsi | 50 +++++++++++++++++++++++++++++++
arch/arm64/boot/dts/apple/t8112.dtsi | 50 +++++++++++++++++++++++++++++++
5 files changed, 152 insertions(+)
diff --git a/arch/arm64/boot/dts/apple/t6001.dtsi b/arch/arm64/boot/dts/apple/t6001.dtsi
index 620b17e4031f069874aaabadbf06b7b29ec4031e..d2cf81926f284ccf7627701cc82edff31d4d72d6 100644
--- a/arch/arm64/boot/dts/apple/t6001.dtsi
+++ b/arch/arm64/boot/dts/apple/t6001.dtsi
@@ -11,6 +11,7 @@
#include <dt-bindings/interrupt-controller/apple-aic.h>
#include <dt-bindings/interrupt-controller/irq.h>
#include <dt-bindings/pinctrl/apple.h>
+#include <dt-bindings/spmi/spmi.h>
#include "multi-die-cpp.h"
diff --git a/arch/arm64/boot/dts/apple/t6002.dtsi b/arch/arm64/boot/dts/apple/t6002.dtsi
index a963a5011799a0480f88688fb4372a31f0bbf806..e36f422d257d8fe3a62bfa6e0f0e0dc6c34608a4 100644
--- a/arch/arm64/boot/dts/apple/t6002.dtsi
+++ b/arch/arm64/boot/dts/apple/t6002.dtsi
@@ -11,6 +11,7 @@
#include <dt-bindings/interrupt-controller/apple-aic.h>
#include <dt-bindings/interrupt-controller/irq.h>
#include <dt-bindings/pinctrl/apple.h>
+#include <dt-bindings/spmi/spmi.h>
#include "multi-die-cpp.h"
diff --git a/arch/arm64/boot/dts/apple/t600x-die0.dtsi b/arch/arm64/boot/dts/apple/t600x-die0.dtsi
index 4c224e686ffe5602329f7f394d3354559c4130ab..9e4402b0bdc085a32d26048ccf1ac4ea20c1e0c2 100644
--- a/arch/arm64/boot/dts/apple/t600x-die0.dtsi
+++ b/arch/arm64/boot/dts/apple/t600x-die0.dtsi
@@ -50,6 +50,56 @@ nub_spmi0: spmi@2920a1300 {
reg = <0x2 0x920a1300 0x0 0x100>;
#address-cells = <2>;
#size-cells = <0>;
+
+ pmu1: pmu@f {
+ compatible = "apple,maverick-pmu", "spmi-nvmem";
+ reg = <0xf SPMI_USID>;
+
+ nvmem-layout {
+ compatible = "fixed-layout";
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ pm_setting: pm-setting@1405 {
+ reg = <0x1405 0x1>;
+ };
+
+ rtc_offset: rtc-offset@1411 {
+ reg = <0x1411 0x6>;
+ };
+
+ boot_stage: boot-stage@6001 {
+ reg = <0x6001 0x1>;
+ };
+
+ boot_error_count: boot-error-count@6002 {
+ reg = <0x6002 0x1>;
+ bits = <0 4>;
+ };
+
+ panic_count: panic-count@6002 {
+ reg = <0x6002 0x1>;
+ bits = <4 4>;
+ };
+
+ boot_error_stage: boot-error-stage@6003 {
+ reg = <0x6003 0x1>;
+ };
+
+ shutdown_flag: shutdown-flag@600f {
+ reg = <0x600f 0x1>;
+ bits = <3 1>;
+ };
+
+ fault_shadow: fault-shadow@867b {
+ reg = <0x867b 0x10>;
+ };
+
+ socd: socd@8b00 {
+ reg = <0x8b00 0x400>;
+ };
+ };
+ };
};
wdt: watchdog@2922b0000 {
diff --git a/arch/arm64/boot/dts/apple/t8103.dtsi b/arch/arm64/boot/dts/apple/t8103.dtsi
index bdb1cb9e406a441e458b1c735359b0148146e91b..03bfe1cb173de009b4cd46508e24358008cf42f5 100644
--- a/arch/arm64/boot/dts/apple/t8103.dtsi
+++ b/arch/arm64/boot/dts/apple/t8103.dtsi
@@ -747,6 +747,56 @@ nub_spmi: spmi@23d0d9300 {
reg = <0x2 0x3d0d9300 0x0 0x100>;
#address-cells = <2>;
#size-cells = <0>;
+
+ pmu1: pmu@f {
+ compatible = "apple,sera-pmu", "spmi-nvmem";
+ reg = <0xf SPMI_USID>;
+
+ nvmem-layout {
+ compatible = "fixed-layout";
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ pm_setting: pm-setting@d001 {
+ reg = <0xd001 0x1>;
+ };
+
+ rtc_offset: rtc-offset@d100 {
+ reg = <0xd100 0x6>;
+ };
+
+ boot_stage: boot-stage@9f01 {
+ reg = <0x9f01 0x1>;
+ };
+
+ boot_error_count: boot-error-count@9f02 {
+ reg = <0x9f02 0x1>;
+ bits = <0 4>;
+ };
+
+ panic_count: panic-count@9f02 {
+ reg = <0x9f02 0x1>;
+ bits = <4 4>;
+ };
+
+ boot_error_stage: boot-error-stage@9f03 {
+ reg = <0x9f03 0x1>;
+ };
+
+ shutdown_flag: shutdown-flag@9f0f {
+ reg = <0x9f0f 0x1>;
+ bits = <3 1>;
+ };
+
+ fault_shadow: fault-shadow@a67b {
+ reg = <0xa67b 0x10>;
+ };
+
+ socd: socd@ab00 {
+ reg = <0xab00 0x400>;
+ };
+ };
+ };
};
pinctrl_nub: pinctrl@23d1f0000 {
diff --git a/arch/arm64/boot/dts/apple/t8112.dtsi b/arch/arm64/boot/dts/apple/t8112.dtsi
index 950d1f906ba3023c1d118179207a2099345aae94..55ab72cf627efe2e3295409b9af1b2128b829801 100644
--- a/arch/arm64/boot/dts/apple/t8112.dtsi
+++ b/arch/arm64/boot/dts/apple/t8112.dtsi
@@ -787,6 +787,56 @@ nub_spmi: spmi@23d714000 {
reg = <0x2 0x3d714000 0x0 0x100>;
#address-cells = <2>;
#size-cells = <0>;
+
+ pmu1: pmu@e {
+ compatible = "apple,stowe-pmu", "spmi-nvmem";
+ reg = <0xe SPMI_USID>;
+
+ nvmem-layout {
+ compatible = "fixed-layout";
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ pm_setting: pm-setting@f801 {
+ reg = <0xf801 0x1>;
+ };
+
+ rtc_offset: rtc-offset@f900 {
+ reg = <0xf900 0x6>;
+ };
+
+ boot_stage: boot-stage@f701 {
+ reg = <0xf701 0x1>;
+ };
+
+ boot_error_count: boot-error-count@f702 {
+ reg = <0xf702 0x1>;
+ bits = <0 4>;
+ };
+
+ panic_count: panic-count@f702 {
+ reg = <0xf702 0x1>;
+ bits = <4 4>;
+ };
+
+ boot_error_stage: boot-error-stage@f703 {
+ reg = <0xf703 0x1>;
+ };
+
+ shutdown_flag: shutdown-flag@f70f {
+ reg = <0xf70f 0x1>;
+ bits = <3 1>;
+ };
+
+ fault_shadow: fault-shadow@867b {
+ reg = <0x867b 0x10>;
+ };
+
+ socd: socd@8b00 {
+ reg = <0x8b00 0x400>;
+ };
+ };
+ };
};
pinctrl_smc: pinctrl@23e820000 {
--
2.49.0
^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: [PATCH 1/3] dt-bindings: spmi: Add generic SPMI NVMEM
2025-04-15 21:52 ` [PATCH 1/3] dt-bindings: spmi: Add generic SPMI NVMEM Sasha Finkelstein via B4 Relay
@ 2025-04-16 0:18 ` Nick Chan
2025-04-16 7:39 ` Sasha Finkelstein
0 siblings, 1 reply; 16+ messages in thread
From: Nick Chan @ 2025-04-16 0:18 UTC (permalink / raw)
To: fnkl.kernel, Sven Peter, Janne Grunau, Alyssa Rosenzweig,
Neal Gompa, Srinivas Kandagatla, Rob Herring, Krzysztof Kozlowski,
Conor Dooley
Cc: asahi, linux-arm-kernel, devicetree, linux-kernel
Sasha Finkelstein via B4 Relay 於 2025/4/16 清晨5:52 寫道:
> From: Sasha Finkelstein <fnkl.kernel@gmail.com>
>
> Add bindings for exposing SPMI registers as NVMEM cells
>
> Signed-off-by: Sasha Finkelstein <fnkl.kernel@gmail.com>
> ---
> .../devicetree/bindings/nvmem/spmi-nvmem.yaml | 44 ++++++++++++++++++++++
> MAINTAINERS | 1 +
> 2 files changed, 45 insertions(+)
>
> diff --git a/Documentation/devicetree/bindings/nvmem/spmi-nvmem.yaml b/Documentation/devicetree/bindings/nvmem/spmi-nvmem.yaml
> new file mode 100644
> index 0000000000000000000000000000000000000000..0041babefc37ed4d82d7d6f68fc67d29eed53d9f
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/nvmem/spmi-nvmem.yaml
> @@ -0,0 +1,44 @@
> +# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/nvmem/spmi-nvmem.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: Generic SPMI NVMEM
> +
> +description: Exports a series of SPMI registers as NVMEM cells
> +
> +maintainers:
> + - Sasha Finkelstein <fnkl.kernel@gmail.com>
> +
> +allOf:
> + - $ref: nvmem.yaml#
> +
> +properties:
> + compatible:
> + items:
> + - enum:
> + - apple,maverick-pmu
> + - apple,sera-pmu
> + - apple,stowe-pmu
> + - const: spmi-nvmem
Consider using pmic instead of pmu in the compatible names for consistency (see below).
Also, the PMIC definitely has more (mostly independent) functions than just non-volatile
memory, so I am not sure if it is really appropriate to model it as only a nvmem device.
> +
> + reg:
> + maxItems: 1
> +
> +required:
> + - compatible
> + - reg
> +
> +unevaluatedProperties: false
> +
> +examples:
> + - |
> + #include <dt-bindings/spmi/spmi.h>
> +
> + pmu@f {
> + compatible = "apple,maverick-pmu", "spmi-nvmem";
> + reg = <0xf SPMI_USID>;
> + };
As agreed on the series for SPMI support, this should be pmic@f, not pmu@f.
There should be an nvmem-layout subnode in the example too.
> +
> +...
> diff --git a/MAINTAINERS b/MAINTAINERS
> index 96b82704950184bd71623ff41fc4df31e4c7fe87..e7b2d0df81b387ba5398957131971588dc7b89dc 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -2277,6 +2277,7 @@ F: Documentation/devicetree/bindings/mailbox/apple,mailbox.yaml
> F: Documentation/devicetree/bindings/net/bluetooth/brcm,bcm4377-bluetooth.yaml
> F: Documentation/devicetree/bindings/nvme/apple,nvme-ans.yaml
> F: Documentation/devicetree/bindings/nvmem/apple,efuses.yaml
> +F: Documentation/devicetree/bindings/nvmem/spmi-nvmem.yaml
> F: Documentation/devicetree/bindings/pci/apple,pcie.yaml
> F: Documentation/devicetree/bindings/pinctrl/apple,pinctrl.yaml
> F: Documentation/devicetree/bindings/power/apple*
>
Nick Chan
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 3/3] arm64: dts: apple: Add PMU NVMEM
2025-04-15 21:52 ` [PATCH 3/3] arm64: dts: apple: Add PMU NVMEM Sasha Finkelstein via B4 Relay
@ 2025-04-16 0:28 ` Nick Chan
0 siblings, 0 replies; 16+ messages in thread
From: Nick Chan @ 2025-04-16 0:28 UTC (permalink / raw)
To: fnkl.kernel, Sven Peter, Janne Grunau, Alyssa Rosenzweig,
Neal Gompa, Srinivas Kandagatla, Rob Herring, Krzysztof Kozlowski,
Conor Dooley
Cc: asahi, linux-arm-kernel, devicetree, linux-kernel, Hector Martin
Sasha Finkelstein via B4 Relay 於 2025/4/16 清晨5:52 寫道:
> From: Hector Martin <marcan@marcan.st>
>
> Add device tree entries for NVMEM cells present on the PMU
>
> Signed-off-by: Hector Martin <marcan@marcan.st>
> Signed-off-by: Sasha Finkelstein <fnkl.kernel@gmail.com>
> ---
> arch/arm64/boot/dts/apple/t6001.dtsi | 1 +
> arch/arm64/boot/dts/apple/t6002.dtsi | 1 +
> arch/arm64/boot/dts/apple/t600x-die0.dtsi | 50 +++++++++++++++++++++++++++++++
> arch/arm64/boot/dts/apple/t8103.dtsi | 50 +++++++++++++++++++++++++++++++
> arch/arm64/boot/dts/apple/t8112.dtsi | 50 +++++++++++++++++++++++++++++++
> 5 files changed, 152 insertions(+)
Aside from things that are already mentioned in the feedback for the bindings:
>
> diff --git a/arch/arm64/boot/dts/apple/t6001.dtsi b/arch/arm64/boot/dts/apple/t6001.dtsi
> index 620b17e4031f069874aaabadbf06b7b29ec4031e..d2cf81926f284ccf7627701cc82edff31d4d72d6 100644
> --- a/arch/arm64/boot/dts/apple/t6001.dtsi
> +++ b/arch/arm64/boot/dts/apple/t6001.dtsi
> @@ -11,6 +11,7 @@
> #include <dt-bindings/interrupt-controller/apple-aic.h>
> #include <dt-bindings/interrupt-controller/irq.h>
> #include <dt-bindings/pinctrl/apple.h>
> +#include <dt-bindings/spmi/spmi.h>
>
> #include "multi-die-cpp.h"
>
> diff --git a/arch/arm64/boot/dts/apple/t6002.dtsi b/arch/arm64/boot/dts/apple/t6002.dtsi
> index a963a5011799a0480f88688fb4372a31f0bbf806..e36f422d257d8fe3a62bfa6e0f0e0dc6c34608a4 100644
> --- a/arch/arm64/boot/dts/apple/t6002.dtsi
> +++ b/arch/arm64/boot/dts/apple/t6002.dtsi
> @@ -11,6 +11,7 @@
> #include <dt-bindings/interrupt-controller/apple-aic.h>
> #include <dt-bindings/interrupt-controller/irq.h>
> #include <dt-bindings/pinctrl/apple.h>
> +#include <dt-bindings/spmi/spmi.h>
>
> #include "multi-die-cpp.h"
>
> diff --git a/arch/arm64/boot/dts/apple/t600x-die0.dtsi b/arch/arm64/boot/dts/apple/t600x-die0.dtsi
> index 4c224e686ffe5602329f7f394d3354559c4130ab..9e4402b0bdc085a32d26048ccf1ac4ea20c1e0c2 100644
> --- a/arch/arm64/boot/dts/apple/t600x-die0.dtsi
> +++ b/arch/arm64/boot/dts/apple/t600x-die0.dtsi
> @@ -50,6 +50,56 @@ nub_spmi0: spmi@2920a1300 {
> reg = <0x2 0x920a1300 0x0 0x100>;
> #address-cells = <2>;
> #size-cells = <0>;
> +
> + pmu1: pmu@f {
> + compatible = "apple,maverick-pmu", "spmi-nvmem";
> + reg = <0xf SPMI_USID>;
> +
> + nvmem-layout {
> + compatible = "fixed-layout";
> + #address-cells = <1>;
> + #size-cells = <1>;
> +
> + pm_setting: pm-setting@1405 {
> + reg = <0x1405 0x1>;
> + };
> +
> + rtc_offset: rtc-offset@1411 {
> + reg = <0x1411 0x6>;
> + };
> +
> + boot_stage: boot-stage@6001 {
> + reg = <0x6001 0x1>;
> + };
> +
> + boot_error_count: boot-error-count@6002 {
> + reg = <0x6002 0x1>;
> + bits = <0 4>;
> + };
> +
> + panic_count: panic-count@6002 {
> + reg = <0x6002 0x1>;
> + bits = <4 4>;
> + };
> +
> + boot_error_stage: boot-error-stage@6003 {
> + reg = <0x6003 0x1>;
> + };
> +
> + shutdown_flag: shutdown-flag@600f {
> + reg = <0x600f 0x1>;
> + bits = <3 1>;
> + };
> +
> + fault_shadow: fault-shadow@867b {
> + reg = <0x867b 0x10>;
> + };
> +
> + socd: socd@8b00 {
> + reg = <0x8b00 0x400>;
> + };
Please order by unit address.
> + };
> + };
> };
>
> wdt: watchdog@2922b0000 {
> diff --git a/arch/arm64/boot/dts/apple/t8103.dtsi b/arch/arm64/boot/dts/apple/t8103.dtsi
> index bdb1cb9e406a441e458b1c735359b0148146e91b..03bfe1cb173de009b4cd46508e24358008cf42f5 100644
> --- a/arch/arm64/boot/dts/apple/t8103.dtsi
> +++ b/arch/arm64/boot/dts/apple/t8103.dtsi
> @@ -747,6 +747,56 @@ nub_spmi: spmi@23d0d9300 {
> reg = <0x2 0x3d0d9300 0x0 0x100>;
> #address-cells = <2>;
> #size-cells = <0>;
> +
> + pmu1: pmu@f {
> + compatible = "apple,sera-pmu", "spmi-nvmem";
> + reg = <0xf SPMI_USID>;
> +
> + nvmem-layout {
> + compatible = "fixed-layout";
> + #address-cells = <1>;
> + #size-cells = <1>;
> +
> + pm_setting: pm-setting@d001 {
> + reg = <0xd001 0x1>;
> + };
> +
> + rtc_offset: rtc-offset@d100 {
> + reg = <0xd100 0x6>;
> + };
> +
> + boot_stage: boot-stage@9f01 {
> + reg = <0x9f01 0x1>;
> + };
> +
> + boot_error_count: boot-error-count@9f02 {
> + reg = <0x9f02 0x1>;
> + bits = <0 4>;
> + };
> +
> + panic_count: panic-count@9f02 {
> + reg = <0x9f02 0x1>;
> + bits = <4 4>;
> + };
> +
> + boot_error_stage: boot-error-stage@9f03 {
> + reg = <0x9f03 0x1>;
> + };
> +
> + shutdown_flag: shutdown-flag@9f0f {
> + reg = <0x9f0f 0x1>;
> + bits = <3 1>;
> + };
> +
> + fault_shadow: fault-shadow@a67b {
> + reg = <0xa67b 0x10>;
> + };
> +
> + socd: socd@ab00 {
> + reg = <0xab00 0x400>;
> + };
Please order by unit address.
> + };
> + };
> };
>
> pinctrl_nub: pinctrl@23d1f0000 {
> diff --git a/arch/arm64/boot/dts/apple/t8112.dtsi b/arch/arm64/boot/dts/apple/t8112.dtsi
> index 950d1f906ba3023c1d118179207a2099345aae94..55ab72cf627efe2e3295409b9af1b2128b829801 100644
> --- a/arch/arm64/boot/dts/apple/t8112.dtsi
> +++ b/arch/arm64/boot/dts/apple/t8112.dtsi
> @@ -787,6 +787,56 @@ nub_spmi: spmi@23d714000 {
> reg = <0x2 0x3d714000 0x0 0x100>;
> #address-cells = <2>;
> #size-cells = <0>;
> +
> + pmu1: pmu@e {
> + compatible = "apple,stowe-pmu", "spmi-nvmem";
> + reg = <0xe SPMI_USID>;
> +
> + nvmem-layout {
> + compatible = "fixed-layout";
> + #address-cells = <1>;
> + #size-cells = <1>;
> +
> + pm_setting: pm-setting@f801 {
> + reg = <0xf801 0x1>;
> + };
> +
> + rtc_offset: rtc-offset@f900 {
> + reg = <0xf900 0x6>;
> + };
> +
> + boot_stage: boot-stage@f701 {
> + reg = <0xf701 0x1>;
> + };
> +
> + boot_error_count: boot-error-count@f702 {
> + reg = <0xf702 0x1>;
> + bits = <0 4>;
> + };
> +
> + panic_count: panic-count@f702 {
> + reg = <0xf702 0x1>;
> + bits = <4 4>;
> + };
> +
> + boot_error_stage: boot-error-stage@f703 {
> + reg = <0xf703 0x1>;
> + };
> +
> + shutdown_flag: shutdown-flag@f70f {
> + reg = <0xf70f 0x1>;
> + bits = <3 1>;
> + };
> +
> + fault_shadow: fault-shadow@867b {
> + reg = <0x867b 0x10>;
> + };
> +
> + socd: socd@8b00 {
> + reg = <0x8b00 0x400>;
> + };
Please order by unit address.
> + };
> + };
> };
>
> pinctrl_smc: pinctrl@23e820000 {
>
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 2/3] nvmem: Add spmi-nvmem driver
2025-04-15 21:52 ` [PATCH 2/3] nvmem: Add spmi-nvmem driver Sasha Finkelstein via B4 Relay
@ 2025-04-16 1:40 ` Neal Gompa
2025-04-16 18:09 ` Alyssa Rosenzweig
2025-04-17 13:34 ` Srinivas Kandagatla
2 siblings, 0 replies; 16+ messages in thread
From: Neal Gompa @ 2025-04-16 1:40 UTC (permalink / raw)
To: fnkl.kernel
Cc: Sven Peter, Janne Grunau, Alyssa Rosenzweig, Srinivas Kandagatla,
Rob Herring, Krzysztof Kozlowski, Conor Dooley, asahi,
linux-arm-kernel, devicetree, linux-kernel, Hector Martin
On Tue, Apr 15, 2025 at 5:52 PM Sasha Finkelstein via B4 Relay
<devnull+fnkl.kernel.gmail.com@kernel.org> wrote:
>
> From: Hector Martin <marcan@marcan.st>
>
> This driver exposes a SPMI device as an NVMEM device.
> It is intended to be used with e.g. PMUs/PMICs that are used to
> hold power management configuration, such as used on Apple Silicon
> Macs.
>
> Signed-off-by: Hector Martin <marcan@marcan.st>
> Signed-off-by: Sasha Finkelstein <fnkl.kernel@gmail.com>
> ---
> MAINTAINERS | 1 +
> drivers/nvmem/Kconfig | 14 +++++++++++
> drivers/nvmem/Makefile | 2 ++
> drivers/nvmem/spmi-nvmem.c | 62 ++++++++++++++++++++++++++++++++++++++++++++++
> 4 files changed, 79 insertions(+)
>
This driver code looks reasonable to me.
Reviewed-by: Neal Gompa <neal@gompa.dev>
--
真実はいつも一つ!/ Always, there's only one truth!
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 1/3] dt-bindings: spmi: Add generic SPMI NVMEM
2025-04-16 0:18 ` Nick Chan
@ 2025-04-16 7:39 ` Sasha Finkelstein
0 siblings, 0 replies; 16+ messages in thread
From: Sasha Finkelstein @ 2025-04-16 7:39 UTC (permalink / raw)
To: Nick Chan
Cc: Sven Peter, Janne Grunau, Alyssa Rosenzweig, Neal Gompa,
Srinivas Kandagatla, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, asahi, linux-arm-kernel, devicetree, linux-kernel
On Wed, 16 Apr 2025 at 02:18, Nick Chan <towinchenmi@gmail.com> wrote:
> Also, the PMIC definitely has more (mostly independent) functions than just non-volatile
> memory, so I am not sure if it is really appropriate to model it as only a nvmem device.
It is good enough for the PMICs that i am adding, there are no plans
to expose any
other features to the os.
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 2/3] nvmem: Add spmi-nvmem driver
2025-04-15 21:52 ` [PATCH 2/3] nvmem: Add spmi-nvmem driver Sasha Finkelstein via B4 Relay
2025-04-16 1:40 ` Neal Gompa
@ 2025-04-16 18:09 ` Alyssa Rosenzweig
2025-04-17 13:34 ` Srinivas Kandagatla
2 siblings, 0 replies; 16+ messages in thread
From: Alyssa Rosenzweig @ 2025-04-16 18:09 UTC (permalink / raw)
To: fnkl.kernel
Cc: Sven Peter, Janne Grunau, Neal Gompa, Srinivas Kandagatla,
Rob Herring, Krzysztof Kozlowski, Conor Dooley, asahi,
linux-arm-kernel, devicetree, linux-kernel, Hector Martin
This should have a Co-developed-by tag in addition to the two sign-offs,
given you've made significant changes.
> This driver exposes a SPMI device as an NVMEM device.
> It is intended to be used with e.g. PMUs/PMICs that are used to
> hold power management configuration, such as used on Apple Silicon
> Macs.
>
> Signed-off-by: Hector Martin <marcan@marcan.st>
> Signed-off-by: Sasha Finkelstein <fnkl.kernel@gmail.com>
> ---
> MAINTAINERS | 1 +
> drivers/nvmem/Kconfig | 14 +++++++++++
> drivers/nvmem/Makefile | 2 ++
> drivers/nvmem/spmi-nvmem.c | 62 ++++++++++++++++++++++++++++++++++++++++++++++
> 4 files changed, 79 insertions(+)
>
> diff --git a/MAINTAINERS b/MAINTAINERS
> index e7b2d0df81b387ba5398957131971588dc7b89dc..63c12f901aed1f3e6de8227d6db34af1bd046fe6 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -2298,6 +2298,7 @@ F: drivers/iommu/io-pgtable-dart.c
> F: drivers/irqchip/irq-apple-aic.c
> F: drivers/nvme/host/apple.c
> F: drivers/nvmem/apple-efuses.c
> +F: drivers/nvmem/spmi-nvmem.c
> F: drivers/pinctrl/pinctrl-apple-gpio.c
> F: drivers/pwm/pwm-apple.c
> F: drivers/soc/apple/*
> diff --git a/drivers/nvmem/Kconfig b/drivers/nvmem/Kconfig
> index 8671b7c974b933e147154bb40b5d41b5730518d2..9ec907d8aa6ef7df0ea45cc35e92d8239d2705ee 100644
> --- a/drivers/nvmem/Kconfig
> +++ b/drivers/nvmem/Kconfig
> @@ -310,6 +310,20 @@ config NVMEM_SNVS_LPGPR
> This driver can also be built as a module. If so, the module
> will be called nvmem-snvs-lpgpr.
>
> +config NVMEM_SPMI
> + tristate "Generic SPMI NVMEM"
> + default ARCH_APPLE
> + depends on SPMI
> + select REGMAP_SPMI
> + help
> + Say y here to build a generic driver to expose a SPMI device
> + as a NVMEM provider. This can be used for PMIC/PMU devices which
> + are used to store power and RTC-related settings on certain
> + platforms, such as Apple Silicon Macs.
> +
> + This driver can also be built as a module. If so, the module
> + will be called nvmem-spmi.
> +
> config NVMEM_SPMI_SDAM
> tristate "SPMI SDAM Support"
> depends on SPMI
> diff --git a/drivers/nvmem/Makefile b/drivers/nvmem/Makefile
> index 5b77bbb6488bf89bfb305750a1cbf4a6731a0a58..b639f4284184db026bb27b11e04d54b8f7ff166f 100644
> --- a/drivers/nvmem/Makefile
> +++ b/drivers/nvmem/Makefile
> @@ -64,6 +64,8 @@ obj-$(CONFIG_NVMEM_SC27XX_EFUSE) += nvmem-sc27xx-efuse.o
> nvmem-sc27xx-efuse-y := sc27xx-efuse.o
> obj-$(CONFIG_NVMEM_SNVS_LPGPR) += nvmem_snvs_lpgpr.o
> nvmem_snvs_lpgpr-y := snvs_lpgpr.o
> +obj-$(CONFIG_NVMEM_SPMI) += nvmem_spmi.o
> +nvmem_spmi-y := spmi-nvmem.o
> obj-$(CONFIG_NVMEM_SPMI_SDAM) += nvmem_qcom-spmi-sdam.o
> nvmem_qcom-spmi-sdam-y += qcom-spmi-sdam.o
> obj-$(CONFIG_NVMEM_SPRD_EFUSE) += nvmem_sprd_efuse.o
> diff --git a/drivers/nvmem/spmi-nvmem.c b/drivers/nvmem/spmi-nvmem.c
> new file mode 100644
> index 0000000000000000000000000000000000000000..fff6162cb22dd7ab45883f004f5b63ebae014698
> --- /dev/null
> +++ b/drivers/nvmem/spmi-nvmem.c
> @@ -0,0 +1,62 @@
> +// SPDX-License-Identifier: GPL-2.0-only OR MIT
> +/*
> + * Generic SPMI NVMEM driver
> + *
> + * Copyright The Asahi Linux Contributors
> + */
> +
> +#include <linux/kernel.h>
> +#include <linux/module.h>
> +#include <linux/nvmem-provider.h>
> +#include <linux/of.h>
> +#include <linux/spmi.h>
> +#include <linux/regmap.h>
> +
> +static const struct regmap_config spmi_regmap_config = {
> + .reg_bits = 16,
> + .val_bits = 8,
> + .max_register = 0xffff,
> +};
> +
> +static int spmi_nvmem_probe(struct spmi_device *sdev)
> +{
> + struct regmap *regmap;
> + struct nvmem_config nvmem_cfg = {
> + .dev = &sdev->dev,
> + .name = "spmi_nvmem",
> + .id = NVMEM_DEVID_AUTO,
> + .word_size = 1,
> + .stride = 1,
> + .size = 0xffff,
> + .reg_read = (void *)regmap_bulk_read,
> + .reg_write = (void *)regmap_bulk_write,
> + };
> +
> + regmap = devm_regmap_init_spmi_ext(sdev, &spmi_regmap_config);
> + if (IS_ERR(regmap))
> + return PTR_ERR(regmap);
> +
> + nvmem_cfg.priv = regmap;
> +
> + return PTR_ERR_OR_ZERO(devm_nvmem_register(&sdev->dev, &nvmem_cfg));
> +}
> +
> +static const struct of_device_id spmi_nvmem_id_table[] = {
> + { .compatible = "spmi-nvmem" },
> + { },
> +};
> +MODULE_DEVICE_TABLE(of, spmi_nvmem_id_table);
> +
> +static struct spmi_driver spmi_nvmem_driver = {
> + .probe = spmi_nvmem_probe,
> + .driver = {
> + .name = "spmi-nvmem",
> + .of_match_table = spmi_nvmem_id_table,
> + },
> +};
> +
> +module_spmi_driver(spmi_nvmem_driver);
> +
> +MODULE_LICENSE("Dual MIT/GPL");
> +MODULE_AUTHOR("Hector Martin <marcan@marcan.st>");
> +MODULE_DESCRIPTION("SPMI NVMEM driver");
>
> --
> 2.49.0
>
>
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 2/3] nvmem: Add spmi-nvmem driver
2025-04-15 21:52 ` [PATCH 2/3] nvmem: Add spmi-nvmem driver Sasha Finkelstein via B4 Relay
2025-04-16 1:40 ` Neal Gompa
2025-04-16 18:09 ` Alyssa Rosenzweig
@ 2025-04-17 13:34 ` Srinivas Kandagatla
2025-04-17 13:49 ` Alyssa Rosenzweig
` (2 more replies)
2 siblings, 3 replies; 16+ messages in thread
From: Srinivas Kandagatla @ 2025-04-17 13:34 UTC (permalink / raw)
To: fnkl.kernel, Sven Peter, Janne Grunau, Alyssa Rosenzweig,
Neal Gompa, Rob Herring, Krzysztof Kozlowski, Conor Dooley
Cc: asahi, linux-arm-kernel, devicetree, linux-kernel, Hector Martin
On 15/04/2025 22:52, Sasha Finkelstein via B4 Relay wrote:
> From: Hector Martin <marcan@marcan.st>
>
> This driver exposes a SPMI device as an NVMEM device.
> It is intended to be used with e.g. PMUs/PMICs that are used to
> hold power management configuration, such as used on Apple Silicon
> Macs.
>
> Signed-off-by: Hector Martin <marcan@marcan.st>
> Signed-off-by: Sasha Finkelstein <fnkl.kernel@gmail.com>
> ---
> MAINTAINERS | 1 +
> drivers/nvmem/Kconfig | 14 +++++++++++
> drivers/nvmem/Makefile | 2 ++
> drivers/nvmem/spmi-nvmem.c | 62 ++++++++++++++++++++++++++++++++++++++++++++++
> 4 files changed, 79 insertions(+)
>
> diff --git a/MAINTAINERS b/MAINTAINERS
> index e7b2d0df81b387ba5398957131971588dc7b89dc..63c12f901aed1f3e6de8227d6db34af1bd046fe6 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -2298,6 +2298,7 @@ F: drivers/iommu/io-pgtable-dart.c
> F: drivers/irqchip/irq-apple-aic.c
> F: drivers/nvme/host/apple.c
> F: drivers/nvmem/apple-efuses.c
> +F: drivers/nvmem/spmi-nvmem.c
> F: drivers/pinctrl/pinctrl-apple-gpio.c
> F: drivers/pwm/pwm-apple.c
> F: drivers/soc/apple/*
> diff --git a/drivers/nvmem/Kconfig b/drivers/nvmem/Kconfig
> index 8671b7c974b933e147154bb40b5d41b5730518d2..9ec907d8aa6ef7df0ea45cc35e92d8239d2705ee 100644
> --- a/drivers/nvmem/Kconfig
> +++ b/drivers/nvmem/Kconfig
> @@ -310,6 +310,20 @@ config NVMEM_SNVS_LPGPR
> This driver can also be built as a module. If so, the module
> will be called nvmem-snvs-lpgpr.
>
> +config NVMEM_SPMI
> + tristate "Generic SPMI NVMEM"
> + default ARCH_APPLE
Why default is set to ARCH_APPLE?
This will endup with y in arm64 defconfig, means increasing the size of
kernel.
should it be:
depends on ARCH_APPLE || COMPILE_TEST
--srini
> + depends on SPMI
> + select REGMAP_SPMI
> + help
> + Say y here to build a generic driver to expose a SPMI device
> + as a NVMEM provider. This can be used for PMIC/PMU devices which
> + are used to store power and RTC-related settings on certain
> + platforms, such as Apple Silicon Macs.
> +
> + This driver can also be built as a module. If so, the module
> + will be called nvmem-spmi.
> +
> config NVMEM_SPMI_SDAM
> tristate "SPMI SDAM Support"
> depends on SPMI
> diff --git a/drivers/nvmem/Makefile b/drivers/nvmem/Makefile
> index 5b77bbb6488bf89bfb305750a1cbf4a6731a0a58..b639f4284184db026bb27b11e04d54b8f7ff166f 100644
> --- a/drivers/nvmem/Makefile
> +++ b/drivers/nvmem/Makefile
> @@ -64,6 +64,8 @@ obj-$(CONFIG_NVMEM_SC27XX_EFUSE) += nvmem-sc27xx-efuse.o
> nvmem-sc27xx-efuse-y := sc27xx-efuse.o
> obj-$(CONFIG_NVMEM_SNVS_LPGPR) += nvmem_snvs_lpgpr.o
> nvmem_snvs_lpgpr-y := snvs_lpgpr.o
> +obj-$(CONFIG_NVMEM_SPMI) += nvmem_spmi.o
> +nvmem_spmi-y := spmi-nvmem.o
> obj-$(CONFIG_NVMEM_SPMI_SDAM) += nvmem_qcom-spmi-sdam.o
> nvmem_qcom-spmi-sdam-y += qcom-spmi-sdam.o
> obj-$(CONFIG_NVMEM_SPRD_EFUSE) += nvmem_sprd_efuse.o
> diff --git a/drivers/nvmem/spmi-nvmem.c b/drivers/nvmem/spmi-nvmem.c
> new file mode 100644
> index 0000000000000000000000000000000000000000..fff6162cb22dd7ab45883f004f5b63ebae014698
> --- /dev/null
> +++ b/drivers/nvmem/spmi-nvmem.c
> @@ -0,0 +1,62 @@
> +// SPDX-License-Identifier: GPL-2.0-only OR MIT
> +/*
> + * Generic SPMI NVMEM driver
> + *
> + * Copyright The Asahi Linux Contributors
> + */
> +
> +#include <linux/kernel.h>
> +#include <linux/module.h>
> +#include <linux/nvmem-provider.h>
> +#include <linux/of.h>
> +#include <linux/spmi.h>
> +#include <linux/regmap.h>
> +
> +static const struct regmap_config spmi_regmap_config = {
> + .reg_bits = 16,
> + .val_bits = 8,
> + .max_register = 0xffff,
> +};
> +
> +static int spmi_nvmem_probe(struct spmi_device *sdev)
> +{
> + struct regmap *regmap;
> + struct nvmem_config nvmem_cfg = {
> + .dev = &sdev->dev,
> + .name = "spmi_nvmem",
> + .id = NVMEM_DEVID_AUTO,
> + .word_size = 1,
> + .stride = 1,
> + .size = 0xffff,
> + .reg_read = (void *)regmap_bulk_read,
> + .reg_write = (void *)regmap_bulk_write,
> + };
> +
> + regmap = devm_regmap_init_spmi_ext(sdev, &spmi_regmap_config);
> + if (IS_ERR(regmap))
> + return PTR_ERR(regmap);
> +
> + nvmem_cfg.priv = regmap;
> +
> + return PTR_ERR_OR_ZERO(devm_nvmem_register(&sdev->dev, &nvmem_cfg));
> +}
> +
> +static const struct of_device_id spmi_nvmem_id_table[] = {
> + { .compatible = "spmi-nvmem" },
> + { },
> +};
> +MODULE_DEVICE_TABLE(of, spmi_nvmem_id_table);
> +
> +static struct spmi_driver spmi_nvmem_driver = {
> + .probe = spmi_nvmem_probe,
> + .driver = {
> + .name = "spmi-nvmem",
> + .of_match_table = spmi_nvmem_id_table,
> + },
> +};
> +
> +module_spmi_driver(spmi_nvmem_driver);
> +
> +MODULE_LICENSE("Dual MIT/GPL");
> +MODULE_AUTHOR("Hector Martin <marcan@marcan.st>");
> +MODULE_DESCRIPTION("SPMI NVMEM driver");
>
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 2/3] nvmem: Add spmi-nvmem driver
2025-04-17 13:34 ` Srinivas Kandagatla
@ 2025-04-17 13:49 ` Alyssa Rosenzweig
2025-04-17 13:57 ` Srinivas Kandagatla
2025-04-17 14:27 ` Sasha Finkelstein
2025-04-17 14:30 ` Janne Grunau
2 siblings, 1 reply; 16+ messages in thread
From: Alyssa Rosenzweig @ 2025-04-17 13:49 UTC (permalink / raw)
To: Srinivas Kandagatla
Cc: fnkl.kernel, Sven Peter, Janne Grunau, Neal Gompa, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, asahi, linux-arm-kernel,
devicetree, linux-kernel, Hector Martin
> > +config NVMEM_SPMI
> > + tristate "Generic SPMI NVMEM"
> > + default ARCH_APPLE
> Why default is set to ARCH_APPLE?
>
> This will endup with y in arm64 defconfig, means increasing the size of
> kernel.
I mean, eventually I think we /do/ want M1 properly supported in the
arm64 defconfig, no? I'm not sure what the criteria is for any other
driver to be defconfig or not, though.
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 2/3] nvmem: Add spmi-nvmem driver
2025-04-17 13:49 ` Alyssa Rosenzweig
@ 2025-04-17 13:57 ` Srinivas Kandagatla
2025-04-17 13:59 ` Alyssa Rosenzweig
0 siblings, 1 reply; 16+ messages in thread
From: Srinivas Kandagatla @ 2025-04-17 13:57 UTC (permalink / raw)
To: Alyssa Rosenzweig
Cc: fnkl.kernel, Sven Peter, Janne Grunau, Neal Gompa, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, asahi, linux-arm-kernel,
devicetree, linux-kernel, Hector Martin
On Thu, Apr 17, 2025 at 09:49:28AM -0400, Alyssa Rosenzweig wrote:
> > > +config NVMEM_SPMI
> > > + tristate "Generic SPMI NVMEM"
> > > + default ARCH_APPLE
> > Why default is set to ARCH_APPLE?
> >
> > This will endup with y in arm64 defconfig, means increasing the size of
> > kernel.
>
> I mean, eventually I think we /do/ want M1 properly supported in the
> arm64 defconfig, no? I'm not sure what the criteria is for any other
> driver to be defconfig or not, though.
cat arch/arm64/configs/defconfig | grep APPLE
CONFIG_ARCH_APPLE=y
Criteria for other drivers default should be not selected,
and should be module if they are part of defconfig, rather than
inbuilt. Not sure how most of the ARCH_APPLE drivers ended up using
default ARCH_APPLE.
--srini
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 2/3] nvmem: Add spmi-nvmem driver
2025-04-17 13:57 ` Srinivas Kandagatla
@ 2025-04-17 13:59 ` Alyssa Rosenzweig
0 siblings, 0 replies; 16+ messages in thread
From: Alyssa Rosenzweig @ 2025-04-17 13:59 UTC (permalink / raw)
To: Srinivas Kandagatla
Cc: fnkl.kernel, Sven Peter, Janne Grunau, Neal Gompa, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, asahi, linux-arm-kernel,
devicetree, linux-kernel, Hector Martin
> > > > +config NVMEM_SPMI
> > > > + tristate "Generic SPMI NVMEM"
> > > > + default ARCH_APPLE
> > > Why default is set to ARCH_APPLE?
> > >
> > > This will endup with y in arm64 defconfig, means increasing the size of
> > > kernel.
> >
> > I mean, eventually I think we /do/ want M1 properly supported in the
> > arm64 defconfig, no? I'm not sure what the criteria is for any other
> > driver to be defconfig or not, though.
> cat arch/arm64/configs/defconfig | grep APPLE
> CONFIG_ARCH_APPLE=y
>
> Criteria for other drivers default should be not selected,
> and should be module if they are part of defconfig, rather than
> inbuilt. Not sure how most of the ARCH_APPLE drivers ended up using
> default ARCH_APPLE.
Oh, I see what you mean, module vs in-built. Understood now, thanks for
explaining :)
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 2/3] nvmem: Add spmi-nvmem driver
2025-04-17 13:34 ` Srinivas Kandagatla
2025-04-17 13:49 ` Alyssa Rosenzweig
@ 2025-04-17 14:27 ` Sasha Finkelstein
2025-04-17 14:30 ` Janne Grunau
2 siblings, 0 replies; 16+ messages in thread
From: Sasha Finkelstein @ 2025-04-17 14:27 UTC (permalink / raw)
To: Srinivas Kandagatla
Cc: Sven Peter, Janne Grunau, Alyssa Rosenzweig, Neal Gompa,
Rob Herring, Krzysztof Kozlowski, Conor Dooley, asahi,
linux-arm-kernel, devicetree, linux-kernel, Hector Martin
On Thu, 17 Apr 2025 at 15:34, Srinivas Kandagatla <srini@kernel.org> wrote:
> should it be:
>
> depends on ARCH_APPLE || COMPILE_TEST
No, this is not a driver for an apple-specific hw, but a generic thing
for re-exporting
a set of spmi registers as nvmem cells.
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 2/3] nvmem: Add spmi-nvmem driver
2025-04-17 13:34 ` Srinivas Kandagatla
2025-04-17 13:49 ` Alyssa Rosenzweig
2025-04-17 14:27 ` Sasha Finkelstein
@ 2025-04-17 14:30 ` Janne Grunau
2025-04-17 14:50 ` Srinivas Kandagatla
2 siblings, 1 reply; 16+ messages in thread
From: Janne Grunau @ 2025-04-17 14:30 UTC (permalink / raw)
To: Srinivas Kandagatla
Cc: fnkl.kernel, Sven Peter, Alyssa Rosenzweig, Neal Gompa,
Rob Herring, Krzysztof Kozlowski, Conor Dooley, asahi,
linux-arm-kernel, devicetree, linux-kernel, Hector Martin
On Thu, Apr 17, 2025 at 02:34:37PM +0100, Srinivas Kandagatla wrote:
>
>
> On 15/04/2025 22:52, Sasha Finkelstein via B4 Relay wrote:
> > From: Hector Martin <marcan@marcan.st>
> >
> > This driver exposes a SPMI device as an NVMEM device.
> > It is intended to be used with e.g. PMUs/PMICs that are used to
> > hold power management configuration, such as used on Apple Silicon
> > Macs.
> >
> > Signed-off-by: Hector Martin <marcan@marcan.st>
> > Signed-off-by: Sasha Finkelstein <fnkl.kernel@gmail.com>
> > ---
> > MAINTAINERS | 1 +
> > drivers/nvmem/Kconfig | 14 +++++++++++
> > drivers/nvmem/Makefile | 2 ++
> > drivers/nvmem/spmi-nvmem.c | 62 ++++++++++++++++++++++++++++++++++++++++++++++
> > 4 files changed, 79 insertions(+)
> >
> > diff --git a/MAINTAINERS b/MAINTAINERS
> > index e7b2d0df81b387ba5398957131971588dc7b89dc..63c12f901aed1f3e6de8227d6db34af1bd046fe6 100644
> > --- a/MAINTAINERS
> > +++ b/MAINTAINERS
> > @@ -2298,6 +2298,7 @@ F: drivers/iommu/io-pgtable-dart.c
> > F: drivers/irqchip/irq-apple-aic.c
> > F: drivers/nvme/host/apple.c
> > F: drivers/nvmem/apple-efuses.c
> > +F: drivers/nvmem/spmi-nvmem.c
> > F: drivers/pinctrl/pinctrl-apple-gpio.c
> > F: drivers/pwm/pwm-apple.c
> > F: drivers/soc/apple/*
> > diff --git a/drivers/nvmem/Kconfig b/drivers/nvmem/Kconfig
> > index 8671b7c974b933e147154bb40b5d41b5730518d2..9ec907d8aa6ef7df0ea45cc35e92d8239d2705ee 100644
> > --- a/drivers/nvmem/Kconfig
> > +++ b/drivers/nvmem/Kconfig
> > @@ -310,6 +310,20 @@ config NVMEM_SNVS_LPGPR
> > This driver can also be built as a module. If so, the module
> > will be called nvmem-snvs-lpgpr.
> >
> > +config NVMEM_SPMI
> > + tristate "Generic SPMI NVMEM"
> > + default ARCH_APPLE
> Why default is set to ARCH_APPLE?
>
> This will endup with y in arm64 defconfig, means increasing the size of
> kernel.
>
> should it be:
>
> depends on ARCH_APPLE || COMPILE_TEST
I don't think it should depend on ARCH_APPLE. There is nothing
ARCH_APPLE specific in the driver or dt-bindings even apple platforms
are currently only user.
`default m if ARCH_APPLE` might an alternative but in this specific case
the driver which will uses the nvmem cells should just select it. So I
would remove the default.
Janne
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 2/3] nvmem: Add spmi-nvmem driver
2025-04-17 14:30 ` Janne Grunau
@ 2025-04-17 14:50 ` Srinivas Kandagatla
0 siblings, 0 replies; 16+ messages in thread
From: Srinivas Kandagatla @ 2025-04-17 14:50 UTC (permalink / raw)
To: Janne Grunau
Cc: fnkl.kernel, Sven Peter, Alyssa Rosenzweig, Neal Gompa,
Rob Herring, Krzysztof Kozlowski, Conor Dooley, asahi,
linux-arm-kernel, devicetree, linux-kernel, Hector Martin
On Thu, Apr 17, 2025 at 04:30:53PM +0200, Janne Grunau wrote:
> On Thu, Apr 17, 2025 at 02:34:37PM +0100, Srinivas Kandagatla wrote:
> >
> >
> > On 15/04/2025 22:52, Sasha Finkelstein via B4 Relay wrote:
> > > From: Hector Martin <marcan@marcan.st>
> > >
> > > This driver exposes a SPMI device as an NVMEM device.
> > > It is intended to be used with e.g. PMUs/PMICs that are used to
> > > hold power management configuration, such as used on Apple Silicon
> > > Macs.
> > >
> > > Signed-off-by: Hector Martin <marcan@marcan.st>
> > > Signed-off-by: Sasha Finkelstein <fnkl.kernel@gmail.com>
> > > ---
> > > MAINTAINERS | 1 +
> > > drivers/nvmem/Kconfig | 14 +++++++++++
> > > drivers/nvmem/Makefile | 2 ++
> > > drivers/nvmem/spmi-nvmem.c | 62 ++++++++++++++++++++++++++++++++++++++++++++++
> > > 4 files changed, 79 insertions(+)
> > >
> > > diff --git a/MAINTAINERS b/MAINTAINERS
> > > index e7b2d0df81b387ba5398957131971588dc7b89dc..63c12f901aed1f3e6de8227d6db34af1bd046fe6 100644
> > > --- a/MAINTAINERS
> > > +++ b/MAINTAINERS
> > > @@ -2298,6 +2298,7 @@ F: drivers/iommu/io-pgtable-dart.c
> > > F: drivers/irqchip/irq-apple-aic.c
> > > F: drivers/nvme/host/apple.c
> > > F: drivers/nvmem/apple-efuses.c
> > > +F: drivers/nvmem/spmi-nvmem.c
> > > F: drivers/pinctrl/pinctrl-apple-gpio.c
> > > F: drivers/pwm/pwm-apple.c
> > > F: drivers/soc/apple/*
> > > diff --git a/drivers/nvmem/Kconfig b/drivers/nvmem/Kconfig
> > > index 8671b7c974b933e147154bb40b5d41b5730518d2..9ec907d8aa6ef7df0ea45cc35e92d8239d2705ee 100644
> > > --- a/drivers/nvmem/Kconfig
> > > +++ b/drivers/nvmem/Kconfig
> > > @@ -310,6 +310,20 @@ config NVMEM_SNVS_LPGPR
> > > This driver can also be built as a module. If so, the module
> > > will be called nvmem-snvs-lpgpr.
> > >
> > > +config NVMEM_SPMI
> > > + tristate "Generic SPMI NVMEM"
> > > + default ARCH_APPLE
> > Why default is set to ARCH_APPLE?
> >
> > This will endup with y in arm64 defconfig, means increasing the size of
> > kernel.
> >
> > should it be:
> >
> > depends on ARCH_APPLE || COMPILE_TEST
>
> I don't think it should depend on ARCH_APPLE. There is nothing
> ARCH_APPLE specific in the driver or dt-bindings even apple platforms
> are currently only user.
irrespective of this is generic or not none of the drivers should have
default set to y.
>
> `default m if ARCH_APPLE` might an alternative but in this specific case
> the driver which will uses the nvmem cells should just select it. So I
> would remove the default.
remove the default, and let it be selected in defconfig as m as
required, like any other drivers.
--srini
>
> Janne
^ permalink raw reply [flat|nested] 16+ messages in thread
end of thread, other threads:[~2025-04-17 15:46 UTC | newest]
Thread overview: 16+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-04-15 21:52 [PATCH 0/3] Generic SPMI NVMEM cell driver Sasha Finkelstein via B4 Relay
2025-04-15 21:52 ` [PATCH 1/3] dt-bindings: spmi: Add generic SPMI NVMEM Sasha Finkelstein via B4 Relay
2025-04-16 0:18 ` Nick Chan
2025-04-16 7:39 ` Sasha Finkelstein
2025-04-15 21:52 ` [PATCH 2/3] nvmem: Add spmi-nvmem driver Sasha Finkelstein via B4 Relay
2025-04-16 1:40 ` Neal Gompa
2025-04-16 18:09 ` Alyssa Rosenzweig
2025-04-17 13:34 ` Srinivas Kandagatla
2025-04-17 13:49 ` Alyssa Rosenzweig
2025-04-17 13:57 ` Srinivas Kandagatla
2025-04-17 13:59 ` Alyssa Rosenzweig
2025-04-17 14:27 ` Sasha Finkelstein
2025-04-17 14:30 ` Janne Grunau
2025-04-17 14:50 ` Srinivas Kandagatla
2025-04-15 21:52 ` [PATCH 3/3] arm64: dts: apple: Add PMU NVMEM Sasha Finkelstein via B4 Relay
2025-04-16 0:28 ` Nick Chan
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).