Commit 8fcdf102 authored by Arnd Bergmann's avatar Arnd Bergmann

Merge tag 'zynqmp-soc-for-v5.20' of https://github.com/Xilinx/linux-xlnx into arm/soc

arm64: ZynqMP SoC changes for v5.20

- Register SGI separately out of EEMI

* tag 'zynqmp-soc-for-v5.20' of https://github.com/Xilinx/linux-xlnx:
  firmware: xilinx: Add TF_A_PM_REGISTER_SGI SMC call

Link: https://lore.kernel.org/r/0196d1f3-e9c7-ef51-143d-e98b14980f63@monstr.euSigned-off-by: default avatarArnd Bergmann <arnd@arndb.de>
parents e0ed9e67 acd6510d
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
/* /*
* Xilinx Zynq MPSoC Firmware layer * Xilinx Zynq MPSoC Firmware layer
* *
* Copyright (C) 2014-2021 Xilinx, Inc. * Copyright (C) 2014-2022 Xilinx, Inc.
* *
* Michal Simek <michal.simek@xilinx.com> * Michal Simek <michal.simek@xilinx.com>
* Davorin Mista <davorin.mista@aggios.com> * Davorin Mista <davorin.mista@aggios.com>
...@@ -340,6 +340,20 @@ int zynqmp_pm_invoke_fn(u32 pm_api_id, u32 arg0, u32 arg1, ...@@ -340,6 +340,20 @@ int zynqmp_pm_invoke_fn(u32 pm_api_id, u32 arg0, u32 arg1,
static u32 pm_api_version; static u32 pm_api_version;
static u32 pm_tz_version; static u32 pm_tz_version;
int zynqmp_pm_register_sgi(u32 sgi_num, u32 reset)
{
int ret;
ret = zynqmp_pm_invoke_fn(TF_A_PM_REGISTER_SGI, sgi_num, reset, 0, 0,
NULL);
if (!ret)
return ret;
/* try old implementation as fallback strategy if above fails */
return zynqmp_pm_invoke_fn(PM_IOCTL, 0, IOCTL_REGISTER_SGI, sgi_num,
reset, NULL);
}
/** /**
* zynqmp_pm_get_api_version() - Get version number of PMU PM firmware * zynqmp_pm_get_api_version() - Get version number of PMU PM firmware
* @version: Returned version value * @version: Returned version value
......
...@@ -647,8 +647,7 @@ static int xlnx_event_manager_probe(struct platform_device *pdev) ...@@ -647,8 +647,7 @@ static int xlnx_event_manager_probe(struct platform_device *pdev)
cpuhp_setup_state(CPUHP_AP_ONLINE_DYN, "soc/event:starting", cpuhp_setup_state(CPUHP_AP_ONLINE_DYN, "soc/event:starting",
xlnx_event_cpuhp_start, xlnx_event_cpuhp_down); xlnx_event_cpuhp_start, xlnx_event_cpuhp_down);
ret = zynqmp_pm_invoke_fn(PM_IOCTL, 0, IOCTL_REGISTER_SGI, sgi_num, ret = zynqmp_pm_register_sgi(sgi_num, 0);
0, NULL);
if (ret) { if (ret) {
dev_err(&pdev->dev, "SGI %d Registration over TF-A failed with %d\n", sgi_num, ret); dev_err(&pdev->dev, "SGI %d Registration over TF-A failed with %d\n", sgi_num, ret);
xlnx_event_cleanup_sgi(pdev); xlnx_event_cleanup_sgi(pdev);
...@@ -681,7 +680,7 @@ static int xlnx_event_manager_remove(struct platform_device *pdev) ...@@ -681,7 +680,7 @@ static int xlnx_event_manager_remove(struct platform_device *pdev)
kfree(eve_data); kfree(eve_data);
} }
ret = zynqmp_pm_invoke_fn(PM_IOCTL, 0, IOCTL_REGISTER_SGI, 0, 1, NULL); ret = zynqmp_pm_register_sgi(0, 1);
if (ret) if (ret)
dev_err(&pdev->dev, "SGI unregistration over TF-A failed with %d\n", ret); dev_err(&pdev->dev, "SGI unregistration over TF-A failed with %d\n", ret);
......
...@@ -34,6 +34,7 @@ ...@@ -34,6 +34,7 @@
#define PM_API_VERSION_2 2 #define PM_API_VERSION_2 2
/* ATF only commands */ /* ATF only commands */
#define TF_A_PM_REGISTER_SGI 0xa04
#define PM_GET_TRUSTZONE_VERSION 0xa03 #define PM_GET_TRUSTZONE_VERSION 0xa03
#define PM_SET_SUSPEND_MODE 0xa02 #define PM_SET_SUSPEND_MODE 0xa02
#define GET_CALLBACK_DATA 0xa01 #define GET_CALLBACK_DATA 0xa01
...@@ -468,6 +469,7 @@ int zynqmp_pm_feature(const u32 api_id); ...@@ -468,6 +469,7 @@ int zynqmp_pm_feature(const u32 api_id);
int zynqmp_pm_is_function_supported(const u32 api_id, const u32 id); int zynqmp_pm_is_function_supported(const u32 api_id, const u32 id);
int zynqmp_pm_set_feature_config(enum pm_feature_config_id id, u32 value); int zynqmp_pm_set_feature_config(enum pm_feature_config_id id, u32 value);
int zynqmp_pm_get_feature_config(enum pm_feature_config_id id, u32 *payload); int zynqmp_pm_get_feature_config(enum pm_feature_config_id id, u32 *payload);
int zynqmp_pm_register_sgi(u32 sgi_num, u32 reset);
#else #else
static inline int zynqmp_pm_get_api_version(u32 *version) static inline int zynqmp_pm_get_api_version(u32 *version)
{ {
...@@ -733,6 +735,11 @@ static inline int zynqmp_pm_get_feature_config(enum pm_feature_config_id id, ...@@ -733,6 +735,11 @@ static inline int zynqmp_pm_get_feature_config(enum pm_feature_config_id id,
{ {
return -ENODEV; return -ENODEV;
} }
static inline int zynqmp_pm_register_sgi(u32 sgi_num, u32 reset)
{
return -ENODEV;
}
#endif #endif
#endif /* __FIRMWARE_ZYNQMP_H__ */ #endif /* __FIRMWARE_ZYNQMP_H__ */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment