xref: /openbmc/linux/sound/soc/fsl/fsl_easrc.h (revision 4f2c0a4acffbec01079c28f839422e64ddeff004)
1955ac624SShengjiu Wang /* SPDX-License-Identifier: GPL-2.0 */
2955ac624SShengjiu Wang /*
3955ac624SShengjiu Wang  * Copyright (C) 2019 NXP
4955ac624SShengjiu Wang  */
5955ac624SShengjiu Wang 
6955ac624SShengjiu Wang #ifndef _FSL_EASRC_H
7955ac624SShengjiu Wang #define _FSL_EASRC_H
8955ac624SShengjiu Wang 
9955ac624SShengjiu Wang #include <sound/asound.h>
10c6547c2eSSascha Hauer #include <linux/dma/imx-dma.h>
11955ac624SShengjiu Wang 
12955ac624SShengjiu Wang #include "fsl_asrc_common.h"
13955ac624SShengjiu Wang 
14955ac624SShengjiu Wang /* EASRC Register Map */
15955ac624SShengjiu Wang 
16955ac624SShengjiu Wang /* ASRC Input Write FIFO */
17955ac624SShengjiu Wang #define REG_EASRC_WRFIFO(ctx)		(0x000 + 4 * (ctx))
18955ac624SShengjiu Wang /* ASRC Output Read FIFO */
19955ac624SShengjiu Wang #define REG_EASRC_RDFIFO(ctx)		(0x010 + 4 * (ctx))
20955ac624SShengjiu Wang /* ASRC Context Control */
21955ac624SShengjiu Wang #define REG_EASRC_CC(ctx)		(0x020 + 4 * (ctx))
22955ac624SShengjiu Wang /* ASRC Context Control Extended 1 */
23955ac624SShengjiu Wang #define REG_EASRC_CCE1(ctx)		(0x030 + 4 * (ctx))
24955ac624SShengjiu Wang /* ASRC Context Control Extended 2 */
25955ac624SShengjiu Wang #define REG_EASRC_CCE2(ctx)		(0x040 + 4 * (ctx))
26955ac624SShengjiu Wang /* ASRC Control Input Access */
27955ac624SShengjiu Wang #define REG_EASRC_CIA(ctx)		(0x050 + 4 * (ctx))
28955ac624SShengjiu Wang /* ASRC Datapath Processor Control Slot0 */
29955ac624SShengjiu Wang #define REG_EASRC_DPCS0R0(ctx)		(0x060 + 4 * (ctx))
30955ac624SShengjiu Wang #define REG_EASRC_DPCS0R1(ctx)		(0x070 + 4 * (ctx))
31955ac624SShengjiu Wang #define REG_EASRC_DPCS0R2(ctx)		(0x080 + 4 * (ctx))
32955ac624SShengjiu Wang #define REG_EASRC_DPCS0R3(ctx)		(0x090 + 4 * (ctx))
33955ac624SShengjiu Wang /* ASRC Datapath Processor Control Slot1 */
34955ac624SShengjiu Wang #define REG_EASRC_DPCS1R0(ctx)		(0x0A0 + 4 * (ctx))
35955ac624SShengjiu Wang #define REG_EASRC_DPCS1R1(ctx)		(0x0B0 + 4 * (ctx))
36955ac624SShengjiu Wang #define REG_EASRC_DPCS1R2(ctx)		(0x0C0 + 4 * (ctx))
37955ac624SShengjiu Wang #define REG_EASRC_DPCS1R3(ctx)		(0x0D0 + 4 * (ctx))
38955ac624SShengjiu Wang /* ASRC Context Output Control */
39955ac624SShengjiu Wang #define REG_EASRC_COC(ctx)		(0x0E0 + 4 * (ctx))
40955ac624SShengjiu Wang /* ASRC Control Output Access */
41955ac624SShengjiu Wang #define REG_EASRC_COA(ctx)		(0x0F0 + 4 * (ctx))
42955ac624SShengjiu Wang /* ASRC Sample FIFO Status */
43955ac624SShengjiu Wang #define REG_EASRC_SFS(ctx)		(0x100 + 4 * (ctx))
44955ac624SShengjiu Wang /* ASRC Resampling Ratio Low */
45955ac624SShengjiu Wang #define REG_EASRC_RRL(ctx)		(0x110 + 8 * (ctx))
46955ac624SShengjiu Wang /* ASRC Resampling Ratio High */
47955ac624SShengjiu Wang #define REG_EASRC_RRH(ctx)		(0x114 + 8 * (ctx))
48955ac624SShengjiu Wang /* ASRC Resampling Ratio Update Control */
49955ac624SShengjiu Wang #define REG_EASRC_RUC(ctx)		(0x130 + 4 * (ctx))
50955ac624SShengjiu Wang /* ASRC Resampling Ratio Update Rate */
51955ac624SShengjiu Wang #define REG_EASRC_RUR(ctx)		(0x140 + 4 * (ctx))
52955ac624SShengjiu Wang /* ASRC Resampling Center Tap Coefficient Low */
53955ac624SShengjiu Wang #define REG_EASRC_RCTCL			(0x150)
54955ac624SShengjiu Wang /* ASRC Resampling Center Tap Coefficient High */
55955ac624SShengjiu Wang #define REG_EASRC_RCTCH			(0x154)
56955ac624SShengjiu Wang /* ASRC Prefilter Coefficient FIFO */
57955ac624SShengjiu Wang #define REG_EASRC_PCF(ctx)		(0x160 + 4 * (ctx))
58955ac624SShengjiu Wang /* ASRC Context Resampling Coefficient Memory */
59955ac624SShengjiu Wang #define REG_EASRC_CRCM			0x170
60955ac624SShengjiu Wang /* ASRC Context Resampling Coefficient Control*/
61955ac624SShengjiu Wang #define REG_EASRC_CRCC			0x174
62955ac624SShengjiu Wang /* ASRC Interrupt Control */
63955ac624SShengjiu Wang #define REG_EASRC_IRQC			0x178
64955ac624SShengjiu Wang /* ASRC Interrupt Status Flags */
65955ac624SShengjiu Wang #define REG_EASRC_IRQF			0x17C
66955ac624SShengjiu Wang /* ASRC Channel Status 0 */
67955ac624SShengjiu Wang #define REG_EASRC_CS0(ctx)		(0x180 + 4 * (ctx))
68955ac624SShengjiu Wang /* ASRC Channel Status 1 */
69955ac624SShengjiu Wang #define REG_EASRC_CS1(ctx)		(0x190 + 4 * (ctx))
70955ac624SShengjiu Wang /* ASRC Channel Status 2 */
71955ac624SShengjiu Wang #define REG_EASRC_CS2(ctx)		(0x1A0 + 4 * (ctx))
72955ac624SShengjiu Wang /* ASRC Channel Status 3 */
73955ac624SShengjiu Wang #define REG_EASRC_CS3(ctx)		(0x1B0 + 4 * (ctx))
74955ac624SShengjiu Wang /* ASRC Channel Status 4 */
75955ac624SShengjiu Wang #define REG_EASRC_CS4(ctx)		(0x1C0 + 4 * (ctx))
76955ac624SShengjiu Wang /* ASRC Channel Status 5 */
77955ac624SShengjiu Wang #define REG_EASRC_CS5(ctx)		(0x1D0 + 4 * (ctx))
78955ac624SShengjiu Wang /* ASRC Debug Control Register */
79955ac624SShengjiu Wang #define REG_EASRC_DBGC			0x1E0
80955ac624SShengjiu Wang /* ASRC Debug Status Register */
81955ac624SShengjiu Wang #define REG_EASRC_DBGS			0x1E4
82955ac624SShengjiu Wang 
83955ac624SShengjiu Wang #define REG_EASRC_FIFO(x, ctx)		(x == IN ? REG_EASRC_WRFIFO(ctx) \
84955ac624SShengjiu Wang 						: REG_EASRC_RDFIFO(ctx))
85955ac624SShengjiu Wang 
86955ac624SShengjiu Wang /* ASRC Context Control (CC) */
87955ac624SShengjiu Wang #define EASRC_CC_EN_SHIFT		31
88955ac624SShengjiu Wang #define EASRC_CC_EN_MASK		BIT(EASRC_CC_EN_SHIFT)
89955ac624SShengjiu Wang #define EASRC_CC_EN			BIT(EASRC_CC_EN_SHIFT)
90955ac624SShengjiu Wang #define EASRC_CC_STOP_SHIFT		29
91955ac624SShengjiu Wang #define EASRC_CC_STOP_MASK		BIT(EASRC_CC_STOP_SHIFT)
92955ac624SShengjiu Wang #define EASRC_CC_STOP			BIT(EASRC_CC_STOP_SHIFT)
93955ac624SShengjiu Wang #define EASRC_CC_FWMDE_SHIFT		28
94955ac624SShengjiu Wang #define EASRC_CC_FWMDE_MASK		BIT(EASRC_CC_FWMDE_SHIFT)
95955ac624SShengjiu Wang #define EASRC_CC_FWMDE			BIT(EASRC_CC_FWMDE_SHIFT)
96955ac624SShengjiu Wang #define EASRC_CC_FIFO_WTMK_SHIFT	16
97955ac624SShengjiu Wang #define EASRC_CC_FIFO_WTMK_WIDTH	7
98955ac624SShengjiu Wang #define EASRC_CC_FIFO_WTMK_MASK		((BIT(EASRC_CC_FIFO_WTMK_WIDTH) - 1) \
99955ac624SShengjiu Wang 					 << EASRC_CC_FIFO_WTMK_SHIFT)
100955ac624SShengjiu Wang #define EASRC_CC_FIFO_WTMK(v)		(((v) << EASRC_CC_FIFO_WTMK_SHIFT) \
101955ac624SShengjiu Wang 					 & EASRC_CC_FIFO_WTMK_MASK)
102955ac624SShengjiu Wang #define EASRC_CC_SAMPLE_POS_SHIFT	11
103955ac624SShengjiu Wang #define EASRC_CC_SAMPLE_POS_WIDTH	5
104955ac624SShengjiu Wang #define EASRC_CC_SAMPLE_POS_MASK	((BIT(EASRC_CC_SAMPLE_POS_WIDTH) - 1) \
105955ac624SShengjiu Wang 					 << EASRC_CC_SAMPLE_POS_SHIFT)
106955ac624SShengjiu Wang #define EASRC_CC_SAMPLE_POS(v)		(((v) << EASRC_CC_SAMPLE_POS_SHIFT) \
107955ac624SShengjiu Wang 					 & EASRC_CC_SAMPLE_POS_MASK)
108955ac624SShengjiu Wang #define EASRC_CC_ENDIANNESS_SHIFT	10
109955ac624SShengjiu Wang #define EASRC_CC_ENDIANNESS_MASK	BIT(EASRC_CC_ENDIANNESS_SHIFT)
110955ac624SShengjiu Wang #define EASRC_CC_ENDIANNESS		BIT(EASRC_CC_ENDIANNESS_SHIFT)
111955ac624SShengjiu Wang #define EASRC_CC_BPS_SHIFT		8
112955ac624SShengjiu Wang #define EASRC_CC_BPS_WIDTH		2
113955ac624SShengjiu Wang #define EASRC_CC_BPS_MASK		((BIT(EASRC_CC_BPS_WIDTH) - 1) \
114955ac624SShengjiu Wang 					 << EASRC_CC_BPS_SHIFT)
115955ac624SShengjiu Wang #define EASRC_CC_BPS(v)			(((v) << EASRC_CC_BPS_SHIFT) \
116955ac624SShengjiu Wang 					 & EASRC_CC_BPS_MASK)
117955ac624SShengjiu Wang #define EASRC_CC_FMT_SHIFT		7
118955ac624SShengjiu Wang #define EASRC_CC_FMT_MASK		BIT(EASRC_CC_FMT_SHIFT)
119955ac624SShengjiu Wang #define EASRC_CC_FMT			BIT(EASRC_CC_FMT_SHIFT)
120955ac624SShengjiu Wang #define EASRC_CC_INSIGN_SHIFT		6
121955ac624SShengjiu Wang #define EASRC_CC_INSIGN_MASK		BIT(EASRC_CC_INSIGN_SHIFT)
122955ac624SShengjiu Wang #define EASRC_CC_INSIGN			BIT(EASRC_CC_INSIGN_SHIFT)
123955ac624SShengjiu Wang #define EASRC_CC_CHEN_SHIFT		0
124955ac624SShengjiu Wang #define EASRC_CC_CHEN_WIDTH		5
125955ac624SShengjiu Wang #define EASRC_CC_CHEN_MASK		((BIT(EASRC_CC_CHEN_WIDTH) - 1) \
126955ac624SShengjiu Wang 					 << EASRC_CC_CHEN_SHIFT)
127955ac624SShengjiu Wang #define EASRC_CC_CHEN(v)		(((v) << EASRC_CC_CHEN_SHIFT) \
128955ac624SShengjiu Wang 					 & EASRC_CC_CHEN_MASK)
129955ac624SShengjiu Wang 
130955ac624SShengjiu Wang /* ASRC Context Control Extended 1 (CCE1) */
131955ac624SShengjiu Wang #define EASRC_CCE1_COEF_WS_SHIFT	25
132955ac624SShengjiu Wang #define EASRC_CCE1_COEF_WS_MASK		BIT(EASRC_CCE1_COEF_WS_SHIFT)
133955ac624SShengjiu Wang #define EASRC_CCE1_COEF_WS		BIT(EASRC_CCE1_COEF_WS_SHIFT)
134955ac624SShengjiu Wang #define EASRC_CCE1_COEF_MEM_RST_SHIFT	24
135955ac624SShengjiu Wang #define EASRC_CCE1_COEF_MEM_RST_MASK	BIT(EASRC_CCE1_COEF_MEM_RST_SHIFT)
136955ac624SShengjiu Wang #define EASRC_CCE1_COEF_MEM_RST		BIT(EASRC_CCE1_COEF_MEM_RST_SHIFT)
137955ac624SShengjiu Wang #define EASRC_CCE1_PF_EXP_SHIFT		16
138955ac624SShengjiu Wang #define EASRC_CCE1_PF_EXP_WIDTH		8
139955ac624SShengjiu Wang #define EASRC_CCE1_PF_EXP_MASK		((BIT(EASRC_CCE1_PF_EXP_WIDTH) - 1) \
140955ac624SShengjiu Wang 					 << EASRC_CCE1_PF_EXP_SHIFT)
141955ac624SShengjiu Wang #define EASRC_CCE1_PF_EXP(v)		(((v) << EASRC_CCE1_PF_EXP_SHIFT) \
142955ac624SShengjiu Wang 					 & EASRC_CCE1_PF_EXP_MASK)
143955ac624SShengjiu Wang #define EASRC_CCE1_PF_ST1_WBFP_SHIFT	9
144955ac624SShengjiu Wang #define EASRC_CCE1_PF_ST1_WBFP_MASK	BIT(EASRC_CCE1_PF_ST1_WBFP_SHIFT)
145955ac624SShengjiu Wang #define EASRC_CCE1_PF_ST1_WBFP		BIT(EASRC_CCE1_PF_ST1_WBFP_SHIFT)
146955ac624SShengjiu Wang #define EASRC_CCE1_PF_TSEN_SHIFT	8
147955ac624SShengjiu Wang #define EASRC_CCE1_PF_TSEN_MASK		BIT(EASRC_CCE1_PF_TSEN_SHIFT)
148955ac624SShengjiu Wang #define EASRC_CCE1_PF_TSEN		BIT(EASRC_CCE1_PF_TSEN_SHIFT)
149955ac624SShengjiu Wang #define EASRC_CCE1_RS_BYPASS_SHIFT	7
150955ac624SShengjiu Wang #define EASRC_CCE1_RS_BYPASS_MASK	BIT(EASRC_CCE1_RS_BYPASS_SHIFT)
151955ac624SShengjiu Wang #define EASRC_CCE1_RS_BYPASS		BIT(EASRC_CCE1_RS_BYPASS_SHIFT)
152955ac624SShengjiu Wang #define EASRC_CCE1_PF_BYPASS_SHIFT	6
153955ac624SShengjiu Wang #define EASRC_CCE1_PF_BYPASS_MASK	BIT(EASRC_CCE1_PF_BYPASS_SHIFT)
154955ac624SShengjiu Wang #define EASRC_CCE1_PF_BYPASS		BIT(EASRC_CCE1_PF_BYPASS_SHIFT)
155955ac624SShengjiu Wang #define EASRC_CCE1_RS_STOP_SHIFT	5
156955ac624SShengjiu Wang #define EASRC_CCE1_RS_STOP_MASK		BIT(EASRC_CCE1_RS_STOP_SHIFT)
157955ac624SShengjiu Wang #define EASRC_CCE1_RS_STOP		BIT(EASRC_CCE1_RS_STOP_SHIFT)
158955ac624SShengjiu Wang #define EASRC_CCE1_PF_STOP_SHIFT	4
159955ac624SShengjiu Wang #define EASRC_CCE1_PF_STOP_MASK		BIT(EASRC_CCE1_PF_STOP_SHIFT)
160955ac624SShengjiu Wang #define EASRC_CCE1_PF_STOP		BIT(EASRC_CCE1_PF_STOP_SHIFT)
161955ac624SShengjiu Wang #define EASRC_CCE1_RS_INIT_SHIFT	2
162955ac624SShengjiu Wang #define EASRC_CCE1_RS_INIT_WIDTH	2
163955ac624SShengjiu Wang #define EASRC_CCE1_RS_INIT_MASK		((BIT(EASRC_CCE1_RS_INIT_WIDTH) - 1) \
164955ac624SShengjiu Wang 					 << EASRC_CCE1_RS_INIT_SHIFT)
165955ac624SShengjiu Wang #define EASRC_CCE1_RS_INIT(v)		(((v) << EASRC_CCE1_RS_INIT_SHIFT) \
166955ac624SShengjiu Wang 					 & EASRC_CCE1_RS_INIT_MASK)
167955ac624SShengjiu Wang #define EASRC_CCE1_PF_INIT_SHIFT	0
168955ac624SShengjiu Wang #define EASRC_CCE1_PF_INIT_WIDTH	2
169955ac624SShengjiu Wang #define EASRC_CCE1_PF_INIT_MASK		((BIT(EASRC_CCE1_PF_INIT_WIDTH) - 1) \
170955ac624SShengjiu Wang 					 << EASRC_CCE1_PF_INIT_SHIFT)
171955ac624SShengjiu Wang #define EASRC_CCE1_PF_INIT(v)		(((v) << EASRC_CCE1_PF_INIT_SHIFT) \
172955ac624SShengjiu Wang 					 & EASRC_CCE1_PF_INIT_MASK)
173955ac624SShengjiu Wang 
174955ac624SShengjiu Wang /* ASRC Context Control Extended 2 (CCE2) */
175955ac624SShengjiu Wang #define EASRC_CCE2_ST2_TAPS_SHIFT	16
176955ac624SShengjiu Wang #define EASRC_CCE2_ST2_TAPS_WIDTH	9
177955ac624SShengjiu Wang #define EASRC_CCE2_ST2_TAPS_MASK	((BIT(EASRC_CCE2_ST2_TAPS_WIDTH) - 1) \
178955ac624SShengjiu Wang 					 << EASRC_CCE2_ST2_TAPS_SHIFT)
179955ac624SShengjiu Wang #define EASRC_CCE2_ST2_TAPS(v)		(((v) << EASRC_CCE2_ST2_TAPS_SHIFT) \
180955ac624SShengjiu Wang 					 & EASRC_CCE2_ST2_TAPS_MASK)
181955ac624SShengjiu Wang #define EASRC_CCE2_ST1_TAPS_SHIFT	0
182955ac624SShengjiu Wang #define EASRC_CCE2_ST1_TAPS_WIDTH	9
183955ac624SShengjiu Wang #define EASRC_CCE2_ST1_TAPS_MASK	((BIT(EASRC_CCE2_ST1_TAPS_WIDTH) - 1) \
184955ac624SShengjiu Wang 					 << EASRC_CCE2_ST1_TAPS_SHIFT)
185955ac624SShengjiu Wang #define EASRC_CCE2_ST1_TAPS(v)		(((v) << EASRC_CCE2_ST1_TAPS_SHIFT) \
186955ac624SShengjiu Wang 					 & EASRC_CCE2_ST1_TAPS_MASK)
187955ac624SShengjiu Wang 
188955ac624SShengjiu Wang /* ASRC Control Input Access (CIA) */
189955ac624SShengjiu Wang #define EASRC_CIA_ITER_SHIFT		16
190955ac624SShengjiu Wang #define EASRC_CIA_ITER_WIDTH		6
191955ac624SShengjiu Wang #define EASRC_CIA_ITER_MASK		((BIT(EASRC_CIA_ITER_WIDTH) - 1) \
192955ac624SShengjiu Wang 					 << EASRC_CIA_ITER_SHIFT)
193955ac624SShengjiu Wang #define EASRC_CIA_ITER(v)		(((v) << EASRC_CIA_ITER_SHIFT) \
194955ac624SShengjiu Wang 					 & EASRC_CIA_ITER_MASK)
195955ac624SShengjiu Wang #define EASRC_CIA_GRLEN_SHIFT		8
196955ac624SShengjiu Wang #define EASRC_CIA_GRLEN_WIDTH		6
197955ac624SShengjiu Wang #define EASRC_CIA_GRLEN_MASK		((BIT(EASRC_CIA_GRLEN_WIDTH) - 1) \
198955ac624SShengjiu Wang 					 << EASRC_CIA_GRLEN_SHIFT)
199955ac624SShengjiu Wang #define EASRC_CIA_GRLEN(v)		(((v) << EASRC_CIA_GRLEN_SHIFT) \
200955ac624SShengjiu Wang 					 & EASRC_CIA_GRLEN_MASK)
201955ac624SShengjiu Wang #define EASRC_CIA_ACCLEN_SHIFT		0
202955ac624SShengjiu Wang #define EASRC_CIA_ACCLEN_WIDTH		6
203955ac624SShengjiu Wang #define EASRC_CIA_ACCLEN_MASK		((BIT(EASRC_CIA_ACCLEN_WIDTH) - 1) \
204955ac624SShengjiu Wang 					 << EASRC_CIA_ACCLEN_SHIFT)
205955ac624SShengjiu Wang #define EASRC_CIA_ACCLEN(v)		(((v) << EASRC_CIA_ACCLEN_SHIFT) \
206955ac624SShengjiu Wang 					 & EASRC_CIA_ACCLEN_MASK)
207955ac624SShengjiu Wang 
208955ac624SShengjiu Wang /* ASRC Datapath Processor Control Slot0 Register0 (DPCS0R0) */
209955ac624SShengjiu Wang #define EASRC_DPCS0R0_MAXCH_SHIFT	24
210955ac624SShengjiu Wang #define EASRC_DPCS0R0_MAXCH_WIDTH	5
211955ac624SShengjiu Wang #define EASRC_DPCS0R0_MAXCH_MASK	((BIT(EASRC_DPCS0R0_MAXCH_WIDTH) - 1) \
212955ac624SShengjiu Wang 					 << EASRC_DPCS0R0_MAXCH_SHIFT)
213955ac624SShengjiu Wang #define EASRC_DPCS0R0_MAXCH(v)		(((v) << EASRC_DPCS0R0_MAXCH_SHIFT) \
214955ac624SShengjiu Wang 					 & EASRC_DPCS0R0_MAXCH_MASK)
215955ac624SShengjiu Wang #define EASRC_DPCS0R0_MINCH_SHIFT	16
216955ac624SShengjiu Wang #define EASRC_DPCS0R0_MINCH_WIDTH	5
217955ac624SShengjiu Wang #define EASRC_DPCS0R0_MINCH_MASK	((BIT(EASRC_DPCS0R0_MINCH_WIDTH) - 1) \
218955ac624SShengjiu Wang 					 << EASRC_DPCS0R0_MINCH_SHIFT)
219955ac624SShengjiu Wang #define EASRC_DPCS0R0_MINCH(v)		(((v) << EASRC_DPCS0R0_MINCH_SHIFT) \
220955ac624SShengjiu Wang 					 & EASRC_DPCS0R0_MINCH_MASK)
221955ac624SShengjiu Wang #define EASRC_DPCS0R0_NUMCH_SHIFT	8
222955ac624SShengjiu Wang #define EASRC_DPCS0R0_NUMCH_WIDTH	5
223955ac624SShengjiu Wang #define EASRC_DPCS0R0_NUMCH_MASK	((BIT(EASRC_DPCS0R0_NUMCH_WIDTH) - 1) \
224955ac624SShengjiu Wang 					 << EASRC_DPCS0R0_NUMCH_SHIFT)
225955ac624SShengjiu Wang #define EASRC_DPCS0R0_NUMCH(v)		(((v) << EASRC_DPCS0R0_NUMCH_SHIFT) \
226955ac624SShengjiu Wang 					 & EASRC_DPCS0R0_NUMCH_MASK)
227955ac624SShengjiu Wang #define EASRC_DPCS0R0_CTXNUM_SHIFT	1
228955ac624SShengjiu Wang #define EASRC_DPCS0R0_CTXNUM_WIDTH	2
229955ac624SShengjiu Wang #define EASRC_DPCS0R0_CTXNUM_MASK	((BIT(EASRC_DPCS0R0_CTXNUM_WIDTH) - 1) \
230955ac624SShengjiu Wang 					 << EASRC_DPCS0R0_CTXNUM_SHIFT)
231955ac624SShengjiu Wang #define EASRC_DPCS0R0_CTXNUM(v)		(((v) << EASRC_DPCS0R0_CTXNUM_SHIFT) \
232955ac624SShengjiu Wang 					 & EASRC_DPCS0R0_CTXNUM_MASK)
233955ac624SShengjiu Wang #define EASRC_DPCS0R0_EN_SHIFT		0
234955ac624SShengjiu Wang #define EASRC_DPCS0R0_EN_MASK		BIT(EASRC_DPCS0R0_EN_SHIFT)
235955ac624SShengjiu Wang #define EASRC_DPCS0R0_EN		BIT(EASRC_DPCS0R0_EN_SHIFT)
236955ac624SShengjiu Wang 
237955ac624SShengjiu Wang /* ASRC Datapath Processor Control Slot0 Register1 (DPCS0R1) */
238955ac624SShengjiu Wang #define EASRC_DPCS0R1_ST1_EXP_SHIFT	0
239955ac624SShengjiu Wang #define EASRC_DPCS0R1_ST1_EXP_WIDTH	13
240955ac624SShengjiu Wang #define EASRC_DPCS0R1_ST1_EXP_MASK	((BIT(EASRC_DPCS0R1_ST1_EXP_WIDTH) - 1) \
241955ac624SShengjiu Wang 					 << EASRC_DPCS0R1_ST1_EXP_SHIFT)
242955ac624SShengjiu Wang #define EASRC_DPCS0R1_ST1_EXP(v)	(((v) << EASRC_DPCS0R1_ST1_EXP_SHIFT) \
243955ac624SShengjiu Wang 					 & EASRC_DPCS0R1_ST1_EXP_MASK)
244955ac624SShengjiu Wang 
245955ac624SShengjiu Wang /* ASRC Datapath Processor Control Slot0 Register2 (DPCS0R2) */
246955ac624SShengjiu Wang #define EASRC_DPCS0R2_ST1_MA_SHIFT	16
247955ac624SShengjiu Wang #define EASRC_DPCS0R2_ST1_MA_WIDTH	13
248955ac624SShengjiu Wang #define EASRC_DPCS0R2_ST1_MA_MASK	((BIT(EASRC_DPCS0R2_ST1_MA_WIDTH) - 1) \
249955ac624SShengjiu Wang 					 << EASRC_DPCS0R2_ST1_MA_SHIFT)
250955ac624SShengjiu Wang #define EASRC_DPCS0R2_ST1_MA(v)		(((v) << EASRC_DPCS0R2_ST1_MA_SHIFT) \
251955ac624SShengjiu Wang 					 & EASRC_DPCS0R2_ST1_MA_MASK)
252955ac624SShengjiu Wang #define EASRC_DPCS0R2_ST1_SA_SHIFT	0
253955ac624SShengjiu Wang #define EASRC_DPCS0R2_ST1_SA_WIDTH	13
254955ac624SShengjiu Wang #define EASRC_DPCS0R2_ST1_SA_MASK	((BIT(EASRC_DPCS0R2_ST1_SA_WIDTH) - 1) \
255955ac624SShengjiu Wang 					 << EASRC_DPCS0R2_ST1_SA_SHIFT)
256955ac624SShengjiu Wang #define EASRC_DPCS0R2_ST1_SA(v)		(((v) << EASRC_DPCS0R2_ST1_SA_SHIFT) \
257955ac624SShengjiu Wang 					 & EASRC_DPCS0R2_ST1_SA_MASK)
258955ac624SShengjiu Wang 
259955ac624SShengjiu Wang /* ASRC Datapath Processor Control Slot0 Register3 (DPCS0R3) */
260955ac624SShengjiu Wang #define EASRC_DPCS0R3_ST2_MA_SHIFT	16
261955ac624SShengjiu Wang #define EASRC_DPCS0R3_ST2_MA_WIDTH	13
262955ac624SShengjiu Wang #define EASRC_DPCS0R3_ST2_MA_MASK	((BIT(EASRC_DPCS0R3_ST2_MA_WIDTH) - 1) \
263955ac624SShengjiu Wang 					 << EASRC_DPCS0R3_ST2_MA_SHIFT)
264955ac624SShengjiu Wang #define EASRC_DPCS0R3_ST2_MA(v)		(((v) << EASRC_DPCS0R3_ST2_MA_SHIFT) \
265955ac624SShengjiu Wang 					 & EASRC_DPCS0R3_ST2_MA_MASK)
266955ac624SShengjiu Wang #define EASRC_DPCS0R3_ST2_SA_SHIFT	0
267955ac624SShengjiu Wang #define EASRC_DPCS0R3_ST2_SA_WIDTH	13
268955ac624SShengjiu Wang #define EASRC_DPCS0R3_ST2_SA_MASK	((BIT(EASRC_DPCS0R3_ST2_SA_WIDTH) - 1) \
269955ac624SShengjiu Wang 					 << EASRC_DPCS0R3_ST2_SA_SHIFT)
270955ac624SShengjiu Wang #define EASRC_DPCS0R3_ST2_SA(v)		(((v) << EASRC_DPCS0R3_ST2_SA_SHIFT) \
271955ac624SShengjiu Wang 						 & EASRC_DPCS0R3_ST2_SA_MASK)
272955ac624SShengjiu Wang 
273955ac624SShengjiu Wang /* ASRC Context Output Control (COC) */
274955ac624SShengjiu Wang #define EASRC_COC_FWMDE_SHIFT		28
275955ac624SShengjiu Wang #define EASRC_COC_FWMDE_MASK		BIT(EASRC_COC_FWMDE_SHIFT)
276955ac624SShengjiu Wang #define EASRC_COC_FWMDE			BIT(EASRC_COC_FWMDE_SHIFT)
277955ac624SShengjiu Wang #define EASRC_COC_FIFO_WTMK_SHIFT	16
278955ac624SShengjiu Wang #define EASRC_COC_FIFO_WTMK_WIDTH	7
279955ac624SShengjiu Wang #define EASRC_COC_FIFO_WTMK_MASK	((BIT(EASRC_COC_FIFO_WTMK_WIDTH) - 1) \
280955ac624SShengjiu Wang 					 << EASRC_COC_FIFO_WTMK_SHIFT)
281955ac624SShengjiu Wang #define EASRC_COC_FIFO_WTMK(v)		(((v) << EASRC_COC_FIFO_WTMK_SHIFT) \
282955ac624SShengjiu Wang 					 & EASRC_COC_FIFO_WTMK_MASK)
283955ac624SShengjiu Wang #define EASRC_COC_SAMPLE_POS_SHIFT	11
284955ac624SShengjiu Wang #define EASRC_COC_SAMPLE_POS_WIDTH	5
285955ac624SShengjiu Wang #define EASRC_COC_SAMPLE_POS_MASK	((BIT(EASRC_COC_SAMPLE_POS_WIDTH) - 1) \
286955ac624SShengjiu Wang 					 << EASRC_COC_SAMPLE_POS_SHIFT)
287955ac624SShengjiu Wang #define EASRC_COC_SAMPLE_POS(v)		(((v) << EASRC_COC_SAMPLE_POS_SHIFT) \
288955ac624SShengjiu Wang 					 & EASRC_COC_SAMPLE_POS_MASK)
289955ac624SShengjiu Wang #define EASRC_COC_ENDIANNESS_SHIFT	10
290955ac624SShengjiu Wang #define EASRC_COC_ENDIANNESS_MASK	BIT(EASRC_COC_ENDIANNESS_SHIFT)
291955ac624SShengjiu Wang #define EASRC_COC_ENDIANNESS		BIT(EASRC_COC_ENDIANNESS_SHIFT)
292955ac624SShengjiu Wang #define EASRC_COC_BPS_SHIFT		8
293955ac624SShengjiu Wang #define EASRC_COC_BPS_WIDTH		2
294955ac624SShengjiu Wang #define EASRC_COC_BPS_MASK		((BIT(EASRC_COC_BPS_WIDTH) - 1) \
295955ac624SShengjiu Wang 					 << EASRC_COC_BPS_SHIFT)
296955ac624SShengjiu Wang #define EASRC_COC_BPS(v)		(((v) << EASRC_COC_BPS_SHIFT) \
297955ac624SShengjiu Wang 					 & EASRC_COC_BPS_MASK)
298955ac624SShengjiu Wang #define EASRC_COC_FMT_SHIFT		7
299955ac624SShengjiu Wang #define EASRC_COC_FMT_MASK		BIT(EASRC_COC_FMT_SHIFT)
300955ac624SShengjiu Wang #define EASRC_COC_FMT			BIT(EASRC_COC_FMT_SHIFT)
301955ac624SShengjiu Wang #define EASRC_COC_OUTSIGN_SHIFT		6
302955ac624SShengjiu Wang #define EASRC_COC_OUTSIGN_MASK		BIT(EASRC_COC_OUTSIGN_SHIFT)
303955ac624SShengjiu Wang #define EASRC_COC_OUTSIGN_OUT		BIT(EASRC_COC_OUTSIGN_SHIFT)
304955ac624SShengjiu Wang #define EASRC_COC_IEC_VDATA_SHIFT	2
305955ac624SShengjiu Wang #define EASRC_COC_IEC_VDATA_MASK	BIT(EASRC_COC_IEC_VDATA_SHIFT)
306955ac624SShengjiu Wang #define EASRC_COC_IEC_VDATA		BIT(EASRC_COC_IEC_VDATA_SHIFT)
307955ac624SShengjiu Wang #define EASRC_COC_IEC_EN_SHIFT		1
308955ac624SShengjiu Wang #define EASRC_COC_IEC_EN_MASK		BIT(EASRC_COC_IEC_EN_SHIFT)
309955ac624SShengjiu Wang #define EASRC_COC_IEC_EN		BIT(EASRC_COC_IEC_EN_SHIFT)
310955ac624SShengjiu Wang #define EASRC_COC_DITHER_EN_SHIFT	0
311955ac624SShengjiu Wang #define EASRC_COC_DITHER_EN_MASK	BIT(EASRC_COC_DITHER_EN_SHIFT)
312955ac624SShengjiu Wang #define EASRC_COC_DITHER_EN		BIT(EASRC_COC_DITHER_EN_SHIFT)
313955ac624SShengjiu Wang 
314955ac624SShengjiu Wang /* ASRC Control Output Access (COA) */
315955ac624SShengjiu Wang #define EASRC_COA_ITER_SHIFT		16
316955ac624SShengjiu Wang #define EASRC_COA_ITER_WIDTH		6
317955ac624SShengjiu Wang #define EASRC_COA_ITER_MASK		((BIT(EASRC_COA_ITER_WIDTH) - 1) \
318955ac624SShengjiu Wang 					 << EASRC_COA_ITER_SHIFT)
319955ac624SShengjiu Wang #define EASRC_COA_ITER(v)		(((v) << EASRC_COA_ITER_SHIFT) \
320955ac624SShengjiu Wang 					 & EASRC_COA_ITER_MASK)
321955ac624SShengjiu Wang #define EASRC_COA_GRLEN_SHIFT		8
322955ac624SShengjiu Wang #define EASRC_COA_GRLEN_WIDTH		6
323955ac624SShengjiu Wang #define EASRC_COA_GRLEN_MASK		((BIT(EASRC_COA_GRLEN_WIDTH) - 1) \
324955ac624SShengjiu Wang 					 << EASRC_COA_GRLEN_SHIFT)
325955ac624SShengjiu Wang #define EASRC_COA_GRLEN(v)		(((v) << EASRC_COA_GRLEN_SHIFT) \
326955ac624SShengjiu Wang 					 & EASRC_COA_GRLEN_MASK)
327955ac624SShengjiu Wang #define EASRC_COA_ACCLEN_SHIFT		0
328955ac624SShengjiu Wang #define EASRC_COA_ACCLEN_WIDTH		6
329955ac624SShengjiu Wang #define EASRC_COA_ACCLEN_MASK		((BIT(EASRC_COA_ACCLEN_WIDTH) - 1) \
330955ac624SShengjiu Wang 					 << EASRC_COA_ACCLEN_SHIFT)
331955ac624SShengjiu Wang #define EASRC_COA_ACCLEN(v)		(((v) << EASRC_COA_ACCLEN_SHIFT) \
332955ac624SShengjiu Wang 					 & EASRC_COA_ACCLEN_MASK)
333955ac624SShengjiu Wang 
334955ac624SShengjiu Wang /* ASRC Sample FIFO Status (SFS) */
335955ac624SShengjiu Wang #define EASRC_SFS_IWTMK_SHIFT		23
336955ac624SShengjiu Wang #define EASRC_SFS_IWTMK_MASK		BIT(EASRC_SFS_IWTMK_SHIFT)
337955ac624SShengjiu Wang #define EASRC_SFS_IWTMK			BIT(EASRC_SFS_IWTMK_SHIFT)
338955ac624SShengjiu Wang #define EASRC_SFS_NSGI_SHIFT		16
339955ac624SShengjiu Wang #define EASRC_SFS_NSGI_WIDTH		7
340955ac624SShengjiu Wang #define EASRC_SFS_NSGI_MASK		((BIT(EASRC_SFS_NSGI_WIDTH) - 1) \
341955ac624SShengjiu Wang 					 << EASRC_SFS_NSGI_SHIFT)
342955ac624SShengjiu Wang #define EASRC_SFS_NSGI(v)		(((v) << EASRC_SFS_NSGI_SHIFT) \
343955ac624SShengjiu Wang 					 & EASRC_SFS_NSGI_MASK)
344955ac624SShengjiu Wang #define EASRC_SFS_OWTMK_SHIFT		7
345955ac624SShengjiu Wang #define EASRC_SFS_OWTMK_MASK		BIT(EASRC_SFS_OWTMK_SHIFT)
346955ac624SShengjiu Wang #define EASRC_SFS_OWTMK			BIT(EASRC_SFS_OWTMK_SHIFT)
347955ac624SShengjiu Wang #define EASRC_SFS_NSGO_SHIFT		0
348955ac624SShengjiu Wang #define EASRC_SFS_NSGO_WIDTH		7
349955ac624SShengjiu Wang #define EASRC_SFS_NSGO_MASK		((BIT(EASRC_SFS_NSGO_WIDTH) - 1) \
350955ac624SShengjiu Wang 					 << EASRC_SFS_NSGO_SHIFT)
351955ac624SShengjiu Wang #define EASRC_SFS_NSGO(v)		(((v) << EASRC_SFS_NSGO_SHIFT) \
352955ac624SShengjiu Wang 					 & EASRC_SFS_NSGO_MASK)
353955ac624SShengjiu Wang 
354955ac624SShengjiu Wang /* ASRC Resampling Ratio Low (RRL) */
355955ac624SShengjiu Wang #define EASRC_RRL_RS_RL_SHIFT		0
356955ac624SShengjiu Wang #define EASRC_RRL_RS_RL_WIDTH		32
357955ac624SShengjiu Wang #define EASRC_RRL_RS_RL(v)		((v) << EASRC_RRL_RS_RL_SHIFT)
358955ac624SShengjiu Wang 
359955ac624SShengjiu Wang /* ASRC Resampling Ratio High (RRH) */
360955ac624SShengjiu Wang #define EASRC_RRH_RS_VLD_SHIFT		31
361955ac624SShengjiu Wang #define EASRC_RRH_RS_VLD_MASK		BIT(EASRC_RRH_RS_VLD_SHIFT)
362955ac624SShengjiu Wang #define EASRC_RRH_RS_VLD		BIT(EASRC_RRH_RS_VLD_SHIFT)
363955ac624SShengjiu Wang #define EASRC_RRH_RS_RH_SHIFT		0
364955ac624SShengjiu Wang #define EASRC_RRH_RS_RH_WIDTH		12
365955ac624SShengjiu Wang #define EASRC_RRH_RS_RH_MASK		((BIT(EASRC_RRH_RS_RH_WIDTH) - 1) \
366955ac624SShengjiu Wang 					 << EASRC_RRH_RS_RH_SHIFT)
367955ac624SShengjiu Wang #define EASRC_RRH_RS_RH(v)		(((v) << EASRC_RRH_RS_RH_SHIFT) \
368955ac624SShengjiu Wang 					 & EASRC_RRH_RS_RH_MASK)
369955ac624SShengjiu Wang 
370955ac624SShengjiu Wang /* ASRC Resampling Ratio Update Control (RSUC) */
371955ac624SShengjiu Wang #define EASRC_RSUC_RS_RM_SHIFT		0
372955ac624SShengjiu Wang #define EASRC_RSUC_RS_RM_WIDTH		32
373955ac624SShengjiu Wang #define EASRC_RSUC_RS_RM(v)		((v) << EASRC_RSUC_RS_RM_SHIFT)
374955ac624SShengjiu Wang 
375955ac624SShengjiu Wang /* ASRC Resampling Ratio Update Rate (RRUR) */
376955ac624SShengjiu Wang #define EASRC_RRUR_RRR_SHIFT		0
377955ac624SShengjiu Wang #define EASRC_RRUR_RRR_WIDTH		31
378955ac624SShengjiu Wang #define EASRC_RRUR_RRR_MASK		((BIT(EASRC_RRUR_RRR_WIDTH) - 1) \
379955ac624SShengjiu Wang 					 << EASRC_RRUR_RRR_SHIFT)
380955ac624SShengjiu Wang #define EASRC_RRUR_RRR(v)		(((v) << EASRC_RRUR_RRR_SHIFT) \
381955ac624SShengjiu Wang 					 & EASRC_RRUR_RRR_MASK)
382955ac624SShengjiu Wang 
383955ac624SShengjiu Wang /* ASRC Resampling Center Tap Coefficient Low (RCTCL) */
384955ac624SShengjiu Wang #define EASRC_RCTCL_RS_CL_SHIFT		0
385955ac624SShengjiu Wang #define EASRC_RCTCL_RS_CL_WIDTH		32
386955ac624SShengjiu Wang #define EASRC_RCTCL_RS_CL(v)		((v) << EASRC_RCTCL_RS_CL_SHIFT)
387955ac624SShengjiu Wang 
388955ac624SShengjiu Wang /* ASRC Resampling Center Tap Coefficient High (RCTCH) */
389955ac624SShengjiu Wang #define EASRC_RCTCH_RS_CH_SHIFT		0
390955ac624SShengjiu Wang #define EASRC_RCTCH_RS_CH_WIDTH		32
391955ac624SShengjiu Wang #define EASRC_RCTCH_RS_CH(v)		((v) << EASRC_RCTCH_RS_CH_SHIFT)
392955ac624SShengjiu Wang 
393955ac624SShengjiu Wang /* ASRC Prefilter Coefficient FIFO (PCF) */
394955ac624SShengjiu Wang #define EASRC_PCF_CD_SHIFT		0
395955ac624SShengjiu Wang #define EASRC_PCF_CD_WIDTH		32
396955ac624SShengjiu Wang #define EASRC_PCF_CD(v)			((v) << EASRC_PCF_CD_SHIFT)
397955ac624SShengjiu Wang 
398955ac624SShengjiu Wang /* ASRC Context Resampling Coefficient Memory (CRCM) */
399955ac624SShengjiu Wang #define EASRC_CRCM_RS_CWD_SHIFT		0
400955ac624SShengjiu Wang #define EASRC_CRCM_RS_CWD_WIDTH		32
401955ac624SShengjiu Wang #define EASRC_CRCM_RS_CWD(v)		((v) << EASRC_CRCM_RS_CWD_SHIFT)
402955ac624SShengjiu Wang 
403955ac624SShengjiu Wang /* ASRC Context Resampling Coefficient Control (CRCC) */
404955ac624SShengjiu Wang #define EASRC_CRCC_RS_CA_SHIFT		16
405955ac624SShengjiu Wang #define EASRC_CRCC_RS_CA_WIDTH		11
406955ac624SShengjiu Wang #define EASRC_CRCC_RS_CA_MASK		((BIT(EASRC_CRCC_RS_CA_WIDTH) - 1) \
407955ac624SShengjiu Wang 					 << EASRC_CRCC_RS_CA_SHIFT)
408955ac624SShengjiu Wang #define EASRC_CRCC_RS_CA(v)		(((v) << EASRC_CRCC_RS_CA_SHIFT) \
409955ac624SShengjiu Wang 					 & EASRC_CRCC_RS_CA_MASK)
410955ac624SShengjiu Wang #define EASRC_CRCC_RS_TAPS_SHIFT	1
411955ac624SShengjiu Wang #define EASRC_CRCC_RS_TAPS_WIDTH	2
412955ac624SShengjiu Wang #define EASRC_CRCC_RS_TAPS_MASK		((BIT(EASRC_CRCC_RS_TAPS_WIDTH) - 1) \
413955ac624SShengjiu Wang 					 << EASRC_CRCC_RS_TAPS_SHIFT)
414955ac624SShengjiu Wang #define EASRC_CRCC_RS_TAPS(v)		(((v) << EASRC_CRCC_RS_TAPS_SHIFT) \
415955ac624SShengjiu Wang 					 & EASRC_CRCC_RS_TAPS_MASK)
416955ac624SShengjiu Wang #define EASRC_CRCC_RS_CPR_SHIFT		0
417955ac624SShengjiu Wang #define EASRC_CRCC_RS_CPR_MASK		BIT(EASRC_CRCC_RS_CPR_SHIFT)
418955ac624SShengjiu Wang #define EASRC_CRCC_RS_CPR		BIT(EASRC_CRCC_RS_CPR_SHIFT)
419955ac624SShengjiu Wang 
420955ac624SShengjiu Wang /* ASRC Interrupt_Control (IC) */
421955ac624SShengjiu Wang #define EASRC_IRQC_RSDM_SHIFT		8
422955ac624SShengjiu Wang #define EASRC_IRQC_RSDM_WIDTH		4
423955ac624SShengjiu Wang #define EASRC_IRQC_RSDM_MASK		((BIT(EASRC_IRQC_RSDM_WIDTH) - 1) \
424955ac624SShengjiu Wang 					 << EASRC_IRQC_RSDM_SHIFT)
425955ac624SShengjiu Wang #define EASRC_IRQC_RSDM(v)		(((v) << EASRC_IRQC_RSDM_SHIFT) \
426955ac624SShengjiu Wang 					 & EASRC_IRQC_RSDM_MASK)
427955ac624SShengjiu Wang #define EASRC_IRQC_OERM_SHIFT		4
428955ac624SShengjiu Wang #define EASRC_IRQC_OERM_WIDTH		4
429955ac624SShengjiu Wang #define EASRC_IRQC_OERM_MASK		((BIT(EASRC_IRQC_OERM_WIDTH) - 1) \
430955ac624SShengjiu Wang 					 << EASRC_IRQC_OERM_SHIFT)
431955ac624SShengjiu Wang #define EASRC_IRQC_OERM(v)		(((v) << EASRC_IRQC_OERM_SHIFT) \
432955ac624SShengjiu Wang 					 & EASRC_IEQC_OERM_MASK)
433955ac624SShengjiu Wang #define EASRC_IRQC_IOM_SHIFT		0
434955ac624SShengjiu Wang #define EASRC_IRQC_IOM_WIDTH		4
435955ac624SShengjiu Wang #define EASRC_IRQC_IOM_MASK		((BIT(EASRC_IRQC_IOM_WIDTH) - 1) \
436955ac624SShengjiu Wang 					 << EASRC_IRQC_IOM_SHIFT)
437955ac624SShengjiu Wang #define EASRC_IRQC_IOM(v)		(((v) << EASRC_IRQC_IOM_SHIFT) \
438955ac624SShengjiu Wang 					 & EASRC_IRQC_IOM_MASK)
439955ac624SShengjiu Wang 
440955ac624SShengjiu Wang /* ASRC Interrupt Status Flags (ISF) */
441955ac624SShengjiu Wang #define EASRC_IRQF_RSD_SHIFT		8
442955ac624SShengjiu Wang #define EASRC_IRQF_RSD_WIDTH		4
443955ac624SShengjiu Wang #define EASRC_IRQF_RSD_MASK		((BIT(EASRC_IRQF_RSD_WIDTH) - 1) \
444955ac624SShengjiu Wang 					 << EASRC_IRQF_RSD_SHIFT)
445955ac624SShengjiu Wang #define EASRC_IRQF_RSD(v)		(((v) << EASRC_IRQF_RSD_SHIFT) \
446955ac624SShengjiu Wang 					 & EASRC_IRQF_RSD_MASK)
447955ac624SShengjiu Wang #define EASRC_IRQF_OER_SHIFT		4
448955ac624SShengjiu Wang #define EASRC_IRQF_OER_WIDTH		4
449955ac624SShengjiu Wang #define EASRC_IRQF_OER_MASK		((BIT(EASRC_IRQF_OER_WIDTH) - 1) \
450955ac624SShengjiu Wang 					 << EASRC_IRQF_OER_SHIFT)
451955ac624SShengjiu Wang #define EASRC_IRQF_OER(v)		(((v) << EASRC_IRQF_OER_SHIFT) \
452955ac624SShengjiu Wang 					 & EASRC_IRQF_OER_MASK)
453955ac624SShengjiu Wang #define EASRC_IRQF_IFO_SHIFT		0
454955ac624SShengjiu Wang #define EASRC_IRQF_IFO_WIDTH		4
455955ac624SShengjiu Wang #define EASRC_IRQF_IFO_MASK		((BIT(EASRC_IRQF_IFO_WIDTH) - 1) \
456955ac624SShengjiu Wang 					 << EASRC_IRQF_IFO_SHIFT)
457955ac624SShengjiu Wang #define EASRC_IRQF_IFO(v)		(((v) << EASRC_IRQF_IFO_SHIFT) \
458955ac624SShengjiu Wang 					 & EASRC_IRQF_IFO_MASK)
459955ac624SShengjiu Wang 
460955ac624SShengjiu Wang /* ASRC Context Channel STAT */
461955ac624SShengjiu Wang #define EASRC_CSx_CSx_SHIFT		0
462955ac624SShengjiu Wang #define EASRC_CSx_CSx_WIDTH		32
463955ac624SShengjiu Wang #define EASRC_CSx_CSx(v)		((v) << EASRC_CSx_CSx_SHIFT)
464955ac624SShengjiu Wang 
465955ac624SShengjiu Wang /* ASRC Debug Control Register */
466955ac624SShengjiu Wang #define EASRC_DBGC_DMS_SHIFT		0
467955ac624SShengjiu Wang #define EASRC_DBGC_DMS_WIDTH		6
468955ac624SShengjiu Wang #define EASRC_DBGC_DMS_MASK		((BIT(EASRC_DBGC_DMS_WIDTH) - 1) \
469955ac624SShengjiu Wang 					 << EASRC_DBGC_DMS_SHIFT)
470955ac624SShengjiu Wang #define EASRC_DBGC_DMS(v)		(((v) << EASRC_DBGC_DMS_SHIFT) \
471955ac624SShengjiu Wang 					 & EASRC_DBGC_DMS_MASK)
472955ac624SShengjiu Wang 
473955ac624SShengjiu Wang /* ASRC Debug Status Register */
474955ac624SShengjiu Wang #define EASRC_DBGS_DS_SHIFT		0
475955ac624SShengjiu Wang #define EASRC_DBGS_DS_WIDTH		32
476955ac624SShengjiu Wang #define EASRC_DBGS_DS(v)		((v) << EASRC_DBGS_DS_SHIFT)
477955ac624SShengjiu Wang 
478955ac624SShengjiu Wang /* General Constants */
479955ac624SShengjiu Wang #define EASRC_CTX_MAX_NUM		4
480955ac624SShengjiu Wang #define EASRC_RS_COEFF_MEM		0
481955ac624SShengjiu Wang #define EASRC_PF_COEFF_MEM		1
482955ac624SShengjiu Wang 
483955ac624SShengjiu Wang /* Prefilter constants */
484955ac624SShengjiu Wang #define EASRC_PF_ST1_ONLY		0
485955ac624SShengjiu Wang #define EASRC_PF_TWO_STAGE_MODE		1
486955ac624SShengjiu Wang #define EASRC_PF_ST1_COEFF_WR		0
487955ac624SShengjiu Wang #define EASRC_PF_ST2_COEFF_WR		1
488955ac624SShengjiu Wang #define EASRC_MAX_PF_TAPS		384
489955ac624SShengjiu Wang 
490955ac624SShengjiu Wang /* Resampling constants */
491955ac624SShengjiu Wang #define EASRC_RS_32_TAPS		0
492955ac624SShengjiu Wang #define EASRC_RS_64_TAPS		1
493955ac624SShengjiu Wang #define EASRC_RS_128_TAPS		2
494955ac624SShengjiu Wang 
495955ac624SShengjiu Wang /* Initialization mode */
496955ac624SShengjiu Wang #define EASRC_INIT_MODE_SW_CONTROL	0
497955ac624SShengjiu Wang #define EASRC_INIT_MODE_REPLICATE	1
498955ac624SShengjiu Wang #define EASRC_INIT_MODE_ZERO_FILL	2
499955ac624SShengjiu Wang 
500955ac624SShengjiu Wang /* FIFO watermarks */
501955ac624SShengjiu Wang #define FSL_EASRC_INPUTFIFO_WML		0x4
502955ac624SShengjiu Wang #define FSL_EASRC_OUTPUTFIFO_WML	0x1
503955ac624SShengjiu Wang 
504955ac624SShengjiu Wang #define EASRC_INPUTFIFO_THRESHOLD_MIN	0
505955ac624SShengjiu Wang #define EASRC_INPUTFIFO_THRESHOLD_MAX	127
506955ac624SShengjiu Wang #define EASRC_OUTPUTFIFO_THRESHOLD_MIN	0
507955ac624SShengjiu Wang #define EASRC_OUTPUTFIFO_THRESHOLD_MAX	63
508955ac624SShengjiu Wang 
509955ac624SShengjiu Wang #define EASRC_DMA_BUFFER_SIZE		(1024 * 48 * 9)
510955ac624SShengjiu Wang #define EASRC_MAX_BUFFER_SIZE		(1024 * 48)
511955ac624SShengjiu Wang 
512955ac624SShengjiu Wang #define FIRMWARE_MAGIC			0xDEAD
513955ac624SShengjiu Wang #define FIRMWARE_VERSION		1
514955ac624SShengjiu Wang 
515955ac624SShengjiu Wang #define PREFILTER_MEM_LEN		0x1800
516955ac624SShengjiu Wang 
517955ac624SShengjiu Wang enum easrc_word_width {
518955ac624SShengjiu Wang 	EASRC_WIDTH_16_BIT = 0,
519955ac624SShengjiu Wang 	EASRC_WIDTH_20_BIT = 1,
520955ac624SShengjiu Wang 	EASRC_WIDTH_24_BIT = 2,
521955ac624SShengjiu Wang 	EASRC_WIDTH_32_BIT = 3,
522955ac624SShengjiu Wang };
523955ac624SShengjiu Wang 
524955ac624SShengjiu Wang struct __attribute__((__packed__))  asrc_firmware_hdr {
525955ac624SShengjiu Wang 	u32 magic;
526955ac624SShengjiu Wang 	u32 interp_scen;
527955ac624SShengjiu Wang 	u32 prefil_scen;
528955ac624SShengjiu Wang 	u32 firmware_version;
529955ac624SShengjiu Wang };
530955ac624SShengjiu Wang 
531955ac624SShengjiu Wang struct __attribute__((__packed__)) interp_params {
532955ac624SShengjiu Wang 	u32 magic;
533955ac624SShengjiu Wang 	u32 num_taps;
534955ac624SShengjiu Wang 	u32 num_phases;
535955ac624SShengjiu Wang 	u64 center_tap;
536955ac624SShengjiu Wang 	u64 coeff[8192];
537955ac624SShengjiu Wang };
538955ac624SShengjiu Wang 
539955ac624SShengjiu Wang struct __attribute__((__packed__)) prefil_params {
540955ac624SShengjiu Wang 	u32 magic;
541955ac624SShengjiu Wang 	u32 insr;
542955ac624SShengjiu Wang 	u32 outsr;
543955ac624SShengjiu Wang 	u32 st1_taps;
544955ac624SShengjiu Wang 	u32 st2_taps;
545955ac624SShengjiu Wang 	u32 st1_exp;
546955ac624SShengjiu Wang 	u64 coeff[256];
547955ac624SShengjiu Wang };
548955ac624SShengjiu Wang 
549955ac624SShengjiu Wang struct dma_block {
550955ac624SShengjiu Wang 	void *dma_vaddr;
551955ac624SShengjiu Wang 	unsigned int length;
552955ac624SShengjiu Wang 	unsigned int max_buf_size;
553955ac624SShengjiu Wang };
554955ac624SShengjiu Wang 
555955ac624SShengjiu Wang struct fsl_easrc_data_fmt {
556955ac624SShengjiu Wang 	unsigned int width : 2;
557955ac624SShengjiu Wang 	unsigned int endianness : 1;
558955ac624SShengjiu Wang 	unsigned int unsign : 1;
559955ac624SShengjiu Wang 	unsigned int floating_point : 1;
560955ac624SShengjiu Wang 	unsigned int iec958: 1;
561955ac624SShengjiu Wang 	unsigned int sample_pos: 5;
562955ac624SShengjiu Wang 	unsigned int addexp;
563955ac624SShengjiu Wang };
564955ac624SShengjiu Wang 
565955ac624SShengjiu Wang struct fsl_easrc_io_params {
566955ac624SShengjiu Wang 	struct fsl_easrc_data_fmt fmt;
567955ac624SShengjiu Wang 	unsigned int group_len;
568955ac624SShengjiu Wang 	unsigned int iterations;
569955ac624SShengjiu Wang 	unsigned int access_len;
570955ac624SShengjiu Wang 	unsigned int fifo_wtmk;
571955ac624SShengjiu Wang 	unsigned int sample_rate;
572*de27216cSShengjiu Wang 	snd_pcm_format_t sample_format;
573955ac624SShengjiu Wang 	unsigned int norm_rate;
574955ac624SShengjiu Wang };
575955ac624SShengjiu Wang 
576955ac624SShengjiu Wang struct fsl_easrc_slot {
577955ac624SShengjiu Wang 	bool busy;
578955ac624SShengjiu Wang 	int ctx_index;
579955ac624SShengjiu Wang 	int slot_index;
580955ac624SShengjiu Wang 	int num_channel;  /* maximum is 8 */
581955ac624SShengjiu Wang 	int min_channel;
582955ac624SShengjiu Wang 	int max_channel;
583955ac624SShengjiu Wang 	int pf_mem_used;
584955ac624SShengjiu Wang };
585955ac624SShengjiu Wang 
586955ac624SShengjiu Wang /**
587955ac624SShengjiu Wang  * fsl_easrc_ctx_priv: EASRC context private data
588955ac624SShengjiu Wang  *
589955ac624SShengjiu Wang  * @in_params: input parameter
590955ac624SShengjiu Wang  * @out_params:  output parameter
591955ac624SShengjiu Wang  * @st1_num_taps: tap number of stage 1
592955ac624SShengjiu Wang  * @st2_num_taps: tap number of stage 2
593955ac624SShengjiu Wang  * @st1_num_exp: exponent number of stage 1
594955ac624SShengjiu Wang  * @pf_init_mode: prefilter init mode
595955ac624SShengjiu Wang  * @rs_init_mode:  resample filter init mode
596955ac624SShengjiu Wang  * @ctx_streams: stream flag of ctx
597955ac624SShengjiu Wang  * @rs_ratio: resampler ratio
598955ac624SShengjiu Wang  * @st1_coeff: pointer of stage 1 coeff
599955ac624SShengjiu Wang  * @st2_coeff: pointer of stage 2 coeff
600955ac624SShengjiu Wang  * @in_filled_sample: input filled sample
601955ac624SShengjiu Wang  * @out_missed_sample: sample missed in output
602955ac624SShengjiu Wang  * @st1_addexp: exponent added for stage1
603955ac624SShengjiu Wang  * @st2_addexp: exponent added for stage2
604955ac624SShengjiu Wang  */
605955ac624SShengjiu Wang struct fsl_easrc_ctx_priv {
606955ac624SShengjiu Wang 	struct fsl_easrc_io_params in_params;
607955ac624SShengjiu Wang 	struct fsl_easrc_io_params out_params;
608955ac624SShengjiu Wang 	unsigned int st1_num_taps;
609955ac624SShengjiu Wang 	unsigned int st2_num_taps;
610955ac624SShengjiu Wang 	unsigned int st1_num_exp;
611955ac624SShengjiu Wang 	unsigned int pf_init_mode;
612955ac624SShengjiu Wang 	unsigned int rs_init_mode;
613955ac624SShengjiu Wang 	unsigned int ctx_streams;
614955ac624SShengjiu Wang 	u64 rs_ratio;
615955ac624SShengjiu Wang 	u64 *st1_coeff;
616955ac624SShengjiu Wang 	u64 *st2_coeff;
617955ac624SShengjiu Wang 	int in_filled_sample;
618955ac624SShengjiu Wang 	int out_missed_sample;
619955ac624SShengjiu Wang 	int st1_addexp;
620955ac624SShengjiu Wang 	int st2_addexp;
621955ac624SShengjiu Wang };
622955ac624SShengjiu Wang 
623955ac624SShengjiu Wang /**
624955ac624SShengjiu Wang  * fsl_easrc_priv: EASRC private data
625955ac624SShengjiu Wang  *
626955ac624SShengjiu Wang  * @slot: slot setting
627955ac624SShengjiu Wang  * @firmware_hdr:  the header of firmware
628955ac624SShengjiu Wang  * @interp: pointer to interpolation filter coeff
629955ac624SShengjiu Wang  * @prefil: pointer to prefilter coeff
630955ac624SShengjiu Wang  * @fw: firmware of coeff table
631955ac624SShengjiu Wang  * @fw_name: firmware name
632955ac624SShengjiu Wang  * @rs_num_taps:  resample filter taps, 32, 64, or 128
633955ac624SShengjiu Wang  * @bps_iec958: bits per sample of iec958
634955ac624SShengjiu Wang  * @rs_coeff: resampler coefficient
635955ac624SShengjiu Wang  * @const_coeff: one tap prefilter coefficient
636955ac624SShengjiu Wang  * @firmware_loaded: firmware is loaded
637955ac624SShengjiu Wang  */
638955ac624SShengjiu Wang struct fsl_easrc_priv {
639955ac624SShengjiu Wang 	struct fsl_easrc_slot slot[EASRC_CTX_MAX_NUM][2];
640955ac624SShengjiu Wang 	struct asrc_firmware_hdr *firmware_hdr;
641955ac624SShengjiu Wang 	struct interp_params *interp;
642955ac624SShengjiu Wang 	struct prefil_params *prefil;
643955ac624SShengjiu Wang 	const struct firmware *fw;
644955ac624SShengjiu Wang 	const char *fw_name;
645955ac624SShengjiu Wang 	unsigned int rs_num_taps;
646955ac624SShengjiu Wang 	unsigned int bps_iec958[EASRC_CTX_MAX_NUM];
647955ac624SShengjiu Wang 	u64 *rs_coeff;
648955ac624SShengjiu Wang 	u64 const_coeff;
649955ac624SShengjiu Wang 	int firmware_loaded;
650955ac624SShengjiu Wang };
651955ac624SShengjiu Wang #endif /* _FSL_EASRC_H */
652