]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_R5_UltraScale_MPSoC/RTOSDemo_R5_bsp/psu_cortexr5_0/libsrc/zdma_v1_5/src/xzdma_hw.h
Update Zynq, MPSoc Cortex-A53 and MPSoc Cortex-R5 demo projects to build with the...
[freertos] / FreeRTOS / Demo / CORTEX_R5_UltraScale_MPSoC / RTOSDemo_R5_bsp / psu_cortexr5_0 / libsrc / zdma_v1_5 / src / xzdma_hw.h
1 /******************************************************************************
2 *
3 * Copyright (C) 2014 Xilinx, Inc.  All rights reserved.
4 *
5 * Permission is hereby granted, free of charge, to any person obtaining a copy
6 * of this software and associated documentation files (the "Software"), to deal
7 * in the Software without restriction, including without limitation the rights
8 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 * copies of the Software, and to permit persons to whom the Software is
10 * furnished to do so, subject to the following conditions:
11 *
12 * The above copyright notice and this permission notice shall be included in
13 * all copies or substantial portions of the Software.
14 *
15 * Use of the Software is limited solely to applications:
16 * (a) running on a Xilinx device, or
17 * (b) that interact with a Xilinx device through a bus or interconnect.
18 *
19 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
22 * XILINX  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
23 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
24 * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
25 * SOFTWARE.
26 *
27 * Except as contained in this notice, the name of the Xilinx shall not be used
28 * in advertising or otherwise to promote the sale, use or other dealings in
29 * this Software without prior written authorization from Xilinx.
30 *
31 ******************************************************************************/
32 /*****************************************************************************/
33 /**
34 *
35 * @file xzdma_hw.h
36 * @addtogroup zdma_v1_5
37 * @{
38 *
39 * This header file contains identifiers and register-level driver functions (or
40 * macros) that can be used to access the Xilinx ZDMA core.
41 *
42 * <pre>
43 * MODIFICATION HISTORY:
44 *
45 * Ver   Who     Date     Changes
46 * ----- ------  -------- ------------------------------------------------------
47 * 1.0   vns     2/27/15  First release
48 * </pre>
49 *
50 ******************************************************************************/
51 #ifndef XZDMA_HW_H_
52 #define XZDMA_HW_H_             /**< Prevent circular inclusions
53                                   *  by using protection macros */
54 #ifdef __cplusplus
55 extern "C" {
56 #endif
57
58 /***************************** Include Files *********************************/
59
60 #include "xil_io.h"
61
62 /************************** Constant Definitions *****************************/
63
64 /** @name Registers offsets
65  * @{
66  */
67 #define XZDMA_ERR_CTRL                          (0x000U)
68 #define XZDMA_CH_ECO                            (0x004U)
69 #define XZDMA_CH_ISR_OFFSET                     (0x100U)
70 #define XZDMA_CH_IMR_OFFSET                     (0x104U)
71 #define XZDMA_CH_IEN_OFFSET                     (0x108U)
72 #define XZDMA_CH_IDS_OFFSET                     (0x10CU)
73 #define XZDMA_CH_CTRL0_OFFSET                   (0x110U)
74 #define XZDMA_CH_CTRL1_OFFSET                   (0x114U)
75 #define XZDMA_CH_PERIF_OFFSET                   (0x118U)
76 #define XZDMA_CH_STS_OFFSET                     (0x11CU)
77 #define XZDMA_CH_DATA_ATTR_OFFSET               (0x120U)
78 #define XZDMA_CH_DSCR_ATTR_OFFSET               (0x124U)
79 #define XZDMA_CH_SRC_DSCR_WORD0_OFFSET          (0x128U)
80 #define XZDMA_CH_SRC_DSCR_WORD1_OFFSET          (0x12CU)
81 #define XZDMA_CH_SRC_DSCR_WORD2_OFFSET          (0x130U)
82 #define XZDMA_CH_SRC_DSCR_WORD3_OFFSET          (0x134U)
83 #define XZDMA_CH_DST_DSCR_WORD0_OFFSET          (0x138U)
84 #define XZDMA_CH_DST_DSCR_WORD1_OFFSET          (0x13CU)
85 #define XZDMA_CH_DST_DSCR_WORD2_OFFSET          (0x140U)
86 #define XZDMA_CH_DST_DSCR_WORD3_OFFSET          (0x144U)
87 #define XZDMA_CH_WR_ONLY_WORD0_OFFSET           (0x148U)
88 #define XZDMA_CH_WR_ONLY_WORD1_OFFSET           (0x14CU)
89 #define XZDMA_CH_WR_ONLY_WORD2_OFFSET           (0x150U)
90 #define XZDMA_CH_WR_ONLY_WORD3_OFFSET           (0x154U)
91 #define XZDMA_CH_SRC_START_LSB_OFFSET           (0x158U)
92 #define XZDMA_CH_SRC_START_MSB_OFFSET           (0x15CU)
93 #define XZDMA_CH_DST_START_LSB_OFFSET           (0x160U)
94 #define XZDMA_CH_DST_START_MSB_OFFSET           (0x164U)
95 #define XZDMA_CH_SRC_CUR_PYLD_LSB_OFFSET        (0x168U)
96 #define XZDMA_CH_SRC_CUR_PYLD_MSB_OFFSET        (0x16CU)
97 #define XZDMA_CH_DST_CUR_PYLD_LSB_OFFSET        (0x170U)
98 #define XZDMA_CH_DST_CUR_PYLD_MSB_OFFSET        (0x174U)
99 #define XZDMA_CH_SRC_CUR_DSCR_LSB_OFFSET        (0x178U)
100 #define XZDMA_CH_SRC_CUR_DSCR_MSB_OFFSET        (0x17CU)
101 #define XZDMA_CH_DST_CUR_DSCR_LSB_OFFSET        (0x180U)
102 #define XZDMA_CH_DST_CUR_DSCR_MSB_OFFSET        (0x184U)
103 #define XZDMA_CH_TOTAL_BYTE_OFFSET              (0x188U)
104 #define XZDMA_CH_RATE_CNTL_OFFSET               (0x18CU)
105 #define XZDMA_CH_IRQ_SRC_ACCT_OFFSET            (0x190U)
106 #define XZDMA_CH_IRQ_DST_ACCT_OFFSET            (0x194U)
107 #define XZDMA_CH_CTRL2_OFFSET                   (0x200U)
108 /*@}*/
109
110 #define XZDMA_SLCR_SECURE_OFFSET                (0xff4b0024)
111 /** @name Interrupt Enable/Disable/Mask/Status registers bit masks and shifts
112  * @{
113  */
114 #define XZDMA_IXR_DMA_PAUSE_MASK        (0x00000800U) /**< IXR pause mask */
115 #define XZDMA_IXR_DMA_DONE_MASK         (0x00000400U) /**< IXR done mask */
116 #define XZDMA_IXR_AXI_WR_DATA_MASK      (0x00000200U) /**< IXR AXI write data
117                                                         *  error mask */
118 #define XZDMA_IXR_AXI_RD_DATA_MASK      (0x00000100U) /**< IXR AXI read data
119                                                         *  error mask */
120 #define XZDMA_IXR_AXI_RD_DST_DSCR_MASK  (0x00000080U) /**< IXR AXI read
121                                                         *  descriptor error
122                                                         *  mask */
123 #define XZDMA_IXR_AXI_RD_SRC_DSCR_MASK  (0x00000040U) /**< IXR AXI write
124                                                         *  descriptor error
125                                                         *  mask */
126 #define XZDMA_IXR_DST_ACCT_ERR_MASK     (0x00000020U) /**< IXR DST interrupt
127                                                         *  count overflow
128                                                         *  mask */
129 #define XZDMA_IXR_SRC_ACCT_ERR_MASK     (0x00000010U) /**< IXR SRC interrupt
130                                                         *  count overflow
131                                                         *  mask */
132 #define XZDMA_IXR_BYTE_CNT_OVRFL_MASK   (0x00000008U) /**< IXR byte count over
133                                                         * flow mask */
134 #define XZDMA_IXR_DST_DSCR_DONE_MASK    (0x00000004U) /**< IXR destination
135                                                         *  descriptor done
136                                                         *  mask */
137 #define XZDMA_IXR_SRC_DSCR_DONE_MASK    (0x00000002U) /**< IXR source
138                                                         *  descriptor done
139                                                         *  mask */
140 #define XZDMA_IXR_INV_APB_MASK          (0x00000001U) /**< IXR invalid APB
141                                                         *  access mask */
142 #define XZDMA_IXR_ALL_INTR_MASK         (0x00000FFFU) /**< IXR OR of all the
143                                                         *  interrupts mask */
144 #define XZDMA_IXR_DONE_MASK             (0x00000400U) /**< IXR All done mask */
145
146 #define XZDMA_IXR_ERR_MASK              (0x00000BF9U) /**< IXR all Error mask*/
147                                         /**< Or of XZDMA_IXR_AXI_WR_DATA_MASK,
148                                           * XZDMA_IXR_AXI_RD_DATA_MASK,
149                                           * XZDMA_IXR_AXI_RD_DST_DSCR_MASK,
150                                           * XZDMA_IXR_AXI_RD_SRC_DSCR_MASK,
151                                           * XZDMA_IXR_INV_APB_MASK,
152                                           * XZDMA_IXR_DMA_PAUSE_MASK,
153                                           * XZDMA_IXR_BYTE_CNT_OVRFL_MASK,
154                                           * XZDMA_IXR_SRC_ACCT_ERR_MASK,
155                                           *  XZDMA_IXR_DST_ACCT_ERR_MASK */
156 /*@}*/
157
158 /** @name Channel Control0 register bit masks and shifts
159  * @{
160  */
161 #define XZDMA_CTRL0_OVR_FETCH_MASK      (0x00000080U) /**< Over fetch mask */
162 #define XZDMA_CTRL0_POINT_TYPE_MASK     (0x00000040U) /**< Pointer type mask */
163 #define XZDMA_CTRL0_MODE_MASK           (0x00000030U) /**< Mode mask */
164 #define XZDMA_CTRL0_WRONLY_MASK         (0x00000010U) /**< Write only mask */
165 #define XZDMA_CTRL0_RDONLY_MASK         (0x00000020U) /**< Read only mask */
166 #define XZDMA_CTRL0_RATE_CNTL_MASK      (0x00000008U) /**< Rate control mask */
167 #define XZDMA_CTRL0_CONT_ADDR_MASK      (0x00000004U) /**< Continue address
168                                                         *  specified mask */
169 #define XZDMA_CTRL0_CONT_MASK           (0x00000002U) /**< Continue mask */
170
171 #define XZDMA_CTRL0_OVR_FETCH_SHIFT     (7U)    /**< Over fetch shift */
172 #define XZDMA_CTRL0_POINT_TYPE_SHIFT    (6U)    /**< Pointer type shift */
173 #define XZDMA_CTRL0_MODE_SHIFT          (4U)    /**< Mode type shift */
174 #define XZDMA_CTRL0_RESET_VALUE         (0x00000080U) /**< CTRL0 reset value */
175
176 /*@}*/
177
178 /** @name Channel Control1 register bit masks and shifts
179  * @{
180  */
181 #define XZDMA_CTRL1_SRC_ISSUE_MASK      (0x0000001FU) /**< Source issue mask */
182 #define XZDMA_CTRL1_RESET_VALUE         (0x000003FFU) /**< CTRL1 reset value */
183 /*@}*/
184
185 /** @name Channel Peripheral register bit masks and shifts
186  * @{
187  */
188 #define XZDMA_PERIF_PROG_CELL_CNT_MASK  (0x0000003EU) /**< Peripheral program
189                                                         *  cell count */
190 #define XZDMA_PERIF_SIDE_MASK           (0x00000002U) /**< Interface attached
191                                                         * the side mask */
192 #define XZDMA_PERIF_EN_MASK             (0x00000001U) /**< Peripheral flow
193                                                         * control mask */
194 /*@}*/
195
196 /** @name Channel Status register bit masks and shifts
197  * @{
198  */
199 #define XZDMA_STS_DONE_ERR_MASK (0x00000003U) /**< Done with errors mask */
200 #define XZDMA_STS_BUSY_MASK     (0x00000002U) /**< ZDMA is busy in transfer
201                                                 *  mask */
202 #define XZDMA_STS_PAUSE_MASK    (0x00000001U) /**< ZDMA is in Pause state
203                                                 *  mask */
204 #define XZDMA_STS_DONE_MASK     (0x00000000U) /**< ZDMA done mask */
205 #define XZDMA_STS_ALL_MASK      (0x00000003U) /**< ZDMA status mask */
206
207 /*@}*/
208
209 /** @name Channel Data Attribute register bit masks and shifts
210  * @{
211  */
212 #define XZDMA_DATA_ATTR_ARBURST_MASK    (0x0C000000U) /**< Data ArBurst mask */
213 #define XZDMA_DATA_ATTR_ARCACHE_MASK    (0x03C00000U) /**< Data ArCache mask */
214 #define XZDMA_DATA_ATTR_ARQOS_MASK      (0x003C0000U) /**< Data ARQos masks */
215 #define XZDMA_DATA_ATTR_ARLEN_MASK      (0x0003C000U) /**< Data Arlen mask */
216 #define XZDMA_DATA_ATTR_AWBURST_MASK    (0x00003000U) /**< Data Awburst mask */
217 #define XZDMA_DATA_ATTR_AWCACHE_MASK    (0x00000F00U) /**< Data AwCache mask */
218 #define XZDMA_DATA_ATTR_AWQOS_MASK      (0x000000F0U) /**< Data AwQos mask */
219 #define XZDMA_DATA_ATTR_AWLEN_MASK      (0x0000000FU) /**< Data Awlen mask */
220
221 #define XZDMA_DATA_ATTR_ARBURST_SHIFT   (26U) /**< Data Arburst shift */
222 #define XZDMA_DATA_ATTR_ARCACHE_SHIFT   (22U) /**< Data ArCache shift */
223 #define XZDMA_DATA_ATTR_ARQOS_SHIFT     (18U) /**< Data ARQos shift */
224 #define XZDMA_DATA_ATTR_ARLEN_SHIFT     (14U) /**< Data Arlen shift */
225 #define XZDMA_DATA_ATTR_AWBURST_SHIFT   (12U) /**< Data Awburst shift  */
226 #define XZDMA_DATA_ATTR_AWCACHE_SHIFT   (8U)  /**< Data Awcache shift */
227 #define XZDMA_DATA_ATTR_AWQOS_SHIFT     (4U)  /**< Data Awqos shift */
228 #define XZDMA_DATA_ATTR_RESET_VALUE     (0x0483D20FU) /**< Data Attributes
229                                                         *  reset value */
230
231 /*@}*/
232
233 /** @name Channel DSCR Attribute register bit masks and shifts
234  * @{
235  */
236 #define XZDMA_DSCR_ATTR_AXCOHRNT_MASK   (0x00000100U) /**< Descriptor coherent
237                                                         *  mask */
238 #define XZDMA_DSCR_ATTR_AXCACHE_MASK    (0x000000F0U) /**< Descriptor cache
239                                                         * mask */
240 #define XZDMA_DSCR_ATTR_AXQOS_MASK      (0x0000000FU) /**< Descriptor AxQos
241                                                         *  mask */
242
243 #define XZDMA_DSCR_ATTR_AXCOHRNT_SHIFT  (8U) /**< Descriptor coherent shift */
244 #define XZDMA_DSCR_ATTR_AXCACHE_SHIFT   (4U) /**< Descriptor cache shift */
245 #define XZDMA_DSCR_ATTR_RESET_VALUE     (0x00000000U) /**< Dscr Attributes
246                                                         *  reset value */
247
248 /*@}*/
249
250 /** @name Channel Source/Destination Word0 register bit mask
251  * @{
252  */
253 #define XZDMA_WORD0_LSB_MASK    (0xFFFFFFFFU)   /**< LSB Address mask */
254 /*@}*/
255
256 /** @name Channel Source/Destination Word1 register bit mask
257  * @{
258  */
259 #define XZDMA_WORD1_MSB_MASK    (0x0001FFFFU)   /**< MSB Address mask */
260 #define XZDMA_WORD1_MSB_SHIFT   (32U)           /**< MSB Address shift */
261 /*@}*/
262
263 /** @name Channel Source/Destination Word2 register bit mask
264  * @{
265  */
266 #define XZDMA_WORD2_SIZE_MASK   (0x3FFFFFFFU) /**< Size mask */
267 /*@}*/
268
269 /** @name Channel Source/Destination Word3 register bit masks and shifts
270  * @{
271  */
272 #define XZDMA_WORD3_CMD_MASK            (0x00000018U)   /**< Cmd mask */
273 #define XZDMA_WORD3_CMD_SHIFT           (3U)            /**< Cmd shift */
274 #define XZDMA_WORD3_CMD_NXTVALID_MASK   (0x00000000U)   /**< Next Dscr is valid
275                                                           *  mask */
276 #define XZDMA_WORD3_CMD_PAUSE_MASK      (0x00000008U)   /**< Pause after this
277                                                           * dscr mask */
278 #define XZDMA_WORD3_CMD_STOP_MASK       (0x00000010U)   /**< Stop after this
279                                                         ..*  dscr mask */
280 #define XZDMA_WORD3_INTR_MASK           (0x00000004U)   /**< Interrupt
281                                                           *  enable or disable
282                                                           *  mask */
283 #define XZDMA_WORD3_INTR_SHIFT          (2U)            /**< Interrupt enable
284                                                           *  disable
285                                                           *  shift */
286 #define XZDMA_WORD3_TYPE_MASK           (0x00000002U)   /**< Type of Descriptor
287                                                           *  mask */
288 #define XZDMA_WORD3_TYPE_SHIFT          (1U)            /**< Type of Descriptor
289                                                           *  Shift */
290 #define XZDMA_WORD3_COHRNT_MASK         (0x00000001U)   /**< Coherence mask */
291 /*@}*/
292
293 /** @name Channel Source/Destination start address or current payload
294  *  MSB register bit mask
295  * @{
296  */
297 #define XZDMA_START_MSB_ADDR_MASK       (0x0001FFFFU)   /**< Start msb address
298                                                           *  mask */
299 /*@}*/
300
301 /** @name Channel Rate control count register bit mask
302  * @{
303  */
304 #define XZDMA_CH_RATE_CNTL_MASK         (0x00000FFFU) /**< Channel rate control
305                                                         *  mask */
306 /*@}*/
307
308 /** @name Channel Source/Destination Interrupt account count register bit mask
309  * @{
310  */
311 #define XZDMA_CH_IRQ_ACCT_MASK          (0x000000FFU) /**< Interrupt count
312                                                         *  mask */
313 /*@}*/
314
315 /** @name Channel debug register 0/1 bit mask
316  * @{
317  */
318 #define XZDMA_CH_DBG_CMN_BUF_MASK       (0x000001FFU) /**< Common buffer count
319                                                         * mask */
320 /*@}*/
321
322 /** @name Channel control2 register bit mask
323  * @{
324  */
325 #define XZDMA_CH_CTRL2_EN_MASK          (0x00000001U) /**< Channel enable
326                                                         *  mask */
327 #define XZDMA_CH_CTRL2_DIS_MASK         (0x00000000U) /**< Channel disable
328                                                         *  mask */
329 /*@}*/
330
331 /** @name Channel control2 register bit mask
332  * @{
333  */
334  #define XZDMA_WRITE_TO_CLEAR_MASK      (0x00000000U) /**< Write to clear
335                                                         *  mask */
336  /*@}*/
337
338 /***************** Macros (Inline Functions) Definitions *********************/
339
340 #define XZDma_In32              Xil_In32        /**< Input operation */
341 #define XZDma_Out32             Xil_Out32       /**< Output operation */
342
343 /*****************************************************************************/
344 /**
345 *
346 * This macro reads the given register.
347 *
348 * @param        BaseAddress is the Xilinx base address of the ZDMA core.
349 * @param        RegOffset is the register offset of the register.
350 *
351 * @return       The 32-bit value of the register.
352 *
353 * @note         C-style signature:
354 *               u32 XZDma_ReadReg(u32 BaseAddress, u32 RegOffset)
355 *
356 ******************************************************************************/
357 #define XZDma_ReadReg(BaseAddress, RegOffset) \
358                 XZDma_In32((BaseAddress) + (u32)(RegOffset))
359
360 /*****************************************************************************/
361 /**
362 *
363 * This macro writes the value into the given register.
364 *
365 * @param        BaseAddress is the Xilinx base address of the ZDMA core.
366 * @param        RegOffset is the register offset of the register.
367 * @param        Data is the 32-bit value to write to the register.
368 *
369 * @return       None.
370 *
371 * @note         C-style signature:
372 *               void XZDma_WriteReg(u32 BaseAddress, u32 RegOffset, u32 Data)
373 *
374 ******************************************************************************/
375 #define XZDma_WriteReg(BaseAddress, RegOffset, Data) \
376                 XZDma_Out32(((BaseAddress) + (u32)(RegOffset)), (u32)(Data))
377
378 #ifdef __cplusplus
379 }
380
381 #endif
382
383 #endif /* XZDMA_HW_H_ */
384 /** @} */