mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-10 23:24:38 +00:00
arm64: zynqmp: Return pmufw version for zynqmp_pmufw_version()
Modify the zynqmp_pmufw_version() routine to return PMUFW version so that it can be reused wherever required. Get PMUFW version from PMU only once at bootup and later just return stored value. Signed-off-by: Siva Durga Prasad Paladugu <siva.durga.paladugu@xilinx.com> Signed-off-by: Michal Simek <michal.simek@xilinx.com>
This commit is contained in:
parent
fe68f2332d
commit
b94a8271cc
3 changed files with 28 additions and 16 deletions
|
@ -172,26 +172,27 @@ int __maybe_unused invoke_smc(u32 pm_api_id, u32 arg0, u32 arg1, u32 arg2,
|
|||
}
|
||||
|
||||
#if defined(CONFIG_CLK_ZYNQMP)
|
||||
void zynqmp_pmufw_version(void)
|
||||
unsigned int zynqmp_pmufw_version(void)
|
||||
{
|
||||
int ret;
|
||||
u32 ret_payload[PAYLOAD_ARG_CNT];
|
||||
u32 pm_api_version;
|
||||
static u32 pm_api_version = ZYNQMP_PM_VERSION_INVALID;
|
||||
|
||||
ret = invoke_smc(ZYNQMP_SIP_SVC_GET_API_VERSION, 0, 0, 0, 0,
|
||||
ret_payload);
|
||||
pm_api_version = ret_payload[1];
|
||||
/*
|
||||
* Get PMU version only once and later
|
||||
* just return stored values instead of
|
||||
* asking PMUFW again.
|
||||
*/
|
||||
if (pm_api_version == ZYNQMP_PM_VERSION_INVALID) {
|
||||
ret = invoke_smc(ZYNQMP_SIP_SVC_GET_API_VERSION, 0, 0, 0, 0,
|
||||
ret_payload);
|
||||
pm_api_version = ret_payload[1];
|
||||
|
||||
if (ret)
|
||||
panic("PMUFW is not found - Please load it!\n");
|
||||
if (ret)
|
||||
panic("PMUFW is not found - Please load it!\n");
|
||||
}
|
||||
|
||||
printf("PMUFW:\tv%d.%d\n",
|
||||
pm_api_version >> ZYNQMP_PM_VERSION_MAJOR_SHIFT,
|
||||
pm_api_version & ZYNQMP_PM_VERSION_MINOR_MASK);
|
||||
|
||||
if (pm_api_version < ZYNQMP_PM_VERSION)
|
||||
panic("PMUFW version error. Expected: v%d.%d\n",
|
||||
ZYNQMP_PM_VERSION_MAJOR, ZYNQMP_PM_VERSION_MINOR);
|
||||
return pm_api_version;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
|
@ -32,6 +32,8 @@
|
|||
((ZYNQMP_PM_VERSION_MAJOR << ZYNQMP_PM_VERSION_MAJOR_SHIFT) | \
|
||||
ZYNQMP_PM_VERSION_MINOR)
|
||||
|
||||
#define ZYNQMP_PM_VERSION_INVALID ~0
|
||||
|
||||
enum {
|
||||
IDCODE,
|
||||
VERSION,
|
||||
|
@ -55,7 +57,7 @@ unsigned int zynqmp_get_silicon_version(void);
|
|||
|
||||
void handoff_setup(void);
|
||||
|
||||
void zynqmp_pmufw_version(void);
|
||||
unsigned int zynqmp_pmufw_version(void);
|
||||
int zynqmp_mmio_write(const u32 address, const u32 mask, const u32 value);
|
||||
int zynqmp_mmio_read(const u32 address, u32 *value);
|
||||
int invoke_smc(u32 pm_api_id, u32 arg0, u32 arg1, u32 arg2, u32 arg3,
|
||||
|
|
|
@ -281,7 +281,16 @@ int board_early_init_f(void)
|
|||
{
|
||||
int ret = 0;
|
||||
#if !defined(CONFIG_SPL_BUILD) && defined(CONFIG_CLK_ZYNQMP)
|
||||
zynqmp_pmufw_version();
|
||||
u32 pm_api_version;
|
||||
|
||||
pm_api_version = zynqmp_pmufw_version();
|
||||
printf("PMUFW:\tv%d.%d\n",
|
||||
pm_api_version >> ZYNQMP_PM_VERSION_MAJOR_SHIFT,
|
||||
pm_api_version & ZYNQMP_PM_VERSION_MINOR_MASK);
|
||||
|
||||
if (pm_api_version < ZYNQMP_PM_VERSION)
|
||||
panic("PMUFW version error. Expected: v%d.%d\n",
|
||||
ZYNQMP_PM_VERSION_MAJOR, ZYNQMP_PM_VERSION_MINOR);
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_ZYNQMP_PSU_INIT_ENABLED)
|
||||
|
|
Loading…
Reference in a new issue