1*49b49cdaSZbigniew Bodek /*- 2*49b49cdaSZbigniew Bodek ******************************************************************************* 3*49b49cdaSZbigniew Bodek Copyright (C) 2015 Annapurna Labs Ltd. 4*49b49cdaSZbigniew Bodek 5*49b49cdaSZbigniew Bodek This file may be licensed under the terms of the Annapurna Labs Commercial 6*49b49cdaSZbigniew Bodek License Agreement. 7*49b49cdaSZbigniew Bodek 8*49b49cdaSZbigniew Bodek Alternatively, this file can be distributed under the terms of the GNU General 9*49b49cdaSZbigniew Bodek Public License V2 as published by the Free Software Foundation and can be 10*49b49cdaSZbigniew Bodek found at http://www.gnu.org/licenses/gpl-2.0.html 11*49b49cdaSZbigniew Bodek 12*49b49cdaSZbigniew Bodek Alternatively, redistribution and use in source and binary forms, with or 13*49b49cdaSZbigniew Bodek without modification, are permitted provided that the following conditions are 14*49b49cdaSZbigniew Bodek met: 15*49b49cdaSZbigniew Bodek 16*49b49cdaSZbigniew Bodek * Redistributions of source code must retain the above copyright notice, 17*49b49cdaSZbigniew Bodek this list of conditions and the following disclaimer. 18*49b49cdaSZbigniew Bodek 19*49b49cdaSZbigniew Bodek * Redistributions in binary form must reproduce the above copyright 20*49b49cdaSZbigniew Bodek notice, this list of conditions and the following disclaimer in 21*49b49cdaSZbigniew Bodek the documentation and/or other materials provided with the 22*49b49cdaSZbigniew Bodek distribution. 23*49b49cdaSZbigniew Bodek 24*49b49cdaSZbigniew Bodek THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 25*49b49cdaSZbigniew Bodek ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 26*49b49cdaSZbigniew Bodek WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 27*49b49cdaSZbigniew Bodek DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR 28*49b49cdaSZbigniew Bodek ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 29*49b49cdaSZbigniew Bodek (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 30*49b49cdaSZbigniew Bodek LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 31*49b49cdaSZbigniew Bodek ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 32*49b49cdaSZbigniew Bodek (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 33*49b49cdaSZbigniew Bodek SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 34*49b49cdaSZbigniew Bodek 35*49b49cdaSZbigniew Bodek *******************************************************************************/ 36*49b49cdaSZbigniew Bodek 37*49b49cdaSZbigniew Bodek /** 38*49b49cdaSZbigniew Bodek * @defgroup group_udma_debug UDMA Debug 39*49b49cdaSZbigniew Bodek * @ingroup group_udma_api 40*49b49cdaSZbigniew Bodek * UDMA Debug 41*49b49cdaSZbigniew Bodek * @{ 42*49b49cdaSZbigniew Bodek * @file al_hal_udma_debug.h 43*49b49cdaSZbigniew Bodek * 44*49b49cdaSZbigniew Bodek * @brief C Header file for the Universal DMA HAL driver for debug APIs 45*49b49cdaSZbigniew Bodek * 46*49b49cdaSZbigniew Bodek */ 47*49b49cdaSZbigniew Bodek 48*49b49cdaSZbigniew Bodek #ifndef __AL_HAL_UDMA_DEBUG_H__ 49*49b49cdaSZbigniew Bodek #define __AL_HAL_UDMA_DEBUG_H__ 50*49b49cdaSZbigniew Bodek 51*49b49cdaSZbigniew Bodek #include <al_hal_udma.h> 52*49b49cdaSZbigniew Bodek 53*49b49cdaSZbigniew Bodek /* *INDENT-OFF* */ 54*49b49cdaSZbigniew Bodek #ifdef __cplusplus 55*49b49cdaSZbigniew Bodek extern "C" { 56*49b49cdaSZbigniew Bodek #endif 57*49b49cdaSZbigniew Bodek /* *INDENT-ON* */ 58*49b49cdaSZbigniew Bodek 59*49b49cdaSZbigniew Bodek /* UDMA register print helper macros */ 60*49b49cdaSZbigniew Bodek #define AL_UDMA_PRINT_REG(UDMA, PREFIX, POSTFIX, TYPE, GROUP, REG) \ 61*49b49cdaSZbigniew Bodek al_dbg(PREFIX #REG " = 0x%08x" POSTFIX, al_reg_read32( \ 62*49b49cdaSZbigniew Bodek &(UDMA->udma_regs->TYPE.GROUP.REG))) 63*49b49cdaSZbigniew Bodek 64*49b49cdaSZbigniew Bodek #define AL_UDMA_PRINT_REG_FIELD( \ 65*49b49cdaSZbigniew Bodek UDMA, PREFIX, POSTFIX, FMT, TYPE, GROUP, REG, LBL, FIELD) \ 66*49b49cdaSZbigniew Bodek al_dbg(PREFIX #LBL " = " FMT POSTFIX, al_reg_read32( \ 67*49b49cdaSZbigniew Bodek &(UDMA->udma_regs->TYPE.GROUP.REG)) \ 68*49b49cdaSZbigniew Bodek & FIELD ## _MASK >> FIELD ## _SHIFT) 69*49b49cdaSZbigniew Bodek 70*49b49cdaSZbigniew Bodek #define AL_UDMA_PRINT_REG_BIT( \ 71*49b49cdaSZbigniew Bodek UDMA, PREFIX, POSTFIX, TYPE, GROUP, REG, LBL, FIELD) \ 72*49b49cdaSZbigniew Bodek al_dbg(PREFIX #LBL " = %d" POSTFIX, ((al_reg_read32( \ 73*49b49cdaSZbigniew Bodek &(UDMA->udma_regs->TYPE.GROUP.REG)) \ 74*49b49cdaSZbigniew Bodek & FIELD) != 0)) 75*49b49cdaSZbigniew Bodek 76*49b49cdaSZbigniew Bodek /* UDMA register print mask definitions */ 77*49b49cdaSZbigniew Bodek #define AL_UDMA_DEBUG_QUEUE(n) AL_BIT(n) 78*49b49cdaSZbigniew Bodek #define AL_UDMA_DEBUG_AXI AL_BIT(DMA_MAX_Q) 79*49b49cdaSZbigniew Bodek #define AL_UDMA_DEBUG_GENERAL AL_BIT(DMA_MAX_Q + 1) 80*49b49cdaSZbigniew Bodek #define AL_UDMA_DEBUG_READ AL_BIT(DMA_MAX_Q + 2) 81*49b49cdaSZbigniew Bodek #define AL_UDMA_DEBUG_WRITE AL_BIT(DMA_MAX_Q + 3) 82*49b49cdaSZbigniew Bodek #define AL_UDMA_DEBUG_DWRR AL_BIT(DMA_MAX_Q + 4) 83*49b49cdaSZbigniew Bodek #define AL_UDMA_DEBUG_RATE_LIMITER AL_BIT(DMA_MAX_Q + 5) 84*49b49cdaSZbigniew Bodek #define AL_UDMA_DEBUG_STREAM_RATE_LIMITER AL_BIT(DMA_MAX_Q + 6) 85*49b49cdaSZbigniew Bodek #define AL_UDMA_DEBUG_COMP AL_BIT(DMA_MAX_Q + 7) 86*49b49cdaSZbigniew Bodek #define AL_UDMA_DEBUG_STAT AL_BIT(DMA_MAX_Q + 8) 87*49b49cdaSZbigniew Bodek #define AL_UDMA_DEBUG_FEATURE AL_BIT(DMA_MAX_Q + 9) 88*49b49cdaSZbigniew Bodek #define AL_UDMA_DEBUG_ALL 0xFFFFFFFF 89*49b49cdaSZbigniew Bodek 90*49b49cdaSZbigniew Bodek /* Debug functions */ 91*49b49cdaSZbigniew Bodek 92*49b49cdaSZbigniew Bodek /** 93*49b49cdaSZbigniew Bodek * Print udma registers according to the provided mask 94*49b49cdaSZbigniew Bodek * 95*49b49cdaSZbigniew Bodek * @param udma udma data structure 96*49b49cdaSZbigniew Bodek * @param mask mask that specifies which registers groups to print 97*49b49cdaSZbigniew Bodek * e.g. AL_UDMA_DEBUG_AXI prints AXI registers, AL_UDMA_DEBUG_ALL prints all 98*49b49cdaSZbigniew Bodek * registers 99*49b49cdaSZbigniew Bodek */ 100*49b49cdaSZbigniew Bodek void al_udma_regs_print(struct al_udma *udma, unsigned int mask); 101*49b49cdaSZbigniew Bodek 102*49b49cdaSZbigniew Bodek /** 103*49b49cdaSZbigniew Bodek * Print udma queue software structure 104*49b49cdaSZbigniew Bodek * 105*49b49cdaSZbigniew Bodek * @param udma udma data structure 106*49b49cdaSZbigniew Bodek * @param qid queue index 107*49b49cdaSZbigniew Bodek */ 108*49b49cdaSZbigniew Bodek void al_udma_q_struct_print(struct al_udma *udma, uint32_t qid); 109*49b49cdaSZbigniew Bodek 110*49b49cdaSZbigniew Bodek /** UDMA ring type */ 111*49b49cdaSZbigniew Bodek enum al_udma_ring_type { 112*49b49cdaSZbigniew Bodek AL_RING_SUBMISSION, 113*49b49cdaSZbigniew Bodek AL_RING_COMPLETION 114*49b49cdaSZbigniew Bodek }; 115*49b49cdaSZbigniew Bodek 116*49b49cdaSZbigniew Bodek /** 117*49b49cdaSZbigniew Bodek * Print the ring entries for the specified queue index and ring type 118*49b49cdaSZbigniew Bodek * (submission/completion) 119*49b49cdaSZbigniew Bodek * 120*49b49cdaSZbigniew Bodek * @param udma udma data structure 121*49b49cdaSZbigniew Bodek * @param qid queue index 122*49b49cdaSZbigniew Bodek * @param rtype udma ring type 123*49b49cdaSZbigniew Bodek */ 124*49b49cdaSZbigniew Bodek void al_udma_ring_print(struct al_udma *udma, uint32_t qid, 125*49b49cdaSZbigniew Bodek enum al_udma_ring_type rtype); 126*49b49cdaSZbigniew Bodek 127*49b49cdaSZbigniew Bodek 128*49b49cdaSZbigniew Bodek /* *INDENT-OFF* */ 129*49b49cdaSZbigniew Bodek #ifdef __cplusplus 130*49b49cdaSZbigniew Bodek } 131*49b49cdaSZbigniew Bodek #endif 132*49b49cdaSZbigniew Bodek /* *INDENT-ON* */ 133*49b49cdaSZbigniew Bodek #endif /* __AL_HAL_UDMA_DEBUG_H__ */ 134*49b49cdaSZbigniew Bodek /** @} end of UDMA debug group */ 135