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

Reply via email to