During the subsystem definition following line are added in the cdo for the RPU subsystem:
# Healthy Boot configuration for RPU subsystem
#Add HB_MON_1 to RPU_LS subsystem. Timeout(last argument) = 20000ms (0x4E20)
pm_add_requirement 0x1c000004 0x18250001 0x46 0xFFFFF 0x1 0x4E20
#Set the error action (POR) for HB_MON_1 in case of subsystem not healthy
#Second Argument = error action; POR=0x1; SRST=0x2; ERR_OUT=0x4;
em_set_action 0x28110000 0x1 0x2
This configures the healthy boot monitoring for RPU subsystem by PLM. The minimum timeout value for which PLM will wait to allow subsystem mark itself healthy is configured for 20 seconds in this case. If the subsystem fails to mark itself healthy with in 20 seconds, PLM assumes that the subsystem failed to boot properly and triggers POR (system wide Power-On-reset)
The subsystem marks itself healthy by issuing XPm_InitFinalize . The RPU application in the TRD, calls XPm_InitFinalize to finalize its PM requirements after initialization, if BAD BOOT KEY is not marked.
RPU application of the TRD waits for the command from APU over libmetal. When it receives request to test the healthy boot, it will mark BAD BOOT Key and perform subsystem restart by calling XilPm API XPm_SystemShutdown with subsystem as argument to perform self restart. On next boot, RPU application skips XPm_InitFinalize, hence recovery is trigger after 20 seconds.