From e8a3d11e34d83702593406262f7f99ee5c90baf8 Mon Sep 17 00:00:00 2001 From: Jianzhong Xu Date: Mon, 26 Mar 2018 15:58:02 -0400 Subject: [PATCH] Replaced hard coded OUTPUT_STRIDE with configured stride = num_serializer*num_channel. McASP Tx clock is hard coded for DDP 48kHz. DDP 48kHz streaming works fine. To run PCM streaming, neeed to change McASP Tx clock aclkxctl. --- pasdk/test_dsp/application/itopo/evmk2g/mcasp_cfg.c | 6 +++--- pasdk/test_dsp/framework/audioStreamInpProcNewIO.c | 6 ++++-- pasdk/test_dsp/framework/audioStreamOutIo.c | 11 ++++++----- pasdk/test_dsp/framework/audioStreamOutProc.h | 1 + pasdk/test_dsp/io/ioConfig.h | 5 +++-- 5 files changed, 17 insertions(+), 12 deletions(-) diff --git a/pasdk/test_dsp/application/itopo/evmk2g/mcasp_cfg.c b/pasdk/test_dsp/application/itopo/evmk2g/mcasp_cfg.c index ac16b5ad..7457e4a7 100644 --- a/pasdk/test_dsp/application/itopo/evmk2g/mcasp_cfg.c +++ b/pasdk/test_dsp/application/itopo/evmk2g/mcasp_cfg.c @@ -143,8 +143,8 @@ Mcasp_HwSetupData mcaspXmtSetupDAC = { /* .xstat = */ 0x000001FF, /* reset any existing status bits */ /* .xevtctl = */ 0x00000000, /* DMA request is enabled or disabled */ { -// /* .aclkxctl = */ 0X000000E1, // Transmit bit clock divide ratio = 2 - /* .aclkxctl = */ 0X000000E7, // Transmit bit clock divide ratio = 8 +// /* .aclkxctl = */ 0X000000E1, // Transmit bit clock divide ratio = 2 --> works for 48khz PCM but not for DDP + /* .aclkxctl = */ 0X000000E7, // Transmit bit clock divide ratio = 8 --> working for DDP 48khz but not for PCM /* .ahclkxctl = */ 0x00004000, /* .xclkchk = */ 0x00000000 }, @@ -192,7 +192,7 @@ Mcasp_ChanParams mcaspRxChanParamADC = Mcasp_WordLength_32, /* wordWidth */ NULL, /* void * userLoopJobBuffer */ 0, /* userLoopJobLength */ - NULL, /* edmaHandle */ + NULL, /* edmaHandle */ GblErr, 2, /* number of TDM channels */ Mcasp_BufferFormat_MULTISER_MULTISLOT_SEMI_INTERLEAVED_1, diff --git a/pasdk/test_dsp/framework/audioStreamInpProcNewIO.c b/pasdk/test_dsp/framework/audioStreamInpProcNewIO.c index 67f902fa..68c90266 100644 --- a/pasdk/test_dsp/framework/audioStreamInpProcNewIO.c +++ b/pasdk/test_dsp/framework/audioStreamInpProcNewIO.c @@ -1139,7 +1139,7 @@ Int asitSelectDevices(const PAF_ASIT_Patchs *pQ, PAF_AST_Config *pAstCfg, PAF_AS pInp->pRxParams = pQ->devinp->x[interface]; pInp->hMcaspChan = lldCfg->hMcaspChan; - pInp->stride = lldCfg->mcaspChanParams->noOfSerRequested * 2; // 2 for stereo + pInp->stride = lldCfg->mcaspChanParams->noOfSerRequested * lldCfg->mcaspChanParams->noOfChannels; /* Set flag to swap HDMI data if it is 4xI2S and word length is 16 */ if( (lldCfg->mcaspChanParams->wordWidth == Mcasp_WordLength_16) @@ -1506,7 +1506,7 @@ Int asitUpdateIoComps(const PAF_ASIT_Params *pP, PAF_AST_Config *pAstCfg, return ASIT_NO_ERR; } /* asitUpdateIoComps */ - +#if 0 #ifndef IO_LOOPBACK_TEST #if OUTPUT_FRAME_LENGTH == INPUT_FRAME_LENGTH U8 pcmbuf[OUTPUT_FRAME_SIZE]; @@ -1558,6 +1558,8 @@ Int rxDecodePlayZero(PAF_AST_IoInp *pInp) } #endif +#endif + Int asitEvtErrCheck(UInt actualEvents, UInt expectedEvents) { TRACE_VERBOSE2("ASIT events error: actual events are: %d, expected events are: %d.", diff --git a/pasdk/test_dsp/framework/audioStreamOutIo.c b/pasdk/test_dsp/framework/audioStreamOutIo.c index c70438c9..2a92966b 100644 --- a/pasdk/test_dsp/framework/audioStreamOutIo.c +++ b/pasdk/test_dsp/framework/audioStreamOutIo.c @@ -85,6 +85,7 @@ Int asopSelectDevices(void *pConfig, PAF_AST_IoOut *pOut) } pOut->hMcaspChan = mcaspChanHandle; + pOut->stride = lldCfg->mcaspChanParams->noOfSerRequested * lldCfg->mcaspChanParams->noOfChannels; } return 0; @@ -328,7 +329,7 @@ Int asopStartOutput( #if 1 // FL, New IO: add similar thing to be figured out // Update framework Phy transfer size - pOut[z].phyXferSize = pAstCfg->xOut[z].outBufConfig.lengthofFrame * OUTPUT_STRIDE * WORD_SIZE_PCM; + pOut[z].phyXferSize = pAstCfg->xOut[z].outBufConfig.lengthofFrame * pOut[z].stride * WORD_SIZE_PCM; // Update IO Phy transfer size ioPhyCtl.code = IOPHY_CTL_FRAME_SIZE; ioPhyCtl.params.xferFrameSize = pOut[z].phyXferSize; @@ -530,14 +531,14 @@ Int asopIoCompsInit( ioBuffParams.base = pOutBuf->outBufConfig.base.pVoid; ioBuffParams.size = pOutBuf->outBufConfig.allocation/STRIDE_WORST_CASE*STRIDE_WORST_CASE; ioBuffParams.sync = IOBUff_READ_SYNC; - ioBuffParams.nominalDelay = OUTPUT_FRAME_SIZE * (NUM_PRIME_XFERS+1); + ioBuffParams.nominalDelay = NUM_CYCLE_PER_FRAME_DEF * pOutIo->stride * WORD_SIZE_PCM * (NUM_PRIME_XFERS+1); if(ioBuffInit(pOutIo->hIoBuff, &ioBuffParams) != IOBUFF_NOERR) { return -1; // to remove magic number } ioPhyParams.ioBuffHandle = pOutIo->hIoBuff; - ioPhyParams.xferFrameSize = OUTPUT_FRAME_SIZE; + ioPhyParams.xferFrameSize = NUM_CYCLE_PER_FRAME_DEF * pOutIo->stride * WORD_SIZE_PCM; ioPhyParams.mcaspChanHandle = pOutIo->hMcaspChan; ioPhyParams.ioBuffOp = IOPHY_IOBUFFOP_READ; if(ioPhyInit(pOutIo->hIoPhy, &ioPhyParams) != IOPHY_NOERR) @@ -595,7 +596,7 @@ Int asopInitOutBufConfig( pOutBufCfg = &pOutBuf->outBufConfig; hIoBuff = pOutIo->hIoBuff; - pOutBufCfg->stride = OUTPUT_STRIDE; + pOutBufCfg->stride = pOutIo->stride; pOutBufCfg->sizeofElement = WORD_SIZE_PCM; pOutBufCfg->precision = 24; @@ -627,7 +628,7 @@ Int asopUpdateOutBufConfig( // FL, New IO: original code can change these values in every DOB issue // Need to determine if this is required or not. - pOutBufCfg->stride = OUTPUT_STRIDE; + pOutBufCfg->stride = pOutIo->stride; pOutBufCfg->sizeofElement = WORD_SIZE_PCM; pOutBufCfg->precision = 24; diff --git a/pasdk/test_dsp/framework/audioStreamOutProc.h b/pasdk/test_dsp/framework/audioStreamOutProc.h index 4a909bc3..88d5483b 100644 --- a/pasdk/test_dsp/framework/audioStreamOutProc.h +++ b/pasdk/test_dsp/framework/audioStreamOutProc.h @@ -185,6 +185,7 @@ typedef struct PAF_AST_OutIO { ioBuffHandle_t hIoBuff; /* handle to I/O buffer management */ Ptr hMcaspChan; /* handle to McASP LLD channel for output */ uint32_t phyXferSize; + uint32_t stride; void *mcaspTxBuf1; void *mcaspTxBuf2; diff --git a/pasdk/test_dsp/io/ioConfig.h b/pasdk/test_dsp/io/ioConfig.h index e43bcfb1..2a2a6dbb 100644 --- a/pasdk/test_dsp/io/ioConfig.h +++ b/pasdk/test_dsp/io/ioConfig.h @@ -8,11 +8,13 @@ //#define PCM_LOOPBACK_TEST // define this to run DSP-only PCM loopback test in PASDK framework //#define INPUT_HDMI_4xI2S // HDMI, 4 Rx serializers -#define INPUT_HDMI_STEREO // HDMI, 1 Rx serializer +//#define INPUT_HDMI_STEREO // HDMI, 1 Rx serializer //#define INPUT_SPDIF // S/PDIF, 1 Rx serializer //#define INPUT_PCM_ONLY // debugging, input fixed to PCM +#define TX_MCASP_USE_MULT_SER // This is the normal operation. Undefine this for debugging and loopback + #ifdef INPUT_PCM_ONLY #define SWAP_INPUT_DATA FALSE #else @@ -21,7 +23,6 @@ #ifdef INPUT_HDMI_4xI2S #define RX_MCASP_USE_MULT_SER -#define TX_MCASP_USE_MULT_SER // This is the normal operation. Undefine this for debugging and loopback #define IO_HW_INTERFACE 2 //#define ASIP_ELEMENT_SIZE 2 //#define ASIP_STRIDE 8 // 4 lane, stereo -- 2.39.2