]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - sys/contrib/alpine-hal/al_hal_udma_debug.c
ident(1): Normalizing date format
[FreeBSD/FreeBSD.git] / sys / contrib / alpine-hal / al_hal_udma_debug.c
1 /*-
2 *******************************************************************************
3 Copyright (C) 2015 Annapurna Labs Ltd.
4
5 This file may be licensed under the terms of the Annapurna Labs Commercial
6 License Agreement.
7
8 Alternatively, this file can be distributed under the terms of the GNU General
9 Public License V2 as published by the Free Software Foundation and can be
10 found at http://www.gnu.org/licenses/gpl-2.0.html
11
12 Alternatively, redistribution and use in source and binary forms, with or
13 without modification, are permitted provided that the following conditions are
14 met:
15
16     *     Redistributions of source code must retain the above copyright notice,
17 this list of conditions and the following disclaimer.
18
19     *     Redistributions in binary form must reproduce the above copyright
20 notice, this list of conditions and the following disclaimer in
21 the documentation and/or other materials provided with the
22 distribution.
23
24 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
25 ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
26 WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
27 DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
28 ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
29 (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
30 LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
31 ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
32 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
33 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34
35 *******************************************************************************/
36
37 /**
38  * @file   al_hal_udma_debug.c
39  *
40  * @brief  Universal DMA HAL driver for debug
41  *
42  */
43
44 #define DEBUG
45
46 #include <al_hal_common.h>
47 #include <al_hal_udma_regs.h>
48 #include <al_hal_udma_debug.h>
49
50 static void al_udma_regs_m2s_axi_print(struct al_udma *udma)
51 {
52         al_dbg("M2S AXI regs:\n");
53         AL_UDMA_PRINT_REG(udma, " ", "\n", m2s, axi_m2s, comp_wr_cfg_1);
54         AL_UDMA_PRINT_REG(udma, " ", "\n", m2s, axi_m2s, comp_wr_cfg_2);
55         AL_UDMA_PRINT_REG(udma, " ", "\n", m2s, axi_m2s, data_rd_cfg_1);
56         AL_UDMA_PRINT_REG(udma, " ", "\n", m2s, axi_m2s, data_rd_cfg_2);
57         AL_UDMA_PRINT_REG(udma, " ", "\n", m2s, axi_m2s, desc_rd_cfg_1);
58         AL_UDMA_PRINT_REG(udma, " ", "\n", m2s, axi_m2s, desc_rd_cfg_2);
59         AL_UDMA_PRINT_REG(udma, " ", "\n", m2s, axi_m2s, data_rd_cfg);
60         AL_UDMA_PRINT_REG(udma, " ", "\n", m2s, axi_m2s, desc_rd_cfg_3);
61
62         AL_UDMA_PRINT_REG(udma, " ", "\n", m2s, axi_m2s, desc_wr_cfg_1);
63         AL_UDMA_PRINT_REG_FIELD(udma, "  ", "\n", "%d", m2s, axi_m2s,
64                         desc_wr_cfg_1,
65                         max_axi_beats,
66                         UDMA_AXI_M2S_DESC_WR_CFG_1_MAX_AXI_BEATS);
67         AL_UDMA_PRINT_REG_FIELD(udma, "  ", "\n", "%d", m2s, axi_m2s,
68                         desc_wr_cfg_1,
69                         min_axi_beats,
70                         UDMA_AXI_M2S_DESC_WR_CFG_1_MIN_AXI_BEATS);
71
72         AL_UDMA_PRINT_REG(udma, " ", "\n", m2s, axi_m2s, ostand_cfg);
73 }
74
75 static void al_udma_regs_m2s_general_print(struct al_udma *udma)
76 {
77         al_dbg("M2S general regs:\n");
78
79         AL_UDMA_PRINT_REG(udma, " ", "\n", m2s, m2s, state);
80         AL_UDMA_PRINT_REG_FIELD(udma, "  ", "\n", "%d", m2s, m2s, state,
81                         comp_ctrl,
82                         UDMA_M2S_STATE_COMP_CTRL);
83         AL_UDMA_PRINT_REG_FIELD(udma, "  ", "\n", "%d", m2s, m2s, state,
84                         stream_if,
85                         UDMA_M2S_STATE_STREAM_IF);
86         AL_UDMA_PRINT_REG_FIELD(udma, "  ", "\n", "%d", m2s, m2s, state,
87                         rd_ctrl,
88                         UDMA_M2S_STATE_DATA_RD_CTRL);
89         AL_UDMA_PRINT_REG_FIELD(udma, "  ", "\n", "%d", m2s, m2s, state,
90                         desc_pref,
91                         UDMA_M2S_STATE_DESC_PREF);
92
93         AL_UDMA_PRINT_REG(udma, " ", "\n", m2s, m2s, err_log_mask);
94         AL_UDMA_PRINT_REG(udma, " ", "\n", m2s, m2s, log_0);
95         AL_UDMA_PRINT_REG(udma, " ", "\n", m2s, m2s, log_1);
96         AL_UDMA_PRINT_REG(udma, " ", "\n", m2s, m2s, log_2);
97         AL_UDMA_PRINT_REG(udma, " ", "\n", m2s, m2s, log_3);
98         AL_UDMA_PRINT_REG(udma, " ", "\n", m2s, m2s, data_fifo_status);
99         AL_UDMA_PRINT_REG(udma, " ", "\n", m2s, m2s, header_fifo_status);
100         AL_UDMA_PRINT_REG(udma, " ", "\n", m2s, m2s, unack_fifo_status);
101         AL_UDMA_PRINT_REG(udma, " ", "\n", m2s, m2s, check_en);
102         AL_UDMA_PRINT_REG(udma, " ", "\n", m2s, m2s, fifo_en);
103         AL_UDMA_PRINT_REG(udma, " ", "\n", m2s, m2s, cfg_len);
104         AL_UDMA_PRINT_REG(udma, " ", "\n", m2s, m2s, stream_cfg);
105 }
106
107 static void al_udma_regs_m2s_rd_print(struct al_udma *udma)
108 {
109         al_dbg("M2S read regs:\n");
110         AL_UDMA_PRINT_REG(udma, " ", "\n", m2s, m2s_rd, desc_pref_cfg_1);
111         AL_UDMA_PRINT_REG(udma, " ", "\n", m2s, m2s_rd, desc_pref_cfg_2);
112
113         AL_UDMA_PRINT_REG(udma, " ", "\n", m2s, m2s_rd, desc_pref_cfg_3);
114         AL_UDMA_PRINT_REG_FIELD(udma, "  ", "\n", "%d", m2s, m2s_rd,
115                         desc_pref_cfg_3,
116                         min_burst_below_thr,
117                         UDMA_M2S_RD_DESC_PREF_CFG_3_MIN_BURST_BELOW_THR);
118         AL_UDMA_PRINT_REG_FIELD(udma, "  ", "\n", "%d", m2s, m2s_rd,
119                         desc_pref_cfg_3,
120                         min_burst_above_thr,
121                         UDMA_M2S_RD_DESC_PREF_CFG_3_MIN_BURST_ABOVE_THR);
122         AL_UDMA_PRINT_REG_FIELD(udma, "  ", "\n", "%d", m2s, m2s_rd,
123                         desc_pref_cfg_3,
124                         pref_thr,
125                         UDMA_M2S_RD_DESC_PREF_CFG_3_PREF_THR);
126
127         AL_UDMA_PRINT_REG(udma, " ", "\n", m2s, m2s_rd, data_cfg);
128 }
129
130 static void al_udma_regs_m2s_dwrr_print(struct al_udma *udma)
131 {
132         al_dbg("M2S DWRR regs:\n");
133         AL_UDMA_PRINT_REG(udma, " ", "\n", m2s, m2s_dwrr, cfg_sched);
134 }
135
136 static void al_udma_regs_m2s_rate_limiter_print(struct al_udma *udma)
137 {
138         al_dbg("M2S rate limiter regs:\n");
139         AL_UDMA_PRINT_REG(udma, " ", "\n", m2s, m2s_rate_limiter, gen_cfg);
140 }
141
142 static void al_udma_regs_m2s_stream_rate_limiter_print(struct al_udma *udma)
143 {
144         al_dbg("M2S stream rate limiter regs:\n");
145
146         AL_UDMA_PRINT_REG(udma, " ", "\n", m2s, m2s_stream_rate_limiter,
147                         rlimit.cfg_1s);
148         AL_UDMA_PRINT_REG(udma, " ", "\n", m2s, m2s_stream_rate_limiter,
149                         rlimit.cfg_cycle);
150         AL_UDMA_PRINT_REG(udma, " ", "\n", m2s, m2s_stream_rate_limiter,
151                         rlimit.cfg_token_size_1);
152         AL_UDMA_PRINT_REG(udma, " ", "\n", m2s, m2s_stream_rate_limiter,
153                         rlimit.cfg_token_size_2);
154         AL_UDMA_PRINT_REG(udma, " ", "\n", m2s, m2s_stream_rate_limiter,
155                         rlimit.mask);
156 }
157
158 static void al_udma_regs_m2s_comp_print(struct al_udma *udma)
159 {
160         al_dbg("M2S completion regs:\n");
161
162         AL_UDMA_PRINT_REG(udma, " ", "\n", m2s, m2s_comp, cfg_1c);
163
164         AL_UDMA_PRINT_REG_FIELD(udma, "  ", "\n", "%d", m2s, m2s_comp, cfg_1c,
165                         comp_fifo_depth,
166                         UDMA_M2S_COMP_CFG_1C_COMP_FIFO_DEPTH);
167         AL_UDMA_PRINT_REG_FIELD(udma, "  ", "\n", "%d", m2s, m2s_comp, cfg_1c,
168                         unack_fifo_depth,
169                         UDMA_M2S_COMP_CFG_1C_UNACK_FIFO_DEPTH);
170         AL_UDMA_PRINT_REG_BIT(udma, "  ", "\n", m2s, m2s_comp, cfg_1c,
171                         q_promotion,
172                         UDMA_M2S_COMP_CFG_1C_Q_PROMOTION);
173         AL_UDMA_PRINT_REG_BIT(udma, "  ", "\n", m2s, m2s_comp, cfg_1c,
174                         force_rr,
175                         UDMA_M2S_COMP_CFG_1C_FORCE_RR);
176         AL_UDMA_PRINT_REG_FIELD(udma, "  ", "\n", "%d", m2s, m2s_comp, cfg_1c,
177                         q_free_min,
178                         UDMA_M2S_COMP_CFG_1C_Q_FREE_MIN);
179
180         AL_UDMA_PRINT_REG(udma, " ", "\n", m2s, m2s_comp, cfg_coal);
181         AL_UDMA_PRINT_REG(udma, " ", "\n", m2s, m2s_comp, cfg_application_ack);
182 }
183
184 static void al_udma_regs_m2s_stat_print(struct al_udma *udma)
185 {
186         al_dbg("M2S statistics regs:\n");
187         AL_UDMA_PRINT_REG(udma, " ", "\n", m2s, m2s_stat, cfg_st);
188         AL_UDMA_PRINT_REG(udma, " ", "\n", m2s, m2s_stat, tx_pkt);
189         AL_UDMA_PRINT_REG(udma, " ", "\n", m2s, m2s_stat, tx_bytes_low);
190         AL_UDMA_PRINT_REG(udma, " ", "\n", m2s, m2s_stat, tx_bytes_high);
191         AL_UDMA_PRINT_REG(udma, " ", "\n", m2s, m2s_stat, prefed_desc);
192         AL_UDMA_PRINT_REG(udma, " ", "\n", m2s, m2s_stat, comp_pkt);
193         AL_UDMA_PRINT_REG(udma, " ", "\n", m2s, m2s_stat, comp_desc);
194         AL_UDMA_PRINT_REG(udma, " ", "\n", m2s, m2s_stat, ack_pkts);
195 }
196
197 static void al_udma_regs_m2s_feature_print(struct al_udma *udma)
198 {
199         al_dbg("M2S feature regs:\n");
200         AL_UDMA_PRINT_REG(udma, " ", "\n", m2s, m2s_feature, reg_1);
201         AL_UDMA_PRINT_REG(udma, " ", "\n", m2s, m2s_feature, reg_3);
202         AL_UDMA_PRINT_REG(udma, " ", "\n", m2s, m2s_feature, reg_4);
203         AL_UDMA_PRINT_REG(udma, " ", "\n", m2s, m2s_feature, reg_5);
204 }
205
206 static void al_udma_regs_m2s_q_print(struct al_udma *udma, uint32_t qid)
207 {
208         al_dbg("M2S Q[%d] status regs:\n", qid);
209         al_reg_write32(&udma->udma_regs->m2s.m2s.indirect_ctrl, qid);
210         AL_UDMA_PRINT_REG(udma, " ", "\n", m2s, m2s, sel_pref_fifo_status);
211         AL_UDMA_PRINT_REG(udma, " ", "\n", m2s, m2s, sel_comp_fifo_status);
212         AL_UDMA_PRINT_REG(udma, " ", "\n", m2s, m2s, sel_rate_limit_status);
213         AL_UDMA_PRINT_REG(udma, " ", "\n", m2s, m2s, sel_dwrr_status);
214
215         al_dbg("M2S Q[%d] regs:\n", qid);
216         AL_UDMA_PRINT_REG(udma, " ", "\n", m2s, m2s_q[qid], cfg);
217         AL_UDMA_PRINT_REG(udma, " ", "\n", m2s, m2s_q[qid], status);
218         AL_UDMA_PRINT_REG(udma, " ", "\n", m2s, m2s_q[qid], tdrbp_low);
219         AL_UDMA_PRINT_REG(udma, " ", "\n", m2s, m2s_q[qid], tdrbp_high);
220         AL_UDMA_PRINT_REG(udma, " ", "\n", m2s, m2s_q[qid], tdrl);
221         AL_UDMA_PRINT_REG(udma, " ", "\n", m2s, m2s_q[qid], tdrhp);
222         AL_UDMA_PRINT_REG(udma, " ", "\n", m2s, m2s_q[qid], tdrtp);
223         AL_UDMA_PRINT_REG(udma, " ", "\n", m2s, m2s_q[qid], tdcp);
224         AL_UDMA_PRINT_REG(udma, " ", "\n", m2s, m2s_q[qid], tcrbp_low);
225         AL_UDMA_PRINT_REG(udma, " ", "\n", m2s, m2s_q[qid], tcrbp_high);
226         AL_UDMA_PRINT_REG(udma, " ", "\n", m2s, m2s_q[qid], tcrhp);
227
228         AL_UDMA_PRINT_REG(udma, " ", "\n", m2s, m2s_q[qid], rlimit.cfg_1s);
229         AL_UDMA_PRINT_REG(udma, " ", "\n", m2s, m2s_q[qid], rlimit.cfg_cycle);
230         AL_UDMA_PRINT_REG(udma, " ", "\n", m2s, m2s_q[qid],
231                         rlimit.cfg_token_size_1);
232         AL_UDMA_PRINT_REG(udma, " ", "\n", m2s, m2s_q[qid],
233                         rlimit.cfg_token_size_2);
234         AL_UDMA_PRINT_REG(udma, " ", "\n", m2s, m2s_q[qid], rlimit.mask);
235
236         AL_UDMA_PRINT_REG(udma, " ", "\n", m2s, m2s_q[qid], dwrr_cfg_1);
237         AL_UDMA_PRINT_REG(udma, " ", "\n", m2s, m2s_q[qid], dwrr_cfg_2);
238         AL_UDMA_PRINT_REG(udma, " ", "\n", m2s, m2s_q[qid], dwrr_cfg_3);
239         AL_UDMA_PRINT_REG(udma, " ", "\n", m2s, m2s_q[qid], comp_cfg);
240         AL_UDMA_PRINT_REG(udma, " ", "\n", m2s, m2s_q[qid], q_tx_pkt);
241 }
242
243 static void al_udma_regs_s2m_axi_print(struct al_udma *udma)
244 {
245         al_dbg("S2M AXI regs:\n");
246         AL_UDMA_PRINT_REG(udma, " ", "\n", s2m, axi_s2m, data_wr_cfg_1);
247         AL_UDMA_PRINT_REG(udma, " ", "\n", s2m, axi_s2m, data_wr_cfg_2);
248         AL_UDMA_PRINT_REG(udma, " ", "\n", s2m, axi_s2m, desc_rd_cfg_4);
249         AL_UDMA_PRINT_REG(udma, " ", "\n", s2m, axi_s2m, desc_rd_cfg_5);
250         AL_UDMA_PRINT_REG(udma, " ", "\n", s2m, axi_s2m, comp_wr_cfg_1);
251         AL_UDMA_PRINT_REG(udma, " ", "\n", s2m, axi_s2m, comp_wr_cfg_2);
252         AL_UDMA_PRINT_REG(udma, " ", "\n", s2m, axi_s2m, data_wr_cfg);
253         AL_UDMA_PRINT_REG(udma, " ", "\n", s2m, axi_s2m, desc_rd_cfg_3);
254         AL_UDMA_PRINT_REG(udma, " ", "\n", s2m, axi_s2m, desc_wr_cfg_1);
255         AL_UDMA_PRINT_REG(udma, " ", "\n", s2m, axi_s2m, ostand_cfg_rd);
256         AL_UDMA_PRINT_REG(udma, " ", "\n", s2m, axi_s2m, ostand_cfg_wr);
257 }
258
259 static void al_udma_regs_s2m_general_print(struct al_udma *udma)
260 {
261         al_dbg("S2M general regs:\n");
262         AL_UDMA_PRINT_REG(udma, " ", "\n", s2m, s2m, state);
263         AL_UDMA_PRINT_REG(udma, " ", "\n", s2m, s2m, err_log_mask);
264         AL_UDMA_PRINT_REG(udma, " ", "\n", s2m, s2m, log_0);
265         AL_UDMA_PRINT_REG(udma, " ", "\n", s2m, s2m, log_1);
266         AL_UDMA_PRINT_REG(udma, " ", "\n", s2m, s2m, log_2);
267         AL_UDMA_PRINT_REG(udma, " ", "\n", s2m, s2m, log_3);
268         AL_UDMA_PRINT_REG(udma, " ", "\n", s2m, s2m, s_data_fifo_status);
269         AL_UDMA_PRINT_REG(udma, " ", "\n", s2m, s2m, s_header_fifo_status);
270         AL_UDMA_PRINT_REG(udma, " ", "\n", s2m, s2m, axi_data_fifo_status);
271         AL_UDMA_PRINT_REG(udma, " ", "\n", s2m, s2m, unack_fifo_status);
272         AL_UDMA_PRINT_REG(udma, " ", "\n", s2m, s2m, check_en);
273         AL_UDMA_PRINT_REG(udma, " ", "\n", s2m, s2m, fifo_en);
274         AL_UDMA_PRINT_REG(udma, " ", "\n", s2m, s2m, stream_cfg);
275 }
276
277 static void al_udma_regs_s2m_rd_print(struct al_udma *udma)
278 {
279         al_dbg("S2M read regs:\n");
280         AL_UDMA_PRINT_REG(udma, " ", "\n", s2m, s2m_rd, desc_pref_cfg_1);
281         AL_UDMA_PRINT_REG(udma, " ", "\n", s2m, s2m_rd, desc_pref_cfg_2);
282         AL_UDMA_PRINT_REG(udma, " ", "\n", s2m, s2m_rd, desc_pref_cfg_3);
283         AL_UDMA_PRINT_REG(udma, " ", "\n", s2m, s2m_rd, desc_pref_cfg_4);
284 }
285
286 static void al_udma_regs_s2m_wr_print(struct al_udma *udma)
287 {
288         al_dbg("S2M write regs:\n");
289         AL_UDMA_PRINT_REG(udma, " ", "\n", s2m, s2m_wr, data_cfg_1);
290         AL_UDMA_PRINT_REG(udma, " ", "\n", s2m, s2m_wr, data_cfg_1);
291 }
292
293 static void al_udma_regs_s2m_comp_print(struct al_udma *udma)
294 {
295         al_dbg("S2M completion regs:\n");
296         AL_UDMA_PRINT_REG(udma, " ", "\n", s2m, s2m_comp, cfg_1c);
297         AL_UDMA_PRINT_REG(udma, " ", "\n", s2m, s2m_comp, cfg_2c);
298         AL_UDMA_PRINT_REG(udma, " ", "\n", s2m, s2m_comp, cfg_application_ack);
299 }
300
301 static void al_udma_regs_s2m_stat_print(struct al_udma *udma)
302 {
303         al_dbg("S2M statistics regs:\n");
304         AL_UDMA_PRINT_REG(udma, " ", "\n", s2m, s2m_stat, drop_pkt);
305         AL_UDMA_PRINT_REG(udma, " ", "\n", s2m, s2m_stat, rx_bytes_low);
306         AL_UDMA_PRINT_REG(udma, " ", "\n", s2m, s2m_stat, rx_bytes_high);
307         AL_UDMA_PRINT_REG(udma, " ", "\n", s2m, s2m_stat, prefed_desc);
308         AL_UDMA_PRINT_REG(udma, " ", "\n", s2m, s2m_stat, comp_pkt);
309         AL_UDMA_PRINT_REG(udma, " ", "\n", s2m, s2m_stat, comp_desc);
310         AL_UDMA_PRINT_REG(udma, " ", "\n", s2m, s2m_stat, ack_pkts);
311 }
312
313 static void al_udma_regs_s2m_feature_print(struct al_udma *udma)
314 {
315         al_dbg("S2M feature regs:\n");
316         AL_UDMA_PRINT_REG(udma, " ", "\n", s2m, s2m_feature, reg_1);
317         AL_UDMA_PRINT_REG(udma, " ", "\n", s2m, s2m_feature, reg_3);
318         AL_UDMA_PRINT_REG(udma, " ", "\n", s2m, s2m_feature, reg_4);
319         AL_UDMA_PRINT_REG(udma, " ", "\n", s2m, s2m_feature, reg_5);
320         AL_UDMA_PRINT_REG(udma, " ", "\n", s2m, s2m_feature, reg_6);
321 }
322
323 static void al_udma_regs_s2m_q_print(struct al_udma *udma, uint32_t qid)
324 {
325         al_dbg("S2M Q[%d] status regs:\n", qid);
326         al_reg_write32(&udma->udma_regs->m2s.m2s.indirect_ctrl, qid);
327         AL_UDMA_PRINT_REG(udma, " ", "\n", s2m, s2m, sel_pref_fifo_status);
328         AL_UDMA_PRINT_REG(udma, " ", "\n", s2m, s2m, sel_comp_fifo_status);
329
330         al_dbg("S2M Q[%d] regs:\n", qid);
331         AL_UDMA_PRINT_REG(udma, " ", "\n", s2m, s2m_q[qid], cfg);
332         AL_UDMA_PRINT_REG(udma, " ", "\n", s2m, s2m_q[qid], status);
333         AL_UDMA_PRINT_REG(udma, " ", "\n", s2m, s2m_q[qid], rdrbp_low);
334         AL_UDMA_PRINT_REG(udma, " ", "\n", s2m, s2m_q[qid], rdrbp_high);
335         AL_UDMA_PRINT_REG(udma, " ", "\n", s2m, s2m_q[qid], rdrl);
336         AL_UDMA_PRINT_REG(udma, " ", "\n", s2m, s2m_q[qid], rdrhp);
337         AL_UDMA_PRINT_REG(udma, " ", "\n", s2m, s2m_q[qid], rdrtp);
338         AL_UDMA_PRINT_REG(udma, " ", "\n", s2m, s2m_q[qid], rdcp);
339         AL_UDMA_PRINT_REG(udma, " ", "\n", s2m, s2m_q[qid], rcrbp_low);
340         AL_UDMA_PRINT_REG(udma, " ", "\n", s2m, s2m_q[qid], rcrbp_high);
341         AL_UDMA_PRINT_REG(udma, " ", "\n", s2m, s2m_q[qid], rcrhp);
342         AL_UDMA_PRINT_REG(udma, " ", "\n", s2m, s2m_q[qid], rcrhp_internal);
343         AL_UDMA_PRINT_REG(udma, " ", "\n", s2m, s2m_q[qid], comp_cfg);
344         AL_UDMA_PRINT_REG(udma, " ", "\n", s2m, s2m_q[qid], comp_cfg_2);
345         AL_UDMA_PRINT_REG(udma, " ", "\n", s2m, s2m_q[qid], pkt_cfg);
346         AL_UDMA_PRINT_REG(udma, " ", "\n", s2m, s2m_q[qid], qos_cfg);
347         AL_UDMA_PRINT_REG(udma, " ", "\n", s2m, s2m_q[qid], q_rx_pkt);
348 }
349
350 void al_udma_regs_print(struct al_udma *udma, unsigned int mask)
351 {
352         uint32_t i;
353
354         if (!udma)
355                 return;
356
357         if (udma->type == UDMA_TX) {
358                 if (mask & AL_UDMA_DEBUG_AXI)
359                         al_udma_regs_m2s_axi_print(udma);
360                 if (mask & AL_UDMA_DEBUG_GENERAL)
361                         al_udma_regs_m2s_general_print(udma);
362                 if (mask & AL_UDMA_DEBUG_READ)
363                         al_udma_regs_m2s_rd_print(udma);
364                 if (mask & AL_UDMA_DEBUG_DWRR)
365                         al_udma_regs_m2s_dwrr_print(udma);
366                 if (mask & AL_UDMA_DEBUG_RATE_LIMITER)
367                         al_udma_regs_m2s_rate_limiter_print(udma);
368                 if (mask & AL_UDMA_DEBUG_STREAM_RATE_LIMITER)
369                         al_udma_regs_m2s_stream_rate_limiter_print(udma);
370                 if (mask & AL_UDMA_DEBUG_COMP)
371                         al_udma_regs_m2s_comp_print(udma);
372                 if (mask & AL_UDMA_DEBUG_STAT)
373                         al_udma_regs_m2s_stat_print(udma);
374                 if (mask & AL_UDMA_DEBUG_FEATURE)
375                         al_udma_regs_m2s_feature_print(udma);
376                 for (i = 0; i < DMA_MAX_Q; i++) {
377                         if (mask & AL_UDMA_DEBUG_QUEUE(i))
378                                 al_udma_regs_m2s_q_print(udma, i);
379                 }
380         } else {
381                 if (mask & AL_UDMA_DEBUG_AXI)
382                         al_udma_regs_s2m_axi_print(udma);
383                 if (mask & AL_UDMA_DEBUG_GENERAL)
384                         al_udma_regs_s2m_general_print(udma);
385                 if (mask & AL_UDMA_DEBUG_READ)
386                         al_udma_regs_s2m_rd_print(udma);
387                 if (mask & AL_UDMA_DEBUG_WRITE)
388                         al_udma_regs_s2m_wr_print(udma);
389                 if (mask & AL_UDMA_DEBUG_COMP)
390                         al_udma_regs_s2m_comp_print(udma);
391                 if (mask & AL_UDMA_DEBUG_STAT)
392                         al_udma_regs_s2m_stat_print(udma);
393                 if (mask & AL_UDMA_DEBUG_FEATURE)
394                         al_udma_regs_s2m_feature_print(udma);
395                 for (i = 0; i < DMA_MAX_Q; i++) {
396                         if (mask & AL_UDMA_DEBUG_QUEUE(i))
397                                 al_udma_regs_s2m_q_print(udma, i);
398                 }
399         }
400 }
401
402 void al_udma_q_struct_print(struct al_udma *udma, uint32_t qid)
403 {
404         struct al_udma_q *queue;
405
406         if (!udma)
407                 return;
408
409         if (qid >= DMA_MAX_Q)
410                 return;
411
412         queue = &udma->udma_q[qid];
413
414         al_dbg("Q[%d] struct:\n", qid);
415         al_dbg(" size_mask = 0x%08x\n", (uint32_t)queue->size_mask);
416         al_dbg(" q_regs = %p\n", queue->q_regs);
417         al_dbg(" desc_base_ptr = %p\n", queue->desc_base_ptr);
418         al_dbg(" next_desc_idx = %d\n", (uint16_t)queue->next_desc_idx);
419         al_dbg(" desc_ring_id = %d\n", (uint32_t)queue->desc_ring_id);
420         al_dbg(" cdesc_base_ptr = %p\n", queue->cdesc_base_ptr);
421         al_dbg(" cdesc_size = %d\n", (uint32_t)queue->cdesc_size);
422         al_dbg(" next_cdesc_idx = %d\n", (uint16_t)queue->next_cdesc_idx);
423         al_dbg(" end_cdesc_ptr = %p\n", queue->end_cdesc_ptr);
424         al_dbg(" comp_head_idx = %d\n", (uint16_t)queue->comp_head_idx);
425         al_dbg(" comp_head_ptr = %p\n", queue->comp_head_ptr);
426         al_dbg(" pkt_crnt_descs = %d\n", (uint32_t)queue->pkt_crnt_descs);
427         al_dbg(" comp_ring_id = %d\n", (uint32_t)queue->comp_ring_id);
428         al_dbg(" desc_phy_base = 0x%016jx\n", (uintmax_t)queue->desc_phy_base);
429         al_dbg(" cdesc_phy_base = 0x%016jx\n",
430                         (uintmax_t)queue->cdesc_phy_base);
431         al_dbg(" flags = 0x%08x\n", (uint32_t)queue->flags);
432         al_dbg(" size = %d\n", (uint32_t)queue->size);
433         al_dbg(" status = %d\n", (uint32_t)queue->status);
434         al_dbg(" udma = %p\n", queue->udma);
435         al_dbg(" qid = %d\n", (uint32_t)queue->qid);
436 }
437
438 void al_udma_ring_print(struct al_udma *udma, uint32_t qid,
439                 enum al_udma_ring_type rtype)
440 {
441         struct al_udma_q *queue;
442         uint32_t desc_size;
443         void *base_ptr;
444         uint32_t i;
445
446         if (!udma)
447                 return;
448
449         if (qid >= DMA_MAX_Q)
450                 return;
451
452         queue = &udma->udma_q[qid];
453         if (rtype == AL_RING_SUBMISSION) {
454                 base_ptr = queue->desc_base_ptr;
455                 desc_size = sizeof(union al_udma_desc);
456                 if (base_ptr)
457                         al_dbg("Q[%d] submission ring pointers:\n", qid);
458                 else {
459                         al_dbg("Q[%d] submission ring is not allocated\n", qid);
460                         return;
461                 }
462         } else {
463                 base_ptr = queue->cdesc_base_ptr;
464                 desc_size = queue->cdesc_size;
465                 if (base_ptr)
466                         al_dbg("Q[%d] completion ring pointers:\n", qid);
467                 else {
468                         al_dbg("Q[%d] completion ring is not allocated\n", qid);
469                         return;
470                 }
471         }
472
473         for (i = 0; i < queue->size; i++) {
474                 uint32_t *curr_addr = (void*)((uintptr_t)base_ptr + i * desc_size);
475                 if (desc_size == 16)
476                         al_dbg("[%04d](%p): %08x %08x %08x %08x\n",
477                                         i,
478                                         curr_addr,
479                                         (uint32_t)*curr_addr,
480                                         (uint32_t)*(curr_addr+1),
481                                         (uint32_t)*(curr_addr+2),
482                                         (uint32_t)*(curr_addr+3));
483                 else if (desc_size == 8)
484                         al_dbg("[%04d](%p): %08x %08x\n",
485                                         i,
486                                         curr_addr,
487                                         (uint32_t)*curr_addr,
488                                         (uint32_t)*(curr_addr+1));
489                 else if (desc_size == 4)
490                         al_dbg("[%04d](%p): %08x\n",
491                                         i,
492                                         curr_addr,
493                                         (uint32_t)*curr_addr);
494                 else
495                         break;
496         }
497 }