Hi,
I'm working with the i.MX8M Mini processor and trying to perform a software reset of Core0 and Core1. I have implemented the following approach where I set the reset vector using the SRC General Purpose Register (GPR) and then trigger a core reset using the A53 register. However, after resetting Core0 (or Core1), the core enters a hang state and doesn't resume properly.
Here’s a summary of what I did:
- Set Core0 Reset Vector: I wrote the high and low parts of the reset vector to the SRC_GPR1 and SRC_GPR2 registers.
- Trigger Core0 Reset: I used the SRC_A53RCR0 register to trigger a software reset of Core0.
void trigger_core0_reset(void) {
#define SRC_A53RCR0_ADDR 0x30390004 // Address of SRC_A53RCR0
#define CORE0_RESET (1 << 0) // Bit 0 for Core0 software reset
volatile uint32_t *src_a53rcr0 = (uint32_t *)SRC_A53RCR0_ADDR;
*src_a53rcr0 |= CORE0_RESET; // Trigger Core0 software reset
}
I called the functions with:
set_core0_reset_vector(0x7E1000); // Example reset vector address
trigger_core0_reset();
Issue: After resetting Core0, it appears to enter a hang state and does not recover. I also tried this approach for Core1 with the same result — the core hangs after the reset.
I would appreciate any help or insights into why the cores are hanging and what might be missing in my approach.
Thank you in advance!