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