blob: 35e6f3d1a7fa1cc7d01a87cfc11dfe8d9a2e8a39 [file] [log] [blame]
/* SPDX-License-Identifier: BSD-2-Clause */
/*
* Copyright (c) 2015, Linaro Limited
*/
#ifndef PLATFORM_CONFIG_H
#define PLATFORM_CONFIG_H
#include <mm/generic_ram_layout.h>
/* Make stacks aligned to data cache line length */
#define STACK_ALIGNMENT 64
/* PL011 UART */
#if defined(PLATFORM_FLAVOR_hikey)
#define PL011_UART0_BASE 0xF8015000
#define PL011_UART2_BASE 0xF7112000
#define PL011_UART3_BASE 0xF7113000
#if (CFG_CONSOLE_UART == 3)
#define CONSOLE_UART_BASE PL011_UART3_BASE
#elif (CFG_CONSOLE_UART == 2)
#define CONSOLE_UART_BASE PL011_UART2_BASE
#elif (CFG_CONSOLE_UART == 0)
#define CONSOLE_UART_BASE PL011_UART0_BASE
#else
#error Unknown console UART
#endif
#elif defined(PLATFORM_FLAVOR_hikey960)
#define PL011_UART5_BASE 0xFDF05000
#define PL011_UART6_BASE 0xFFF32000
#if (CFG_CONSOLE_UART == 6)
#define CONSOLE_UART_BASE PL011_UART6_BASE
#elif (CFG_CONSOLE_UART == 5)
#define CONSOLE_UART_BASE PL011_UART5_BASE
#else
#error Unknown console UART
#endif
#else /* PLATFORM_FLAVOR_hikey */
#error Unknown HiKey PLATFORM_FLAVOR
#endif /* PLATFORM_FLAVOR_hikey */
#define CONSOLE_BAUDRATE 115200
#define CONSOLE_UART_CLK_IN_HZ 19200000
/*
* HiKey and HiKey960 memory map
*
* Refer to the default configuration from conf.mk for description below.
*
* TZDRAM is secured (firewalled) by the DDR controller, see ARM-TF, but note
* that security of this type of memory is weak for two reasons:
* 1. It is prone to physical tampering since DRAM is external to the SoC
* 2. It is still somewhat prone to software attacks because the memory
* protection may be reverted by the non-secure kernel with a piece of
* code similar to the one that sets the protection in ARM-TF (we're
* missing a "lockdown" step which would prevent any change to the DDRC
* configuration until the next SoC reset).
* TZSRAM is emulated in the TZDRAM area, because the on-chip SRAM of the
* HiKey SoC is too small to run OP-TEE (72K total with 64K available, see
* "SRAM Memory Region Layout" in ARM-TF plat/hikey/include/hisi_sram_map.h),
* while the SRAM of the HiKey960 SoC is not available to the public at the
* moment.
*
* CFG_WITH_PAGER=n
*
* 0x4000_0000 -
* TA RAM: 14 MiB |
* 0x3F20_0000 | TZDRAM
* TEE RAM: 2 MiB (TEE_RAM_VA_SIZE) |
* 0x3F00_0000 [TZDRAM_BASE, BL32_LOAD_ADDR] -
* Shared memory: 2 MiB |
* 0x3EE0_0000 | DRAM0
* Reserved by UEFI for OP-TEE, unused |
* 0x3EC0_0000 -
* Secure Data Path buffers: 4 MiB | DRAM0 (secure)
* 0x3E80_0000 [CFG_TEE_SDP_MEM_BASE] -
* Reserved by UEFI for OP-TEE, unused |
* 0x3E00_0000 | DRAM0
* Available to Linux |
* 0x0000_0000 [DRAM0_BASE] -
*
* CFG_WITH_PAGER=y
*
* 0x4000_0000 -
* TA RAM: 14 MiB | TZDRAM
* 0x3F20_0000 -
* Unused
* 0x3F03_2000 -
* TEE RAM: 200 KiB | TZSRAM
* 0x3F00_0000 [TZSRAM_BASE, BL32_LOAD_ADDR] -
* Shared memory: 2 MiB |
* 0x3EE0_0000 | DRAM0
* Reserved by UEFI for OP-TEE, unused |
* 0x3EC0_0000 -
* Secure Data Path buffers: 4 MiB | DRAM0 (secure)
* 0x3E80_0000 [CFG_TEE_SDP_MEM_BASE] -
* Reserved by UEFI for OP-TEE, unused |
* 0x3E00_0000 | DRAM0
* Available to Linux |
* 0x0000_0000 [DRAM0_BASE] -
*/
#define DRAM0_BASE 0x00000000
#define DRAM0_SIZE 0x3F000000
#define DRAM0_SIZE_NSEC 0x3E000000
#define DRAM1_BASE 0x40000000
#if defined(PLATFORM_FLAVOR_hikey)
#if (CFG_DRAM_SIZE_GB == 2)
#define DRAM1_SIZE_NSEC 0x40000000
#elif (CFG_DRAM_SIZE_GB == 1)
/* do nothing */
#else
#error Unknown DRAM size
#endif
#elif defined(PLATFORM_FLAVOR_hikey960)
/*
* Physical address ranges for HiKey960 RAM:
* 3G board: 0~3G
* 4G board: 0~3G 3~3.5G 8~8.5G
* 6G board: 0~3G 4~7G
*/
#if (CFG_DRAM_SIZE_GB == 3)
#define DRAM1_SIZE_NSEC 0x80000000
#elif (CFG_DRAM_SIZE_GB == 4)
#define DRAM1_SIZE_NSEC 0xA0000000
#define DRAM2_BASE 0x200000000
#define DRAM2_SIZE_NSEC 0x20000000
#elif (CFG_DRAM_SIZE_GB == 6)
#define DRAM1_SIZE_NSEC 0x80000000
#define DRAM2_BASE 0x100000000
#define DRAM2_SIZE_NSEC 0xC0000000
#else
#error Unknown DRAM size
#endif
#if (CFG_DRAM_SIZE_GB >= 4 && defined(CFG_ARM32_core) && \
defined(CFG_CORE_DYN_SHM) && !defined(CFG_LARGE_PHYS_ADDR))
#error 32-bit TEE with CFG_CORE_DYN_SHM and without CFG_LARGE_PHYS_ADDR \
cannot support boards with 4G RAM or more
#endif
#else /* PLATFORM_FLAVOR_hikey */
#error Unknown HiKey PLATFORM_FLAVOR
#endif /* PLATFORM_FLAVOR_hikey */
#endif /* PLATFORM_CONFIG_H */