diff --git a/drivers/soc/rockchip/rockchip_thunderboot_service.c b/drivers/soc/rockchip/rockchip_thunderboot_service.c index d1420d141273..6002d64c8b05 100644 --- a/drivers/soc/rockchip/rockchip_thunderboot_service.c +++ b/drivers/soc/rockchip/rockchip_thunderboot_service.c @@ -24,6 +24,7 @@ struct rk_tb_serv { struct reset_control *rsts; phys_addr_t mem_start; size_t mem_size; + bool mem_no_free; }; static atomic_t mcu_done = ATOMIC_INIT(0); @@ -89,7 +90,8 @@ static void do_mcu_done(struct rk_tb_serv *serv) start = phys_to_virt(serv->mem_start); end = start + serv->mem_size; - free_reserved_area(start, end, -1, "rtos"); + if (!serv->mem_no_free) + free_reserved_area(start, end, -1, "rtos"); spin_lock(&lock); if (atomic_read(&mcu_done)) { @@ -150,6 +152,8 @@ static int rk_tb_serv_probe(struct platform_device *pdev) if (IS_ERR(serv->rsts) && PTR_ERR(serv->rsts) == -EPROBE_DEFER) return -EPROBE_DEFER; + serv->mem_no_free = device_property_read_bool(&pdev->dev, "memory-no-free"); + platform_set_drvdata(pdev, serv); mbox_cl = &serv->mbox_cl;