diff --git a/drivers/soc/rockchip/rockchip_pm_config.c b/drivers/soc/rockchip/rockchip_pm_config.c index f8ed42460bb8..2ed57709de24 100644 --- a/drivers/soc/rockchip/rockchip_pm_config.c +++ b/drivers/soc/rockchip/rockchip_pm_config.c @@ -165,12 +165,14 @@ static int pm_config_probe(struct platform_device *pdev) int gpio_temp[10]; u32 sleep_debug_en = 0; u32 apios_suspend = 0; + u32 io_ret_config = 0; #if defined(CONFIG_NO_GKI) u32 virtual_poweroff_en = 0; #endif enum of_gpio_flags flags; int i = 0; int length; + int ret; match_id = of_match_node(pm_match_table, pdev->dev.of_node); if (!match_id) @@ -237,6 +239,16 @@ static int pm_config_probe(struct platform_device *pdev) apios_suspend, 0); + if (!of_property_read_u32_array(node, + "rockchip,sleep-io-ret-config", + &io_ret_config, 1)) { + ret = sip_smc_set_suspend_mode(SUSPEND_IO_RET_CONFIG, io_ret_config, 0); + if (ret) + dev_warn(&pdev->dev, + "sleep-io-ret-config failed (%d), check parameters or update trust\n", + ret); + } + #if defined(CONFIG_NO_GKI) if (!of_property_read_u32_array(node, "rockchip,virtual-poweroff", diff --git a/include/linux/rockchip/rockchip_sip.h b/include/linux/rockchip/rockchip_sip.h index 7e2e5943a1a3..65ca8e0ec2cf 100644 --- a/include/linux/rockchip/rockchip_sip.h +++ b/include/linux/rockchip/rockchip_sip.h @@ -105,6 +105,7 @@ #define VIRTUAL_POWEROFF 0x07 #define SUSPEND_WFI_TIME_MS 0x08 #define LINUX_PM_STATE 0x09 +#define SUSPEND_IO_RET_CONFIG 0x0a /* SIP_REMOTECTL_CFG call types */ #define REMOTECTL_SET_IRQ 0xf0