1412dd5c5SVarun Wadekar /* 293c78ed2SAntonio Nino Diaz * Copyright (c) 2015-2018, ARM Limited and Contributors. All rights reserved. 3412dd5c5SVarun Wadekar * 482cb2c1aSdp-arm * SPDX-License-Identifier: BSD-3-Clause 5412dd5c5SVarun Wadekar */ 6412dd5c5SVarun Wadekar 7c3cf06f1SAntonio Nino Diaz #ifndef MEMCTRL_V2_H 8c3cf06f1SAntonio Nino Diaz #define MEMCTRL_V2_H 9412dd5c5SVarun Wadekar 10412dd5c5SVarun Wadekar #include <tegra_def.h> 11412dd5c5SVarun Wadekar 1206803cfdSPritesh Raithatha #ifndef __ASSEMBLY__ 1306803cfdSPritesh Raithatha 14ab2eb455SPuneet Saxena #include <mmio.h> 1593c78ed2SAntonio Nino Diaz #include <stdint.h> 1606803cfdSPritesh Raithatha 17412dd5c5SVarun Wadekar /******************************************************************************* 18be87d920SVarun Wadekar * Structure to hold the transaction override settings to use to override 19be87d920SVarun Wadekar * client inputs 20be87d920SVarun Wadekar ******************************************************************************/ 21be87d920SVarun Wadekar typedef struct mc_txn_override_cfg { 22be87d920SVarun Wadekar uint32_t offset; 23be87d920SVarun Wadekar uint8_t cgid_tag; 24be87d920SVarun Wadekar } mc_txn_override_cfg_t; 25be87d920SVarun Wadekar 26be87d920SVarun Wadekar #define mc_make_txn_override_cfg(off, val) \ 27be87d920SVarun Wadekar { \ 28be87d920SVarun Wadekar .offset = MC_TXN_OVERRIDE_CONFIG_ ## off, \ 29be87d920SVarun Wadekar .cgid_tag = MC_TXN_OVERRIDE_ ## val \ 30be87d920SVarun Wadekar } 31be87d920SVarun Wadekar 32be87d920SVarun Wadekar /******************************************************************************* 33412dd5c5SVarun Wadekar * Structure to hold the Stream ID to use to override client inputs 34412dd5c5SVarun Wadekar ******************************************************************************/ 35412dd5c5SVarun Wadekar typedef struct mc_streamid_override_cfg { 36412dd5c5SVarun Wadekar uint32_t offset; 37412dd5c5SVarun Wadekar uint8_t stream_id; 38412dd5c5SVarun Wadekar } mc_streamid_override_cfg_t; 39412dd5c5SVarun Wadekar 40412dd5c5SVarun Wadekar /******************************************************************************* 41412dd5c5SVarun Wadekar * Structure to hold the Stream ID Security Configuration settings 42412dd5c5SVarun Wadekar ******************************************************************************/ 43412dd5c5SVarun Wadekar typedef struct mc_streamid_security_cfg { 44412dd5c5SVarun Wadekar char *name; 45412dd5c5SVarun Wadekar uint32_t offset; 46412dd5c5SVarun Wadekar int override_enable; 47412dd5c5SVarun Wadekar int override_client_inputs; 48412dd5c5SVarun Wadekar int override_client_ns_flag; 49412dd5c5SVarun Wadekar } mc_streamid_security_cfg_t; 50412dd5c5SVarun Wadekar 51aa64c5fbSAnthony Zhou #define OVERRIDE_DISABLE 1U 52aa64c5fbSAnthony Zhou #define OVERRIDE_ENABLE 0U 53aa64c5fbSAnthony Zhou #define CLIENT_FLAG_SECURE 0U 54aa64c5fbSAnthony Zhou #define CLIENT_FLAG_NON_SECURE 1U 55aa64c5fbSAnthony Zhou #define CLIENT_INPUTS_OVERRIDE 1U 56aa64c5fbSAnthony Zhou #define CLIENT_INPUTS_NO_OVERRIDE 0U 57ab2eb455SPuneet Saxena /******************************************************************************* 58ab2eb455SPuneet Saxena * StreamID to indicate no SMMU translations (requests to be steered on the 59ab2eb455SPuneet Saxena * SMMU bypass path) 60ab2eb455SPuneet Saxena ******************************************************************************/ 61ab2eb455SPuneet Saxena #define MC_STREAM_ID_MAX 0x7FU 62ab2eb455SPuneet Saxena 63ab2eb455SPuneet Saxena /******************************************************************************* 64ab2eb455SPuneet Saxena * Memory Controller SMMU Bypass config register 65ab2eb455SPuneet Saxena ******************************************************************************/ 66ab2eb455SPuneet Saxena #define MC_SMMU_BYPASS_CONFIG 0x1820U 67ab2eb455SPuneet Saxena #define MC_SMMU_BYPASS_CTRL_MASK 0x3U 68ab2eb455SPuneet Saxena #define MC_SMMU_BYPASS_CTRL_SHIFT 0U 69ab2eb455SPuneet Saxena #define MC_SMMU_CTRL_TBU_BYPASS_ALL (0U << MC_SMMU_BYPASS_CTRL_SHIFT) 70ab2eb455SPuneet Saxena #define MC_SMMU_CTRL_TBU_RSVD (1U << MC_SMMU_BYPASS_CTRL_SHIFT) 71ab2eb455SPuneet Saxena #define MC_SMMU_CTRL_TBU_BYPASS_SPL_STREAMID (2U << MC_SMMU_BYPASS_CTRL_SHIFT) 72ab2eb455SPuneet Saxena #define MC_SMMU_CTRL_TBU_BYPASS_NONE (3U << MC_SMMU_BYPASS_CTRL_SHIFT) 73ab2eb455SPuneet Saxena #define MC_SMMU_BYPASS_CONFIG_WRITE_ACCESS_BIT (1U << 31) 74ab2eb455SPuneet Saxena #define MC_SMMU_BYPASS_CONFIG_SETTINGS (MC_SMMU_BYPASS_CONFIG_WRITE_ACCESS_BIT | \ 75ab2eb455SPuneet Saxena MC_SMMU_CTRL_TBU_BYPASS_SPL_STREAMID) 76412dd5c5SVarun Wadekar 77412dd5c5SVarun Wadekar #define mc_make_sec_cfg(off, ns, ovrrd, access) \ 78412dd5c5SVarun Wadekar { \ 79412dd5c5SVarun Wadekar .name = # off, \ 8006803cfdSPritesh Raithatha .offset = MC_STREAMID_OVERRIDE_TO_SECURITY_CFG( \ 8106803cfdSPritesh Raithatha MC_STREAMID_OVERRIDE_CFG_ ## off), \ 82412dd5c5SVarun Wadekar .override_client_ns_flag = CLIENT_FLAG_ ## ns, \ 83412dd5c5SVarun Wadekar .override_client_inputs = CLIENT_INPUTS_ ## ovrrd, \ 84412dd5c5SVarun Wadekar .override_enable = OVERRIDE_ ## access \ 85412dd5c5SVarun Wadekar } 86412dd5c5SVarun Wadekar 8706803cfdSPritesh Raithatha /******************************************************************************* 8806803cfdSPritesh Raithatha * Structure to hold Memory Controller's Configuration settings 8906803cfdSPritesh Raithatha ******************************************************************************/ 9006803cfdSPritesh Raithatha typedef struct tegra_mc_settings { 9106803cfdSPritesh Raithatha const uint32_t *streamid_override_cfg; 9206803cfdSPritesh Raithatha uint32_t num_streamid_override_cfgs; 9306803cfdSPritesh Raithatha const mc_streamid_security_cfg_t *streamid_security_cfg; 9406803cfdSPritesh Raithatha uint32_t num_streamid_security_cfgs; 9506803cfdSPritesh Raithatha const mc_txn_override_cfg_t *txn_override_cfg; 9606803cfdSPritesh Raithatha uint32_t num_txn_override_cfgs; 97ab2eb455SPuneet Saxena void (*reconfig_mss_clients)(void); 98ab2eb455SPuneet Saxena void (*set_txn_overrides)(void); 9906803cfdSPritesh Raithatha } tegra_mc_settings_t; 10006803cfdSPritesh Raithatha 101412dd5c5SVarun Wadekar static inline uint32_t tegra_mc_read_32(uint32_t off) 102412dd5c5SVarun Wadekar { 103412dd5c5SVarun Wadekar return mmio_read_32(TEGRA_MC_BASE + off); 104412dd5c5SVarun Wadekar } 105412dd5c5SVarun Wadekar 106412dd5c5SVarun Wadekar static inline void tegra_mc_write_32(uint32_t off, uint32_t val) 107412dd5c5SVarun Wadekar { 108412dd5c5SVarun Wadekar mmio_write_32(TEGRA_MC_BASE + off, val); 109412dd5c5SVarun Wadekar } 110412dd5c5SVarun Wadekar 111412dd5c5SVarun Wadekar static inline uint32_t tegra_mc_streamid_read_32(uint32_t off) 112412dd5c5SVarun Wadekar { 113412dd5c5SVarun Wadekar return mmio_read_32(TEGRA_MC_STREAMID_BASE + off); 114412dd5c5SVarun Wadekar } 115412dd5c5SVarun Wadekar 116412dd5c5SVarun Wadekar static inline void tegra_mc_streamid_write_32(uint32_t off, uint32_t val) 117412dd5c5SVarun Wadekar { 118412dd5c5SVarun Wadekar mmio_write_32(TEGRA_MC_STREAMID_BASE + off, val); 119412dd5c5SVarun Wadekar } 120412dd5c5SVarun Wadekar 121e64ce3abSVarun Wadekar #define mc_set_pcfifo_unordered_boot_so_mss(id, client) \ 122aa64c5fbSAnthony Zhou ((uint32_t)~MC_PCFIFO_CLIENT_CONFIG##id##_PCFIFO_##client##_MASK | \ 123e64ce3abSVarun Wadekar MC_PCFIFO_CLIENT_CONFIG##id##_PCFIFO_##client##_UNORDERED) 124e64ce3abSVarun Wadekar 125b86e691eSKrishna Reddy #define mc_set_pcfifo_ordered_boot_so_mss(id, client) \ 126b86e691eSKrishna Reddy MC_PCFIFO_CLIENT_CONFIG##id##_PCFIFO_##client##_ORDERED 127e64ce3abSVarun Wadekar 128e64ce3abSVarun Wadekar #define mc_set_tsa_passthrough(client) \ 129e64ce3abSVarun Wadekar { \ 130e64ce3abSVarun Wadekar mmio_write_32(TEGRA_TSA_BASE + TSA_CONFIG_STATIC0_CSW_##client, \ 131e64ce3abSVarun Wadekar (TSA_CONFIG_STATIC0_CSW_##client##_RESET & \ 13261beb3e0SAnthony Zhou (uint32_t)~TSA_CONFIG_CSW_MEMTYPE_OVERRIDE_MASK) | \ 13361beb3e0SAnthony Zhou (uint32_t)TSA_CONFIG_CSW_MEMTYPE_OVERRIDE_PASTHRU); \ 134e64ce3abSVarun Wadekar } 135e64ce3abSVarun Wadekar 136ab2eb455SPuneet Saxena #define mc_set_tsa_w_passthrough(client) \ 137ab2eb455SPuneet Saxena { \ 138ab2eb455SPuneet Saxena mmio_write_32(TEGRA_TSA_BASE + TSA_CONFIG_STATIC0_CSW_##client, \ 139ab2eb455SPuneet Saxena (TSA_CONFIG_STATIC0_CSW_RESET_W & \ 140ab2eb455SPuneet Saxena (uint32_t)~TSA_CONFIG_CSW_MEMTYPE_OVERRIDE_MASK) | \ 141ab2eb455SPuneet Saxena (uint32_t)TSA_CONFIG_CSW_MEMTYPE_OVERRIDE_PASTHRU); \ 142ab2eb455SPuneet Saxena } 143ab2eb455SPuneet Saxena 144ab2eb455SPuneet Saxena #define mc_set_tsa_r_passthrough(client) \ 145ab2eb455SPuneet Saxena { \ 146ab2eb455SPuneet Saxena mmio_write_32(TEGRA_TSA_BASE + TSA_CONFIG_STATIC0_CSR_##client, \ 147ab2eb455SPuneet Saxena (TSA_CONFIG_STATIC0_CSR_RESET_R & \ 148ab2eb455SPuneet Saxena (uint32_t)~TSA_CONFIG_CSW_MEMTYPE_OVERRIDE_MASK) | \ 149ab2eb455SPuneet Saxena (uint32_t)TSA_CONFIG_CSW_MEMTYPE_OVERRIDE_PASTHRU); \ 150ab2eb455SPuneet Saxena } 151ab2eb455SPuneet Saxena 152b86e691eSKrishna Reddy #define mc_set_txn_override(client, normal_axi_id, so_dev_axi_id, normal_override, so_dev_override) \ 153e64ce3abSVarun Wadekar { \ 154e64ce3abSVarun Wadekar tegra_mc_write_32(MC_TXN_OVERRIDE_CONFIG_##client, \ 155b86e691eSKrishna Reddy MC_TXN_OVERRIDE_##normal_axi_id | \ 156b86e691eSKrishna Reddy MC_TXN_OVERRIDE_CONFIG_COH_PATH_##so_dev_override##_SO_DEV | \ 157b86e691eSKrishna Reddy MC_TXN_OVERRIDE_CONFIG_COH_PATH_##normal_override##_NORMAL | \ 158b86e691eSKrishna Reddy MC_TXN_OVERRIDE_CONFIG_CGID_##so_dev_axi_id); \ 159e64ce3abSVarun Wadekar } 16006803cfdSPritesh Raithatha 16106803cfdSPritesh Raithatha /******************************************************************************* 16206803cfdSPritesh Raithatha * Handler to read memory configuration settings 16306803cfdSPritesh Raithatha * 16406803cfdSPritesh Raithatha * Implemented by SoCs under tegra/soc/txxx 16506803cfdSPritesh Raithatha ******************************************************************************/ 16606803cfdSPritesh Raithatha tegra_mc_settings_t *tegra_get_mc_settings(void); 16706803cfdSPritesh Raithatha 168*d5bd0de6SVarun Wadekar /******************************************************************************* 169*d5bd0de6SVarun Wadekar * Handler to program the scratch registers with TZDRAM settings for the 170*d5bd0de6SVarun Wadekar * resume firmware. 171*d5bd0de6SVarun Wadekar * 172*d5bd0de6SVarun Wadekar * Implemented by SoCs under tegra/soc/txxx 173*d5bd0de6SVarun Wadekar ******************************************************************************/ 174*d5bd0de6SVarun Wadekar void plat_memctrl_tzdram_setup(uint64_t phys_base, uint64_t size_in_bytes); 175*d5bd0de6SVarun Wadekar 176*d5bd0de6SVarun Wadekar #endif /* __ASSEMBLY__ */ 177e64ce3abSVarun Wadekar 178c3cf06f1SAntonio Nino Diaz #endif /* MEMCTRL_V2_H */ 179