AM275 FreeRTOS SDK  11.01.00
hyperbus/v0/hyperbus.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2025 Texas Instruments Incorporated
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  *
8  * Redistributions of source code must retain the above copyright
9  * notice, this list of conditions and the following disclaimer.
10  *
11  * Redistributions in binary form must reproduce the above copyright
12  * notice, this list of conditions and the following disclaimer in the
13  * documentation and/or other materials provided with the
14  * distribution.
15  *
16  * Neither the name of Texas Instruments Incorporated nor the names of
17  * its contributors may be used to endorse or promote products derived
18  * from this software without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  */
32 
50 #ifndef HYPERBUS_H_
51 #define HYPERBUS_H_
52 
53 /* ========================================================================== */
54 /* Include Files */
55 /* ========================================================================== */
56 
57 #include <kernel/dpl/SemaphoreP.h>
58 
59 #ifdef __cplusplus
60 extern "C" {
61 #endif
62 
63 /* ========================================================================== */
64 /* Macros & Typedefs */
65 /* ========================================================================== */
66 
68 typedef void *HYPERBUS_Handle;
69 
73 typedef enum HYPERBUS_Devicetype_e
74 {
79 
83 #define HYPERBUS_MEM_OFFSET 0U
84 
90 #define HYPERBUS_MCR_CONFIGURABLE_CS_LOW_TIME 0x1U
91 #define HYPERBUS_MCR_NO_CONFIGURABLE_CS_LOW_TIME 0x0U
92 
103 #define HYPERBUS_MCR_MAXLEN_2_BYTE 0x0U
104 #define HYPERBUS_MCR_MAXLEN_4_BYTE 0x1U
105 #define HYPERBUS_MCR_MAXLEN_6_BYTE 0x2U
106 #define HYPERBUS_MCR_MAXLEN_1024_BYTE 0x1FFU
107 
112 #define HYPERBUS_MCR_MERGE_WRAP_INCR 0x1U
113 #define HYPERBUS_MCR_NO_MERGE_WRAP_INCR 0x0U
114 
120 #define HYPERBUS_MCR_ASYMM_CACHE_SUPPORT 0x1U
121 #define HYPERBUS_MCR_NO_ASYMM_CACHE_SUPPORT 0x0U
122 
128 #define HYPERBUS_MCR_MEM_SPACE 0x0U
129 #define HYPERBUS_MCR_CR_SPACE 0x1U
130 
136 #define HYPERBUS_MCR_HYPERFLASH 0x0U
137 #define HYPERBUS_MCR_HYPERRAM 0x1U
138 
144 #define HYPERBUS_MCR_WRAPSIZE_NONE 0x0U
145 #define HYPERBUS_MCR_WRAPSIZE_64B 0x1U
146 #define HYPERBUS_MCR_WRAPSIZE_16B 0x2U
147 #define HYPERBUS_MCR_WRAPSIZE_32B 0x3U
148 
157 #define HYPERBUS_CS0 (0U)
158 #define HYPERBUS_CS1 (1U)
159 
161 /* ========================================================================== */
162 /* Structure Declarations */
163 /* ========================================================================== */
169 typedef struct {
170  uint16_t max_en;
172  uint16_t max_len;
174  uint16_t true_cont_merge;
176  uint16_t asymm_cache;
178  uint16_t cfg_reg_target;
180  uint16_t dev_type;
182  uint16_t wrap_size;
185 
191 typedef struct fss_dataif_l{
192  uint64_t addr_glb;
194  uintptr_t addr_loc;
197 
203 typedef struct fss_handle_l{
204  uintptr_t cfg_base;
206  uintptr_t fsas_base;
208  uintptr_t otfa_base;
217 
221 typedef struct
222 {
224  uint32_t latency;
229  uint32_t writeCSHold;
234  uint32_t readCSHold;
239  uint32_t writeCSSetup;
244  uint32_t readCSSetup;
249  uint32_t writeCSHigh;
254  uint32_t readCSHigh;
256 
258 typedef struct
259 {
260  uint32_t deviceType;
261  /*
262  * SOC configuration
263  */
264  uint32_t baseAddr;
266  uint32_t ssBaseAddr;
268  uint32_t dataBaseAddr;
270  uint32_t fssCfgBase;
271  uint32_t fssFsasBase;
272  uint32_t fssOtfaBase;
273  uint64_t fssS0Reg0Base;
274  uint64_t fssS0Reg1Base;
275  uint64_t fssS0Reg3Base;
276  uint32_t inputClkFreq;
279  /*
280  * Driver configuration
281  */
282  uint32_t intrNum;
284  uint32_t intrEnable;
286  uint8_t intrPriority;
288  uint32_t ECCEnable;
290  uint32_t OTFAEnable;
292  uint32_t chipSelect;
295  uint32_t latency;
297  uint32_t writeCSHold;
302  uint32_t readCSHold;
307  uint32_t writeCSSetup;
312  uint32_t readCSSetup;
317  uint32_t writeCSHigh;
322  uint32_t readCSHigh;
328 
333 typedef struct
334 {
337  uint32_t isOpen;
342 
349 typedef struct
350 {
356 
359 
361 extern uint32_t gHyperBusConfigNum;
362 
363 /* ========================================================================== */
364 /* Internal/Private Structure Declarations */
365 /* ========================================================================== */
366 
367 /* ========================================================================== */
368 /* Function Declarations */
369 /* ========================================================================== */
370 
374 void HYPERBUS_init(void);
375 
379 void HYPERBUS_deinit(void);
380 
395 
406 
420 
431 
442 static uint32_t HYPERBUS_makeMemCfg(HYPERBUS_Handle handle, HYPERBUS_MemCfg *pHyperBusMemCfg);
443 
454 static uint32_t HYPERBUS_makeMemTiming(HYPERBUS_Handle handle, HYPERBUS_MemTiming *pHyperBusMemTiming);
455 
458 #ifdef __cplusplus
459 }
460 #endif
461 
462 #endif /* #ifndef HYPERBUS_H_ */
HYPERBUS_makeMemCfg
static uint32_t HYPERBUS_makeMemCfg(HYPERBUS_Handle handle, HYPERBUS_MemCfg *pHyperBusMemCfg)
This function returns the memory configuration of the HYPERBUS Instance.
HYPERBUS_Config::object
HYPERBUS_Object * object
Definition: hyperbus/v0/hyperbus.h:353
HYPERBUS_Attrs::OTFAEnable
uint32_t OTFAEnable
Definition: hyperbus/v0/hyperbus.h:290
HYPERBUS_Attrs::fssS0Reg1Base
uint64_t fssS0Reg1Base
Definition: hyperbus/v0/hyperbus.h:274
HYPERBUS_Config
HYPERBUS driver configuration structure.
Definition: hyperbus/v0/hyperbus.h:350
HYPERBUS_Object
HYPERBUS driver object.
Definition: hyperbus/v0/hyperbus.h:334
HYPERBUS_Attrs::ECCEnable
uint32_t ECCEnable
Definition: hyperbus/v0/hyperbus.h:288
HYPERBUS_MemCfg::max_en
uint16_t max_en
Definition: hyperbus/v0/hyperbus.h:170
HYPERBUS_fssHandle::otfa_base
uintptr_t otfa_base
Definition: hyperbus/v0/hyperbus.h:208
HYPERBUS_fssDataIf::addr_glb
uint64_t addr_glb
Definition: hyperbus/v0/hyperbus.h:192
index
uint16_t index
Definition: tisci_rm_proxy.h:3
HYPERBUS_fssDataIf::addr_loc
uintptr_t addr_loc
Definition: hyperbus/v0/hyperbus.h:194
HYPERBUS_MemCfg::asymm_cache
uint16_t asymm_cache
Definition: hyperbus/v0/hyperbus.h:176
HYPERBUS_deinit
void HYPERBUS_deinit(void)
This function de-initializes the HYPERBUS module.
HYPERBUS_Attrs::fssS0Reg0Base
uint64_t fssS0Reg0Base
Definition: hyperbus/v0/hyperbus.h:273
HYPERBUS_Attrs::intrPriority
uint8_t intrPriority
Definition: hyperbus/v0/hyperbus.h:286
HYPERBUS_MemTiming::writeCSSetup
uint32_t writeCSSetup
Definition: hyperbus/v0/hyperbus.h:239
HYPERBUS_MemTiming::readCSSetup
uint32_t readCSSetup
Definition: hyperbus/v0/hyperbus.h:244
HYPERBUS_getHyperBusDataBaseAddr
uint32_t HYPERBUS_getHyperBusDataBaseAddr(HYPERBUS_Handle handle)
This function gets the SOC mapped data base address of the HyperRam.
HYPERBUS_Handle
void * HYPERBUS_Handle
A handle that is returned from a HYPERBUS_open() call.
Definition: hyperbus/v0/hyperbus.h:68
HYPERBUS_Attrs::readCSHigh
uint32_t readCSHigh
Definition: hyperbus/v0/hyperbus.h:322
gHyperBusConfigNum
uint32_t gHyperBusConfigNum
Externally defined driver configuration array size.
HYPERBUS_Attrs::inputClkFreq
uint32_t inputClkFreq
Definition: hyperbus/v0/hyperbus.h:276
SemaphoreP.h
HYPERBUS_fssHandle::s0_reg1_base
HYPERBUS_fssDataIf s0_reg1_base
Definition: hyperbus/v0/hyperbus.h:212
HYPERBUS_Object::handle
HYPERBUS_Handle handle
Definition: hyperbus/v0/hyperbus.h:335
HYPERBUS_Attrs::readCSHold
uint32_t readCSHold
Definition: hyperbus/v0/hyperbus.h:302
HYPERBUS_fssHandle::fsas_base
uintptr_t fsas_base
Definition: hyperbus/v0/hyperbus.h:206
HYPERBUS_MemTiming::writeCSHold
uint32_t writeCSHold
Definition: hyperbus/v0/hyperbus.h:229
HYPERBUS_MemCfg::dev_type
uint16_t dev_type
Definition: hyperbus/v0/hyperbus.h:180
HYPERBUS_Devicetype
HYPERBUS_Devicetype
Enum for device type.
Definition: hyperbus/v0/hyperbus.h:74
HYPERBUS_MemCfg
Memory Configuration Structure.
Definition: hyperbus/v0/hyperbus.h:169
HYPERBUS_Attrs::chipSelect
uint32_t chipSelect
Definition: hyperbus/v0/hyperbus.h:292
gHyperBusConfig
HYPERBUS_Config gHyperBusConfig[]
Externally defined driver configuration array.
HYPERBUS_close
void HYPERBUS_close(HYPERBUS_Handle handle)
Function to close a HYPERBUS peripheral specified by the HYPERBUS handle.
HYPERBUS_init
void HYPERBUS_init(void)
This function initializes the HYPERBUS module.
HYPERBUS_makeMemTiming
static uint32_t HYPERBUS_makeMemTiming(HYPERBUS_Handle handle, HYPERBUS_MemTiming *pHyperBusMemTiming)
This function returns the memory Timings of the HYPERBUS Instance.
HYPERBUS_fssHandle
FSS Handle Structure.
Definition: hyperbus/v0/hyperbus.h:203
HYPERBUS_MemCfg::max_len
uint16_t max_len
Definition: hyperbus/v0/hyperbus.h:172
HYPERBUS_Attrs::baseAddr
uint32_t baseAddr
Definition: hyperbus/v0/hyperbus.h:264
HYPERBUS_Attrs::intrNum
uint32_t intrNum
Definition: hyperbus/v0/hyperbus.h:282
HYPERBUS_Attrs::fssCfgBase
uint32_t fssCfgBase
Definition: hyperbus/v0/hyperbus.h:270
HYPERBUS_getHandle
HYPERBUS_Handle HYPERBUS_getHandle(uint32_t index)
This function returns the handle of an open HYPERBUS Instance from the instance index.
HYPERBUS_fssHandle::cfg_base
uintptr_t cfg_base
Definition: hyperbus/v0/hyperbus.h:204
HYPERBUS_Attrs
HYPERBUS instance attributes - used during init time.
Definition: hyperbus/v0/hyperbus.h:259
HYPERBUS_MemTiming::latency
uint32_t latency
Definition: hyperbus/v0/hyperbus.h:224
HYPERBUS_DEVICETYPE_HYPERFLASH
@ HYPERBUS_DEVICETYPE_HYPERFLASH
Definition: hyperbus/v0/hyperbus.h:77
HYPERBUS_DEVICETYPE_NONE
@ HYPERBUS_DEVICETYPE_NONE
Definition: hyperbus/v0/hyperbus.h:76
HYPERBUS_MemCfg::cfg_reg_target
uint16_t cfg_reg_target
Definition: hyperbus/v0/hyperbus.h:178
HYPERBUS_MemTiming
Register structure for the Memory Timing Register.
Definition: hyperbus/v0/hyperbus.h:222
HYPERBUS_fssHandle::s0_reg3_base
HYPERBUS_fssDataIf s0_reg3_base
Definition: hyperbus/v0/hyperbus.h:214
HYPERBUS_DEVICETYPE_HYPERRAM
@ HYPERBUS_DEVICETYPE_HYPERRAM
Definition: hyperbus/v0/hyperbus.h:75
HYPERBUS_MemCfg::true_cont_merge
uint16_t true_cont_merge
Definition: hyperbus/v0/hyperbus.h:174
HYPERBUS_Attrs::writeCSHigh
uint32_t writeCSHigh
Definition: hyperbus/v0/hyperbus.h:317
HYPERBUS_Attrs::deviceType
uint32_t deviceType
Definition: hyperbus/v0/hyperbus.h:260
HYPERBUS_fssDataIf
FSS Data Interface Structure.
Definition: hyperbus/v0/hyperbus.h:191
HYPERBUS_MemTiming::readCSHigh
uint32_t readCSHigh
Definition: hyperbus/v0/hyperbus.h:254
HYPERBUS_Attrs::dataBaseAddr
uint32_t dataBaseAddr
Definition: hyperbus/v0/hyperbus.h:268
HYPERBUS_Attrs::readCSSetup
uint32_t readCSSetup
Definition: hyperbus/v0/hyperbus.h:312
HYPERBUS_Config::attrs
const HYPERBUS_Attrs * attrs
Definition: hyperbus/v0/hyperbus.h:351
HYPERBUS_Attrs::writeCSHold
uint32_t writeCSHold
Definition: hyperbus/v0/hyperbus.h:297
HYPERBUS_Object::lockObj
SemaphoreP_Object lockObj
Definition: hyperbus/v0/hyperbus.h:339
HYPERBUS_MemTiming::writeCSHigh
uint32_t writeCSHigh
Definition: hyperbus/v0/hyperbus.h:249
HYPERBUS_Attrs::writeCSSetup
uint32_t writeCSSetup
Definition: hyperbus/v0/hyperbus.h:307
HYPERBUS_MemCfg::wrap_size
uint16_t wrap_size
Definition: hyperbus/v0/hyperbus.h:182
HYPERBUS_Attrs::latency
uint32_t latency
Definition: hyperbus/v0/hyperbus.h:295
HYPERBUS_open
HYPERBUS_Handle HYPERBUS_open(uint32_t index)
This function opens a given HYPERBUS peripheral.
SemaphoreP_Object
Opaque semaphore object used with the semaphore APIs.
Definition: SemaphoreP.h:59
HYPERBUS_Attrs::fssS0Reg3Base
uint64_t fssS0Reg3Base
Definition: hyperbus/v0/hyperbus.h:275
HYPERBUS_MemTiming::readCSHold
uint32_t readCSHold
Definition: hyperbus/v0/hyperbus.h:234
HYPERBUS_fssHandle::s0_reg0_base
HYPERBUS_fssDataIf s0_reg0_base
Definition: hyperbus/v0/hyperbus.h:210
HYPERBUS_Attrs::fssOtfaBase
uint32_t fssOtfaBase
Definition: hyperbus/v0/hyperbus.h:272
HYPERBUS_Attrs::ssBaseAddr
uint32_t ssBaseAddr
Definition: hyperbus/v0/hyperbus.h:266
HYPERBUS_Object::isOpen
uint32_t isOpen
Definition: hyperbus/v0/hyperbus.h:337
HYPERBUS_Attrs::fssFsasBase
uint32_t fssFsasBase
Definition: hyperbus/v0/hyperbus.h:271
HYPERBUS_Attrs::intrEnable
uint32_t intrEnable
Definition: hyperbus/v0/hyperbus.h:284