zynqmp: pm: Implemented 'get_op_characteristic' PM API call

Signed-off-by: Anes Hadziahmetagic <anes.hadziahmetagic@aggios.com>
Signed-off-by: Filip Drazic <filip.drazic@aggios.com>
Signed-off-by: Soren Brinkmann <soren.brinkmann@xilinx.com>
This commit is contained in:
Anes Hadziahmetagic 2016-05-12 16:17:30 +02:00 committed by Soren Brinkmann
parent df4c59c5d2
commit 493541d640
4 changed files with 23 additions and 10 deletions

View File

@ -395,17 +395,25 @@ enum pm_ret_status pm_register_notifier(enum pm_node_id nid,
} }
/** /**
* pm_get_op_characteristic() - PM call to get a particular operating * pm_get_op_characteristic() - PM call to request operating characteristics
* characteristic of a node * of a node
* @nid Node ID * @nid Node id of the slave
* @type Operating characterstic type to be returned * @type Type of the operating characteristic
* (power, temperature and latency)
* @result Returns the operating characteristic for the requested node,
* specified by the type
* *
* @return Returns status, either success or error+reason * @return Returns status, either success or error+reason
*/ */
enum pm_ret_status pm_get_op_characteristic(enum pm_node_id nid, enum pm_ret_status pm_get_op_characteristic(enum pm_node_id nid,
enum pm_opchar_type type) enum pm_opchar_type type,
uint32_t *result)
{ {
return PM_RET_ERROR_NOTSUPPORTED; uint32_t payload[PAYLOAD_ARG_CNT];
/* Send request to the PMU */
PM_PACK_PAYLOAD3(payload, PM_GET_OP_CHARACTERISTIC, nid, type);
return pm_ipi_send_sync(primary_proc, payload, result);
} }
/* Direct-Control API functions */ /* Direct-Control API functions */

View File

@ -91,7 +91,8 @@ enum pm_ret_status pm_register_notifier(enum pm_node_id nid,
unsigned int wake, unsigned int wake,
unsigned int enable); unsigned int enable);
enum pm_ret_status pm_get_op_characteristic(enum pm_node_id nid, enum pm_ret_status pm_get_op_characteristic(enum pm_node_id nid,
enum pm_opchar_type type); enum pm_opchar_type type,
uint32_t *result);
enum pm_ret_status pm_acknowledge_cb(enum pm_node_id nid, enum pm_ret_status pm_acknowledge_cb(enum pm_node_id nid,
enum pm_ret_status status, enum pm_ret_status status,
unsigned int oppoint); unsigned int oppoint);

View File

@ -171,8 +171,8 @@ enum pm_ram_state {
enum pm_opchar_type { enum pm_opchar_type {
PM_OPCHAR_TYPE_POWER = 1, PM_OPCHAR_TYPE_POWER = 1,
PM_OPCHAR_TYPE_ENERGY,
PM_OPCHAR_TYPE_TEMP, PM_OPCHAR_TYPE_TEMP,
PM_OPCHAR_TYPE_LATENCY,
}; };
/** /**

View File

@ -191,8 +191,12 @@ 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_OP_CHARACTERISTIC: case PM_GET_OP_CHARACTERISTIC:
ret = pm_get_op_characteristic(pm_arg[0], pm_arg[1]); {
SMC_RET1(handle, (uint64_t)ret); uint32_t result;
ret = pm_get_op_characteristic(pm_arg[0], pm_arg[1], &result);
SMC_RET1(handle, (uint64_t)ret | ((uint64_t)result << 32));
}
case PM_REGISTER_NOTIFIER: case PM_REGISTER_NOTIFIER:
ret = pm_register_notifier(pm_arg[0], pm_arg[1], pm_arg[2], ret = pm_register_notifier(pm_arg[0], pm_arg[1], pm_arg[2],