1f270a3f8SJoseph Chen /* 2f270a3f8SJoseph Chen * (C) Copyright 2017 Rockchip Electronics Co., Ltd 3f270a3f8SJoseph Chen * 4f270a3f8SJoseph Chen * SPDX-License-Identifier: GPL-2.0+ 5f270a3f8SJoseph Chen */ 6f270a3f8SJoseph Chen 7f270a3f8SJoseph Chen #ifndef __ROCKCHIP_SMCCC_H__ 8f270a3f8SJoseph Chen #define __ROCKCHIP_SMCCC_H__ 9f270a3f8SJoseph Chen 1094001eb0SJoseph Chen #include <linux/arm-smccc.h> 1194001eb0SJoseph Chen 125f048e57SJoseph Chen /* Rockchip platform SiP call ID */ 135f048e57SJoseph Chen #define SIP_ATF_VERSION 0x82000001 145f048e57SJoseph Chen #define SIP_ACCESS_REG 0x82000002 155f048e57SJoseph Chen #define SIP_SUSPEND_MODE 0x82000003 165f048e57SJoseph Chen #define SIP_PENDING_CPUS 0x82000004 175f048e57SJoseph Chen #define SIP_UARTDBG_CFG 0x82000005 185f048e57SJoseph Chen #define SIP_UARTDBG_CFG64 0xc2000005 195f048e57SJoseph Chen #define SIP_MCU_EL3FIQ_CFG 0x82000006 205f048e57SJoseph Chen #define SIP_ACCESS_CHIP_STATE64 0xc2000006 215f048e57SJoseph Chen #define SIP_SECURE_MEM_CONFIG 0x82000007 225f048e57SJoseph Chen #define SIP_ACCESS_CHIP_EXTRA_STATE64 0xc2000007 235f048e57SJoseph Chen #define SIP_DRAM_CONFIG 0x82000008 245f048e57SJoseph Chen #define SIP_SHARE_MEM 0x82000009 255f048e57SJoseph Chen #define SIP_SIP_VERSION 0x8200000a 265f048e57SJoseph Chen #define SIP_REMOTECTL_CFG 0x8200000b 275716d343SJoseph Chen #define SIP_VPU_RESET 0x8200000c 285716d343SJoseph Chen #define SIP_SOC_BUS_DIV 0x8200000d 295716d343SJoseph Chen #define SIP_LAST_LOG 0x8200000e 30*c3e08fa0SJoseph Chen #define SIP_AMP_CFG 0x82000022 315f048e57SJoseph Chen 3216a92a42STang Yun ping #define ROCKCHIP_SIP_CONFIG_DRAM_INIT 0x00 3316a92a42STang Yun ping #define ROCKCHIP_SIP_CONFIG_DRAM_SET_RATE 0x01 3416a92a42STang Yun ping #define ROCKCHIP_SIP_CONFIG_DRAM_ROUND_RATE 0x02 3516a92a42STang Yun ping #define ROCKCHIP_SIP_CONFIG_DRAM_SET_AT_SR 0x03 3616a92a42STang Yun ping #define ROCKCHIP_SIP_CONFIG_DRAM_GET_BW 0x04 3716a92a42STang Yun ping #define ROCKCHIP_SIP_CONFIG_DRAM_GET_RATE 0x05 3816a92a42STang Yun ping #define ROCKCHIP_SIP_CONFIG_DRAM_CLR_IRQ 0x06 3916a92a42STang Yun ping #define ROCKCHIP_SIP_CONFIG_DRAM_SET_PARAM 0x07 4016a92a42STang Yun ping #define ROCKCHIP_SIP_CONFIG_DRAM_GET_VERSION 0x08 4116a92a42STang Yun ping 425f048e57SJoseph Chen /* Rockchip Sip version */ 435f048e57SJoseph Chen #define SIP_IMPLEMENT_V1 (1) 445f048e57SJoseph Chen #define SIP_IMPLEMENT_V2 (2) 455f048e57SJoseph Chen 465f048e57SJoseph Chen /* Error return code */ 475f048e57SJoseph Chen #define IS_SIP_ERROR(x) (!!(x)) 485f048e57SJoseph Chen 495f048e57SJoseph Chen #define SIP_RET_SUCCESS 0 505f048e57SJoseph Chen #define SIP_RET_SMC_UNKNOWN -1 515f048e57SJoseph Chen #define SIP_RET_NOT_SUPPORTED -2 525f048e57SJoseph Chen #define SIP_RET_INVALID_PARAMS -3 535f048e57SJoseph Chen #define SIP_RET_INVALID_ADDRESS -4 545f048e57SJoseph Chen #define SIP_RET_DENIED -5 555f048e57SJoseph Chen 565f048e57SJoseph Chen /* SIP_ACCESS_REG: read or write */ 575f048e57SJoseph Chen #define SECURE_REG_RD 0x0 585f048e57SJoseph Chen #define SECURE_REG_WR 0x1 595f048e57SJoseph Chen 60*c3e08fa0SJoseph Chen /* SIP_AMP_CFG */ 61*c3e08fa0SJoseph Chen #define AMP_PE_STATE 0x0 62*c3e08fa0SJoseph Chen 635f048e57SJoseph Chen /* Share mem page types */ 645f048e57SJoseph Chen typedef enum { 655f048e57SJoseph Chen SHARE_PAGE_TYPE_INVALID = 0, 665f048e57SJoseph Chen SHARE_PAGE_TYPE_UARTDBG, 675f048e57SJoseph Chen SHARE_PAGE_TYPE_DDR, 685f048e57SJoseph Chen SHARE_PAGE_TYPE_MAX, 695f048e57SJoseph Chen } share_page_type_t; 705f048e57SJoseph Chen 71ac374906SJoseph Chen /* 72ac374906SJoseph Chen * sip_smc_set_suspend_mode() - Set U-Boot system suspend state before trap to trust. 73ac374906SJoseph Chen * 74ac374906SJoseph Chen * see kernel-4.4: drivers/soc/rockchip/rockchip_pm_config.c 75ac374906SJoseph Chen */ 76f270a3f8SJoseph Chen int sip_smc_set_suspend_mode(unsigned long ctrl, 77f270a3f8SJoseph Chen unsigned long config1, 78f270a3f8SJoseph Chen unsigned long config2); 795f048e57SJoseph Chen 80ac374906SJoseph Chen /* 81*c3e08fa0SJoseph Chen * sip_smc_amp_cfg() - config AMP 82*c3e08fa0SJoseph Chen */ 83*c3e08fa0SJoseph Chen int sip_smc_amp_cfg(unsigned long func, unsigned long arg0, unsigned long arg1); 84*c3e08fa0SJoseph Chen 85*c3e08fa0SJoseph Chen /* 86ac374906SJoseph Chen * sip_smc_dram() - Set dram configure for trust. 87ac374906SJoseph Chen * 88ac374906SJoseph Chen * see: ./drivers/ram/rockchip/rockchip_dmc.c 89ac374906SJoseph Chen */ 905f048e57SJoseph Chen struct arm_smccc_res sip_smc_dram(unsigned long arg0, 915f048e57SJoseph Chen unsigned long arg1, 925f048e57SJoseph Chen unsigned long arg2); 935f048e57SJoseph Chen 94ac374906SJoseph Chen /* 95ac374906SJoseph Chen * sip_smc_request_share_mem() - Request share memory from trust. 96ac374906SJoseph Chen * 97ac374906SJoseph Chen * @page_num: page numbers 98ac374906SJoseph Chen * @page_type: page type, see: share_page_type_t 99ac374906SJoseph Chen * 100ac374906SJoseph Chen * @return arm_smccc_res structure, res.a0 equals 0 on success(res.a1 contains 101ac374906SJoseph Chen * share memory base address), otherwise failed. 102ac374906SJoseph Chen */ 1035f048e57SJoseph Chen struct arm_smccc_res sip_smc_request_share_mem(unsigned long page_num, 1045f048e57SJoseph Chen share_page_type_t page_type); 1055f048e57SJoseph Chen 106ac374906SJoseph Chen /* 107ac374906SJoseph Chen * sip_smc_secure_reg_read() - Read secure info(ddr/register...) from trust. 108ac374906SJoseph Chen * 109ac374906SJoseph Chen * @addr_phy: address to read 110ac374906SJoseph Chen * 111ac374906SJoseph Chen * @return arm_smccc_res structure, res.a0 equals 0 on success(res.a1 contains 112ac374906SJoseph Chen * valid data), otherwise failed. 113ac374906SJoseph Chen */ 114ac374906SJoseph Chen struct arm_smccc_res sip_smc_secure_reg_read(unsigned long addr_phy); 115ac374906SJoseph Chen 116ac374906SJoseph Chen /* 117ac374906SJoseph Chen * sip_smc_secure_reg_write() - Write data to trust secure info(ddr/register...). 118ac374906SJoseph Chen * 119ac374906SJoseph Chen * @addr_phy: address to write 120ac374906SJoseph Chen * @val: value to write 121ac374906SJoseph Chen * 122ac374906SJoseph Chen * @return 0 on success, otherwise failed. 123ac374906SJoseph Chen */ 124ac374906SJoseph Chen int sip_smc_secure_reg_write(unsigned long addr_phy, unsigned long val); 125ac374906SJoseph Chen 126ac374906SJoseph Chen /* 127ac374906SJoseph Chen * sip_smc_set_sip_version() - Set sip version to trust. 128ac374906SJoseph Chen * 129ac374906SJoseph Chen * @return 0 on success, otherwise failed. 130ac374906SJoseph Chen */ 1315f048e57SJoseph Chen int sip_smc_set_sip_version(unsigned long version); 132ac374906SJoseph Chen 133ac374906SJoseph Chen /* 134ac374906SJoseph Chen * sip_smc_get_sip_version() - Get sip version to trust. 135ac374906SJoseph Chen * 136ac374906SJoseph Chen * @return arm_smccc_res structure, res.a0 equals 0 on success(res.a1 contains 137ac374906SJoseph Chen * sip version), otherwise failed. 138ac374906SJoseph Chen */ 1395f048e57SJoseph Chen struct arm_smccc_res sip_smc_get_sip_version(void); 140ac374906SJoseph Chen 141ac374906SJoseph Chen /* 142ac374906SJoseph Chen * psci_cpu_on() - Standard ARM PSCI cpu on call. 143ac374906SJoseph Chen * 144ac374906SJoseph Chen * @cpuid: cpu id 145ac374906SJoseph Chen * @entry_point: boot entry point 146ac374906SJoseph Chen * 147ac374906SJoseph Chen * @return 0 on success, otherwise failed. 148ac374906SJoseph Chen */ 149e2bc9ab6SLin Huang int psci_cpu_on(unsigned long cpuid, unsigned long entry_point); 1505f048e57SJoseph Chen 151164b2a33SJoseph Chen #ifdef CONFIG_ARM_CPU_SUSPEND 152ac374906SJoseph Chen /* 153ac374906SJoseph Chen * psci_system_suspend() - Standard ARM PSCI system suspend call. 154ac374906SJoseph Chen * 155ac374906SJoseph Chen * @unused: unused now, always 0 recommend 156ac374906SJoseph Chen * 157ac374906SJoseph Chen * @return 0 on success, otherwise failed. 158ac374906SJoseph Chen */ 159ac374906SJoseph Chen int psci_system_suspend(unsigned long unused); 160164b2a33SJoseph Chen #endif 161ac374906SJoseph Chen 162f270a3f8SJoseph Chen #endif 163