1*91f16700Schasinglulu /* 2*91f16700Schasinglulu * Copyright (c) 2013-2016, ARM Limited and Contributors. All rights reserved. 3*91f16700Schasinglulu * 4*91f16700Schasinglulu * SPDX-License-Identifier: BSD-3-Clause 5*91f16700Schasinglulu */ 6*91f16700Schasinglulu 7*91f16700Schasinglulu #include <platform_def.h> 8*91f16700Schasinglulu 9*91f16700Schasinglulu #include <arch_helpers.h> 10*91f16700Schasinglulu #include <common/bl_common.h> 11*91f16700Schasinglulu #include <common/debug.h> 12*91f16700Schasinglulu #include <drivers/arm/cci.h> 13*91f16700Schasinglulu #include <lib/utils.h> 14*91f16700Schasinglulu #include <lib/xlat_tables/xlat_tables.h> 15*91f16700Schasinglulu 16*91f16700Schasinglulu #include <mt8173_def.h> 17*91f16700Schasinglulu 18*91f16700Schasinglulu static const int cci_map[] = { 19*91f16700Schasinglulu PLAT_MT_CCI_CLUSTER0_SL_IFACE_IX, 20*91f16700Schasinglulu PLAT_MT_CCI_CLUSTER1_SL_IFACE_IX 21*91f16700Schasinglulu }; 22*91f16700Schasinglulu 23*91f16700Schasinglulu /* Table of regions to map using the MMU. */ 24*91f16700Schasinglulu const mmap_region_t plat_mmap[] = { 25*91f16700Schasinglulu /* for TF text, RO, RW */ 26*91f16700Schasinglulu MAP_REGION_FLAT(TZRAM_BASE, TZRAM_SIZE, 27*91f16700Schasinglulu MT_MEMORY | MT_RW | MT_SECURE), 28*91f16700Schasinglulu MAP_REGION_FLAT(MTK_DEV_RNG0_BASE, MTK_DEV_RNG0_SIZE, 29*91f16700Schasinglulu MT_DEVICE | MT_RW | MT_SECURE), 30*91f16700Schasinglulu MAP_REGION_FLAT(MTK_DEV_RNG1_BASE, MTK_DEV_RNG1_SIZE, 31*91f16700Schasinglulu MT_DEVICE | MT_RW | MT_SECURE), 32*91f16700Schasinglulu { 0 } 33*91f16700Schasinglulu 34*91f16700Schasinglulu }; 35*91f16700Schasinglulu 36*91f16700Schasinglulu /******************************************************************************* 37*91f16700Schasinglulu * Macro generating the code for the function setting up the pagetables as per 38*91f16700Schasinglulu * the platform memory map & initialize the mmu, for the given exception level 39*91f16700Schasinglulu ******************************************************************************/ 40*91f16700Schasinglulu #define DEFINE_CONFIGURE_MMU_EL(_el) \ 41*91f16700Schasinglulu void plat_configure_mmu_el ## _el(unsigned long total_base, \ 42*91f16700Schasinglulu unsigned long total_size, \ 43*91f16700Schasinglulu unsigned long ro_start, \ 44*91f16700Schasinglulu unsigned long ro_limit, \ 45*91f16700Schasinglulu unsigned long coh_start, \ 46*91f16700Schasinglulu unsigned long coh_limit) \ 47*91f16700Schasinglulu { \ 48*91f16700Schasinglulu mmap_add_region(total_base, total_base, \ 49*91f16700Schasinglulu total_size, \ 50*91f16700Schasinglulu MT_MEMORY | MT_RW | MT_SECURE); \ 51*91f16700Schasinglulu mmap_add_region(ro_start, ro_start, \ 52*91f16700Schasinglulu ro_limit - ro_start, \ 53*91f16700Schasinglulu MT_MEMORY | MT_RO | MT_SECURE); \ 54*91f16700Schasinglulu mmap_add_region(coh_start, coh_start, \ 55*91f16700Schasinglulu coh_limit - coh_start, \ 56*91f16700Schasinglulu MT_DEVICE | MT_RW | MT_SECURE); \ 57*91f16700Schasinglulu mmap_add(plat_mmap); \ 58*91f16700Schasinglulu init_xlat_tables(); \ 59*91f16700Schasinglulu \ 60*91f16700Schasinglulu enable_mmu_el ## _el(0); \ 61*91f16700Schasinglulu } 62*91f16700Schasinglulu 63*91f16700Schasinglulu /* Define EL3 variants of the function initialising the MMU */ 64*91f16700Schasinglulu DEFINE_CONFIGURE_MMU_EL(3) 65*91f16700Schasinglulu 66*91f16700Schasinglulu unsigned int plat_get_syscnt_freq2(void) 67*91f16700Schasinglulu { 68*91f16700Schasinglulu return SYS_COUNTER_FREQ_IN_TICKS; 69*91f16700Schasinglulu } 70*91f16700Schasinglulu 71*91f16700Schasinglulu void plat_cci_init(void) 72*91f16700Schasinglulu { 73*91f16700Schasinglulu /* Initialize CCI driver */ 74*91f16700Schasinglulu cci_init(PLAT_MT_CCI_BASE, cci_map, ARRAY_SIZE(cci_map)); 75*91f16700Schasinglulu } 76*91f16700Schasinglulu 77*91f16700Schasinglulu void plat_cci_enable(void) 78*91f16700Schasinglulu { 79*91f16700Schasinglulu /* 80*91f16700Schasinglulu * Enable CCI coherency for this cluster. 81*91f16700Schasinglulu * No need for locks as no other cpu is active at the moment. 82*91f16700Schasinglulu */ 83*91f16700Schasinglulu cci_enable_snoop_dvm_reqs(MPIDR_AFFLVL1_VAL(read_mpidr())); 84*91f16700Schasinglulu } 85*91f16700Schasinglulu 86*91f16700Schasinglulu void plat_cci_disable(void) 87*91f16700Schasinglulu { 88*91f16700Schasinglulu cci_disable_snoop_dvm_reqs(MPIDR_AFFLVL1_VAL(read_mpidr())); 89*91f16700Schasinglulu } 90