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 710301bf7SZiyuan Xu #include <cdn_dp.h> 81760db68SCaesar Wang #include <debug.h> 9*ee1ebbd1SIsla Mitchell #include <dfs.h> 101760db68SCaesar Wang #include <mmio.h> 111760db68SCaesar Wang #include <plat_sip_calls.h> 121760db68SCaesar Wang #include <rockchip_sip_svc.h> 131760db68SCaesar Wang #include <runtime_svc.h> 14fe877779SCaesar Wang 15a8656400SCaesar Wang #define RK_SIP_DDR_CFG 0x82000008 16a8656400SCaesar Wang #define DRAM_INIT 0x00 17a8656400SCaesar Wang #define DRAM_SET_RATE 0x01 18a8656400SCaesar Wang #define DRAM_ROUND_RATE 0x02 19a8656400SCaesar Wang #define DRAM_SET_AT_SR 0x03 20a8656400SCaesar Wang #define DRAM_GET_BW 0x04 21a8656400SCaesar Wang #define DRAM_GET_RATE 0x05 22a8656400SCaesar Wang #define DRAM_CLR_IRQ 0x06 23a8656400SCaesar Wang #define DRAM_SET_PARAM 0x07 24f91b969cSDerek Basehore #define DRAM_SET_ODT_PD 0x08 25fe877779SCaesar Wang 2610301bf7SZiyuan Xu #define RK_SIP_HDCP_CONTROL 0x82000009 2710301bf7SZiyuan Xu #define RK_SIP_HDCP_KEY_DATA64 0xC200000A 2810301bf7SZiyuan Xu 29f91b969cSDerek Basehore uint32_t ddr_smc_handler(uint64_t arg0, uint64_t arg1, 30f91b969cSDerek Basehore uint64_t id, uint64_t arg2) 31fe877779SCaesar Wang { 32fe877779SCaesar Wang switch (id) { 33a8656400SCaesar Wang case DRAM_SET_RATE: 34a8656400SCaesar Wang return ddr_set_rate((uint32_t)arg0); 35a8656400SCaesar Wang case DRAM_ROUND_RATE: 36a8656400SCaesar Wang return ddr_round_rate((uint32_t)arg0); 37a8656400SCaesar Wang case DRAM_GET_RATE: 38fe877779SCaesar Wang return ddr_get_rate(); 39f91b969cSDerek Basehore case DRAM_SET_ODT_PD: 40f91b969cSDerek Basehore dram_set_odt_pd(arg0, arg1, arg2); 41fe877779SCaesar Wang break; 42fe877779SCaesar Wang default: 43fe877779SCaesar Wang break; 44fe877779SCaesar Wang } 45fe877779SCaesar Wang 46fe877779SCaesar Wang return 0; 47fe877779SCaesar Wang } 481760db68SCaesar Wang 491760db68SCaesar Wang uint64_t rockchip_plat_sip_handler(uint32_t smc_fid, 501760db68SCaesar Wang uint64_t x1, 511760db68SCaesar Wang uint64_t x2, 521760db68SCaesar Wang uint64_t x3, 531760db68SCaesar Wang uint64_t x4, 541760db68SCaesar Wang void *cookie, 551760db68SCaesar Wang void *handle, 561760db68SCaesar Wang uint64_t flags) 571760db68SCaesar Wang { 5810301bf7SZiyuan Xu uint64_t x5, x6; 5910301bf7SZiyuan Xu 601760db68SCaesar Wang switch (smc_fid) { 61a8656400SCaesar Wang case RK_SIP_DDR_CFG: 62f91b969cSDerek Basehore SMC_RET1(handle, ddr_smc_handler(x1, x2, x3, x4)); 6310301bf7SZiyuan Xu case RK_SIP_HDCP_CONTROL: 6410301bf7SZiyuan Xu SMC_RET1(handle, dp_hdcp_ctrl(x1)); 6510301bf7SZiyuan Xu case RK_SIP_HDCP_KEY_DATA64: 6610301bf7SZiyuan Xu x5 = read_ctx_reg(get_gpregs_ctx(handle), CTX_GPREG_X5); 6710301bf7SZiyuan Xu x6 = read_ctx_reg(get_gpregs_ctx(handle), CTX_GPREG_X6); 6810301bf7SZiyuan Xu SMC_RET1(handle, dp_hdcp_store_key(x1, x2, x3, x4, x5, x6)); 691760db68SCaesar Wang default: 701760db68SCaesar Wang ERROR("%s: unhandled SMC (0x%x)\n", __func__, smc_fid); 711760db68SCaesar Wang SMC_RET1(handle, SMC_UNK); 721760db68SCaesar Wang } 731760db68SCaesar Wang } 74