14a079c75SCarlo Caione /*
24a079c75SCarlo Caione * Copyright (c) 2018-2019, ARM Limited and Contributors. All rights reserved.
34a079c75SCarlo Caione *
44a079c75SCarlo Caione * SPDX-License-Identifier: BSD-3-Clause
54a079c75SCarlo Caione */
64a079c75SCarlo Caione
74a079c75SCarlo Caione #include <assert.h>
84a079c75SCarlo Caione #include <bl31/interrupt_mgmt.h>
94a079c75SCarlo Caione #include <common/bl_common.h>
104a079c75SCarlo Caione #include <common/ep_info.h>
114a079c75SCarlo Caione #include <lib/mmio.h>
124a079c75SCarlo Caione #include <lib/xlat_tables/xlat_tables_v2.h>
13*b5621874SCarlo Caione #include <platform_def.h>
14*b5621874SCarlo Caione #include <stdint.h>
154a079c75SCarlo Caione
164a079c75SCarlo Caione /*******************************************************************************
174a079c75SCarlo Caione * Platform memory map regions
184a079c75SCarlo Caione ******************************************************************************/
199158854aSCarlo Caione #define MAP_NSDRAM0 MAP_REGION_FLAT(AML_NSDRAM0_BASE, \
209158854aSCarlo Caione AML_NSDRAM0_SIZE, \
214a079c75SCarlo Caione MT_MEMORY | MT_RW | MT_NS)
224a079c75SCarlo Caione
239158854aSCarlo Caione #define MAP_NSDRAM1 MAP_REGION_FLAT(AML_NSDRAM1_BASE, \
249158854aSCarlo Caione AML_NSDRAM1_SIZE, \
254a079c75SCarlo Caione MT_MEMORY | MT_RW | MT_NS)
264a079c75SCarlo Caione
279158854aSCarlo Caione #define MAP_SEC_DEVICE0 MAP_REGION_FLAT(AML_SEC_DEVICE0_BASE, \
289158854aSCarlo Caione AML_SEC_DEVICE0_SIZE, \
294a079c75SCarlo Caione MT_DEVICE | MT_RW | MT_SECURE)
304a079c75SCarlo Caione
319158854aSCarlo Caione #define MAP_SEC_DEVICE1 MAP_REGION_FLAT(AML_SEC_DEVICE1_BASE, \
329158854aSCarlo Caione AML_SEC_DEVICE1_SIZE, \
334a079c75SCarlo Caione MT_DEVICE | MT_RW | MT_SECURE)
344a079c75SCarlo Caione
359158854aSCarlo Caione #define MAP_TZRAM MAP_REGION_FLAT(AML_TZRAM_BASE, \
369158854aSCarlo Caione AML_TZRAM_SIZE, \
374a079c75SCarlo Caione MT_DEVICE | MT_RW | MT_SECURE)
384a079c75SCarlo Caione
399158854aSCarlo Caione #define MAP_SEC_DEVICE2 MAP_REGION_FLAT(AML_SEC_DEVICE2_BASE, \
409158854aSCarlo Caione AML_SEC_DEVICE2_SIZE, \
414a079c75SCarlo Caione MT_DEVICE | MT_RW | MT_SECURE)
424a079c75SCarlo Caione
439158854aSCarlo Caione #define MAP_SEC_DEVICE3 MAP_REGION_FLAT(AML_SEC_DEVICE3_BASE, \
449158854aSCarlo Caione AML_SEC_DEVICE3_SIZE, \
454a079c75SCarlo Caione MT_DEVICE | MT_RW | MT_SECURE)
464a079c75SCarlo Caione
474a079c75SCarlo Caione static const mmap_region_t gxbb_mmap[] = {
484a079c75SCarlo Caione MAP_NSDRAM0,
494a079c75SCarlo Caione MAP_NSDRAM1,
504a079c75SCarlo Caione MAP_SEC_DEVICE0,
514a079c75SCarlo Caione MAP_SEC_DEVICE1,
524a079c75SCarlo Caione MAP_TZRAM,
534a079c75SCarlo Caione MAP_SEC_DEVICE2,
544a079c75SCarlo Caione MAP_SEC_DEVICE3,
554a079c75SCarlo Caione {0}
564a079c75SCarlo Caione };
574a079c75SCarlo Caione
584a079c75SCarlo Caione /*******************************************************************************
594a079c75SCarlo Caione * Per-image regions
604a079c75SCarlo Caione ******************************************************************************/
614a079c75SCarlo Caione #define MAP_BL31 MAP_REGION_FLAT(BL31_BASE, \
624a079c75SCarlo Caione BL31_END - BL31_BASE, \
634a079c75SCarlo Caione MT_MEMORY | MT_RW | MT_SECURE)
644a079c75SCarlo Caione
654a079c75SCarlo Caione #define MAP_BL_CODE MAP_REGION_FLAT(BL_CODE_BASE, \
664a079c75SCarlo Caione BL_CODE_END - BL_CODE_BASE, \
674a079c75SCarlo Caione MT_CODE | MT_SECURE)
684a079c75SCarlo Caione
694a079c75SCarlo Caione #define MAP_BL_RO_DATA MAP_REGION_FLAT(BL_RO_DATA_BASE, \
704a079c75SCarlo Caione BL_RO_DATA_END - BL_RO_DATA_BASE, \
714a079c75SCarlo Caione MT_RO_DATA | MT_SECURE)
724a079c75SCarlo Caione
734a079c75SCarlo Caione #define MAP_BL_COHERENT MAP_REGION_FLAT(BL_COHERENT_RAM_BASE, \
744a079c75SCarlo Caione BL_COHERENT_RAM_END - BL_COHERENT_RAM_BASE, \
754a079c75SCarlo Caione MT_DEVICE | MT_RW | MT_SECURE)
764a079c75SCarlo Caione
774a079c75SCarlo Caione /*******************************************************************************
784a079c75SCarlo Caione * Function that sets up the translation tables.
794a079c75SCarlo Caione ******************************************************************************/
aml_setup_page_tables(void)80010fdc1bSCarlo Caione void aml_setup_page_tables(void)
814a079c75SCarlo Caione {
824a079c75SCarlo Caione #if IMAGE_BL31
834a079c75SCarlo Caione const mmap_region_t gxbb_bl_mmap[] = {
844a079c75SCarlo Caione MAP_BL31,
854a079c75SCarlo Caione MAP_BL_CODE,
864a079c75SCarlo Caione MAP_BL_RO_DATA,
874a079c75SCarlo Caione #if USE_COHERENT_MEM
884a079c75SCarlo Caione MAP_BL_COHERENT,
894a079c75SCarlo Caione #endif
904a079c75SCarlo Caione {0}
914a079c75SCarlo Caione };
924a079c75SCarlo Caione #endif
934a079c75SCarlo Caione
944a079c75SCarlo Caione mmap_add(gxbb_bl_mmap);
954a079c75SCarlo Caione
964a079c75SCarlo Caione mmap_add(gxbb_mmap);
974a079c75SCarlo Caione
984a079c75SCarlo Caione init_xlat_tables();
994a079c75SCarlo Caione }
1004a079c75SCarlo Caione
1014a079c75SCarlo Caione /*******************************************************************************
1024a079c75SCarlo Caione * Function that returns the system counter frequency
1034a079c75SCarlo Caione ******************************************************************************/
plat_get_syscnt_freq2(void)1044a079c75SCarlo Caione unsigned int plat_get_syscnt_freq2(void)
1054a079c75SCarlo Caione {
1064a079c75SCarlo Caione uint32_t val;
1074a079c75SCarlo Caione
1089158854aSCarlo Caione val = mmio_read_32(AML_SYS_CPU_CFG7);
1094a079c75SCarlo Caione val &= 0xFDFFFFFF;
1109158854aSCarlo Caione mmio_write_32(AML_SYS_CPU_CFG7, val);
1114a079c75SCarlo Caione
1129158854aSCarlo Caione val = mmio_read_32(AML_AO_TIMESTAMP_CNTL);
1134a079c75SCarlo Caione val &= 0xFFFFFE00;
1149158854aSCarlo Caione mmio_write_32(AML_AO_TIMESTAMP_CNTL, val);
1154a079c75SCarlo Caione
1169158854aSCarlo Caione return AML_OSC24M_CLK_IN_HZ;
1174a079c75SCarlo Caione }
118