xref: /rk3399_ARM-atf/plat/arm/soc/common/soc_css_security.c (revision b4315306ada18bac1c74f34db717d22fd5ff3003)
1*b4315306SDan Handley /*
2*b4315306SDan Handley  * Copyright (c) 2015, ARM Limited and Contributors. All rights reserved.
3*b4315306SDan Handley  *
4*b4315306SDan Handley  * Redistribution and use in source and binary forms, with or without
5*b4315306SDan Handley  * modification, are permitted provided that the following conditions are met:
6*b4315306SDan Handley  *
7*b4315306SDan Handley  * Redistributions of source code must retain the above copyright notice, this
8*b4315306SDan Handley  * list of conditions and the following disclaimer.
9*b4315306SDan Handley  *
10*b4315306SDan Handley  * Redistributions in binary form must reproduce the above copyright notice,
11*b4315306SDan Handley  * this list of conditions and the following disclaimer in the documentation
12*b4315306SDan Handley  * and/or other materials provided with the distribution.
13*b4315306SDan Handley  *
14*b4315306SDan Handley  * Neither the name of ARM nor the names of its contributors may be used
15*b4315306SDan Handley  * to endorse or promote products derived from this software without specific
16*b4315306SDan Handley  * prior written permission.
17*b4315306SDan Handley  *
18*b4315306SDan Handley  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19*b4315306SDan Handley  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20*b4315306SDan Handley  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21*b4315306SDan Handley  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
22*b4315306SDan Handley  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23*b4315306SDan Handley  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24*b4315306SDan Handley  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25*b4315306SDan Handley  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26*b4315306SDan Handley  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27*b4315306SDan Handley  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28*b4315306SDan Handley  * POSSIBILITY OF SUCH DAMAGE.
29*b4315306SDan Handley  */
30*b4315306SDan Handley 
31*b4315306SDan Handley #include <board_css_def.h>
32*b4315306SDan Handley #include <mmio.h>
33*b4315306SDan Handley #include <platform_def.h>
34*b4315306SDan Handley #include <soc_css_def.h>
35*b4315306SDan Handley 
36*b4315306SDan Handley /*
37*b4315306SDan Handley  * Address of slave 'n' security setting in the NIC-400 address region
38*b4315306SDan Handley  * control
39*b4315306SDan Handley  * TODO: Ideally this macro should be moved in a "nic-400.h" header file but
40*b4315306SDan Handley  * it would be the only thing in there so it's not worth it at the moment.
41*b4315306SDan Handley  */
42*b4315306SDan Handley #define NIC400_ADDR_CTRL_SECURITY_REG(n)	(0x8 + (n) * 4)
43*b4315306SDan Handley 
44*b4315306SDan Handley void soc_css_init_nic400(void)
45*b4315306SDan Handley {
46*b4315306SDan Handley 	/*
47*b4315306SDan Handley 	 * NIC-400 Access Control Initialization
48*b4315306SDan Handley 	 *
49*b4315306SDan Handley 	 * Define access privileges by setting each corresponding bit to:
50*b4315306SDan Handley 	 *   0 = Secure access only
51*b4315306SDan Handley 	 *   1 = Non-secure access allowed
52*b4315306SDan Handley 	 */
53*b4315306SDan Handley 
54*b4315306SDan Handley 	/*
55*b4315306SDan Handley 	 * Allow non-secure access to some SOC regions, excluding UART1, which
56*b4315306SDan Handley 	 * remains secure.
57*b4315306SDan Handley 	 * Note: This is the NIC-400 device on the SOC
58*b4315306SDan Handley 	 */
59*b4315306SDan Handley 	mmio_write_32(SOC_CSS_NIC400_BASE +
60*b4315306SDan Handley 		NIC400_ADDR_CTRL_SECURITY_REG(SOC_CSS_NIC400_USB_EHCI), ~0);
61*b4315306SDan Handley 	mmio_write_32(SOC_CSS_NIC400_BASE +
62*b4315306SDan Handley 		NIC400_ADDR_CTRL_SECURITY_REG(SOC_CSS_NIC400_TLX_MASTER), ~0);
63*b4315306SDan Handley 	mmio_write_32(SOC_CSS_NIC400_BASE +
64*b4315306SDan Handley 		NIC400_ADDR_CTRL_SECURITY_REG(SOC_CSS_NIC400_USB_OHCI), ~0);
65*b4315306SDan Handley 	mmio_write_32(SOC_CSS_NIC400_BASE +
66*b4315306SDan Handley 		NIC400_ADDR_CTRL_SECURITY_REG(SOC_CSS_NIC400_PL354_SMC), ~0);
67*b4315306SDan Handley 	mmio_write_32(SOC_CSS_NIC400_BASE +
68*b4315306SDan Handley 		NIC400_ADDR_CTRL_SECURITY_REG(SOC_CSS_NIC400_APB4_BRIDGE), ~0);
69*b4315306SDan Handley 	mmio_write_32(SOC_CSS_NIC400_BASE +
70*b4315306SDan Handley 		NIC400_ADDR_CTRL_SECURITY_REG(SOC_CSS_NIC400_BOOTSEC_BRIDGE),
71*b4315306SDan Handley 		~SOC_CSS_NIC400_BOOTSEC_BRIDGE_UART1);
72*b4315306SDan Handley 
73*b4315306SDan Handley 	/*
74*b4315306SDan Handley 	 * Allow non-secure access to some CSS regions.
75*b4315306SDan Handley 	 * Note: This is the NIC-400 device on the CSS
76*b4315306SDan Handley 	 */
77*b4315306SDan Handley 	mmio_write_32(PLAT_SOC_CSS_NIC400_BASE +
78*b4315306SDan Handley 		NIC400_ADDR_CTRL_SECURITY_REG(CSS_NIC400_SLAVE_BOOTSECURE),
79*b4315306SDan Handley 		~0);
80*b4315306SDan Handley }
81*b4315306SDan Handley 
82*b4315306SDan Handley 
83*b4315306SDan Handley #define PCIE_SECURE_REG		0x3000
84*b4315306SDan Handley /* Mask uses REG and MEM access bits */
85*b4315306SDan Handley #define PCIE_SEC_ACCESS_MASK	((1 << 0) | (1 << 1))
86*b4315306SDan Handley 
87*b4315306SDan Handley void soc_css_init_pcie(void)
88*b4315306SDan Handley {
89*b4315306SDan Handley #if !PLAT_juno
90*b4315306SDan Handley 	/*
91*b4315306SDan Handley 	 * Do not initialize PCIe in emulator environment.
92*b4315306SDan Handley 	 * Platform ID register not supported on Juno
93*b4315306SDan Handley 	 */
94*b4315306SDan Handley 	if (BOARD_CSS_GET_PLAT_TYPE(BOARD_CSS_PLAT_ID_REG_ADDR) ==
95*b4315306SDan Handley 			BOARD_CSS_PLAT_TYPE_EMULATOR)
96*b4315306SDan Handley 		return;
97*b4315306SDan Handley #endif /* PLAT_juno */
98*b4315306SDan Handley 
99*b4315306SDan Handley 	/*
100*b4315306SDan Handley 	 * PCIE Root Complex Security settings to enable non-secure
101*b4315306SDan Handley 	 * access to config registers.
102*b4315306SDan Handley 	 */
103*b4315306SDan Handley 	mmio_write_32(SOC_CSS_PCIE_CONTROL_BASE + PCIE_SECURE_REG,
104*b4315306SDan Handley 			PCIE_SEC_ACCESS_MASK);
105*b4315306SDan Handley }
106