0001
0002
0003
0004
0005
0006 #ifndef _FSL_EASRC_H
0007 #define _FSL_EASRC_H
0008
0009 #include <sound/asound.h>
0010 #include <linux/dma/imx-dma.h>
0011
0012 #include "fsl_asrc_common.h"
0013
0014
0015
0016
0017 #define REG_EASRC_WRFIFO(ctx) (0x000 + 4 * (ctx))
0018
0019 #define REG_EASRC_RDFIFO(ctx) (0x010 + 4 * (ctx))
0020
0021 #define REG_EASRC_CC(ctx) (0x020 + 4 * (ctx))
0022
0023 #define REG_EASRC_CCE1(ctx) (0x030 + 4 * (ctx))
0024
0025 #define REG_EASRC_CCE2(ctx) (0x040 + 4 * (ctx))
0026
0027 #define REG_EASRC_CIA(ctx) (0x050 + 4 * (ctx))
0028
0029 #define REG_EASRC_DPCS0R0(ctx) (0x060 + 4 * (ctx))
0030 #define REG_EASRC_DPCS0R1(ctx) (0x070 + 4 * (ctx))
0031 #define REG_EASRC_DPCS0R2(ctx) (0x080 + 4 * (ctx))
0032 #define REG_EASRC_DPCS0R3(ctx) (0x090 + 4 * (ctx))
0033
0034 #define REG_EASRC_DPCS1R0(ctx) (0x0A0 + 4 * (ctx))
0035 #define REG_EASRC_DPCS1R1(ctx) (0x0B0 + 4 * (ctx))
0036 #define REG_EASRC_DPCS1R2(ctx) (0x0C0 + 4 * (ctx))
0037 #define REG_EASRC_DPCS1R3(ctx) (0x0D0 + 4 * (ctx))
0038
0039 #define REG_EASRC_COC(ctx) (0x0E0 + 4 * (ctx))
0040
0041 #define REG_EASRC_COA(ctx) (0x0F0 + 4 * (ctx))
0042
0043 #define REG_EASRC_SFS(ctx) (0x100 + 4 * (ctx))
0044
0045 #define REG_EASRC_RRL(ctx) (0x110 + 8 * (ctx))
0046
0047 #define REG_EASRC_RRH(ctx) (0x114 + 8 * (ctx))
0048
0049 #define REG_EASRC_RUC(ctx) (0x130 + 4 * (ctx))
0050
0051 #define REG_EASRC_RUR(ctx) (0x140 + 4 * (ctx))
0052
0053 #define REG_EASRC_RCTCL (0x150)
0054
0055 #define REG_EASRC_RCTCH (0x154)
0056
0057 #define REG_EASRC_PCF(ctx) (0x160 + 4 * (ctx))
0058
0059 #define REG_EASRC_CRCM 0x170
0060
0061 #define REG_EASRC_CRCC 0x174
0062
0063 #define REG_EASRC_IRQC 0x178
0064
0065 #define REG_EASRC_IRQF 0x17C
0066
0067 #define REG_EASRC_CS0(ctx) (0x180 + 4 * (ctx))
0068
0069 #define REG_EASRC_CS1(ctx) (0x190 + 4 * (ctx))
0070
0071 #define REG_EASRC_CS2(ctx) (0x1A0 + 4 * (ctx))
0072
0073 #define REG_EASRC_CS3(ctx) (0x1B0 + 4 * (ctx))
0074
0075 #define REG_EASRC_CS4(ctx) (0x1C0 + 4 * (ctx))
0076
0077 #define REG_EASRC_CS5(ctx) (0x1D0 + 4 * (ctx))
0078
0079 #define REG_EASRC_DBGC 0x1E0
0080
0081 #define REG_EASRC_DBGS 0x1E4
0082
0083 #define REG_EASRC_FIFO(x, ctx) (x == IN ? REG_EASRC_WRFIFO(ctx) \
0084 : REG_EASRC_RDFIFO(ctx))
0085
0086
0087 #define EASRC_CC_EN_SHIFT 31
0088 #define EASRC_CC_EN_MASK BIT(EASRC_CC_EN_SHIFT)
0089 #define EASRC_CC_EN BIT(EASRC_CC_EN_SHIFT)
0090 #define EASRC_CC_STOP_SHIFT 29
0091 #define EASRC_CC_STOP_MASK BIT(EASRC_CC_STOP_SHIFT)
0092 #define EASRC_CC_STOP BIT(EASRC_CC_STOP_SHIFT)
0093 #define EASRC_CC_FWMDE_SHIFT 28
0094 #define EASRC_CC_FWMDE_MASK BIT(EASRC_CC_FWMDE_SHIFT)
0095 #define EASRC_CC_FWMDE BIT(EASRC_CC_FWMDE_SHIFT)
0096 #define EASRC_CC_FIFO_WTMK_SHIFT 16
0097 #define EASRC_CC_FIFO_WTMK_WIDTH 7
0098 #define EASRC_CC_FIFO_WTMK_MASK ((BIT(EASRC_CC_FIFO_WTMK_WIDTH) - 1) \
0099 << EASRC_CC_FIFO_WTMK_SHIFT)
0100 #define EASRC_CC_FIFO_WTMK(v) (((v) << EASRC_CC_FIFO_WTMK_SHIFT) \
0101 & EASRC_CC_FIFO_WTMK_MASK)
0102 #define EASRC_CC_SAMPLE_POS_SHIFT 11
0103 #define EASRC_CC_SAMPLE_POS_WIDTH 5
0104 #define EASRC_CC_SAMPLE_POS_MASK ((BIT(EASRC_CC_SAMPLE_POS_WIDTH) - 1) \
0105 << EASRC_CC_SAMPLE_POS_SHIFT)
0106 #define EASRC_CC_SAMPLE_POS(v) (((v) << EASRC_CC_SAMPLE_POS_SHIFT) \
0107 & EASRC_CC_SAMPLE_POS_MASK)
0108 #define EASRC_CC_ENDIANNESS_SHIFT 10
0109 #define EASRC_CC_ENDIANNESS_MASK BIT(EASRC_CC_ENDIANNESS_SHIFT)
0110 #define EASRC_CC_ENDIANNESS BIT(EASRC_CC_ENDIANNESS_SHIFT)
0111 #define EASRC_CC_BPS_SHIFT 8
0112 #define EASRC_CC_BPS_WIDTH 2
0113 #define EASRC_CC_BPS_MASK ((BIT(EASRC_CC_BPS_WIDTH) - 1) \
0114 << EASRC_CC_BPS_SHIFT)
0115 #define EASRC_CC_BPS(v) (((v) << EASRC_CC_BPS_SHIFT) \
0116 & EASRC_CC_BPS_MASK)
0117 #define EASRC_CC_FMT_SHIFT 7
0118 #define EASRC_CC_FMT_MASK BIT(EASRC_CC_FMT_SHIFT)
0119 #define EASRC_CC_FMT BIT(EASRC_CC_FMT_SHIFT)
0120 #define EASRC_CC_INSIGN_SHIFT 6
0121 #define EASRC_CC_INSIGN_MASK BIT(EASRC_CC_INSIGN_SHIFT)
0122 #define EASRC_CC_INSIGN BIT(EASRC_CC_INSIGN_SHIFT)
0123 #define EASRC_CC_CHEN_SHIFT 0
0124 #define EASRC_CC_CHEN_WIDTH 5
0125 #define EASRC_CC_CHEN_MASK ((BIT(EASRC_CC_CHEN_WIDTH) - 1) \
0126 << EASRC_CC_CHEN_SHIFT)
0127 #define EASRC_CC_CHEN(v) (((v) << EASRC_CC_CHEN_SHIFT) \
0128 & EASRC_CC_CHEN_MASK)
0129
0130
0131 #define EASRC_CCE1_COEF_WS_SHIFT 25
0132 #define EASRC_CCE1_COEF_WS_MASK BIT(EASRC_CCE1_COEF_WS_SHIFT)
0133 #define EASRC_CCE1_COEF_WS BIT(EASRC_CCE1_COEF_WS_SHIFT)
0134 #define EASRC_CCE1_COEF_MEM_RST_SHIFT 24
0135 #define EASRC_CCE1_COEF_MEM_RST_MASK BIT(EASRC_CCE1_COEF_MEM_RST_SHIFT)
0136 #define EASRC_CCE1_COEF_MEM_RST BIT(EASRC_CCE1_COEF_MEM_RST_SHIFT)
0137 #define EASRC_CCE1_PF_EXP_SHIFT 16
0138 #define EASRC_CCE1_PF_EXP_WIDTH 8
0139 #define EASRC_CCE1_PF_EXP_MASK ((BIT(EASRC_CCE1_PF_EXP_WIDTH) - 1) \
0140 << EASRC_CCE1_PF_EXP_SHIFT)
0141 #define EASRC_CCE1_PF_EXP(v) (((v) << EASRC_CCE1_PF_EXP_SHIFT) \
0142 & EASRC_CCE1_PF_EXP_MASK)
0143 #define EASRC_CCE1_PF_ST1_WBFP_SHIFT 9
0144 #define EASRC_CCE1_PF_ST1_WBFP_MASK BIT(EASRC_CCE1_PF_ST1_WBFP_SHIFT)
0145 #define EASRC_CCE1_PF_ST1_WBFP BIT(EASRC_CCE1_PF_ST1_WBFP_SHIFT)
0146 #define EASRC_CCE1_PF_TSEN_SHIFT 8
0147 #define EASRC_CCE1_PF_TSEN_MASK BIT(EASRC_CCE1_PF_TSEN_SHIFT)
0148 #define EASRC_CCE1_PF_TSEN BIT(EASRC_CCE1_PF_TSEN_SHIFT)
0149 #define EASRC_CCE1_RS_BYPASS_SHIFT 7
0150 #define EASRC_CCE1_RS_BYPASS_MASK BIT(EASRC_CCE1_RS_BYPASS_SHIFT)
0151 #define EASRC_CCE1_RS_BYPASS BIT(EASRC_CCE1_RS_BYPASS_SHIFT)
0152 #define EASRC_CCE1_PF_BYPASS_SHIFT 6
0153 #define EASRC_CCE1_PF_BYPASS_MASK BIT(EASRC_CCE1_PF_BYPASS_SHIFT)
0154 #define EASRC_CCE1_PF_BYPASS BIT(EASRC_CCE1_PF_BYPASS_SHIFT)
0155 #define EASRC_CCE1_RS_STOP_SHIFT 5
0156 #define EASRC_CCE1_RS_STOP_MASK BIT(EASRC_CCE1_RS_STOP_SHIFT)
0157 #define EASRC_CCE1_RS_STOP BIT(EASRC_CCE1_RS_STOP_SHIFT)
0158 #define EASRC_CCE1_PF_STOP_SHIFT 4
0159 #define EASRC_CCE1_PF_STOP_MASK BIT(EASRC_CCE1_PF_STOP_SHIFT)
0160 #define EASRC_CCE1_PF_STOP BIT(EASRC_CCE1_PF_STOP_SHIFT)
0161 #define EASRC_CCE1_RS_INIT_SHIFT 2
0162 #define EASRC_CCE1_RS_INIT_WIDTH 2
0163 #define EASRC_CCE1_RS_INIT_MASK ((BIT(EASRC_CCE1_RS_INIT_WIDTH) - 1) \
0164 << EASRC_CCE1_RS_INIT_SHIFT)
0165 #define EASRC_CCE1_RS_INIT(v) (((v) << EASRC_CCE1_RS_INIT_SHIFT) \
0166 & EASRC_CCE1_RS_INIT_MASK)
0167 #define EASRC_CCE1_PF_INIT_SHIFT 0
0168 #define EASRC_CCE1_PF_INIT_WIDTH 2
0169 #define EASRC_CCE1_PF_INIT_MASK ((BIT(EASRC_CCE1_PF_INIT_WIDTH) - 1) \
0170 << EASRC_CCE1_PF_INIT_SHIFT)
0171 #define EASRC_CCE1_PF_INIT(v) (((v) << EASRC_CCE1_PF_INIT_SHIFT) \
0172 & EASRC_CCE1_PF_INIT_MASK)
0173
0174
0175 #define EASRC_CCE2_ST2_TAPS_SHIFT 16
0176 #define EASRC_CCE2_ST2_TAPS_WIDTH 9
0177 #define EASRC_CCE2_ST2_TAPS_MASK ((BIT(EASRC_CCE2_ST2_TAPS_WIDTH) - 1) \
0178 << EASRC_CCE2_ST2_TAPS_SHIFT)
0179 #define EASRC_CCE2_ST2_TAPS(v) (((v) << EASRC_CCE2_ST2_TAPS_SHIFT) \
0180 & EASRC_CCE2_ST2_TAPS_MASK)
0181 #define EASRC_CCE2_ST1_TAPS_SHIFT 0
0182 #define EASRC_CCE2_ST1_TAPS_WIDTH 9
0183 #define EASRC_CCE2_ST1_TAPS_MASK ((BIT(EASRC_CCE2_ST1_TAPS_WIDTH) - 1) \
0184 << EASRC_CCE2_ST1_TAPS_SHIFT)
0185 #define EASRC_CCE2_ST1_TAPS(v) (((v) << EASRC_CCE2_ST1_TAPS_SHIFT) \
0186 & EASRC_CCE2_ST1_TAPS_MASK)
0187
0188
0189 #define EASRC_CIA_ITER_SHIFT 16
0190 #define EASRC_CIA_ITER_WIDTH 6
0191 #define EASRC_CIA_ITER_MASK ((BIT(EASRC_CIA_ITER_WIDTH) - 1) \
0192 << EASRC_CIA_ITER_SHIFT)
0193 #define EASRC_CIA_ITER(v) (((v) << EASRC_CIA_ITER_SHIFT) \
0194 & EASRC_CIA_ITER_MASK)
0195 #define EASRC_CIA_GRLEN_SHIFT 8
0196 #define EASRC_CIA_GRLEN_WIDTH 6
0197 #define EASRC_CIA_GRLEN_MASK ((BIT(EASRC_CIA_GRLEN_WIDTH) - 1) \
0198 << EASRC_CIA_GRLEN_SHIFT)
0199 #define EASRC_CIA_GRLEN(v) (((v) << EASRC_CIA_GRLEN_SHIFT) \
0200 & EASRC_CIA_GRLEN_MASK)
0201 #define EASRC_CIA_ACCLEN_SHIFT 0
0202 #define EASRC_CIA_ACCLEN_WIDTH 6
0203 #define EASRC_CIA_ACCLEN_MASK ((BIT(EASRC_CIA_ACCLEN_WIDTH) - 1) \
0204 << EASRC_CIA_ACCLEN_SHIFT)
0205 #define EASRC_CIA_ACCLEN(v) (((v) << EASRC_CIA_ACCLEN_SHIFT) \
0206 & EASRC_CIA_ACCLEN_MASK)
0207
0208
0209 #define EASRC_DPCS0R0_MAXCH_SHIFT 24
0210 #define EASRC_DPCS0R0_MAXCH_WIDTH 5
0211 #define EASRC_DPCS0R0_MAXCH_MASK ((BIT(EASRC_DPCS0R0_MAXCH_WIDTH) - 1) \
0212 << EASRC_DPCS0R0_MAXCH_SHIFT)
0213 #define EASRC_DPCS0R0_MAXCH(v) (((v) << EASRC_DPCS0R0_MAXCH_SHIFT) \
0214 & EASRC_DPCS0R0_MAXCH_MASK)
0215 #define EASRC_DPCS0R0_MINCH_SHIFT 16
0216 #define EASRC_DPCS0R0_MINCH_WIDTH 5
0217 #define EASRC_DPCS0R0_MINCH_MASK ((BIT(EASRC_DPCS0R0_MINCH_WIDTH) - 1) \
0218 << EASRC_DPCS0R0_MINCH_SHIFT)
0219 #define EASRC_DPCS0R0_MINCH(v) (((v) << EASRC_DPCS0R0_MINCH_SHIFT) \
0220 & EASRC_DPCS0R0_MINCH_MASK)
0221 #define EASRC_DPCS0R0_NUMCH_SHIFT 8
0222 #define EASRC_DPCS0R0_NUMCH_WIDTH 5
0223 #define EASRC_DPCS0R0_NUMCH_MASK ((BIT(EASRC_DPCS0R0_NUMCH_WIDTH) - 1) \
0224 << EASRC_DPCS0R0_NUMCH_SHIFT)
0225 #define EASRC_DPCS0R0_NUMCH(v) (((v) << EASRC_DPCS0R0_NUMCH_SHIFT) \
0226 & EASRC_DPCS0R0_NUMCH_MASK)
0227 #define EASRC_DPCS0R0_CTXNUM_SHIFT 1
0228 #define EASRC_DPCS0R0_CTXNUM_WIDTH 2
0229 #define EASRC_DPCS0R0_CTXNUM_MASK ((BIT(EASRC_DPCS0R0_CTXNUM_WIDTH) - 1) \
0230 << EASRC_DPCS0R0_CTXNUM_SHIFT)
0231 #define EASRC_DPCS0R0_CTXNUM(v) (((v) << EASRC_DPCS0R0_CTXNUM_SHIFT) \
0232 & EASRC_DPCS0R0_CTXNUM_MASK)
0233 #define EASRC_DPCS0R0_EN_SHIFT 0
0234 #define EASRC_DPCS0R0_EN_MASK BIT(EASRC_DPCS0R0_EN_SHIFT)
0235 #define EASRC_DPCS0R0_EN BIT(EASRC_DPCS0R0_EN_SHIFT)
0236
0237
0238 #define EASRC_DPCS0R1_ST1_EXP_SHIFT 0
0239 #define EASRC_DPCS0R1_ST1_EXP_WIDTH 13
0240 #define EASRC_DPCS0R1_ST1_EXP_MASK ((BIT(EASRC_DPCS0R1_ST1_EXP_WIDTH) - 1) \
0241 << EASRC_DPCS0R1_ST1_EXP_SHIFT)
0242 #define EASRC_DPCS0R1_ST1_EXP(v) (((v) << EASRC_DPCS0R1_ST1_EXP_SHIFT) \
0243 & EASRC_DPCS0R1_ST1_EXP_MASK)
0244
0245
0246 #define EASRC_DPCS0R2_ST1_MA_SHIFT 16
0247 #define EASRC_DPCS0R2_ST1_MA_WIDTH 13
0248 #define EASRC_DPCS0R2_ST1_MA_MASK ((BIT(EASRC_DPCS0R2_ST1_MA_WIDTH) - 1) \
0249 << EASRC_DPCS0R2_ST1_MA_SHIFT)
0250 #define EASRC_DPCS0R2_ST1_MA(v) (((v) << EASRC_DPCS0R2_ST1_MA_SHIFT) \
0251 & EASRC_DPCS0R2_ST1_MA_MASK)
0252 #define EASRC_DPCS0R2_ST1_SA_SHIFT 0
0253 #define EASRC_DPCS0R2_ST1_SA_WIDTH 13
0254 #define EASRC_DPCS0R2_ST1_SA_MASK ((BIT(EASRC_DPCS0R2_ST1_SA_WIDTH) - 1) \
0255 << EASRC_DPCS0R2_ST1_SA_SHIFT)
0256 #define EASRC_DPCS0R2_ST1_SA(v) (((v) << EASRC_DPCS0R2_ST1_SA_SHIFT) \
0257 & EASRC_DPCS0R2_ST1_SA_MASK)
0258
0259
0260 #define EASRC_DPCS0R3_ST2_MA_SHIFT 16
0261 #define EASRC_DPCS0R3_ST2_MA_WIDTH 13
0262 #define EASRC_DPCS0R3_ST2_MA_MASK ((BIT(EASRC_DPCS0R3_ST2_MA_WIDTH) - 1) \
0263 << EASRC_DPCS0R3_ST2_MA_SHIFT)
0264 #define EASRC_DPCS0R3_ST2_MA(v) (((v) << EASRC_DPCS0R3_ST2_MA_SHIFT) \
0265 & EASRC_DPCS0R3_ST2_MA_MASK)
0266 #define EASRC_DPCS0R3_ST2_SA_SHIFT 0
0267 #define EASRC_DPCS0R3_ST2_SA_WIDTH 13
0268 #define EASRC_DPCS0R3_ST2_SA_MASK ((BIT(EASRC_DPCS0R3_ST2_SA_WIDTH) - 1) \
0269 << EASRC_DPCS0R3_ST2_SA_SHIFT)
0270 #define EASRC_DPCS0R3_ST2_SA(v) (((v) << EASRC_DPCS0R3_ST2_SA_SHIFT) \
0271 & EASRC_DPCS0R3_ST2_SA_MASK)
0272
0273
0274 #define EASRC_COC_FWMDE_SHIFT 28
0275 #define EASRC_COC_FWMDE_MASK BIT(EASRC_COC_FWMDE_SHIFT)
0276 #define EASRC_COC_FWMDE BIT(EASRC_COC_FWMDE_SHIFT)
0277 #define EASRC_COC_FIFO_WTMK_SHIFT 16
0278 #define EASRC_COC_FIFO_WTMK_WIDTH 7
0279 #define EASRC_COC_FIFO_WTMK_MASK ((BIT(EASRC_COC_FIFO_WTMK_WIDTH) - 1) \
0280 << EASRC_COC_FIFO_WTMK_SHIFT)
0281 #define EASRC_COC_FIFO_WTMK(v) (((v) << EASRC_COC_FIFO_WTMK_SHIFT) \
0282 & EASRC_COC_FIFO_WTMK_MASK)
0283 #define EASRC_COC_SAMPLE_POS_SHIFT 11
0284 #define EASRC_COC_SAMPLE_POS_WIDTH 5
0285 #define EASRC_COC_SAMPLE_POS_MASK ((BIT(EASRC_COC_SAMPLE_POS_WIDTH) - 1) \
0286 << EASRC_COC_SAMPLE_POS_SHIFT)
0287 #define EASRC_COC_SAMPLE_POS(v) (((v) << EASRC_COC_SAMPLE_POS_SHIFT) \
0288 & EASRC_COC_SAMPLE_POS_MASK)
0289 #define EASRC_COC_ENDIANNESS_SHIFT 10
0290 #define EASRC_COC_ENDIANNESS_MASK BIT(EASRC_COC_ENDIANNESS_SHIFT)
0291 #define EASRC_COC_ENDIANNESS BIT(EASRC_COC_ENDIANNESS_SHIFT)
0292 #define EASRC_COC_BPS_SHIFT 8
0293 #define EASRC_COC_BPS_WIDTH 2
0294 #define EASRC_COC_BPS_MASK ((BIT(EASRC_COC_BPS_WIDTH) - 1) \
0295 << EASRC_COC_BPS_SHIFT)
0296 #define EASRC_COC_BPS(v) (((v) << EASRC_COC_BPS_SHIFT) \
0297 & EASRC_COC_BPS_MASK)
0298 #define EASRC_COC_FMT_SHIFT 7
0299 #define EASRC_COC_FMT_MASK BIT(EASRC_COC_FMT_SHIFT)
0300 #define EASRC_COC_FMT BIT(EASRC_COC_FMT_SHIFT)
0301 #define EASRC_COC_OUTSIGN_SHIFT 6
0302 #define EASRC_COC_OUTSIGN_MASK BIT(EASRC_COC_OUTSIGN_SHIFT)
0303 #define EASRC_COC_OUTSIGN_OUT BIT(EASRC_COC_OUTSIGN_SHIFT)
0304 #define EASRC_COC_IEC_VDATA_SHIFT 2
0305 #define EASRC_COC_IEC_VDATA_MASK BIT(EASRC_COC_IEC_VDATA_SHIFT)
0306 #define EASRC_COC_IEC_VDATA BIT(EASRC_COC_IEC_VDATA_SHIFT)
0307 #define EASRC_COC_IEC_EN_SHIFT 1
0308 #define EASRC_COC_IEC_EN_MASK BIT(EASRC_COC_IEC_EN_SHIFT)
0309 #define EASRC_COC_IEC_EN BIT(EASRC_COC_IEC_EN_SHIFT)
0310 #define EASRC_COC_DITHER_EN_SHIFT 0
0311 #define EASRC_COC_DITHER_EN_MASK BIT(EASRC_COC_DITHER_EN_SHIFT)
0312 #define EASRC_COC_DITHER_EN BIT(EASRC_COC_DITHER_EN_SHIFT)
0313
0314
0315 #define EASRC_COA_ITER_SHIFT 16
0316 #define EASRC_COA_ITER_WIDTH 6
0317 #define EASRC_COA_ITER_MASK ((BIT(EASRC_COA_ITER_WIDTH) - 1) \
0318 << EASRC_COA_ITER_SHIFT)
0319 #define EASRC_COA_ITER(v) (((v) << EASRC_COA_ITER_SHIFT) \
0320 & EASRC_COA_ITER_MASK)
0321 #define EASRC_COA_GRLEN_SHIFT 8
0322 #define EASRC_COA_GRLEN_WIDTH 6
0323 #define EASRC_COA_GRLEN_MASK ((BIT(EASRC_COA_GRLEN_WIDTH) - 1) \
0324 << EASRC_COA_GRLEN_SHIFT)
0325 #define EASRC_COA_GRLEN(v) (((v) << EASRC_COA_GRLEN_SHIFT) \
0326 & EASRC_COA_GRLEN_MASK)
0327 #define EASRC_COA_ACCLEN_SHIFT 0
0328 #define EASRC_COA_ACCLEN_WIDTH 6
0329 #define EASRC_COA_ACCLEN_MASK ((BIT(EASRC_COA_ACCLEN_WIDTH) - 1) \
0330 << EASRC_COA_ACCLEN_SHIFT)
0331 #define EASRC_COA_ACCLEN(v) (((v) << EASRC_COA_ACCLEN_SHIFT) \
0332 & EASRC_COA_ACCLEN_MASK)
0333
0334
0335 #define EASRC_SFS_IWTMK_SHIFT 23
0336 #define EASRC_SFS_IWTMK_MASK BIT(EASRC_SFS_IWTMK_SHIFT)
0337 #define EASRC_SFS_IWTMK BIT(EASRC_SFS_IWTMK_SHIFT)
0338 #define EASRC_SFS_NSGI_SHIFT 16
0339 #define EASRC_SFS_NSGI_WIDTH 7
0340 #define EASRC_SFS_NSGI_MASK ((BIT(EASRC_SFS_NSGI_WIDTH) - 1) \
0341 << EASRC_SFS_NSGI_SHIFT)
0342 #define EASRC_SFS_NSGI(v) (((v) << EASRC_SFS_NSGI_SHIFT) \
0343 & EASRC_SFS_NSGI_MASK)
0344 #define EASRC_SFS_OWTMK_SHIFT 7
0345 #define EASRC_SFS_OWTMK_MASK BIT(EASRC_SFS_OWTMK_SHIFT)
0346 #define EASRC_SFS_OWTMK BIT(EASRC_SFS_OWTMK_SHIFT)
0347 #define EASRC_SFS_NSGO_SHIFT 0
0348 #define EASRC_SFS_NSGO_WIDTH 7
0349 #define EASRC_SFS_NSGO_MASK ((BIT(EASRC_SFS_NSGO_WIDTH) - 1) \
0350 << EASRC_SFS_NSGO_SHIFT)
0351 #define EASRC_SFS_NSGO(v) (((v) << EASRC_SFS_NSGO_SHIFT) \
0352 & EASRC_SFS_NSGO_MASK)
0353
0354
0355 #define EASRC_RRL_RS_RL_SHIFT 0
0356 #define EASRC_RRL_RS_RL_WIDTH 32
0357 #define EASRC_RRL_RS_RL(v) ((v) << EASRC_RRL_RS_RL_SHIFT)
0358
0359
0360 #define EASRC_RRH_RS_VLD_SHIFT 31
0361 #define EASRC_RRH_RS_VLD_MASK BIT(EASRC_RRH_RS_VLD_SHIFT)
0362 #define EASRC_RRH_RS_VLD BIT(EASRC_RRH_RS_VLD_SHIFT)
0363 #define EASRC_RRH_RS_RH_SHIFT 0
0364 #define EASRC_RRH_RS_RH_WIDTH 12
0365 #define EASRC_RRH_RS_RH_MASK ((BIT(EASRC_RRH_RS_RH_WIDTH) - 1) \
0366 << EASRC_RRH_RS_RH_SHIFT)
0367 #define EASRC_RRH_RS_RH(v) (((v) << EASRC_RRH_RS_RH_SHIFT) \
0368 & EASRC_RRH_RS_RH_MASK)
0369
0370
0371 #define EASRC_RSUC_RS_RM_SHIFT 0
0372 #define EASRC_RSUC_RS_RM_WIDTH 32
0373 #define EASRC_RSUC_RS_RM(v) ((v) << EASRC_RSUC_RS_RM_SHIFT)
0374
0375
0376 #define EASRC_RRUR_RRR_SHIFT 0
0377 #define EASRC_RRUR_RRR_WIDTH 31
0378 #define EASRC_RRUR_RRR_MASK ((BIT(EASRC_RRUR_RRR_WIDTH) - 1) \
0379 << EASRC_RRUR_RRR_SHIFT)
0380 #define EASRC_RRUR_RRR(v) (((v) << EASRC_RRUR_RRR_SHIFT) \
0381 & EASRC_RRUR_RRR_MASK)
0382
0383
0384 #define EASRC_RCTCL_RS_CL_SHIFT 0
0385 #define EASRC_RCTCL_RS_CL_WIDTH 32
0386 #define EASRC_RCTCL_RS_CL(v) ((v) << EASRC_RCTCL_RS_CL_SHIFT)
0387
0388
0389 #define EASRC_RCTCH_RS_CH_SHIFT 0
0390 #define EASRC_RCTCH_RS_CH_WIDTH 32
0391 #define EASRC_RCTCH_RS_CH(v) ((v) << EASRC_RCTCH_RS_CH_SHIFT)
0392
0393
0394 #define EASRC_PCF_CD_SHIFT 0
0395 #define EASRC_PCF_CD_WIDTH 32
0396 #define EASRC_PCF_CD(v) ((v) << EASRC_PCF_CD_SHIFT)
0397
0398
0399 #define EASRC_CRCM_RS_CWD_SHIFT 0
0400 #define EASRC_CRCM_RS_CWD_WIDTH 32
0401 #define EASRC_CRCM_RS_CWD(v) ((v) << EASRC_CRCM_RS_CWD_SHIFT)
0402
0403
0404 #define EASRC_CRCC_RS_CA_SHIFT 16
0405 #define EASRC_CRCC_RS_CA_WIDTH 11
0406 #define EASRC_CRCC_RS_CA_MASK ((BIT(EASRC_CRCC_RS_CA_WIDTH) - 1) \
0407 << EASRC_CRCC_RS_CA_SHIFT)
0408 #define EASRC_CRCC_RS_CA(v) (((v) << EASRC_CRCC_RS_CA_SHIFT) \
0409 & EASRC_CRCC_RS_CA_MASK)
0410 #define EASRC_CRCC_RS_TAPS_SHIFT 1
0411 #define EASRC_CRCC_RS_TAPS_WIDTH 2
0412 #define EASRC_CRCC_RS_TAPS_MASK ((BIT(EASRC_CRCC_RS_TAPS_WIDTH) - 1) \
0413 << EASRC_CRCC_RS_TAPS_SHIFT)
0414 #define EASRC_CRCC_RS_TAPS(v) (((v) << EASRC_CRCC_RS_TAPS_SHIFT) \
0415 & EASRC_CRCC_RS_TAPS_MASK)
0416 #define EASRC_CRCC_RS_CPR_SHIFT 0
0417 #define EASRC_CRCC_RS_CPR_MASK BIT(EASRC_CRCC_RS_CPR_SHIFT)
0418 #define EASRC_CRCC_RS_CPR BIT(EASRC_CRCC_RS_CPR_SHIFT)
0419
0420
0421 #define EASRC_IRQC_RSDM_SHIFT 8
0422 #define EASRC_IRQC_RSDM_WIDTH 4
0423 #define EASRC_IRQC_RSDM_MASK ((BIT(EASRC_IRQC_RSDM_WIDTH) - 1) \
0424 << EASRC_IRQC_RSDM_SHIFT)
0425 #define EASRC_IRQC_RSDM(v) (((v) << EASRC_IRQC_RSDM_SHIFT) \
0426 & EASRC_IRQC_RSDM_MASK)
0427 #define EASRC_IRQC_OERM_SHIFT 4
0428 #define EASRC_IRQC_OERM_WIDTH 4
0429 #define EASRC_IRQC_OERM_MASK ((BIT(EASRC_IRQC_OERM_WIDTH) - 1) \
0430 << EASRC_IRQC_OERM_SHIFT)
0431 #define EASRC_IRQC_OERM(v) (((v) << EASRC_IRQC_OERM_SHIFT) \
0432 & EASRC_IEQC_OERM_MASK)
0433 #define EASRC_IRQC_IOM_SHIFT 0
0434 #define EASRC_IRQC_IOM_WIDTH 4
0435 #define EASRC_IRQC_IOM_MASK ((BIT(EASRC_IRQC_IOM_WIDTH) - 1) \
0436 << EASRC_IRQC_IOM_SHIFT)
0437 #define EASRC_IRQC_IOM(v) (((v) << EASRC_IRQC_IOM_SHIFT) \
0438 & EASRC_IRQC_IOM_MASK)
0439
0440
0441 #define EASRC_IRQF_RSD_SHIFT 8
0442 #define EASRC_IRQF_RSD_WIDTH 4
0443 #define EASRC_IRQF_RSD_MASK ((BIT(EASRC_IRQF_RSD_WIDTH) - 1) \
0444 << EASRC_IRQF_RSD_SHIFT)
0445 #define EASRC_IRQF_RSD(v) (((v) << EASRC_IRQF_RSD_SHIFT) \
0446 & EASRC_IRQF_RSD_MASK)
0447 #define EASRC_IRQF_OER_SHIFT 4
0448 #define EASRC_IRQF_OER_WIDTH 4
0449 #define EASRC_IRQF_OER_MASK ((BIT(EASRC_IRQF_OER_WIDTH) - 1) \
0450 << EASRC_IRQF_OER_SHIFT)
0451 #define EASRC_IRQF_OER(v) (((v) << EASRC_IRQF_OER_SHIFT) \
0452 & EASRC_IRQF_OER_MASK)
0453 #define EASRC_IRQF_IFO_SHIFT 0
0454 #define EASRC_IRQF_IFO_WIDTH 4
0455 #define EASRC_IRQF_IFO_MASK ((BIT(EASRC_IRQF_IFO_WIDTH) - 1) \
0456 << EASRC_IRQF_IFO_SHIFT)
0457 #define EASRC_IRQF_IFO(v) (((v) << EASRC_IRQF_IFO_SHIFT) \
0458 & EASRC_IRQF_IFO_MASK)
0459
0460
0461 #define EASRC_CSx_CSx_SHIFT 0
0462 #define EASRC_CSx_CSx_WIDTH 32
0463 #define EASRC_CSx_CSx(v) ((v) << EASRC_CSx_CSx_SHIFT)
0464
0465
0466 #define EASRC_DBGC_DMS_SHIFT 0
0467 #define EASRC_DBGC_DMS_WIDTH 6
0468 #define EASRC_DBGC_DMS_MASK ((BIT(EASRC_DBGC_DMS_WIDTH) - 1) \
0469 << EASRC_DBGC_DMS_SHIFT)
0470 #define EASRC_DBGC_DMS(v) (((v) << EASRC_DBGC_DMS_SHIFT) \
0471 & EASRC_DBGC_DMS_MASK)
0472
0473
0474 #define EASRC_DBGS_DS_SHIFT 0
0475 #define EASRC_DBGS_DS_WIDTH 32
0476 #define EASRC_DBGS_DS(v) ((v) << EASRC_DBGS_DS_SHIFT)
0477
0478
0479 #define EASRC_CTX_MAX_NUM 4
0480 #define EASRC_RS_COEFF_MEM 0
0481 #define EASRC_PF_COEFF_MEM 1
0482
0483
0484 #define EASRC_PF_ST1_ONLY 0
0485 #define EASRC_PF_TWO_STAGE_MODE 1
0486 #define EASRC_PF_ST1_COEFF_WR 0
0487 #define EASRC_PF_ST2_COEFF_WR 1
0488 #define EASRC_MAX_PF_TAPS 384
0489
0490
0491 #define EASRC_RS_32_TAPS 0
0492 #define EASRC_RS_64_TAPS 1
0493 #define EASRC_RS_128_TAPS 2
0494
0495
0496 #define EASRC_INIT_MODE_SW_CONTROL 0
0497 #define EASRC_INIT_MODE_REPLICATE 1
0498 #define EASRC_INIT_MODE_ZERO_FILL 2
0499
0500
0501 #define FSL_EASRC_INPUTFIFO_WML 0x4
0502 #define FSL_EASRC_OUTPUTFIFO_WML 0x1
0503
0504 #define EASRC_INPUTFIFO_THRESHOLD_MIN 0
0505 #define EASRC_INPUTFIFO_THRESHOLD_MAX 127
0506 #define EASRC_OUTPUTFIFO_THRESHOLD_MIN 0
0507 #define EASRC_OUTPUTFIFO_THRESHOLD_MAX 63
0508
0509 #define EASRC_DMA_BUFFER_SIZE (1024 * 48 * 9)
0510 #define EASRC_MAX_BUFFER_SIZE (1024 * 48)
0511
0512 #define FIRMWARE_MAGIC 0xDEAD
0513 #define FIRMWARE_VERSION 1
0514
0515 #define PREFILTER_MEM_LEN 0x1800
0516
0517 enum easrc_word_width {
0518 EASRC_WIDTH_16_BIT = 0,
0519 EASRC_WIDTH_20_BIT = 1,
0520 EASRC_WIDTH_24_BIT = 2,
0521 EASRC_WIDTH_32_BIT = 3,
0522 };
0523
0524 struct __attribute__((__packed__)) asrc_firmware_hdr {
0525 u32 magic;
0526 u32 interp_scen;
0527 u32 prefil_scen;
0528 u32 firmware_version;
0529 };
0530
0531 struct __attribute__((__packed__)) interp_params {
0532 u32 magic;
0533 u32 num_taps;
0534 u32 num_phases;
0535 u64 center_tap;
0536 u64 coeff[8192];
0537 };
0538
0539 struct __attribute__((__packed__)) prefil_params {
0540 u32 magic;
0541 u32 insr;
0542 u32 outsr;
0543 u32 st1_taps;
0544 u32 st2_taps;
0545 u32 st1_exp;
0546 u64 coeff[256];
0547 };
0548
0549 struct dma_block {
0550 void *dma_vaddr;
0551 unsigned int length;
0552 unsigned int max_buf_size;
0553 };
0554
0555 struct fsl_easrc_data_fmt {
0556 unsigned int width : 2;
0557 unsigned int endianness : 1;
0558 unsigned int unsign : 1;
0559 unsigned int floating_point : 1;
0560 unsigned int iec958: 1;
0561 unsigned int sample_pos: 5;
0562 unsigned int addexp;
0563 };
0564
0565 struct fsl_easrc_io_params {
0566 struct fsl_easrc_data_fmt fmt;
0567 unsigned int group_len;
0568 unsigned int iterations;
0569 unsigned int access_len;
0570 unsigned int fifo_wtmk;
0571 unsigned int sample_rate;
0572 snd_pcm_format_t sample_format;
0573 unsigned int norm_rate;
0574 };
0575
0576 struct fsl_easrc_slot {
0577 bool busy;
0578 int ctx_index;
0579 int slot_index;
0580 int num_channel;
0581 int min_channel;
0582 int max_channel;
0583 int pf_mem_used;
0584 };
0585
0586
0587
0588
0589
0590
0591
0592
0593
0594
0595
0596
0597
0598
0599
0600
0601
0602
0603
0604
0605 struct fsl_easrc_ctx_priv {
0606 struct fsl_easrc_io_params in_params;
0607 struct fsl_easrc_io_params out_params;
0608 unsigned int st1_num_taps;
0609 unsigned int st2_num_taps;
0610 unsigned int st1_num_exp;
0611 unsigned int pf_init_mode;
0612 unsigned int rs_init_mode;
0613 unsigned int ctx_streams;
0614 u64 rs_ratio;
0615 u64 *st1_coeff;
0616 u64 *st2_coeff;
0617 int in_filled_sample;
0618 int out_missed_sample;
0619 int st1_addexp;
0620 int st2_addexp;
0621 };
0622
0623
0624
0625
0626
0627
0628
0629
0630
0631
0632
0633
0634
0635
0636
0637
0638 struct fsl_easrc_priv {
0639 struct fsl_easrc_slot slot[EASRC_CTX_MAX_NUM][2];
0640 struct asrc_firmware_hdr *firmware_hdr;
0641 struct interp_params *interp;
0642 struct prefil_params *prefil;
0643 const struct firmware *fw;
0644 const char *fw_name;
0645 unsigned int rs_num_taps;
0646 unsigned int bps_iec958[EASRC_CTX_MAX_NUM];
0647 u64 *rs_coeff;
0648 u64 const_coeff;
0649 int firmware_loaded;
0650 };
0651 #endif