From 67507eac79996d7627ab0a7e2ad140417ffdd4dc Mon Sep 17 00:00:00 2001 From: XiaoDong Huang Date: Wed, 12 Mar 2025 19:56:35 +0800 Subject: [PATCH] firmware: rockchip_sip: support cpu_pm_config Change-Id: I803f23acc98251743dd5f1e4906492c730320fd9 Signed-off-by: XiaoDong Huang --- drivers/firmware/rockchip_sip.c | 9 +++++++++ include/linux/rockchip/rockchip_sip.h | 12 ++++++++++++ 2 files changed, 21 insertions(+) diff --git a/drivers/firmware/rockchip_sip.c b/drivers/firmware/rockchip_sip.c index b426ec3d4977..8a2e82c73fde 100644 --- a/drivers/firmware/rockchip_sip.c +++ b/drivers/firmware/rockchip_sip.c @@ -371,6 +371,15 @@ struct arm_smccc_res sip_smc_gpio_config(u32 sub_func_id, u32 arg1, u32 arg2, } EXPORT_SYMBOL_GPL(sip_smc_gpio_config); +int sip_smc_cpu_pm_config(u32 func, u32 id, u32 cfg) +{ + struct arm_smccc_res res; + + res = __invoke_sip_fn_smc(SIP_CPU_PM_CFG, func, id, cfg); + return res.a0; +} +EXPORT_SYMBOL_GPL(sip_smc_cpu_pm_config); + /************************** fiq debugger **************************************/ /* * AArch32 is not allowed to call SMC64(ATF framework does not support), so we diff --git a/include/linux/rockchip/rockchip_sip.h b/include/linux/rockchip/rockchip_sip.h index b6196c138698..0ebcb2fae62d 100644 --- a/include/linux/rockchip/rockchip_sip.h +++ b/include/linux/rockchip/rockchip_sip.h @@ -60,6 +60,7 @@ #define SIP_MCU_CFG 0x82000028 #define SIP_PVTPLL_CFG 0x82000029 #define SIP_GPIO_CFG 0x8200002c +#define SIP_CPU_PM_CFG 0x8200002d #define TRUSTED_OS_HDCPKEY_INIT 0xB7000003 @@ -257,6 +258,11 @@ enum { GPIO_GET_VIRT_EN = 2, }; +/* SIP_CPU_PM_CFG child configs */ +enum { + CPU_PM_CLUST_AUTO_PD_EN = 0, +}; + struct pt_regs; typedef void (*sip_fiq_debugger_uart_irq_tf_cb_t)(struct pt_regs *_pt_regs, unsigned long cpu); @@ -296,6 +302,7 @@ void __iomem *sip_hdcp_request_share_memory(int id); struct arm_smccc_res sip_hdcp_config(u32 arg0, u32 arg1, u32 arg2); struct arm_smccc_res sip_smc_gpio_config(u32 sub_func_id, u32 arg1, u32 arg2, u32 arg3); +int sip_smc_cpu_pm_config(u32 func, u32 id, u32 cfg); ulong sip_cpu_logical_map_mpidr(u32 cpu); /***************************fiq debugger **************************************/ void sip_fiq_debugger_enable_fiq(bool enable, uint32_t tgt_cpu); @@ -447,6 +454,11 @@ static inline struct arm_smccc_res sip_smc_gpio_config(u32 sub_func_id, u32 arg1 return tmp; } +static inline int sip_smc_cpu_pm_config(u32 func, u32 id, u32 cfg) +{ + return SIP_RET_NOT_SUPPORTED; +} + static inline ulong sip_cpu_logical_map_mpidr(u32 cpu) { return 0; } /***************************fiq debugger **************************************/