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 <stdint.h> 94a079c75SCarlo Caione 104a079c75SCarlo Caione #include <platform_def.h> 114a079c75SCarlo Caione 124a079c75SCarlo Caione #include <bl31/interrupt_mgmt.h> 134a079c75SCarlo Caione #include <common/bl_common.h> 144a079c75SCarlo Caione #include <common/debug.h> 154a079c75SCarlo Caione #include <common/ep_info.h> 164a079c75SCarlo Caione #include <drivers/amlogic/meson_console.h> 174a079c75SCarlo Caione #include <lib/mmio.h> 184a079c75SCarlo Caione #include <lib/xlat_tables/xlat_tables_v2.h> 194a079c75SCarlo Caione 204a079c75SCarlo Caione /******************************************************************************* 214a079c75SCarlo Caione * Platform memory map regions 224a079c75SCarlo Caione ******************************************************************************/ 23*9158854aSCarlo Caione #define MAP_NSDRAM0 MAP_REGION_FLAT(AML_NSDRAM0_BASE, \ 24*9158854aSCarlo Caione AML_NSDRAM0_SIZE, \ 254a079c75SCarlo Caione MT_MEMORY | MT_RW | MT_NS) 264a079c75SCarlo Caione 27*9158854aSCarlo Caione #define MAP_NSDRAM1 MAP_REGION_FLAT(AML_NSDRAM1_BASE, \ 28*9158854aSCarlo Caione AML_NSDRAM1_SIZE, \ 294a079c75SCarlo Caione MT_MEMORY | MT_RW | MT_NS) 304a079c75SCarlo Caione 31*9158854aSCarlo Caione #define MAP_SEC_DEVICE0 MAP_REGION_FLAT(AML_SEC_DEVICE0_BASE, \ 32*9158854aSCarlo Caione AML_SEC_DEVICE0_SIZE, \ 334a079c75SCarlo Caione MT_DEVICE | MT_RW | MT_SECURE) 344a079c75SCarlo Caione 35*9158854aSCarlo Caione #define MAP_SEC_DEVICE1 MAP_REGION_FLAT(AML_SEC_DEVICE1_BASE, \ 36*9158854aSCarlo Caione AML_SEC_DEVICE1_SIZE, \ 374a079c75SCarlo Caione MT_DEVICE | MT_RW | MT_SECURE) 384a079c75SCarlo Caione 39*9158854aSCarlo Caione #define MAP_TZRAM MAP_REGION_FLAT(AML_TZRAM_BASE, \ 40*9158854aSCarlo Caione AML_TZRAM_SIZE, \ 414a079c75SCarlo Caione MT_DEVICE | MT_RW | MT_SECURE) 424a079c75SCarlo Caione 43*9158854aSCarlo Caione #define MAP_SEC_DEVICE2 MAP_REGION_FLAT(AML_SEC_DEVICE2_BASE, \ 44*9158854aSCarlo Caione AML_SEC_DEVICE2_SIZE, \ 454a079c75SCarlo Caione MT_DEVICE | MT_RW | MT_SECURE) 464a079c75SCarlo Caione 47*9158854aSCarlo Caione #define MAP_SEC_DEVICE3 MAP_REGION_FLAT(AML_SEC_DEVICE3_BASE, \ 48*9158854aSCarlo Caione AML_SEC_DEVICE3_SIZE, \ 494a079c75SCarlo Caione MT_DEVICE | MT_RW | MT_SECURE) 504a079c75SCarlo Caione 514a079c75SCarlo Caione static const mmap_region_t gxbb_mmap[] = { 524a079c75SCarlo Caione MAP_NSDRAM0, 534a079c75SCarlo Caione MAP_NSDRAM1, 544a079c75SCarlo Caione MAP_SEC_DEVICE0, 554a079c75SCarlo Caione MAP_SEC_DEVICE1, 564a079c75SCarlo Caione MAP_TZRAM, 574a079c75SCarlo Caione MAP_SEC_DEVICE2, 584a079c75SCarlo Caione MAP_SEC_DEVICE3, 594a079c75SCarlo Caione {0} 604a079c75SCarlo Caione }; 614a079c75SCarlo Caione 624a079c75SCarlo Caione /******************************************************************************* 634a079c75SCarlo Caione * Per-image regions 644a079c75SCarlo Caione ******************************************************************************/ 654a079c75SCarlo Caione #define MAP_BL31 MAP_REGION_FLAT(BL31_BASE, \ 664a079c75SCarlo Caione BL31_END - BL31_BASE, \ 674a079c75SCarlo Caione MT_MEMORY | MT_RW | MT_SECURE) 684a079c75SCarlo Caione 694a079c75SCarlo Caione #define MAP_BL_CODE MAP_REGION_FLAT(BL_CODE_BASE, \ 704a079c75SCarlo Caione BL_CODE_END - BL_CODE_BASE, \ 714a079c75SCarlo Caione MT_CODE | MT_SECURE) 724a079c75SCarlo Caione 734a079c75SCarlo Caione #define MAP_BL_RO_DATA MAP_REGION_FLAT(BL_RO_DATA_BASE, \ 744a079c75SCarlo Caione BL_RO_DATA_END - BL_RO_DATA_BASE, \ 754a079c75SCarlo Caione MT_RO_DATA | MT_SECURE) 764a079c75SCarlo Caione 774a079c75SCarlo Caione #define MAP_BL_COHERENT MAP_REGION_FLAT(BL_COHERENT_RAM_BASE, \ 784a079c75SCarlo Caione BL_COHERENT_RAM_END - BL_COHERENT_RAM_BASE, \ 794a079c75SCarlo Caione MT_DEVICE | MT_RW | MT_SECURE) 804a079c75SCarlo Caione 814a079c75SCarlo Caione /******************************************************************************* 824a079c75SCarlo Caione * Function that sets up the translation tables. 834a079c75SCarlo Caione ******************************************************************************/ 84010fdc1bSCarlo Caione void aml_setup_page_tables(void) 854a079c75SCarlo Caione { 864a079c75SCarlo Caione #if IMAGE_BL31 874a079c75SCarlo Caione const mmap_region_t gxbb_bl_mmap[] = { 884a079c75SCarlo Caione MAP_BL31, 894a079c75SCarlo Caione MAP_BL_CODE, 904a079c75SCarlo Caione MAP_BL_RO_DATA, 914a079c75SCarlo Caione #if USE_COHERENT_MEM 924a079c75SCarlo Caione MAP_BL_COHERENT, 934a079c75SCarlo Caione #endif 944a079c75SCarlo Caione {0} 954a079c75SCarlo Caione }; 964a079c75SCarlo Caione #endif 974a079c75SCarlo Caione 984a079c75SCarlo Caione mmap_add(gxbb_bl_mmap); 994a079c75SCarlo Caione 1004a079c75SCarlo Caione mmap_add(gxbb_mmap); 1014a079c75SCarlo Caione 1024a079c75SCarlo Caione init_xlat_tables(); 1034a079c75SCarlo Caione } 1044a079c75SCarlo Caione 1054a079c75SCarlo Caione /******************************************************************************* 1064a079c75SCarlo Caione * Function that sets up the console 1074a079c75SCarlo Caione ******************************************************************************/ 1084a079c75SCarlo Caione static console_meson_t gxbb_console; 1094a079c75SCarlo Caione 110010fdc1bSCarlo Caione void aml_console_init(void) 1114a079c75SCarlo Caione { 112f681c676SCarlo Caione int rc = console_meson_register(AML_UART0_AO_BASE, 113f681c676SCarlo Caione AML_UART0_AO_CLK_IN_HZ, 114f681c676SCarlo Caione AML_UART_BAUDRATE, 1154a079c75SCarlo Caione &gxbb_console); 1164a079c75SCarlo Caione if (rc == 0) { 1174a079c75SCarlo Caione /* 1184a079c75SCarlo Caione * The crash console doesn't use the multi console API, it uses 1194a079c75SCarlo Caione * the core console functions directly. It is safe to call panic 1204a079c75SCarlo Caione * and let it print debug information. 1214a079c75SCarlo Caione */ 1224a079c75SCarlo Caione panic(); 1234a079c75SCarlo Caione } 1244a079c75SCarlo Caione 1254a079c75SCarlo Caione console_set_scope(&gxbb_console.console, 1264a079c75SCarlo Caione CONSOLE_FLAG_BOOT | CONSOLE_FLAG_RUNTIME); 1274a079c75SCarlo Caione } 1284a079c75SCarlo Caione 1294a079c75SCarlo Caione /******************************************************************************* 1304a079c75SCarlo Caione * Function that returns the system counter frequency 1314a079c75SCarlo Caione ******************************************************************************/ 1324a079c75SCarlo Caione unsigned int plat_get_syscnt_freq2(void) 1334a079c75SCarlo Caione { 1344a079c75SCarlo Caione uint32_t val; 1354a079c75SCarlo Caione 136*9158854aSCarlo Caione val = mmio_read_32(AML_SYS_CPU_CFG7); 1374a079c75SCarlo Caione val &= 0xFDFFFFFF; 138*9158854aSCarlo Caione mmio_write_32(AML_SYS_CPU_CFG7, val); 1394a079c75SCarlo Caione 140*9158854aSCarlo Caione val = mmio_read_32(AML_AO_TIMESTAMP_CNTL); 1414a079c75SCarlo Caione val &= 0xFFFFFE00; 142*9158854aSCarlo Caione mmio_write_32(AML_AO_TIMESTAMP_CNTL, val); 1434a079c75SCarlo Caione 144*9158854aSCarlo Caione return AML_OSC24M_CLK_IN_HZ; 1454a079c75SCarlo Caione } 146