xref: /freebsd/sys/contrib/alpine-hal/al_hal_udma_debug.h (revision 2414e86439f4c53aff73d1afe0453fb48145d9e5)
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