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