From 6cd899480880e0c35610d2a99006cb8558ec5fd7 Mon Sep 17 00:00:00 2001 From: Gabriel Fernandez <gabriel.fernandez@st.com> Date: Fri, 28 Feb 2020 09:39:46 +0100 Subject: [PATCH] stm32mp1: add plat_scmi_clock_set_rate() Implement dedicated platform function plat_scmi_clock_set_rate(), to override the weak defined function. Change-Id: I651e3060588196baa52cf8d80f1ad9af528cf142 Signed-off-by: Gabriel Fernandez <gabriel.fernandez@st.com> Reviewed-on: https://gerrit.st.com/c/mpu/oe/st/tf-a/+/185719 Reviewed-by: CITOOLS <smet-aci-reviews@lists.codex.cro.st.com> Reviewed-by: Yann GAUTIER <yann.gautier@st.com> Tested-by: Yann GAUTIER <yann.gautier@st.com> --- plat/st/stm32mp1/stm32mp1_scmi.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/plat/st/stm32mp1/stm32mp1_scmi.c b/plat/st/stm32mp1/stm32mp1_scmi.c index ecc234422..a6086f93f 100644 --- a/plat/st/stm32mp1/stm32mp1_scmi.c +++ b/plat/st/stm32mp1/stm32mp1_scmi.c @@ -304,6 +304,36 @@ int32_t plat_scmi_clock_rates_by_step(unsigned int agent_id, return SCMI_SUCCESS; } +int32_t plat_scmi_clock_set_rate(unsigned int agent_id, + unsigned int scmi_id, + unsigned long rate) +{ + struct stm32_scmi_clk *clock = find_clock(agent_id, scmi_id); + + if (clock == NULL) { + return SCMI_NOT_FOUND; + } + + if (!stm32mp_nsec_can_access_clock(clock->clock_id)) { + return SCMI_DENIED; + } + + switch (scmi_id) { + case CK_SCMI0_MPU: + if (stm32mp1_set_opp_khz(rate / 1000UL) != 0) { + return SCMI_INVALID_PARAMETERS; + } + break; + default: + if (rate != clk_get_rate(clock->clock_id)) { + return SCMI_INVALID_PARAMETERS; + } + break; + } + + return SCMI_SUCCESS; +} + unsigned long plat_scmi_clock_get_rate(unsigned int agent_id, unsigned int scmi_id) { -- GitLab