1b4315306SDan Handley /* 25fb061e7SGary 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 115fb061e7SGary Morrison /* Base address of all V2M */ 125fb061e7SGary Morrison #ifdef PLAT_V2M_OFFSET 135fb061e7SGary Morrison #define V2M_OFFSET PLAT_V2M_OFFSET 145fb061e7SGary Morrison #else 155fb061e7SGary Morrison #define V2M_OFFSET UL(0) 165fb061e7SGary Morrison #endif 175fb061e7SGary Morrison 18b4315306SDan Handley /* V2M motherboard system registers & offsets */ 19e02f469fSSathees Balya #define V2M_SYSREGS_BASE UL(0x1c010000) 20*9fb76763Slevi.yun #define V2M_SYSREGS_SIZE UL(0x00010000) 21e02f469fSSathees Balya #define V2M_SYS_ID UL(0x0) 22e02f469fSSathees Balya #define V2M_SYS_SWITCH UL(0x4) 23e02f469fSSathees Balya #define V2M_SYS_LED UL(0x8) 24e02f469fSSathees Balya #define V2M_SYS_NVFLAGS UL(0x38) 25e02f469fSSathees Balya #define V2M_SYS_NVFLAGSSET UL(0x38) 26e02f469fSSathees Balya #define V2M_SYS_NVFLAGSCLR UL(0x3c) 27e02f469fSSathees Balya #define V2M_SYS_CFGDATA UL(0xa0) 28e02f469fSSathees Balya #define V2M_SYS_CFGCTRL UL(0xa4) 29e02f469fSSathees Balya #define V2M_SYS_CFGSTATUS UL(0xa8) 30b4315306SDan Handley 31e02f469fSSathees Balya #define V2M_CFGCTRL_START BIT_32(31) 32e02f469fSSathees Balya #define V2M_CFGCTRL_RW BIT_32(30) 33b4315306SDan Handley #define V2M_CFGCTRL_FUNC_SHIFT 20 34e02f469fSSathees Balya #define V2M_CFGCTRL_FUNC(fn) ((fn) << V2M_CFGCTRL_FUNC_SHIFT) 35e02f469fSSathees Balya #define V2M_FUNC_CLK_GEN U(0x01) 36e02f469fSSathees Balya #define V2M_FUNC_TEMP U(0x04) 37e02f469fSSathees Balya #define V2M_FUNC_DB_RESET U(0x05) 38e02f469fSSathees Balya #define V2M_FUNC_SCC_CFG U(0x06) 39e02f469fSSathees Balya #define V2M_FUNC_SHUTDOWN U(0x08) 40e02f469fSSathees Balya #define V2M_FUNC_REBOOT U(0x09) 41b4315306SDan Handley 424da6f6cdSSathees Balya /* NVFLAGS in the V2M motherboard which is preserved after a watchdog reset */ 434da6f6cdSSathees Balya #define V2M_SYS_NVFLAGS_ADDR (V2M_SYSREGS_BASE + V2M_SYS_NVFLAGS) 444da6f6cdSSathees Balya 45b4315306SDan Handley /* 46b4315306SDan Handley * V2M sysled bit definitions. The values written to this 47b4315306SDan Handley * register are defined in arch.h & runtime_svc.h. Only 48b4315306SDan Handley * used by the primary cpu to diagnose any cold boot issues. 49b4315306SDan Handley * 50b4315306SDan Handley * SYS_LED[0] - Security state (S=0/NS=1) 51b4315306SDan Handley * SYS_LED[2:1] - Exception Level (EL3-EL0) 52b4315306SDan Handley * SYS_LED[7:3] - Exception Class (Sync/Async & origin) 53b4315306SDan Handley * 54b4315306SDan Handley */ 55b4315306SDan Handley #define V2M_SYS_LED_SS_SHIFT 0x0 56b4315306SDan Handley #define V2M_SYS_LED_EL_SHIFT 0x1 57b4315306SDan Handley #define V2M_SYS_LED_EC_SHIFT 0x3 58b4315306SDan Handley 59f21c6321SAntonio Nino Diaz #define V2M_SYS_LED_SS_MASK U(0x1) 60f21c6321SAntonio Nino Diaz #define V2M_SYS_LED_EL_MASK U(0x3) 61f21c6321SAntonio Nino Diaz #define V2M_SYS_LED_EC_MASK U(0x1f) 62b4315306SDan Handley 63b4315306SDan Handley /* V2M sysid register bits */ 64b4315306SDan Handley #define V2M_SYS_ID_REV_SHIFT 28 65b4315306SDan Handley #define V2M_SYS_ID_HBI_SHIFT 16 66b4315306SDan Handley #define V2M_SYS_ID_BLD_SHIFT 12 67b4315306SDan Handley #define V2M_SYS_ID_ARCH_SHIFT 8 68b4315306SDan Handley #define V2M_SYS_ID_FPGA_SHIFT 0 69b4315306SDan Handley 70f21c6321SAntonio Nino Diaz #define V2M_SYS_ID_REV_MASK U(0xf) 71f21c6321SAntonio Nino Diaz #define V2M_SYS_ID_HBI_MASK U(0xfff) 72f21c6321SAntonio Nino Diaz #define V2M_SYS_ID_BLD_MASK U(0xf) 73f21c6321SAntonio Nino Diaz #define V2M_SYS_ID_ARCH_MASK U(0xf) 74f21c6321SAntonio Nino Diaz #define V2M_SYS_ID_FPGA_MASK U(0xff) 75b4315306SDan Handley 76b4315306SDan Handley #define V2M_SYS_ID_BLD_LENGTH 4 77b4315306SDan Handley 78b4315306SDan Handley 79b4315306SDan Handley /* NOR Flash */ 805fb061e7SGary Morrison #define V2M_FLASH0_BASE (V2M_OFFSET + UL(0x08000000)) 81f21c6321SAntonio Nino Diaz #define V2M_FLASH0_SIZE UL(0x04000000) 82*9fb76763Slevi.yun #define V2M_FLASH1_BASE (V2M_OFFSET + UL(0x0c000000)) 83*9fb76763Slevi.yun #define V2M_FLASH1_SIZE UL(0x04000000) 84f21c6321SAntonio Nino Diaz #define V2M_FLASH_BLOCK_SIZE UL(0x00040000) /* 256 KB */ 85b4315306SDan Handley 865fb061e7SGary Morrison #define V2M_IOFPGA_BASE (V2M_OFFSET + UL(0x1c000000)) 87f21c6321SAntonio Nino Diaz #define V2M_IOFPGA_SIZE UL(0x03000000) 88b4315306SDan Handley 89b4315306SDan Handley /* PL011 UART related constants */ 905fb061e7SGary Morrison #define V2M_IOFPGA_UART0_BASE (V2M_OFFSET + UL(0x1c090000)) 915fb061e7SGary Morrison #define V2M_IOFPGA_UART1_BASE (V2M_OFFSET + UL(0x1c0a0000)) 925fb061e7SGary Morrison #define V2M_IOFPGA_UART2_BASE (V2M_OFFSET + UL(0x1c0b0000)) 935fb061e7SGary Morrison #define V2M_IOFPGA_UART3_BASE (V2M_OFFSET + UL(0x1c0c0000)) 94b4315306SDan Handley 95b4315306SDan Handley #define V2M_IOFPGA_UART0_CLK_IN_HZ 24000000 96b4315306SDan Handley #define V2M_IOFPGA_UART1_CLK_IN_HZ 24000000 97b4315306SDan Handley #define V2M_IOFPGA_UART2_CLK_IN_HZ 24000000 98b4315306SDan Handley #define V2M_IOFPGA_UART3_CLK_IN_HZ 24000000 99b4315306SDan Handley 100b49b3221SRyan Harkin /* SP804 timer related constants */ 1015fb061e7SGary Morrison #define V2M_SP804_TIMER0_BASE (V2M_OFFSET + UL(0x1C110000)) 1025fb061e7SGary Morrison #define V2M_SP804_TIMER1_BASE (V2M_OFFSET + UL(0x1C120000)) 103b4315306SDan Handley 104540a5ba8SJuan Castillo /* SP810 controller */ 1055fb061e7SGary Morrison #define V2M_SP810_BASE (V2M_OFFSET + UL(0x1c020000)) 106f21c6321SAntonio Nino Diaz #define V2M_SP810_CTRL_TIM0_SEL BIT_32(15) 107f21c6321SAntonio Nino Diaz #define V2M_SP810_CTRL_TIM1_SEL BIT_32(17) 108f21c6321SAntonio Nino Diaz #define V2M_SP810_CTRL_TIM2_SEL BIT_32(19) 109f21c6321SAntonio Nino Diaz #define V2M_SP810_CTRL_TIM3_SEL BIT_32(21) 110540a5ba8SJuan Castillo 11191fad655SSandrine Bailleux /* 11291fad655SSandrine Bailleux * The flash can be mapped either as read-only or read-write. 11391fad655SSandrine Bailleux * 11491fad655SSandrine Bailleux * If it is read-write then it should also be mapped as device memory because 11591fad655SSandrine Bailleux * NOR flash programming involves sending a fixed, ordered sequence of commands. 11691fad655SSandrine Bailleux * 11791fad655SSandrine Bailleux * If it is read-only then it should also be mapped as: 11891fad655SSandrine Bailleux * - Normal memory, because reading from NOR flash is transparent, it is like 11991fad655SSandrine Bailleux * reading from RAM. 12091fad655SSandrine Bailleux * - Non-executable by default. If some parts of the flash need to be executable 12191fad655SSandrine Bailleux * then platform code is responsible for re-mapping the appropriate portion 12291fad655SSandrine Bailleux * of it as executable. 12391fad655SSandrine Bailleux */ 1247b4c1405SJuan Castillo #define V2M_MAP_FLASH0_RW MAP_REGION_FLAT(V2M_FLASH0_BASE,\ 1257b4c1405SJuan Castillo V2M_FLASH0_SIZE, \ 1267b4c1405SJuan Castillo MT_DEVICE | MT_RW | MT_SECURE) 1277b4c1405SJuan Castillo 1287b4c1405SJuan Castillo #define V2M_MAP_FLASH0_RO MAP_REGION_FLAT(V2M_FLASH0_BASE,\ 129b4315306SDan Handley V2M_FLASH0_SIZE, \ 13091fad655SSandrine Bailleux MT_RO_DATA | MT_SECURE) 131b4315306SDan Handley 132*9fb76763Slevi.yun #define V2M_MAP_FLASH1_RW MAP_REGION_FLAT(V2M_FLASH1_BASE,\ 133*9fb76763Slevi.yun V2M_FLASH1_SIZE, \ 134*9fb76763Slevi.yun MT_DEVICE | MT_RW | MT_SECURE) 135*9fb76763Slevi.yun 136*9fb76763Slevi.yun #define V2M_MAP_FLASH1_RO MAP_REGION_FLAT(V2M_FLASH1_BASE,\ 137*9fb76763Slevi.yun V2M_FLASH1_SIZE, \ 138*9fb76763Slevi.yun MT_RO_DATA | MT_SECURE) 139*9fb76763Slevi.yun 140b4315306SDan Handley #define V2M_MAP_IOFPGA MAP_REGION_FLAT(V2M_IOFPGA_BASE,\ 141b4315306SDan Handley V2M_IOFPGA_SIZE, \ 142b4315306SDan Handley MT_DEVICE | MT_RW | MT_SECURE) 143b4315306SDan Handley 144e29efeb1SAntonio Nino Diaz /* Region equivalent to V2M_MAP_IOFPGA suitable for mapping at EL0 */ 145e29efeb1SAntonio Nino Diaz #define V2M_MAP_IOFPGA_EL0 MAP_REGION_FLAT( \ 146e29efeb1SAntonio Nino Diaz V2M_IOFPGA_BASE, \ 147e29efeb1SAntonio Nino Diaz V2M_IOFPGA_SIZE, \ 148e29efeb1SAntonio Nino Diaz MT_DEVICE | MT_RW | MT_SECURE | MT_USER) 149b4315306SDan Handley 150*9fb76763Slevi.yun #define V2M_MAP_SECURE_SYSTEMREG_EL0 MAP_REGION_FLAT( \ 151*9fb76763Slevi.yun V2M_SYSREGS_BASE, \ 152*9fb76763Slevi.yun V2M_SYSREGS_SIZE, \ 153*9fb76763Slevi.yun MT_DEVICE | MT_RW | MT_SECURE | MT_USER) 154*9fb76763Slevi.yun 155*9fb76763Slevi.yun #define V2M_MAP_FLASH0_RW_EL0 MAP_REGION_FLAT( \ 156*9fb76763Slevi.yun V2M_FLASH0_BASE, \ 157*9fb76763Slevi.yun V2M_FLASH0_SIZE, \ 158*9fb76763Slevi.yun MT_DEVICE | MT_RW | MT_SECURE | MT_USER) 159*9fb76763Slevi.yun 160*9fb76763Slevi.yun #define V2M_MAP_FLASH1_RW_EL0 MAP_REGION_FLAT( \ 161*9fb76763Slevi.yun V2M_FLASH1_BASE, \ 162*9fb76763Slevi.yun V2M_FLASH1_SIZE, \ 163*9fb76763Slevi.yun MT_DEVICE | MT_RW | MT_SECURE | MT_USER) 164b4315306SDan Handley 165e02f469fSSathees Balya #endif /* V2M_DEF_H */ 166