1 /* 2 * Copyright (c) 2023-2024, Arm Limited. All rights reserved. 3 * 4 * SPDX-License-Identifier: BSD-3-Clause 5 * 6 */ 7 8 #ifndef __NI_TOWER_PSAM_DRV_H__ 9 #define __NI_TOWER_PSAM_DRV_H__ 10 11 #include "ni_tower_drv.h" 12 13 #include <stdint.h> 14 15 /** 16 * \brief NI-Tower PSAM region configuration info structure 17 */ 18 struct ni_tower_psam_reg_cfg_info { 19 /* Base address of the region */ 20 uint64_t base_addr; 21 /* End address of the region */ 22 uint64_t end_addr; 23 /* ID of the target interface or the strip group for non-striped region.*/ 24 uint64_t target_id; 25 }; 26 27 /** 28 * \brief NI-Tower PSAM device structure 29 */ 30 struct ni_tower_psam_dev { 31 uintptr_t base; 32 /* Offset to be added to the memory map base and end addresses */ 33 uint64_t region_mapping_offset; 34 }; 35 36 /** 37 * \brief Initialize and return PSAM device 38 * 39 * \param[in] ni_tower_dev NI-Tower device struct \ref ni_tower_dev. 40 * \param[in] component NI-Tower component node struct \ref 41 * ni_tower_component_node. 42 * \param[in] region_mapping_offset Offset which will added to the memory map 43 * base and end addresses. 44 * \param[out] dev NI-Tower PSAM device struct \ref 45 * ni_tower_psam_dev 46 * 47 * \return Returns error code as specified in \ref ni_tower_err 48 */ 49 enum ni_tower_err ni_tower_psam_dev_init( 50 const struct ni_tower_dev *ni_tower_dev, 51 const struct ni_tower_component_node* component, 52 const uint64_t region_mapping_offset, 53 struct ni_tower_psam_dev *dev); 54 55 /** 56 * \brief Configure non-striped (non-hashed) region. 57 * 58 * \param[in] dev NI-Tower PSAM device struct \ref ni_tower_psam_dev. 59 * \param[in] cfg_info Configuration info of a region to be configured. 60 * struct \ref ni_tower_psam_reg_cfg_info. 61 * \param[in] region PSAM region number to be initialized. 62 * 63 * \return Returns error code as specified in \ref ni_tower_err 64 */ 65 enum ni_tower_err ni_tower_psam_configure_nhregion( 66 const struct ni_tower_psam_dev *dev, 67 const struct ni_tower_psam_reg_cfg_info *cfg_info, 68 const uint32_t region); 69 70 /** 71 * \brief Get the next available region number and configure the non-striped 72 * (non-hashed) region. 73 * 74 * \param[in] dev NI-Tower PSAM device struct \ref ni_tower_psam_dev. 75 * \param[in] cfg_info Configuration info of a region to be configured. 76 * struct \ref ni_tower_psam_reg_cfg_info. 77 * 78 * \return Returns error code as specified in \ref ni_tower_err 79 */ 80 enum ni_tower_err ni_tower_psam_configure_next_available_nhregion( 81 const struct ni_tower_psam_dev *dev, 82 const struct ni_tower_psam_reg_cfg_info *cfg_info); 83 84 /** 85 * \brief Enables the PSAM device 86 * 87 * \param[in] dev NI-Tower PSAM device struct \ref ni_tower_psam_dev. 88 * 89 * \return Returns error code as specified in \ref ni_tower_err 90 */ 91 enum ni_tower_err ni_tower_psam_enable(const struct ni_tower_psam_dev *dev); 92 93 /** 94 * \brief Disables the PSAM device 95 * 96 * \param[in] dev NI-Tower PSAM device struct \ref ni_tower_psam_dev. 97 * 98 * \return Returns error code as specified in \ref ni_tower_err 99 */ 100 enum ni_tower_err ni_tower_psam_disable(const struct ni_tower_psam_dev *dev); 101 102 #endif /* __NI_TOWER_PSAM_DRV_H__ */ 103