xref: /rk3399_ARM-atf/plat/brcm/board/stingray/src/bl31_setup.c (revision 29e11bb29922da1fede56700286a967701df8289)
13942d3a8SSheetal Tigadoli /*
2*682fe370SBharat Gooty  * Copyright (c) 2015 - 2021, Broadcom
33942d3a8SSheetal Tigadoli  *
43942d3a8SSheetal Tigadoli  * SPDX-License-Identifier: BSD-3-Clause
53942d3a8SSheetal Tigadoli  */
63942d3a8SSheetal Tigadoli 
73942d3a8SSheetal Tigadoli #include <errno.h>
83942d3a8SSheetal Tigadoli 
93942d3a8SSheetal Tigadoli #include <common/bl_common.h>
103942d3a8SSheetal Tigadoli #include <common/debug.h>
113942d3a8SSheetal Tigadoli #include <cortex_a72.h>
123942d3a8SSheetal Tigadoli #include <drivers/arm/sp805.h>
133942d3a8SSheetal Tigadoli #include <drivers/console.h>
143942d3a8SSheetal Tigadoli #include <drivers/delay_timer.h>
153942d3a8SSheetal Tigadoli #include <drivers/ti/uart/uart_16550.h>
163942d3a8SSheetal Tigadoli #include <lib/mmio.h>
173942d3a8SSheetal Tigadoli #include <lib/utils_def.h>
183942d3a8SSheetal Tigadoli #include <plat/common/common_def.h>
193942d3a8SSheetal Tigadoli #include <plat/common/platform.h>
203942d3a8SSheetal Tigadoli 
213942d3a8SSheetal Tigadoli #include <bl33_info.h>
223942d3a8SSheetal Tigadoli #include <chimp.h>
233942d3a8SSheetal Tigadoli #include <cmn_plat_util.h>
243942d3a8SSheetal Tigadoli #include <dmu.h>
253942d3a8SSheetal Tigadoli #include <fsx.h>
263942d3a8SSheetal Tigadoli #include <iommu.h>
273942d3a8SSheetal Tigadoli #include <ncsi.h>
283942d3a8SSheetal Tigadoli #include <paxb.h>
293942d3a8SSheetal Tigadoli #include <paxc.h>
303942d3a8SSheetal Tigadoli #include <platform_def.h>
31*682fe370SBharat Gooty #ifdef USE_USB
32*682fe370SBharat Gooty #include <platform_usb.h>
33*682fe370SBharat Gooty #endif
343942d3a8SSheetal Tigadoli #include <sdio.h>
353942d3a8SSheetal Tigadoli #include <sr_utils.h>
363942d3a8SSheetal Tigadoli #include <timer_sync.h>
373942d3a8SSheetal Tigadoli 
383942d3a8SSheetal Tigadoli /*******************************************************************************
393942d3a8SSheetal Tigadoli  * Perform any BL3-1 platform setup common to ARM standard platforms
403942d3a8SSheetal Tigadoli  ******************************************************************************/
413942d3a8SSheetal Tigadoli 
brcm_stingray_gain_qspi_control(void)423942d3a8SSheetal Tigadoli static void brcm_stingray_gain_qspi_control(void)
433942d3a8SSheetal Tigadoli {
443942d3a8SSheetal Tigadoli 	if (boot_source_get() != BOOT_SOURCE_QSPI) {
453942d3a8SSheetal Tigadoli 		if (bcm_chimp_is_nic_mode() &&
463942d3a8SSheetal Tigadoli 		(!bcm_chimp_handshake_done())) {
473942d3a8SSheetal Tigadoli 			/*
483942d3a8SSheetal Tigadoli 			 * Last chance to wait for ChiMP firmware to report
493942d3a8SSheetal Tigadoli 			 * "I am done" before grabbing the QSPI
503942d3a8SSheetal Tigadoli 			 */
513942d3a8SSheetal Tigadoli 			WARN("ChiMP still not booted\n");
523942d3a8SSheetal Tigadoli #ifndef CHIMP_ALWAYS_NEEDS_QSPI
533942d3a8SSheetal Tigadoli 			WARN("ChiMP is given the last chance to boot (%d s)\n",
543942d3a8SSheetal Tigadoli 				CHIMP_HANDSHAKE_TIMEOUT_MS / 1000);
553942d3a8SSheetal Tigadoli 
563942d3a8SSheetal Tigadoli 			if (!bcm_chimp_wait_handshake()) {
573942d3a8SSheetal Tigadoli 				ERROR("ChiMP failed to boot\n");
583942d3a8SSheetal Tigadoli 			} else {
593942d3a8SSheetal Tigadoli 				INFO("ChiMP booted successfully\n");
603942d3a8SSheetal Tigadoli 			}
613942d3a8SSheetal Tigadoli #endif
623942d3a8SSheetal Tigadoli 		}
633942d3a8SSheetal Tigadoli 
643942d3a8SSheetal Tigadoli #ifndef CHIMP_ALWAYS_NEEDS_QSPI
653942d3a8SSheetal Tigadoli 		INFO("AP grabs QSPI\n");
663942d3a8SSheetal Tigadoli 		/*
673942d3a8SSheetal Tigadoli 		 * For QSPI boot sbl/bl1 has already taken care.
683942d3a8SSheetal Tigadoli 		 * For other boot sources QSPI needs to be muxed to
693942d3a8SSheetal Tigadoli 		 * AP for exclusive use
703942d3a8SSheetal Tigadoli 		 */
713942d3a8SSheetal Tigadoli 		brcm_stingray_set_qspi_mux(1);
723942d3a8SSheetal Tigadoli 		INFO("AP (bl31) gained control over QSPI\n");
733942d3a8SSheetal Tigadoli #endif
743942d3a8SSheetal Tigadoli 	}
753942d3a8SSheetal Tigadoli }
763942d3a8SSheetal Tigadoli 
brcm_stingray_dma_pl330_init(void)773942d3a8SSheetal Tigadoli static void brcm_stingray_dma_pl330_init(void)
783942d3a8SSheetal Tigadoli {
793942d3a8SSheetal Tigadoli 	unsigned int val;
803942d3a8SSheetal Tigadoli 
813942d3a8SSheetal Tigadoli 	VERBOSE("dma pl330 init start\n");
823942d3a8SSheetal Tigadoli 
833942d3a8SSheetal Tigadoli 	/* Set DMAC boot_manager_ns = 0x1 */
843942d3a8SSheetal Tigadoli 	VERBOSE(" - configure boot security state\n");
853942d3a8SSheetal Tigadoli 	mmio_setbits_32(DMAC_M0_IDM_IO_CONTROL_DIRECT, BOOT_MANAGER_NS);
863942d3a8SSheetal Tigadoli 	/* Set boot_peripheral_ns[n:0] = 0xffffffff */
873942d3a8SSheetal Tigadoli 	mmio_write_32(ICFG_DMAC_CONFIG_2, BOOT_PERIPHERAL_NS);
883942d3a8SSheetal Tigadoli 	/* Set boot_irq_ns[n:0] = 0x0000ffff */
893942d3a8SSheetal Tigadoli 	mmio_write_32(ICFG_DMAC_CONFIG_3, BOOT_IRQ_NS);
903942d3a8SSheetal Tigadoli 
913942d3a8SSheetal Tigadoli 	/* Set DMAC stream_id */
923942d3a8SSheetal Tigadoli 	VERBOSE(" - configure stream_id = 0x6000\n");
933942d3a8SSheetal Tigadoli 	val = (DMAC_STREAM_ID << DMAC_SID_SHIFT);
943942d3a8SSheetal Tigadoli 	mmio_write_32(ICFG_DMAC_SID_ARADDR_CONTROL, val);
953942d3a8SSheetal Tigadoli 	mmio_write_32(ICFG_DMAC_SID_AWADDR_CONTROL, val);
963942d3a8SSheetal Tigadoli 
973942d3a8SSheetal Tigadoli 	/* Reset DMAC */
983942d3a8SSheetal Tigadoli 	VERBOSE(" - reset dma pl330\n");
993942d3a8SSheetal Tigadoli 
1003942d3a8SSheetal Tigadoli 	mmio_setbits_32(DMAC_M0_IDM_RESET_CONTROL, 0x1);
1013942d3a8SSheetal Tigadoli 	udelay(500);
1023942d3a8SSheetal Tigadoli 
1033942d3a8SSheetal Tigadoli 	mmio_clrbits_32(DMAC_M0_IDM_RESET_CONTROL, 0x1);
1043942d3a8SSheetal Tigadoli 	udelay(500);
1053942d3a8SSheetal Tigadoli 
1063942d3a8SSheetal Tigadoli 	INFO("dma pl330 init done\n");
1073942d3a8SSheetal Tigadoli }
1083942d3a8SSheetal Tigadoli 
brcm_stingray_spi_pl022_init(uintptr_t idm_reset_control)1093942d3a8SSheetal Tigadoli static void brcm_stingray_spi_pl022_init(uintptr_t idm_reset_control)
1103942d3a8SSheetal Tigadoli {
1113942d3a8SSheetal Tigadoli 	VERBOSE("spi pl022 init start\n");
1123942d3a8SSheetal Tigadoli 
1133942d3a8SSheetal Tigadoli 	/* Reset APB SPI bridge */
1143942d3a8SSheetal Tigadoli 	VERBOSE(" - reset apb spi bridge\n");
1153942d3a8SSheetal Tigadoli 	mmio_setbits_32(idm_reset_control, 0x1);
1163942d3a8SSheetal Tigadoli 	udelay(500);
1173942d3a8SSheetal Tigadoli 
1183942d3a8SSheetal Tigadoli 	mmio_clrbits_32(idm_reset_control, 0x1);
1193942d3a8SSheetal Tigadoli 	udelay(500);
1203942d3a8SSheetal Tigadoli 
1213942d3a8SSheetal Tigadoli 	INFO("spi pl022 init done\n");
1223942d3a8SSheetal Tigadoli }
1233942d3a8SSheetal Tigadoli 
1243942d3a8SSheetal Tigadoli #define CDRU_SATA_RESET_N \
1253942d3a8SSheetal Tigadoli 	BIT(CDRU_MISC_RESET_CONTROL__CDRU_SATA_RESET_N_R)
1263942d3a8SSheetal Tigadoli #define CDRU_MISC_CLK_SATA \
1273942d3a8SSheetal Tigadoli 	BIT(CDRU_MISC_CLK_ENABLE_CONTROL__CDRU_SATA_CLK_EN_R)
1283942d3a8SSheetal Tigadoli #define CCN_CONFIG_CLK_ENABLE		(1 << 2)
1293942d3a8SSheetal Tigadoli #define MMU_CONFIG_CLK_ENABLE		(0x3F << 16)
1303942d3a8SSheetal Tigadoli 
1313942d3a8SSheetal Tigadoli #define SATA_SATA_TOP_CTRL_BUS_CTRL	(SATA_BASE + 0x2044)
1323942d3a8SSheetal Tigadoli #define DMA_BIT_CTRL_MASK		0x003
1333942d3a8SSheetal Tigadoli #define DMA_DESCR_ENDIAN_CTRL		(DMA_BIT_CTRL_MASK << 0x002)
1343942d3a8SSheetal Tigadoli #define DMA_DATA_ENDIAN_CTRL		(DMA_BIT_CTRL_MASK << 0x004)
1353942d3a8SSheetal Tigadoli 
1363942d3a8SSheetal Tigadoli #define SATA_PORT_SATA3_PCB_REG8	(SATA_BASE + 0x2320)
1373942d3a8SSheetal Tigadoli #define SATA_PORT_SATA3_PCB_REG11	(SATA_BASE + 0x232c)
1383942d3a8SSheetal Tigadoli #define SATA_PORT_SATA3_PCB_BLOCK_ADDR	(SATA_BASE + 0x233c)
1393942d3a8SSheetal Tigadoli 
1403942d3a8SSheetal Tigadoli #define SATA3_AFE_TXRX_ACTRL		0x1d0
1413942d3a8SSheetal Tigadoli /* TXDriver swing setting is 800mV */
1423942d3a8SSheetal Tigadoli #define DFS_SWINGNOPE_VALUE		(0x0 << 6)
1433942d3a8SSheetal Tigadoli #define DFS_SWINGNOPE_MASK		(0x3 << 6)
1443942d3a8SSheetal Tigadoli 
1453942d3a8SSheetal Tigadoli #define DFS_SWINGPE_VALUE		(0x1 << 4)
1463942d3a8SSheetal Tigadoli #define DFS_SWINGPE_MASK		(0x3 << 4)
1473942d3a8SSheetal Tigadoli 
1483942d3a8SSheetal Tigadoli #define DFS_INJSTRENGTH_VALUE		(0x0 << 4)
1493942d3a8SSheetal Tigadoli #define DFS_INJSTRENGTH_MASK		(0x3 << 4)
1503942d3a8SSheetal Tigadoli 
1513942d3a8SSheetal Tigadoli #define DFS_INJEN			(0x1 << 3)
1523942d3a8SSheetal Tigadoli 
1533942d3a8SSheetal Tigadoli #define SATA_CORE_MEM_CTRL		(SATA_BASE + 0x3a08)
1543942d3a8SSheetal Tigadoli #define SATA_CORE_MEM_CTRL_ISO		BIT(0)
1553942d3a8SSheetal Tigadoli #define SATA_CORE_MEM_CTRL_ARRPOWEROKIN	BIT(1)
1563942d3a8SSheetal Tigadoli #define SATA_CORE_MEM_CTRL_ARRPOWERONIN	BIT(2)
1573942d3a8SSheetal Tigadoli #define SATA_CORE_MEM_CTRL_POWEROKIN	BIT(3)
1583942d3a8SSheetal Tigadoli #define SATA_CORE_MEM_CTRL_POWERONIN	BIT(4)
1593942d3a8SSheetal Tigadoli 
1603942d3a8SSheetal Tigadoli #define SATA0_IDM_RESET_CONTROL			(SATA_BASE + 0x500800)
1613942d3a8SSheetal Tigadoli #define SATA_APBT0_IDM_IO_CONTROL_DIRECT	(SATA_BASE + 0x51a408)
1623942d3a8SSheetal Tigadoli #define IO_CONTROL_DIRECT_CLK_ENABLE		BIT(0)
1633942d3a8SSheetal Tigadoli #define SATA_APBT0_IDM_RESET_CONTROL		(SATA_BASE + 0x51a800)
1643942d3a8SSheetal Tigadoli #define IDM_RESET_CONTROL_RESET			BIT(0)
1653942d3a8SSheetal Tigadoli 
1663942d3a8SSheetal Tigadoli #define NIC400_SATA_NOC_SECURITY1	0x6830000c
1673942d3a8SSheetal Tigadoli #define SATA_NOC_SECURITY1_FIELD	0xf
1683942d3a8SSheetal Tigadoli #define NIC400_SATA_NOC_SECURITY2	0x68300010
1693942d3a8SSheetal Tigadoli #define SATA_NOC_SECURITY2_FIELD	0xf
1703942d3a8SSheetal Tigadoli #define NIC400_SATA_NOC_SECURITY3	0x68300014
1713942d3a8SSheetal Tigadoli #define SATA_NOC_SECURITY3_FIELD	0x1
1723942d3a8SSheetal Tigadoli #define NIC400_SATA_NOC_SECURITY4	0x68300018
1733942d3a8SSheetal Tigadoli #define SATA_NOC_SECURITY4_FIELD	0x1
1743942d3a8SSheetal Tigadoli #define NIC400_SATA_NOC_SECURITY5	0x6830001c
1753942d3a8SSheetal Tigadoli #define SATA_NOC_SECURITY5_FIELD	0xf
1763942d3a8SSheetal Tigadoli #define NIC400_SATA_NOC_SECURITY6	0x68300020
1773942d3a8SSheetal Tigadoli #define SATA_NOC_SECURITY6_FIELD	0x1
1783942d3a8SSheetal Tigadoli #define NIC400_SATA_NOC_SECURITY7	0x68300024
1793942d3a8SSheetal Tigadoli #define SATA_NOC_SECURITY7_FIELD	0xf
1803942d3a8SSheetal Tigadoli #define NIC400_SATA_NOC_SECURITY8	0x68300028
1813942d3a8SSheetal Tigadoli #define SATA_NOC_SECURITY8_FIELD	0xf
1823942d3a8SSheetal Tigadoli #define NIC400_SATA_NOC_SECURITY9	0x6830002c
1833942d3a8SSheetal Tigadoli #define SATA_NOC_SECURITY9_FIELD	0x1
1843942d3a8SSheetal Tigadoli 
1853942d3a8SSheetal Tigadoli #define SATA_APBT_IDM_PORT_REG(port, reg) \
1863942d3a8SSheetal Tigadoli 	(((port/4) << 12) + reg)
1873942d3a8SSheetal Tigadoli 
1883942d3a8SSheetal Tigadoli #define SATA_IDM_PORT_REG(port, reg)	((port << 12) + reg)
1893942d3a8SSheetal Tigadoli 
1903942d3a8SSheetal Tigadoli #define SATA_PORT_REG(port, reg) \
1913942d3a8SSheetal Tigadoli 	(((port%4) << 16) + ((port/4) << 20) + reg)
1923942d3a8SSheetal Tigadoli 
1933942d3a8SSheetal Tigadoli #define MAX_SATA_PORTS	8
1943942d3a8SSheetal Tigadoli #define USE_SATA_PORTS	8
1953942d3a8SSheetal Tigadoli 
1963942d3a8SSheetal Tigadoli #ifdef USE_SATA
1973942d3a8SSheetal Tigadoli static const uint8_t sr_b0_sata_port[MAX_SATA_PORTS] = {
1983942d3a8SSheetal Tigadoli 	0, 1, 2, 3, 4, 5, 6, 7
1993942d3a8SSheetal Tigadoli };
2003942d3a8SSheetal Tigadoli 
brcm_stingray_get_sata_port(unsigned int port)2013942d3a8SSheetal Tigadoli static uint32_t brcm_stingray_get_sata_port(unsigned int port)
2023942d3a8SSheetal Tigadoli {
2033942d3a8SSheetal Tigadoli 	return sr_b0_sata_port[port];
2043942d3a8SSheetal Tigadoli }
2053942d3a8SSheetal Tigadoli 
brcm_stingray_sata_init(void)2063942d3a8SSheetal Tigadoli static void brcm_stingray_sata_init(void)
2073942d3a8SSheetal Tigadoli {
2083942d3a8SSheetal Tigadoli 	unsigned int port = 0;
2093942d3a8SSheetal Tigadoli 	uint32_t sata_port;
2103942d3a8SSheetal Tigadoli 
2113942d3a8SSheetal Tigadoli 	mmio_setbits_32(CDRU_MISC_CLK_ENABLE_CONTROL,
2123942d3a8SSheetal Tigadoli 			CDRU_MISC_CLK_SATA);
2133942d3a8SSheetal Tigadoli 
2143942d3a8SSheetal Tigadoli 	mmio_clrbits_32(CDRU_MISC_RESET_CONTROL, CDRU_SATA_RESET_N);
2153942d3a8SSheetal Tigadoli 	mmio_setbits_32(CDRU_MISC_RESET_CONTROL, CDRU_SATA_RESET_N);
2163942d3a8SSheetal Tigadoli 
2173942d3a8SSheetal Tigadoli 	for (port = 0; port < USE_SATA_PORTS; port++) {
2183942d3a8SSheetal Tigadoli 
2193942d3a8SSheetal Tigadoli 		sata_port = brcm_stingray_get_sata_port(port);
2203942d3a8SSheetal Tigadoli 		mmio_write_32(SATA_APBT_IDM_PORT_REG(sata_port,
2213942d3a8SSheetal Tigadoli 					SATA_APBT0_IDM_RESET_CONTROL),
2223942d3a8SSheetal Tigadoli 			      0x0);
2233942d3a8SSheetal Tigadoli 		mmio_setbits_32(SATA_APBT_IDM_PORT_REG(sata_port,
2243942d3a8SSheetal Tigadoli 					SATA_APBT0_IDM_IO_CONTROL_DIRECT),
2253942d3a8SSheetal Tigadoli 				IO_CONTROL_DIRECT_CLK_ENABLE);
2263942d3a8SSheetal Tigadoli 		mmio_write_32(SATA_IDM_PORT_REG(sata_port,
2273942d3a8SSheetal Tigadoli 						SATA0_IDM_RESET_CONTROL),
2283942d3a8SSheetal Tigadoli 			      0x0);
2293942d3a8SSheetal Tigadoli 
2303942d3a8SSheetal Tigadoli 		mmio_setbits_32(SATA_PORT_REG(sata_port, SATA_CORE_MEM_CTRL),
2313942d3a8SSheetal Tigadoli 				SATA_CORE_MEM_CTRL_ARRPOWERONIN);
2323942d3a8SSheetal Tigadoli 		mmio_setbits_32(SATA_PORT_REG(sata_port, SATA_CORE_MEM_CTRL),
2333942d3a8SSheetal Tigadoli 				SATA_CORE_MEM_CTRL_ARRPOWEROKIN);
2343942d3a8SSheetal Tigadoli 		mmio_setbits_32(SATA_PORT_REG(sata_port, SATA_CORE_MEM_CTRL),
2353942d3a8SSheetal Tigadoli 				SATA_CORE_MEM_CTRL_POWERONIN);
2363942d3a8SSheetal Tigadoli 		mmio_setbits_32(SATA_PORT_REG(sata_port, SATA_CORE_MEM_CTRL),
2373942d3a8SSheetal Tigadoli 				SATA_CORE_MEM_CTRL_POWEROKIN);
2383942d3a8SSheetal Tigadoli 		mmio_clrbits_32(SATA_PORT_REG(sata_port, SATA_CORE_MEM_CTRL),
2393942d3a8SSheetal Tigadoli 				SATA_CORE_MEM_CTRL_ISO);
2403942d3a8SSheetal Tigadoli 
2413942d3a8SSheetal Tigadoli 		mmio_clrbits_32(SATA_PORT_REG(sata_port,
2423942d3a8SSheetal Tigadoli 					      SATA_SATA_TOP_CTRL_BUS_CTRL),
2433942d3a8SSheetal Tigadoli 				(DMA_DESCR_ENDIAN_CTRL | DMA_DATA_ENDIAN_CTRL));
2443942d3a8SSheetal Tigadoli 	}
2453942d3a8SSheetal Tigadoli 
2463942d3a8SSheetal Tigadoli 	mmio_setbits_32(NIC400_SATA_NOC_SECURITY1, SATA_NOC_SECURITY1_FIELD);
2473942d3a8SSheetal Tigadoli 	mmio_setbits_32(NIC400_SATA_NOC_SECURITY2, SATA_NOC_SECURITY2_FIELD);
2483942d3a8SSheetal Tigadoli 	mmio_setbits_32(NIC400_SATA_NOC_SECURITY3, SATA_NOC_SECURITY3_FIELD);
2493942d3a8SSheetal Tigadoli 	mmio_setbits_32(NIC400_SATA_NOC_SECURITY4, SATA_NOC_SECURITY4_FIELD);
2503942d3a8SSheetal Tigadoli 	mmio_setbits_32(NIC400_SATA_NOC_SECURITY5, SATA_NOC_SECURITY5_FIELD);
2513942d3a8SSheetal Tigadoli 	mmio_setbits_32(NIC400_SATA_NOC_SECURITY6, SATA_NOC_SECURITY6_FIELD);
2523942d3a8SSheetal Tigadoli 	mmio_setbits_32(NIC400_SATA_NOC_SECURITY7, SATA_NOC_SECURITY7_FIELD);
2533942d3a8SSheetal Tigadoli 	mmio_setbits_32(NIC400_SATA_NOC_SECURITY8, SATA_NOC_SECURITY8_FIELD);
2543942d3a8SSheetal Tigadoli 	mmio_setbits_32(NIC400_SATA_NOC_SECURITY9, SATA_NOC_SECURITY9_FIELD);
2553942d3a8SSheetal Tigadoli 
2563942d3a8SSheetal Tigadoli 	INFO("sata init done\n");
2573942d3a8SSheetal Tigadoli }
2583942d3a8SSheetal Tigadoli #else
poweroff_sata_pll(void)2593942d3a8SSheetal Tigadoli static void poweroff_sata_pll(void)
2603942d3a8SSheetal Tigadoli {
2613942d3a8SSheetal Tigadoli 	/*
2623942d3a8SSheetal Tigadoli 	 * SATA subsystem is clocked by LCPLL0 which is enabled by
2633942d3a8SSheetal Tigadoli 	 * default by bootrom. Poweroff the PLL if SATA is not used
2643942d3a8SSheetal Tigadoli 	 */
2653942d3a8SSheetal Tigadoli 
2663942d3a8SSheetal Tigadoli 	/* enable isolation */
2673942d3a8SSheetal Tigadoli 	mmio_setbits_32(CRMU_AON_CTRL1,
2683942d3a8SSheetal Tigadoli 			BIT(CRMU_AON_CTRL1__LCPLL0_ISO_IN));
2693942d3a8SSheetal Tigadoli 
2703942d3a8SSheetal Tigadoli 	/* Power off the SATA PLL/LDO */
2713942d3a8SSheetal Tigadoli 	mmio_clrbits_32(CRMU_AON_CTRL1,
2723942d3a8SSheetal Tigadoli 			(BIT(CRMU_AON_CTRL1__LCPLL0_PWRON_LDO) |
2733942d3a8SSheetal Tigadoli 			 BIT(CRMU_AON_CTRL1__LCPLL0_PWR_ON)));
2743942d3a8SSheetal Tigadoli }
2753942d3a8SSheetal Tigadoli #endif
2763942d3a8SSheetal Tigadoli 
2773942d3a8SSheetal Tigadoli #ifdef USE_AMAC
2783942d3a8SSheetal Tigadoli #ifdef EMULATION_SETUP
2793942d3a8SSheetal Tigadoli #define ICFG_AMAC_STRAP_CONFIG		(HSLS_ICFG_REGS_BASE + 0xa5c)
2803942d3a8SSheetal Tigadoli #define ICFG_AMAC_STRAP_DLL_BYPASS	(1 << 2)
2813942d3a8SSheetal Tigadoli #endif
2823942d3a8SSheetal Tigadoli #define ICFG_AMAC_MAC_CTRL_REG		(HSLS_ICFG_REGS_BASE + 0xa6c)
2833942d3a8SSheetal Tigadoli #define ICFG_AMAC_MAC_FULL_DUPLEX	(1 << 1)
2843942d3a8SSheetal Tigadoli #define ICFG_AMAC_RGMII_PHY_CONFIG	(HSLS_ICFG_REGS_BASE + 0xa60)
2853942d3a8SSheetal Tigadoli #define ICFG_AMAC_SID_CONTROL		(HSLS_ICFG_REGS_BASE + 0xb10)
2863942d3a8SSheetal Tigadoli #define ICFG_AMAC_SID_SHIFT		5
2873942d3a8SSheetal Tigadoli #define ICFG_AMAC_SID_AWADDR_OFFSET	0x0
2883942d3a8SSheetal Tigadoli #define ICFG_AMAC_SID_ARADDR_OFFSET	0x4
2893942d3a8SSheetal Tigadoli #define AMAC_RPHY_1000_DATARATE		(1 << 20)
2903942d3a8SSheetal Tigadoli #define AMAC_RPHY_FULL_DUPLEX		(1 << 5)
2913942d3a8SSheetal Tigadoli #define AMAC_RPHY_SPEED_OFFSET		2
2923942d3a8SSheetal Tigadoli #define AMAC_RPHY_SPEED_MASK		(7 << AMAC_RPHY_SPEED_OFFSET)
2933942d3a8SSheetal Tigadoli #define AMAC_RPHY_1G_SPEED		(2 << AMAC_RPHY_SPEED_OFFSET)
2943942d3a8SSheetal Tigadoli #define ICFG_AMAC_MEM_PWR_CTRL		(HSLS_ICFG_REGS_BASE + 0xa68)
2953942d3a8SSheetal Tigadoli #define AMAC_ISO			BIT(9)
2963942d3a8SSheetal Tigadoli #define AMAC_STDBY			BIT(8)
2973942d3a8SSheetal Tigadoli #define AMAC_ARRPOWEROKIN		BIT(7)
2983942d3a8SSheetal Tigadoli #define AMAC_ARRPOWERONIN		BIT(6)
2993942d3a8SSheetal Tigadoli #define AMAC_POWEROKIN			BIT(5)
3003942d3a8SSheetal Tigadoli #define AMAC_POWERONIN			BIT(4)
3013942d3a8SSheetal Tigadoli 
3023942d3a8SSheetal Tigadoli #define AMAC_IDM0_IO_CONTROL_DIRECT	(HSLS_IDM_REGS_BASE + 0x4408)
3033942d3a8SSheetal Tigadoli #define AMAC_IDM0_ARCACHE_OFFSET	16
3043942d3a8SSheetal Tigadoli #define AMAC_IDM0_AWCACHE_OFFSET	7
3053942d3a8SSheetal Tigadoli #define AMAC_IDM0_ARCACHE_MASK		(0xF << AMAC_IDM0_ARCACHE_OFFSET)
3063942d3a8SSheetal Tigadoli #define AMAC_IDM0_AWCACHE_MASK		(0xF << AMAC_IDM0_AWCACHE_OFFSET)
3073942d3a8SSheetal Tigadoli /* ARCACHE - AWCACHE is 0xB7 for write-back no allocate */
3083942d3a8SSheetal Tigadoli #define AMAC_IDM0_ARCACHE_VAL		(0xb << AMAC_IDM0_ARCACHE_OFFSET)
3093942d3a8SSheetal Tigadoli #define AMAC_IDM0_AWCACHE_VAL		(0x7 << AMAC_IDM0_AWCACHE_OFFSET)
3103942d3a8SSheetal Tigadoli 
brcm_stingray_amac_init(void)3113942d3a8SSheetal Tigadoli static void brcm_stingray_amac_init(void)
3123942d3a8SSheetal Tigadoli {
3133942d3a8SSheetal Tigadoli 	unsigned int val;
3143942d3a8SSheetal Tigadoli 	uintptr_t icfg_amac_sid = ICFG_AMAC_SID_CONTROL;
3153942d3a8SSheetal Tigadoli 
3163942d3a8SSheetal Tigadoli 	VERBOSE("amac init start\n");
3173942d3a8SSheetal Tigadoli 
3183942d3a8SSheetal Tigadoli 	val = SR_SID_VAL(0x3, 0x0, 0x4) << ICFG_AMAC_SID_SHIFT;
3193942d3a8SSheetal Tigadoli 	mmio_write_32(icfg_amac_sid + ICFG_AMAC_SID_AWADDR_OFFSET, val);
3203942d3a8SSheetal Tigadoli 	mmio_write_32(icfg_amac_sid + ICFG_AMAC_SID_ARADDR_OFFSET, val);
3213942d3a8SSheetal Tigadoli 
3223942d3a8SSheetal Tigadoli 	mmio_setbits_32(ICFG_AMAC_MEM_PWR_CTRL, AMAC_ARRPOWEROKIN);
3233942d3a8SSheetal Tigadoli 	mmio_setbits_32(ICFG_AMAC_MEM_PWR_CTRL, AMAC_ARRPOWERONIN);
3243942d3a8SSheetal Tigadoli 	mmio_setbits_32(ICFG_AMAC_MEM_PWR_CTRL, AMAC_POWEROKIN);
3253942d3a8SSheetal Tigadoli 	mmio_setbits_32(ICFG_AMAC_MEM_PWR_CTRL, AMAC_POWERONIN);
3263942d3a8SSheetal Tigadoli 	mmio_clrbits_32(ICFG_AMAC_MEM_PWR_CTRL, AMAC_ISO);
3273942d3a8SSheetal Tigadoli 	mmio_write_32(APBR_IDM_RESET_CONTROL, 0x0);
3283942d3a8SSheetal Tigadoli 	mmio_clrsetbits_32(ICFG_AMAC_RGMII_PHY_CONFIG, AMAC_RPHY_SPEED_MASK,
3293942d3a8SSheetal Tigadoli 				AMAC_RPHY_1G_SPEED); /*1 Gbps line rate*/
3303942d3a8SSheetal Tigadoli 	/* 1000 datarate set */
3313942d3a8SSheetal Tigadoli 	mmio_setbits_32(ICFG_AMAC_RGMII_PHY_CONFIG, AMAC_RPHY_1000_DATARATE);
3323942d3a8SSheetal Tigadoli 	/* full duplex */
3333942d3a8SSheetal Tigadoli 	mmio_setbits_32(ICFG_AMAC_RGMII_PHY_CONFIG, AMAC_RPHY_FULL_DUPLEX);
3343942d3a8SSheetal Tigadoli #ifdef EMULATION_SETUP
3353942d3a8SSheetal Tigadoli 	/* DLL bypass */
3363942d3a8SSheetal Tigadoli 	mmio_setbits_32(ICFG_AMAC_STRAP_CONFIG, ICFG_AMAC_STRAP_DLL_BYPASS);
3373942d3a8SSheetal Tigadoli #endif
3383942d3a8SSheetal Tigadoli 	/* serdes full duplex */
3393942d3a8SSheetal Tigadoli 	mmio_setbits_32(ICFG_AMAC_MAC_CTRL_REG, ICFG_AMAC_MAC_FULL_DUPLEX);
3403942d3a8SSheetal Tigadoli 	mmio_clrsetbits_32(AMAC_IDM0_IO_CONTROL_DIRECT, AMAC_IDM0_ARCACHE_MASK,
3413942d3a8SSheetal Tigadoli 				AMAC_IDM0_ARCACHE_VAL);
3423942d3a8SSheetal Tigadoli 	mmio_clrsetbits_32(AMAC_IDM0_IO_CONTROL_DIRECT, AMAC_IDM0_AWCACHE_MASK,
3433942d3a8SSheetal Tigadoli 				AMAC_IDM0_AWCACHE_VAL);
3443942d3a8SSheetal Tigadoli 	INFO("amac init done\n");
3453942d3a8SSheetal Tigadoli }
3463942d3a8SSheetal Tigadoli #endif    /* USE_AMAC */
3473942d3a8SSheetal Tigadoli 
brcm_stingray_pka_meminit(void)3483942d3a8SSheetal Tigadoli static void brcm_stingray_pka_meminit(void)
3493942d3a8SSheetal Tigadoli {
3503942d3a8SSheetal Tigadoli 	uintptr_t icfg_mem_ctrl = ICFG_PKA_MEM_PWR_CTRL;
3513942d3a8SSheetal Tigadoli 
3523942d3a8SSheetal Tigadoli 	VERBOSE("pka meminit start\n");
3533942d3a8SSheetal Tigadoli 
3543942d3a8SSheetal Tigadoli 	VERBOSE(" - arrpoweron\n");
3553942d3a8SSheetal Tigadoli 	mmio_setbits_32(icfg_mem_ctrl,
3563942d3a8SSheetal Tigadoli 			ICFG_PKA_MEM_PWR_CTRL__ARRPOWERONIN);
3573942d3a8SSheetal Tigadoli 	while (!(mmio_read_32(icfg_mem_ctrl) &
3583942d3a8SSheetal Tigadoli 		 ICFG_PKA_MEM_PWR_CTRL__ARRPOWERONOUT))
3593942d3a8SSheetal Tigadoli 		;
3603942d3a8SSheetal Tigadoli 
3613942d3a8SSheetal Tigadoli 	VERBOSE(" - arrpowerok\n");
3623942d3a8SSheetal Tigadoli 	mmio_setbits_32(icfg_mem_ctrl,
3633942d3a8SSheetal Tigadoli 			ICFG_PKA_MEM_PWR_CTRL__ARRPOWEROKIN);
3643942d3a8SSheetal Tigadoli 	while (!(mmio_read_32(icfg_mem_ctrl) &
3653942d3a8SSheetal Tigadoli 		 ICFG_PKA_MEM_PWR_CTRL__ARRPOWEROKOUT))
3663942d3a8SSheetal Tigadoli 		;
3673942d3a8SSheetal Tigadoli 
3683942d3a8SSheetal Tigadoli 	VERBOSE(" - poweron\n");
3693942d3a8SSheetal Tigadoli 	mmio_setbits_32(icfg_mem_ctrl,
3703942d3a8SSheetal Tigadoli 			ICFG_PKA_MEM_PWR_CTRL__POWERONIN);
3713942d3a8SSheetal Tigadoli 	while (!(mmio_read_32(icfg_mem_ctrl) &
3723942d3a8SSheetal Tigadoli 		 ICFG_PKA_MEM_PWR_CTRL__POWERONOUT))
3733942d3a8SSheetal Tigadoli 		;
3743942d3a8SSheetal Tigadoli 
3753942d3a8SSheetal Tigadoli 	VERBOSE(" - powerok\n");
3763942d3a8SSheetal Tigadoli 	mmio_setbits_32(icfg_mem_ctrl,
3773942d3a8SSheetal Tigadoli 			ICFG_PKA_MEM_PWR_CTRL__POWEROKIN);
3783942d3a8SSheetal Tigadoli 	while (!(mmio_read_32(icfg_mem_ctrl) &
3793942d3a8SSheetal Tigadoli 		 ICFG_PKA_MEM_PWR_CTRL__POWEROKOUT))
3803942d3a8SSheetal Tigadoli 		;
3813942d3a8SSheetal Tigadoli 
3823942d3a8SSheetal Tigadoli 	/* Wait sometime */
3833942d3a8SSheetal Tigadoli 	mdelay(1);
3843942d3a8SSheetal Tigadoli 
3853942d3a8SSheetal Tigadoli 	VERBOSE(" - remove isolation\n");
3863942d3a8SSheetal Tigadoli 	mmio_clrbits_32(icfg_mem_ctrl, ICFG_PKA_MEM_PWR_CTRL__ISO);
3873942d3a8SSheetal Tigadoli 
3883942d3a8SSheetal Tigadoli 	INFO("pka meminit done\n");
3893942d3a8SSheetal Tigadoli }
3903942d3a8SSheetal Tigadoli 
brcm_stingray_smmu_init(void)3913942d3a8SSheetal Tigadoli static void brcm_stingray_smmu_init(void)
3923942d3a8SSheetal Tigadoli {
3933942d3a8SSheetal Tigadoli 	unsigned int val;
3943942d3a8SSheetal Tigadoli 	uintptr_t smmu_base = SMMU_BASE;
3953942d3a8SSheetal Tigadoli 
3963942d3a8SSheetal Tigadoli 	VERBOSE("smmu init start\n");
3973942d3a8SSheetal Tigadoli 
3983942d3a8SSheetal Tigadoli 	/* Configure SCR0 */
3993942d3a8SSheetal Tigadoli 	VERBOSE(" - configure scr0\n");
4003942d3a8SSheetal Tigadoli 	val = mmio_read_32(smmu_base + 0x0);
4013942d3a8SSheetal Tigadoli 	val |= (0x1 << 12);
4023942d3a8SSheetal Tigadoli 	mmio_write_32(smmu_base + 0x0, val);
4033942d3a8SSheetal Tigadoli 
4043942d3a8SSheetal Tigadoli 	/* Reserve context banks for secure masters */
4053942d3a8SSheetal Tigadoli 	arm_smmu_reserve_secure_cntxt();
4063942d3a8SSheetal Tigadoli 
4073942d3a8SSheetal Tigadoli 	/* Print configuration */
4083942d3a8SSheetal Tigadoli 	VERBOSE(" - scr0=0x%x scr1=0x%x scr2=0x%x\n",
4093942d3a8SSheetal Tigadoli 		mmio_read_32(smmu_base + 0x0),
4103942d3a8SSheetal Tigadoli 		mmio_read_32(smmu_base + 0x4),
4113942d3a8SSheetal Tigadoli 		mmio_read_32(smmu_base + 0x8));
4123942d3a8SSheetal Tigadoli 
4133942d3a8SSheetal Tigadoli 	VERBOSE(" - idr0=0x%x idr1=0x%x idr2=0x%x\n",
4143942d3a8SSheetal Tigadoli 		mmio_read_32(smmu_base + 0x20),
4153942d3a8SSheetal Tigadoli 		mmio_read_32(smmu_base + 0x24),
4163942d3a8SSheetal Tigadoli 		mmio_read_32(smmu_base + 0x28));
4173942d3a8SSheetal Tigadoli 
4183942d3a8SSheetal Tigadoli 	VERBOSE(" - idr3=0x%x idr4=0x%x idr5=0x%x\n",
4193942d3a8SSheetal Tigadoli 		mmio_read_32(smmu_base + 0x2c),
4203942d3a8SSheetal Tigadoli 		mmio_read_32(smmu_base + 0x30),
4213942d3a8SSheetal Tigadoli 		mmio_read_32(smmu_base + 0x34));
4223942d3a8SSheetal Tigadoli 
4233942d3a8SSheetal Tigadoli 	VERBOSE(" - idr6=0x%x idr7=0x%x\n",
4243942d3a8SSheetal Tigadoli 		mmio_read_32(smmu_base + 0x38),
4253942d3a8SSheetal Tigadoli 		mmio_read_32(smmu_base + 0x3c));
4263942d3a8SSheetal Tigadoli 
4273942d3a8SSheetal Tigadoli 	INFO("smmu init done\n");
4283942d3a8SSheetal Tigadoli }
4293942d3a8SSheetal Tigadoli 
brcm_stingray_dma_pl330_meminit(void)4303942d3a8SSheetal Tigadoli static void brcm_stingray_dma_pl330_meminit(void)
4313942d3a8SSheetal Tigadoli {
4323942d3a8SSheetal Tigadoli 	uintptr_t icfg_mem_ctrl = ICFG_DMAC_MEM_PWR_CTRL;
4333942d3a8SSheetal Tigadoli 
4343942d3a8SSheetal Tigadoli 	VERBOSE("dmac meminit start\n");
4353942d3a8SSheetal Tigadoli 
4363942d3a8SSheetal Tigadoli 	VERBOSE(" - arrpoweron\n");
4373942d3a8SSheetal Tigadoli 	mmio_setbits_32(icfg_mem_ctrl,
4383942d3a8SSheetal Tigadoli 			ICFG_DMAC_MEM_PWR_CTRL__ARRPOWERONIN);
4393942d3a8SSheetal Tigadoli 	while (!(mmio_read_32(icfg_mem_ctrl) &
4403942d3a8SSheetal Tigadoli 		 ICFG_DMAC_MEM_PWR_CTRL__ARRPOWERONOUT))
4413942d3a8SSheetal Tigadoli 		;
4423942d3a8SSheetal Tigadoli 
4433942d3a8SSheetal Tigadoli 	VERBOSE(" - arrpowerok\n");
4443942d3a8SSheetal Tigadoli 	mmio_setbits_32(icfg_mem_ctrl,
4453942d3a8SSheetal Tigadoli 			ICFG_DMAC_MEM_PWR_CTRL__ARRPOWEROKIN);
4463942d3a8SSheetal Tigadoli 	while (!(mmio_read_32(icfg_mem_ctrl) &
4473942d3a8SSheetal Tigadoli 		 ICFG_DMAC_MEM_PWR_CTRL__ARRPOWEROKOUT))
4483942d3a8SSheetal Tigadoli 		;
4493942d3a8SSheetal Tigadoli 
4503942d3a8SSheetal Tigadoli 	VERBOSE(" - poweron\n");
4513942d3a8SSheetal Tigadoli 	mmio_setbits_32(icfg_mem_ctrl,
4523942d3a8SSheetal Tigadoli 			ICFG_DMAC_MEM_PWR_CTRL__POWERONIN);
4533942d3a8SSheetal Tigadoli 	while (!(mmio_read_32(icfg_mem_ctrl) &
4543942d3a8SSheetal Tigadoli 		 ICFG_DMAC_MEM_PWR_CTRL__POWERONOUT))
4553942d3a8SSheetal Tigadoli 		;
4563942d3a8SSheetal Tigadoli 
4573942d3a8SSheetal Tigadoli 	VERBOSE(" - powerok\n");
4583942d3a8SSheetal Tigadoli 	mmio_setbits_32(icfg_mem_ctrl,
4593942d3a8SSheetal Tigadoli 			ICFG_DMAC_MEM_PWR_CTRL__POWEROKIN);
4603942d3a8SSheetal Tigadoli 	while (!(mmio_read_32(icfg_mem_ctrl) &
4613942d3a8SSheetal Tigadoli 		 ICFG_DMAC_MEM_PWR_CTRL__POWEROKOUT))
4623942d3a8SSheetal Tigadoli 		;
4633942d3a8SSheetal Tigadoli 
4643942d3a8SSheetal Tigadoli 	/* Wait sometime */
4653942d3a8SSheetal Tigadoli 	mdelay(1);
4663942d3a8SSheetal Tigadoli 
4673942d3a8SSheetal Tigadoli 	VERBOSE(" - remove isolation\n");
4683942d3a8SSheetal Tigadoli 	mmio_clrbits_32(icfg_mem_ctrl, ICFG_DMAC_MEM_PWR_CTRL__ISO);
4693942d3a8SSheetal Tigadoli 
4703942d3a8SSheetal Tigadoli 	INFO("dmac meminit done\n");
4713942d3a8SSheetal Tigadoli }
4723942d3a8SSheetal Tigadoli 
4733942d3a8SSheetal Tigadoli /* program the crmu access ranges for allowing non sec access*/
brcm_stingray_crmu_access_init(void)4743942d3a8SSheetal Tigadoli static void brcm_stingray_crmu_access_init(void)
4753942d3a8SSheetal Tigadoli {
4763942d3a8SSheetal Tigadoli 	/* Enable 0x6641c001 - 0x6641c701 for non secure access */
4773942d3a8SSheetal Tigadoli 	mmio_write_32(CRMU_CORE_ADDR_RANGE0_LOW, 0x6641c001);
4783942d3a8SSheetal Tigadoli 	mmio_write_32(CRMU_CORE_ADDR_RANGE0_LOW + 0x4, 0x6641c701);
4793942d3a8SSheetal Tigadoli 
4803942d3a8SSheetal Tigadoli 	/* Enable 0x6641d001 - 0x66424b01 for non secure access */
4813942d3a8SSheetal Tigadoli 	mmio_write_32(CRMU_CORE_ADDR_RANGE1_LOW, 0x6641d001);
4823942d3a8SSheetal Tigadoli 	mmio_write_32(CRMU_CORE_ADDR_RANGE1_LOW + 0x4, 0x66424b01);
4833942d3a8SSheetal Tigadoli 
4843942d3a8SSheetal Tigadoli 	/* Enable 0x66425001 - 0x66425f01 for non secure access */
4853942d3a8SSheetal Tigadoli 	mmio_write_32(CRMU_CORE_ADDR_RANGE2_LOW, 0x66425001);
4863942d3a8SSheetal Tigadoli 	mmio_write_32(CRMU_CORE_ADDR_RANGE2_LOW + 0x4, 0x66425f01);
4873942d3a8SSheetal Tigadoli 
4883942d3a8SSheetal Tigadoli 	INFO("crmu access init done\n");
4893942d3a8SSheetal Tigadoli }
4903942d3a8SSheetal Tigadoli 
brcm_stingray_scr_init(void)4913942d3a8SSheetal Tigadoli static void brcm_stingray_scr_init(void)
4923942d3a8SSheetal Tigadoli {
4933942d3a8SSheetal Tigadoli 	unsigned int val;
4943942d3a8SSheetal Tigadoli 	uintptr_t scr_base = SCR_BASE;
4953942d3a8SSheetal Tigadoli 	unsigned int clr_mask = SCR_AXCACHE_CONFIG_MASK;
4963942d3a8SSheetal Tigadoli 	unsigned int set_mask = SCR_TBUX_AXCACHE_CONFIG;
4973942d3a8SSheetal Tigadoli 
4983942d3a8SSheetal Tigadoli 	VERBOSE("scr init start\n");
4993942d3a8SSheetal Tigadoli 
5003942d3a8SSheetal Tigadoli 	/* awdomain=0x1 and ardomain=0x1 */
5013942d3a8SSheetal Tigadoli 	mmio_clrsetbits_32(scr_base + 0x0, clr_mask, set_mask);
5023942d3a8SSheetal Tigadoli 	val = mmio_read_32(scr_base + 0x0);
5033942d3a8SSheetal Tigadoli 	VERBOSE(" - set tbu0_config=0x%x\n", val);
5043942d3a8SSheetal Tigadoli 
5053942d3a8SSheetal Tigadoli 	/* awdomain=0x1 and ardomain=0x1 */
5063942d3a8SSheetal Tigadoli 	mmio_clrsetbits_32(scr_base + 0x4, clr_mask, set_mask);
5073942d3a8SSheetal Tigadoli 	val = mmio_read_32(scr_base + 0x4);
5083942d3a8SSheetal Tigadoli 	VERBOSE(" - set tbu1_config=0x%x\n", val);
5093942d3a8SSheetal Tigadoli 
5103942d3a8SSheetal Tigadoli 	/* awdomain=0x1 and ardomain=0x1 */
5113942d3a8SSheetal Tigadoli 	mmio_clrsetbits_32(scr_base + 0x8, clr_mask, set_mask);
5123942d3a8SSheetal Tigadoli 	val = mmio_read_32(scr_base + 0x8);
5133942d3a8SSheetal Tigadoli 	VERBOSE(" - set tbu2_config=0x%x\n", val);
5143942d3a8SSheetal Tigadoli 
5153942d3a8SSheetal Tigadoli 	/* awdomain=0x1 and ardomain=0x1 */
5163942d3a8SSheetal Tigadoli 	mmio_clrsetbits_32(scr_base + 0xc, clr_mask, set_mask);
5173942d3a8SSheetal Tigadoli 	val = mmio_read_32(scr_base + 0xc);
5183942d3a8SSheetal Tigadoli 	VERBOSE(" - set tbu3_config=0x%x\n", val);
5193942d3a8SSheetal Tigadoli 
5203942d3a8SSheetal Tigadoli 	/* awdomain=0x1 and ardomain=0x1 */
5213942d3a8SSheetal Tigadoli 	mmio_clrsetbits_32(scr_base + 0x10, clr_mask, set_mask);
5223942d3a8SSheetal Tigadoli 	val = mmio_read_32(scr_base + 0x10);
5233942d3a8SSheetal Tigadoli 	VERBOSE(" - set tbu4_config=0x%x\n", val);
5243942d3a8SSheetal Tigadoli 
5253942d3a8SSheetal Tigadoli 	/* awdomain=0x0 and ardomain=0x0 */
5263942d3a8SSheetal Tigadoli 	mmio_clrbits_32(scr_base + 0x14, clr_mask);
5273942d3a8SSheetal Tigadoli 	val = mmio_read_32(scr_base + 0x14);
5283942d3a8SSheetal Tigadoli 	VERBOSE(" - set gic_config=0x%x\n", val);
5293942d3a8SSheetal Tigadoli 
5303942d3a8SSheetal Tigadoli 	INFO("scr init done\n");
5313942d3a8SSheetal Tigadoli }
5323942d3a8SSheetal Tigadoli 
brcm_stingray_hsls_tzpcprot_init(void)5333942d3a8SSheetal Tigadoli static void brcm_stingray_hsls_tzpcprot_init(void)
5343942d3a8SSheetal Tigadoli {
5353942d3a8SSheetal Tigadoli 	unsigned int val;
5363942d3a8SSheetal Tigadoli 	uintptr_t tzpcdecprot_base = HSLS_TZPC_BASE;
5373942d3a8SSheetal Tigadoli 
5383942d3a8SSheetal Tigadoli 	VERBOSE("hsls tzpcprot init start\n");
5393942d3a8SSheetal Tigadoli 
5403942d3a8SSheetal Tigadoli 	/* Treat third-party masters as non-secured */
5413942d3a8SSheetal Tigadoli 	val = 0;
5423942d3a8SSheetal Tigadoli 	val |= BIT(6); /* SDIO1 */
5433942d3a8SSheetal Tigadoli 	val |= BIT(5); /* SDIO0 */
5443942d3a8SSheetal Tigadoli 	val |= BIT(0); /* AMAC */
5453942d3a8SSheetal Tigadoli 	mmio_write_32(tzpcdecprot_base + 0x810, val);
5463942d3a8SSheetal Tigadoli 
5473942d3a8SSheetal Tigadoli 	/* Print TZPC decode status registers */
5483942d3a8SSheetal Tigadoli 	VERBOSE(" - tzpcdecprot0=0x%x\n",
5493942d3a8SSheetal Tigadoli 		mmio_read_32(tzpcdecprot_base + 0x800));
5503942d3a8SSheetal Tigadoli 
5513942d3a8SSheetal Tigadoli 	VERBOSE(" - tzpcdecprot1=0x%x\n",
5523942d3a8SSheetal Tigadoli 		mmio_read_32(tzpcdecprot_base + 0x80c));
5533942d3a8SSheetal Tigadoli 
5543942d3a8SSheetal Tigadoli 	INFO("hsls tzpcprot init done\n");
5553942d3a8SSheetal Tigadoli }
5563942d3a8SSheetal Tigadoli 
5573942d3a8SSheetal Tigadoli #ifdef USE_I2S
5583942d3a8SSheetal Tigadoli #define ICFG_AUDIO_POWER_CTRL			(HSLS_ICFG_REGS_BASE + 0xaa8)
5593942d3a8SSheetal Tigadoli #define ICFG_AUDIO_POWER_CTRL__POWERONIN	BIT(0)
5603942d3a8SSheetal Tigadoli #define ICFG_AUDIO_POWER_CTRL__POWEROKIN	BIT(1)
5613942d3a8SSheetal Tigadoli #define ICFG_AUDIO_POWER_CTRL__ARRPOWERONIN	BIT(2)
5623942d3a8SSheetal Tigadoli #define ICFG_AUDIO_POWER_CTRL__ARRPOWEROKIN	BIT(3)
5633942d3a8SSheetal Tigadoli #define ICFG_AUDIO_POWER_CTRL__POWERONOUT	BIT(4)
5643942d3a8SSheetal Tigadoli #define ICFG_AUDIO_POWER_CTRL__POWEROKOUT	BIT(5)
5653942d3a8SSheetal Tigadoli #define ICFG_AUDIO_POWER_CTRL__ARRPOWERONOUT	BIT(6)
5663942d3a8SSheetal Tigadoli #define ICFG_AUDIO_POWER_CTRL__ARRPOWEROKOUT	BIT(7)
5673942d3a8SSheetal Tigadoli #define ICFG_AUDIO_POWER_CTRL__ISO		BIT(8)
5683942d3a8SSheetal Tigadoli #define ICFG_AUDIO_SID_CONTROL			(HSLS_ICFG_REGS_BASE + 0xaf8)
5693942d3a8SSheetal Tigadoli #define ICFG_AUDIO_SID_SHIFT			5
5703942d3a8SSheetal Tigadoli #define ICFG_AUDIO_SID_AWADDR_OFFSET		0x0
5713942d3a8SSheetal Tigadoli #define ICFG_AUDIO_SID_ARADDR_OFFSET		0x4
5723942d3a8SSheetal Tigadoli 
5733942d3a8SSheetal Tigadoli #define I2S_RESET_CONTROL        (HSLS_IDM_REGS_BASE + 0x1800)
5743942d3a8SSheetal Tigadoli #define I2S_IDM_IO_CONTROL       (HSLS_IDM_REGS_BASE + 0x1408)
5753942d3a8SSheetal Tigadoli #define IO_CONTROL_CLK_ENABLE    BIT(0)
5763942d3a8SSheetal Tigadoli #define I2S_IDM0_ARCACHE_OFFSET  16
5773942d3a8SSheetal Tigadoli #define I2S_IDM0_AWCACHE_OFFSET  20
5783942d3a8SSheetal Tigadoli #define I2S_IDM0_ARCACHE_MASK    (0xF << I2S_IDM0_ARCACHE_OFFSET)
5793942d3a8SSheetal Tigadoli #define I2S_IDM0_AWCACHE_MASK    (0xF << I2S_IDM0_AWCACHE_OFFSET)
5803942d3a8SSheetal Tigadoli /* ARCACHE - AWCACHE is 0x22 Normal Non-cacheable Non-bufferable. */
5813942d3a8SSheetal Tigadoli #define I2S_IDM0_ARCACHE_VAL     (0x2 << I2S_IDM0_ARCACHE_OFFSET)
5823942d3a8SSheetal Tigadoli #define I2S_IDM0_AWCACHE_VAL     (0x2 << I2S_IDM0_AWCACHE_OFFSET)
5833942d3a8SSheetal Tigadoli 
brcm_stingray_audio_init(void)5843942d3a8SSheetal Tigadoli static void brcm_stingray_audio_init(void)
5853942d3a8SSheetal Tigadoli {
5863942d3a8SSheetal Tigadoli 	unsigned int val;
5873942d3a8SSheetal Tigadoli 	uintptr_t icfg_mem_ctrl = ICFG_AUDIO_POWER_CTRL;
5883942d3a8SSheetal Tigadoli 	uintptr_t icfg_audio_sid = ICFG_AUDIO_SID_CONTROL;
5893942d3a8SSheetal Tigadoli 
5903942d3a8SSheetal Tigadoli 	mmio_write_32(I2S_RESET_CONTROL, 0x0);
5913942d3a8SSheetal Tigadoli 
5923942d3a8SSheetal Tigadoli 	mmio_clrsetbits_32(I2S_IDM_IO_CONTROL, I2S_IDM0_ARCACHE_MASK,
5933942d3a8SSheetal Tigadoli 			   I2S_IDM0_ARCACHE_VAL);
5943942d3a8SSheetal Tigadoli 
5953942d3a8SSheetal Tigadoli 	mmio_clrsetbits_32(I2S_IDM_IO_CONTROL, I2S_IDM0_AWCACHE_MASK,
5963942d3a8SSheetal Tigadoli 			   I2S_IDM0_AWCACHE_VAL);
5973942d3a8SSheetal Tigadoli 
5983942d3a8SSheetal Tigadoli 	mmio_setbits_32(I2S_IDM_IO_CONTROL, IO_CONTROL_CLK_ENABLE);
5993942d3a8SSheetal Tigadoli 
6003942d3a8SSheetal Tigadoli 	VERBOSE("audio meminit start\n");
6013942d3a8SSheetal Tigadoli 
6023942d3a8SSheetal Tigadoli 	VERBOSE(" - configure stream_id = 0x6001\n");
6033942d3a8SSheetal Tigadoli 	val = SR_SID_VAL(0x3, 0x0, 0x1) << ICFG_AUDIO_SID_SHIFT;
6043942d3a8SSheetal Tigadoli 	mmio_write_32(icfg_audio_sid + ICFG_AUDIO_SID_AWADDR_OFFSET, val);
6053942d3a8SSheetal Tigadoli 	mmio_write_32(icfg_audio_sid + ICFG_AUDIO_SID_ARADDR_OFFSET, val);
6063942d3a8SSheetal Tigadoli 
6073942d3a8SSheetal Tigadoli 	VERBOSE(" - arrpoweron\n");
6083942d3a8SSheetal Tigadoli 	mmio_setbits_32(icfg_mem_ctrl,
6093942d3a8SSheetal Tigadoli 			ICFG_AUDIO_POWER_CTRL__ARRPOWERONIN);
6103942d3a8SSheetal Tigadoli 	while (!(mmio_read_32(icfg_mem_ctrl) &
6113942d3a8SSheetal Tigadoli 		 ICFG_AUDIO_POWER_CTRL__ARRPOWERONOUT))
6123942d3a8SSheetal Tigadoli 		;
6133942d3a8SSheetal Tigadoli 
6143942d3a8SSheetal Tigadoli 	VERBOSE(" - arrpowerok\n");
6153942d3a8SSheetal Tigadoli 	mmio_setbits_32(icfg_mem_ctrl,
6163942d3a8SSheetal Tigadoli 			ICFG_AUDIO_POWER_CTRL__ARRPOWEROKIN);
6173942d3a8SSheetal Tigadoli 	while (!(mmio_read_32(icfg_mem_ctrl) &
6183942d3a8SSheetal Tigadoli 		 ICFG_AUDIO_POWER_CTRL__ARRPOWEROKOUT))
6193942d3a8SSheetal Tigadoli 		;
6203942d3a8SSheetal Tigadoli 
6213942d3a8SSheetal Tigadoli 	VERBOSE(" - poweron\n");
6223942d3a8SSheetal Tigadoli 	mmio_setbits_32(icfg_mem_ctrl,
6233942d3a8SSheetal Tigadoli 			ICFG_AUDIO_POWER_CTRL__POWERONIN);
6243942d3a8SSheetal Tigadoli 	while (!(mmio_read_32(icfg_mem_ctrl) &
6253942d3a8SSheetal Tigadoli 		 ICFG_AUDIO_POWER_CTRL__POWERONOUT))
6263942d3a8SSheetal Tigadoli 		;
6273942d3a8SSheetal Tigadoli 
6283942d3a8SSheetal Tigadoli 	VERBOSE(" - powerok\n");
6293942d3a8SSheetal Tigadoli 	mmio_setbits_32(icfg_mem_ctrl,
6303942d3a8SSheetal Tigadoli 			ICFG_AUDIO_POWER_CTRL__POWEROKIN);
6313942d3a8SSheetal Tigadoli 	while (!(mmio_read_32(icfg_mem_ctrl) &
6323942d3a8SSheetal Tigadoli 		 ICFG_AUDIO_POWER_CTRL__POWEROKOUT))
6333942d3a8SSheetal Tigadoli 		;
6343942d3a8SSheetal Tigadoli 
6353942d3a8SSheetal Tigadoli 	/* Wait sometime */
6363942d3a8SSheetal Tigadoli 	mdelay(1);
6373942d3a8SSheetal Tigadoli 
6383942d3a8SSheetal Tigadoli 	VERBOSE(" - remove isolation\n");
6393942d3a8SSheetal Tigadoli 	mmio_clrbits_32(icfg_mem_ctrl, ICFG_AUDIO_POWER_CTRL__ISO);
6403942d3a8SSheetal Tigadoli 
6413942d3a8SSheetal Tigadoli 	INFO("audio meminit done\n");
6423942d3a8SSheetal Tigadoli }
6433942d3a8SSheetal Tigadoli #endif    /* USE_I2S */
6443942d3a8SSheetal Tigadoli 
6453942d3a8SSheetal Tigadoli /*
6463942d3a8SSheetal Tigadoli  * These defines do not match the regfile but they are renamed in a way such
6473942d3a8SSheetal Tigadoli  * that they are much more readible
6483942d3a8SSheetal Tigadoli  */
6493942d3a8SSheetal Tigadoli 
6503942d3a8SSheetal Tigadoli #define SCR_GPV_SMMU_NS			(SCR_GPV_BASE + 0x28)
6513942d3a8SSheetal Tigadoli #define SCR_GPV_GIC500_NS		(SCR_GPV_BASE + 0x34)
6523942d3a8SSheetal Tigadoli #define HSLS_GPV_NOR_S0_NS		(HSLS_GPV_BASE + 0x14)
6533942d3a8SSheetal Tigadoli #define HSLS_GPV_IDM1_NS		(HSLS_GPV_BASE + 0x18)
6543942d3a8SSheetal Tigadoli #define HSLS_GPV_IDM2_NS		(HSLS_GPV_BASE + 0x1c)
6553942d3a8SSheetal Tigadoli #define HSLS_SDIO0_SLAVE_NS		(HSLS_GPV_BASE + 0x20)
6563942d3a8SSheetal Tigadoli #define HSLS_SDIO1_SLAVE_NS		(HSLS_GPV_BASE + 0x24)
6573942d3a8SSheetal Tigadoli #define HSLS_GPV_APBY_NS		(HSLS_GPV_BASE + 0x2c)
6583942d3a8SSheetal Tigadoli #define HSLS_GPV_APBZ_NS		(HSLS_GPV_BASE + 0x30)
6593942d3a8SSheetal Tigadoli #define HSLS_GPV_APBX_NS		(HSLS_GPV_BASE + 0x34)
6603942d3a8SSheetal Tigadoli #define HSLS_GPV_APBS_NS		(HSLS_GPV_BASE + 0x38)
6613942d3a8SSheetal Tigadoli #define HSLS_GPV_QSPI_S0_NS		(HSLS_GPV_BASE + 0x68)
6623942d3a8SSheetal Tigadoli #define HSLS_GPV_APBR_NS		(HSLS_GPV_BASE + 0x6c)
6633942d3a8SSheetal Tigadoli #define FS4_CRYPTO_GPV_RM_SLAVE_NS	(FS4_CRYPTO_GPV_BASE + 0x8)
6643942d3a8SSheetal Tigadoli #define FS4_CRYPTO_GPV_APB_SWITCH_NS	(FS4_CRYPTO_GPV_BASE + 0xc)
6653942d3a8SSheetal Tigadoli #define FS4_RAID_GPV_RM_SLAVE_NS	(FS4_RAID_GPV_BASE + 0x8)
6663942d3a8SSheetal Tigadoli #define FS4_RAID_GPV_APB_SWITCH_NS	(FS4_RAID_GPV_BASE + 0xc)
6673942d3a8SSheetal Tigadoli #define FS4_CRYPTO_IDM_NS		(NIC400_FS_NOC_ROOT + 0x1c)
6683942d3a8SSheetal Tigadoli #define FS4_RAID_IDM_NS			(NIC400_FS_NOC_ROOT + 0x28)
6693942d3a8SSheetal Tigadoli 
6703942d3a8SSheetal Tigadoli #define FS4_CRYPTO_RING_COUNT          32
6713942d3a8SSheetal Tigadoli #define FS4_CRYPTO_DME_COUNT           10
6723942d3a8SSheetal Tigadoli #define FS4_CRYPTO_AE_COUNT            10
6733942d3a8SSheetal Tigadoli #define FS4_CRYPTO_START_STREAM_ID     0x4000
6743942d3a8SSheetal Tigadoli #define FS4_CRYPTO_MSI_DEVICE_ID       0x4100
6753942d3a8SSheetal Tigadoli 
6763942d3a8SSheetal Tigadoli #define FS4_RAID_RING_COUNT            32
6773942d3a8SSheetal Tigadoli #define FS4_RAID_DME_COUNT             8
6783942d3a8SSheetal Tigadoli #define FS4_RAID_AE_COUNT              8
6793942d3a8SSheetal Tigadoli #define FS4_RAID_START_STREAM_ID       0x4200
6803942d3a8SSheetal Tigadoli #define FS4_RAID_MSI_DEVICE_ID         0x4300
6813942d3a8SSheetal Tigadoli 
6823942d3a8SSheetal Tigadoli #define FS6_PKI_AXI_SLAVE_NS \
6833942d3a8SSheetal Tigadoli 		(NIC400_FS_NOC_ROOT + NIC400_FS_NOC_SECURITY2_OFFSET)
6843942d3a8SSheetal Tigadoli 
6853942d3a8SSheetal Tigadoli #define FS6_PKI_AE_DME_APB_NS \
6863942d3a8SSheetal Tigadoli 		(NIC400_FS_NOC_ROOT + NIC400_FS_NOC_SECURITY7_OFFSET)
6873942d3a8SSheetal Tigadoli #define FS6_PKI_IDM_IO_CONTROL_DIRECT	0x0
6883942d3a8SSheetal Tigadoli #define FS6_PKI_IDM_RESET_CONTROL	0x0
6893942d3a8SSheetal Tigadoli #define FS6_PKI_RING_COUNT		32
6903942d3a8SSheetal Tigadoli #define FS6_PKI_DME_COUNT		1
6913942d3a8SSheetal Tigadoli #define FS6_PKI_AE_COUNT		4
6923942d3a8SSheetal Tigadoli #define FS6_PKI_START_STREAM_ID		0x4000
6933942d3a8SSheetal Tigadoli #define FS6_PKI_MSI_DEVICE_ID		0x4100
6943942d3a8SSheetal Tigadoli 
brcm_stingray_security_init(void)6953942d3a8SSheetal Tigadoli static void brcm_stingray_security_init(void)
6963942d3a8SSheetal Tigadoli {
6973942d3a8SSheetal Tigadoli 	unsigned int val;
6983942d3a8SSheetal Tigadoli 
6993942d3a8SSheetal Tigadoli 	val = mmio_read_32(SCR_GPV_SMMU_NS);
7003942d3a8SSheetal Tigadoli 	val |= BIT(0);				/* SMMU NS = 1 */
7013942d3a8SSheetal Tigadoli 	mmio_write_32(SCR_GPV_SMMU_NS, val);
7023942d3a8SSheetal Tigadoli 
7033942d3a8SSheetal Tigadoli 	val = mmio_read_32(SCR_GPV_GIC500_NS);
7043942d3a8SSheetal Tigadoli 	val |= BIT(0);				/* GIC-500 NS = 1 */
7053942d3a8SSheetal Tigadoli 	mmio_write_32(SCR_GPV_GIC500_NS, val);
7063942d3a8SSheetal Tigadoli 
7073942d3a8SSheetal Tigadoli 	val = mmio_read_32(HSLS_GPV_NOR_S0_NS);
7083942d3a8SSheetal Tigadoli 	val |= BIT(0);				/* NOR SLAVE NS = 1 */
7093942d3a8SSheetal Tigadoli 	mmio_write_32(HSLS_GPV_NOR_S0_NS, val);
7103942d3a8SSheetal Tigadoli 
7113942d3a8SSheetal Tigadoli 	val = mmio_read_32(HSLS_GPV_IDM1_NS);
7123942d3a8SSheetal Tigadoli 	val |= BIT(0);				/* DMA IDM NS = 1 */
7133942d3a8SSheetal Tigadoli 	val |= BIT(1);				/* I2S IDM NS = 1 */
7143942d3a8SSheetal Tigadoli 	val |= BIT(2);				/* AMAC IDM NS = 1 */
7153942d3a8SSheetal Tigadoli 	val |= BIT(3);				/* SDIO0 IDM NS = 1 */
7163942d3a8SSheetal Tigadoli 	val |= BIT(4);				/* SDIO1 IDM NS = 1 */
7173942d3a8SSheetal Tigadoli 	val |= BIT(5);				/* DS_3 IDM NS = 1 */
7183942d3a8SSheetal Tigadoli 	mmio_write_32(HSLS_GPV_IDM1_NS, val);
7193942d3a8SSheetal Tigadoli 
7203942d3a8SSheetal Tigadoli 	val = mmio_read_32(HSLS_GPV_IDM2_NS);
7213942d3a8SSheetal Tigadoli 	val |= BIT(2);				/* QSPI IDM NS = 1 */
7223942d3a8SSheetal Tigadoli 	val |= BIT(1);				/* NOR IDM NS = 1 */
7233942d3a8SSheetal Tigadoli 	val |= BIT(0);				/* NAND IDM NS = 1 */
7243942d3a8SSheetal Tigadoli 	mmio_write_32(HSLS_GPV_IDM2_NS, val);
7253942d3a8SSheetal Tigadoli 
7263942d3a8SSheetal Tigadoli 	val = mmio_read_32(HSLS_GPV_APBY_NS);
7273942d3a8SSheetal Tigadoli 	val |= BIT(10);				/* I2S NS = 1 */
7283942d3a8SSheetal Tigadoli 	val |= BIT(4);				/* IOPAD NS = 1 */
7293942d3a8SSheetal Tigadoli 	val |= 0xf;				/* UARTx NS = 1 */
7303942d3a8SSheetal Tigadoli 	mmio_write_32(HSLS_GPV_APBY_NS, val);
7313942d3a8SSheetal Tigadoli 
7323942d3a8SSheetal Tigadoli 	val = mmio_read_32(HSLS_GPV_APBZ_NS);
7333942d3a8SSheetal Tigadoli 	val |= BIT(2);			/* RNG NS = 1 */
7343942d3a8SSheetal Tigadoli 	mmio_write_32(HSLS_GPV_APBZ_NS, val);
7353942d3a8SSheetal Tigadoli 
7363942d3a8SSheetal Tigadoli 	val = mmio_read_32(HSLS_GPV_APBS_NS);
7373942d3a8SSheetal Tigadoli 	val |= 0x3;				/* SPIx NS = 1 */
7383942d3a8SSheetal Tigadoli 	mmio_write_32(HSLS_GPV_APBS_NS, val);
7393942d3a8SSheetal Tigadoli 
7403942d3a8SSheetal Tigadoli 	val = mmio_read_32(HSLS_GPV_APBR_NS);
7413942d3a8SSheetal Tigadoli 	val |= BIT(7);				/* QSPI APB NS = 1 */
7423942d3a8SSheetal Tigadoli 	val |= BIT(6);				/* NAND APB NS = 1 */
7433942d3a8SSheetal Tigadoli 	val |= BIT(5);				/* NOR APB NS = 1 */
7443942d3a8SSheetal Tigadoli 	val |= BIT(4);				/* AMAC APB NS = 1 */
7453942d3a8SSheetal Tigadoli 	val |= BIT(1);				/* DMA S1 APB NS = 1 */
7463942d3a8SSheetal Tigadoli 	mmio_write_32(HSLS_GPV_APBR_NS, val);
7473942d3a8SSheetal Tigadoli 
7483942d3a8SSheetal Tigadoli 	val = mmio_read_32(HSLS_SDIO0_SLAVE_NS);
7493942d3a8SSheetal Tigadoli 	val |= BIT(0);				/* SDIO0 NS = 1 */
7503942d3a8SSheetal Tigadoli 	mmio_write_32(HSLS_SDIO0_SLAVE_NS, val);
7513942d3a8SSheetal Tigadoli 
7523942d3a8SSheetal Tigadoli 	val = mmio_read_32(HSLS_SDIO1_SLAVE_NS);
7533942d3a8SSheetal Tigadoli 	val |= BIT(0);				/* SDIO1 NS = 1 */
7543942d3a8SSheetal Tigadoli 	mmio_write_32(HSLS_SDIO1_SLAVE_NS, val);
7553942d3a8SSheetal Tigadoli 
7563942d3a8SSheetal Tigadoli 	val = mmio_read_32(HSLS_GPV_APBX_NS);
7573942d3a8SSheetal Tigadoli 	val |= BIT(14);				/* SMBUS1 NS = 1 */
7583942d3a8SSheetal Tigadoli 	val |= BIT(13);				/* GPIO NS = 1 */
7593942d3a8SSheetal Tigadoli 	val |= BIT(12);				/* WDT NS = 1 */
7603942d3a8SSheetal Tigadoli 	val |= BIT(11);				/* SMBUS0 NS = 1 */
7613942d3a8SSheetal Tigadoli 	val |= BIT(10);				/* Timer7 NS = 1 */
7623942d3a8SSheetal Tigadoli 	val |= BIT(9);				/* Timer6 NS = 1 */
7633942d3a8SSheetal Tigadoli 	val |= BIT(8);				/* Timer5 NS = 1 */
7643942d3a8SSheetal Tigadoli 	val |= BIT(7);				/* Timer4 NS = 1 */
7653942d3a8SSheetal Tigadoli 	val |= BIT(6);				/* Timer3 NS = 1 */
7663942d3a8SSheetal Tigadoli 	val |= BIT(5);				/* Timer2 NS = 1 */
7673942d3a8SSheetal Tigadoli 	val |= BIT(4);				/* Timer1 NS = 1 */
7683942d3a8SSheetal Tigadoli 	val |= BIT(3);				/* Timer0 NS = 1 */
7693942d3a8SSheetal Tigadoli 	val |= BIT(2);				/* MDIO NS = 1 */
7703942d3a8SSheetal Tigadoli 	val |= BIT(1);				/* PWM NS = 1 */
7713942d3a8SSheetal Tigadoli 	mmio_write_32(HSLS_GPV_APBX_NS, val);
7723942d3a8SSheetal Tigadoli 
7733942d3a8SSheetal Tigadoli 	val = mmio_read_32(HSLS_GPV_QSPI_S0_NS);
7743942d3a8SSheetal Tigadoli 	val |= BIT(0);				/* QSPI NS = 1 */
7753942d3a8SSheetal Tigadoli 	mmio_write_32(HSLS_GPV_QSPI_S0_NS, val);
7763942d3a8SSheetal Tigadoli 
7773942d3a8SSheetal Tigadoli #ifdef USE_FS4
7783942d3a8SSheetal Tigadoli 	val = 0x1;				/* FS4 Crypto rm_slave */
7793942d3a8SSheetal Tigadoli 	mmio_write_32(FS4_CRYPTO_GPV_RM_SLAVE_NS, val);
7803942d3a8SSheetal Tigadoli 	val = 0x1;				/* FS4 Crypto apb_switch */
7813942d3a8SSheetal Tigadoli 	mmio_write_32(FS4_CRYPTO_GPV_APB_SWITCH_NS, val);
7823942d3a8SSheetal Tigadoli 
7833942d3a8SSheetal Tigadoli 	val = 0x1;				/* FS4 Raid rm_slave */
7843942d3a8SSheetal Tigadoli 	mmio_write_32(FS4_RAID_GPV_RM_SLAVE_NS, val);
7853942d3a8SSheetal Tigadoli 	val = 0x1;				/* FS4 Raid apb_switch */
7863942d3a8SSheetal Tigadoli 	mmio_write_32(FS4_RAID_GPV_APB_SWITCH_NS, val);
7873942d3a8SSheetal Tigadoli 
7883942d3a8SSheetal Tigadoli 	val = 0x1;				/* FS4 Crypto IDM */
7893942d3a8SSheetal Tigadoli 	mmio_write_32(FS4_CRYPTO_IDM_NS, val);
7903942d3a8SSheetal Tigadoli 	val = 0x1;				/* FS4 RAID IDM */
7913942d3a8SSheetal Tigadoli 	mmio_write_32(FS4_RAID_IDM_NS, val);
7923942d3a8SSheetal Tigadoli #endif
7933942d3a8SSheetal Tigadoli 
7943942d3a8SSheetal Tigadoli #ifdef BL31_CCN_NONSECURE
7953942d3a8SSheetal Tigadoli 	/* Enable non-secure access to CCN registers */
7963942d3a8SSheetal Tigadoli 	mmio_write_32(OLY_MN_REGISTERS_NODE0_SECURE_ACCESS, 0x1);
7973942d3a8SSheetal Tigadoli #endif
7983942d3a8SSheetal Tigadoli 
7993942d3a8SSheetal Tigadoli #ifdef DDR_CTRL_PHY_NONSECURE
8003942d3a8SSheetal Tigadoli 	mmio_write_32(SCR_NOC_DDR_REGISTER_ACCESS, 0x1);
8013942d3a8SSheetal Tigadoli #endif
8023942d3a8SSheetal Tigadoli 
8033942d3a8SSheetal Tigadoli 	paxc_mhb_ns_init();
8043942d3a8SSheetal Tigadoli 
8053942d3a8SSheetal Tigadoli 	/* unlock scr idm for non secure access */
8063942d3a8SSheetal Tigadoli 	mmio_write_32(SCR_NOC_SECURITY0, 0xffffffff);
8073942d3a8SSheetal Tigadoli 
8083942d3a8SSheetal Tigadoli 	INFO("security init done\r\n");
8093942d3a8SSheetal Tigadoli }
8103942d3a8SSheetal Tigadoli 
brcm_gpio_pad_ns_init(void)8113942d3a8SSheetal Tigadoli void brcm_gpio_pad_ns_init(void)
8123942d3a8SSheetal Tigadoli {
8133942d3a8SSheetal Tigadoli 	/* configure all GPIO pads for non secure world access*/
8143942d3a8SSheetal Tigadoli 	mmio_write_32(GPIO_S_CNTRL_REG, 0xffffffff); /* 128-140 gpio pads */
8153942d3a8SSheetal Tigadoli 	mmio_write_32(GPIO_S_CNTRL_REG + 0x4, 0xffffffff); /* 96-127 gpio pad */
8163942d3a8SSheetal Tigadoli 	mmio_write_32(GPIO_S_CNTRL_REG + 0x8, 0xffffffff); /* 64-95 gpio pad */
8173942d3a8SSheetal Tigadoli 	mmio_write_32(GPIO_S_CNTRL_REG + 0xc, 0xffffffff); /* 32-63 gpio pad */
8183942d3a8SSheetal Tigadoli 	mmio_write_32(GPIO_S_CNTRL_REG + 0x10, 0xffffffff); /* 0-31 gpio pad */
8193942d3a8SSheetal Tigadoli }
8203942d3a8SSheetal Tigadoli 
8213942d3a8SSheetal Tigadoli #ifndef USE_DDR
brcm_stingray_sram_ns_init(void)8223942d3a8SSheetal Tigadoli static void brcm_stingray_sram_ns_init(void)
8233942d3a8SSheetal Tigadoli {
8243942d3a8SSheetal Tigadoli 	uintptr_t sram_root = TZC400_FS_SRAM_ROOT;
8253942d3a8SSheetal Tigadoli 	uintptr_t noc_root = NIC400_FS_NOC_ROOT;
8263942d3a8SSheetal Tigadoli 
8273942d3a8SSheetal Tigadoli 	mmio_write_32(sram_root + GATE_KEEPER_OFFSET, 1);
8283942d3a8SSheetal Tigadoli 	mmio_write_32(sram_root + REGION_ATTRIBUTES_0_OFFSET, 0xc0000000);
8293942d3a8SSheetal Tigadoli 	mmio_write_32(sram_root + REGION_ID_ACCESS_0_OFFSET, 0x00010001);
8303942d3a8SSheetal Tigadoli 	mmio_write_32(noc_root + NIC400_FS_NOC_SECURITY4_OFFSET, 0x1);
8313942d3a8SSheetal Tigadoli 	INFO(" stingray sram ns init done.\n");
8323942d3a8SSheetal Tigadoli }
8333942d3a8SSheetal Tigadoli #endif
8343942d3a8SSheetal Tigadoli 
ccn_pre_init(void)8353942d3a8SSheetal Tigadoli static void ccn_pre_init(void)
8363942d3a8SSheetal Tigadoli {
8373942d3a8SSheetal Tigadoli 	/*
8383942d3a8SSheetal Tigadoli 	 * Set WFC bit of RN-I nodes where FS4 is connected.
8393942d3a8SSheetal Tigadoli 	 * This is required inorder to wait for read/write requests
8403942d3a8SSheetal Tigadoli 	 * completion acknowledgment. Otherwise FS4 Ring Manager is
8413942d3a8SSheetal Tigadoli 	 * getting stale data because of re-ordering of read/write
8423942d3a8SSheetal Tigadoli 	 * requests at CCN level
8433942d3a8SSheetal Tigadoli 	 */
8443942d3a8SSheetal Tigadoli 	mmio_setbits_32(OLY_RNI3PDVM_REGISTERS_NODE8_AUX_CTL,
8453942d3a8SSheetal Tigadoli 			OLY_RNI3PDVM_REGISTERS_NODE8_AUX_CTL_WFC);
8463942d3a8SSheetal Tigadoli }
8473942d3a8SSheetal Tigadoli 
ccn_post_init(void)8483942d3a8SSheetal Tigadoli static void ccn_post_init(void)
8493942d3a8SSheetal Tigadoli {
8503942d3a8SSheetal Tigadoli 	mmio_setbits_32(OLY_HNI_REGISTERS_NODE0_PCIERC_RNI_NODEID_LIST,
8513942d3a8SSheetal Tigadoli 			SRP_RNI_PCIE_CONNECTED);
8523942d3a8SSheetal Tigadoli 	mmio_setbits_32(OLY_HNI_REGISTERS_NODE0_SA_AUX_CTL,
8533942d3a8SSheetal Tigadoli 			SA_AUX_CTL_SER_DEVNE_WR);
8543942d3a8SSheetal Tigadoli 
8553942d3a8SSheetal Tigadoli 	mmio_clrbits_32(OLY_HNI_REGISTERS_NODE0_POS_CONTROL,
8563942d3a8SSheetal Tigadoli 			POS_CONTROL_HNI_POS_EN);
8573942d3a8SSheetal Tigadoli 	mmio_clrbits_32(OLY_HNI_REGISTERS_NODE0_SA_AUX_CTL,
8583942d3a8SSheetal Tigadoli 			SA_AUX_CTL_POS_EARLY_WR_COMP_EN);
8593942d3a8SSheetal Tigadoli }
8603942d3a8SSheetal Tigadoli 
8613942d3a8SSheetal Tigadoli #ifndef BL31_BOOT_PRELOADED_SCP
crmu_init(void)8623942d3a8SSheetal Tigadoli static void crmu_init(void)
8633942d3a8SSheetal Tigadoli {
8643942d3a8SSheetal Tigadoli 	/*
8653942d3a8SSheetal Tigadoli 	 * Configure CRMU for using SMMU
8663942d3a8SSheetal Tigadoli 	 */
8673942d3a8SSheetal Tigadoli 
8683942d3a8SSheetal Tigadoli 	/*Program CRMU Stream ID */
8693942d3a8SSheetal Tigadoli 	mmio_write_32(CRMU_MASTER_AXI_ARUSER_CONFIG,
8703942d3a8SSheetal Tigadoli 			(CRMU_STREAM_ID << CRMU_SID_SHIFT));
8713942d3a8SSheetal Tigadoli 	mmio_write_32(CRMU_MASTER_AXI_AWUSER_CONFIG,
8723942d3a8SSheetal Tigadoli 			(CRMU_STREAM_ID << CRMU_SID_SHIFT));
8733942d3a8SSheetal Tigadoli 
8743942d3a8SSheetal Tigadoli 	/* Create Identity mapping */
8753942d3a8SSheetal Tigadoli 	arm_smmu_create_identity_map(DOMAIN_CRMU);
8763942d3a8SSheetal Tigadoli 
8773942d3a8SSheetal Tigadoli 	/* Enable Client Port for Secure Masters*/
8783942d3a8SSheetal Tigadoli 	arm_smmu_enable_secure_client_port();
8793942d3a8SSheetal Tigadoli }
8803942d3a8SSheetal Tigadoli #endif
8813942d3a8SSheetal Tigadoli 
brcm_fsx_init(void)8823942d3a8SSheetal Tigadoli static void brcm_fsx_init(void)
8833942d3a8SSheetal Tigadoli {
8843942d3a8SSheetal Tigadoli #if defined(USE_FS4) && defined(USE_FS6)
8853942d3a8SSheetal Tigadoli 	#error "USE_FS4 and USE_FS6 should not be used together"
8863942d3a8SSheetal Tigadoli #endif
8873942d3a8SSheetal Tigadoli 
8883942d3a8SSheetal Tigadoli #ifdef USE_FS4
8893942d3a8SSheetal Tigadoli 	fsx_init(eFS4_CRYPTO, FS4_CRYPTO_RING_COUNT, FS4_CRYPTO_DME_COUNT,
8903942d3a8SSheetal Tigadoli 		FS4_CRYPTO_AE_COUNT, FS4_CRYPTO_START_STREAM_ID,
8913942d3a8SSheetal Tigadoli 		FS4_CRYPTO_MSI_DEVICE_ID, FS4_CRYPTO_IDM_IO_CONTROL_DIRECT,
8923942d3a8SSheetal Tigadoli 		FS4_CRYPTO_IDM_RESET_CONTROL, FS4_CRYPTO_BASE,
8933942d3a8SSheetal Tigadoli 		FS4_CRYPTO_DME_BASE);
8943942d3a8SSheetal Tigadoli 
8953942d3a8SSheetal Tigadoli 	fsx_init(eFS4_RAID, FS4_RAID_RING_COUNT, FS4_RAID_DME_COUNT,
8963942d3a8SSheetal Tigadoli 		FS4_RAID_AE_COUNT, FS4_RAID_START_STREAM_ID,
8973942d3a8SSheetal Tigadoli 		FS4_RAID_MSI_DEVICE_ID, FS4_RAID_IDM_IO_CONTROL_DIRECT,
8983942d3a8SSheetal Tigadoli 		FS4_RAID_IDM_RESET_CONTROL, FS4_RAID_BASE,
8993942d3a8SSheetal Tigadoli 		FS4_RAID_DME_BASE);
9003942d3a8SSheetal Tigadoli 
9013942d3a8SSheetal Tigadoli 	fsx_meminit("raid",
9023942d3a8SSheetal Tigadoli 		FS4_RAID_IDM_IO_CONTROL_DIRECT,
9033942d3a8SSheetal Tigadoli 		FS4_RAID_IDM_IO_STATUS);
9043942d3a8SSheetal Tigadoli #endif
9053942d3a8SSheetal Tigadoli }
9063942d3a8SSheetal Tigadoli 
bcm_bl33_pass_info(void)9073942d3a8SSheetal Tigadoli static void bcm_bl33_pass_info(void)
9083942d3a8SSheetal Tigadoli {
9093942d3a8SSheetal Tigadoli 	struct bl33_info *info = (struct bl33_info *)BL33_SHARED_DDR_BASE;
9103942d3a8SSheetal Tigadoli 
9113942d3a8SSheetal Tigadoli 	if (sizeof(*info) > BL33_SHARED_DDR_SIZE)
9123942d3a8SSheetal Tigadoli 		WARN("bl33 shared area not reserved\n");
9133942d3a8SSheetal Tigadoli 
9143942d3a8SSheetal Tigadoli 	info->version = BL33_INFO_VERSION;
9153942d3a8SSheetal Tigadoli 	info->chip.chip_id = PLAT_CHIP_ID_GET;
9163942d3a8SSheetal Tigadoli 	info->chip.rev_id = PLAT_CHIP_REV_GET;
9173942d3a8SSheetal Tigadoli }
9183942d3a8SSheetal Tigadoli 
DEFINE_RENAME_SYSREG_RW_FUNCS(l2ctlr_el1,CORTEX_A72_L2CTLR_EL1)9193942d3a8SSheetal Tigadoli DEFINE_RENAME_SYSREG_RW_FUNCS(l2ctlr_el1, CORTEX_A72_L2CTLR_EL1)
9203942d3a8SSheetal Tigadoli 
9213942d3a8SSheetal Tigadoli void plat_bcm_bl31_early_platform_setup(void *from_bl2,
9223942d3a8SSheetal Tigadoli 					bl_params_t *plat_params_from_bl2)
9233942d3a8SSheetal Tigadoli {
9243942d3a8SSheetal Tigadoli #ifdef BL31_BOOT_PRELOADED_SCP
9253942d3a8SSheetal Tigadoli 	image_info_t scp_image_info;
9263942d3a8SSheetal Tigadoli 
9273942d3a8SSheetal Tigadoli 	scp_image_info.image_base = PRELOADED_SCP_BASE;
9283942d3a8SSheetal Tigadoli 	scp_image_info.image_size = PRELOADED_SCP_SIZE;
9295703c737SSheetal Tigadoli 	plat_bcm_bl2_plat_handle_scp_bl2(&scp_image_info);
9303942d3a8SSheetal Tigadoli #endif
9313942d3a8SSheetal Tigadoli 	/*
9323942d3a8SSheetal Tigadoli 	 * In BL31, logs are saved to DDR and we have much larger space to
9333942d3a8SSheetal Tigadoli 	 * store logs. We can now afford to save all logs >= the 'INFO' level
9343942d3a8SSheetal Tigadoli 	 */
9353942d3a8SSheetal Tigadoli 	bcm_elog_init((void *)BCM_ELOG_BL31_BASE, BCM_ELOG_BL31_SIZE,
9363942d3a8SSheetal Tigadoli 		      LOG_LEVEL_INFO);
9373942d3a8SSheetal Tigadoli 
9383942d3a8SSheetal Tigadoli 	INFO("L2CTLR = 0x%lx\n", read_l2ctlr_el1());
9393942d3a8SSheetal Tigadoli 
9403942d3a8SSheetal Tigadoli 	brcm_timer_sync_init();
9413942d3a8SSheetal Tigadoli 
9423942d3a8SSheetal Tigadoli 	brcm_stingray_dma_pl330_init();
9433942d3a8SSheetal Tigadoli 
9443942d3a8SSheetal Tigadoli 	brcm_stingray_dma_pl330_meminit();
9453942d3a8SSheetal Tigadoli 
9463942d3a8SSheetal Tigadoli 	brcm_stingray_spi_pl022_init(APBS_IDM_IDM_RESET_CONTROL);
9473942d3a8SSheetal Tigadoli 
9483942d3a8SSheetal Tigadoli #ifdef USE_AMAC
9493942d3a8SSheetal Tigadoli 	brcm_stingray_amac_init();
9503942d3a8SSheetal Tigadoli #endif
9513942d3a8SSheetal Tigadoli 
9523942d3a8SSheetal Tigadoli 	brcm_stingray_sdio_init();
9533942d3a8SSheetal Tigadoli 
9543942d3a8SSheetal Tigadoli #ifdef NCSI_IO_DRIVE_STRENGTH_MA
9553942d3a8SSheetal Tigadoli 	brcm_stingray_ncsi_init();
9563942d3a8SSheetal Tigadoli #endif
9573942d3a8SSheetal Tigadoli 
9583942d3a8SSheetal Tigadoli #ifdef USE_USB
9593942d3a8SSheetal Tigadoli 	xhci_phy_init();
9603942d3a8SSheetal Tigadoli #endif
9613942d3a8SSheetal Tigadoli 
9623942d3a8SSheetal Tigadoli #ifdef USE_SATA
9633942d3a8SSheetal Tigadoli 	brcm_stingray_sata_init();
9643942d3a8SSheetal Tigadoli #else
9653942d3a8SSheetal Tigadoli 	poweroff_sata_pll();
9663942d3a8SSheetal Tigadoli #endif
9673942d3a8SSheetal Tigadoli 
9683942d3a8SSheetal Tigadoli 	ccn_pre_init();
9693942d3a8SSheetal Tigadoli 
9703942d3a8SSheetal Tigadoli 	brcm_fsx_init();
9713942d3a8SSheetal Tigadoli 
9723942d3a8SSheetal Tigadoli 	brcm_stingray_smmu_init();
9733942d3a8SSheetal Tigadoli 
9743942d3a8SSheetal Tigadoli 	brcm_stingray_pka_meminit();
9753942d3a8SSheetal Tigadoli 
9763942d3a8SSheetal Tigadoli 	brcm_stingray_crmu_access_init();
9773942d3a8SSheetal Tigadoli 
9783942d3a8SSheetal Tigadoli 	brcm_stingray_scr_init();
9793942d3a8SSheetal Tigadoli 
9803942d3a8SSheetal Tigadoli 	brcm_stingray_hsls_tzpcprot_init();
9813942d3a8SSheetal Tigadoli 
9823942d3a8SSheetal Tigadoli #ifdef USE_I2S
9833942d3a8SSheetal Tigadoli 	brcm_stingray_audio_init();
9843942d3a8SSheetal Tigadoli #endif
9853942d3a8SSheetal Tigadoli 
9863942d3a8SSheetal Tigadoli 	ccn_post_init();
9873942d3a8SSheetal Tigadoli 
9883942d3a8SSheetal Tigadoli 	paxb_init();
9893942d3a8SSheetal Tigadoli 
9903942d3a8SSheetal Tigadoli 	paxc_init();
9913942d3a8SSheetal Tigadoli 
9923942d3a8SSheetal Tigadoli #ifndef BL31_BOOT_PRELOADED_SCP
9933942d3a8SSheetal Tigadoli 	crmu_init();
9943942d3a8SSheetal Tigadoli #endif
9953942d3a8SSheetal Tigadoli 
9963942d3a8SSheetal Tigadoli 	/* Note: this should be last thing because
9973942d3a8SSheetal Tigadoli 	 * FS4 GPV registers only work after FS4 block
9983942d3a8SSheetal Tigadoli 	 * (i.e. crypto,raid,cop) is out of reset.
9993942d3a8SSheetal Tigadoli 	 */
10003942d3a8SSheetal Tigadoli 	brcm_stingray_security_init();
10013942d3a8SSheetal Tigadoli 
10023942d3a8SSheetal Tigadoli 	brcm_gpio_pad_ns_init();
10033942d3a8SSheetal Tigadoli 
10043942d3a8SSheetal Tigadoli #ifndef USE_DDR
10053942d3a8SSheetal Tigadoli 	brcm_stingray_sram_ns_init();
10063942d3a8SSheetal Tigadoli #endif
10073942d3a8SSheetal Tigadoli 
10083942d3a8SSheetal Tigadoli #ifdef BL31_FORCE_CPU_FULL_FREQ
10093942d3a8SSheetal Tigadoli 	bcm_set_ihost_pll_freq(0x0, PLL_FREQ_FULL);
10103942d3a8SSheetal Tigadoli #endif
10113942d3a8SSheetal Tigadoli 
10123942d3a8SSheetal Tigadoli 	brcm_stingray_gain_qspi_control();
10133942d3a8SSheetal Tigadoli 
10143942d3a8SSheetal Tigadoli #ifdef USE_PAXC
10153942d3a8SSheetal Tigadoli 	/*
10163942d3a8SSheetal Tigadoli 	 * Check that the handshake has occurred and report ChiMP status.
10173942d3a8SSheetal Tigadoli 	 * This is required. Otherwise (especially on Palladium)
10183942d3a8SSheetal Tigadoli 	 * Linux might have booted to the pcie stage whereas
10193942d3a8SSheetal Tigadoli 	 * ChiMP has not yet booted. Note that nic_mode case has already
10203942d3a8SSheetal Tigadoli 	 * been considered above.
10213942d3a8SSheetal Tigadoli 	 */
10223942d3a8SSheetal Tigadoli 	if ((boot_source_get() != BOOT_SOURCE_QSPI) &&
10233942d3a8SSheetal Tigadoli 	    (!bcm_chimp_is_nic_mode()) &&
10243942d3a8SSheetal Tigadoli 	    (!bcm_chimp_wait_handshake())
10253942d3a8SSheetal Tigadoli 	   ) {
10263942d3a8SSheetal Tigadoli 		/* Does ChiMP report an error ? */
10273942d3a8SSheetal Tigadoli 		uint32_t err;
10283942d3a8SSheetal Tigadoli 
10293942d3a8SSheetal Tigadoli 		err = bcm_chimp_read_ctrl(CHIMP_REG_CTRL_BPE_STAT_REG);
10303942d3a8SSheetal Tigadoli 		if ((err & CHIMP_ERROR_MASK) == 0)
10313942d3a8SSheetal Tigadoli 		/* ChiMP has not booted yet, but no error reported */
10323942d3a8SSheetal Tigadoli 			WARN("ChiMP not booted yet, but no error reported.\n");
10333942d3a8SSheetal Tigadoli 	}
10343942d3a8SSheetal Tigadoli 
10353942d3a8SSheetal Tigadoli #if DEBUG
10363942d3a8SSheetal Tigadoli 	if (boot_source_get() != BOOT_SOURCE_QSPI)
10373942d3a8SSheetal Tigadoli 		INFO("Current ChiMP Status: 0x%x; bpe_mod reg: 0x%x\n"
10383942d3a8SSheetal Tigadoli 		     "fastboot register: 0x%x; handshake register 0x%x\n",
10393942d3a8SSheetal Tigadoli 		     bcm_chimp_read_ctrl(CHIMP_REG_CTRL_BPE_STAT_REG),
10403942d3a8SSheetal Tigadoli 		     bcm_chimp_read_ctrl(CHIMP_REG_CTRL_BPE_MODE_REG),
10413942d3a8SSheetal Tigadoli 		     bcm_chimp_read_ctrl(CHIMP_REG_CTRL_FSTBOOT_PTR_REG),
10423942d3a8SSheetal Tigadoli 		     bcm_chimp_read(CHIMP_REG_ECO_RESERVED));
10433942d3a8SSheetal Tigadoli #endif /* DEBUG */
10443942d3a8SSheetal Tigadoli #endif
10453942d3a8SSheetal Tigadoli 
10463942d3a8SSheetal Tigadoli #ifdef FS4_DISABLE_CLOCK
10473942d3a8SSheetal Tigadoli 	flush_dcache_range(
10483942d3a8SSheetal Tigadoli 		PLAT_BRCM_TRUSTED_SRAM_BASE,
10493942d3a8SSheetal Tigadoli 		PLAT_BRCM_TRUSTED_SRAM_SIZE);
10503942d3a8SSheetal Tigadoli 	fs4_disable_clocks(true, true, true);
10513942d3a8SSheetal Tigadoli #endif
10523942d3a8SSheetal Tigadoli 
10533942d3a8SSheetal Tigadoli 	/* pass information to BL33 through shared DDR region */
10543942d3a8SSheetal Tigadoli 	bcm_bl33_pass_info();
10553942d3a8SSheetal Tigadoli 
10563942d3a8SSheetal Tigadoli 	/*
10573942d3a8SSheetal Tigadoli 	 * We are not yet at the end of BL31, but we can stop log here so we do
10583942d3a8SSheetal Tigadoli 	 * not need to add 'bcm_elog_exit' to the standard BL31 code. The
10593942d3a8SSheetal Tigadoli 	 * benefit of capturing BL31 logs after this is very minimal in a
10603942d3a8SSheetal Tigadoli 	 * production system
10613942d3a8SSheetal Tigadoli 	 */
10623942d3a8SSheetal Tigadoli 	bcm_elog_exit();
10633942d3a8SSheetal Tigadoli 
10643942d3a8SSheetal Tigadoli #if !BRCM_DISABLE_TRUSTED_WDOG
10653942d3a8SSheetal Tigadoli 	/*
10663942d3a8SSheetal Tigadoli 	 * Secure watchdog was started earlier in BL2, now it's time to stop
10673942d3a8SSheetal Tigadoli 	 * it
10683942d3a8SSheetal Tigadoli 	 */
10693942d3a8SSheetal Tigadoli 	sp805_stop(ARM_SP805_TWDG_BASE);
10703942d3a8SSheetal Tigadoli #endif
10713942d3a8SSheetal Tigadoli }
1072