From 909476ac67680cb167dfb328695237462804a6c2 Mon Sep 17 00:00:00 2001 From: Tony Xie Date: Tue, 11 Jan 2022 15:30:33 +0800 Subject: [PATCH] firmware: rockchip_sip: support cpu on/off for amp os. Signed-off-by: Tony Xie Change-Id: I723e20cb088063e8f9525b3d64e37090e0a10adf --- drivers/firmware/rockchip_sip.c | 19 ++++++++++++++++ include/linux/rockchip/rockchip_sip.h | 32 +++++++++++++++++++++++++++ 2 files changed, 51 insertions(+) diff --git a/drivers/firmware/rockchip_sip.c b/drivers/firmware/rockchip_sip.c index 25ccf2c362df..d955c17b0872 100644 --- a/drivers/firmware/rockchip_sip.c +++ b/drivers/firmware/rockchip_sip.c @@ -264,6 +264,25 @@ struct arm_smccc_res sip_smc_lastlog_request(void) } EXPORT_SYMBOL_GPL(sip_smc_lastlog_request); +int sip_smc_amp_config(u32 sub_func_id, u32 arg1, u32 arg2, u32 arg3) +{ + struct arm_smccc_res res; + + arm_smccc_smc(RK_SIP_AMP_CFG, sub_func_id, arg1, arg2, arg3, + 0, 0, 0, &res); + return res.a0; +} +EXPORT_SYMBOL_GPL(sip_smc_amp_config); + +struct arm_smccc_res sip_smc_get_amp_info(u32 sub_func_id, u32 arg1) +{ + struct arm_smccc_res res; + + arm_smccc_smc(RK_SIP_AMP_CFG, sub_func_id, arg1, 0, 0, 0, 0, 0, &res); + return res; +} +EXPORT_SYMBOL_GPL(sip_smc_get_amp_info); + void __iomem *sip_hdcp_request_share_memory(int id) { static void __iomem *base; diff --git a/include/linux/rockchip/rockchip_sip.h b/include/linux/rockchip/rockchip_sip.h index 49f74c15c94d..6f089f01a58b 100644 --- a/include/linux/rockchip/rockchip_sip.h +++ b/include/linux/rockchip/rockchip_sip.h @@ -51,6 +51,7 @@ #define SIP_SCMI_AGENT15 0x8200001f #define SIP_SDEI_FIQ_DBG_SWITCH_CPU 0x82000020 #define SIP_SDEI_FIQ_DBG_GET_EVENT_ID 0x82000021 +#define RK_SIP_AMP_CFG 0x82000022 #define RK_SIP_FIQ_CTRL 0x82000024 #define SIP_HDCP_CONFIG 0x82000025 @@ -121,6 +122,18 @@ struct dram_addrmap_info { u32 bank_bit_mask; }; +/* AMP Ctrl */ +enum { + RK_AMP_SUB_FUNC_CFG_MODE = 0, + RK_AMP_SUB_FUNC_BOOT_ARG01, + RK_AMP_SUB_FUNC_BOOT_ARG23, + RK_AMP_SUB_FUNC_REQ_CPU_OFF, + RK_AMP_SUB_FUNC_GET_CPU_STATUS, + RK_AMP_SUB_FUNC_RSV, /* for RTOS */ + RK_AMP_SUB_FUNC_CPU_ON, + RK_AMP_SUB_FUNC_END, +}; + enum { FIRMWARE_NONE, FIRMWARE_TEE_32BIT, @@ -194,6 +207,8 @@ int sip_smc_secure_reg_write(u32 addr_phy, u32 val); u32 sip_smc_secure_reg_read(u32 addr_phy); struct arm_smccc_res sip_smc_bus_config(u32 arg0, u32 arg1, u32 arg2); struct dram_addrmap_info *sip_smc_get_dram_map(void); +int sip_smc_amp_config(u32 sub_func_id, u32 arg1, u32 arg2, u32 arg3); +struct arm_smccc_res sip_smc_get_amp_info(u32 sub_func_id, u32 arg1); void __iomem *sip_hdcp_request_share_memory(int id); struct arm_smccc_res sip_hdcp_config(u32 arg0, u32 arg1, u32 arg2); @@ -286,6 +301,23 @@ static inline void __iomem *sip_hdcp_request_share_memory(int id) static inline struct arm_smccc_res sip_hdcp_config(u32 arg0, u32 arg1, u32 arg2) { struct arm_smccc_res tmp = {0}; + + return tmp; +} + +static inline int sip_smc_amp_config(u32 sub_func_id, + u32 arg1, + u32 arg2, + u32 arg3) +{ + return 0; +} + +static inline struct arm_smccc_res sip_smc_get_amp_info(u32 sub_func_id, + u32 arg1) +{ + struct arm_smccc_res tmp = { .a0 = SIP_RET_NOT_SUPPORTED, }; + return tmp; }