Have a great day,
The do_reset() procedure does all required settings to initiate hreset flow
int do_reset (cmd_tbl_t * cmdtp, int flag, int argc, char * const argv[]) |
|
volatile immap_t *immap = (immap_t *) CONFIG_SYS_IMMR; |
|
/* Interrupts and MMU off */ |
|
__asm__ __volatile__ ("mfmsr %0":"=r" (msr):); |
|
msr &= ~( MSR_EE | MSR_IR | MSR_DR); |
|
__asm__ __volatile__ ("mtmsr %0"::"r" (msr)); |
|
* Enable Reset Control Reg - "RSTE" is the magic word that let us go |
|
out_be32(&immap->reset.rpr, 0x52535445); |
|
/* Verify Reset Control Reg is enabled */ |
|
while (!(in_be32(&immap->reset.rcer) & RCER_CRE)) |
|
printf ("Resetting the board.\n"); |
|
out_be32(&immap->reset.rcr, RCR_SWHR); |
|
}
So if the do_rest() procedure executed then hreset is driven automatically. Of course if CONFIG_SYS_IMMR wrong then procedure hang in /* Verify Reset Control Reg is enabled */ loop.
-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------