1 // SPDX-License-Identifier: BSD-3-Clause
2 //
3 // Copyright(c) 2021 Intel Corporation. All rights reserved.
4 //
5 // Author: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
6 // Jaska Uimonen <jaska.uimonen@linux.intel.com>
7
8 #include "aconfig.h"
9 #include <stdio.h>
10 #include <stdint.h>
11 #include <alsa/global.h>
12 #include "dmic-debug.h"
13
14 #ifdef NHLT_DEBUG
15
16 /* print blob as bytes hex string like: 0x11,0xff,0xff,0xff etc. */
dmic_print_bytes_as_hex(uint8_t *src, size_t size)17 void dmic_print_bytes_as_hex(uint8_t *src, size_t size)
18 {
19 int i, j, lines, remain;
20
21 fprintf(stdout, "printing dmic vendor blob as bytes:\n");
22
23 lines = size / 8;
24 remain = size % 8;
25 for (i = 0; i < lines; i++) {
26 for (j = 0; j < 8; j++) {
27 fprintf(stdout, "0x%02x,", *src);
28 src++;
29 }
30 fprintf(stdout, "\n");
31 }
32 for (i = 0; i < remain; i++) {
33 fprintf(stdout, "0x%02x,", *src);
34 src++;
35 }
36
37 fprintf(stdout, "\n");
38 }
39
40 /* print blob as 32 bit integer hex string like: 0xffffffff,0x00000010 etc. */
dmic_print_integers_as_hex(uint32_t *src, size_t size)41 void dmic_print_integers_as_hex(uint32_t *src, size_t size)
42 {
43 int i, j, lines, remain;
44
45 fprintf(stdout, "printing dmic vendor blob as integers:\n");
46
47 lines = size / 8;
48 remain = size % 8;
49 for (i = 0; i < lines; i++) {
50 for (j = 0; j < 8; j++) {
51 fprintf(stdout, "0x%08x,", *src);
52 src++;
53 }
54 fprintf(stdout, "\n");
55 }
56 for (i = 0; i < remain; i++) {
57 fprintf(stdout, "0x%08x,", *src);
58 src++;
59 }
60
61 fprintf(stdout, "\n");
62 }
63
dmic_print_internal(struct intel_dmic_params *dmic)64 void dmic_print_internal(struct intel_dmic_params *dmic)
65 {
66 int i, j, line, lines, remain;
67
68 fprintf(stdout, "printing dmic nhlt internal data:\n");
69
70 /* top level struct */
71 fprintf(stdout, "gateway attributes: 0x%08x\n", dmic->dmic_blob.gateway_attributes);
72
73 fprintf(stdout, "ts_group: 0x%08x 0x%08x 0x%08x 0x%08x\n", dmic->dmic_blob.ts_group[0],
74 dmic->dmic_blob.ts_group[1], dmic->dmic_blob.ts_group[2],
75 dmic->dmic_blob.ts_group[3]);
76
77 fprintf(stdout, "clock_on_delay: 0x%08x\n", dmic->dmic_blob.clock_on_delay);
78
79 fprintf(stdout, "channel_ctrl_mask: 0x%08x\n", dmic->dmic_blob.channel_ctrl_mask);
80
81 fprintf(stdout, "chan_ctrl_cfg: 0x%08x 0x%08x\n", dmic->dmic_blob.chan_ctrl_cfg[0],
82 dmic->dmic_blob.chan_ctrl_cfg[1]);
83
84 fprintf(stdout, "channel_pdm_mask: 0x%08x\n", dmic->dmic_blob.channel_pdm_mask);
85
86 /* first pdm struct */
87 fprintf(stdout, "pdm_ctrl_cfg 0\n");
88 fprintf(stdout, "cic_control: 0x%08x\n", dmic->dmic_blob_pdm[0].cic_control);
89 fprintf(stdout, "cic_config: 0x%08x\n", dmic->dmic_blob_pdm[0].cic_config);
90 fprintf(stdout, "mic_control: 0x%08x\n", dmic->dmic_blob_pdm[0].mic_control);
91 fprintf(stdout, "pdmsm: 0x%08x\n", dmic->dmic_blob_pdm[0].pdmsm);
92 fprintf(stdout, "reuse_fir_from_pdm: 0x%08x\n", dmic->dmic_blob_pdm[0].reuse_fir_from_pdm);
93
94 /* first pdm struct, first fir */
95 fprintf(stdout, "fir_config 0\n");
96 fprintf(stdout, "fir_control: 0x%08x\n", dmic->dmic_blob_fir[0][0].fir_control);
97 fprintf(stdout, "fir_config: 0x%08x\n", dmic->dmic_blob_fir[0][0].fir_config);
98 fprintf(stdout, "dc_offset_left: 0x%08x\n", dmic->dmic_blob_fir[0][0].dc_offset_left);
99 fprintf(stdout, "dc_offset_right: 0x%08x\n", dmic->dmic_blob_fir[0][0].dc_offset_right);
100 fprintf(stdout, "out_gain_left: 0x%08x\n", dmic->dmic_blob_fir[0][0].out_gain_left);
101 fprintf(stdout, "out_gain_right: 0x%08x\n", dmic->dmic_blob_fir[0][0].out_gain_right);
102
103 /* first pdm struct, second fir */
104 fprintf(stdout, "fir_config 1\n");
105 fprintf(stdout, "fir_control: 0x%08x\n", dmic->dmic_blob_fir[0][1].fir_control);
106 fprintf(stdout, "fir_config: 0x%08x\n", dmic->dmic_blob_fir[0][1].fir_config);
107 fprintf(stdout, "dc_offset_left: 0x%08x\n", dmic->dmic_blob_fir[0][1].dc_offset_left);
108 fprintf(stdout, "dc_offset_right: 0x%08x\n", dmic->dmic_blob_fir[0][1].dc_offset_right);
109 fprintf(stdout, "out_gain_left: 0x%08x\n", dmic->dmic_blob_fir[0][1].out_gain_left);
110 fprintf(stdout, "out_gain_right: 0x%08x\n", dmic->dmic_blob_fir[0][1].out_gain_right);
111
112 /* first pdm struct, fir coeffs */
113 for (j = 0; j < DMIC_HW_CONTROLLERS; j++) {
114 fprintf(stdout, "fir_coeffs a length %u:\n", dmic->dmic_fir_array.fir_len[0]);
115 lines = dmic->dmic_fir_array.fir_len[0] / 8;
116 remain = dmic->dmic_fir_array.fir_len[0] % 8;
117 for (i = 0; i < lines; i++) {
118 line = i * 8;
119 fprintf(stdout, "%d %d %d %d %d %d %d %d %d\n", i,
120 dmic->dmic_fir_array.fir_coeffs[j][0][line],
121 dmic->dmic_fir_array.fir_coeffs[j][0][line + 1],
122 dmic->dmic_fir_array.fir_coeffs[j][0][line + 2],
123 dmic->dmic_fir_array.fir_coeffs[j][0][line + 3],
124 dmic->dmic_fir_array.fir_coeffs[j][0][line + 4],
125 dmic->dmic_fir_array.fir_coeffs[j][0][line + 5],
126 dmic->dmic_fir_array.fir_coeffs[j][0][line + 6],
127 dmic->dmic_fir_array.fir_coeffs[j][0][line + 7]);
128 }
129 line += 1;
130 for (i = 0; i < remain; i++)
131 fprintf(stdout, "%d ", dmic->dmic_fir_array.fir_coeffs[j][0][line + i]);
132 }
133
134 /* second pdm struct */
135 fprintf(stdout, "pdm_ctrl_cfg 1\n");
136 fprintf(stdout, "cic_control: 0x%08x\n", dmic->dmic_blob_pdm[1].cic_control);
137 fprintf(stdout, "cic_config: 0x%08x\n", dmic->dmic_blob_pdm[1].cic_config);
138 fprintf(stdout, "mic_control: 0x%08x\n", dmic->dmic_blob_pdm[1].mic_control);
139 fprintf(stdout, "pdmsm: 0x%08x\n", dmic->dmic_blob_pdm[1].pdmsm);
140 fprintf(stdout, "reuse_fir_from_pdm: 0x%08x\n", dmic->dmic_blob_pdm[1].reuse_fir_from_pdm);
141
142 /* second pdm struct, first fir */
143 fprintf(stdout, "fir_config 0\n");
144 fprintf(stdout, "fir_control: 0x%08x\n", dmic->dmic_blob_fir[1][0].fir_control);
145 fprintf(stdout, "fir_config: 0x%08x\n", dmic->dmic_blob_fir[1][0].fir_config);
146 fprintf(stdout, "dc_offset_left: 0x%08x\n", dmic->dmic_blob_fir[1][0].dc_offset_left);
147 fprintf(stdout, "dc_offset_right: 0x%08x\n", dmic->dmic_blob_fir[1][0].dc_offset_right);
148 fprintf(stdout, "out_gain_left: 0x%08x\n", dmic->dmic_blob_fir[1][0].out_gain_left);
149 fprintf(stdout, "out_gain_right: 0x%08x\n", dmic->dmic_blob_fir[1][0].out_gain_right);
150
151 /* second pdm struct, second fir */
152 fprintf(stdout, "fir_config 1\n");
153 fprintf(stdout, "fir_control: 0x%08x\n", dmic->dmic_blob_fir[1][1].fir_control);
154 fprintf(stdout, "fir_config: 0x%08x\n", dmic->dmic_blob_fir[1][1].fir_config);
155 fprintf(stdout, "dc_offset_left: 0x%08x\n", dmic->dmic_blob_fir[1][1].dc_offset_left);
156 fprintf(stdout, "dc_offset_right: 0x%08x\n", dmic->dmic_blob_fir[1][1].dc_offset_right);
157 fprintf(stdout, "out_gain_left: 0x%08x\n", dmic->dmic_blob_fir[1][1].out_gain_left);
158 fprintf(stdout, "out_gain_right: 0x%08x\n", dmic->dmic_blob_fir[1][1].out_gain_right);
159
160 for (j = 0; j < DMIC_HW_CONTROLLERS; j++) {
161 fprintf(stdout, "fir_coeffs b length %u:\n", dmic->dmic_fir_array.fir_len[1]);
162 lines = dmic->dmic_fir_array.fir_len[1] / 8;
163 remain = dmic->dmic_fir_array.fir_len[1] % 8;
164 for (i = 0; i < lines; i++) {
165 line = i * 8;
166 fprintf(stdout, "%d %d %d %d %d %d %d %d %d\n", i,
167 dmic->dmic_fir_array.fir_coeffs[j][1][line],
168 dmic->dmic_fir_array.fir_coeffs[j][1][line + 1],
169 dmic->dmic_fir_array.fir_coeffs[j][1][line + 2],
170 dmic->dmic_fir_array.fir_coeffs[j][1][line + 3],
171 dmic->dmic_fir_array.fir_coeffs[j][1][line + 4],
172 dmic->dmic_fir_array.fir_coeffs[j][1][line + 5],
173 dmic->dmic_fir_array.fir_coeffs[j][1][line + 6],
174 dmic->dmic_fir_array.fir_coeffs[j][1][line + 7]);
175 }
176 line += 1;
177 for (i = 0; i < remain; i++)
178 fprintf(stdout, "%d ", dmic->dmic_fir_array.fir_coeffs[j][1][line + i]);
179 }
180
181 fprintf(stdout, "\n");
182 }
183
184 #else /* NHLT_DEBUG */
dmic_print_bytes_as_hex(uint8_t *src ATTRIBUTE_UNUSED, size_t size ATTRIBUTE_UNUSED)185 void dmic_print_bytes_as_hex(uint8_t *src ATTRIBUTE_UNUSED, size_t size ATTRIBUTE_UNUSED) {}
dmic_print_integers_as_hex(uint32_t *src ATTRIBUTE_UNUSED, size_t size ATTRIBUTE_UNUSED)186 void dmic_print_integers_as_hex(uint32_t *src ATTRIBUTE_UNUSED, size_t size ATTRIBUTE_UNUSED) {}
dmic_print_internal(struct intel_dmic_params *dmic ATTRIBUTE_UNUSED)187 void dmic_print_internal(struct intel_dmic_params *dmic ATTRIBUTE_UNUSED) {}
188 #endif
189