blob: a325513859bba411c6107f00f2ca87103c467ca7 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
|
/*
* Copyright 2021 NXP
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#ifndef _FSL_MEMORY_H_
#define _FSL_MEMORY_H_
#include "fsl_common.h"
/*******************************************************************************
* Definitions
******************************************************************************/
/* Component ID definition, used by tools. */
#ifndef FSL_COMPONENT_ID
#define FSL_COMPONENT_ID "platform.drivers.memory"
#endif
/* The CM4 subsystem local TCM start address, refer to Reference Manual for detailed information */
#define FSL_MEM_M4_TCM_BEGIN 0x1FFE0000U
/* The CM4 subsystem local TCM end address, refer to Reference Manual for detailed information */
#define FSL_MEM_M4_TCM_END 0x2001FFFFU
#define FSL_MEM_M4_TCM_OFFSET 0x220000U
typedef enum _mem_direction
{
kMEMORY_Local2DMA = 0,
kMEMORY_DMA2Local,
} mem_direction_t;
/*******************************************************************************
* API
******************************************************************************/
#if defined(__cplusplus)
extern "C" {
#endif
/*!
* @brief Convert the memory map address.
*
* This function convert the address between system mapped address and native mapped address.
* There maybe offset between subsystem native address and system address for some memory,
* this funciton convert the address to different memory map.
* @param addr address need to be converted.
* @param direction convert direction.
* @return the converted address
*/
static inline uint32_t MEMORY_ConvertMemoryMapAddress(uint32_t addr, mem_direction_t direction)
{
uint32_t dest;
switch (direction)
{
case kMEMORY_Local2DMA:
{
if ((addr >= FSL_MEM_M4_TCM_BEGIN) && (addr <= FSL_MEM_M4_TCM_END))
{
dest = addr + FSL_MEM_M4_TCM_OFFSET;
}
else
{
dest = addr;
}
break;
}
case kMEMORY_DMA2Local:
{
if ((addr >= (FSL_MEM_M4_TCM_BEGIN + FSL_MEM_M4_TCM_OFFSET)) &&
(addr <= (FSL_MEM_M4_TCM_END + FSL_MEM_M4_TCM_OFFSET)))
{
dest = addr - FSL_MEM_M4_TCM_OFFSET;
}
else
{
dest = addr;
}
break;
}
default:
dest = addr;
break;
}
return dest;
}
#if defined(__cplusplus)
}
#endif /* __cplusplus */
#endif /* _FSL_MEMORY_H_ */
|