[PATCH 4/4] scmi: smt: correct mmu_set_region_dcache_behaviour parameters

Patrick Delaunay patrick.delaunay at st.com
Tue Nov 3 12:01:13 CET 2020


Since commit d877f8fd0f09 ("arm: provide a function for boards init code to
modify MMU virtual-physical map"), the mmu_set_region_dcache_behaviour_phys
parameters need to be aligned on MMU_SECTION_SIZE to avoid unpredictable
behavior (alignment was done previously done in the function
mmu_set_region_dcache_behaviour_phys).

CC: Etienne Carriere <etienne.carriere at linaro.org>
Fixes: 240720e9052f ("firmware: scmi: mailbox/smt agent device")
Signed-off-by: Patrick Delaunay <patrick.delaunay at st.com>
---

 drivers/firmware/scmi/smt.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/drivers/firmware/scmi/smt.c b/drivers/firmware/scmi/smt.c
index d25478796a..b88e228dc8 100644
--- a/drivers/firmware/scmi/smt.c
+++ b/drivers/firmware/scmi/smt.c
@@ -53,9 +53,12 @@ int scmi_dt_get_smt_buffer(struct udevice *dev, struct scmi_smt *smt)
 		return -ENOMEM;
 
 #ifdef CONFIG_ARM
-	if (dcache_status())
-		mmu_set_region_dcache_behaviour((uintptr_t)smt->buf,
-						smt->size, DCACHE_OFF);
+	if (dcache_status()) {
+		uintptr_t start = ALIGN_DOWN((uintptr_t)smt->buf, MMU_SECTION_SIZE);
+		size_t size = ALIGN((uintptr_t)smt->buf - start + smt->size, MMU_SECTION_SIZE);
+
+		mmu_set_region_dcache_behaviour(start, size, DCACHE_OFF);
+    }
 #endif
 
 	return 0;
-- 
2.17.1



More information about the U-Boot mailing list