[PATCH] rockchip: rk3588: Map SCMI shared memory area as non-cacheable
Jonas Karlman
jonas at kwiboo.se
Sun Nov 16 13:33:24 CET 2025
Hi Peter,
On 11/16/2025 10:55 AM, Peter Robinson wrote:
> Hey Jonas,
>
>> The SCMI shared memory area is no longer automatically marked as
>> non-cacheable after the commit a5a0134570c8 ("firmware: scmi: Drop
>> mmu_set_region_dcache_behaviour() misuse").
>>
>> This change in behavior cause Rockchip RK3588 boards to fail boot with:
>>
>> SoC: RK3588
>> DRAM: 8 GiB
>> scmi-over-smccc scmi: Channel unexpectedly busy
>> scmi_base_drv scmi-base.0: getting protocol version failed
>> scmi-over-smccc scmi: failed to probe base protocol
>> initcall_run_r(): initcall initr_dm() failed
>> ### ERROR ### Please RESET the board ###
>>
>> Update the memory mapping on RK3588 to mark the SCMI shared memory area
>> as non-cacheable to fix the SCMI shared memory based transport issue
>> that prevented RK3588 boards from booting.
>
> Will the other newer rockchips rk356x devices which use SCMI need this fix too?
Most RK35xx SoCs only use SCMI clks for CPU, GPU and NPU, however RK3588
also use SCMI clks for sdmmc and because of this is the only RK SoC in
U-Boot that auto imply SCMI_FIRMWARE and CLK_SCMI Kconfig options.
Other boards with RK35xx SoCs could be affected in case the SCMI Kconfig
options are enabled by a user when building U-Boot.
Ideally we could look for /reserved-memory/shmem nodes, however they
seem to use wrong size, 0x100 instead of the actual used 0x1000 size:
#define SCMI_SHARE_MEM_SIZE SIZE_K(4)
For now I just fixed RK3588 to get boards booting using latest master.
Regards,
Jonas
>
>> Signed-off-by: Jonas Karlman <jonas at kwiboo.se>
>> ---
>> arch/arm/mach-rockchip/rk3588/rk3588.c | 15 ++++++++++++++-
>> 1 file changed, 14 insertions(+), 1 deletion(-)
>>
>> diff --git a/arch/arm/mach-rockchip/rk3588/rk3588.c b/arch/arm/mach-rockchip/rk3588/rk3588.c
>> index c01a40020896..55d2caab4fec 100644
>> --- a/arch/arm/mach-rockchip/rk3588/rk3588.c
>> +++ b/arch/arm/mach-rockchip/rk3588/rk3588.c
>> @@ -63,7 +63,20 @@ static struct mm_region rk3588_mem_map[] = {
>> {
>> .virt = 0x0UL,
>> .phys = 0x0UL,
>> - .size = 0xf0000000UL,
>> + .size = 0x10f000UL,
>> + .attrs = PTE_BLOCK_MEMTYPE(MT_NORMAL) |
>> + PTE_BLOCK_INNER_SHARE
>> + }, {
>> + /* SCMI shared memory area must be mapped as non-cacheable. */
>> + .virt = 0x10f000UL,
>> + .phys = 0x10f000UL,
>> + .size = 0x1000UL,
>> + .attrs = PTE_BLOCK_MEMTYPE(MT_NORMAL_NC) |
>> + PTE_BLOCK_INNER_SHARE
>> + }, {
>> + .virt = 0x110000UL,
>> + .phys = 0x110000UL,
>> + .size = 0xefef0000UL,
>> .attrs = PTE_BLOCK_MEMTYPE(MT_NORMAL) |
>> PTE_BLOCK_INNER_SHARE
>> }, {
>> --
>> 2.51.2
>>
More information about the U-Boot
mailing list