Strange issue with M4/M7 setup / how to factory reset a Giga

Hi,

I want to use RPC with the M4/M7 but I do not want to use the RPC library (it is not suitable for my use-case due to errors getting swallowed in the implementation). To that end I did the following.

I took the implementation of cm4_kick() and mpu_config() from RPC.cpp and put them in my own source file. This did what I wanted, it booted the CM4 and it all looked good.

I think put this code into a system that used Arduino_H7_Video and called begin() on it.

Result: screen goes a bright yellow/green and any graphics related activity results in a crash and the red blinking light.

I have a couple of questions:

  1. Once the damage is done I don't seem to be able to undo it. Restarting the device and pushing old firmware to it doesn't work, it still has the issue with the video. I presume I've maybe broken the MPU configuration (or something) but I can't find any documentation on how to do a "reset everything back to factory state". Anyone got any pointers?

  2. I'm puzzled as to what the actual issue is. My init code looks exactly like the RPC.cpp code without the code below. Any off-the-top-of-your-head points would be great.

    // Initialize OpenAmp and libmetal libraries
    if (MX_OPENAMP_Init(RPMSG_HOST, new_service_cb) !=  HAL_OK) {
        return 0;
    }

    // Initialize rpmsg endpoints.
    memset(endpoints, 0, sizeof(endpoints));