The _start() routine initializes the CPU to the state required by the PowerPC BKI (see "PowerPC BKI"). Example 3-12 applies to the PowerPC MPC8xx micro-controller family. To put the CPU in the state required by the MPC8xx PowerPC BKI, the routine goes through the following steps:
Clears all bits in the MSR register except the ME and RI bits, which are set, and:
Disables all external interrupts (MSR[EE])
Disables all instruction and data translations (MSR[IR], MSR[DR])
Disables FPU instructions (MSR[FP])
Puts the processor into Supervisor privilege state (MSR[PR])
Enables machine-check exceptions (MSR[ME)
Pust the processor in a recoverable exception state (MSR[RI])
Resets instruction and data MMU control registers to clear any TLB reservation. Invalidates the TLB entries and resets, disables and/or invalidates all MMU registers.
The L1 data cache is assumed to be disabled.
_start: /* Setup init value for MSR */ addi r9, r0, (MSR_ME+MSR_RI) mtmsr r9 /* Clear reservation of TLB entries */ lis r9, 0x0 mtspr mi_ctr, r9 mtspr md_ctr, r9 mtspr m_casid, r9 mtspr md_ap, r9 tlbia /* invalidate all TLB entries */ /* setup stack for boot */ LoadAddr(r1, stackPtr) bl start loop: b loop /* Never here */