xref: /rk3399_ARM-atf/plat/rockchip/rk3399/plat_sip_calls.c (revision 28d3d614b57730bdf364e49259d3c42599d26145)
1 /*
2  * Copyright (c) 2016, ARM Limited and Contributors. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions are met:
6  *
7  * 1. Redistributions of source code must retain the above copyright notice,
8  * this list of conditions and the following disclaimer.
9  *
10  * 2. Redistributions in binary form must reproduce the above copyright notice,
11  * this list of conditions and the following disclaimer in the documentation
12  * and/or other materials provided with the distribution.
13  *
14  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
15  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
18  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
19  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
20  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
21  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
22  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
23  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
24  * POSSIBILITY OF SUCH DAMAGE.
25  */
26 
27 #include <debug.h>
28 #include <mmio.h>
29 #include <plat_sip_calls.h>
30 #include <rockchip_sip_svc.h>
31 #include <runtime_svc.h>
32 #include <dram.h>
33 
34 #define RK_SIP_DDR_CFG64	0x82000008
35 #define CONFIG_DRAM_INIT	0x00
36 #define CONFIG_DRAM_SET_RATE	0x01
37 #define CONFIG_DRAM_ROUND_RATE	0x02
38 #define CONFIG_DRAM_SET_AT_SR	0x03
39 #define CONFIG_DRAM_GET_BW	0x04
40 #define CONFIG_DRAM_GET_RATE	0x05
41 #define CONFIG_DRAM_CLR_IRQ	0x06
42 #define CONFIG_DRAM_SET_PARAM   0x07
43 
44 uint64_t ddr_smc_handler(uint64_t arg0, uint64_t arg1, uint64_t id)
45 {
46 	switch (id) {
47 	case CONFIG_DRAM_INIT:
48 		ddr_init();
49 		break;
50 	case CONFIG_DRAM_SET_RATE:
51 		return ddr_set_rate(arg0);
52 	case CONFIG_DRAM_ROUND_RATE:
53 		return ddr_round_rate(arg0);
54 	case CONFIG_DRAM_GET_RATE:
55 		return ddr_get_rate();
56 	case CONFIG_DRAM_CLR_IRQ:
57 		clr_dcf_irq();
58 		break;
59 	case CONFIG_DRAM_SET_PARAM:
60 		dts_timing_receive(arg0, arg1);
61 		break;
62 	default:
63 		break;
64 	}
65 
66 	return 0;
67 }
68 
69 uint64_t rockchip_plat_sip_handler(uint32_t smc_fid,
70 				   uint64_t x1,
71 				   uint64_t x2,
72 				   uint64_t x3,
73 				   uint64_t x4,
74 				   void *cookie,
75 				   void *handle,
76 				   uint64_t flags)
77 {
78 	switch (smc_fid) {
79 	case RK_SIP_DDR_CFG64:
80 		SMC_RET1(handle, ddr_smc_handler(x1, x2, x3));
81 	default:
82 		ERROR("%s: unhandled SMC (0x%x)\n", __func__, smc_fid);
83 		SMC_RET1(handle, SMC_UNK);
84 	}
85 }
86