Re: Resetting a 405GPr
Simon Burge <[email protected]> Tue, 07 Mar 2006 17:03:03 +1100
| Newsgroups | gmane.os.netbsd.devel.ports |
|---|---|
| Organization | Wasabi Systems, Inc. |
| Message-ID | <[email protected]> |
Peter Seebach wrote: > I've found the following code in the kernel: > > _C_LABEL(ppc4xx_reset): > mfspr %r3,SPR_DBCR0 > oris %r3,%r13,DBCR0_RST_SYSTEM@h > mtspr SPR_DBCR0,%r3 > ba 0 > > This code hangs; not quite consistently, but very often. > > I found this in a Linux kernel: > > _GLOBAL(abort) > mfspr r13,SPRN_DBCR0 > oris r13,r13,DBCR0_RST_SYSTEM@h > mtspr SPRN_DBCR0,r13 > > These are pretty similar. However, the Linux kernel reboots. The exact > spelling of macro names seems not to matter; they're the same values. The > register numbers are a little different, but changing them all to be r13 in > the NetBSD kernel does nothing. > > What seems to be significant is the "ba 0". Only I can't see why it matters > what you have after you try to reset the system. The only thing I can think of is some sort of prefetch or something, but that's clutching at straws. Does putting a few nops after the mtspr make a difference? > Presumably, the existing code works on the other 4xx-based systems. Any > suggestions on what else might be needed to persuade this to actually reboot, > as though the reset bits had been loaded into the status register? I've never noticed a problem rebooting the Walnut (405GP). It gets used fairly regularly as it houses my off-line mp3 backup. Simon. -- Simon Burge <[email protected]> NetBSD Support and Service: http://www.wasabisystems.com/