xref: /rk3399_ARM-atf/plat/brcm/board/stingray/src/bl31_setup.c (revision 3942d3a8ea0c1deda44e0bb481876f03b256e25d)
1*3942d3a8SSheetal Tigadoli /*
2*3942d3a8SSheetal Tigadoli  * Copyright (c) 2015 - 2020, Broadcom
3*3942d3a8SSheetal Tigadoli  *
4*3942d3a8SSheetal Tigadoli  * SPDX-License-Identifier: BSD-3-Clause
5*3942d3a8SSheetal Tigadoli  */
6*3942d3a8SSheetal Tigadoli 
7*3942d3a8SSheetal Tigadoli #include <errno.h>
8*3942d3a8SSheetal Tigadoli 
9*3942d3a8SSheetal Tigadoli #include <common/bl_common.h>
10*3942d3a8SSheetal Tigadoli #include <common/debug.h>
11*3942d3a8SSheetal Tigadoli #include <cortex_a72.h>
12*3942d3a8SSheetal Tigadoli #include <drivers/arm/sp805.h>
13*3942d3a8SSheetal Tigadoli #include <drivers/console.h>
14*3942d3a8SSheetal Tigadoli #include <drivers/delay_timer.h>
15*3942d3a8SSheetal Tigadoli #include <drivers/ti/uart/uart_16550.h>
16*3942d3a8SSheetal Tigadoli #include <lib/mmio.h>
17*3942d3a8SSheetal Tigadoli #include <lib/utils_def.h>
18*3942d3a8SSheetal Tigadoli #include <plat/common/common_def.h>
19*3942d3a8SSheetal Tigadoli #include <plat/common/platform.h>
20*3942d3a8SSheetal Tigadoli 
21*3942d3a8SSheetal Tigadoli #include <bl33_info.h>
22*3942d3a8SSheetal Tigadoli #include <chimp.h>
23*3942d3a8SSheetal Tigadoli #include <cmn_plat_util.h>
24*3942d3a8SSheetal Tigadoli #include <dmu.h>
25*3942d3a8SSheetal Tigadoli #include <fsx.h>
26*3942d3a8SSheetal Tigadoli #include <iommu.h>
27*3942d3a8SSheetal Tigadoli #include <ncsi.h>
28*3942d3a8SSheetal Tigadoli #include <paxb.h>
29*3942d3a8SSheetal Tigadoli #include <paxc.h>
30*3942d3a8SSheetal Tigadoli #include <platform_def.h>
31*3942d3a8SSheetal Tigadoli #include <sdio.h>
32*3942d3a8SSheetal Tigadoli #include <sr_utils.h>
33*3942d3a8SSheetal Tigadoli #include <timer_sync.h>
34*3942d3a8SSheetal Tigadoli 
35*3942d3a8SSheetal Tigadoli /*******************************************************************************
36*3942d3a8SSheetal Tigadoli  * Perform any BL3-1 platform setup common to ARM standard platforms
37*3942d3a8SSheetal Tigadoli  ******************************************************************************/
38*3942d3a8SSheetal Tigadoli 
39*3942d3a8SSheetal Tigadoli static void brcm_stingray_gain_qspi_control(void)
40*3942d3a8SSheetal Tigadoli {
41*3942d3a8SSheetal Tigadoli 	if (boot_source_get() != BOOT_SOURCE_QSPI) {
42*3942d3a8SSheetal Tigadoli 		if (bcm_chimp_is_nic_mode() &&
43*3942d3a8SSheetal Tigadoli 		(!bcm_chimp_handshake_done())) {
44*3942d3a8SSheetal Tigadoli 			/*
45*3942d3a8SSheetal Tigadoli 			 * Last chance to wait for ChiMP firmware to report
46*3942d3a8SSheetal Tigadoli 			 * "I am done" before grabbing the QSPI
47*3942d3a8SSheetal Tigadoli 			 */
48*3942d3a8SSheetal Tigadoli 			WARN("ChiMP still not booted\n");
49*3942d3a8SSheetal Tigadoli #ifndef CHIMP_ALWAYS_NEEDS_QSPI
50*3942d3a8SSheetal Tigadoli 			WARN("ChiMP is given the last chance to boot (%d s)\n",
51*3942d3a8SSheetal Tigadoli 				CHIMP_HANDSHAKE_TIMEOUT_MS / 1000);
52*3942d3a8SSheetal Tigadoli 
53*3942d3a8SSheetal Tigadoli 			if (!bcm_chimp_wait_handshake()) {
54*3942d3a8SSheetal Tigadoli 				ERROR("ChiMP failed to boot\n");
55*3942d3a8SSheetal Tigadoli 			} else {
56*3942d3a8SSheetal Tigadoli 				INFO("ChiMP booted successfully\n");
57*3942d3a8SSheetal Tigadoli 			}
58*3942d3a8SSheetal Tigadoli #endif
59*3942d3a8SSheetal Tigadoli 		}
60*3942d3a8SSheetal Tigadoli 
61*3942d3a8SSheetal Tigadoli #ifndef CHIMP_ALWAYS_NEEDS_QSPI
62*3942d3a8SSheetal Tigadoli 		INFO("AP grabs QSPI\n");
63*3942d3a8SSheetal Tigadoli 		/*
64*3942d3a8SSheetal Tigadoli 		 * For QSPI boot sbl/bl1 has already taken care.
65*3942d3a8SSheetal Tigadoli 		 * For other boot sources QSPI needs to be muxed to
66*3942d3a8SSheetal Tigadoli 		 * AP for exclusive use
67*3942d3a8SSheetal Tigadoli 		 */
68*3942d3a8SSheetal Tigadoli 		brcm_stingray_set_qspi_mux(1);
69*3942d3a8SSheetal Tigadoli 		INFO("AP (bl31) gained control over QSPI\n");
70*3942d3a8SSheetal Tigadoli #endif
71*3942d3a8SSheetal Tigadoli 	}
72*3942d3a8SSheetal Tigadoli }
73*3942d3a8SSheetal Tigadoli 
74*3942d3a8SSheetal Tigadoli static void brcm_stingray_dma_pl330_init(void)
75*3942d3a8SSheetal Tigadoli {
76*3942d3a8SSheetal Tigadoli 	unsigned int val;
77*3942d3a8SSheetal Tigadoli 
78*3942d3a8SSheetal Tigadoli 	VERBOSE("dma pl330 init start\n");
79*3942d3a8SSheetal Tigadoli 
80*3942d3a8SSheetal Tigadoli 	/* Set DMAC boot_manager_ns = 0x1 */
81*3942d3a8SSheetal Tigadoli 	VERBOSE(" - configure boot security state\n");
82*3942d3a8SSheetal Tigadoli 	mmio_setbits_32(DMAC_M0_IDM_IO_CONTROL_DIRECT, BOOT_MANAGER_NS);
83*3942d3a8SSheetal Tigadoli 	/* Set boot_peripheral_ns[n:0] = 0xffffffff */
84*3942d3a8SSheetal Tigadoli 	mmio_write_32(ICFG_DMAC_CONFIG_2, BOOT_PERIPHERAL_NS);
85*3942d3a8SSheetal Tigadoli 	/* Set boot_irq_ns[n:0] = 0x0000ffff */
86*3942d3a8SSheetal Tigadoli 	mmio_write_32(ICFG_DMAC_CONFIG_3, BOOT_IRQ_NS);
87*3942d3a8SSheetal Tigadoli 
88*3942d3a8SSheetal Tigadoli 	/* Set DMAC stream_id */
89*3942d3a8SSheetal Tigadoli 	VERBOSE(" - configure stream_id = 0x6000\n");
90*3942d3a8SSheetal Tigadoli 	val = (DMAC_STREAM_ID << DMAC_SID_SHIFT);
91*3942d3a8SSheetal Tigadoli 	mmio_write_32(ICFG_DMAC_SID_ARADDR_CONTROL, val);
92*3942d3a8SSheetal Tigadoli 	mmio_write_32(ICFG_DMAC_SID_AWADDR_CONTROL, val);
93*3942d3a8SSheetal Tigadoli 
94*3942d3a8SSheetal Tigadoli 	/* Reset DMAC */
95*3942d3a8SSheetal Tigadoli 	VERBOSE(" - reset dma pl330\n");
96*3942d3a8SSheetal Tigadoli 
97*3942d3a8SSheetal Tigadoli 	mmio_setbits_32(DMAC_M0_IDM_RESET_CONTROL, 0x1);
98*3942d3a8SSheetal Tigadoli 	udelay(500);
99*3942d3a8SSheetal Tigadoli 
100*3942d3a8SSheetal Tigadoli 	mmio_clrbits_32(DMAC_M0_IDM_RESET_CONTROL, 0x1);
101*3942d3a8SSheetal Tigadoli 	udelay(500);
102*3942d3a8SSheetal Tigadoli 
103*3942d3a8SSheetal Tigadoli 	INFO("dma pl330 init done\n");
104*3942d3a8SSheetal Tigadoli }
105*3942d3a8SSheetal Tigadoli 
106*3942d3a8SSheetal Tigadoli static void brcm_stingray_spi_pl022_init(uintptr_t idm_reset_control)
107*3942d3a8SSheetal Tigadoli {
108*3942d3a8SSheetal Tigadoli 	VERBOSE("spi pl022 init start\n");
109*3942d3a8SSheetal Tigadoli 
110*3942d3a8SSheetal Tigadoli 	/* Reset APB SPI bridge */
111*3942d3a8SSheetal Tigadoli 	VERBOSE(" - reset apb spi bridge\n");
112*3942d3a8SSheetal Tigadoli 	mmio_setbits_32(idm_reset_control, 0x1);
113*3942d3a8SSheetal Tigadoli 	udelay(500);
114*3942d3a8SSheetal Tigadoli 
115*3942d3a8SSheetal Tigadoli 	mmio_clrbits_32(idm_reset_control, 0x1);
116*3942d3a8SSheetal Tigadoli 	udelay(500);
117*3942d3a8SSheetal Tigadoli 
118*3942d3a8SSheetal Tigadoli 	INFO("spi pl022 init done\n");
119*3942d3a8SSheetal Tigadoli }
120*3942d3a8SSheetal Tigadoli 
121*3942d3a8SSheetal Tigadoli #define CDRU_SATA_RESET_N \
122*3942d3a8SSheetal Tigadoli 	BIT(CDRU_MISC_RESET_CONTROL__CDRU_SATA_RESET_N_R)
123*3942d3a8SSheetal Tigadoli #define CDRU_MISC_CLK_SATA \
124*3942d3a8SSheetal Tigadoli 	BIT(CDRU_MISC_CLK_ENABLE_CONTROL__CDRU_SATA_CLK_EN_R)
125*3942d3a8SSheetal Tigadoli #define CCN_CONFIG_CLK_ENABLE		(1 << 2)
126*3942d3a8SSheetal Tigadoli #define MMU_CONFIG_CLK_ENABLE		(0x3F << 16)
127*3942d3a8SSheetal Tigadoli 
128*3942d3a8SSheetal Tigadoli #define SATA_SATA_TOP_CTRL_BUS_CTRL	(SATA_BASE + 0x2044)
129*3942d3a8SSheetal Tigadoli #define DMA_BIT_CTRL_MASK		0x003
130*3942d3a8SSheetal Tigadoli #define DMA_DESCR_ENDIAN_CTRL		(DMA_BIT_CTRL_MASK << 0x002)
131*3942d3a8SSheetal Tigadoli #define DMA_DATA_ENDIAN_CTRL		(DMA_BIT_CTRL_MASK << 0x004)
132*3942d3a8SSheetal Tigadoli 
133*3942d3a8SSheetal Tigadoli #define SATA_PORT_SATA3_PCB_REG8	(SATA_BASE + 0x2320)
134*3942d3a8SSheetal Tigadoli #define SATA_PORT_SATA3_PCB_REG11	(SATA_BASE + 0x232c)
135*3942d3a8SSheetal Tigadoli #define SATA_PORT_SATA3_PCB_BLOCK_ADDR	(SATA_BASE + 0x233c)
136*3942d3a8SSheetal Tigadoli 
137*3942d3a8SSheetal Tigadoli #define SATA3_AFE_TXRX_ACTRL		0x1d0
138*3942d3a8SSheetal Tigadoli /* TXDriver swing setting is 800mV */
139*3942d3a8SSheetal Tigadoli #define DFS_SWINGNOPE_VALUE		(0x0 << 6)
140*3942d3a8SSheetal Tigadoli #define DFS_SWINGNOPE_MASK		(0x3 << 6)
141*3942d3a8SSheetal Tigadoli 
142*3942d3a8SSheetal Tigadoli #define DFS_SWINGPE_VALUE		(0x1 << 4)
143*3942d3a8SSheetal Tigadoli #define DFS_SWINGPE_MASK		(0x3 << 4)
144*3942d3a8SSheetal Tigadoli 
145*3942d3a8SSheetal Tigadoli #define DFS_INJSTRENGTH_VALUE		(0x0 << 4)
146*3942d3a8SSheetal Tigadoli #define DFS_INJSTRENGTH_MASK		(0x3 << 4)
147*3942d3a8SSheetal Tigadoli 
148*3942d3a8SSheetal Tigadoli #define DFS_INJEN			(0x1 << 3)
149*3942d3a8SSheetal Tigadoli 
150*3942d3a8SSheetal Tigadoli #define SATA_CORE_MEM_CTRL		(SATA_BASE + 0x3a08)
151*3942d3a8SSheetal Tigadoli #define SATA_CORE_MEM_CTRL_ISO		BIT(0)
152*3942d3a8SSheetal Tigadoli #define SATA_CORE_MEM_CTRL_ARRPOWEROKIN	BIT(1)
153*3942d3a8SSheetal Tigadoli #define SATA_CORE_MEM_CTRL_ARRPOWERONIN	BIT(2)
154*3942d3a8SSheetal Tigadoli #define SATA_CORE_MEM_CTRL_POWEROKIN	BIT(3)
155*3942d3a8SSheetal Tigadoli #define SATA_CORE_MEM_CTRL_POWERONIN	BIT(4)
156*3942d3a8SSheetal Tigadoli 
157*3942d3a8SSheetal Tigadoli #define SATA0_IDM_RESET_CONTROL			(SATA_BASE + 0x500800)
158*3942d3a8SSheetal Tigadoli #define SATA_APBT0_IDM_IO_CONTROL_DIRECT	(SATA_BASE + 0x51a408)
159*3942d3a8SSheetal Tigadoli #define IO_CONTROL_DIRECT_CLK_ENABLE		BIT(0)
160*3942d3a8SSheetal Tigadoli #define SATA_APBT0_IDM_RESET_CONTROL		(SATA_BASE + 0x51a800)
161*3942d3a8SSheetal Tigadoli #define IDM_RESET_CONTROL_RESET			BIT(0)
162*3942d3a8SSheetal Tigadoli 
163*3942d3a8SSheetal Tigadoli #define NIC400_SATA_NOC_SECURITY1	0x6830000c
164*3942d3a8SSheetal Tigadoli #define SATA_NOC_SECURITY1_FIELD	0xf
165*3942d3a8SSheetal Tigadoli #define NIC400_SATA_NOC_SECURITY2	0x68300010
166*3942d3a8SSheetal Tigadoli #define SATA_NOC_SECURITY2_FIELD	0xf
167*3942d3a8SSheetal Tigadoli #define NIC400_SATA_NOC_SECURITY3	0x68300014
168*3942d3a8SSheetal Tigadoli #define SATA_NOC_SECURITY3_FIELD	0x1
169*3942d3a8SSheetal Tigadoli #define NIC400_SATA_NOC_SECURITY4	0x68300018
170*3942d3a8SSheetal Tigadoli #define SATA_NOC_SECURITY4_FIELD	0x1
171*3942d3a8SSheetal Tigadoli #define NIC400_SATA_NOC_SECURITY5	0x6830001c
172*3942d3a8SSheetal Tigadoli #define SATA_NOC_SECURITY5_FIELD	0xf
173*3942d3a8SSheetal Tigadoli #define NIC400_SATA_NOC_SECURITY6	0x68300020
174*3942d3a8SSheetal Tigadoli #define SATA_NOC_SECURITY6_FIELD	0x1
175*3942d3a8SSheetal Tigadoli #define NIC400_SATA_NOC_SECURITY7	0x68300024
176*3942d3a8SSheetal Tigadoli #define SATA_NOC_SECURITY7_FIELD	0xf
177*3942d3a8SSheetal Tigadoli #define NIC400_SATA_NOC_SECURITY8	0x68300028
178*3942d3a8SSheetal Tigadoli #define SATA_NOC_SECURITY8_FIELD	0xf
179*3942d3a8SSheetal Tigadoli #define NIC400_SATA_NOC_SECURITY9	0x6830002c
180*3942d3a8SSheetal Tigadoli #define SATA_NOC_SECURITY9_FIELD	0x1
181*3942d3a8SSheetal Tigadoli 
182*3942d3a8SSheetal Tigadoli #define SATA_APBT_IDM_PORT_REG(port, reg) \
183*3942d3a8SSheetal Tigadoli 	(((port/4) << 12) + reg)
184*3942d3a8SSheetal Tigadoli 
185*3942d3a8SSheetal Tigadoli #define SATA_IDM_PORT_REG(port, reg)	((port << 12) + reg)
186*3942d3a8SSheetal Tigadoli 
187*3942d3a8SSheetal Tigadoli #define SATA_PORT_REG(port, reg) \
188*3942d3a8SSheetal Tigadoli 	(((port%4) << 16) + ((port/4) << 20) + reg)
189*3942d3a8SSheetal Tigadoli 
190*3942d3a8SSheetal Tigadoli #define MAX_SATA_PORTS	8
191*3942d3a8SSheetal Tigadoli #define USE_SATA_PORTS	8
192*3942d3a8SSheetal Tigadoli 
193*3942d3a8SSheetal Tigadoli #ifdef USE_SATA
194*3942d3a8SSheetal Tigadoli static const uint8_t sr_b0_sata_port[MAX_SATA_PORTS] = {
195*3942d3a8SSheetal Tigadoli 	0, 1, 2, 3, 4, 5, 6, 7
196*3942d3a8SSheetal Tigadoli };
197*3942d3a8SSheetal Tigadoli 
198*3942d3a8SSheetal Tigadoli static uint32_t brcm_stingray_get_sata_port(unsigned int port)
199*3942d3a8SSheetal Tigadoli {
200*3942d3a8SSheetal Tigadoli 	return sr_b0_sata_port[port];
201*3942d3a8SSheetal Tigadoli }
202*3942d3a8SSheetal Tigadoli 
203*3942d3a8SSheetal Tigadoli static void brcm_stingray_sata_init(void)
204*3942d3a8SSheetal Tigadoli {
205*3942d3a8SSheetal Tigadoli 	unsigned int port = 0;
206*3942d3a8SSheetal Tigadoli 	uint32_t sata_port;
207*3942d3a8SSheetal Tigadoli 
208*3942d3a8SSheetal Tigadoli 	mmio_setbits_32(CDRU_MISC_CLK_ENABLE_CONTROL,
209*3942d3a8SSheetal Tigadoli 			CDRU_MISC_CLK_SATA);
210*3942d3a8SSheetal Tigadoli 
211*3942d3a8SSheetal Tigadoli 	mmio_clrbits_32(CDRU_MISC_RESET_CONTROL, CDRU_SATA_RESET_N);
212*3942d3a8SSheetal Tigadoli 	mmio_setbits_32(CDRU_MISC_RESET_CONTROL, CDRU_SATA_RESET_N);
213*3942d3a8SSheetal Tigadoli 
214*3942d3a8SSheetal Tigadoli 	for (port = 0; port < USE_SATA_PORTS; port++) {
215*3942d3a8SSheetal Tigadoli 
216*3942d3a8SSheetal Tigadoli 		sata_port = brcm_stingray_get_sata_port(port);
217*3942d3a8SSheetal Tigadoli 		mmio_write_32(SATA_APBT_IDM_PORT_REG(sata_port,
218*3942d3a8SSheetal Tigadoli 					SATA_APBT0_IDM_RESET_CONTROL),
219*3942d3a8SSheetal Tigadoli 			      0x0);
220*3942d3a8SSheetal Tigadoli 		mmio_setbits_32(SATA_APBT_IDM_PORT_REG(sata_port,
221*3942d3a8SSheetal Tigadoli 					SATA_APBT0_IDM_IO_CONTROL_DIRECT),
222*3942d3a8SSheetal Tigadoli 				IO_CONTROL_DIRECT_CLK_ENABLE);
223*3942d3a8SSheetal Tigadoli 		mmio_write_32(SATA_IDM_PORT_REG(sata_port,
224*3942d3a8SSheetal Tigadoli 						SATA0_IDM_RESET_CONTROL),
225*3942d3a8SSheetal Tigadoli 			      0x0);
226*3942d3a8SSheetal Tigadoli 
227*3942d3a8SSheetal Tigadoli 		mmio_setbits_32(SATA_PORT_REG(sata_port, SATA_CORE_MEM_CTRL),
228*3942d3a8SSheetal Tigadoli 				SATA_CORE_MEM_CTRL_ARRPOWERONIN);
229*3942d3a8SSheetal Tigadoli 		mmio_setbits_32(SATA_PORT_REG(sata_port, SATA_CORE_MEM_CTRL),
230*3942d3a8SSheetal Tigadoli 				SATA_CORE_MEM_CTRL_ARRPOWEROKIN);
231*3942d3a8SSheetal Tigadoli 		mmio_setbits_32(SATA_PORT_REG(sata_port, SATA_CORE_MEM_CTRL),
232*3942d3a8SSheetal Tigadoli 				SATA_CORE_MEM_CTRL_POWERONIN);
233*3942d3a8SSheetal Tigadoli 		mmio_setbits_32(SATA_PORT_REG(sata_port, SATA_CORE_MEM_CTRL),
234*3942d3a8SSheetal Tigadoli 				SATA_CORE_MEM_CTRL_POWEROKIN);
235*3942d3a8SSheetal Tigadoli 		mmio_clrbits_32(SATA_PORT_REG(sata_port, SATA_CORE_MEM_CTRL),
236*3942d3a8SSheetal Tigadoli 				SATA_CORE_MEM_CTRL_ISO);
237*3942d3a8SSheetal Tigadoli 
238*3942d3a8SSheetal Tigadoli 		mmio_clrbits_32(SATA_PORT_REG(sata_port,
239*3942d3a8SSheetal Tigadoli 					      SATA_SATA_TOP_CTRL_BUS_CTRL),
240*3942d3a8SSheetal Tigadoli 				(DMA_DESCR_ENDIAN_CTRL | DMA_DATA_ENDIAN_CTRL));
241*3942d3a8SSheetal Tigadoli 	}
242*3942d3a8SSheetal Tigadoli 
243*3942d3a8SSheetal Tigadoli 	mmio_setbits_32(NIC400_SATA_NOC_SECURITY1, SATA_NOC_SECURITY1_FIELD);
244*3942d3a8SSheetal Tigadoli 	mmio_setbits_32(NIC400_SATA_NOC_SECURITY2, SATA_NOC_SECURITY2_FIELD);
245*3942d3a8SSheetal Tigadoli 	mmio_setbits_32(NIC400_SATA_NOC_SECURITY3, SATA_NOC_SECURITY3_FIELD);
246*3942d3a8SSheetal Tigadoli 	mmio_setbits_32(NIC400_SATA_NOC_SECURITY4, SATA_NOC_SECURITY4_FIELD);
247*3942d3a8SSheetal Tigadoli 	mmio_setbits_32(NIC400_SATA_NOC_SECURITY5, SATA_NOC_SECURITY5_FIELD);
248*3942d3a8SSheetal Tigadoli 	mmio_setbits_32(NIC400_SATA_NOC_SECURITY6, SATA_NOC_SECURITY6_FIELD);
249*3942d3a8SSheetal Tigadoli 	mmio_setbits_32(NIC400_SATA_NOC_SECURITY7, SATA_NOC_SECURITY7_FIELD);
250*3942d3a8SSheetal Tigadoli 	mmio_setbits_32(NIC400_SATA_NOC_SECURITY8, SATA_NOC_SECURITY8_FIELD);
251*3942d3a8SSheetal Tigadoli 	mmio_setbits_32(NIC400_SATA_NOC_SECURITY9, SATA_NOC_SECURITY9_FIELD);
252*3942d3a8SSheetal Tigadoli 
253*3942d3a8SSheetal Tigadoli 	INFO("sata init done\n");
254*3942d3a8SSheetal Tigadoli }
255*3942d3a8SSheetal Tigadoli #else
256*3942d3a8SSheetal Tigadoli static void poweroff_sata_pll(void)
257*3942d3a8SSheetal Tigadoli {
258*3942d3a8SSheetal Tigadoli 	/*
259*3942d3a8SSheetal Tigadoli 	 * SATA subsystem is clocked by LCPLL0 which is enabled by
260*3942d3a8SSheetal Tigadoli 	 * default by bootrom. Poweroff the PLL if SATA is not used
261*3942d3a8SSheetal Tigadoli 	 */
262*3942d3a8SSheetal Tigadoli 
263*3942d3a8SSheetal Tigadoli 	/* enable isolation */
264*3942d3a8SSheetal Tigadoli 	mmio_setbits_32(CRMU_AON_CTRL1,
265*3942d3a8SSheetal Tigadoli 			BIT(CRMU_AON_CTRL1__LCPLL0_ISO_IN));
266*3942d3a8SSheetal Tigadoli 
267*3942d3a8SSheetal Tigadoli 	/* Power off the SATA PLL/LDO */
268*3942d3a8SSheetal Tigadoli 	mmio_clrbits_32(CRMU_AON_CTRL1,
269*3942d3a8SSheetal Tigadoli 			(BIT(CRMU_AON_CTRL1__LCPLL0_PWRON_LDO) |
270*3942d3a8SSheetal Tigadoli 			 BIT(CRMU_AON_CTRL1__LCPLL0_PWR_ON)));
271*3942d3a8SSheetal Tigadoli }
272*3942d3a8SSheetal Tigadoli #endif
273*3942d3a8SSheetal Tigadoli 
274*3942d3a8SSheetal Tigadoli #ifdef USE_AMAC
275*3942d3a8SSheetal Tigadoli #ifdef EMULATION_SETUP
276*3942d3a8SSheetal Tigadoli #define ICFG_AMAC_STRAP_CONFIG		(HSLS_ICFG_REGS_BASE + 0xa5c)
277*3942d3a8SSheetal Tigadoli #define ICFG_AMAC_STRAP_DLL_BYPASS	(1 << 2)
278*3942d3a8SSheetal Tigadoli #endif
279*3942d3a8SSheetal Tigadoli #define ICFG_AMAC_MAC_CTRL_REG		(HSLS_ICFG_REGS_BASE + 0xa6c)
280*3942d3a8SSheetal Tigadoli #define ICFG_AMAC_MAC_FULL_DUPLEX	(1 << 1)
281*3942d3a8SSheetal Tigadoli #define ICFG_AMAC_RGMII_PHY_CONFIG	(HSLS_ICFG_REGS_BASE + 0xa60)
282*3942d3a8SSheetal Tigadoli #define ICFG_AMAC_SID_CONTROL		(HSLS_ICFG_REGS_BASE + 0xb10)
283*3942d3a8SSheetal Tigadoli #define ICFG_AMAC_SID_SHIFT		5
284*3942d3a8SSheetal Tigadoli #define ICFG_AMAC_SID_AWADDR_OFFSET	0x0
285*3942d3a8SSheetal Tigadoli #define ICFG_AMAC_SID_ARADDR_OFFSET	0x4
286*3942d3a8SSheetal Tigadoli #define AMAC_RPHY_1000_DATARATE		(1 << 20)
287*3942d3a8SSheetal Tigadoli #define AMAC_RPHY_FULL_DUPLEX		(1 << 5)
288*3942d3a8SSheetal Tigadoli #define AMAC_RPHY_SPEED_OFFSET		2
289*3942d3a8SSheetal Tigadoli #define AMAC_RPHY_SPEED_MASK		(7 << AMAC_RPHY_SPEED_OFFSET)
290*3942d3a8SSheetal Tigadoli #define AMAC_RPHY_1G_SPEED		(2 << AMAC_RPHY_SPEED_OFFSET)
291*3942d3a8SSheetal Tigadoli #define ICFG_AMAC_MEM_PWR_CTRL		(HSLS_ICFG_REGS_BASE + 0xa68)
292*3942d3a8SSheetal Tigadoli #define AMAC_ISO			BIT(9)
293*3942d3a8SSheetal Tigadoli #define AMAC_STDBY			BIT(8)
294*3942d3a8SSheetal Tigadoli #define AMAC_ARRPOWEROKIN		BIT(7)
295*3942d3a8SSheetal Tigadoli #define AMAC_ARRPOWERONIN		BIT(6)
296*3942d3a8SSheetal Tigadoli #define AMAC_POWEROKIN			BIT(5)
297*3942d3a8SSheetal Tigadoli #define AMAC_POWERONIN			BIT(4)
298*3942d3a8SSheetal Tigadoli 
299*3942d3a8SSheetal Tigadoli #define AMAC_IDM0_IO_CONTROL_DIRECT	(HSLS_IDM_REGS_BASE + 0x4408)
300*3942d3a8SSheetal Tigadoli #define AMAC_IDM0_ARCACHE_OFFSET	16
301*3942d3a8SSheetal Tigadoli #define AMAC_IDM0_AWCACHE_OFFSET	7
302*3942d3a8SSheetal Tigadoli #define AMAC_IDM0_ARCACHE_MASK		(0xF << AMAC_IDM0_ARCACHE_OFFSET)
303*3942d3a8SSheetal Tigadoli #define AMAC_IDM0_AWCACHE_MASK		(0xF << AMAC_IDM0_AWCACHE_OFFSET)
304*3942d3a8SSheetal Tigadoli /* ARCACHE - AWCACHE is 0xB7 for write-back no allocate */
305*3942d3a8SSheetal Tigadoli #define AMAC_IDM0_ARCACHE_VAL		(0xb << AMAC_IDM0_ARCACHE_OFFSET)
306*3942d3a8SSheetal Tigadoli #define AMAC_IDM0_AWCACHE_VAL		(0x7 << AMAC_IDM0_AWCACHE_OFFSET)
307*3942d3a8SSheetal Tigadoli 
308*3942d3a8SSheetal Tigadoli static void brcm_stingray_amac_init(void)
309*3942d3a8SSheetal Tigadoli {
310*3942d3a8SSheetal Tigadoli 	unsigned int val;
311*3942d3a8SSheetal Tigadoli 	uintptr_t icfg_amac_sid = ICFG_AMAC_SID_CONTROL;
312*3942d3a8SSheetal Tigadoli 
313*3942d3a8SSheetal Tigadoli 	VERBOSE("amac init start\n");
314*3942d3a8SSheetal Tigadoli 
315*3942d3a8SSheetal Tigadoli 	val = SR_SID_VAL(0x3, 0x0, 0x4) << ICFG_AMAC_SID_SHIFT;
316*3942d3a8SSheetal Tigadoli 	mmio_write_32(icfg_amac_sid + ICFG_AMAC_SID_AWADDR_OFFSET, val);
317*3942d3a8SSheetal Tigadoli 	mmio_write_32(icfg_amac_sid + ICFG_AMAC_SID_ARADDR_OFFSET, val);
318*3942d3a8SSheetal Tigadoli 
319*3942d3a8SSheetal Tigadoli 	mmio_setbits_32(ICFG_AMAC_MEM_PWR_CTRL, AMAC_ARRPOWEROKIN);
320*3942d3a8SSheetal Tigadoli 	mmio_setbits_32(ICFG_AMAC_MEM_PWR_CTRL, AMAC_ARRPOWERONIN);
321*3942d3a8SSheetal Tigadoli 	mmio_setbits_32(ICFG_AMAC_MEM_PWR_CTRL, AMAC_POWEROKIN);
322*3942d3a8SSheetal Tigadoli 	mmio_setbits_32(ICFG_AMAC_MEM_PWR_CTRL, AMAC_POWERONIN);
323*3942d3a8SSheetal Tigadoli 	mmio_clrbits_32(ICFG_AMAC_MEM_PWR_CTRL, AMAC_ISO);
324*3942d3a8SSheetal Tigadoli 	mmio_write_32(APBR_IDM_RESET_CONTROL, 0x0);
325*3942d3a8SSheetal Tigadoli 	mmio_clrsetbits_32(ICFG_AMAC_RGMII_PHY_CONFIG, AMAC_RPHY_SPEED_MASK,
326*3942d3a8SSheetal Tigadoli 				AMAC_RPHY_1G_SPEED); /*1 Gbps line rate*/
327*3942d3a8SSheetal Tigadoli 	/* 1000 datarate set */
328*3942d3a8SSheetal Tigadoli 	mmio_setbits_32(ICFG_AMAC_RGMII_PHY_CONFIG, AMAC_RPHY_1000_DATARATE);
329*3942d3a8SSheetal Tigadoli 	/* full duplex */
330*3942d3a8SSheetal Tigadoli 	mmio_setbits_32(ICFG_AMAC_RGMII_PHY_CONFIG, AMAC_RPHY_FULL_DUPLEX);
331*3942d3a8SSheetal Tigadoli #ifdef EMULATION_SETUP
332*3942d3a8SSheetal Tigadoli 	/* DLL bypass */
333*3942d3a8SSheetal Tigadoli 	mmio_setbits_32(ICFG_AMAC_STRAP_CONFIG, ICFG_AMAC_STRAP_DLL_BYPASS);
334*3942d3a8SSheetal Tigadoli #endif
335*3942d3a8SSheetal Tigadoli 	/* serdes full duplex */
336*3942d3a8SSheetal Tigadoli 	mmio_setbits_32(ICFG_AMAC_MAC_CTRL_REG, ICFG_AMAC_MAC_FULL_DUPLEX);
337*3942d3a8SSheetal Tigadoli 	mmio_clrsetbits_32(AMAC_IDM0_IO_CONTROL_DIRECT, AMAC_IDM0_ARCACHE_MASK,
338*3942d3a8SSheetal Tigadoli 				AMAC_IDM0_ARCACHE_VAL);
339*3942d3a8SSheetal Tigadoli 	mmio_clrsetbits_32(AMAC_IDM0_IO_CONTROL_DIRECT, AMAC_IDM0_AWCACHE_MASK,
340*3942d3a8SSheetal Tigadoli 				AMAC_IDM0_AWCACHE_VAL);
341*3942d3a8SSheetal Tigadoli 	INFO("amac init done\n");
342*3942d3a8SSheetal Tigadoli }
343*3942d3a8SSheetal Tigadoli #endif    /* USE_AMAC */
344*3942d3a8SSheetal Tigadoli 
345*3942d3a8SSheetal Tigadoli static void brcm_stingray_pka_meminit(void)
346*3942d3a8SSheetal Tigadoli {
347*3942d3a8SSheetal Tigadoli 	uintptr_t icfg_mem_ctrl = ICFG_PKA_MEM_PWR_CTRL;
348*3942d3a8SSheetal Tigadoli 
349*3942d3a8SSheetal Tigadoli 	VERBOSE("pka meminit start\n");
350*3942d3a8SSheetal Tigadoli 
351*3942d3a8SSheetal Tigadoli 	VERBOSE(" - arrpoweron\n");
352*3942d3a8SSheetal Tigadoli 	mmio_setbits_32(icfg_mem_ctrl,
353*3942d3a8SSheetal Tigadoli 			ICFG_PKA_MEM_PWR_CTRL__ARRPOWERONIN);
354*3942d3a8SSheetal Tigadoli 	while (!(mmio_read_32(icfg_mem_ctrl) &
355*3942d3a8SSheetal Tigadoli 		 ICFG_PKA_MEM_PWR_CTRL__ARRPOWERONOUT))
356*3942d3a8SSheetal Tigadoli 		;
357*3942d3a8SSheetal Tigadoli 
358*3942d3a8SSheetal Tigadoli 	VERBOSE(" - arrpowerok\n");
359*3942d3a8SSheetal Tigadoli 	mmio_setbits_32(icfg_mem_ctrl,
360*3942d3a8SSheetal Tigadoli 			ICFG_PKA_MEM_PWR_CTRL__ARRPOWEROKIN);
361*3942d3a8SSheetal Tigadoli 	while (!(mmio_read_32(icfg_mem_ctrl) &
362*3942d3a8SSheetal Tigadoli 		 ICFG_PKA_MEM_PWR_CTRL__ARRPOWEROKOUT))
363*3942d3a8SSheetal Tigadoli 		;
364*3942d3a8SSheetal Tigadoli 
365*3942d3a8SSheetal Tigadoli 	VERBOSE(" - poweron\n");
366*3942d3a8SSheetal Tigadoli 	mmio_setbits_32(icfg_mem_ctrl,
367*3942d3a8SSheetal Tigadoli 			ICFG_PKA_MEM_PWR_CTRL__POWERONIN);
368*3942d3a8SSheetal Tigadoli 	while (!(mmio_read_32(icfg_mem_ctrl) &
369*3942d3a8SSheetal Tigadoli 		 ICFG_PKA_MEM_PWR_CTRL__POWERONOUT))
370*3942d3a8SSheetal Tigadoli 		;
371*3942d3a8SSheetal Tigadoli 
372*3942d3a8SSheetal Tigadoli 	VERBOSE(" - powerok\n");
373*3942d3a8SSheetal Tigadoli 	mmio_setbits_32(icfg_mem_ctrl,
374*3942d3a8SSheetal Tigadoli 			ICFG_PKA_MEM_PWR_CTRL__POWEROKIN);
375*3942d3a8SSheetal Tigadoli 	while (!(mmio_read_32(icfg_mem_ctrl) &
376*3942d3a8SSheetal Tigadoli 		 ICFG_PKA_MEM_PWR_CTRL__POWEROKOUT))
377*3942d3a8SSheetal Tigadoli 		;
378*3942d3a8SSheetal Tigadoli 
379*3942d3a8SSheetal Tigadoli 	/* Wait sometime */
380*3942d3a8SSheetal Tigadoli 	mdelay(1);
381*3942d3a8SSheetal Tigadoli 
382*3942d3a8SSheetal Tigadoli 	VERBOSE(" - remove isolation\n");
383*3942d3a8SSheetal Tigadoli 	mmio_clrbits_32(icfg_mem_ctrl, ICFG_PKA_MEM_PWR_CTRL__ISO);
384*3942d3a8SSheetal Tigadoli 
385*3942d3a8SSheetal Tigadoli 	INFO("pka meminit done\n");
386*3942d3a8SSheetal Tigadoli }
387*3942d3a8SSheetal Tigadoli 
388*3942d3a8SSheetal Tigadoli static void brcm_stingray_smmu_init(void)
389*3942d3a8SSheetal Tigadoli {
390*3942d3a8SSheetal Tigadoli 	unsigned int val;
391*3942d3a8SSheetal Tigadoli 	uintptr_t smmu_base = SMMU_BASE;
392*3942d3a8SSheetal Tigadoli 
393*3942d3a8SSheetal Tigadoli 	VERBOSE("smmu init start\n");
394*3942d3a8SSheetal Tigadoli 
395*3942d3a8SSheetal Tigadoli 	/* Configure SCR0 */
396*3942d3a8SSheetal Tigadoli 	VERBOSE(" - configure scr0\n");
397*3942d3a8SSheetal Tigadoli 	val = mmio_read_32(smmu_base + 0x0);
398*3942d3a8SSheetal Tigadoli 	val |= (0x1 << 12);
399*3942d3a8SSheetal Tigadoli 	mmio_write_32(smmu_base + 0x0, val);
400*3942d3a8SSheetal Tigadoli 
401*3942d3a8SSheetal Tigadoli 	/* Reserve context banks for secure masters */
402*3942d3a8SSheetal Tigadoli 	arm_smmu_reserve_secure_cntxt();
403*3942d3a8SSheetal Tigadoli 
404*3942d3a8SSheetal Tigadoli 	/* Print configuration */
405*3942d3a8SSheetal Tigadoli 	VERBOSE(" - scr0=0x%x scr1=0x%x scr2=0x%x\n",
406*3942d3a8SSheetal Tigadoli 		mmio_read_32(smmu_base + 0x0),
407*3942d3a8SSheetal Tigadoli 		mmio_read_32(smmu_base + 0x4),
408*3942d3a8SSheetal Tigadoli 		mmio_read_32(smmu_base + 0x8));
409*3942d3a8SSheetal Tigadoli 
410*3942d3a8SSheetal Tigadoli 	VERBOSE(" - idr0=0x%x idr1=0x%x idr2=0x%x\n",
411*3942d3a8SSheetal Tigadoli 		mmio_read_32(smmu_base + 0x20),
412*3942d3a8SSheetal Tigadoli 		mmio_read_32(smmu_base + 0x24),
413*3942d3a8SSheetal Tigadoli 		mmio_read_32(smmu_base + 0x28));
414*3942d3a8SSheetal Tigadoli 
415*3942d3a8SSheetal Tigadoli 	VERBOSE(" - idr3=0x%x idr4=0x%x idr5=0x%x\n",
416*3942d3a8SSheetal Tigadoli 		mmio_read_32(smmu_base + 0x2c),
417*3942d3a8SSheetal Tigadoli 		mmio_read_32(smmu_base + 0x30),
418*3942d3a8SSheetal Tigadoli 		mmio_read_32(smmu_base + 0x34));
419*3942d3a8SSheetal Tigadoli 
420*3942d3a8SSheetal Tigadoli 	VERBOSE(" - idr6=0x%x idr7=0x%x\n",
421*3942d3a8SSheetal Tigadoli 		mmio_read_32(smmu_base + 0x38),
422*3942d3a8SSheetal Tigadoli 		mmio_read_32(smmu_base + 0x3c));
423*3942d3a8SSheetal Tigadoli 
424*3942d3a8SSheetal Tigadoli 	INFO("smmu init done\n");
425*3942d3a8SSheetal Tigadoli }
426*3942d3a8SSheetal Tigadoli 
427*3942d3a8SSheetal Tigadoli static void brcm_stingray_dma_pl330_meminit(void)
428*3942d3a8SSheetal Tigadoli {
429*3942d3a8SSheetal Tigadoli 	uintptr_t icfg_mem_ctrl = ICFG_DMAC_MEM_PWR_CTRL;
430*3942d3a8SSheetal Tigadoli 
431*3942d3a8SSheetal Tigadoli 	VERBOSE("dmac meminit start\n");
432*3942d3a8SSheetal Tigadoli 
433*3942d3a8SSheetal Tigadoli 	VERBOSE(" - arrpoweron\n");
434*3942d3a8SSheetal Tigadoli 	mmio_setbits_32(icfg_mem_ctrl,
435*3942d3a8SSheetal Tigadoli 			ICFG_DMAC_MEM_PWR_CTRL__ARRPOWERONIN);
436*3942d3a8SSheetal Tigadoli 	while (!(mmio_read_32(icfg_mem_ctrl) &
437*3942d3a8SSheetal Tigadoli 		 ICFG_DMAC_MEM_PWR_CTRL__ARRPOWERONOUT))
438*3942d3a8SSheetal Tigadoli 		;
439*3942d3a8SSheetal Tigadoli 
440*3942d3a8SSheetal Tigadoli 	VERBOSE(" - arrpowerok\n");
441*3942d3a8SSheetal Tigadoli 	mmio_setbits_32(icfg_mem_ctrl,
442*3942d3a8SSheetal Tigadoli 			ICFG_DMAC_MEM_PWR_CTRL__ARRPOWEROKIN);
443*3942d3a8SSheetal Tigadoli 	while (!(mmio_read_32(icfg_mem_ctrl) &
444*3942d3a8SSheetal Tigadoli 		 ICFG_DMAC_MEM_PWR_CTRL__ARRPOWEROKOUT))
445*3942d3a8SSheetal Tigadoli 		;
446*3942d3a8SSheetal Tigadoli 
447*3942d3a8SSheetal Tigadoli 	VERBOSE(" - poweron\n");
448*3942d3a8SSheetal Tigadoli 	mmio_setbits_32(icfg_mem_ctrl,
449*3942d3a8SSheetal Tigadoli 			ICFG_DMAC_MEM_PWR_CTRL__POWERONIN);
450*3942d3a8SSheetal Tigadoli 	while (!(mmio_read_32(icfg_mem_ctrl) &
451*3942d3a8SSheetal Tigadoli 		 ICFG_DMAC_MEM_PWR_CTRL__POWERONOUT))
452*3942d3a8SSheetal Tigadoli 		;
453*3942d3a8SSheetal Tigadoli 
454*3942d3a8SSheetal Tigadoli 	VERBOSE(" - powerok\n");
455*3942d3a8SSheetal Tigadoli 	mmio_setbits_32(icfg_mem_ctrl,
456*3942d3a8SSheetal Tigadoli 			ICFG_DMAC_MEM_PWR_CTRL__POWEROKIN);
457*3942d3a8SSheetal Tigadoli 	while (!(mmio_read_32(icfg_mem_ctrl) &
458*3942d3a8SSheetal Tigadoli 		 ICFG_DMAC_MEM_PWR_CTRL__POWEROKOUT))
459*3942d3a8SSheetal Tigadoli 		;
460*3942d3a8SSheetal Tigadoli 
461*3942d3a8SSheetal Tigadoli 	/* Wait sometime */
462*3942d3a8SSheetal Tigadoli 	mdelay(1);
463*3942d3a8SSheetal Tigadoli 
464*3942d3a8SSheetal Tigadoli 	VERBOSE(" - remove isolation\n");
465*3942d3a8SSheetal Tigadoli 	mmio_clrbits_32(icfg_mem_ctrl, ICFG_DMAC_MEM_PWR_CTRL__ISO);
466*3942d3a8SSheetal Tigadoli 
467*3942d3a8SSheetal Tigadoli 	INFO("dmac meminit done\n");
468*3942d3a8SSheetal Tigadoli }
469*3942d3a8SSheetal Tigadoli 
470*3942d3a8SSheetal Tigadoli /* program the crmu access ranges for allowing non sec access*/
471*3942d3a8SSheetal Tigadoli static void brcm_stingray_crmu_access_init(void)
472*3942d3a8SSheetal Tigadoli {
473*3942d3a8SSheetal Tigadoli 	/* Enable 0x6641c001 - 0x6641c701 for non secure access */
474*3942d3a8SSheetal Tigadoli 	mmio_write_32(CRMU_CORE_ADDR_RANGE0_LOW, 0x6641c001);
475*3942d3a8SSheetal Tigadoli 	mmio_write_32(CRMU_CORE_ADDR_RANGE0_LOW + 0x4, 0x6641c701);
476*3942d3a8SSheetal Tigadoli 
477*3942d3a8SSheetal Tigadoli 	/* Enable 0x6641d001 - 0x66424b01 for non secure access */
478*3942d3a8SSheetal Tigadoli 	mmio_write_32(CRMU_CORE_ADDR_RANGE1_LOW, 0x6641d001);
479*3942d3a8SSheetal Tigadoli 	mmio_write_32(CRMU_CORE_ADDR_RANGE1_LOW + 0x4, 0x66424b01);
480*3942d3a8SSheetal Tigadoli 
481*3942d3a8SSheetal Tigadoli 	/* Enable 0x66425001 - 0x66425f01 for non secure access */
482*3942d3a8SSheetal Tigadoli 	mmio_write_32(CRMU_CORE_ADDR_RANGE2_LOW, 0x66425001);
483*3942d3a8SSheetal Tigadoli 	mmio_write_32(CRMU_CORE_ADDR_RANGE2_LOW + 0x4, 0x66425f01);
484*3942d3a8SSheetal Tigadoli 
485*3942d3a8SSheetal Tigadoli 	INFO("crmu access init done\n");
486*3942d3a8SSheetal Tigadoli }
487*3942d3a8SSheetal Tigadoli 
488*3942d3a8SSheetal Tigadoli static void brcm_stingray_scr_init(void)
489*3942d3a8SSheetal Tigadoli {
490*3942d3a8SSheetal Tigadoli 	unsigned int val;
491*3942d3a8SSheetal Tigadoli 	uintptr_t scr_base = SCR_BASE;
492*3942d3a8SSheetal Tigadoli 	unsigned int clr_mask = SCR_AXCACHE_CONFIG_MASK;
493*3942d3a8SSheetal Tigadoli 	unsigned int set_mask = SCR_TBUX_AXCACHE_CONFIG;
494*3942d3a8SSheetal Tigadoli 
495*3942d3a8SSheetal Tigadoli 	VERBOSE("scr init start\n");
496*3942d3a8SSheetal Tigadoli 
497*3942d3a8SSheetal Tigadoli 	/* awdomain=0x1 and ardomain=0x1 */
498*3942d3a8SSheetal Tigadoli 	mmio_clrsetbits_32(scr_base + 0x0, clr_mask, set_mask);
499*3942d3a8SSheetal Tigadoli 	val = mmio_read_32(scr_base + 0x0);
500*3942d3a8SSheetal Tigadoli 	VERBOSE(" - set tbu0_config=0x%x\n", val);
501*3942d3a8SSheetal Tigadoli 
502*3942d3a8SSheetal Tigadoli 	/* awdomain=0x1 and ardomain=0x1 */
503*3942d3a8SSheetal Tigadoli 	mmio_clrsetbits_32(scr_base + 0x4, clr_mask, set_mask);
504*3942d3a8SSheetal Tigadoli 	val = mmio_read_32(scr_base + 0x4);
505*3942d3a8SSheetal Tigadoli 	VERBOSE(" - set tbu1_config=0x%x\n", val);
506*3942d3a8SSheetal Tigadoli 
507*3942d3a8SSheetal Tigadoli 	/* awdomain=0x1 and ardomain=0x1 */
508*3942d3a8SSheetal Tigadoli 	mmio_clrsetbits_32(scr_base + 0x8, clr_mask, set_mask);
509*3942d3a8SSheetal Tigadoli 	val = mmio_read_32(scr_base + 0x8);
510*3942d3a8SSheetal Tigadoli 	VERBOSE(" - set tbu2_config=0x%x\n", val);
511*3942d3a8SSheetal Tigadoli 
512*3942d3a8SSheetal Tigadoli 	/* awdomain=0x1 and ardomain=0x1 */
513*3942d3a8SSheetal Tigadoli 	mmio_clrsetbits_32(scr_base + 0xc, clr_mask, set_mask);
514*3942d3a8SSheetal Tigadoli 	val = mmio_read_32(scr_base + 0xc);
515*3942d3a8SSheetal Tigadoli 	VERBOSE(" - set tbu3_config=0x%x\n", val);
516*3942d3a8SSheetal Tigadoli 
517*3942d3a8SSheetal Tigadoli 	/* awdomain=0x1 and ardomain=0x1 */
518*3942d3a8SSheetal Tigadoli 	mmio_clrsetbits_32(scr_base + 0x10, clr_mask, set_mask);
519*3942d3a8SSheetal Tigadoli 	val = mmio_read_32(scr_base + 0x10);
520*3942d3a8SSheetal Tigadoli 	VERBOSE(" - set tbu4_config=0x%x\n", val);
521*3942d3a8SSheetal Tigadoli 
522*3942d3a8SSheetal Tigadoli 	/* awdomain=0x0 and ardomain=0x0 */
523*3942d3a8SSheetal Tigadoli 	mmio_clrbits_32(scr_base + 0x14, clr_mask);
524*3942d3a8SSheetal Tigadoli 	val = mmio_read_32(scr_base + 0x14);
525*3942d3a8SSheetal Tigadoli 	VERBOSE(" - set gic_config=0x%x\n", val);
526*3942d3a8SSheetal Tigadoli 
527*3942d3a8SSheetal Tigadoli 	INFO("scr init done\n");
528*3942d3a8SSheetal Tigadoli }
529*3942d3a8SSheetal Tigadoli 
530*3942d3a8SSheetal Tigadoli static void brcm_stingray_hsls_tzpcprot_init(void)
531*3942d3a8SSheetal Tigadoli {
532*3942d3a8SSheetal Tigadoli 	unsigned int val;
533*3942d3a8SSheetal Tigadoli 	uintptr_t tzpcdecprot_base = HSLS_TZPC_BASE;
534*3942d3a8SSheetal Tigadoli 
535*3942d3a8SSheetal Tigadoli 	VERBOSE("hsls tzpcprot init start\n");
536*3942d3a8SSheetal Tigadoli 
537*3942d3a8SSheetal Tigadoli 	/* Treat third-party masters as non-secured */
538*3942d3a8SSheetal Tigadoli 	val = 0;
539*3942d3a8SSheetal Tigadoli 	val |= BIT(6); /* SDIO1 */
540*3942d3a8SSheetal Tigadoli 	val |= BIT(5); /* SDIO0 */
541*3942d3a8SSheetal Tigadoli 	val |= BIT(0); /* AMAC */
542*3942d3a8SSheetal Tigadoli 	mmio_write_32(tzpcdecprot_base + 0x810, val);
543*3942d3a8SSheetal Tigadoli 
544*3942d3a8SSheetal Tigadoli 	/* Print TZPC decode status registers */
545*3942d3a8SSheetal Tigadoli 	VERBOSE(" - tzpcdecprot0=0x%x\n",
546*3942d3a8SSheetal Tigadoli 		mmio_read_32(tzpcdecprot_base + 0x800));
547*3942d3a8SSheetal Tigadoli 
548*3942d3a8SSheetal Tigadoli 	VERBOSE(" - tzpcdecprot1=0x%x\n",
549*3942d3a8SSheetal Tigadoli 		mmio_read_32(tzpcdecprot_base + 0x80c));
550*3942d3a8SSheetal Tigadoli 
551*3942d3a8SSheetal Tigadoli 	INFO("hsls tzpcprot init done\n");
552*3942d3a8SSheetal Tigadoli }
553*3942d3a8SSheetal Tigadoli 
554*3942d3a8SSheetal Tigadoli #ifdef USE_I2S
555*3942d3a8SSheetal Tigadoli #define ICFG_AUDIO_POWER_CTRL			(HSLS_ICFG_REGS_BASE + 0xaa8)
556*3942d3a8SSheetal Tigadoli #define ICFG_AUDIO_POWER_CTRL__POWERONIN	BIT(0)
557*3942d3a8SSheetal Tigadoli #define ICFG_AUDIO_POWER_CTRL__POWEROKIN	BIT(1)
558*3942d3a8SSheetal Tigadoli #define ICFG_AUDIO_POWER_CTRL__ARRPOWERONIN	BIT(2)
559*3942d3a8SSheetal Tigadoli #define ICFG_AUDIO_POWER_CTRL__ARRPOWEROKIN	BIT(3)
560*3942d3a8SSheetal Tigadoli #define ICFG_AUDIO_POWER_CTRL__POWERONOUT	BIT(4)
561*3942d3a8SSheetal Tigadoli #define ICFG_AUDIO_POWER_CTRL__POWEROKOUT	BIT(5)
562*3942d3a8SSheetal Tigadoli #define ICFG_AUDIO_POWER_CTRL__ARRPOWERONOUT	BIT(6)
563*3942d3a8SSheetal Tigadoli #define ICFG_AUDIO_POWER_CTRL__ARRPOWEROKOUT	BIT(7)
564*3942d3a8SSheetal Tigadoli #define ICFG_AUDIO_POWER_CTRL__ISO		BIT(8)
565*3942d3a8SSheetal Tigadoli #define ICFG_AUDIO_SID_CONTROL			(HSLS_ICFG_REGS_BASE + 0xaf8)
566*3942d3a8SSheetal Tigadoli #define ICFG_AUDIO_SID_SHIFT			5
567*3942d3a8SSheetal Tigadoli #define ICFG_AUDIO_SID_AWADDR_OFFSET		0x0
568*3942d3a8SSheetal Tigadoli #define ICFG_AUDIO_SID_ARADDR_OFFSET		0x4
569*3942d3a8SSheetal Tigadoli 
570*3942d3a8SSheetal Tigadoli #define I2S_RESET_CONTROL        (HSLS_IDM_REGS_BASE + 0x1800)
571*3942d3a8SSheetal Tigadoli #define I2S_IDM_IO_CONTROL       (HSLS_IDM_REGS_BASE + 0x1408)
572*3942d3a8SSheetal Tigadoli #define IO_CONTROL_CLK_ENABLE    BIT(0)
573*3942d3a8SSheetal Tigadoli #define I2S_IDM0_ARCACHE_OFFSET  16
574*3942d3a8SSheetal Tigadoli #define I2S_IDM0_AWCACHE_OFFSET  20
575*3942d3a8SSheetal Tigadoli #define I2S_IDM0_ARCACHE_MASK    (0xF << I2S_IDM0_ARCACHE_OFFSET)
576*3942d3a8SSheetal Tigadoli #define I2S_IDM0_AWCACHE_MASK    (0xF << I2S_IDM0_AWCACHE_OFFSET)
577*3942d3a8SSheetal Tigadoli /* ARCACHE - AWCACHE is 0x22 Normal Non-cacheable Non-bufferable. */
578*3942d3a8SSheetal Tigadoli #define I2S_IDM0_ARCACHE_VAL     (0x2 << I2S_IDM0_ARCACHE_OFFSET)
579*3942d3a8SSheetal Tigadoli #define I2S_IDM0_AWCACHE_VAL     (0x2 << I2S_IDM0_AWCACHE_OFFSET)
580*3942d3a8SSheetal Tigadoli 
581*3942d3a8SSheetal Tigadoli static void brcm_stingray_audio_init(void)
582*3942d3a8SSheetal Tigadoli {
583*3942d3a8SSheetal Tigadoli 	unsigned int val;
584*3942d3a8SSheetal Tigadoli 	uintptr_t icfg_mem_ctrl = ICFG_AUDIO_POWER_CTRL;
585*3942d3a8SSheetal Tigadoli 	uintptr_t icfg_audio_sid = ICFG_AUDIO_SID_CONTROL;
586*3942d3a8SSheetal Tigadoli 
587*3942d3a8SSheetal Tigadoli 	mmio_write_32(I2S_RESET_CONTROL, 0x0);
588*3942d3a8SSheetal Tigadoli 
589*3942d3a8SSheetal Tigadoli 	mmio_clrsetbits_32(I2S_IDM_IO_CONTROL, I2S_IDM0_ARCACHE_MASK,
590*3942d3a8SSheetal Tigadoli 			   I2S_IDM0_ARCACHE_VAL);
591*3942d3a8SSheetal Tigadoli 
592*3942d3a8SSheetal Tigadoli 	mmio_clrsetbits_32(I2S_IDM_IO_CONTROL, I2S_IDM0_AWCACHE_MASK,
593*3942d3a8SSheetal Tigadoli 			   I2S_IDM0_AWCACHE_VAL);
594*3942d3a8SSheetal Tigadoli 
595*3942d3a8SSheetal Tigadoli 	mmio_setbits_32(I2S_IDM_IO_CONTROL, IO_CONTROL_CLK_ENABLE);
596*3942d3a8SSheetal Tigadoli 
597*3942d3a8SSheetal Tigadoli 	VERBOSE("audio meminit start\n");
598*3942d3a8SSheetal Tigadoli 
599*3942d3a8SSheetal Tigadoli 	VERBOSE(" - configure stream_id = 0x6001\n");
600*3942d3a8SSheetal Tigadoli 	val = SR_SID_VAL(0x3, 0x0, 0x1) << ICFG_AUDIO_SID_SHIFT;
601*3942d3a8SSheetal Tigadoli 	mmio_write_32(icfg_audio_sid + ICFG_AUDIO_SID_AWADDR_OFFSET, val);
602*3942d3a8SSheetal Tigadoli 	mmio_write_32(icfg_audio_sid + ICFG_AUDIO_SID_ARADDR_OFFSET, val);
603*3942d3a8SSheetal Tigadoli 
604*3942d3a8SSheetal Tigadoli 	VERBOSE(" - arrpoweron\n");
605*3942d3a8SSheetal Tigadoli 	mmio_setbits_32(icfg_mem_ctrl,
606*3942d3a8SSheetal Tigadoli 			ICFG_AUDIO_POWER_CTRL__ARRPOWERONIN);
607*3942d3a8SSheetal Tigadoli 	while (!(mmio_read_32(icfg_mem_ctrl) &
608*3942d3a8SSheetal Tigadoli 		 ICFG_AUDIO_POWER_CTRL__ARRPOWERONOUT))
609*3942d3a8SSheetal Tigadoli 		;
610*3942d3a8SSheetal Tigadoli 
611*3942d3a8SSheetal Tigadoli 	VERBOSE(" - arrpowerok\n");
612*3942d3a8SSheetal Tigadoli 	mmio_setbits_32(icfg_mem_ctrl,
613*3942d3a8SSheetal Tigadoli 			ICFG_AUDIO_POWER_CTRL__ARRPOWEROKIN);
614*3942d3a8SSheetal Tigadoli 	while (!(mmio_read_32(icfg_mem_ctrl) &
615*3942d3a8SSheetal Tigadoli 		 ICFG_AUDIO_POWER_CTRL__ARRPOWEROKOUT))
616*3942d3a8SSheetal Tigadoli 		;
617*3942d3a8SSheetal Tigadoli 
618*3942d3a8SSheetal Tigadoli 	VERBOSE(" - poweron\n");
619*3942d3a8SSheetal Tigadoli 	mmio_setbits_32(icfg_mem_ctrl,
620*3942d3a8SSheetal Tigadoli 			ICFG_AUDIO_POWER_CTRL__POWERONIN);
621*3942d3a8SSheetal Tigadoli 	while (!(mmio_read_32(icfg_mem_ctrl) &
622*3942d3a8SSheetal Tigadoli 		 ICFG_AUDIO_POWER_CTRL__POWERONOUT))
623*3942d3a8SSheetal Tigadoli 		;
624*3942d3a8SSheetal Tigadoli 
625*3942d3a8SSheetal Tigadoli 	VERBOSE(" - powerok\n");
626*3942d3a8SSheetal Tigadoli 	mmio_setbits_32(icfg_mem_ctrl,
627*3942d3a8SSheetal Tigadoli 			ICFG_AUDIO_POWER_CTRL__POWEROKIN);
628*3942d3a8SSheetal Tigadoli 	while (!(mmio_read_32(icfg_mem_ctrl) &
629*3942d3a8SSheetal Tigadoli 		 ICFG_AUDIO_POWER_CTRL__POWEROKOUT))
630*3942d3a8SSheetal Tigadoli 		;
631*3942d3a8SSheetal Tigadoli 
632*3942d3a8SSheetal Tigadoli 	/* Wait sometime */
633*3942d3a8SSheetal Tigadoli 	mdelay(1);
634*3942d3a8SSheetal Tigadoli 
635*3942d3a8SSheetal Tigadoli 	VERBOSE(" - remove isolation\n");
636*3942d3a8SSheetal Tigadoli 	mmio_clrbits_32(icfg_mem_ctrl, ICFG_AUDIO_POWER_CTRL__ISO);
637*3942d3a8SSheetal Tigadoli 
638*3942d3a8SSheetal Tigadoli 	INFO("audio meminit done\n");
639*3942d3a8SSheetal Tigadoli }
640*3942d3a8SSheetal Tigadoli #endif    /* USE_I2S */
641*3942d3a8SSheetal Tigadoli 
642*3942d3a8SSheetal Tigadoli /*
643*3942d3a8SSheetal Tigadoli  * These defines do not match the regfile but they are renamed in a way such
644*3942d3a8SSheetal Tigadoli  * that they are much more readible
645*3942d3a8SSheetal Tigadoli  */
646*3942d3a8SSheetal Tigadoli 
647*3942d3a8SSheetal Tigadoli #define SCR_GPV_SMMU_NS			(SCR_GPV_BASE + 0x28)
648*3942d3a8SSheetal Tigadoli #define SCR_GPV_GIC500_NS		(SCR_GPV_BASE + 0x34)
649*3942d3a8SSheetal Tigadoli #define HSLS_GPV_NOR_S0_NS		(HSLS_GPV_BASE + 0x14)
650*3942d3a8SSheetal Tigadoli #define HSLS_GPV_IDM1_NS		(HSLS_GPV_BASE + 0x18)
651*3942d3a8SSheetal Tigadoli #define HSLS_GPV_IDM2_NS		(HSLS_GPV_BASE + 0x1c)
652*3942d3a8SSheetal Tigadoli #define HSLS_SDIO0_SLAVE_NS		(HSLS_GPV_BASE + 0x20)
653*3942d3a8SSheetal Tigadoli #define HSLS_SDIO1_SLAVE_NS		(HSLS_GPV_BASE + 0x24)
654*3942d3a8SSheetal Tigadoli #define HSLS_GPV_APBY_NS		(HSLS_GPV_BASE + 0x2c)
655*3942d3a8SSheetal Tigadoli #define HSLS_GPV_APBZ_NS		(HSLS_GPV_BASE + 0x30)
656*3942d3a8SSheetal Tigadoli #define HSLS_GPV_APBX_NS		(HSLS_GPV_BASE + 0x34)
657*3942d3a8SSheetal Tigadoli #define HSLS_GPV_APBS_NS		(HSLS_GPV_BASE + 0x38)
658*3942d3a8SSheetal Tigadoli #define HSLS_GPV_QSPI_S0_NS		(HSLS_GPV_BASE + 0x68)
659*3942d3a8SSheetal Tigadoli #define HSLS_GPV_APBR_NS		(HSLS_GPV_BASE + 0x6c)
660*3942d3a8SSheetal Tigadoli #define FS4_CRYPTO_GPV_RM_SLAVE_NS	(FS4_CRYPTO_GPV_BASE + 0x8)
661*3942d3a8SSheetal Tigadoli #define FS4_CRYPTO_GPV_APB_SWITCH_NS	(FS4_CRYPTO_GPV_BASE + 0xc)
662*3942d3a8SSheetal Tigadoli #define FS4_RAID_GPV_RM_SLAVE_NS	(FS4_RAID_GPV_BASE + 0x8)
663*3942d3a8SSheetal Tigadoli #define FS4_RAID_GPV_APB_SWITCH_NS	(FS4_RAID_GPV_BASE + 0xc)
664*3942d3a8SSheetal Tigadoli #define FS4_CRYPTO_IDM_NS		(NIC400_FS_NOC_ROOT + 0x1c)
665*3942d3a8SSheetal Tigadoli #define FS4_RAID_IDM_NS			(NIC400_FS_NOC_ROOT + 0x28)
666*3942d3a8SSheetal Tigadoli 
667*3942d3a8SSheetal Tigadoli #define FS4_CRYPTO_RING_COUNT          32
668*3942d3a8SSheetal Tigadoli #define FS4_CRYPTO_DME_COUNT           10
669*3942d3a8SSheetal Tigadoli #define FS4_CRYPTO_AE_COUNT            10
670*3942d3a8SSheetal Tigadoli #define FS4_CRYPTO_START_STREAM_ID     0x4000
671*3942d3a8SSheetal Tigadoli #define FS4_CRYPTO_MSI_DEVICE_ID       0x4100
672*3942d3a8SSheetal Tigadoli 
673*3942d3a8SSheetal Tigadoli #define FS4_RAID_RING_COUNT            32
674*3942d3a8SSheetal Tigadoli #define FS4_RAID_DME_COUNT             8
675*3942d3a8SSheetal Tigadoli #define FS4_RAID_AE_COUNT              8
676*3942d3a8SSheetal Tigadoli #define FS4_RAID_START_STREAM_ID       0x4200
677*3942d3a8SSheetal Tigadoli #define FS4_RAID_MSI_DEVICE_ID         0x4300
678*3942d3a8SSheetal Tigadoli 
679*3942d3a8SSheetal Tigadoli #define FS6_PKI_AXI_SLAVE_NS \
680*3942d3a8SSheetal Tigadoli 		(NIC400_FS_NOC_ROOT + NIC400_FS_NOC_SECURITY2_OFFSET)
681*3942d3a8SSheetal Tigadoli 
682*3942d3a8SSheetal Tigadoli #define FS6_PKI_AE_DME_APB_NS \
683*3942d3a8SSheetal Tigadoli 		(NIC400_FS_NOC_ROOT + NIC400_FS_NOC_SECURITY7_OFFSET)
684*3942d3a8SSheetal Tigadoli #define FS6_PKI_IDM_IO_CONTROL_DIRECT	0x0
685*3942d3a8SSheetal Tigadoli #define FS6_PKI_IDM_RESET_CONTROL	0x0
686*3942d3a8SSheetal Tigadoli #define FS6_PKI_RING_COUNT		32
687*3942d3a8SSheetal Tigadoli #define FS6_PKI_DME_COUNT		1
688*3942d3a8SSheetal Tigadoli #define FS6_PKI_AE_COUNT		4
689*3942d3a8SSheetal Tigadoli #define FS6_PKI_START_STREAM_ID		0x4000
690*3942d3a8SSheetal Tigadoli #define FS6_PKI_MSI_DEVICE_ID		0x4100
691*3942d3a8SSheetal Tigadoli 
692*3942d3a8SSheetal Tigadoli static void brcm_stingray_security_init(void)
693*3942d3a8SSheetal Tigadoli {
694*3942d3a8SSheetal Tigadoli 	unsigned int val;
695*3942d3a8SSheetal Tigadoli 
696*3942d3a8SSheetal Tigadoli 	val = mmio_read_32(SCR_GPV_SMMU_NS);
697*3942d3a8SSheetal Tigadoli 	val |= BIT(0);				/* SMMU NS = 1 */
698*3942d3a8SSheetal Tigadoli 	mmio_write_32(SCR_GPV_SMMU_NS, val);
699*3942d3a8SSheetal Tigadoli 
700*3942d3a8SSheetal Tigadoli 	val = mmio_read_32(SCR_GPV_GIC500_NS);
701*3942d3a8SSheetal Tigadoli 	val |= BIT(0);				/* GIC-500 NS = 1 */
702*3942d3a8SSheetal Tigadoli 	mmio_write_32(SCR_GPV_GIC500_NS, val);
703*3942d3a8SSheetal Tigadoli 
704*3942d3a8SSheetal Tigadoli 	val = mmio_read_32(HSLS_GPV_NOR_S0_NS);
705*3942d3a8SSheetal Tigadoli 	val |= BIT(0);				/* NOR SLAVE NS = 1 */
706*3942d3a8SSheetal Tigadoli 	mmio_write_32(HSLS_GPV_NOR_S0_NS, val);
707*3942d3a8SSheetal Tigadoli 
708*3942d3a8SSheetal Tigadoli 	val = mmio_read_32(HSLS_GPV_IDM1_NS);
709*3942d3a8SSheetal Tigadoli 	val |= BIT(0);				/* DMA IDM NS = 1 */
710*3942d3a8SSheetal Tigadoli 	val |= BIT(1);				/* I2S IDM NS = 1 */
711*3942d3a8SSheetal Tigadoli 	val |= BIT(2);				/* AMAC IDM NS = 1 */
712*3942d3a8SSheetal Tigadoli 	val |= BIT(3);				/* SDIO0 IDM NS = 1 */
713*3942d3a8SSheetal Tigadoli 	val |= BIT(4);				/* SDIO1 IDM NS = 1 */
714*3942d3a8SSheetal Tigadoli 	val |= BIT(5);				/* DS_3 IDM NS = 1 */
715*3942d3a8SSheetal Tigadoli 	mmio_write_32(HSLS_GPV_IDM1_NS, val);
716*3942d3a8SSheetal Tigadoli 
717*3942d3a8SSheetal Tigadoli 	val = mmio_read_32(HSLS_GPV_IDM2_NS);
718*3942d3a8SSheetal Tigadoli 	val |= BIT(2);				/* QSPI IDM NS = 1 */
719*3942d3a8SSheetal Tigadoli 	val |= BIT(1);				/* NOR IDM NS = 1 */
720*3942d3a8SSheetal Tigadoli 	val |= BIT(0);				/* NAND IDM NS = 1 */
721*3942d3a8SSheetal Tigadoli 	mmio_write_32(HSLS_GPV_IDM2_NS, val);
722*3942d3a8SSheetal Tigadoli 
723*3942d3a8SSheetal Tigadoli 	val = mmio_read_32(HSLS_GPV_APBY_NS);
724*3942d3a8SSheetal Tigadoli 	val |= BIT(10);				/* I2S NS = 1 */
725*3942d3a8SSheetal Tigadoli 	val |= BIT(4);				/* IOPAD NS = 1 */
726*3942d3a8SSheetal Tigadoli 	val |= 0xf;				/* UARTx NS = 1 */
727*3942d3a8SSheetal Tigadoli 	mmio_write_32(HSLS_GPV_APBY_NS, val);
728*3942d3a8SSheetal Tigadoli 
729*3942d3a8SSheetal Tigadoli 	val = mmio_read_32(HSLS_GPV_APBZ_NS);
730*3942d3a8SSheetal Tigadoli 	val |= BIT(2);			/* RNG NS = 1 */
731*3942d3a8SSheetal Tigadoli 	mmio_write_32(HSLS_GPV_APBZ_NS, val);
732*3942d3a8SSheetal Tigadoli 
733*3942d3a8SSheetal Tigadoli 	val = mmio_read_32(HSLS_GPV_APBS_NS);
734*3942d3a8SSheetal Tigadoli 	val |= 0x3;				/* SPIx NS = 1 */
735*3942d3a8SSheetal Tigadoli 	mmio_write_32(HSLS_GPV_APBS_NS, val);
736*3942d3a8SSheetal Tigadoli 
737*3942d3a8SSheetal Tigadoli 	val = mmio_read_32(HSLS_GPV_APBR_NS);
738*3942d3a8SSheetal Tigadoli 	val |= BIT(7);				/* QSPI APB NS = 1 */
739*3942d3a8SSheetal Tigadoli 	val |= BIT(6);				/* NAND APB NS = 1 */
740*3942d3a8SSheetal Tigadoli 	val |= BIT(5);				/* NOR APB NS = 1 */
741*3942d3a8SSheetal Tigadoli 	val |= BIT(4);				/* AMAC APB NS = 1 */
742*3942d3a8SSheetal Tigadoli 	val |= BIT(1);				/* DMA S1 APB NS = 1 */
743*3942d3a8SSheetal Tigadoli 	mmio_write_32(HSLS_GPV_APBR_NS, val);
744*3942d3a8SSheetal Tigadoli 
745*3942d3a8SSheetal Tigadoli 	val = mmio_read_32(HSLS_SDIO0_SLAVE_NS);
746*3942d3a8SSheetal Tigadoli 	val |= BIT(0);				/* SDIO0 NS = 1 */
747*3942d3a8SSheetal Tigadoli 	mmio_write_32(HSLS_SDIO0_SLAVE_NS, val);
748*3942d3a8SSheetal Tigadoli 
749*3942d3a8SSheetal Tigadoli 	val = mmio_read_32(HSLS_SDIO1_SLAVE_NS);
750*3942d3a8SSheetal Tigadoli 	val |= BIT(0);				/* SDIO1 NS = 1 */
751*3942d3a8SSheetal Tigadoli 	mmio_write_32(HSLS_SDIO1_SLAVE_NS, val);
752*3942d3a8SSheetal Tigadoli 
753*3942d3a8SSheetal Tigadoli 	val = mmio_read_32(HSLS_GPV_APBX_NS);
754*3942d3a8SSheetal Tigadoli 	val |= BIT(14);				/* SMBUS1 NS = 1 */
755*3942d3a8SSheetal Tigadoli 	val |= BIT(13);				/* GPIO NS = 1 */
756*3942d3a8SSheetal Tigadoli 	val |= BIT(12);				/* WDT NS = 1 */
757*3942d3a8SSheetal Tigadoli 	val |= BIT(11);				/* SMBUS0 NS = 1 */
758*3942d3a8SSheetal Tigadoli 	val |= BIT(10);				/* Timer7 NS = 1 */
759*3942d3a8SSheetal Tigadoli 	val |= BIT(9);				/* Timer6 NS = 1 */
760*3942d3a8SSheetal Tigadoli 	val |= BIT(8);				/* Timer5 NS = 1 */
761*3942d3a8SSheetal Tigadoli 	val |= BIT(7);				/* Timer4 NS = 1 */
762*3942d3a8SSheetal Tigadoli 	val |= BIT(6);				/* Timer3 NS = 1 */
763*3942d3a8SSheetal Tigadoli 	val |= BIT(5);				/* Timer2 NS = 1 */
764*3942d3a8SSheetal Tigadoli 	val |= BIT(4);				/* Timer1 NS = 1 */
765*3942d3a8SSheetal Tigadoli 	val |= BIT(3);				/* Timer0 NS = 1 */
766*3942d3a8SSheetal Tigadoli 	val |= BIT(2);				/* MDIO NS = 1 */
767*3942d3a8SSheetal Tigadoli 	val |= BIT(1);				/* PWM NS = 1 */
768*3942d3a8SSheetal Tigadoli 	mmio_write_32(HSLS_GPV_APBX_NS, val);
769*3942d3a8SSheetal Tigadoli 
770*3942d3a8SSheetal Tigadoli 	val = mmio_read_32(HSLS_GPV_QSPI_S0_NS);
771*3942d3a8SSheetal Tigadoli 	val |= BIT(0);				/* QSPI NS = 1 */
772*3942d3a8SSheetal Tigadoli 	mmio_write_32(HSLS_GPV_QSPI_S0_NS, val);
773*3942d3a8SSheetal Tigadoli 
774*3942d3a8SSheetal Tigadoli #ifdef USE_FS4
775*3942d3a8SSheetal Tigadoli 	val = 0x1;				/* FS4 Crypto rm_slave */
776*3942d3a8SSheetal Tigadoli 	mmio_write_32(FS4_CRYPTO_GPV_RM_SLAVE_NS, val);
777*3942d3a8SSheetal Tigadoli 	val = 0x1;				/* FS4 Crypto apb_switch */
778*3942d3a8SSheetal Tigadoli 	mmio_write_32(FS4_CRYPTO_GPV_APB_SWITCH_NS, val);
779*3942d3a8SSheetal Tigadoli 
780*3942d3a8SSheetal Tigadoli 	val = 0x1;				/* FS4 Raid rm_slave */
781*3942d3a8SSheetal Tigadoli 	mmio_write_32(FS4_RAID_GPV_RM_SLAVE_NS, val);
782*3942d3a8SSheetal Tigadoli 	val = 0x1;				/* FS4 Raid apb_switch */
783*3942d3a8SSheetal Tigadoli 	mmio_write_32(FS4_RAID_GPV_APB_SWITCH_NS, val);
784*3942d3a8SSheetal Tigadoli 
785*3942d3a8SSheetal Tigadoli 	val = 0x1;				/* FS4 Crypto IDM */
786*3942d3a8SSheetal Tigadoli 	mmio_write_32(FS4_CRYPTO_IDM_NS, val);
787*3942d3a8SSheetal Tigadoli 	val = 0x1;				/* FS4 RAID IDM */
788*3942d3a8SSheetal Tigadoli 	mmio_write_32(FS4_RAID_IDM_NS, val);
789*3942d3a8SSheetal Tigadoli #endif
790*3942d3a8SSheetal Tigadoli 
791*3942d3a8SSheetal Tigadoli #ifdef BL31_CCN_NONSECURE
792*3942d3a8SSheetal Tigadoli 	/* Enable non-secure access to CCN registers */
793*3942d3a8SSheetal Tigadoli 	mmio_write_32(OLY_MN_REGISTERS_NODE0_SECURE_ACCESS, 0x1);
794*3942d3a8SSheetal Tigadoli #endif
795*3942d3a8SSheetal Tigadoli 
796*3942d3a8SSheetal Tigadoli #ifdef DDR_CTRL_PHY_NONSECURE
797*3942d3a8SSheetal Tigadoli 	mmio_write_32(SCR_NOC_DDR_REGISTER_ACCESS, 0x1);
798*3942d3a8SSheetal Tigadoli #endif
799*3942d3a8SSheetal Tigadoli 
800*3942d3a8SSheetal Tigadoli 	paxc_mhb_ns_init();
801*3942d3a8SSheetal Tigadoli 
802*3942d3a8SSheetal Tigadoli 	/* unlock scr idm for non secure access */
803*3942d3a8SSheetal Tigadoli 	mmio_write_32(SCR_NOC_SECURITY0, 0xffffffff);
804*3942d3a8SSheetal Tigadoli 
805*3942d3a8SSheetal Tigadoli 	INFO("security init done\r\n");
806*3942d3a8SSheetal Tigadoli }
807*3942d3a8SSheetal Tigadoli 
808*3942d3a8SSheetal Tigadoli void brcm_gpio_pad_ns_init(void)
809*3942d3a8SSheetal Tigadoli {
810*3942d3a8SSheetal Tigadoli 	/* configure all GPIO pads for non secure world access*/
811*3942d3a8SSheetal Tigadoli 	mmio_write_32(GPIO_S_CNTRL_REG, 0xffffffff); /* 128-140 gpio pads */
812*3942d3a8SSheetal Tigadoli 	mmio_write_32(GPIO_S_CNTRL_REG + 0x4, 0xffffffff); /* 96-127 gpio pad */
813*3942d3a8SSheetal Tigadoli 	mmio_write_32(GPIO_S_CNTRL_REG + 0x8, 0xffffffff); /* 64-95 gpio pad */
814*3942d3a8SSheetal Tigadoli 	mmio_write_32(GPIO_S_CNTRL_REG + 0xc, 0xffffffff); /* 32-63 gpio pad */
815*3942d3a8SSheetal Tigadoli 	mmio_write_32(GPIO_S_CNTRL_REG + 0x10, 0xffffffff); /* 0-31 gpio pad */
816*3942d3a8SSheetal Tigadoli }
817*3942d3a8SSheetal Tigadoli 
818*3942d3a8SSheetal Tigadoli #ifndef USE_DDR
819*3942d3a8SSheetal Tigadoli static void brcm_stingray_sram_ns_init(void)
820*3942d3a8SSheetal Tigadoli {
821*3942d3a8SSheetal Tigadoli 	uintptr_t sram_root = TZC400_FS_SRAM_ROOT;
822*3942d3a8SSheetal Tigadoli 	uintptr_t noc_root = NIC400_FS_NOC_ROOT;
823*3942d3a8SSheetal Tigadoli 
824*3942d3a8SSheetal Tigadoli 	mmio_write_32(sram_root + GATE_KEEPER_OFFSET, 1);
825*3942d3a8SSheetal Tigadoli 	mmio_write_32(sram_root + REGION_ATTRIBUTES_0_OFFSET, 0xc0000000);
826*3942d3a8SSheetal Tigadoli 	mmio_write_32(sram_root + REGION_ID_ACCESS_0_OFFSET, 0x00010001);
827*3942d3a8SSheetal Tigadoli 	mmio_write_32(noc_root + NIC400_FS_NOC_SECURITY4_OFFSET, 0x1);
828*3942d3a8SSheetal Tigadoli 	INFO(" stingray sram ns init done.\n");
829*3942d3a8SSheetal Tigadoli }
830*3942d3a8SSheetal Tigadoli #endif
831*3942d3a8SSheetal Tigadoli 
832*3942d3a8SSheetal Tigadoli static void ccn_pre_init(void)
833*3942d3a8SSheetal Tigadoli {
834*3942d3a8SSheetal Tigadoli 	/*
835*3942d3a8SSheetal Tigadoli 	 * Set WFC bit of RN-I nodes where FS4 is connected.
836*3942d3a8SSheetal Tigadoli 	 * This is required inorder to wait for read/write requests
837*3942d3a8SSheetal Tigadoli 	 * completion acknowledgment. Otherwise FS4 Ring Manager is
838*3942d3a8SSheetal Tigadoli 	 * getting stale data because of re-ordering of read/write
839*3942d3a8SSheetal Tigadoli 	 * requests at CCN level
840*3942d3a8SSheetal Tigadoli 	 */
841*3942d3a8SSheetal Tigadoli 	mmio_setbits_32(OLY_RNI3PDVM_REGISTERS_NODE8_AUX_CTL,
842*3942d3a8SSheetal Tigadoli 			OLY_RNI3PDVM_REGISTERS_NODE8_AUX_CTL_WFC);
843*3942d3a8SSheetal Tigadoli }
844*3942d3a8SSheetal Tigadoli 
845*3942d3a8SSheetal Tigadoli static void ccn_post_init(void)
846*3942d3a8SSheetal Tigadoli {
847*3942d3a8SSheetal Tigadoli 	mmio_setbits_32(OLY_HNI_REGISTERS_NODE0_PCIERC_RNI_NODEID_LIST,
848*3942d3a8SSheetal Tigadoli 			SRP_RNI_PCIE_CONNECTED);
849*3942d3a8SSheetal Tigadoli 	mmio_setbits_32(OLY_HNI_REGISTERS_NODE0_SA_AUX_CTL,
850*3942d3a8SSheetal Tigadoli 			SA_AUX_CTL_SER_DEVNE_WR);
851*3942d3a8SSheetal Tigadoli 
852*3942d3a8SSheetal Tigadoli 	mmio_clrbits_32(OLY_HNI_REGISTERS_NODE0_POS_CONTROL,
853*3942d3a8SSheetal Tigadoli 			POS_CONTROL_HNI_POS_EN);
854*3942d3a8SSheetal Tigadoli 	mmio_clrbits_32(OLY_HNI_REGISTERS_NODE0_SA_AUX_CTL,
855*3942d3a8SSheetal Tigadoli 			SA_AUX_CTL_POS_EARLY_WR_COMP_EN);
856*3942d3a8SSheetal Tigadoli }
857*3942d3a8SSheetal Tigadoli 
858*3942d3a8SSheetal Tigadoli #ifndef BL31_BOOT_PRELOADED_SCP
859*3942d3a8SSheetal Tigadoli static void crmu_init(void)
860*3942d3a8SSheetal Tigadoli {
861*3942d3a8SSheetal Tigadoli 	/*
862*3942d3a8SSheetal Tigadoli 	 * Configure CRMU for using SMMU
863*3942d3a8SSheetal Tigadoli 	 */
864*3942d3a8SSheetal Tigadoli 
865*3942d3a8SSheetal Tigadoli 	/*Program CRMU Stream ID */
866*3942d3a8SSheetal Tigadoli 	mmio_write_32(CRMU_MASTER_AXI_ARUSER_CONFIG,
867*3942d3a8SSheetal Tigadoli 			(CRMU_STREAM_ID << CRMU_SID_SHIFT));
868*3942d3a8SSheetal Tigadoli 	mmio_write_32(CRMU_MASTER_AXI_AWUSER_CONFIG,
869*3942d3a8SSheetal Tigadoli 			(CRMU_STREAM_ID << CRMU_SID_SHIFT));
870*3942d3a8SSheetal Tigadoli 
871*3942d3a8SSheetal Tigadoli 	/* Create Identity mapping */
872*3942d3a8SSheetal Tigadoli 	arm_smmu_create_identity_map(DOMAIN_CRMU);
873*3942d3a8SSheetal Tigadoli 
874*3942d3a8SSheetal Tigadoli 	/* Enable Client Port for Secure Masters*/
875*3942d3a8SSheetal Tigadoli 	arm_smmu_enable_secure_client_port();
876*3942d3a8SSheetal Tigadoli }
877*3942d3a8SSheetal Tigadoli #endif
878*3942d3a8SSheetal Tigadoli 
879*3942d3a8SSheetal Tigadoli static void brcm_fsx_init(void)
880*3942d3a8SSheetal Tigadoli {
881*3942d3a8SSheetal Tigadoli #if defined(USE_FS4) && defined(USE_FS6)
882*3942d3a8SSheetal Tigadoli 	#error "USE_FS4 and USE_FS6 should not be used together"
883*3942d3a8SSheetal Tigadoli #endif
884*3942d3a8SSheetal Tigadoli 
885*3942d3a8SSheetal Tigadoli #ifdef USE_FS4
886*3942d3a8SSheetal Tigadoli 	fsx_init(eFS4_CRYPTO, FS4_CRYPTO_RING_COUNT, FS4_CRYPTO_DME_COUNT,
887*3942d3a8SSheetal Tigadoli 		FS4_CRYPTO_AE_COUNT, FS4_CRYPTO_START_STREAM_ID,
888*3942d3a8SSheetal Tigadoli 		FS4_CRYPTO_MSI_DEVICE_ID, FS4_CRYPTO_IDM_IO_CONTROL_DIRECT,
889*3942d3a8SSheetal Tigadoli 		FS4_CRYPTO_IDM_RESET_CONTROL, FS4_CRYPTO_BASE,
890*3942d3a8SSheetal Tigadoli 		FS4_CRYPTO_DME_BASE);
891*3942d3a8SSheetal Tigadoli 
892*3942d3a8SSheetal Tigadoli 	fsx_init(eFS4_RAID, FS4_RAID_RING_COUNT, FS4_RAID_DME_COUNT,
893*3942d3a8SSheetal Tigadoli 		FS4_RAID_AE_COUNT, FS4_RAID_START_STREAM_ID,
894*3942d3a8SSheetal Tigadoli 		FS4_RAID_MSI_DEVICE_ID, FS4_RAID_IDM_IO_CONTROL_DIRECT,
895*3942d3a8SSheetal Tigadoli 		FS4_RAID_IDM_RESET_CONTROL, FS4_RAID_BASE,
896*3942d3a8SSheetal Tigadoli 		FS4_RAID_DME_BASE);
897*3942d3a8SSheetal Tigadoli 
898*3942d3a8SSheetal Tigadoli 	fsx_meminit("raid",
899*3942d3a8SSheetal Tigadoli 		FS4_RAID_IDM_IO_CONTROL_DIRECT,
900*3942d3a8SSheetal Tigadoli 		FS4_RAID_IDM_IO_STATUS);
901*3942d3a8SSheetal Tigadoli #endif
902*3942d3a8SSheetal Tigadoli }
903*3942d3a8SSheetal Tigadoli 
904*3942d3a8SSheetal Tigadoli static void bcm_bl33_pass_info(void)
905*3942d3a8SSheetal Tigadoli {
906*3942d3a8SSheetal Tigadoli 	struct bl33_info *info = (struct bl33_info *)BL33_SHARED_DDR_BASE;
907*3942d3a8SSheetal Tigadoli 
908*3942d3a8SSheetal Tigadoli 	if (sizeof(*info) > BL33_SHARED_DDR_SIZE)
909*3942d3a8SSheetal Tigadoli 		WARN("bl33 shared area not reserved\n");
910*3942d3a8SSheetal Tigadoli 
911*3942d3a8SSheetal Tigadoli 	info->version = BL33_INFO_VERSION;
912*3942d3a8SSheetal Tigadoli 	info->chip.chip_id = PLAT_CHIP_ID_GET;
913*3942d3a8SSheetal Tigadoli 	info->chip.rev_id = PLAT_CHIP_REV_GET;
914*3942d3a8SSheetal Tigadoli }
915*3942d3a8SSheetal Tigadoli 
916*3942d3a8SSheetal Tigadoli DEFINE_RENAME_SYSREG_RW_FUNCS(l2ctlr_el1, CORTEX_A72_L2CTLR_EL1)
917*3942d3a8SSheetal Tigadoli 
918*3942d3a8SSheetal Tigadoli void plat_bcm_bl31_early_platform_setup(void *from_bl2,
919*3942d3a8SSheetal Tigadoli 					bl_params_t *plat_params_from_bl2)
920*3942d3a8SSheetal Tigadoli {
921*3942d3a8SSheetal Tigadoli #ifdef BL31_BOOT_PRELOADED_SCP
922*3942d3a8SSheetal Tigadoli 	image_info_t scp_image_info;
923*3942d3a8SSheetal Tigadoli 
924*3942d3a8SSheetal Tigadoli 	scp_image_info.image_base = PRELOADED_SCP_BASE;
925*3942d3a8SSheetal Tigadoli 	scp_image_info.image_size = PRELOADED_SCP_SIZE;
926*3942d3a8SSheetal Tigadoli 	bcm_bl2_plat_handle_scp_bl2(&scp_image_info);
927*3942d3a8SSheetal Tigadoli #endif
928*3942d3a8SSheetal Tigadoli 	/*
929*3942d3a8SSheetal Tigadoli 	 * In BL31, logs are saved to DDR and we have much larger space to
930*3942d3a8SSheetal Tigadoli 	 * store logs. We can now afford to save all logs >= the 'INFO' level
931*3942d3a8SSheetal Tigadoli 	 */
932*3942d3a8SSheetal Tigadoli 	bcm_elog_init((void *)BCM_ELOG_BL31_BASE, BCM_ELOG_BL31_SIZE,
933*3942d3a8SSheetal Tigadoli 		      LOG_LEVEL_INFO);
934*3942d3a8SSheetal Tigadoli 
935*3942d3a8SSheetal Tigadoli 	INFO("L2CTLR = 0x%lx\n", read_l2ctlr_el1());
936*3942d3a8SSheetal Tigadoli 
937*3942d3a8SSheetal Tigadoli 	brcm_timer_sync_init();
938*3942d3a8SSheetal Tigadoli 
939*3942d3a8SSheetal Tigadoli 	brcm_stingray_dma_pl330_init();
940*3942d3a8SSheetal Tigadoli 
941*3942d3a8SSheetal Tigadoli 	brcm_stingray_dma_pl330_meminit();
942*3942d3a8SSheetal Tigadoli 
943*3942d3a8SSheetal Tigadoli 	brcm_stingray_spi_pl022_init(APBS_IDM_IDM_RESET_CONTROL);
944*3942d3a8SSheetal Tigadoli 
945*3942d3a8SSheetal Tigadoli #ifdef USE_AMAC
946*3942d3a8SSheetal Tigadoli 	brcm_stingray_amac_init();
947*3942d3a8SSheetal Tigadoli #endif
948*3942d3a8SSheetal Tigadoli 
949*3942d3a8SSheetal Tigadoli 	brcm_stingray_sdio_init();
950*3942d3a8SSheetal Tigadoli 
951*3942d3a8SSheetal Tigadoli #ifdef NCSI_IO_DRIVE_STRENGTH_MA
952*3942d3a8SSheetal Tigadoli 	brcm_stingray_ncsi_init();
953*3942d3a8SSheetal Tigadoli #endif
954*3942d3a8SSheetal Tigadoli 
955*3942d3a8SSheetal Tigadoli #ifdef USE_USB
956*3942d3a8SSheetal Tigadoli 	xhci_phy_init();
957*3942d3a8SSheetal Tigadoli #endif
958*3942d3a8SSheetal Tigadoli 
959*3942d3a8SSheetal Tigadoli #ifdef USE_SATA
960*3942d3a8SSheetal Tigadoli 	brcm_stingray_sata_init();
961*3942d3a8SSheetal Tigadoli #else
962*3942d3a8SSheetal Tigadoli 	poweroff_sata_pll();
963*3942d3a8SSheetal Tigadoli #endif
964*3942d3a8SSheetal Tigadoli 
965*3942d3a8SSheetal Tigadoli 	ccn_pre_init();
966*3942d3a8SSheetal Tigadoli 
967*3942d3a8SSheetal Tigadoli 	brcm_fsx_init();
968*3942d3a8SSheetal Tigadoli 
969*3942d3a8SSheetal Tigadoli 	brcm_stingray_smmu_init();
970*3942d3a8SSheetal Tigadoli 
971*3942d3a8SSheetal Tigadoli 	brcm_stingray_pka_meminit();
972*3942d3a8SSheetal Tigadoli 
973*3942d3a8SSheetal Tigadoli 	brcm_stingray_crmu_access_init();
974*3942d3a8SSheetal Tigadoli 
975*3942d3a8SSheetal Tigadoli 	brcm_stingray_scr_init();
976*3942d3a8SSheetal Tigadoli 
977*3942d3a8SSheetal Tigadoli 	brcm_stingray_hsls_tzpcprot_init();
978*3942d3a8SSheetal Tigadoli 
979*3942d3a8SSheetal Tigadoli #ifdef USE_I2S
980*3942d3a8SSheetal Tigadoli 	brcm_stingray_audio_init();
981*3942d3a8SSheetal Tigadoli #endif
982*3942d3a8SSheetal Tigadoli 
983*3942d3a8SSheetal Tigadoli 	ccn_post_init();
984*3942d3a8SSheetal Tigadoli 
985*3942d3a8SSheetal Tigadoli 	paxb_init();
986*3942d3a8SSheetal Tigadoli 
987*3942d3a8SSheetal Tigadoli 	paxc_init();
988*3942d3a8SSheetal Tigadoli 
989*3942d3a8SSheetal Tigadoli #ifndef BL31_BOOT_PRELOADED_SCP
990*3942d3a8SSheetal Tigadoli 	crmu_init();
991*3942d3a8SSheetal Tigadoli #endif
992*3942d3a8SSheetal Tigadoli 
993*3942d3a8SSheetal Tigadoli 	/* Note: this should be last thing because
994*3942d3a8SSheetal Tigadoli 	 * FS4 GPV registers only work after FS4 block
995*3942d3a8SSheetal Tigadoli 	 * (i.e. crypto,raid,cop) is out of reset.
996*3942d3a8SSheetal Tigadoli 	 */
997*3942d3a8SSheetal Tigadoli 	brcm_stingray_security_init();
998*3942d3a8SSheetal Tigadoli 
999*3942d3a8SSheetal Tigadoli 	brcm_gpio_pad_ns_init();
1000*3942d3a8SSheetal Tigadoli 
1001*3942d3a8SSheetal Tigadoli #ifndef USE_DDR
1002*3942d3a8SSheetal Tigadoli 	brcm_stingray_sram_ns_init();
1003*3942d3a8SSheetal Tigadoli #endif
1004*3942d3a8SSheetal Tigadoli 
1005*3942d3a8SSheetal Tigadoli #ifdef BL31_FORCE_CPU_FULL_FREQ
1006*3942d3a8SSheetal Tigadoli 	bcm_set_ihost_pll_freq(0x0, PLL_FREQ_FULL);
1007*3942d3a8SSheetal Tigadoli #endif
1008*3942d3a8SSheetal Tigadoli 
1009*3942d3a8SSheetal Tigadoli 	brcm_stingray_gain_qspi_control();
1010*3942d3a8SSheetal Tigadoli 
1011*3942d3a8SSheetal Tigadoli #ifdef USE_PAXC
1012*3942d3a8SSheetal Tigadoli 	/*
1013*3942d3a8SSheetal Tigadoli 	 * Check that the handshake has occurred and report ChiMP status.
1014*3942d3a8SSheetal Tigadoli 	 * This is required. Otherwise (especially on Palladium)
1015*3942d3a8SSheetal Tigadoli 	 * Linux might have booted to the pcie stage whereas
1016*3942d3a8SSheetal Tigadoli 	 * ChiMP has not yet booted. Note that nic_mode case has already
1017*3942d3a8SSheetal Tigadoli 	 * been considered above.
1018*3942d3a8SSheetal Tigadoli 	 */
1019*3942d3a8SSheetal Tigadoli 	if ((boot_source_get() != BOOT_SOURCE_QSPI) &&
1020*3942d3a8SSheetal Tigadoli 	    (!bcm_chimp_is_nic_mode()) &&
1021*3942d3a8SSheetal Tigadoli 	    (!bcm_chimp_wait_handshake())
1022*3942d3a8SSheetal Tigadoli 	   ) {
1023*3942d3a8SSheetal Tigadoli 		/* Does ChiMP report an error ? */
1024*3942d3a8SSheetal Tigadoli 		uint32_t err;
1025*3942d3a8SSheetal Tigadoli 
1026*3942d3a8SSheetal Tigadoli 		err = bcm_chimp_read_ctrl(CHIMP_REG_CTRL_BPE_STAT_REG);
1027*3942d3a8SSheetal Tigadoli 		if ((err & CHIMP_ERROR_MASK) == 0)
1028*3942d3a8SSheetal Tigadoli 		/* ChiMP has not booted yet, but no error reported */
1029*3942d3a8SSheetal Tigadoli 			WARN("ChiMP not booted yet, but no error reported.\n");
1030*3942d3a8SSheetal Tigadoli 	}
1031*3942d3a8SSheetal Tigadoli 
1032*3942d3a8SSheetal Tigadoli #if DEBUG
1033*3942d3a8SSheetal Tigadoli 	if (boot_source_get() != BOOT_SOURCE_QSPI)
1034*3942d3a8SSheetal Tigadoli 		INFO("Current ChiMP Status: 0x%x; bpe_mod reg: 0x%x\n"
1035*3942d3a8SSheetal Tigadoli 		     "fastboot register: 0x%x; handshake register 0x%x\n",
1036*3942d3a8SSheetal Tigadoli 		     bcm_chimp_read_ctrl(CHIMP_REG_CTRL_BPE_STAT_REG),
1037*3942d3a8SSheetal Tigadoli 		     bcm_chimp_read_ctrl(CHIMP_REG_CTRL_BPE_MODE_REG),
1038*3942d3a8SSheetal Tigadoli 		     bcm_chimp_read_ctrl(CHIMP_REG_CTRL_FSTBOOT_PTR_REG),
1039*3942d3a8SSheetal Tigadoli 		     bcm_chimp_read(CHIMP_REG_ECO_RESERVED));
1040*3942d3a8SSheetal Tigadoli #endif /* DEBUG */
1041*3942d3a8SSheetal Tigadoli #endif
1042*3942d3a8SSheetal Tigadoli 
1043*3942d3a8SSheetal Tigadoli #ifdef FS4_DISABLE_CLOCK
1044*3942d3a8SSheetal Tigadoli 	flush_dcache_range(
1045*3942d3a8SSheetal Tigadoli 		PLAT_BRCM_TRUSTED_SRAM_BASE,
1046*3942d3a8SSheetal Tigadoli 		PLAT_BRCM_TRUSTED_SRAM_SIZE);
1047*3942d3a8SSheetal Tigadoli 	fs4_disable_clocks(true, true, true);
1048*3942d3a8SSheetal Tigadoli #endif
1049*3942d3a8SSheetal Tigadoli 
1050*3942d3a8SSheetal Tigadoli 	/* pass information to BL33 through shared DDR region */
1051*3942d3a8SSheetal Tigadoli 	bcm_bl33_pass_info();
1052*3942d3a8SSheetal Tigadoli 
1053*3942d3a8SSheetal Tigadoli 	/*
1054*3942d3a8SSheetal Tigadoli 	 * We are not yet at the end of BL31, but we can stop log here so we do
1055*3942d3a8SSheetal Tigadoli 	 * not need to add 'bcm_elog_exit' to the standard BL31 code. The
1056*3942d3a8SSheetal Tigadoli 	 * benefit of capturing BL31 logs after this is very minimal in a
1057*3942d3a8SSheetal Tigadoli 	 * production system
1058*3942d3a8SSheetal Tigadoli 	 */
1059*3942d3a8SSheetal Tigadoli 	bcm_elog_exit();
1060*3942d3a8SSheetal Tigadoli 
1061*3942d3a8SSheetal Tigadoli #if !BRCM_DISABLE_TRUSTED_WDOG
1062*3942d3a8SSheetal Tigadoli 	/*
1063*3942d3a8SSheetal Tigadoli 	 * Secure watchdog was started earlier in BL2, now it's time to stop
1064*3942d3a8SSheetal Tigadoli 	 * it
1065*3942d3a8SSheetal Tigadoli 	 */
1066*3942d3a8SSheetal Tigadoli 	sp805_stop(ARM_SP805_TWDG_BASE);
1067*3942d3a8SSheetal Tigadoli #endif
1068*3942d3a8SSheetal Tigadoli }
1069