The Power Management Processor (PMP) is a coprocessor found on certain Apple SoCs.
This is a dummy driver which allows for devices bound to a PMGR domain through a PMP reporting domain to be powered on. Powering on the PMP itself is not necessary during boot. Tested on M3 Max (T6034) with the nvme device tree node using one of the PMP reporting power domains. Signed-off-by: Yureka <[email protected]> --- MAINTAINERS | 1 + drivers/power/domain/Kconfig | 13 ++++++++++ drivers/power/domain/Makefile | 1 + drivers/power/domain/apple-pmp-report.c | 45 +++++++++++++++++++++++++++++++++ 4 files changed, 60 insertions(+) diff --git a/MAINTAINERS b/MAINTAINERS index 571af196465..ec0c2abd9c7 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -148,6 +148,7 @@ F: drivers/pci/pcie_apple.c F: drivers/phy/phy-apple-atc.c F: drivers/pinctrl/pinctrl-apple.c F: drivers/power/domain/apple-pmgr.c +F: drivers/power/domain/apple-pmp-report.c F: drivers/spi/apple_spi.c F: drivers/watchdog/apple_wdt.c F: include/configs/apple.h diff --git a/drivers/power/domain/Kconfig b/drivers/power/domain/Kconfig index 4112b777371..06112d33660 100644 --- a/drivers/power/domain/Kconfig +++ b/drivers/power/domain/Kconfig @@ -18,6 +18,19 @@ config APPLE_PMGR_POWER_DOMAIN This driver is needed to power on parts of the SoC that have not been powered on by previous boot stages. +config APPLE_PMP_REPORT_POWER_DOMAIN + bool "Enable the Apple PMP reporting power domain driver" + depends on POWER_DOMAIN + default y if ARCH_APPLE + help + Enable support for reporting power states to the Apple Power + Management Processor (PMP). + + This is a dummy driver since the PMP is entirely optional and + enabling is not necessary during boot. However, it allows for + devices bound to a PMGR domain through a PMP reporting domain to be + powered on. + config AGILEX5_PMGR_POWER_DOMAIN bool "Enable the Agilex5 PMGR power domain driver" depends on SPL_POWER_DOMAIN && ARCH_SOCFPGA_SOC64 diff --git a/drivers/power/domain/Makefile b/drivers/power/domain/Makefile index 110153d5cf8..3e9711aa430 100644 --- a/drivers/power/domain/Makefile +++ b/drivers/power/domain/Makefile @@ -5,6 +5,7 @@ obj-$(CONFIG_$(PHASE_)POWER_DOMAIN) += power-domain-uclass.o obj-$(CONFIG_APPLE_PMGR_POWER_DOMAIN) += apple-pmgr.o +obj-$(CONFIG_APPLE_PMP_REPORT_POWER_DOMAIN) += apple-pmp-report.o obj-$(CONFIG_AGILEX5_PMGR_POWER_DOMAIN) += altr-pmgr-agilex5.o obj-$(CONFIG_BCM6328_POWER_DOMAIN) += bcm6328-power-domain.o obj-$(CONFIG_IMX8_POWER_DOMAIN) += imx8-power-domain-legacy.o imx8-power-domain.o diff --git a/drivers/power/domain/apple-pmp-report.c b/drivers/power/domain/apple-pmp-report.c new file mode 100644 index 00000000000..89fd81a7bd8 --- /dev/null +++ b/drivers/power/domain/apple-pmp-report.c @@ -0,0 +1,45 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * Copyright (C) 2026 Yureka <[email protected]> + */ + +#include <dm.h> +#include <power-domain-uclass.h> + +static const struct udevice_id apple_pmp_report_ids[] = { + { .compatible = "apple,t6000-pmp-v2-report" }, + { .compatible = "apple,t6020-pmp-v2-report" }, + { .compatible = "apple,t6030-pmp-v2-report" }, + { .compatible = "apple,t8112-pmp-v2-report" }, + { /* sentinel */ } +}; + +U_BOOT_DRIVER(apple_pmp_report) = { + .name = "apple_pmp_report", + .id = UCLASS_NOP, + .of_match = apple_pmp_report_ids, + .bind = dm_scan_fdt_dev, +}; + +static int apple_pmp_report_entry_of_xlate(struct power_domain *power_domain, + struct ofnode_phandle_args *args) +{ + return 0; +} + +static const struct udevice_id apple_pmp_report_entry_ids[] = { + { .compatible = "apple,t6000-pmp-v2-report-entry" }, + { .compatible = "apple-pmp-report-entry" }, + { /* sentinel */ } +}; + +struct power_domain_ops apple_pmp_report_entry_ops = { + .of_xlate = apple_pmp_report_entry_of_xlate, +}; + +U_BOOT_DRIVER(apple_pmp_report_entry) = { + .name = "apple_pmp_report_entry", + .id = UCLASS_POWER_DOMAIN, + .of_match = apple_pmp_report_entry_ids, + .ops = &apple_pmp_report_entry_ops, +}; --- base-commit: 6902fb4c17faa375003124c451c2550deab5463d change-id: 20260628-apple-pmp-report-4d9dec73e3f2 Best regards, -- Yureka <[email protected]>

