In case of Linux hang user can still be able to do the subsystem restart the subsystem
Figure 1. Subsystem Restart when Linux is Hang
- Linux
- Register notifier for CPU idle during subsystem restart event from primary
processor.
Use Event management driver to register for idle callback during subsystem restart or force power down event.
- PLM
- Set subsystem and core flag to indicate idle callback registered.
- RPU
- Send subsystem restart request to PLM.
- PLM
- Check if idle callback registered.
- PLM
- Request runtime HB_MON device if added to start timer.
- PLM
- Change subsystem state to pending restart and change core state to pending power down.
- PLM
- Send idle callback to TF-A and start timer to get power down event.
- TF-A
- Notify Linux for restart event through SGI.
Because Linux is hung, it fails to receive notifications.
- PLM
- Healthy boot monitor timer overflows after timeout value.
- PLM
- Send idle callback to TF-A again.
- TF-A
- Raise SGI to secondary cores to power down all secondary cores.
- TF-A
- Send Self suspend request to PLM.
- PLM
- Enable PSM direct power down interrupt for APU cores.
- TF-A
- Put all cores in WFI state.
- PSM
- Get WFI interrupt for all cores.
- PSM
- Send APU power down event to PLM.
- PLM
- Send direct power down request to PSM for powering down APU.
- PSM
- Power down APU.
- PLM
- Check subsystem state for pending restart.
- PLM
- Release all the devices including HB_MON device which stops the timer.
- PLM
- Reload subsystem image.
- PLM
- Send direct power up request to PSM for powering up APU.