mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-17 10:04:26 +00:00
fix(scmi): add parameter for plat_scmi_clock_rates_array
Pass "start_idx" to plat_scmi_clock_rates_array. This parameter is required to obtain the rate table a second time. Signed-off-by: XiaoDong Huang <derrick.huang@rock-chips.com> Change-Id: I97c6751e7d34c839ced8f22bddc39fb534978cc4
This commit is contained in:
parent
b3d7e9c282
commit
ca9d6edc89
3 changed files with 14 additions and 5 deletions
|
@ -37,7 +37,8 @@ const char *plat_scmi_clock_get_name(unsigned int agent_id __unused,
|
|||
int32_t plat_scmi_clock_rates_array(unsigned int agent_id __unused,
|
||||
unsigned int scmi_id __unused,
|
||||
unsigned long *rates __unused,
|
||||
size_t *nb_elts __unused)
|
||||
size_t *nb_elts __unused,
|
||||
uint32_t start_idx __unused)
|
||||
{
|
||||
return SCMI_NOT_SUPPORTED;
|
||||
}
|
||||
|
@ -298,7 +299,7 @@ static void scmi_clock_describe_rates(struct scmi_msg *msg)
|
|||
|
||||
/* Platform may support array rate description */
|
||||
status = plat_scmi_clock_rates_array(msg->agent_id, clock_id, NULL,
|
||||
&nb_rates);
|
||||
&nb_rates, 0);
|
||||
if (status == SCMI_SUCCESS) {
|
||||
/* Currently 12 cells mex, so it's affordable for the stack */
|
||||
unsigned long plat_rates[RATES_ARRAY_SIZE_MAX / RATE_DESC_SIZE];
|
||||
|
@ -307,7 +308,8 @@ static void scmi_clock_describe_rates(struct scmi_msg *msg)
|
|||
size_t rem_nb = nb_rates - in_args->rate_index - ret_nb;
|
||||
|
||||
status = plat_scmi_clock_rates_array(msg->agent_id, clock_id,
|
||||
plat_rates, &ret_nb);
|
||||
plat_rates, &ret_nb,
|
||||
in_args->rate_index);
|
||||
if (status == SCMI_SUCCESS) {
|
||||
write_rate_desc_array_in_buffer(msg->out + sizeof(p2a),
|
||||
plat_rates, ret_nb);
|
||||
|
|
|
@ -113,10 +113,12 @@ const char *plat_scmi_clock_get_name(unsigned int agent_id,
|
|||
* @scmi_id: SCMI clock ID
|
||||
* @rates: If NULL, function returns, else output rates array
|
||||
* @nb_elts: Array size of @rates.
|
||||
* @start_idx: Start index of rates array
|
||||
* Return an SCMI compliant error code
|
||||
*/
|
||||
int32_t plat_scmi_clock_rates_array(unsigned int agent_id, unsigned int scmi_id,
|
||||
unsigned long *rates, size_t *nb_elts);
|
||||
unsigned long *rates, size_t *nb_elts,
|
||||
uint32_t start_idx);
|
||||
|
||||
/*
|
||||
* Get clock possible rate as range with regular steps in Hertz
|
||||
|
|
|
@ -260,7 +260,8 @@ const char *plat_scmi_clock_get_name(unsigned int agent_id,
|
|||
}
|
||||
|
||||
int32_t plat_scmi_clock_rates_array(unsigned int agent_id, unsigned int scmi_id,
|
||||
unsigned long *array, size_t *nb_elts)
|
||||
unsigned long *array, size_t *nb_elts,
|
||||
uint32_t start_idx)
|
||||
{
|
||||
struct stm32_scmi_clk *clock = find_clock(agent_id, scmi_id);
|
||||
|
||||
|
@ -272,6 +273,10 @@ int32_t plat_scmi_clock_rates_array(unsigned int agent_id, unsigned int scmi_id,
|
|||
return SCMI_DENIED;
|
||||
}
|
||||
|
||||
if (start_idx > 0) {
|
||||
return SCMI_OUT_OF_RANGE;
|
||||
}
|
||||
|
||||
if (array == NULL) {
|
||||
*nb_elts = 1U;
|
||||
} else if (*nb_elts == 1U) {
|
||||
|
|
Loading…
Add table
Reference in a new issue