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_RSE_DRV_H__
9 #define __NI_TOWER_RSE_DRV_H__
10 
11 #include <stdbool.h>
12 #include <stdint.h>
13 
14 #include "ni_tower_drv.h"
15 #include "apu/ni_tower_apu_drv.h"
16 #include "discovery/ni_tower_discovery_drv.h"
17 #include "psam/ni_tower_psam_drv.h"
18 
19 /**
20  * \brief NI-Tower PSAM config structure
21  */
22 struct ni_tower_psam_cfgs {
23     /* Pointer to the PSAM device configuration */
24     const struct ni_tower_component_node* component;
25     /* Number of non-hashed regions that needs to be configured */
26     const uint32_t nh_region_count;
27     /* List of all region configuration information */
28     const struct ni_tower_psam_reg_cfg_info* regions;
29     /* Whether to add chip address offset to the memory map regions */
30     const bool add_chip_addr_offset;
31 };
32 
33 /**
34  * \brief NI-Tower APU config structure
35  */
36 struct ni_tower_apu_cfgs {
37     /* Pointer to the APU device configuration */
38     const struct ni_tower_component_node* component;
39     /* Number of address regions that needs to be configured */
40     const uint32_t region_count;
41     /* List of all region configuration information */
42     const struct ni_tower_apu_reg_cfg_info* regions;
43     /* Whether to add chip address offset to the memory map regions */
44     const bool add_chip_addr_offset;
45 };
46 
47 /**
48  * \brief Program NI-Tower PSAM from PSAM configs
49  *
50  * \param[in]   dev               NI-Tower struct \ref ni_tower_dev.
51  * \param[in]   psam_table        Array of all PSAM configs for a particular
52  *                                NI-Tower \ref ni_tower_psam_cfgs.
53  * \param[in]   psam_table_count  Number of PSAM that needs to be configured.
54  *
55  * \return Returns error code as specified in \ref ni_tower_err
56  */
57 enum ni_tower_err ni_tower_program_psam_table(
58     const struct ni_tower_dev *dev,
59     const struct ni_tower_psam_cfgs psam_table[],
60     const uint32_t psam_table_count);
61 
62 /**
63  * \brief Program NI-Tower APU from APU configs
64  *
65  * \param[in]   dev               NI-Tower struct \ref ni_tower_dev.
66  * \param[in]   apu_table         Array of all APU configs for a particular
67  *                                NI-Tower \ref ni_tower_apu_cfgs.
68  * \param[in]   apu_table_count   Number of APUs that needs to be configured.
69  *
70  * \return Returns error code as specified in \ref ni_tower_err
71  */
72 enum ni_tower_err ni_tower_program_apu_table(
73     const struct ni_tower_dev *dev,
74     const struct ni_tower_apu_cfgs apu_table[],
75     const uint32_t apu_table_count);
76 
77 #endif /* __NI_TOWER_RSE_DRV_H__ */
78