drivers/power/domain/zynqmp-power-domain.c currently implements a private zynqmp_pm_request_node() wrapper for issuing PM node requests. The same functionality is also needed by SD and OSPI drivers.
Move zynqmp_pm_request_node() into firmware-zynqmp.c as a shared helper and export it for reuse by other consumers. Remove the duplicate implementation from the power-domain driver. Move zynqmp_pm_request_node() outside the CONFIG_ZYNQMP_IPI guard to match the unconditional xilinx_pm_request() dependency and preserve ZYNQMP_FIRMWARE=y, ZYNQMP_IPI=n build compatibility. Signed-off-by: Akshay Belsare <[email protected]> --- drivers/firmware/firmware-zynqmp.c | 7 +++++++ drivers/power/domain/zynqmp-power-domain.c | 7 ------- include/zynqmp_firmware.h | 15 +++++++++------ 3 files changed, 16 insertions(+), 13 deletions(-) diff --git a/drivers/firmware/firmware-zynqmp.c b/drivers/firmware/firmware-zynqmp.c index fae66ccb3d8..50a7f8c02e7 100644 --- a/drivers/firmware/firmware-zynqmp.c +++ b/drivers/firmware/firmware-zynqmp.c @@ -845,6 +845,13 @@ int __maybe_unused xilinx_pm_request(u32 api_id, u32 arg0, u32 arg1, u32 arg2, arg5, ret_payload); } +int zynqmp_pm_request_node(const u32 node, const u32 capabilities, const u32 qos, + const enum zynqmp_pm_request_ack ack) +{ + return xilinx_pm_request(PM_REQUEST_NODE, node, capabilities, qos, + ack, 0, 0, NULL); +} + static const struct udevice_id zynqmp_firmware_ids[] = { { .compatible = "xlnx,zynqmp-firmware", .data = (ulong)smc_call_legacy }, { .compatible = "xlnx,versal-firmware", .data = (ulong)smc_call_legacy}, diff --git a/drivers/power/domain/zynqmp-power-domain.c b/drivers/power/domain/zynqmp-power-domain.c index 0acfc54e787..27d13769e9a 100644 --- a/drivers/power/domain/zynqmp-power-domain.c +++ b/drivers/power/domain/zynqmp-power-domain.c @@ -13,13 +13,6 @@ #include <zynqmp_firmware.h> -static int zynqmp_pm_request_node(const u32 node, const u32 capabilities, - const u32 qos, const enum zynqmp_pm_request_ack ack) -{ - return xilinx_pm_request(PM_REQUEST_NODE, node, capabilities, - qos, ack, 0, 0, NULL); -} - static int zynqmp_power_domain_request(struct power_domain *power_domain) { int ret = 0; diff --git a/include/zynqmp_firmware.h b/include/zynqmp_firmware.h index f753a67ac27..949ef5ec121 100644 --- a/include/zynqmp_firmware.h +++ b/include/zynqmp_firmware.h @@ -468,6 +468,15 @@ u32 zynqmp_pm_get_bootmode_reg(void); u32 zynqmp_pm_get_pmc_multi_boot_reg(void); u32 zynqmp_pm_get_pmc_global_pggs_reg(u32 reg_addr); +enum zynqmp_pm_request_ack { + ZYNQMP_PM_REQUEST_ACK_NO = 1, + ZYNQMP_PM_REQUEST_ACK_BLOCKING = 2, + ZYNQMP_PM_REQUEST_ACK_NON_BLOCKING = 3, +}; + +int zynqmp_pm_request_node(const u32 node, const u32 capabilities, const u32 qos, + const enum zynqmp_pm_request_ack ack); + /* Type of Config Object */ #define PM_CONFIG_OBJECT_TYPE_BASE 0x1U #define PM_CONFIG_OBJECT_TYPE_OVERLAY 0x2U @@ -485,12 +494,6 @@ u32 zynqmp_pm_get_pmc_global_pggs_reg(u32 reg_addr); #define PM_CONFIG_IPI_PSU_CORTEXR5_0_MASK 0x00000100 #define PM_CONFIG_IPI_PSU_CORTEXR5_1_MASK 0x00000200 -enum zynqmp_pm_request_ack { - ZYNQMP_PM_REQUEST_ACK_NO = 1, - ZYNQMP_PM_REQUEST_ACK_BLOCKING = 2, - ZYNQMP_PM_REQUEST_ACK_NON_BLOCKING = 3, -}; - /* Node capabilities */ #define ZYNQMP_PM_CAPABILITY_ACCESS 0x1U #define ZYNQMP_PM_CAPABILITY_CONTEXT 0x2U -- 2.25.1
