11760db68SCaesar Wang /* 21760db68SCaesar Wang * Copyright (c) 2016, ARM Limited and Contributors. All rights reserved. 31760db68SCaesar Wang * 482cb2c1aSdp-arm * SPDX-License-Identifier: BSD-3-Clause 51760db68SCaesar Wang */ 61760db68SCaesar Wang 709d40e0eSAntonio Nino Diaz #include <common/debug.h> 809d40e0eSAntonio Nino Diaz #include <common/runtime_svc.h> 909d40e0eSAntonio Nino Diaz #include <lib/mmio.h> 1009d40e0eSAntonio Nino Diaz 1110301bf7SZiyuan Xu #include <cdn_dp.h> 12ee1ebbd1SIsla Mitchell #include <dfs.h> 131760db68SCaesar Wang #include <plat_sip_calls.h> 141760db68SCaesar Wang #include <rockchip_sip_svc.h> 15fe877779SCaesar Wang 16a8656400SCaesar Wang #define RK_SIP_DDR_CFG 0x82000008 17a8656400SCaesar Wang #define DRAM_INIT 0x00 18a8656400SCaesar Wang #define DRAM_SET_RATE 0x01 19a8656400SCaesar Wang #define DRAM_ROUND_RATE 0x02 20a8656400SCaesar Wang #define DRAM_SET_AT_SR 0x03 21a8656400SCaesar Wang #define DRAM_GET_BW 0x04 22a8656400SCaesar Wang #define DRAM_GET_RATE 0x05 23a8656400SCaesar Wang #define DRAM_CLR_IRQ 0x06 24a8656400SCaesar Wang #define DRAM_SET_PARAM 0x07 25f91b969cSDerek Basehore #define DRAM_SET_ODT_PD 0x08 26fe877779SCaesar Wang 2710301bf7SZiyuan Xu #define RK_SIP_HDCP_CONTROL 0x82000009 2810301bf7SZiyuan Xu #define RK_SIP_HDCP_KEY_DATA64 0xC200000A 2910301bf7SZiyuan Xu 30f91b969cSDerek Basehore uint32_t ddr_smc_handler(uint64_t arg0, uint64_t arg1, 31f91b969cSDerek Basehore uint64_t id, uint64_t arg2) 32fe877779SCaesar Wang { 33fe877779SCaesar Wang switch (id) { 34a8656400SCaesar Wang case DRAM_SET_RATE: 35a8656400SCaesar Wang return ddr_set_rate((uint32_t)arg0); 36a8656400SCaesar Wang case DRAM_ROUND_RATE: 37a8656400SCaesar Wang return ddr_round_rate((uint32_t)arg0); 38a8656400SCaesar Wang case DRAM_GET_RATE: 39fe877779SCaesar Wang return ddr_get_rate(); 40f91b969cSDerek Basehore case DRAM_SET_ODT_PD: 41f91b969cSDerek Basehore dram_set_odt_pd(arg0, arg1, arg2); 42fe877779SCaesar Wang break; 43fe877779SCaesar Wang default: 44fe877779SCaesar Wang break; 45fe877779SCaesar Wang } 46fe877779SCaesar Wang 47fe877779SCaesar Wang return 0; 48fe877779SCaesar Wang } 491760db68SCaesar Wang 5057d1e5faSMasahiro Yamada uintptr_t rockchip_plat_sip_handler(uint32_t smc_fid, 5157d1e5faSMasahiro Yamada u_register_t x1, 5257d1e5faSMasahiro Yamada u_register_t x2, 5357d1e5faSMasahiro Yamada u_register_t x3, 5457d1e5faSMasahiro Yamada u_register_t x4, 551760db68SCaesar Wang void *cookie, 561760db68SCaesar Wang void *handle, 5757d1e5faSMasahiro Yamada u_register_t flags) 581760db68SCaesar Wang { 59*f0063ef9SZiyuan Xu #ifdef PLAT_RK_DP_HDCP 6010301bf7SZiyuan Xu uint64_t x5, x6; 61*f0063ef9SZiyuan Xu #endif 6210301bf7SZiyuan Xu 631760db68SCaesar Wang switch (smc_fid) { 64a8656400SCaesar Wang case RK_SIP_DDR_CFG: 65f91b969cSDerek Basehore SMC_RET1(handle, ddr_smc_handler(x1, x2, x3, x4)); 66*f0063ef9SZiyuan Xu #ifdef PLAT_RK_DP_HDCP 6710301bf7SZiyuan Xu case RK_SIP_HDCP_CONTROL: 6810301bf7SZiyuan Xu SMC_RET1(handle, dp_hdcp_ctrl(x1)); 6910301bf7SZiyuan Xu case RK_SIP_HDCP_KEY_DATA64: 7010301bf7SZiyuan Xu x5 = read_ctx_reg(get_gpregs_ctx(handle), CTX_GPREG_X5); 7110301bf7SZiyuan Xu x6 = read_ctx_reg(get_gpregs_ctx(handle), CTX_GPREG_X6); 7210301bf7SZiyuan Xu SMC_RET1(handle, dp_hdcp_store_key(x1, x2, x3, x4, x5, x6)); 73*f0063ef9SZiyuan Xu #endif 741760db68SCaesar Wang default: 751760db68SCaesar Wang ERROR("%s: unhandled SMC (0x%x)\n", __func__, smc_fid); 761760db68SCaesar Wang SMC_RET1(handle, SMC_UNK); 771760db68SCaesar Wang } 781760db68SCaesar Wang } 79