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