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