Sound Open Firmware
Loading...
Searching...
No Matches
edma.h
Go to the documentation of this file.
1
/* SPDX-License-Identifier: BSD-3-Clause
2
*
3
* Copyright 2019 NXP
4
*
5
* Author: Daniel Baluta <daniel.baluta@nxp.com>
6
*/
7
8
#ifndef __SOF_DRIVERS_EDMA_H__
9
#define __SOF_DRIVERS_EDMA_H__
10
11
#include <
rtos/bit.h
>
12
#include <sof/trace/trace.h>
13
#include <
user/trace.h
>
14
15
#include <errno.h>
16
#include <stddef.h>
17
18
#define EDMA_CH_CSR 0x00
19
#define EDMA_CH_ES 0x04
20
#define EDMA_CH_INT 0x08
21
#define EDMA_CH_SBR 0x0C
22
#define EDMA_CH_PRI 0x10
23
#define EDMA_CH_MUX 0x14
24
#define EDMA_TCD_SADDR 0x20
25
#define EDMA_TCD_SOFF 0x24
26
#define EDMA_TCD_ATTR 0x26
27
#define EDMA_TCD_NBYTES 0x28
28
#define EDMA_TCD_SLAST 0x2C
29
#define EDMA_TCD_DADDR 0x30
30
#define EDMA_TCD_DOFF 0x34
31
#define EDMA_TCD_CITER_ELINK 0x36
32
#define EDMA_TCD_CITER 0x36
33
#define EDMA_TCD_DLAST_SGA 0x38
34
#define EDMA_TCD_CSR 0x3C
35
#define EDMA_TCD_BITER_ELINK 0x3E
36
#define EDMA_TCD_BITER 0x3E
37
38
#define EDMA_CSR 0x00
39
#define EDMA_ES 0x04
40
#define EDMA_INT 0x08
41
#define EDMA_HRS 0x0C
42
43
#define EDMA_TCD_CSR_START BIT(0)
44
#define EDMA_TCD_CSR_INTMAJOR BIT(1)
45
#define EDMA_TCD_CSR_INTHALF BIT(2)
46
#define EDMA_TCD_CSR_INTHALF_INTMAJOR (BIT(1) | BIT(2))
47
#define EDMA_TCD_CSR_DREQ BIT(3)
48
#define EDMA_TCD_CSR_ESG BIT(4)
49
#define EDMA_CH_CSR_ERQ_EARQ (BIT(0) | BIT(1))
50
51
#define EDMA_CH_ES_ERR BIT(31)
52
#define EDMA_CH_ES_SAE BIT(7)
53
#define EDMA_CH_ES_SOE BIT(6)
54
#define EDMA_CH_ES_DAE BIT(5)
55
#define EDMA_CH_ES_DOE BIT(4)
56
#define EDMA_CH_ES_NCE BIT(3)
57
#define EDMA_CH_ES_SGE BIT(2)
58
#define EDMA_CH_ES_SBE BIT(1)
59
#define EDMA_CH_ES_DBE BIT(0)
60
61
#define EDMA_TCD_ATTR_SSIZE_8BIT 0x0000
62
#define EDMA_TCD_ATTR_SSIZE_16BIT 0x0100
63
#define EDMA_TCD_ATTR_SSIZE_32BIT 0x0200
64
#define EDMA_TCD_ATTR_SSIZE_64BIT 0x0300
65
#define EDMA_TCD_ATTR_SSIZE_16BYTE 0x0400
66
#define EDMA_TCD_ATTR_SSIZE_32BYTE 0x0500
67
#define EDMA_TCD_ATTR_SSIZE_64BYTE 0x0600
68
69
#define EDMA_TCD_ATTR_DSIZE_8BIT 0x0000
70
#define EDMA_TCD_ATTR_DSIZE_16BIT 0x0001
71
#define EDMA_TCD_ATTR_DSIZE_32BIT 0x0002
72
#define EDMA_TCD_ATTR_DSIZE_64BIT 0x0003
73
#define EDMA_TCD_ATTR_DSIZE_16BYTE 0x0004
74
#define EDMA_TCD_ATTR_DSIZE_32BYTE 0x0005
75
#define EDMA_TCD_ATTR_DSIZE_64BYTE 0x0006
76
77
#define EDMA_BUFFER_PERIOD_COUNT 2
78
79
#define EDMA_TCD_ALIGNMENT 32
80
81
#define EDMA_HS_GET_IRQ(hs) (((hs) & MASK(8, 0)) >> 0)
82
#define EDMA_HS_SET_IRQ(irq) SET_BITS(8, 0, irq)
83
#define EDMA_HS_GET_CHAN(hs) (((hs) & MASK(13, 9)) >> 9)
84
#define EDMA_HS_SET_CHAN(chan) SET_BITS(13, 9, chan)
85
#define EDMA_HS_GET_DMAMUX_CFG(hs) (((hs) & MASK(21, 14)) >> 14)
86
#define EDMA_HS_SET_DMAMUX_CFG(cfg) SET_BITS(21, 14, cfg)
87
#define EDMA_HANDSHAKE(irq, channel, cfg)\
88
(EDMA_HS_SET_CHAN(channel) | EDMA_HS_SET_IRQ(irq) | EDMA_HS_SET_DMAMUX_CFG(cfg))
89
90
#define EDMA0_ESAI_CHAN_RX 6
91
#define EDMA0_ESAI_CHAN_TX 7
92
#define EDMA0_SAI_CHAN_RX 14
93
#define EDMA0_SAI_CHAN_TX 15
94
#define EDMA0_CHAN_MAX 32
95
96
#define EDMA0_ESAI_CHAN_RX_IRQ 442
97
#define EDMA0_ESAI_CHAN_TX_IRQ 442
98
#define EDMA0_SAI_CHAN_RX_IRQ 349
99
#define EDMA0_SAI_CHAN_TX_IRQ 349
100
101
#ifdef CONFIG_IMX93_A55
102
/* encase all of these macros in an
103
* ifdef block to avoid possible future
104
* naming clashes and pointlessly adding
105
* macros for all other platforms.
106
*/
107
#define EDMA2_SAI3_CHAN_RX 1
108
#define EDMA2_SAI3_CHAN_TX 0
109
/* EDMA2 (aka EDMA4 in the TRM) supports
110
* up to 64 channels.
111
*/
112
#define EDMA2_CHAN_MAX 64
113
114
/* need to add SPI_BASE to the INTID as
115
* the values from the TRM are all SPIs.
116
*/
117
#define EDMA2_SAI3_CHAN_RX_IRQ (128 + 32)
118
#define EDMA2_SAI3_CHAN_TX_IRQ (128 + 32)
119
120
/* SAI3 is connected to EDMA2 through
121
* lines 60 (TX) and 61 (RX).
122
*/
123
#define EDMA2_SAI3_TX_MUX 60
124
#define EDMA2_SAI3_RX_MUX 61
125
126
#endif
/* CONFIG_IMX93_A55 */
127
128
/* EDMA doesn't bound channels to IPs, we make use of the first two channels for now */
129
#define IMX8ULP_EDMA2_CHAN0 0
130
#define IMX8ULP_EDMA2_CHAN1 1
131
#define IMX8ULP_EDMA2_CHAN_MAX 8
132
133
/* EDMA provides one interrupt per channel */
134
#define IMX8ULP_EDMA2_CHAN0_IRQ 6
135
#define IMX8ULP_EDMA2_CHAN1_IRQ 7
136
#define IMX8ULP_EDMA2_CHAN2_IRQ 8
137
#define IMX8ULP_EDMA2_CHAN3_IRQ 9
138
#define IMX8ULP_EDMA2_CHAN4_IRQ 10
139
#define IMX8ULP_EDMA2_CHAN5_IRQ 11
140
#define IMX8ULP_EDMA2_CHAN6_IRQ 12
141
#define IMX8ULP_EDMA2_CHAN7_IRQ 13
142
143
/* i.MXULP uses a MUX configuration to map EDMA channels to IPs.
144
* This is a list with DMAMUX configuration for IPs used by SOF
145
*/
146
#define IMX8ULP_DMAMUX2_SAI5_RX 69
147
#define IMX8ULP_DMAMUX2_SAI5_TX 70
148
#define IMX8ULP_DMAMUX2_SAI6_RX 71
149
#define IMX8ULP_DMAMUX2_SAI6_TX 72
150
151
#endif
/* __SOF_DRIVERS_EDMA_H__ */
bit.h
trace.h
User-space ABI log levels and binary trace packet header definitions.
src
include
sof
drivers
edma.h
Generated by
1.9.8