1*afd241e7SCarlo Caione /* 2*afd241e7SCarlo Caione * Copyright (c) 2020, ARM Limited and Contributors. All rights reserved. 3*afd241e7SCarlo Caione * 4*afd241e7SCarlo Caione * SPDX-License-Identifier: BSD-3-Clause 5*afd241e7SCarlo Caione */ 6*afd241e7SCarlo Caione 7*afd241e7SCarlo Caione #include <assert.h> 8*afd241e7SCarlo Caione #include <bl31/interrupt_mgmt.h> 9*afd241e7SCarlo Caione #include <common/bl_common.h> 10*afd241e7SCarlo Caione #include <common/ep_info.h> 11*afd241e7SCarlo Caione #include <lib/mmio.h> 12*afd241e7SCarlo Caione #include <lib/xlat_tables/xlat_tables_v2.h> 13*afd241e7SCarlo Caione #include <platform_def.h> 14*afd241e7SCarlo Caione #include <stdint.h> 15*afd241e7SCarlo Caione 16*afd241e7SCarlo Caione /******************************************************************************* 17*afd241e7SCarlo Caione * Platform memory map regions 18*afd241e7SCarlo Caione ******************************************************************************/ 19*afd241e7SCarlo Caione #define MAP_NSDRAM0 MAP_REGION_FLAT(AML_NSDRAM0_BASE, \ 20*afd241e7SCarlo Caione AML_NSDRAM0_SIZE, \ 21*afd241e7SCarlo Caione MT_MEMORY | MT_RW | MT_NS) 22*afd241e7SCarlo Caione 23*afd241e7SCarlo Caione #define MAP_NS_SHARE_MEM MAP_REGION_FLAT(AML_NS_SHARE_MEM_BASE, \ 24*afd241e7SCarlo Caione AML_NS_SHARE_MEM_SIZE, \ 25*afd241e7SCarlo Caione MT_MEMORY | MT_RW | MT_NS) 26*afd241e7SCarlo Caione 27*afd241e7SCarlo Caione #define MAP_SEC_SHARE_MEM MAP_REGION_FLAT(AML_SEC_SHARE_MEM_BASE, \ 28*afd241e7SCarlo Caione AML_SEC_SHARE_MEM_SIZE, \ 29*afd241e7SCarlo Caione MT_MEMORY | MT_RW | MT_SECURE) 30*afd241e7SCarlo Caione 31*afd241e7SCarlo Caione #define MAP_SEC_DEVICE0 MAP_REGION_FLAT(AML_SEC_DEVICE0_BASE, \ 32*afd241e7SCarlo Caione AML_SEC_DEVICE0_SIZE, \ 33*afd241e7SCarlo Caione MT_DEVICE | MT_RW) 34*afd241e7SCarlo Caione 35*afd241e7SCarlo Caione #define MAP_GIC_DEVICE MAP_REGION_FLAT(AML_GIC_DEVICE_BASE, \ 36*afd241e7SCarlo Caione AML_GIC_DEVICE_SIZE, \ 37*afd241e7SCarlo Caione MT_DEVICE | MT_RW | MT_SECURE) 38*afd241e7SCarlo Caione 39*afd241e7SCarlo Caione #define MAP_SEC_DEVICE1 MAP_REGION_FLAT(AML_SEC_DEVICE1_BASE, \ 40*afd241e7SCarlo Caione AML_SEC_DEVICE1_SIZE, \ 41*afd241e7SCarlo Caione MT_DEVICE | MT_RW | MT_SECURE) 42*afd241e7SCarlo Caione 43*afd241e7SCarlo Caione #define MAP_SEC_DEVICE2 MAP_REGION_FLAT(AML_SEC_DEVICE2_BASE, \ 44*afd241e7SCarlo Caione AML_SEC_DEVICE2_SIZE, \ 45*afd241e7SCarlo Caione MT_DEVICE | MT_RW | MT_SECURE) 46*afd241e7SCarlo Caione 47*afd241e7SCarlo Caione #define MAP_TZRAM MAP_REGION_FLAT(AML_TZRAM_BASE, \ 48*afd241e7SCarlo Caione AML_TZRAM_SIZE, \ 49*afd241e7SCarlo Caione MT_DEVICE | MT_RW | MT_SECURE) 50*afd241e7SCarlo Caione 51*afd241e7SCarlo Caione static const mmap_region_t axg_mmap[] = { 52*afd241e7SCarlo Caione MAP_NSDRAM0, 53*afd241e7SCarlo Caione MAP_NS_SHARE_MEM, 54*afd241e7SCarlo Caione MAP_SEC_SHARE_MEM, 55*afd241e7SCarlo Caione MAP_SEC_DEVICE0, 56*afd241e7SCarlo Caione MAP_GIC_DEVICE, 57*afd241e7SCarlo Caione MAP_SEC_DEVICE1, 58*afd241e7SCarlo Caione MAP_SEC_DEVICE2, 59*afd241e7SCarlo Caione MAP_TZRAM, 60*afd241e7SCarlo Caione {0} 61*afd241e7SCarlo Caione }; 62*afd241e7SCarlo Caione 63*afd241e7SCarlo Caione /******************************************************************************* 64*afd241e7SCarlo Caione * Per-image regions 65*afd241e7SCarlo Caione ******************************************************************************/ 66*afd241e7SCarlo Caione #define MAP_BL31 MAP_REGION_FLAT(BL31_BASE, \ 67*afd241e7SCarlo Caione BL31_END - BL31_BASE, \ 68*afd241e7SCarlo Caione MT_MEMORY | MT_RW | MT_SECURE) 69*afd241e7SCarlo Caione 70*afd241e7SCarlo Caione #define MAP_BL_CODE MAP_REGION_FLAT(BL_CODE_BASE, \ 71*afd241e7SCarlo Caione BL_CODE_END - BL_CODE_BASE, \ 72*afd241e7SCarlo Caione MT_CODE | MT_SECURE) 73*afd241e7SCarlo Caione 74*afd241e7SCarlo Caione #define MAP_BL_RO_DATA MAP_REGION_FLAT(BL_RO_DATA_BASE, \ 75*afd241e7SCarlo Caione BL_RO_DATA_END - BL_RO_DATA_BASE, \ 76*afd241e7SCarlo Caione MT_RO_DATA | MT_SECURE) 77*afd241e7SCarlo Caione 78*afd241e7SCarlo Caione #define MAP_BL_COHERENT MAP_REGION_FLAT(BL_COHERENT_RAM_BASE, \ 79*afd241e7SCarlo Caione BL_COHERENT_RAM_END - BL_COHERENT_RAM_BASE, \ 80*afd241e7SCarlo Caione MT_DEVICE | MT_RW | MT_SECURE) 81*afd241e7SCarlo Caione 82*afd241e7SCarlo Caione /******************************************************************************* 83*afd241e7SCarlo Caione * Function that sets up the translation tables. 84*afd241e7SCarlo Caione ******************************************************************************/ 85*afd241e7SCarlo Caione void aml_setup_page_tables(void) 86*afd241e7SCarlo Caione { 87*afd241e7SCarlo Caione #if IMAGE_BL31 88*afd241e7SCarlo Caione const mmap_region_t axg_bl_mmap[] = { 89*afd241e7SCarlo Caione MAP_BL31, 90*afd241e7SCarlo Caione MAP_BL_CODE, 91*afd241e7SCarlo Caione MAP_BL_RO_DATA, 92*afd241e7SCarlo Caione #if USE_COHERENT_MEM 93*afd241e7SCarlo Caione MAP_BL_COHERENT, 94*afd241e7SCarlo Caione #endif 95*afd241e7SCarlo Caione {0} 96*afd241e7SCarlo Caione }; 97*afd241e7SCarlo Caione #endif 98*afd241e7SCarlo Caione 99*afd241e7SCarlo Caione mmap_add(axg_bl_mmap); 100*afd241e7SCarlo Caione 101*afd241e7SCarlo Caione mmap_add(axg_mmap); 102*afd241e7SCarlo Caione 103*afd241e7SCarlo Caione init_xlat_tables(); 104*afd241e7SCarlo Caione } 105*afd241e7SCarlo Caione 106*afd241e7SCarlo Caione /******************************************************************************* 107*afd241e7SCarlo Caione * Function that returns the system counter frequency 108*afd241e7SCarlo Caione ******************************************************************************/ 109*afd241e7SCarlo Caione unsigned int plat_get_syscnt_freq2(void) 110*afd241e7SCarlo Caione { 111*afd241e7SCarlo Caione mmio_clrbits_32(AML_SYS_CPU_CFG7, PLAT_SYS_CPU_CFG7); 112*afd241e7SCarlo Caione mmio_clrbits_32(AML_AO_TIMESTAMP_CNTL, PLAT_AO_TIMESTAMP_CNTL); 113*afd241e7SCarlo Caione 114*afd241e7SCarlo Caione return AML_OSC24M_CLK_IN_HZ; 115*afd241e7SCarlo Caione } 116