mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-10 23:24:38 +00:00
firmware: zynqmp: Separate function for sending message via mailbox
U-Boot running in EL3 can't use SMC that's why there is a need to talk to PMUFW directly via mailbox. The same logic is applied to all functions which need to talk to PMUFW that's why move this logic to separate function to avoid code duplication. Also SMC request ID can be composed from PM_SIP_SVC offset that's why ZYNQMP_SIP_SVC_GET_API_VERSION macro can be removed completely. Signed-off-by: Michal Simek <michal.simek@xilinx.com>
This commit is contained in:
parent
325a22dc19
commit
b6039aad2d
2 changed files with 10 additions and 11 deletions
|
@ -49,6 +49,14 @@ static int ipi_req(const u32 *req, size_t req_len, u32 *res, size_t res_maxlen)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int send_req(const u32 *req, size_t req_len, u32 *res, size_t res_maxlen)
|
||||||
|
{
|
||||||
|
if (IS_ENABLED(CONFIG_SPL_BUILD))
|
||||||
|
return ipi_req(req, req_len, res, res_maxlen);
|
||||||
|
|
||||||
|
return invoke_smc(req[0] + PM_SIP_SVC, 0, 0, 0, 0, res);
|
||||||
|
}
|
||||||
|
|
||||||
unsigned int zynqmp_firmware_version(void)
|
unsigned int zynqmp_firmware_version(void)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
@ -61,16 +69,9 @@ unsigned int zynqmp_firmware_version(void)
|
||||||
* asking PMUFW again.
|
* asking PMUFW again.
|
||||||
**/
|
**/
|
||||||
if (pm_api_version == ZYNQMP_PM_VERSION_INVALID) {
|
if (pm_api_version == ZYNQMP_PM_VERSION_INVALID) {
|
||||||
if (IS_ENABLED(CONFIG_SPL_BUILD)) {
|
const u32 request[] = { PM_GET_API_VERSION };
|
||||||
const u32 request[] = { PM_GET_API_VERSION };
|
|
||||||
|
|
||||||
ret = ipi_req(request, ARRAY_SIZE(request),
|
|
||||||
ret_payload, 2);
|
|
||||||
} else {
|
|
||||||
ret = invoke_smc(ZYNQMP_SIP_SVC_GET_API_VERSION, 0, 0,
|
|
||||||
0, 0, ret_payload);
|
|
||||||
};
|
|
||||||
|
|
||||||
|
ret = send_req(request, ARRAY_SIZE(request), ret_payload, 2);
|
||||||
if (ret)
|
if (ret)
|
||||||
panic("PMUFW is not found - Please load it!\n");
|
panic("PMUFW is not found - Please load it!\n");
|
||||||
|
|
||||||
|
|
|
@ -15,8 +15,6 @@ enum pm_api_id {
|
||||||
};
|
};
|
||||||
|
|
||||||
#define PM_SIP_SVC 0xc2000000
|
#define PM_SIP_SVC 0xc2000000
|
||||||
#define ZYNQMP_SIP_SVC_GET_API_VERSION \
|
|
||||||
(PM_SIP_SVC + PM_GET_API_VERSION)
|
|
||||||
#define ZYNQMP_SIP_SVC_PM_SECURE_IMG_LOAD \
|
#define ZYNQMP_SIP_SVC_PM_SECURE_IMG_LOAD \
|
||||||
(PM_SIP_SVC + PM_SECURE_IMAGE)
|
(PM_SIP_SVC + PM_SECURE_IMAGE)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue