From a2d8ad9486fb429a2ce27abb5879b9ca8f26dfa4 Mon Sep 17 00:00:00 2001 From: Robbe Derks Date: Wed, 9 Apr 2025 15:21:46 +0200 Subject: [PATCH] Log divergent registers once (#2182) log divergent reg --- board/drivers/registers.h | 11 ++++------- board/drivers/registers_declarations.h | 1 + 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/board/drivers/registers.h b/board/drivers/registers.h index 92b6b0fa..ce4be14a 100644 --- a/board/drivers/registers.h +++ b/board/drivers/registers.h @@ -49,13 +49,10 @@ void check_registers(void){ if((uint32_t) register_map[i].address != 0U){ ENTER_CRITICAL() if((*(register_map[i].address) & register_map[i].check_mask) != (register_map[i].value & register_map[i].check_mask)){ - #ifdef DEBUG_FAULTS - print("Register at address 0x"); puth((uint32_t) register_map[i].address); print(" is divergent!"); - print(" Map: 0x"); puth(register_map[i].value); - print(" Register: 0x"); puth(*(register_map[i].address)); - print(" Mask: 0x"); puth(register_map[i].check_mask); - print("\n"); - #endif + if(!register_map[i].logged_fault){ + print("Register 0x"); puth((uint32_t) register_map[i].address); print(" divergent! Map: 0x"); puth(register_map[i].value); print(" Reg: 0x"); puth(*(register_map[i].address)); print("\n"); + register_map[i].logged_fault = true; + } fault_occurred(FAULT_REGISTER_DIVERGENT); } EXIT_CRITICAL() diff --git a/board/drivers/registers_declarations.h b/board/drivers/registers_declarations.h index 13180117..90ee66df 100644 --- a/board/drivers/registers_declarations.h +++ b/board/drivers/registers_declarations.h @@ -4,6 +4,7 @@ typedef struct reg { volatile uint32_t *address; uint32_t value; uint32_t check_mask; + bool logged_fault; } reg; // 10 bit hash with 23 as a prime