1b4315306SDan Handley /* 2*5fb061e7SGary Morrison * Copyright (c) 2015-2021, ARM Limited and Contributors. All rights reserved. 3b4315306SDan Handley * 482cb2c1aSdp-arm * SPDX-License-Identifier: BSD-3-Clause 5b4315306SDan Handley */ 6e02f469fSSathees Balya #ifndef V2M_DEF_H 7e02f469fSSathees Balya #define V2M_DEF_H 8b4315306SDan Handley 9bd9344f6SAntonio Nino Diaz #include <lib/utils_def.h> 10b4315306SDan Handley 11*5fb061e7SGary Morrison /* Base address of all V2M */ 12*5fb061e7SGary Morrison #ifdef PLAT_V2M_OFFSET 13*5fb061e7SGary Morrison #define V2M_OFFSET PLAT_V2M_OFFSET 14*5fb061e7SGary Morrison #else 15*5fb061e7SGary Morrison #define V2M_OFFSET UL(0) 16*5fb061e7SGary Morrison #endif 17*5fb061e7SGary Morrison 18b4315306SDan Handley /* V2M motherboard system registers & offsets */ 19e02f469fSSathees Balya #define V2M_SYSREGS_BASE UL(0x1c010000) 20e02f469fSSathees Balya #define V2M_SYS_ID UL(0x0) 21e02f469fSSathees Balya #define V2M_SYS_SWITCH UL(0x4) 22e02f469fSSathees Balya #define V2M_SYS_LED UL(0x8) 23e02f469fSSathees Balya #define V2M_SYS_NVFLAGS UL(0x38) 24e02f469fSSathees Balya #define V2M_SYS_NVFLAGSSET UL(0x38) 25e02f469fSSathees Balya #define V2M_SYS_NVFLAGSCLR UL(0x3c) 26e02f469fSSathees Balya #define V2M_SYS_CFGDATA UL(0xa0) 27e02f469fSSathees Balya #define V2M_SYS_CFGCTRL UL(0xa4) 28e02f469fSSathees Balya #define V2M_SYS_CFGSTATUS UL(0xa8) 29b4315306SDan Handley 30e02f469fSSathees Balya #define V2M_CFGCTRL_START BIT_32(31) 31e02f469fSSathees Balya #define V2M_CFGCTRL_RW BIT_32(30) 32b4315306SDan Handley #define V2M_CFGCTRL_FUNC_SHIFT 20 33e02f469fSSathees Balya #define V2M_CFGCTRL_FUNC(fn) ((fn) << V2M_CFGCTRL_FUNC_SHIFT) 34e02f469fSSathees Balya #define V2M_FUNC_CLK_GEN U(0x01) 35e02f469fSSathees Balya #define V2M_FUNC_TEMP U(0x04) 36e02f469fSSathees Balya #define V2M_FUNC_DB_RESET U(0x05) 37e02f469fSSathees Balya #define V2M_FUNC_SCC_CFG U(0x06) 38e02f469fSSathees Balya #define V2M_FUNC_SHUTDOWN U(0x08) 39e02f469fSSathees Balya #define V2M_FUNC_REBOOT U(0x09) 40b4315306SDan Handley 414da6f6cdSSathees Balya /* NVFLAGS in the V2M motherboard which is preserved after a watchdog reset */ 424da6f6cdSSathees Balya #define V2M_SYS_NVFLAGS_ADDR (V2M_SYSREGS_BASE + V2M_SYS_NVFLAGS) 434da6f6cdSSathees Balya 44b4315306SDan Handley /* 45b4315306SDan Handley * V2M sysled bit definitions. The values written to this 46b4315306SDan Handley * register are defined in arch.h & runtime_svc.h. Only 47b4315306SDan Handley * used by the primary cpu to diagnose any cold boot issues. 48b4315306SDan Handley * 49b4315306SDan Handley * SYS_LED[0] - Security state (S=0/NS=1) 50b4315306SDan Handley * SYS_LED[2:1] - Exception Level (EL3-EL0) 51b4315306SDan Handley * SYS_LED[7:3] - Exception Class (Sync/Async & origin) 52b4315306SDan Handley * 53b4315306SDan Handley */ 54b4315306SDan Handley #define V2M_SYS_LED_SS_SHIFT 0x0 55b4315306SDan Handley #define V2M_SYS_LED_EL_SHIFT 0x1 56b4315306SDan Handley #define V2M_SYS_LED_EC_SHIFT 0x3 57b4315306SDan Handley 58f21c6321SAntonio Nino Diaz #define V2M_SYS_LED_SS_MASK U(0x1) 59f21c6321SAntonio Nino Diaz #define V2M_SYS_LED_EL_MASK U(0x3) 60f21c6321SAntonio Nino Diaz #define V2M_SYS_LED_EC_MASK U(0x1f) 61b4315306SDan Handley 62b4315306SDan Handley /* V2M sysid register bits */ 63b4315306SDan Handley #define V2M_SYS_ID_REV_SHIFT 28 64b4315306SDan Handley #define V2M_SYS_ID_HBI_SHIFT 16 65b4315306SDan Handley #define V2M_SYS_ID_BLD_SHIFT 12 66b4315306SDan Handley #define V2M_SYS_ID_ARCH_SHIFT 8 67b4315306SDan Handley #define V2M_SYS_ID_FPGA_SHIFT 0 68b4315306SDan Handley 69f21c6321SAntonio Nino Diaz #define V2M_SYS_ID_REV_MASK U(0xf) 70f21c6321SAntonio Nino Diaz #define V2M_SYS_ID_HBI_MASK U(0xfff) 71f21c6321SAntonio Nino Diaz #define V2M_SYS_ID_BLD_MASK U(0xf) 72f21c6321SAntonio Nino Diaz #define V2M_SYS_ID_ARCH_MASK U(0xf) 73f21c6321SAntonio Nino Diaz #define V2M_SYS_ID_FPGA_MASK U(0xff) 74b4315306SDan Handley 75b4315306SDan Handley #define V2M_SYS_ID_BLD_LENGTH 4 76b4315306SDan Handley 77b4315306SDan Handley 78b4315306SDan Handley /* NOR Flash */ 79*5fb061e7SGary Morrison #define V2M_FLASH0_BASE (V2M_OFFSET + UL(0x08000000)) 80f21c6321SAntonio Nino Diaz #define V2M_FLASH0_SIZE UL(0x04000000) 81f21c6321SAntonio Nino Diaz #define V2M_FLASH_BLOCK_SIZE UL(0x00040000) /* 256 KB */ 82b4315306SDan Handley 83*5fb061e7SGary Morrison #define V2M_IOFPGA_BASE (V2M_OFFSET + UL(0x1c000000)) 84f21c6321SAntonio Nino Diaz #define V2M_IOFPGA_SIZE UL(0x03000000) 85b4315306SDan Handley 86b4315306SDan Handley /* PL011 UART related constants */ 87*5fb061e7SGary Morrison #define V2M_IOFPGA_UART0_BASE (V2M_OFFSET + UL(0x1c090000)) 88*5fb061e7SGary Morrison #define V2M_IOFPGA_UART1_BASE (V2M_OFFSET + UL(0x1c0a0000)) 89*5fb061e7SGary Morrison #define V2M_IOFPGA_UART2_BASE (V2M_OFFSET + UL(0x1c0b0000)) 90*5fb061e7SGary Morrison #define V2M_IOFPGA_UART3_BASE (V2M_OFFSET + UL(0x1c0c0000)) 91b4315306SDan Handley 92b4315306SDan Handley #define V2M_IOFPGA_UART0_CLK_IN_HZ 24000000 93b4315306SDan Handley #define V2M_IOFPGA_UART1_CLK_IN_HZ 24000000 94b4315306SDan Handley #define V2M_IOFPGA_UART2_CLK_IN_HZ 24000000 95b4315306SDan Handley #define V2M_IOFPGA_UART3_CLK_IN_HZ 24000000 96b4315306SDan Handley 97b49b3221SRyan Harkin /* SP804 timer related constants */ 98*5fb061e7SGary Morrison #define V2M_SP804_TIMER0_BASE (V2M_OFFSET + UL(0x1C110000)) 99*5fb061e7SGary Morrison #define V2M_SP804_TIMER1_BASE (V2M_OFFSET + UL(0x1C120000)) 100b4315306SDan Handley 101540a5ba8SJuan Castillo /* SP810 controller */ 102*5fb061e7SGary Morrison #define V2M_SP810_BASE (V2M_OFFSET + UL(0x1c020000)) 103f21c6321SAntonio Nino Diaz #define V2M_SP810_CTRL_TIM0_SEL BIT_32(15) 104f21c6321SAntonio Nino Diaz #define V2M_SP810_CTRL_TIM1_SEL BIT_32(17) 105f21c6321SAntonio Nino Diaz #define V2M_SP810_CTRL_TIM2_SEL BIT_32(19) 106f21c6321SAntonio Nino Diaz #define V2M_SP810_CTRL_TIM3_SEL BIT_32(21) 107540a5ba8SJuan Castillo 10891fad655SSandrine Bailleux /* 10991fad655SSandrine Bailleux * The flash can be mapped either as read-only or read-write. 11091fad655SSandrine Bailleux * 11191fad655SSandrine Bailleux * If it is read-write then it should also be mapped as device memory because 11291fad655SSandrine Bailleux * NOR flash programming involves sending a fixed, ordered sequence of commands. 11391fad655SSandrine Bailleux * 11491fad655SSandrine Bailleux * If it is read-only then it should also be mapped as: 11591fad655SSandrine Bailleux * - Normal memory, because reading from NOR flash is transparent, it is like 11691fad655SSandrine Bailleux * reading from RAM. 11791fad655SSandrine Bailleux * - Non-executable by default. If some parts of the flash need to be executable 11891fad655SSandrine Bailleux * then platform code is responsible for re-mapping the appropriate portion 11991fad655SSandrine Bailleux * of it as executable. 12091fad655SSandrine Bailleux */ 1217b4c1405SJuan Castillo #define V2M_MAP_FLASH0_RW MAP_REGION_FLAT(V2M_FLASH0_BASE,\ 1227b4c1405SJuan Castillo V2M_FLASH0_SIZE, \ 1237b4c1405SJuan Castillo MT_DEVICE | MT_RW | MT_SECURE) 1247b4c1405SJuan Castillo 1257b4c1405SJuan Castillo #define V2M_MAP_FLASH0_RO MAP_REGION_FLAT(V2M_FLASH0_BASE,\ 126b4315306SDan Handley V2M_FLASH0_SIZE, \ 12791fad655SSandrine Bailleux MT_RO_DATA | MT_SECURE) 128b4315306SDan Handley 129b4315306SDan Handley #define V2M_MAP_IOFPGA MAP_REGION_FLAT(V2M_IOFPGA_BASE,\ 130b4315306SDan Handley V2M_IOFPGA_SIZE, \ 131b4315306SDan Handley MT_DEVICE | MT_RW | MT_SECURE) 132b4315306SDan Handley 133e29efeb1SAntonio Nino Diaz /* Region equivalent to V2M_MAP_IOFPGA suitable for mapping at EL0 */ 134e29efeb1SAntonio Nino Diaz #define V2M_MAP_IOFPGA_EL0 MAP_REGION_FLAT( \ 135e29efeb1SAntonio Nino Diaz V2M_IOFPGA_BASE, \ 136e29efeb1SAntonio Nino Diaz V2M_IOFPGA_SIZE, \ 137e29efeb1SAntonio Nino Diaz MT_DEVICE | MT_RW | MT_SECURE | MT_USER) 138b4315306SDan Handley 139b4315306SDan Handley 140e02f469fSSathees Balya #endif /* V2M_DEF_H */ 141