1use super::*;
5
6#[derive(Debug, Default)]
7pub struct InfoPePbs {
8 bpip_use: bool,
10 bpip_use_opportunism: bool,
12 bpip_timeout: u32,
14
15 br_loop: u16,
17 br_loop_c: u8,
19
20 ks_loop: u16,
22 ks_loop_c: u8,
24
25 pool_rp: u8,
27 pool_wp: u8,
29 ldg_pt: u8,
31 ldb_pt: u8,
33
34 ks_in_rp: u8,
36 ks_in_wp: u8,
38 ks_out_rp: u8,
40 ks_out_wp: u8,
42 pbs_in_rp: u8,
44 pbs_in_wp: u8,
46
47 ipip_flush_last_pbs_in_loop: u16,
49 seq_bpip_waiting_batch_cnt: u32,
51 seq_bpip_batch_filling_cnt: [u32; 16],
53
54 seq_ld_ack_cnt: u32,
56
57 seq_cmux_not_full_batch_cnt: u32,
59
60 seq_bpip_batch_cnt: u32,
62 seq_bpip_batch_flush_cnt: u32,
64 seq_bpip_batch_timeout_cnt: u32,
66
67 seq_ipip_flush_cnt: u32,
69 ldb_rcp_dur: u32,
71 ldg_req_dur: u32,
73 ldg_rcp_dur: u32,
75 mmacc_sxt_rcp_dur: u32,
77
78 mmacc_sxt_req_dur: u32,
80 mmacc_sxt_cmd_wait_b_dur: u32,
82
83 pep_inst_cnt: u32,
85 pep_ack_cnt: u32,
87
88 load_bsk_rcp_dur: [u32; 16],
90 load_ksk_rcp_dur: [u32; 16],
92
93 bskif_req_br_loop_rp: u16,
95 bskif_req_br_loop_wp: u16,
97 bskif_req_prf_br_loop: u16,
99 bskif_req_parity: u8,
101 bskif_req_assigned: u8,
103}
104
105impl FromRtl for InfoPePbs {
106 fn from_rtl(ffi_hw: &mut ffi::HpuHw, regmap: &FlatRegmap) -> Self {
107 let mut infos = Self::default();
110 infos.update(ffi_hw, regmap);
111 infos
112 }
113}
114
115impl InfoPePbs {
117 pub fn update(&mut self, ffi_hw: &mut ffi::HpuHw, regmap: &FlatRegmap) {
118 self.update_bpip(ffi_hw, regmap);
119 self.update_loop(ffi_hw, regmap);
120 self.update_pointer0(ffi_hw, regmap);
121 self.update_pointer1(ffi_hw, regmap);
122 self.update_pointer2(ffi_hw, regmap);
123 self.update_seq_bpip_waiting_batch_cnt(ffi_hw, regmap);
124 self.update_seq_bpip_batch_filling_cnt(ffi_hw, regmap);
125 self.update_seq_ld_ack_cnt(ffi_hw, regmap);
126 self.update_seq_cmux_not_full_batch_cnt(ffi_hw, regmap);
127 self.update_seq_bpip_batch_cnt(ffi_hw, regmap);
128 self.update_seq_bpip_batch_flush_cnt(ffi_hw, regmap);
129 self.update_seq_bpip_batch_timeout_cnt(ffi_hw, regmap);
130 self.update_seq_ipip_flush_cnt(ffi_hw, regmap);
131 self.update_ldb_rcp_dur(ffi_hw, regmap);
132 self.update_ldg_req_dur(ffi_hw, regmap);
133 self.update_ldg_rcp_dur(ffi_hw, regmap);
134 self.update_mmacc_sxt_rcp_dur(ffi_hw, regmap);
135 self.update_mmacc_sxt_req_dur(ffi_hw, regmap);
136 self.update_mmacc_sxt_cmd_wait_b_dur(ffi_hw, regmap);
137 self.update_pep_inst_cnt(ffi_hw, regmap);
138 self.update_pep_ack_cnt(ffi_hw, regmap);
139 self.update_load_bsk_rcp_dur(ffi_hw, regmap);
140 self.update_load_ksk_rcp_dur(ffi_hw, regmap);
141 self.update_pep_bskif_req_info_0(ffi_hw, regmap);
142 self.update_pep_bskif_req_info_1(ffi_hw, regmap);
143 }
144
145 pub fn update_bpip(&mut self, ffi_hw: &mut ffi::HpuHw, regmap: &FlatRegmap) {
146 let reg_use = regmap
147 .register()
148 .get("bpip::use")
149 .expect("Unknown register, check regmap definition");
150 let val = ffi_hw.read_reg(*reg_use.offset() as u64);
151 let fields = reg_use.as_field(val);
152 self.bpip_use = *fields.get("use_bpip").expect("Unknown field") == 1;
153 self.bpip_use_opportunism = *fields
154 .get("use_opportunism")
155 .expect("Unknown field opportunism")
156 == 1;
157 let reg_timeout = regmap
158 .register()
159 .get("bpip::timeout")
160 .expect("Unknown register, check regmap definition");
161 self.bpip_timeout = ffi_hw.read_reg(*reg_timeout.offset() as u64);
162 }
163
164 pub fn update_loop(&mut self, ffi_hw: &mut ffi::HpuHw, regmap: &FlatRegmap) {
165 let reg = regmap
166 .register()
167 .get("runtime_1in3::pep_cmux_loop")
168 .expect("Unknown register, check regmap definition");
169 let val = ffi_hw.read_reg(*reg.offset() as u64);
170 let fields = reg.as_field(val);
171 self.br_loop = *fields.get("br_loop").expect("Unknown field") as u16;
172 self.br_loop_c = *fields.get("br_loop_c").expect("Unknown field") as u8;
173 self.ks_loop = *fields.get("ks_loop").expect("Unknown field") as u16;
174 self.ks_loop_c = *fields.get("ks_loop_c").expect("Unknown field") as u8;
175 }
176 pub fn update_pointer0(&mut self, ffi_hw: &mut ffi::HpuHw, regmap: &FlatRegmap) {
177 let reg = regmap
178 .register()
179 .get("runtime_1in3::pep_pointer_0")
180 .expect("Unknown register, check regmap definition");
181 let val = ffi_hw.read_reg(*reg.offset() as u64);
182 let fields = reg.as_field(val);
183 self.pool_rp = *fields.get("pool_rp").expect("Unknown field") as u8;
184 self.pool_wp = *fields.get("pool_wp").expect("Unknown field") as u8;
185 self.ldg_pt = *fields.get("ldg_pt").expect("Unknown field") as u8;
186 self.ldb_pt = *fields.get("ldb_pt").expect("Unknown field") as u8;
187 }
188
189 pub fn update_pointer1(&mut self, ffi_hw: &mut ffi::HpuHw, regmap: &FlatRegmap) {
190 let reg = regmap
191 .register()
192 .get("runtime_1in3::pep_pointer_1")
193 .expect("Unknown register, check regmap definition");
194 let val = ffi_hw.read_reg(*reg.offset() as u64);
195 let fields = reg.as_field(val);
196 self.ks_in_rp = *fields.get("ks_in_rp").expect("Unknown field") as u8;
197 self.ks_in_wp = *fields.get("ks_in_wp").expect("Unknown field") as u8;
198 self.ks_out_rp = *fields.get("ks_out_rp").expect("Unknown field") as u8;
199 self.ks_out_wp = *fields.get("ks_out_wp").expect("Unknown field") as u8;
200 }
201
202 pub fn update_pointer2(&mut self, ffi_hw: &mut ffi::HpuHw, regmap: &FlatRegmap) {
203 let reg = regmap
204 .register()
205 .get("runtime_1in3::pep_pointer_2")
206 .expect("Unknown register, check regmap definition");
207 let val = ffi_hw.read_reg(*reg.offset() as u64);
208 let fields = reg.as_field(val);
209 self.pbs_in_rp = *fields.get("pbs_in_rp").expect("Unknown field") as u8;
210 self.pbs_in_wp = *fields.get("pbs_in_wp").expect("Unknown field") as u8;
211 self.ipip_flush_last_pbs_in_loop = *fields
212 .get("ipip_flush_last_pbs_in_loop")
213 .expect("Unknown field") as u16;
214 }
215
216 pub fn update_seq_bpip_waiting_batch_cnt(
217 &mut self,
218 ffi_hw: &mut ffi::HpuHw,
219 regmap: &FlatRegmap,
220 ) {
221 let reg = regmap
222 .register()
223 .get("runtime_1in3::pep_seq_bpip_waiting_batch_cnt")
224 .expect("Unknown register, check regmap definition");
225 self.seq_bpip_waiting_batch_cnt = ffi_hw.read_reg(*reg.offset() as u64);
226 }
227
228 pub fn update_seq_bpip_batch_filling_cnt(
229 &mut self,
230 ffi_hw: &mut ffi::HpuHw,
231 regmap: &FlatRegmap,
232 ) {
233 (1..16).for_each(|i| {
234 let reg_name = format!("runtime_1in3::pep_seq_bpip_batch_filling_cnt_{i}");
235 let reg = regmap
236 .register()
237 .get(®_name)
238 .expect("Unknown register, check regmap definition");
239 self.seq_bpip_batch_filling_cnt[i] = ffi_hw.read_reg(*reg.offset() as u64)
240 });
241 }
242
243 pub fn update_seq_ld_ack_cnt(&mut self, ffi_hw: &mut ffi::HpuHw, regmap: &FlatRegmap) {
244 let reg = regmap
245 .register()
246 .get("runtime_1in3::pep_seq_ld_ack_cnt")
247 .expect("Unknown register, check regmap definition");
248 self.seq_ld_ack_cnt = ffi_hw.read_reg(*reg.offset() as u64);
249 }
250
251 pub fn update_seq_cmux_not_full_batch_cnt(
252 &mut self,
253 ffi_hw: &mut ffi::HpuHw,
254 regmap: &FlatRegmap,
255 ) {
256 let reg = regmap
257 .register()
258 .get("runtime_1in3::pep_seq_cmux_not_full_batch_cnt")
259 .expect("Unknown register, check regmap definition");
260 self.seq_cmux_not_full_batch_cnt = ffi_hw.read_reg(*reg.offset() as u64);
261 }
262
263 pub fn update_seq_bpip_batch_cnt(&mut self, ffi_hw: &mut ffi::HpuHw, regmap: &FlatRegmap) {
264 let reg = regmap
265 .register()
266 .get("runtime_1in3::pep_seq_bpip_batch_cnt")
267 .expect("Unknown register, check regmap definition");
268 self.seq_bpip_batch_cnt = ffi_hw.read_reg(*reg.offset() as u64);
269 }
270 pub fn update_seq_bpip_batch_flush_cnt(
271 &mut self,
272 ffi_hw: &mut ffi::HpuHw,
273 regmap: &FlatRegmap,
274 ) {
275 let reg = regmap
276 .register()
277 .get("runtime_1in3::pep_seq_bpip_batch_flush_cnt")
278 .expect("Unknown register, check regmap definition");
279 self.seq_bpip_batch_flush_cnt = ffi_hw.read_reg(*reg.offset() as u64);
280 }
281 pub fn update_seq_bpip_batch_timeout_cnt(
282 &mut self,
283 ffi_hw: &mut ffi::HpuHw,
284 regmap: &FlatRegmap,
285 ) {
286 let reg = regmap
287 .register()
288 .get("runtime_1in3::pep_seq_bpip_batch_timeout_cnt")
289 .expect("Unknown register, check regmap definition");
290 self.seq_bpip_batch_timeout_cnt = ffi_hw.read_reg(*reg.offset() as u64);
291 }
292
293 pub fn update_seq_ipip_flush_cnt(&mut self, ffi_hw: &mut ffi::HpuHw, regmap: &FlatRegmap) {
294 let reg = regmap
295 .register()
296 .get("runtime_1in3::pep_seq_ipip_flush_cnt")
297 .expect("Unknown register, check regmap definition");
298 self.seq_ipip_flush_cnt = ffi_hw.read_reg(*reg.offset() as u64);
299 }
300
301 pub fn update_ldb_rcp_dur(&mut self, ffi_hw: &mut ffi::HpuHw, regmap: &FlatRegmap) {
302 let reg = regmap
303 .register()
304 .get("runtime_1in3::pep_ldb_rcp_dur")
305 .expect("Unknown register, check regmap definition");
306 self.ldb_rcp_dur = ffi_hw.read_reg(*reg.offset() as u64);
307 }
308 pub fn update_ldg_req_dur(&mut self, ffi_hw: &mut ffi::HpuHw, regmap: &FlatRegmap) {
309 let reg = regmap
310 .register()
311 .get("runtime_1in3::pep_ldg_req_dur")
312 .expect("Unknown register, check regmap definition");
313 self.ldg_req_dur = ffi_hw.read_reg(*reg.offset() as u64);
314 }
315 pub fn update_ldg_rcp_dur(&mut self, ffi_hw: &mut ffi::HpuHw, regmap: &FlatRegmap) {
316 let reg = regmap
317 .register()
318 .get("runtime_1in3::pep_ldg_rcp_dur")
319 .expect("Unknown register, check regmap definition");
320 self.ldg_rcp_dur = ffi_hw.read_reg(*reg.offset() as u64);
321 }
322 pub fn update_mmacc_sxt_rcp_dur(&mut self, ffi_hw: &mut ffi::HpuHw, regmap: &FlatRegmap) {
323 let reg = regmap
324 .register()
325 .get("runtime_1in3::pep_mmacc_sxt_rcp_dur")
326 .expect("Unknown register, check regmap definition");
327 self.mmacc_sxt_rcp_dur = ffi_hw.read_reg(*reg.offset() as u64);
328 }
329 pub fn update_mmacc_sxt_req_dur(&mut self, ffi_hw: &mut ffi::HpuHw, regmap: &FlatRegmap) {
330 let reg = regmap
331 .register()
332 .get("runtime_1in3::pep_mmacc_sxt_req_dur")
333 .expect("Unknown register, check regmap definition");
334 self.mmacc_sxt_req_dur = ffi_hw.read_reg(*reg.offset() as u64);
335 }
336 pub fn update_mmacc_sxt_cmd_wait_b_dur(
337 &mut self,
338 ffi_hw: &mut ffi::HpuHw,
339 regmap: &FlatRegmap,
340 ) {
341 let reg = regmap
342 .register()
343 .get("runtime_1in3::pep_mmacc_sxt_cmd_wait_b_dur")
344 .expect("Unknown register, check regmap definition");
345 self.mmacc_sxt_cmd_wait_b_dur = ffi_hw.read_reg(*reg.offset() as u64);
346 }
347
348 pub fn update_pep_inst_cnt(&mut self, ffi_hw: &mut ffi::HpuHw, regmap: &FlatRegmap) {
349 let reg = regmap
350 .register()
351 .get("runtime_1in3::pep_inst_cnt")
352 .expect("Unknown register, check regmap definition");
353 self.pep_inst_cnt = ffi_hw.read_reg(*reg.offset() as u64);
354 }
355
356 pub fn update_load_bsk_rcp_dur(&mut self, ffi_hw: &mut ffi::HpuHw, regmap: &FlatRegmap) {
357 (1..16).for_each(|i| {
358 let reg_name = format!("runtime_3in3::pep_load_bsk_rcp_dur_pc{i}");
359 let reg = regmap
360 .register()
361 .get(®_name)
362 .expect("Unknown register, check regmap definition");
363 self.load_bsk_rcp_dur[i] = ffi_hw.read_reg(*reg.offset() as u64)
364 });
365 }
366 pub fn update_load_ksk_rcp_dur(&mut self, ffi_hw: &mut ffi::HpuHw, regmap: &FlatRegmap) {
367 (1..16).for_each(|i| {
368 let reg_name = format!("runtime_1in3::pep_load_ksk_rcp_dur_pc{i}");
369 let reg = regmap
370 .register()
371 .get(®_name)
372 .expect("Unknown register, check regmap definition");
373 self.load_ksk_rcp_dur[i] = ffi_hw.read_reg(*reg.offset() as u64)
374 });
375 }
376
377 pub fn update_pep_ack_cnt(&mut self, ffi_hw: &mut ffi::HpuHw, regmap: &FlatRegmap) {
378 let reg = regmap
379 .register()
380 .get("runtime_1in3::pep_ack_cnt")
381 .expect("Unknown register, check regmap definition");
382 self.pep_ack_cnt = ffi_hw.read_reg(*reg.offset() as u64);
383 }
384
385 pub fn update_pep_bskif_req_info_0(&mut self, ffi_hw: &mut ffi::HpuHw, regmap: &FlatRegmap) {
386 let reg = regmap
387 .register()
388 .get("runtime_3in3::pep_bskif_req_info_0")
389 .expect("Unknown register, check regmap definition");
390 let val = ffi_hw.read_reg(*reg.offset() as u64);
391 let fields = reg.as_field(val);
392 self.bskif_req_br_loop_rp = *fields.get("req_br_loop_rp").expect("Unknown field") as u16;
393 self.bskif_req_br_loop_wp = *fields.get("req_br_loop_wp").expect("Unknown field") as u16;
394 }
395
396 pub fn update_pep_bskif_req_info_1(&mut self, ffi_hw: &mut ffi::HpuHw, regmap: &FlatRegmap) {
397 let reg = regmap
398 .register()
399 .get("runtime_3in3::pep_bskif_req_info_1")
400 .expect("Unknown register, check regmap definition");
401 let val = ffi_hw.read_reg(*reg.offset() as u64);
402 let fields = reg.as_field(val);
403 self.bskif_req_prf_br_loop = *fields.get("req_prf_br_loop").expect("Unknown field") as u16;
404 self.bskif_req_parity = *fields.get("req_parity").expect("Unknown field") as u8;
405 self.bskif_req_assigned = *fields.get("req_assigned").expect("Unknown field") as u8;
406 }
407
408 #[allow(unused)]
409 pub fn reset(&mut self, ffi_hw: &mut ffi::HpuHw, regmap: &FlatRegmap) {
410 self.reset_seq_bpip_waiting_batch_cnt(ffi_hw, regmap);
411 self.reset_seq_bpip_batch_filling_cnt(ffi_hw, regmap);
412 self.reset_seq_ld_ack_cnt(ffi_hw, regmap);
413 self.reset_seq_cmux_not_full_batch_cnt(ffi_hw, regmap);
414 self.reset_seq_bpip_batch_cnt(ffi_hw, regmap);
415 self.reset_seq_bpip_batch_flush_cnt(ffi_hw, regmap);
416 self.reset_seq_bpip_batch_timeout_cnt(ffi_hw, regmap);
417 self.reset_seq_ipip_flush_cnt(ffi_hw, regmap);
418 self.reset_ldb_rcp_dur(ffi_hw, regmap);
419 self.reset_ldg_req_dur(ffi_hw, regmap);
420 self.reset_ldg_rcp_dur(ffi_hw, regmap);
421 self.reset_mmacc_sxt_rcp_dur(ffi_hw, regmap);
422 self.reset_mmacc_sxt_req_dur(ffi_hw, regmap);
423 self.reset_mmacc_sxt_cmd_wait_b_dur(ffi_hw, regmap);
424 self.reset_pep_inst_cnt(ffi_hw, regmap);
425 self.reset_pep_ack_cnt(ffi_hw, regmap);
426 self.reset_load_bsk_rcp_dur(ffi_hw, regmap);
427 self.reset_load_ksk_rcp_dur(ffi_hw, regmap);
428 }
429 #[allow(unused)]
430 pub fn reset_seq_bpip_waiting_batch_cnt(
431 &mut self,
432 ffi_hw: &mut ffi::HpuHw,
433 regmap: &FlatRegmap,
434 ) {
435 let reg = regmap
436 .register()
437 .get("runtime_1in3::pep_seq_bpip_waiting_batch_cnt")
438 .expect("Unknown register, check regmap definition");
439 ffi_hw.write_reg(*reg.offset() as u64, 0);
440 }
441 #[allow(unused)]
442 pub fn reset_seq_bpip_batch_filling_cnt(
443 &mut self,
444 ffi_hw: &mut ffi::HpuHw,
445 regmap: &FlatRegmap,
446 ) {
447 (1..16).for_each(|i| {
448 let reg_name = format!("runtime_1in3::pep_seq_bpip_batch_filling_cnt_{i}");
449 let reg = regmap
450 .register()
451 .get(®_name)
452 .expect("Unknown register, check regmap definition");
453 ffi_hw.write_reg(*reg.offset() as u64, 0)
454 });
455 }
456 #[allow(unused)]
457 pub fn reset_seq_ld_ack_cnt(&mut self, ffi_hw: &mut ffi::HpuHw, regmap: &FlatRegmap) {
458 let reg = regmap
459 .register()
460 .get("runtime_1in3::pep_seq_ld_ack_cnt")
461 .expect("Unknown register, check regmap definition");
462 ffi_hw.write_reg(*reg.offset() as u64, 0);
463 }
464
465 #[allow(unused)]
466 pub fn reset_seq_cmux_not_full_batch_cnt(
467 &mut self,
468 ffi_hw: &mut ffi::HpuHw,
469 regmap: &FlatRegmap,
470 ) {
471 let reg = regmap
472 .register()
473 .get("runtime_1in3::pep_seq_cmux_not_full_batch_cnt")
474 .expect("Unknown register, check regmap definition");
475 ffi_hw.write_reg(*reg.offset() as u64, 0);
476 }
477
478 #[allow(unused)]
479 pub fn reset_seq_bpip_batch_cnt(&mut self, ffi_hw: &mut ffi::HpuHw, regmap: &FlatRegmap) {
480 let reg = regmap
481 .register()
482 .get("runtime_1in3::pep_seq_bpip_batch_cnt")
483 .expect("Unknown register, check regmap definition");
484 ffi_hw.write_reg(*reg.offset() as u64, 0);
485 }
486 #[allow(unused)]
487 pub fn reset_seq_bpip_batch_flush_cnt(&mut self, ffi_hw: &mut ffi::HpuHw, regmap: &FlatRegmap) {
488 let reg = regmap
489 .register()
490 .get("runtime_1in3::pep_seq_bpip_batch_flush_cnt")
491 .expect("Unknown register, check regmap definition");
492 ffi_hw.write_reg(*reg.offset() as u64, 0);
493 }
494 #[allow(unused)]
495 pub fn reset_seq_bpip_batch_timeout_cnt(
496 &mut self,
497 ffi_hw: &mut ffi::HpuHw,
498 regmap: &FlatRegmap,
499 ) {
500 let reg = regmap
501 .register()
502 .get("runtime_1in3::pep_seq_bpip_batch_timeout_cnt")
503 .expect("Unknown register, check regmap definition");
504 ffi_hw.write_reg(*reg.offset() as u64, 0);
505 }
506 #[allow(unused)]
507 pub fn reset_seq_ipip_flush_cnt(&mut self, ffi_hw: &mut ffi::HpuHw, regmap: &FlatRegmap) {
508 let reg = regmap
509 .register()
510 .get("runtime_1in3::pep_seq_ipip_flush_cnt")
511 .expect("Unknown register, check regmap definition");
512 ffi_hw.write_reg(*reg.offset() as u64, 0);
513 }
514 #[allow(unused)]
515 pub fn reset_ldb_rcp_dur(&mut self, ffi_hw: &mut ffi::HpuHw, regmap: &FlatRegmap) {
516 let reg = regmap
517 .register()
518 .get("runtime_1in3::pep_ldb_rcp_dur")
519 .expect("Unknown register, check regmap definition");
520 ffi_hw.write_reg(*reg.offset() as u64, 0);
521 }
522 #[allow(unused)]
523 pub fn reset_ldg_req_dur(&mut self, ffi_hw: &mut ffi::HpuHw, regmap: &FlatRegmap) {
524 let reg = regmap
525 .register()
526 .get("runtime_1in3::pep_ldg_req_dur")
527 .expect("Unknown register, check regmap definition");
528 ffi_hw.write_reg(*reg.offset() as u64, 0);
529 }
530 #[allow(unused)]
531 pub fn reset_ldg_rcp_dur(&mut self, ffi_hw: &mut ffi::HpuHw, regmap: &FlatRegmap) {
532 let reg = regmap
533 .register()
534 .get("runtime_1in3::pep_ldg_rcp_dur")
535 .expect("Unknown register, check regmap definition");
536 ffi_hw.write_reg(*reg.offset() as u64, 0);
537 }
538 #[allow(unused)]
539 pub fn reset_mmacc_sxt_rcp_dur(&mut self, ffi_hw: &mut ffi::HpuHw, regmap: &FlatRegmap) {
540 let reg = regmap
541 .register()
542 .get("runtime_1in3::pep_mmacc_sxt_rcp_dur")
543 .expect("Unknown register, check regmap definition");
544 ffi_hw.write_reg(*reg.offset() as u64, 0);
545 }
546 #[allow(unused)]
547 pub fn reset_mmacc_sxt_req_dur(&mut self, ffi_hw: &mut ffi::HpuHw, regmap: &FlatRegmap) {
548 let reg = regmap
549 .register()
550 .get("runtime_1in3::pep_mmacc_sxt_req_dur")
551 .expect("Unknown register, check regmap definition");
552 ffi_hw.write_reg(*reg.offset() as u64, 0);
553 }
554 #[allow(unused)]
555 pub fn reset_mmacc_sxt_cmd_wait_b_dur(&mut self, ffi_hw: &mut ffi::HpuHw, regmap: &FlatRegmap) {
556 let reg = regmap
557 .register()
558 .get("runtime_1in3::pep_mmacc_sxt_cmd_wait_b_dur")
559 .expect("Unknown register, check regmap definition");
560 ffi_hw.write_reg(*reg.offset() as u64, 0);
561 }
562
563 #[allow(unused)]
564 pub fn reset_pep_inst_cnt(&mut self, ffi_hw: &mut ffi::HpuHw, regmap: &FlatRegmap) {
565 let reg = regmap
566 .register()
567 .get("runtime_1in3::pep_inst_cnt")
568 .expect("Unknown register, check regmap definition");
569 ffi_hw.write_reg(*reg.offset() as u64, 0);
570 }
571 #[allow(unused)]
572 pub fn reset_pep_ack_cnt(&mut self, ffi_hw: &mut ffi::HpuHw, regmap: &FlatRegmap) {
573 let reg = regmap
574 .register()
575 .get("runtime_1in3::pep_ack_cnt")
576 .expect("Unknown register, check regmap definition");
577 ffi_hw.write_reg(*reg.offset() as u64, 0);
578 }
579
580 #[allow(unused)]
581 pub fn reset_load_bsk_rcp_dur(&mut self, ffi_hw: &mut ffi::HpuHw, regmap: &FlatRegmap) {
582 (1..16).for_each(|i| {
583 let reg_name = format!("runtime_3in3::pep_load_bsk_rcp_dur_pc{i}");
584 let reg = regmap
585 .register()
586 .get(®_name)
587 .expect("Unknown register, check regmap definition");
588 ffi_hw.write_reg(*reg.offset() as u64, 0);
589 });
590 }
591 #[allow(unused)]
592 pub fn reset_load_ksk_rcp_dur(&mut self, ffi_hw: &mut ffi::HpuHw, regmap: &FlatRegmap) {
593 (1..16).for_each(|i| {
594 let reg_name = format!("runtime_1in3::pep_load_ksk_rcp_dur_pc{i}");
595 let reg = regmap
596 .register()
597 .get(®_name)
598 .expect("Unknown register, check regmap definition");
599 ffi_hw.write_reg(*reg.offset() as u64, 0);
600 });
601 }
602}
603
604#[derive(Default)]
605pub struct PeMemInfo {
606 addr: u64,
607 data: [u32; 4],
608}
609impl std::fmt::Debug for PeMemInfo {
610 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
611 write!(f, "{{addr: {:x}, data: {:0>8x?}}}", self.addr, self.data)
612 }
613}
614
615#[derive(Debug, Default)]
616pub struct InfoPeMem {
617 pem_load_inst_cnt: u32,
619 pem_load_ack_cnt: u32,
621 pem_store_inst_cnt: u32,
623 pem_store_ack_cnt: u32,
625 pem_ld_info: [PeMemInfo; 2],
627}
628impl FromRtl for InfoPeMem {
629 fn from_rtl(ffi_hw: &mut ffi::HpuHw, regmap: &FlatRegmap) -> Self {
630 let mut infos = Self::default();
633 infos.update(ffi_hw, regmap);
634 infos
635 }
636}
637
638impl InfoPeMem {
640 pub fn update(&mut self, ffi_hw: &mut ffi::HpuHw, regmap: &FlatRegmap) {
641 self.update_pem_load_inst_cnt(ffi_hw, regmap);
642 self.update_pem_load_ack_cnt(ffi_hw, regmap);
643 self.update_pem_store_inst_cnt(ffi_hw, regmap);
644 self.update_pem_store_ack_cnt(ffi_hw, regmap);
645 self.update_pem_ld_info(ffi_hw, regmap, 0);
646 self.update_pem_ld_info(ffi_hw, regmap, 1);
647 }
648
649 pub fn update_pem_load_inst_cnt(&mut self, ffi_hw: &mut ffi::HpuHw, regmap: &FlatRegmap) {
650 let reg = regmap
651 .register()
652 .get("runtime_1in3::pem_load_inst_cnt")
653 .expect("Unknown register, check regmap definition");
654 self.pem_load_inst_cnt = ffi_hw.read_reg(*reg.offset() as u64);
655 }
656 pub fn update_pem_load_ack_cnt(&mut self, ffi_hw: &mut ffi::HpuHw, regmap: &FlatRegmap) {
657 let reg = regmap
658 .register()
659 .get("runtime_1in3::pem_load_ack_cnt")
660 .expect("Unknown register, check regmap definition");
661 self.pem_load_ack_cnt = ffi_hw.read_reg(*reg.offset() as u64);
662 }
663 pub fn update_pem_store_inst_cnt(&mut self, ffi_hw: &mut ffi::HpuHw, regmap: &FlatRegmap) {
664 let reg = regmap
665 .register()
666 .get("runtime_1in3::pem_store_inst_cnt")
667 .expect("Unknown register, check regmap definition");
668 self.pem_store_inst_cnt = ffi_hw.read_reg(*reg.offset() as u64);
669 }
670 pub fn update_pem_store_ack_cnt(&mut self, ffi_hw: &mut ffi::HpuHw, regmap: &FlatRegmap) {
671 let reg = regmap
672 .register()
673 .get("runtime_1in3::pem_store_ack_cnt")
674 .expect("Unknown register, check regmap definition");
675 self.pem_store_ack_cnt = ffi_hw.read_reg(*reg.offset() as u64);
676 }
677 pub fn update_pem_ld_info(
678 &mut self,
679 ffi_hw: &mut ffi::HpuHw,
680 regmap: &FlatRegmap,
681 pc_idx: usize,
682 ) {
683 self.pem_ld_info[pc_idx].addr = ["msb", "lsb"]
685 .iter()
686 .map(|n| {
687 let reg_name = format!("runtime_1in3::pem_load_info_1_pc{pc_idx}_{n}");
688 let reg = regmap
689 .register()
690 .get(®_name)
691 .expect("Unknown register, check regmap definition");
692 ffi_hw.read_reg(*reg.offset() as u64)
693 })
694 .fold(0_u64, |acc, v| (acc << u32::BITS) + v as u64);
695
696 (0..4).for_each(|i| {
698 let reg_name = format!("runtime_1in3::pem_load_info_0_pc{pc_idx}_{i}");
699 let reg = regmap
700 .register()
701 .get(®_name)
702 .expect("Unknown register, check regmap definition");
703 self.pem_ld_info[pc_idx].data[i] = ffi_hw.read_reg(*reg.offset() as u64);
704 });
705 }
706
707 #[allow(unused)]
708 pub fn reset(&mut self, ffi_hw: &mut ffi::HpuHw, regmap: &FlatRegmap) {
709 self.reset_pem_load_inst_cnt(ffi_hw, regmap);
710 self.reset_pem_load_ack_cnt(ffi_hw, regmap);
711 self.reset_pem_store_inst_cnt(ffi_hw, regmap);
712 self.reset_pem_store_ack_cnt(ffi_hw, regmap);
713 }
714 #[allow(unused)]
715 pub fn reset_pem_load_inst_cnt(&mut self, ffi_hw: &mut ffi::HpuHw, regmap: &FlatRegmap) {
716 let reg = regmap
717 .register()
718 .get("runtime_1in3::pem_load_inst_cnt")
719 .expect("Unknown register, check regmap definition");
720 ffi_hw.write_reg(*reg.offset() as u64, 0);
721 }
722 #[allow(unused)]
723 pub fn reset_pem_load_ack_cnt(&mut self, ffi_hw: &mut ffi::HpuHw, regmap: &FlatRegmap) {
724 let reg = regmap
725 .register()
726 .get("runtime_1in3::pem_load_ack_cnt")
727 .expect("Unknown register, check regmap definition");
728 ffi_hw.write_reg(*reg.offset() as u64, 0);
729 }
730 #[allow(unused)]
731 pub fn reset_pem_store_inst_cnt(&mut self, ffi_hw: &mut ffi::HpuHw, regmap: &FlatRegmap) {
732 let reg = regmap
733 .register()
734 .get("runtime_1in3::pem_store_inst_cnt")
735 .expect("Unknown register, check regmap definition");
736 ffi_hw.write_reg(*reg.offset() as u64, 0);
737 }
738 #[allow(unused)]
739 pub fn reset_pem_store_ack_cnt(&mut self, ffi_hw: &mut ffi::HpuHw, regmap: &FlatRegmap) {
740 let reg = regmap
741 .register()
742 .get("runtime_1in3::pem_store_ack_cnt")
743 .expect("Unknown register, check regmap definition");
744 ffi_hw.write_reg(*reg.offset() as u64, 0);
745 }
746}
747#[derive(Debug, Default)]
748pub struct InfoPeAlu {
749 pea_inst_cnt: u32,
751 pea_ack_cnt: u32,
753}
754impl FromRtl for InfoPeAlu {
755 fn from_rtl(ffi_hw: &mut ffi::HpuHw, regmap: &FlatRegmap) -> Self {
756 let mut infos = Self::default();
759 infos.update(ffi_hw, regmap);
760 infos
761 }
762}
763
764impl InfoPeAlu {
766 pub fn update(&mut self, ffi_hw: &mut ffi::HpuHw, regmap: &FlatRegmap) {
767 self.update_pea_inst_cnt(ffi_hw, regmap);
768 self.update_pea_ack_cnt(ffi_hw, regmap);
769 }
770
771 pub fn update_pea_inst_cnt(&mut self, ffi_hw: &mut ffi::HpuHw, regmap: &FlatRegmap) {
772 let reg = regmap
773 .register()
774 .get("runtime_1in3::pea_inst_cnt")
775 .expect("Unknown register, check regmap definition");
776 self.pea_inst_cnt = ffi_hw.read_reg(*reg.offset() as u64);
777 }
778 pub fn update_pea_ack_cnt(&mut self, ffi_hw: &mut ffi::HpuHw, regmap: &FlatRegmap) {
779 let reg = regmap
780 .register()
781 .get("runtime_1in3::pea_ack_cnt")
782 .expect("Unknown register, check regmap definition");
783 self.pea_ack_cnt = ffi_hw.read_reg(*reg.offset() as u64);
784 }
785 #[allow(unused)]
786 pub fn reset(&mut self, ffi_hw: &mut ffi::HpuHw, regmap: &FlatRegmap) {
787 self.reset_pea_inst_cnt(ffi_hw, regmap);
788 self.reset_pea_ack_cnt(ffi_hw, regmap);
789 }
790 #[allow(unused)]
791 pub fn reset_pea_inst_cnt(&mut self, ffi_hw: &mut ffi::HpuHw, regmap: &FlatRegmap) {
792 let reg = regmap
793 .register()
794 .get("runtime_1in3::pea_inst_cnt")
795 .expect("Unknown register, check regmap definition");
796 ffi_hw.write_reg(*reg.offset() as u64, 0);
797 }
798 #[allow(unused)]
799 pub fn reset_pea_ack_cnt(&mut self, ffi_hw: &mut ffi::HpuHw, regmap: &FlatRegmap) {
800 let reg = regmap
801 .register()
802 .get("runtime_1in3::pea_ack_cnt")
803 .expect("Unknown register, check regmap definition");
804 ffi_hw.write_reg(*reg.offset() as u64, 0);
805 }
806}
807
808#[derive(Default)]
809pub struct InfoIsc {
810 isc_inst_cnt: u32,
812 isc_ack_cnt: u32,
814
815 isc_info: [u32; 4],
817}
818
819impl FromRtl for InfoIsc {
820 fn from_rtl(ffi_hw: &mut ffi::HpuHw, regmap: &FlatRegmap) -> Self {
821 let mut infos = Self::default();
824 infos.update(ffi_hw, regmap);
825 infos
826 }
827}
828
829impl std::fmt::Debug for InfoIsc {
830 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
831 write!(
832 f,
833 "{{isc_inst_cnt: {}, isc_ack_cnt: {}, isc_info: {:x?}}}",
834 self.isc_inst_cnt, self.isc_ack_cnt, self.isc_info
835 )
836 }
837}
838
839impl InfoIsc {
841 pub fn update(&mut self, ffi_hw: &mut ffi::HpuHw, regmap: &FlatRegmap) {
842 self.update_isc_inst_cnt(ffi_hw, regmap);
843 self.update_isc_ack_cnt(ffi_hw, regmap);
844 self.update_isc_info(ffi_hw, regmap);
845 }
846
847 pub fn update_isc_inst_cnt(&mut self, ffi_hw: &mut ffi::HpuHw, regmap: &FlatRegmap) {
848 let reg = regmap
849 .register()
850 .get("runtime_1in3::isc_inst_cnt")
851 .expect("Unknown register, check regmap definition");
852 self.isc_inst_cnt = ffi_hw.read_reg(*reg.offset() as u64);
853 }
854 pub fn update_isc_ack_cnt(&mut self, ffi_hw: &mut ffi::HpuHw, regmap: &FlatRegmap) {
855 let reg = regmap
856 .register()
857 .get("runtime_1in3::isc_ack_cnt")
858 .expect("Unknown register, check regmap definition");
859 self.isc_ack_cnt = ffi_hw.read_reg(*reg.offset() as u64);
860 }
861
862 pub fn update_isc_info(&mut self, ffi_hw: &mut ffi::HpuHw, regmap: &FlatRegmap) {
863 for idx in 0..4 {
864 let name = format!("runtime_1in3::isc_latest_instruction_{idx}");
865 let reg = regmap
866 .register()
867 .get(&name)
868 .expect("Unknown register, check regmap definition");
869 self.isc_info[idx] = ffi_hw.read_reg(*reg.offset() as u64);
870 }
871 }
872
873 #[allow(unused)]
874 pub fn reset(&mut self, ffi_hw: &mut ffi::HpuHw, regmap: &FlatRegmap) {
875 self.reset_isc_inst_cnt(ffi_hw, regmap);
876 self.reset_isc_ack_cnt(ffi_hw, regmap);
877 }
878
879 #[allow(unused)]
880 pub fn reset_isc_inst_cnt(&mut self, ffi_hw: &mut ffi::HpuHw, regmap: &FlatRegmap) {
881 let reg = regmap
882 .register()
883 .get("runtime_1in3::isc_inst_cnt")
884 .expect("Unknown register, check regmap definition");
885 ffi_hw.write_reg(*reg.offset() as u64, 0);
886 }
887
888 #[allow(unused)]
889 pub fn reset_isc_ack_cnt(&mut self, ffi_hw: &mut ffi::HpuHw, regmap: &FlatRegmap) {
890 let reg = regmap
891 .register()
892 .get("runtime_1in3::isc_ack_cnt")
893 .expect("Unknown register, check regmap definition");
894 ffi_hw.write_reg(*reg.offset() as u64, 0);
895 }
896}
897
898#[derive(Debug, Default)]
899pub struct ErrorHpu {
900 error_1in3: u32,
901 error_3in3: u32,
902}
903impl FromRtl for ErrorHpu {
904 fn from_rtl(ffi_hw: &mut ffi::HpuHw, regmap: &FlatRegmap) -> Self {
905 let mut infos = Self::default();
908 infos.update(ffi_hw, regmap);
909 infos
910 }
911}
912
913impl ErrorHpu {
914 pub fn update(&mut self, ffi_hw: &mut ffi::HpuHw, regmap: &FlatRegmap) {
915 self.update_error_1in3(ffi_hw, regmap);
916 self.update_error_3in3(ffi_hw, regmap);
917 }
918
919 pub fn update_error_1in3(&mut self, ffi_hw: &mut ffi::HpuHw, regmap: &FlatRegmap) {
920 let reg = regmap
921 .register()
922 .get("status_1in3::error")
923 .expect("Unknown register, check regmap definition");
924 self.error_1in3 = ffi_hw.read_reg(*reg.offset() as u64);
925 }
926
927 pub fn update_error_3in3(&mut self, ffi_hw: &mut ffi::HpuHw, regmap: &FlatRegmap) {
928 let reg = regmap
929 .register()
930 .get("status_3in3::error")
931 .expect("Unknown register, check regmap definition");
932 self.error_3in3 = ffi_hw.read_reg(*reg.offset() as u64);
933 }
934}