1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* 3 * Copyright (C) 2019 NXP 4 */ 5 6 #ifndef _FSL_EASRC_H 7 #define _FSL_EASRC_H 8 9 #include <sound/asound.h> 10 #include <linux/dma/imx-dma.h> 11 12 #include "fsl_asrc_common.h" 13 14 /* EASRC Register Map */ 15 16 /* ASRC Input Write FIFO */ 17 #define REG_EASRC_WRFIFO(ctx) (0x000 + 4 * (ctx)) 18 /* ASRC Output Read FIFO */ 19 #define REG_EASRC_RDFIFO(ctx) (0x010 + 4 * (ctx)) 20 /* ASRC Context Control */ 21 #define REG_EASRC_CC(ctx) (0x020 + 4 * (ctx)) 22 /* ASRC Context Control Extended 1 */ 23 #define REG_EASRC_CCE1(ctx) (0x030 + 4 * (ctx)) 24 /* ASRC Context Control Extended 2 */ 25 #define REG_EASRC_CCE2(ctx) (0x040 + 4 * (ctx)) 26 /* ASRC Control Input Access */ 27 #define REG_EASRC_CIA(ctx) (0x050 + 4 * (ctx)) 28 /* ASRC Datapath Processor Control Slot0 */ 29 #define REG_EASRC_DPCS0R0(ctx) (0x060 + 4 * (ctx)) 30 #define REG_EASRC_DPCS0R1(ctx) (0x070 + 4 * (ctx)) 31 #define REG_EASRC_DPCS0R2(ctx) (0x080 + 4 * (ctx)) 32 #define REG_EASRC_DPCS0R3(ctx) (0x090 + 4 * (ctx)) 33 /* ASRC Datapath Processor Control Slot1 */ 34 #define REG_EASRC_DPCS1R0(ctx) (0x0A0 + 4 * (ctx)) 35 #define REG_EASRC_DPCS1R1(ctx) (0x0B0 + 4 * (ctx)) 36 #define REG_EASRC_DPCS1R2(ctx) (0x0C0 + 4 * (ctx)) 37 #define REG_EASRC_DPCS1R3(ctx) (0x0D0 + 4 * (ctx)) 38 /* ASRC Context Output Control */ 39 #define REG_EASRC_COC(ctx) (0x0E0 + 4 * (ctx)) 40 /* ASRC Control Output Access */ 41 #define REG_EASRC_COA(ctx) (0x0F0 + 4 * (ctx)) 42 /* ASRC Sample FIFO Status */ 43 #define REG_EASRC_SFS(ctx) (0x100 + 4 * (ctx)) 44 /* ASRC Resampling Ratio Low */ 45 #define REG_EASRC_RRL(ctx) (0x110 + 8 * (ctx)) 46 /* ASRC Resampling Ratio High */ 47 #define REG_EASRC_RRH(ctx) (0x114 + 8 * (ctx)) 48 /* ASRC Resampling Ratio Update Control */ 49 #define REG_EASRC_RUC(ctx) (0x130 + 4 * (ctx)) 50 /* ASRC Resampling Ratio Update Rate */ 51 #define REG_EASRC_RUR(ctx) (0x140 + 4 * (ctx)) 52 /* ASRC Resampling Center Tap Coefficient Low */ 53 #define REG_EASRC_RCTCL (0x150) 54 /* ASRC Resampling Center Tap Coefficient High */ 55 #define REG_EASRC_RCTCH (0x154) 56 /* ASRC Prefilter Coefficient FIFO */ 57 #define REG_EASRC_PCF(ctx) (0x160 + 4 * (ctx)) 58 /* ASRC Context Resampling Coefficient Memory */ 59 #define REG_EASRC_CRCM 0x170 60 /* ASRC Context Resampling Coefficient Control*/ 61 #define REG_EASRC_CRCC 0x174 62 /* ASRC Interrupt Control */ 63 #define REG_EASRC_IRQC 0x178 64 /* ASRC Interrupt Status Flags */ 65 #define REG_EASRC_IRQF 0x17C 66 /* ASRC Channel Status 0 */ 67 #define REG_EASRC_CS0(ctx) (0x180 + 4 * (ctx)) 68 /* ASRC Channel Status 1 */ 69 #define REG_EASRC_CS1(ctx) (0x190 + 4 * (ctx)) 70 /* ASRC Channel Status 2 */ 71 #define REG_EASRC_CS2(ctx) (0x1A0 + 4 * (ctx)) 72 /* ASRC Channel Status 3 */ 73 #define REG_EASRC_CS3(ctx) (0x1B0 + 4 * (ctx)) 74 /* ASRC Channel Status 4 */ 75 #define REG_EASRC_CS4(ctx) (0x1C0 + 4 * (ctx)) 76 /* ASRC Channel Status 5 */ 77 #define REG_EASRC_CS5(ctx) (0x1D0 + 4 * (ctx)) 78 /* ASRC Debug Control Register */ 79 #define REG_EASRC_DBGC 0x1E0 80 /* ASRC Debug Status Register */ 81 #define REG_EASRC_DBGS 0x1E4 82 83 #define REG_EASRC_FIFO(x, ctx) (x == IN ? REG_EASRC_WRFIFO(ctx) \ 84 : REG_EASRC_RDFIFO(ctx)) 85 86 /* ASRC Context Control (CC) */ 87 #define EASRC_CC_EN_SHIFT 31 88 #define EASRC_CC_EN_MASK BIT(EASRC_CC_EN_SHIFT) 89 #define EASRC_CC_EN BIT(EASRC_CC_EN_SHIFT) 90 #define EASRC_CC_STOP_SHIFT 29 91 #define EASRC_CC_STOP_MASK BIT(EASRC_CC_STOP_SHIFT) 92 #define EASRC_CC_STOP BIT(EASRC_CC_STOP_SHIFT) 93 #define EASRC_CC_FWMDE_SHIFT 28 94 #define EASRC_CC_FWMDE_MASK BIT(EASRC_CC_FWMDE_SHIFT) 95 #define EASRC_CC_FWMDE BIT(EASRC_CC_FWMDE_SHIFT) 96 #define EASRC_CC_FIFO_WTMK_SHIFT 16 97 #define EASRC_CC_FIFO_WTMK_WIDTH 7 98 #define EASRC_CC_FIFO_WTMK_MASK ((BIT(EASRC_CC_FIFO_WTMK_WIDTH) - 1) \ 99 << EASRC_CC_FIFO_WTMK_SHIFT) 100 #define EASRC_CC_FIFO_WTMK(v) (((v) << EASRC_CC_FIFO_WTMK_SHIFT) \ 101 & EASRC_CC_FIFO_WTMK_MASK) 102 #define EASRC_CC_SAMPLE_POS_SHIFT 11 103 #define EASRC_CC_SAMPLE_POS_WIDTH 5 104 #define EASRC_CC_SAMPLE_POS_MASK ((BIT(EASRC_CC_SAMPLE_POS_WIDTH) - 1) \ 105 << EASRC_CC_SAMPLE_POS_SHIFT) 106 #define EASRC_CC_SAMPLE_POS(v) (((v) << EASRC_CC_SAMPLE_POS_SHIFT) \ 107 & EASRC_CC_SAMPLE_POS_MASK) 108 #define EASRC_CC_ENDIANNESS_SHIFT 10 109 #define EASRC_CC_ENDIANNESS_MASK BIT(EASRC_CC_ENDIANNESS_SHIFT) 110 #define EASRC_CC_ENDIANNESS BIT(EASRC_CC_ENDIANNESS_SHIFT) 111 #define EASRC_CC_BPS_SHIFT 8 112 #define EASRC_CC_BPS_WIDTH 2 113 #define EASRC_CC_BPS_MASK ((BIT(EASRC_CC_BPS_WIDTH) - 1) \ 114 << EASRC_CC_BPS_SHIFT) 115 #define EASRC_CC_BPS(v) (((v) << EASRC_CC_BPS_SHIFT) \ 116 & EASRC_CC_BPS_MASK) 117 #define EASRC_CC_FMT_SHIFT 7 118 #define EASRC_CC_FMT_MASK BIT(EASRC_CC_FMT_SHIFT) 119 #define EASRC_CC_FMT BIT(EASRC_CC_FMT_SHIFT) 120 #define EASRC_CC_INSIGN_SHIFT 6 121 #define EASRC_CC_INSIGN_MASK BIT(EASRC_CC_INSIGN_SHIFT) 122 #define EASRC_CC_INSIGN BIT(EASRC_CC_INSIGN_SHIFT) 123 #define EASRC_CC_CHEN_SHIFT 0 124 #define EASRC_CC_CHEN_WIDTH 5 125 #define EASRC_CC_CHEN_MASK ((BIT(EASRC_CC_CHEN_WIDTH) - 1) \ 126 << EASRC_CC_CHEN_SHIFT) 127 #define EASRC_CC_CHEN(v) (((v) << EASRC_CC_CHEN_SHIFT) \ 128 & EASRC_CC_CHEN_MASK) 129 130 /* ASRC Context Control Extended 1 (CCE1) */ 131 #define EASRC_CCE1_COEF_WS_SHIFT 25 132 #define EASRC_CCE1_COEF_WS_MASK BIT(EASRC_CCE1_COEF_WS_SHIFT) 133 #define EASRC_CCE1_COEF_WS BIT(EASRC_CCE1_COEF_WS_SHIFT) 134 #define EASRC_CCE1_COEF_MEM_RST_SHIFT 24 135 #define EASRC_CCE1_COEF_MEM_RST_MASK BIT(EASRC_CCE1_COEF_MEM_RST_SHIFT) 136 #define EASRC_CCE1_COEF_MEM_RST BIT(EASRC_CCE1_COEF_MEM_RST_SHIFT) 137 #define EASRC_CCE1_PF_EXP_SHIFT 16 138 #define EASRC_CCE1_PF_EXP_WIDTH 8 139 #define EASRC_CCE1_PF_EXP_MASK ((BIT(EASRC_CCE1_PF_EXP_WIDTH) - 1) \ 140 << EASRC_CCE1_PF_EXP_SHIFT) 141 #define EASRC_CCE1_PF_EXP(v) (((v) << EASRC_CCE1_PF_EXP_SHIFT) \ 142 & EASRC_CCE1_PF_EXP_MASK) 143 #define EASRC_CCE1_PF_ST1_WBFP_SHIFT 9 144 #define EASRC_CCE1_PF_ST1_WBFP_MASK BIT(EASRC_CCE1_PF_ST1_WBFP_SHIFT) 145 #define EASRC_CCE1_PF_ST1_WBFP BIT(EASRC_CCE1_PF_ST1_WBFP_SHIFT) 146 #define EASRC_CCE1_PF_TSEN_SHIFT 8 147 #define EASRC_CCE1_PF_TSEN_MASK BIT(EASRC_CCE1_PF_TSEN_SHIFT) 148 #define EASRC_CCE1_PF_TSEN BIT(EASRC_CCE1_PF_TSEN_SHIFT) 149 #define EASRC_CCE1_RS_BYPASS_SHIFT 7 150 #define EASRC_CCE1_RS_BYPASS_MASK BIT(EASRC_CCE1_RS_BYPASS_SHIFT) 151 #define EASRC_CCE1_RS_BYPASS BIT(EASRC_CCE1_RS_BYPASS_SHIFT) 152 #define EASRC_CCE1_PF_BYPASS_SHIFT 6 153 #define EASRC_CCE1_PF_BYPASS_MASK BIT(EASRC_CCE1_PF_BYPASS_SHIFT) 154 #define EASRC_CCE1_PF_BYPASS BIT(EASRC_CCE1_PF_BYPASS_SHIFT) 155 #define EASRC_CCE1_RS_STOP_SHIFT 5 156 #define EASRC_CCE1_RS_STOP_MASK BIT(EASRC_CCE1_RS_STOP_SHIFT) 157 #define EASRC_CCE1_RS_STOP BIT(EASRC_CCE1_RS_STOP_SHIFT) 158 #define EASRC_CCE1_PF_STOP_SHIFT 4 159 #define EASRC_CCE1_PF_STOP_MASK BIT(EASRC_CCE1_PF_STOP_SHIFT) 160 #define EASRC_CCE1_PF_STOP BIT(EASRC_CCE1_PF_STOP_SHIFT) 161 #define EASRC_CCE1_RS_INIT_SHIFT 2 162 #define EASRC_CCE1_RS_INIT_WIDTH 2 163 #define EASRC_CCE1_RS_INIT_MASK ((BIT(EASRC_CCE1_RS_INIT_WIDTH) - 1) \ 164 << EASRC_CCE1_RS_INIT_SHIFT) 165 #define EASRC_CCE1_RS_INIT(v) (((v) << EASRC_CCE1_RS_INIT_SHIFT) \ 166 & EASRC_CCE1_RS_INIT_MASK) 167 #define EASRC_CCE1_PF_INIT_SHIFT 0 168 #define EASRC_CCE1_PF_INIT_WIDTH 2 169 #define EASRC_CCE1_PF_INIT_MASK ((BIT(EASRC_CCE1_PF_INIT_WIDTH) - 1) \ 170 << EASRC_CCE1_PF_INIT_SHIFT) 171 #define EASRC_CCE1_PF_INIT(v) (((v) << EASRC_CCE1_PF_INIT_SHIFT) \ 172 & EASRC_CCE1_PF_INIT_MASK) 173 174 /* ASRC Context Control Extended 2 (CCE2) */ 175 #define EASRC_CCE2_ST2_TAPS_SHIFT 16 176 #define EASRC_CCE2_ST2_TAPS_WIDTH 9 177 #define EASRC_CCE2_ST2_TAPS_MASK ((BIT(EASRC_CCE2_ST2_TAPS_WIDTH) - 1) \ 178 << EASRC_CCE2_ST2_TAPS_SHIFT) 179 #define EASRC_CCE2_ST2_TAPS(v) (((v) << EASRC_CCE2_ST2_TAPS_SHIFT) \ 180 & EASRC_CCE2_ST2_TAPS_MASK) 181 #define EASRC_CCE2_ST1_TAPS_SHIFT 0 182 #define EASRC_CCE2_ST1_TAPS_WIDTH 9 183 #define EASRC_CCE2_ST1_TAPS_MASK ((BIT(EASRC_CCE2_ST1_TAPS_WIDTH) - 1) \ 184 << EASRC_CCE2_ST1_TAPS_SHIFT) 185 #define EASRC_CCE2_ST1_TAPS(v) (((v) << EASRC_CCE2_ST1_TAPS_SHIFT) \ 186 & EASRC_CCE2_ST1_TAPS_MASK) 187 188 /* ASRC Control Input Access (CIA) */ 189 #define EASRC_CIA_ITER_SHIFT 16 190 #define EASRC_CIA_ITER_WIDTH 6 191 #define EASRC_CIA_ITER_MASK ((BIT(EASRC_CIA_ITER_WIDTH) - 1) \ 192 << EASRC_CIA_ITER_SHIFT) 193 #define EASRC_CIA_ITER(v) (((v) << EASRC_CIA_ITER_SHIFT) \ 194 & EASRC_CIA_ITER_MASK) 195 #define EASRC_CIA_GRLEN_SHIFT 8 196 #define EASRC_CIA_GRLEN_WIDTH 6 197 #define EASRC_CIA_GRLEN_MASK ((BIT(EASRC_CIA_GRLEN_WIDTH) - 1) \ 198 << EASRC_CIA_GRLEN_SHIFT) 199 #define EASRC_CIA_GRLEN(v) (((v) << EASRC_CIA_GRLEN_SHIFT) \ 200 & EASRC_CIA_GRLEN_MASK) 201 #define EASRC_CIA_ACCLEN_SHIFT 0 202 #define EASRC_CIA_ACCLEN_WIDTH 6 203 #define EASRC_CIA_ACCLEN_MASK ((BIT(EASRC_CIA_ACCLEN_WIDTH) - 1) \ 204 << EASRC_CIA_ACCLEN_SHIFT) 205 #define EASRC_CIA_ACCLEN(v) (((v) << EASRC_CIA_ACCLEN_SHIFT) \ 206 & EASRC_CIA_ACCLEN_MASK) 207 208 /* ASRC Datapath Processor Control Slot0 Register0 (DPCS0R0) */ 209 #define EASRC_DPCS0R0_MAXCH_SHIFT 24 210 #define EASRC_DPCS0R0_MAXCH_WIDTH 5 211 #define EASRC_DPCS0R0_MAXCH_MASK ((BIT(EASRC_DPCS0R0_MAXCH_WIDTH) - 1) \ 212 << EASRC_DPCS0R0_MAXCH_SHIFT) 213 #define EASRC_DPCS0R0_MAXCH(v) (((v) << EASRC_DPCS0R0_MAXCH_SHIFT) \ 214 & EASRC_DPCS0R0_MAXCH_MASK) 215 #define EASRC_DPCS0R0_MINCH_SHIFT 16 216 #define EASRC_DPCS0R0_MINCH_WIDTH 5 217 #define EASRC_DPCS0R0_MINCH_MASK ((BIT(EASRC_DPCS0R0_MINCH_WIDTH) - 1) \ 218 << EASRC_DPCS0R0_MINCH_SHIFT) 219 #define EASRC_DPCS0R0_MINCH(v) (((v) << EASRC_DPCS0R0_MINCH_SHIFT) \ 220 & EASRC_DPCS0R0_MINCH_MASK) 221 #define EASRC_DPCS0R0_NUMCH_SHIFT 8 222 #define EASRC_DPCS0R0_NUMCH_WIDTH 5 223 #define EASRC_DPCS0R0_NUMCH_MASK ((BIT(EASRC_DPCS0R0_NUMCH_WIDTH) - 1) \ 224 << EASRC_DPCS0R0_NUMCH_SHIFT) 225 #define EASRC_DPCS0R0_NUMCH(v) (((v) << EASRC_DPCS0R0_NUMCH_SHIFT) \ 226 & EASRC_DPCS0R0_NUMCH_MASK) 227 #define EASRC_DPCS0R0_CTXNUM_SHIFT 1 228 #define EASRC_DPCS0R0_CTXNUM_WIDTH 2 229 #define EASRC_DPCS0R0_CTXNUM_MASK ((BIT(EASRC_DPCS0R0_CTXNUM_WIDTH) - 1) \ 230 << EASRC_DPCS0R0_CTXNUM_SHIFT) 231 #define EASRC_DPCS0R0_CTXNUM(v) (((v) << EASRC_DPCS0R0_CTXNUM_SHIFT) \ 232 & EASRC_DPCS0R0_CTXNUM_MASK) 233 #define EASRC_DPCS0R0_EN_SHIFT 0 234 #define EASRC_DPCS0R0_EN_MASK BIT(EASRC_DPCS0R0_EN_SHIFT) 235 #define EASRC_DPCS0R0_EN BIT(EASRC_DPCS0R0_EN_SHIFT) 236 237 /* ASRC Datapath Processor Control Slot0 Register1 (DPCS0R1) */ 238 #define EASRC_DPCS0R1_ST1_EXP_SHIFT 0 239 #define EASRC_DPCS0R1_ST1_EXP_WIDTH 13 240 #define EASRC_DPCS0R1_ST1_EXP_MASK ((BIT(EASRC_DPCS0R1_ST1_EXP_WIDTH) - 1) \ 241 << EASRC_DPCS0R1_ST1_EXP_SHIFT) 242 #define EASRC_DPCS0R1_ST1_EXP(v) (((v) << EASRC_DPCS0R1_ST1_EXP_SHIFT) \ 243 & EASRC_DPCS0R1_ST1_EXP_MASK) 244 245 /* ASRC Datapath Processor Control Slot0 Register2 (DPCS0R2) */ 246 #define EASRC_DPCS0R2_ST1_MA_SHIFT 16 247 #define EASRC_DPCS0R2_ST1_MA_WIDTH 13 248 #define EASRC_DPCS0R2_ST1_MA_MASK ((BIT(EASRC_DPCS0R2_ST1_MA_WIDTH) - 1) \ 249 << EASRC_DPCS0R2_ST1_MA_SHIFT) 250 #define EASRC_DPCS0R2_ST1_MA(v) (((v) << EASRC_DPCS0R2_ST1_MA_SHIFT) \ 251 & EASRC_DPCS0R2_ST1_MA_MASK) 252 #define EASRC_DPCS0R2_ST1_SA_SHIFT 0 253 #define EASRC_DPCS0R2_ST1_SA_WIDTH 13 254 #define EASRC_DPCS0R2_ST1_SA_MASK ((BIT(EASRC_DPCS0R2_ST1_SA_WIDTH) - 1) \ 255 << EASRC_DPCS0R2_ST1_SA_SHIFT) 256 #define EASRC_DPCS0R2_ST1_SA(v) (((v) << EASRC_DPCS0R2_ST1_SA_SHIFT) \ 257 & EASRC_DPCS0R2_ST1_SA_MASK) 258 259 /* ASRC Datapath Processor Control Slot0 Register3 (DPCS0R3) */ 260 #define EASRC_DPCS0R3_ST2_MA_SHIFT 16 261 #define EASRC_DPCS0R3_ST2_MA_WIDTH 13 262 #define EASRC_DPCS0R3_ST2_MA_MASK ((BIT(EASRC_DPCS0R3_ST2_MA_WIDTH) - 1) \ 263 << EASRC_DPCS0R3_ST2_MA_SHIFT) 264 #define EASRC_DPCS0R3_ST2_MA(v) (((v) << EASRC_DPCS0R3_ST2_MA_SHIFT) \ 265 & EASRC_DPCS0R3_ST2_MA_MASK) 266 #define EASRC_DPCS0R3_ST2_SA_SHIFT 0 267 #define EASRC_DPCS0R3_ST2_SA_WIDTH 13 268 #define EASRC_DPCS0R3_ST2_SA_MASK ((BIT(EASRC_DPCS0R3_ST2_SA_WIDTH) - 1) \ 269 << EASRC_DPCS0R3_ST2_SA_SHIFT) 270 #define EASRC_DPCS0R3_ST2_SA(v) (((v) << EASRC_DPCS0R3_ST2_SA_SHIFT) \ 271 & EASRC_DPCS0R3_ST2_SA_MASK) 272 273 /* ASRC Context Output Control (COC) */ 274 #define EASRC_COC_FWMDE_SHIFT 28 275 #define EASRC_COC_FWMDE_MASK BIT(EASRC_COC_FWMDE_SHIFT) 276 #define EASRC_COC_FWMDE BIT(EASRC_COC_FWMDE_SHIFT) 277 #define EASRC_COC_FIFO_WTMK_SHIFT 16 278 #define EASRC_COC_FIFO_WTMK_WIDTH 7 279 #define EASRC_COC_FIFO_WTMK_MASK ((BIT(EASRC_COC_FIFO_WTMK_WIDTH) - 1) \ 280 << EASRC_COC_FIFO_WTMK_SHIFT) 281 #define EASRC_COC_FIFO_WTMK(v) (((v) << EASRC_COC_FIFO_WTMK_SHIFT) \ 282 & EASRC_COC_FIFO_WTMK_MASK) 283 #define EASRC_COC_SAMPLE_POS_SHIFT 11 284 #define EASRC_COC_SAMPLE_POS_WIDTH 5 285 #define EASRC_COC_SAMPLE_POS_MASK ((BIT(EASRC_COC_SAMPLE_POS_WIDTH) - 1) \ 286 << EASRC_COC_SAMPLE_POS_SHIFT) 287 #define EASRC_COC_SAMPLE_POS(v) (((v) << EASRC_COC_SAMPLE_POS_SHIFT) \ 288 & EASRC_COC_SAMPLE_POS_MASK) 289 #define EASRC_COC_ENDIANNESS_SHIFT 10 290 #define EASRC_COC_ENDIANNESS_MASK BIT(EASRC_COC_ENDIANNESS_SHIFT) 291 #define EASRC_COC_ENDIANNESS BIT(EASRC_COC_ENDIANNESS_SHIFT) 292 #define EASRC_COC_BPS_SHIFT 8 293 #define EASRC_COC_BPS_WIDTH 2 294 #define EASRC_COC_BPS_MASK ((BIT(EASRC_COC_BPS_WIDTH) - 1) \ 295 << EASRC_COC_BPS_SHIFT) 296 #define EASRC_COC_BPS(v) (((v) << EASRC_COC_BPS_SHIFT) \ 297 & EASRC_COC_BPS_MASK) 298 #define EASRC_COC_FMT_SHIFT 7 299 #define EASRC_COC_FMT_MASK BIT(EASRC_COC_FMT_SHIFT) 300 #define EASRC_COC_FMT BIT(EASRC_COC_FMT_SHIFT) 301 #define EASRC_COC_OUTSIGN_SHIFT 6 302 #define EASRC_COC_OUTSIGN_MASK BIT(EASRC_COC_OUTSIGN_SHIFT) 303 #define EASRC_COC_OUTSIGN_OUT BIT(EASRC_COC_OUTSIGN_SHIFT) 304 #define EASRC_COC_IEC_VDATA_SHIFT 2 305 #define EASRC_COC_IEC_VDATA_MASK BIT(EASRC_COC_IEC_VDATA_SHIFT) 306 #define EASRC_COC_IEC_VDATA BIT(EASRC_COC_IEC_VDATA_SHIFT) 307 #define EASRC_COC_IEC_EN_SHIFT 1 308 #define EASRC_COC_IEC_EN_MASK BIT(EASRC_COC_IEC_EN_SHIFT) 309 #define EASRC_COC_IEC_EN BIT(EASRC_COC_IEC_EN_SHIFT) 310 #define EASRC_COC_DITHER_EN_SHIFT 0 311 #define EASRC_COC_DITHER_EN_MASK BIT(EASRC_COC_DITHER_EN_SHIFT) 312 #define EASRC_COC_DITHER_EN BIT(EASRC_COC_DITHER_EN_SHIFT) 313 314 /* ASRC Control Output Access (COA) */ 315 #define EASRC_COA_ITER_SHIFT 16 316 #define EASRC_COA_ITER_WIDTH 6 317 #define EASRC_COA_ITER_MASK ((BIT(EASRC_COA_ITER_WIDTH) - 1) \ 318 << EASRC_COA_ITER_SHIFT) 319 #define EASRC_COA_ITER(v) (((v) << EASRC_COA_ITER_SHIFT) \ 320 & EASRC_COA_ITER_MASK) 321 #define EASRC_COA_GRLEN_SHIFT 8 322 #define EASRC_COA_GRLEN_WIDTH 6 323 #define EASRC_COA_GRLEN_MASK ((BIT(EASRC_COA_GRLEN_WIDTH) - 1) \ 324 << EASRC_COA_GRLEN_SHIFT) 325 #define EASRC_COA_GRLEN(v) (((v) << EASRC_COA_GRLEN_SHIFT) \ 326 & EASRC_COA_GRLEN_MASK) 327 #define EASRC_COA_ACCLEN_SHIFT 0 328 #define EASRC_COA_ACCLEN_WIDTH 6 329 #define EASRC_COA_ACCLEN_MASK ((BIT(EASRC_COA_ACCLEN_WIDTH) - 1) \ 330 << EASRC_COA_ACCLEN_SHIFT) 331 #define EASRC_COA_ACCLEN(v) (((v) << EASRC_COA_ACCLEN_SHIFT) \ 332 & EASRC_COA_ACCLEN_MASK) 333 334 /* ASRC Sample FIFO Status (SFS) */ 335 #define EASRC_SFS_IWTMK_SHIFT 23 336 #define EASRC_SFS_IWTMK_MASK BIT(EASRC_SFS_IWTMK_SHIFT) 337 #define EASRC_SFS_IWTMK BIT(EASRC_SFS_IWTMK_SHIFT) 338 #define EASRC_SFS_NSGI_SHIFT 16 339 #define EASRC_SFS_NSGI_WIDTH 7 340 #define EASRC_SFS_NSGI_MASK ((BIT(EASRC_SFS_NSGI_WIDTH) - 1) \ 341 << EASRC_SFS_NSGI_SHIFT) 342 #define EASRC_SFS_NSGI(v) (((v) << EASRC_SFS_NSGI_SHIFT) \ 343 & EASRC_SFS_NSGI_MASK) 344 #define EASRC_SFS_OWTMK_SHIFT 7 345 #define EASRC_SFS_OWTMK_MASK BIT(EASRC_SFS_OWTMK_SHIFT) 346 #define EASRC_SFS_OWTMK BIT(EASRC_SFS_OWTMK_SHIFT) 347 #define EASRC_SFS_NSGO_SHIFT 0 348 #define EASRC_SFS_NSGO_WIDTH 7 349 #define EASRC_SFS_NSGO_MASK ((BIT(EASRC_SFS_NSGO_WIDTH) - 1) \ 350 << EASRC_SFS_NSGO_SHIFT) 351 #define EASRC_SFS_NSGO(v) (((v) << EASRC_SFS_NSGO_SHIFT) \ 352 & EASRC_SFS_NSGO_MASK) 353 354 /* ASRC Resampling Ratio Low (RRL) */ 355 #define EASRC_RRL_RS_RL_SHIFT 0 356 #define EASRC_RRL_RS_RL_WIDTH 32 357 #define EASRC_RRL_RS_RL(v) ((v) << EASRC_RRL_RS_RL_SHIFT) 358 359 /* ASRC Resampling Ratio High (RRH) */ 360 #define EASRC_RRH_RS_VLD_SHIFT 31 361 #define EASRC_RRH_RS_VLD_MASK BIT(EASRC_RRH_RS_VLD_SHIFT) 362 #define EASRC_RRH_RS_VLD BIT(EASRC_RRH_RS_VLD_SHIFT) 363 #define EASRC_RRH_RS_RH_SHIFT 0 364 #define EASRC_RRH_RS_RH_WIDTH 12 365 #define EASRC_RRH_RS_RH_MASK ((BIT(EASRC_RRH_RS_RH_WIDTH) - 1) \ 366 << EASRC_RRH_RS_RH_SHIFT) 367 #define EASRC_RRH_RS_RH(v) (((v) << EASRC_RRH_RS_RH_SHIFT) \ 368 & EASRC_RRH_RS_RH_MASK) 369 370 /* ASRC Resampling Ratio Update Control (RSUC) */ 371 #define EASRC_RSUC_RS_RM_SHIFT 0 372 #define EASRC_RSUC_RS_RM_WIDTH 32 373 #define EASRC_RSUC_RS_RM(v) ((v) << EASRC_RSUC_RS_RM_SHIFT) 374 375 /* ASRC Resampling Ratio Update Rate (RRUR) */ 376 #define EASRC_RRUR_RRR_SHIFT 0 377 #define EASRC_RRUR_RRR_WIDTH 31 378 #define EASRC_RRUR_RRR_MASK ((BIT(EASRC_RRUR_RRR_WIDTH) - 1) \ 379 << EASRC_RRUR_RRR_SHIFT) 380 #define EASRC_RRUR_RRR(v) (((v) << EASRC_RRUR_RRR_SHIFT) \ 381 & EASRC_RRUR_RRR_MASK) 382 383 /* ASRC Resampling Center Tap Coefficient Low (RCTCL) */ 384 #define EASRC_RCTCL_RS_CL_SHIFT 0 385 #define EASRC_RCTCL_RS_CL_WIDTH 32 386 #define EASRC_RCTCL_RS_CL(v) ((v) << EASRC_RCTCL_RS_CL_SHIFT) 387 388 /* ASRC Resampling Center Tap Coefficient High (RCTCH) */ 389 #define EASRC_RCTCH_RS_CH_SHIFT 0 390 #define EASRC_RCTCH_RS_CH_WIDTH 32 391 #define EASRC_RCTCH_RS_CH(v) ((v) << EASRC_RCTCH_RS_CH_SHIFT) 392 393 /* ASRC Prefilter Coefficient FIFO (PCF) */ 394 #define EASRC_PCF_CD_SHIFT 0 395 #define EASRC_PCF_CD_WIDTH 32 396 #define EASRC_PCF_CD(v) ((v) << EASRC_PCF_CD_SHIFT) 397 398 /* ASRC Context Resampling Coefficient Memory (CRCM) */ 399 #define EASRC_CRCM_RS_CWD_SHIFT 0 400 #define EASRC_CRCM_RS_CWD_WIDTH 32 401 #define EASRC_CRCM_RS_CWD(v) ((v) << EASRC_CRCM_RS_CWD_SHIFT) 402 403 /* ASRC Context Resampling Coefficient Control (CRCC) */ 404 #define EASRC_CRCC_RS_CA_SHIFT 16 405 #define EASRC_CRCC_RS_CA_WIDTH 11 406 #define EASRC_CRCC_RS_CA_MASK ((BIT(EASRC_CRCC_RS_CA_WIDTH) - 1) \ 407 << EASRC_CRCC_RS_CA_SHIFT) 408 #define EASRC_CRCC_RS_CA(v) (((v) << EASRC_CRCC_RS_CA_SHIFT) \ 409 & EASRC_CRCC_RS_CA_MASK) 410 #define EASRC_CRCC_RS_TAPS_SHIFT 1 411 #define EASRC_CRCC_RS_TAPS_WIDTH 2 412 #define EASRC_CRCC_RS_TAPS_MASK ((BIT(EASRC_CRCC_RS_TAPS_WIDTH) - 1) \ 413 << EASRC_CRCC_RS_TAPS_SHIFT) 414 #define EASRC_CRCC_RS_TAPS(v) (((v) << EASRC_CRCC_RS_TAPS_SHIFT) \ 415 & EASRC_CRCC_RS_TAPS_MASK) 416 #define EASRC_CRCC_RS_CPR_SHIFT 0 417 #define EASRC_CRCC_RS_CPR_MASK BIT(EASRC_CRCC_RS_CPR_SHIFT) 418 #define EASRC_CRCC_RS_CPR BIT(EASRC_CRCC_RS_CPR_SHIFT) 419 420 /* ASRC Interrupt_Control (IC) */ 421 #define EASRC_IRQC_RSDM_SHIFT 8 422 #define EASRC_IRQC_RSDM_WIDTH 4 423 #define EASRC_IRQC_RSDM_MASK ((BIT(EASRC_IRQC_RSDM_WIDTH) - 1) \ 424 << EASRC_IRQC_RSDM_SHIFT) 425 #define EASRC_IRQC_RSDM(v) (((v) << EASRC_IRQC_RSDM_SHIFT) \ 426 & EASRC_IRQC_RSDM_MASK) 427 #define EASRC_IRQC_OERM_SHIFT 4 428 #define EASRC_IRQC_OERM_WIDTH 4 429 #define EASRC_IRQC_OERM_MASK ((BIT(EASRC_IRQC_OERM_WIDTH) - 1) \ 430 << EASRC_IRQC_OERM_SHIFT) 431 #define EASRC_IRQC_OERM(v) (((v) << EASRC_IRQC_OERM_SHIFT) \ 432 & EASRC_IEQC_OERM_MASK) 433 #define EASRC_IRQC_IOM_SHIFT 0 434 #define EASRC_IRQC_IOM_WIDTH 4 435 #define EASRC_IRQC_IOM_MASK ((BIT(EASRC_IRQC_IOM_WIDTH) - 1) \ 436 << EASRC_IRQC_IOM_SHIFT) 437 #define EASRC_IRQC_IOM(v) (((v) << EASRC_IRQC_IOM_SHIFT) \ 438 & EASRC_IRQC_IOM_MASK) 439 440 /* ASRC Interrupt Status Flags (ISF) */ 441 #define EASRC_IRQF_RSD_SHIFT 8 442 #define EASRC_IRQF_RSD_WIDTH 4 443 #define EASRC_IRQF_RSD_MASK ((BIT(EASRC_IRQF_RSD_WIDTH) - 1) \ 444 << EASRC_IRQF_RSD_SHIFT) 445 #define EASRC_IRQF_RSD(v) (((v) << EASRC_IRQF_RSD_SHIFT) \ 446 & EASRC_IRQF_RSD_MASK) 447 #define EASRC_IRQF_OER_SHIFT 4 448 #define EASRC_IRQF_OER_WIDTH 4 449 #define EASRC_IRQF_OER_MASK ((BIT(EASRC_IRQF_OER_WIDTH) - 1) \ 450 << EASRC_IRQF_OER_SHIFT) 451 #define EASRC_IRQF_OER(v) (((v) << EASRC_IRQF_OER_SHIFT) \ 452 & EASRC_IRQF_OER_MASK) 453 #define EASRC_IRQF_IFO_SHIFT 0 454 #define EASRC_IRQF_IFO_WIDTH 4 455 #define EASRC_IRQF_IFO_MASK ((BIT(EASRC_IRQF_IFO_WIDTH) - 1) \ 456 << EASRC_IRQF_IFO_SHIFT) 457 #define EASRC_IRQF_IFO(v) (((v) << EASRC_IRQF_IFO_SHIFT) \ 458 & EASRC_IRQF_IFO_MASK) 459 460 /* ASRC Context Channel STAT */ 461 #define EASRC_CSx_CSx_SHIFT 0 462 #define EASRC_CSx_CSx_WIDTH 32 463 #define EASRC_CSx_CSx(v) ((v) << EASRC_CSx_CSx_SHIFT) 464 465 /* ASRC Debug Control Register */ 466 #define EASRC_DBGC_DMS_SHIFT 0 467 #define EASRC_DBGC_DMS_WIDTH 6 468 #define EASRC_DBGC_DMS_MASK ((BIT(EASRC_DBGC_DMS_WIDTH) - 1) \ 469 << EASRC_DBGC_DMS_SHIFT) 470 #define EASRC_DBGC_DMS(v) (((v) << EASRC_DBGC_DMS_SHIFT) \ 471 & EASRC_DBGC_DMS_MASK) 472 473 /* ASRC Debug Status Register */ 474 #define EASRC_DBGS_DS_SHIFT 0 475 #define EASRC_DBGS_DS_WIDTH 32 476 #define EASRC_DBGS_DS(v) ((v) << EASRC_DBGS_DS_SHIFT) 477 478 /* General Constants */ 479 #define EASRC_CTX_MAX_NUM 4 480 #define EASRC_RS_COEFF_MEM 0 481 #define EASRC_PF_COEFF_MEM 1 482 483 /* Prefilter constants */ 484 #define EASRC_PF_ST1_ONLY 0 485 #define EASRC_PF_TWO_STAGE_MODE 1 486 #define EASRC_PF_ST1_COEFF_WR 0 487 #define EASRC_PF_ST2_COEFF_WR 1 488 #define EASRC_MAX_PF_TAPS 384 489 490 /* Resampling constants */ 491 #define EASRC_RS_32_TAPS 0 492 #define EASRC_RS_64_TAPS 1 493 #define EASRC_RS_128_TAPS 2 494 495 /* Initialization mode */ 496 #define EASRC_INIT_MODE_SW_CONTROL 0 497 #define EASRC_INIT_MODE_REPLICATE 1 498 #define EASRC_INIT_MODE_ZERO_FILL 2 499 500 /* FIFO watermarks */ 501 #define FSL_EASRC_INPUTFIFO_WML 0x4 502 #define FSL_EASRC_OUTPUTFIFO_WML 0x1 503 504 #define EASRC_INPUTFIFO_THRESHOLD_MIN 0 505 #define EASRC_INPUTFIFO_THRESHOLD_MAX 127 506 #define EASRC_OUTPUTFIFO_THRESHOLD_MIN 0 507 #define EASRC_OUTPUTFIFO_THRESHOLD_MAX 63 508 509 #define EASRC_DMA_BUFFER_SIZE (1024 * 48 * 9) 510 #define EASRC_MAX_BUFFER_SIZE (1024 * 48) 511 512 #define FIRMWARE_MAGIC 0xDEAD 513 #define FIRMWARE_VERSION 1 514 515 #define PREFILTER_MEM_LEN 0x1800 516 517 enum easrc_word_width { 518 EASRC_WIDTH_16_BIT = 0, 519 EASRC_WIDTH_20_BIT = 1, 520 EASRC_WIDTH_24_BIT = 2, 521 EASRC_WIDTH_32_BIT = 3, 522 }; 523 524 struct __attribute__((__packed__)) asrc_firmware_hdr { 525 u32 magic; 526 u32 interp_scen; 527 u32 prefil_scen; 528 u32 firmware_version; 529 }; 530 531 struct __attribute__((__packed__)) interp_params { 532 u32 magic; 533 u32 num_taps; 534 u32 num_phases; 535 u64 center_tap; 536 u64 coeff[8192]; 537 }; 538 539 struct __attribute__((__packed__)) prefil_params { 540 u32 magic; 541 u32 insr; 542 u32 outsr; 543 u32 st1_taps; 544 u32 st2_taps; 545 u32 st1_exp; 546 u64 coeff[256]; 547 }; 548 549 struct dma_block { 550 void *dma_vaddr; 551 unsigned int length; 552 unsigned int max_buf_size; 553 }; 554 555 struct fsl_easrc_data_fmt { 556 unsigned int width : 2; 557 unsigned int endianness : 1; 558 unsigned int unsign : 1; 559 unsigned int floating_point : 1; 560 unsigned int iec958: 1; 561 unsigned int sample_pos: 5; 562 unsigned int addexp; 563 }; 564 565 struct fsl_easrc_io_params { 566 struct fsl_easrc_data_fmt fmt; 567 unsigned int group_len; 568 unsigned int iterations; 569 unsigned int access_len; 570 unsigned int fifo_wtmk; 571 unsigned int sample_rate; 572 unsigned int sample_format; 573 unsigned int norm_rate; 574 }; 575 576 struct fsl_easrc_slot { 577 bool busy; 578 int ctx_index; 579 int slot_index; 580 int num_channel; /* maximum is 8 */ 581 int min_channel; 582 int max_channel; 583 int pf_mem_used; 584 }; 585 586 /** 587 * fsl_easrc_ctx_priv: EASRC context private data 588 * 589 * @in_params: input parameter 590 * @out_params: output parameter 591 * @st1_num_taps: tap number of stage 1 592 * @st2_num_taps: tap number of stage 2 593 * @st1_num_exp: exponent number of stage 1 594 * @pf_init_mode: prefilter init mode 595 * @rs_init_mode: resample filter init mode 596 * @ctx_streams: stream flag of ctx 597 * @rs_ratio: resampler ratio 598 * @st1_coeff: pointer of stage 1 coeff 599 * @st2_coeff: pointer of stage 2 coeff 600 * @in_filled_sample: input filled sample 601 * @out_missed_sample: sample missed in output 602 * @st1_addexp: exponent added for stage1 603 * @st2_addexp: exponent added for stage2 604 */ 605 struct fsl_easrc_ctx_priv { 606 struct fsl_easrc_io_params in_params; 607 struct fsl_easrc_io_params out_params; 608 unsigned int st1_num_taps; 609 unsigned int st2_num_taps; 610 unsigned int st1_num_exp; 611 unsigned int pf_init_mode; 612 unsigned int rs_init_mode; 613 unsigned int ctx_streams; 614 u64 rs_ratio; 615 u64 *st1_coeff; 616 u64 *st2_coeff; 617 int in_filled_sample; 618 int out_missed_sample; 619 int st1_addexp; 620 int st2_addexp; 621 }; 622 623 /** 624 * fsl_easrc_priv: EASRC private data 625 * 626 * @slot: slot setting 627 * @firmware_hdr: the header of firmware 628 * @interp: pointer to interpolation filter coeff 629 * @prefil: pointer to prefilter coeff 630 * @fw: firmware of coeff table 631 * @fw_name: firmware name 632 * @rs_num_taps: resample filter taps, 32, 64, or 128 633 * @bps_iec958: bits per sample of iec958 634 * @rs_coeff: resampler coefficient 635 * @const_coeff: one tap prefilter coefficient 636 * @firmware_loaded: firmware is loaded 637 */ 638 struct fsl_easrc_priv { 639 struct fsl_easrc_slot slot[EASRC_CTX_MAX_NUM][2]; 640 struct asrc_firmware_hdr *firmware_hdr; 641 struct interp_params *interp; 642 struct prefil_params *prefil; 643 const struct firmware *fw; 644 const char *fw_name; 645 unsigned int rs_num_taps; 646 unsigned int bps_iec958[EASRC_CTX_MAX_NUM]; 647 u64 *rs_coeff; 648 u64 const_coeff; 649 int firmware_loaded; 650 }; 651 #endif /* _FSL_EASRC_H */ 652