From 247f5deabf4fe9b86fc6bb01b9c2a456af822ecf Mon Sep 17 00:00:00 2001 From: XiaoDong Huang Date: Tue, 10 Sep 2024 10:49:07 +0800 Subject: [PATCH] soc: rockchip: pm_config: replace memset with memset_io Signed-off-by: XiaoDong Huang Change-Id: Ia75fbfba4efd9d10eb2d15f5ae646135d858e0a0 --- drivers/soc/rockchip/rockchip_pm_config.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/drivers/soc/rockchip/rockchip_pm_config.c b/drivers/soc/rockchip/rockchip_pm_config.c index b4617fd6ae6e..49050b026571 100644 --- a/drivers/soc/rockchip/rockchip_pm_config.c +++ b/drivers/soc/rockchip/rockchip_pm_config.c @@ -351,8 +351,12 @@ static int parse_mcu_sleep_config(struct device_node *node) goto free_mcu_mode; } - /* Initialize core tag */ - memset((void *)res.a1, 0, sizeof(struct rk_mcu_sleep_tags)); + /* Initialize core tag. + * Compiler may optimize the following code into: "str xzr, ..." or "stp xzr, xzr, ..." + * if using memset, that can't guarantee the target address to be 8-byte alignment. + * So we use memset_io instead. + */ + memset_io((void *)res.a1, 0, sizeof(struct rk_mcu_sleep_tags)); config = (struct rk_mcu_sleep_tags *)res.a1; config->core.hdr.tag = RK_ATAG_MCU_SLP_CORE; config->core.hdr.size = sizeof(struct rk_mcu_sleep_core_tag) / sizeof(u32);