zynqmp: pm: Implement PLL get mode EEMI API
This API will be used to get the currently configured PLL mode: reset (bypassed and unlocked), integer or fractional (locked). Signed-off-by: Mirela Simonovic <mirela.simonovic@aggios.com> Acked-by: Will Wong <WILLW@xilinx.com> Signed-off-by: Jolly Shah <jollys@xilinx.com>
This commit is contained in:
parent
5f1a5fee52
commit
202797934d
|
@ -1326,3 +1326,24 @@ enum pm_ret_status pm_pll_set_mode(enum pm_node_id nid, enum pm_pll_mode mode)
|
|||
PM_PACK_PAYLOAD3(payload, PM_PLL_SET_MODE, nid, mode);
|
||||
return pm_ipi_send_sync(primary_proc, payload, NULL, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* pm_pll_get_mode() - Get the PLL mode
|
||||
* @nid Node id of the target PLL
|
||||
* @mode Location to store the mode of the PLL
|
||||
*
|
||||
* @return Error if an argument is not valid or status as returned by the
|
||||
* PM controller (PMU)
|
||||
*/
|
||||
enum pm_ret_status pm_pll_get_mode(enum pm_node_id nid, enum pm_pll_mode *mode)
|
||||
{
|
||||
uint32_t payload[PAYLOAD_ARG_CNT];
|
||||
|
||||
/* Check if given node ID is a PLL node */
|
||||
if (nid < NODE_APLL || nid > NODE_IOPLL)
|
||||
return PM_RET_ERROR_ARGS;
|
||||
|
||||
/* Send request to the PMU */
|
||||
PM_PACK_PAYLOAD2(payload, PM_PLL_GET_MODE, nid);
|
||||
return pm_ipi_send_sync(primary_proc, payload, mode, 1);
|
||||
}
|
||||
|
|
|
@ -185,5 +185,6 @@ enum pm_ret_status pm_pll_get_parameter(enum pm_node_id nid,
|
|||
unsigned int *value);
|
||||
|
||||
enum pm_ret_status pm_pll_set_mode(enum pm_node_id nid, enum pm_pll_mode mode);
|
||||
enum pm_ret_status pm_pll_get_mode(enum pm_node_id nid, enum pm_pll_mode *mode);
|
||||
|
||||
#endif /* PM_API_SYS_H */
|
||||
|
|
|
@ -96,6 +96,7 @@ enum pm_api_id {
|
|||
PM_PLL_SET_PARAMETER,
|
||||
PM_PLL_GET_PARAMETER,
|
||||
PM_PLL_SET_MODE,
|
||||
PM_PLL_GET_MODE,
|
||||
PM_API_MAX
|
||||
};
|
||||
|
||||
|
|
|
@ -579,6 +579,14 @@ uint64_t pm_smc_handler(uint32_t smc_fid, uint64_t x1, uint64_t x2, uint64_t x3,
|
|||
ret = pm_pll_set_mode(pm_arg[0], pm_arg[1]);
|
||||
SMC_RET1(handle, (uint64_t)ret);
|
||||
|
||||
case PM_PLL_GET_MODE:
|
||||
{
|
||||
uint32_t mode;
|
||||
|
||||
ret = pm_pll_get_mode(pm_arg[0], &mode);
|
||||
SMC_RET1(handle, (uint64_t)ret | ((uint64_t)mode << 32));
|
||||
}
|
||||
|
||||
default:
|
||||
WARN("Unimplemented PM Service Call: 0x%x\n", smc_fid);
|
||||
SMC_RET1(handle, SMC_UNK);
|
||||
|
|
Loading…
Reference in New Issue