zynqmp: pm: Implement pm_get_node_status API function
pm_get_node_status API function returns 3 values: -status: Current power state of the node -requirements: Current requirements for the node -usage: Current usage of the node The last two values only apply to slave nodes. Signed-off-by: Anes Hadziahmetagic <anes.hadziahmetagic@aggios.com> Signed-off-by: Filip Drazic <filip.drazic@aggios.com> Acked-by: Will Wong <willw@xilinx.com>
This commit is contained in:
parent
b6ceca4303
commit
d744b6f56f
|
@ -342,18 +342,22 @@ enum pm_ret_status pm_set_configuration(unsigned int phys_addr)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* pm_get_node_status() - PM call to request a node's current power state
|
* pm_get_node_status() - PM call to request a node's current status
|
||||||
* @nid Node id of the slave
|
* @nid Node id
|
||||||
|
* @ret_buff Buffer for the return values:
|
||||||
|
* [0] - Current power state of the node
|
||||||
|
* [1] - Current requirements for the node (slave nodes only)
|
||||||
|
* [2] - Current usage status for the node (slave nodes only)
|
||||||
*
|
*
|
||||||
* @return Returns status, either success or error+reason
|
* @return Returns status, either success or error+reason
|
||||||
*/
|
*/
|
||||||
enum pm_ret_status pm_get_node_status(enum pm_node_id nid)
|
enum pm_ret_status pm_get_node_status(enum pm_node_id nid,
|
||||||
|
uint32_t *ret_buff)
|
||||||
{
|
{
|
||||||
/* TODO: Add power state argument!! */
|
|
||||||
uint32_t payload[PAYLOAD_ARG_CNT];
|
uint32_t payload[PAYLOAD_ARG_CNT];
|
||||||
|
|
||||||
PM_PACK_PAYLOAD2(payload, PM_GET_NODE_STATUS, nid);
|
PM_PACK_PAYLOAD2(payload, PM_GET_NODE_STATUS, nid);
|
||||||
return pm_ipi_send(primary_proc, payload);
|
return pm_ipi_send_sync(primary_proc, payload, ret_buff, 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -76,7 +76,8 @@ enum pm_ret_status pm_set_max_latency(enum pm_node_id nid,
|
||||||
/* Miscellaneous API functions */
|
/* Miscellaneous API functions */
|
||||||
enum pm_ret_status pm_get_api_version(unsigned int *version);
|
enum pm_ret_status pm_get_api_version(unsigned int *version);
|
||||||
enum pm_ret_status pm_set_configuration(unsigned int phys_addr);
|
enum pm_ret_status pm_set_configuration(unsigned int phys_addr);
|
||||||
enum pm_ret_status pm_get_node_status(enum pm_node_id node);
|
enum pm_ret_status pm_get_node_status(enum pm_node_id node,
|
||||||
|
uint32_t *ret_buff);
|
||||||
enum pm_ret_status pm_register_notifier(enum pm_node_id nid,
|
enum pm_ret_status pm_register_notifier(enum pm_node_id nid,
|
||||||
unsigned int event,
|
unsigned int event,
|
||||||
unsigned int wake,
|
unsigned int wake,
|
||||||
|
|
|
@ -176,8 +176,13 @@ uint64_t pm_smc_handler(uint32_t smc_fid, uint64_t x1, uint64_t x2, uint64_t x3,
|
||||||
SMC_RET1(handle, (uint64_t)ret);
|
SMC_RET1(handle, (uint64_t)ret);
|
||||||
|
|
||||||
case PM_GET_NODE_STATUS:
|
case PM_GET_NODE_STATUS:
|
||||||
ret = pm_get_node_status(pm_arg[0]);
|
{
|
||||||
SMC_RET1(handle, (uint64_t)ret);
|
uint32_t buff[3];
|
||||||
|
|
||||||
|
ret = pm_get_node_status(pm_arg[0], buff);
|
||||||
|
SMC_RET2(handle, (uint64_t)ret | ((uint64_t)buff[0] << 32),
|
||||||
|
(uint64_t)buff[1] | ((uint64_t)buff[2] << 32));
|
||||||
|
}
|
||||||
|
|
||||||
case PM_GET_OP_CHARACTERISTIC:
|
case PM_GET_OP_CHARACTERISTIC:
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue