CVSROOT:        /cvs
Module name:    src
Changes by:     m...@cvs.openbsd.org    2014/02/08 15:20:15

Modified files:
        sys/arch/sgi/sgi: ip32_machdep.c 

Log message:
For some reason (lack of testing being my #1 candidate), IP32 PROM version 4.18
ends up with the CKSEG1 function pointer values being wrong. All of them.
Wrong, as in, off-by-0x60.

Of course, invoking the advertized function pointers leads to interesting
results, from bogus panics to invalid pointer dereferences.

Attempt to identify this revision by:
- checking that all five function pointer values, as set up by bios_ident(),
match the 4.18 bogus values;
- instructions at said pointer match the 4.18 values.

If the test is positive, then the pointer values are replaced with the correct
values. This allows O2 systems with 4.18 PROM to correctly powerdown, reboot
and halt.

Found the hard way by matthieu@ after a PROM upgrade, verified on a second
system by me.

Reply via email to