14122151fSVarun Wadekar /* 206803cfdSPritesh Raithatha * Copyright (c) 2016-2017, ARM Limited and Contributors. All rights reserved. 3a391d494SPritesh Raithatha * Copyright (c) 2020, NVIDIA Corporation. All rights reserved. 44122151fSVarun Wadekar * 582cb2c1aSdp-arm * SPDX-License-Identifier: BSD-3-Clause 64122151fSVarun Wadekar */ 74122151fSVarun Wadekar 8c3cf06f1SAntonio Nino Diaz #ifndef SMMU_H 9c3cf06f1SAntonio Nino Diaz #define SMMU_H 104122151fSVarun Wadekar 1109d40e0eSAntonio Nino Diaz #include <lib/mmio.h> 1209d40e0eSAntonio Nino Diaz 1306803cfdSPritesh Raithatha #include <memctrl_v2.h> 144122151fSVarun Wadekar #include <tegra_def.h> 154122151fSVarun Wadekar 1650e91633SAnthony Zhou #define SMMU_CBn_ACTLR (0x4U) 174122151fSVarun Wadekar 184122151fSVarun Wadekar /******************************************************************************* 194122151fSVarun Wadekar * SMMU Global Secure Aux. Configuration Register 204122151fSVarun Wadekar ******************************************************************************/ 2150e91633SAnthony Zhou #define SMMU_GSR0_SECURE_ACR 0x10U 2250e91633SAnthony Zhou #define SMMU_GNSR_ACR (SMMU_GSR0_SECURE_ACR + 0x400U) 2350e91633SAnthony Zhou #define SMMU_GSR0_PGSIZE_SHIFT 16U 2450e91633SAnthony Zhou #define SMMU_GSR0_PGSIZE_4K (0U << SMMU_GSR0_PGSIZE_SHIFT) 2550e91633SAnthony Zhou #define SMMU_GSR0_PGSIZE_64K (1U << SMMU_GSR0_PGSIZE_SHIFT) 26*91dd7eddSVarun Wadekar #define SMMU_ACR_CACHE_LOCK_ENABLE_BIT (1ULL << 26U) 27*91dd7eddSVarun Wadekar #define SMMU_GSR0_PER (0x20200U) 28698f4250SVarun Wadekar 29698f4250SVarun Wadekar /******************************************************************************* 30698f4250SVarun Wadekar * SMMU Global Aux. Control Register 31698f4250SVarun Wadekar ******************************************************************************/ 32aa64c5fbSAnthony Zhou #define SMMU_CBn_ACTLR_CPRE_BIT (1ULL << 1U) 334122151fSVarun Wadekar 34*91dd7eddSVarun Wadekar /* SMMU IDs currently supported by the driver */ 35*91dd7eddSVarun Wadekar enum { 36*91dd7eddSVarun Wadekar TEGRA_SMMU0 = 0U, 37*91dd7eddSVarun Wadekar TEGRA_SMMU1 = 1U, 38*91dd7eddSVarun Wadekar TEGRA_SMMU2 = 2U 39*91dd7eddSVarun Wadekar }; 40*91dd7eddSVarun Wadekar 41*91dd7eddSVarun Wadekar static inline uint32_t tegra_smmu_read_32(uint32_t smmu_id, uint32_t off) 42*91dd7eddSVarun Wadekar { 43*91dd7eddSVarun Wadekar uint32_t ret = 0U; 44*91dd7eddSVarun Wadekar 45*91dd7eddSVarun Wadekar #if defined(TEGRA_SMMU0_BASE) 46*91dd7eddSVarun Wadekar if (smmu_id == TEGRA_SMMU0) { 47*91dd7eddSVarun Wadekar ret = mmio_read_32(TEGRA_SMMU0_BASE + (uint64_t)off); 48*91dd7eddSVarun Wadekar } 49*91dd7eddSVarun Wadekar #endif 50*91dd7eddSVarun Wadekar 51*91dd7eddSVarun Wadekar #if defined(TEGRA_SMMU1_BASE) 52*91dd7eddSVarun Wadekar if (smmu_id == TEGRA_SMMU1) { 53*91dd7eddSVarun Wadekar ret = mmio_read_32(TEGRA_SMMU1_BASE + (uint64_t)off); 54*91dd7eddSVarun Wadekar } 55*91dd7eddSVarun Wadekar #endif 56*91dd7eddSVarun Wadekar 57*91dd7eddSVarun Wadekar #if defined(TEGRA_SMMU2_BASE) 58*91dd7eddSVarun Wadekar if (smmu_id == TEGRA_SMMU2) { 59*91dd7eddSVarun Wadekar ret = mmio_read_32(TEGRA_SMMU2_BASE + (uint64_t)off); 60*91dd7eddSVarun Wadekar } 61*91dd7eddSVarun Wadekar #endif 62*91dd7eddSVarun Wadekar 63*91dd7eddSVarun Wadekar return ret; 64*91dd7eddSVarun Wadekar } 65*91dd7eddSVarun Wadekar 66*91dd7eddSVarun Wadekar static inline void tegra_smmu_write_32(uint32_t smmu_id, 67*91dd7eddSVarun Wadekar uint32_t off, uint32_t val) 68*91dd7eddSVarun Wadekar { 69*91dd7eddSVarun Wadekar #if defined(TEGRA_SMMU0_BASE) 70*91dd7eddSVarun Wadekar if (smmu_id == TEGRA_SMMU0) { 71*91dd7eddSVarun Wadekar mmio_write_32(TEGRA_SMMU0_BASE + (uint64_t)off, val); 72*91dd7eddSVarun Wadekar } 73*91dd7eddSVarun Wadekar #endif 74*91dd7eddSVarun Wadekar 75*91dd7eddSVarun Wadekar #if defined(TEGRA_SMMU1_BASE) 76*91dd7eddSVarun Wadekar if (smmu_id == TEGRA_SMMU1) { 77*91dd7eddSVarun Wadekar mmio_write_32(TEGRA_SMMU1_BASE + (uint64_t)off, val); 78*91dd7eddSVarun Wadekar } 79*91dd7eddSVarun Wadekar #endif 80*91dd7eddSVarun Wadekar 81*91dd7eddSVarun Wadekar #if defined(TEGRA_SMMU2_BASE) 82*91dd7eddSVarun Wadekar if (smmu_id == TEGRA_SMMU2) { 83*91dd7eddSVarun Wadekar mmio_write_32(TEGRA_SMMU2_BASE + (uint64_t)off, val); 84*91dd7eddSVarun Wadekar } 85*91dd7eddSVarun Wadekar #endif 86*91dd7eddSVarun Wadekar } 87*91dd7eddSVarun Wadekar 884122151fSVarun Wadekar void tegra_smmu_init(void); 89bc5a86f7SSteven Kao uint32_t plat_get_num_smmu_devices(void); 904122151fSVarun Wadekar 91c3cf06f1SAntonio Nino Diaz #endif /* SMMU_H */ 92