146f9b2c3SPeng Fan /* 246f9b2c3SPeng Fan * Copyright (c) 2018, ARM Limited and Contributors. All rights reserved. 346f9b2c3SPeng Fan * 446f9b2c3SPeng Fan * SPDX-License-Identifier: BSD-3-Clause 546f9b2c3SPeng Fan */ 646f9b2c3SPeng Fan 746f9b2c3SPeng Fan #ifndef TZC380_H 846f9b2c3SPeng Fan #define TZC380_H 946f9b2c3SPeng Fan 1009d40e0eSAntonio Nino Diaz #include <drivers/arm/tzc_common.h> 1109d40e0eSAntonio Nino Diaz #include <lib/utils_def.h> 1246f9b2c3SPeng Fan 1346f9b2c3SPeng Fan #define TZC380_CONFIGURATION_OFF U(0x000) 1446f9b2c3SPeng Fan #define ACTION_OFF U(0x004) 1546f9b2c3SPeng Fan #define LOCKDOWN_RANGE_OFF U(0x008) 1646f9b2c3SPeng Fan #define LOCKDOWN_SELECT_OFF U(0x00C) 1746f9b2c3SPeng Fan #define INT_STATUS U(0x010) 1846f9b2c3SPeng Fan #define INT_CLEAR U(0x014) 1946f9b2c3SPeng Fan 2046f9b2c3SPeng Fan #define FAIL_ADDRESS_LOW_OFF U(0x020) 2146f9b2c3SPeng Fan #define FAIL_ADDRESS_HIGH_OFF U(0x024) 2246f9b2c3SPeng Fan #define FAIL_CONTROL_OFF U(0x028) 2346f9b2c3SPeng Fan #define FAIL_ID U(0x02c) 2446f9b2c3SPeng Fan 2546f9b2c3SPeng Fan #define SPECULATION_CTRL_OFF U(0x030) 2646f9b2c3SPeng Fan #define SECURITY_INV_EN_OFF U(0x034) 2746f9b2c3SPeng Fan 2846f9b2c3SPeng Fan #define REGION_SETUP_LOW_OFF(n) U(0x100 + (n) * 0x10) 2946f9b2c3SPeng Fan #define REGION_SETUP_HIGH_OFF(n) U(0x104 + (n) * 0x10) 3046f9b2c3SPeng Fan #define REGION_ATTRIBUTES_OFF(n) U(0x108 + (n) * 0x10) 3146f9b2c3SPeng Fan 3246f9b2c3SPeng Fan #define BUILD_CONFIG_AW_SHIFT 8 3346f9b2c3SPeng Fan #define BUILD_CONFIG_AW_MASK U(0x3f) 3446f9b2c3SPeng Fan #define BUILD_CONFIG_NR_SHIFT 0 3546f9b2c3SPeng Fan #define BUILD_CONFIG_NR_MASK U(0xf) 3646f9b2c3SPeng Fan 3746f9b2c3SPeng Fan #define ACTION_RV_SHIFT 0 3846f9b2c3SPeng Fan #define ACTION_RV_MASK U(0x3) 3946f9b2c3SPeng Fan #define ACTION_RV_LOWOK U(0x0) 4046f9b2c3SPeng Fan #define ACTION_RV_LOWERR U(0x1) 4146f9b2c3SPeng Fan #define ACTION_RV_HIGHOK U(0x2) 4246f9b2c3SPeng Fan #define ACTION_RV_HIGHERR U(0x3) 4346f9b2c3SPeng Fan 4446f9b2c3SPeng Fan /* Speculation is enabled by default. */ 4546f9b2c3SPeng Fan #define SPECULATION_CTRL_WRITE_DISABLE BIT_32(1) 4646f9b2c3SPeng Fan #define SPECULATION_CTRL_READ_DISABLE BIT_32(0) 4746f9b2c3SPeng Fan 4846f9b2c3SPeng Fan #define INT_STATUS_OVERRUN_SHIFT 1 4946f9b2c3SPeng Fan #define INT_STATUS_OVERRUN_MASK U(0x1) 5046f9b2c3SPeng Fan #define INT_STATUS_STATUS_SHIFT 0 5146f9b2c3SPeng Fan #define INT_STATUS_STATUS_MASK U(0x1) 5246f9b2c3SPeng Fan 5346f9b2c3SPeng Fan #define INT_CLEAR_CLEAR_SHIFT 0 5446f9b2c3SPeng Fan #define INT_CLEAR_CLEAR_MASK U(0x1) 5546f9b2c3SPeng Fan 5646f9b2c3SPeng Fan #define TZC380_COMPONENT_ID U(0xb105f00d) 5746f9b2c3SPeng Fan #define TZC380_PERIPH_ID_LOW U(0x001bb380) 5846f9b2c3SPeng Fan #define TZC380_PERIPH_ID_HIGH U(0x00000004) 5946f9b2c3SPeng Fan 6046f9b2c3SPeng Fan #define TZC_SP_NS_W BIT_32(0) 6146f9b2c3SPeng Fan #define TZC_SP_NS_R BIT_32(1) 6246f9b2c3SPeng Fan #define TZC_SP_S_W BIT_32(2) 6346f9b2c3SPeng Fan #define TZC_SP_S_R BIT_32(3) 6446f9b2c3SPeng Fan 6546f9b2c3SPeng Fan #define TZC_ATTR_SP_SHIFT 28 6646f9b2c3SPeng Fan #define TZC_ATTR_SP_ALL ((TZC_SP_S_W | TZC_SP_S_R | TZC_SP_NS_W | \ 6746f9b2c3SPeng Fan TZC_SP_NS_R) << TZC_ATTR_SP_SHIFT) 6846f9b2c3SPeng Fan #define TZC_ATTR_SP_S_RW ((TZC_SP_S_W | TZC_SP_S_R) << \ 6946f9b2c3SPeng Fan TZC_ATTR_SP_SHIFT) 7046f9b2c3SPeng Fan #define TZC_ATTR_SP_NS_RW ((TZC_SP_NS_W | TZC_SP_NS_R) << \ 7146f9b2c3SPeng Fan TZC_ATTR_SP_SHIFT) 7246f9b2c3SPeng Fan 7346f9b2c3SPeng Fan #define TZC_REGION_SIZE_32K U(0xe) 7446f9b2c3SPeng Fan #define TZC_REGION_SIZE_64K U(0xf) 7546f9b2c3SPeng Fan #define TZC_REGION_SIZE_128K U(0x10) 7646f9b2c3SPeng Fan #define TZC_REGION_SIZE_256K U(0x11) 7746f9b2c3SPeng Fan #define TZC_REGION_SIZE_512K U(0x12) 7846f9b2c3SPeng Fan #define TZC_REGION_SIZE_1M U(0x13) 7946f9b2c3SPeng Fan #define TZC_REGION_SIZE_2M U(0x14) 8046f9b2c3SPeng Fan #define TZC_REGION_SIZE_4M U(0x15) 8146f9b2c3SPeng Fan #define TZC_REGION_SIZE_8M U(0x16) 8246f9b2c3SPeng Fan #define TZC_REGION_SIZE_16M U(0x17) 8346f9b2c3SPeng Fan #define TZC_REGION_SIZE_32M U(0x18) 8446f9b2c3SPeng Fan #define TZC_REGION_SIZE_64M U(0x19) 8546f9b2c3SPeng Fan #define TZC_REGION_SIZE_128M U(0x1a) 8646f9b2c3SPeng Fan #define TZC_REGION_SIZE_256M U(0x1b) 8746f9b2c3SPeng Fan #define TZC_REGION_SIZE_512M U(0x1c) 8846f9b2c3SPeng Fan #define TZC_REGION_SIZE_1G U(0x1d) 8946f9b2c3SPeng Fan #define TZC_REGION_SIZE_2G U(0x1e) 9046f9b2c3SPeng Fan #define TZC_REGION_SIZE_4G U(0x1f) 9146f9b2c3SPeng Fan #define TZC_REGION_SIZE_8G U(0x20) 9246f9b2c3SPeng Fan #define TZC_REGION_SIZE_16G U(0x21) 9346f9b2c3SPeng Fan #define TZC_REGION_SIZE_32G U(0x22) 9446f9b2c3SPeng Fan #define TZC_REGION_SIZE_64G U(0x23) 9546f9b2c3SPeng Fan #define TZC_REGION_SIZE_128G U(0x24) 9646f9b2c3SPeng Fan #define TZC_REGION_SIZE_256G U(0x25) 9746f9b2c3SPeng Fan #define TZC_REGION_SIZE_512G U(0x26) 9846f9b2c3SPeng Fan #define TZC_REGION_SIZE_1T U(0x27) 9946f9b2c3SPeng Fan #define TZC_REGION_SIZE_2T U(0x28) 10046f9b2c3SPeng Fan #define TZC_REGION_SIZE_4T U(0x29) 10146f9b2c3SPeng Fan #define TZC_REGION_SIZE_8T U(0x2a) 10246f9b2c3SPeng Fan #define TZC_REGION_SIZE_16T U(0x2b) 10346f9b2c3SPeng Fan #define TZC_REGION_SIZE_32T U(0x2c) 10446f9b2c3SPeng Fan #define TZC_REGION_SIZE_64T U(0x2d) 10546f9b2c3SPeng Fan #define TZC_REGION_SIZE_128T U(0x2e) 10646f9b2c3SPeng Fan #define TZC_REGION_SIZE_256T U(0x2f) 10746f9b2c3SPeng Fan #define TZC_REGION_SIZE_512T U(0x30) 10846f9b2c3SPeng Fan #define TZC_REGION_SIZE_1P U(0x31) 10946f9b2c3SPeng Fan #define TZC_REGION_SIZE_2P U(0x32) 11046f9b2c3SPeng Fan #define TZC_REGION_SIZE_4P U(0x33) 11146f9b2c3SPeng Fan #define TZC_REGION_SIZE_8P U(0x34) 11246f9b2c3SPeng Fan #define TZC_REGION_SIZE_16P U(0x35) 11346f9b2c3SPeng Fan #define TZC_REGION_SIZE_32P U(0x36) 11446f9b2c3SPeng Fan #define TZC_REGION_SIZE_64P U(0x37) 11546f9b2c3SPeng Fan #define TZC_REGION_SIZE_128P U(0x38) 11646f9b2c3SPeng Fan #define TZC_REGION_SIZE_256P U(0x39) 11746f9b2c3SPeng Fan #define TZC_REGION_SIZE_512P U(0x3a) 11846f9b2c3SPeng Fan #define TZC_REGION_SIZE_1E U(0x3b) 11946f9b2c3SPeng Fan #define TZC_REGION_SIZE_2E U(0x3c) 12046f9b2c3SPeng Fan #define TZC_REGION_SIZE_4E U(0x3d) 12146f9b2c3SPeng Fan #define TZC_REGION_SIZE_8E U(0x3e) 12246f9b2c3SPeng Fan #define TZC_REGION_SIZE_16E U(0x3f) 12346f9b2c3SPeng Fan 124*fdafe2b5SJiafei Pan #define TZC_SUBREGION_DIS_SHIFT 0x8 125*fdafe2b5SJiafei Pan #define TZC_SUBREGION_DIS_MASK U(0xff) 126*fdafe2b5SJiafei Pan #define TZC_ATTR_SUBREG_DIS(s) (((s) & TZC_SUBREGION_DIS_MASK) \ 127*fdafe2b5SJiafei Pan << TZC_SUBREGION_DIS_SHIFT) 128*fdafe2b5SJiafei Pan 12946f9b2c3SPeng Fan #define TZC_REGION_SIZE_SHIFT 0x1 13046f9b2c3SPeng Fan #define TZC_REGION_SIZE_MASK U(0x7e) 13146f9b2c3SPeng Fan #define TZC_ATTR_REGION_SIZE(s) ((s) << TZC_REGION_SIZE_SHIFT) 13246f9b2c3SPeng Fan 13346f9b2c3SPeng Fan #define TZC_ATTR_REGION_EN_SHIFT 0x0 13446f9b2c3SPeng Fan #define TZC_ATTR_REGION_EN_MASK U(0x1) 13546f9b2c3SPeng Fan 13646f9b2c3SPeng Fan #define TZC_ATTR_REGION_EN 13746f9b2c3SPeng Fan #define TZC_ATTR_REGION_ENABLE U(0x1) 13846f9b2c3SPeng Fan #define TZC_ATTR_REGION_DISABLE U(0x0) 13946f9b2c3SPeng Fan 14046f9b2c3SPeng Fan #define REGION_MAX 16 14146f9b2c3SPeng Fan 14246f9b2c3SPeng Fan void tzc380_init(uintptr_t base); 14346f9b2c3SPeng Fan void tzc380_configure_region(uint8_t region, 14446f9b2c3SPeng Fan uintptr_t region_base, 14546f9b2c3SPeng Fan unsigned int attr); 146cc69cfd2SAmbroise Vincent void tzc380_set_action(unsigned int action); tzc_init(uintptr_t base)14746f9b2c3SPeng Fanstatic inline void tzc_init(uintptr_t base) 14846f9b2c3SPeng Fan { 14946f9b2c3SPeng Fan tzc380_init(base); 15046f9b2c3SPeng Fan } 15146f9b2c3SPeng Fan tzc_configure_region(uint8_t region,uintptr_t region_base,unsigned int attr)15246f9b2c3SPeng Fanstatic inline void tzc_configure_region(uint8_t region, 15346f9b2c3SPeng Fan uintptr_t region_base, 15446f9b2c3SPeng Fan unsigned int attr) 15546f9b2c3SPeng Fan { 15646f9b2c3SPeng Fan tzc380_configure_region(region, region_base, attr); 15746f9b2c3SPeng Fan } 15846f9b2c3SPeng Fan tzc_set_action(unsigned int action)159cc69cfd2SAmbroise Vincentstatic inline void tzc_set_action(unsigned int action) 16046f9b2c3SPeng Fan { 16146f9b2c3SPeng Fan tzc380_set_action(action); 16246f9b2c3SPeng Fan } 16346f9b2c3SPeng Fan 16446f9b2c3SPeng Fan #endif /* TZC380_H */ 165