Blue Swirl wrote:
I think OpenBIOS does not flush the I/D TLBs on reset. Most PCI devices have 0x1f in 'upa-portid' and CPU has zero.
I've just seen your commits for this - thanks!
Debian package sparc-utils contains some device trees: http://packages.debian.org/lenny/sparc/sparc-utils/filelist
That's really useful to know. I used these as a reference for creating the extra CPU properties required to stop the divide-by-zero error.
This helps things get further, but in particular it shows that we're missing a whole set of architecture-specific Forth words for manipulating registers. The OpenSolaris kernel tries to execute the following Forth:
sync %tl-c %tstate h# 1860640 x! %g1 h# 1860648 x! %g2 h# 1860650 x! %g3 h# 1860658 x! %g4 h# 1860660 x! %g5 h# 1860668 x! %g6 h# 1860670 x! %g7 h# 1860678 x! %o0 h# 1860680 x! %o1 h# 1860688 x! %o2 h# 1860690 x! %o3 h# 1860698 x! %o4 h# 18606a0 x! %o5 h# 18606a8 x! %o6 h# 18606b0 x! %o7 h# 18606b8 x! %tl-c %tpc h# 18606c0 x! %tl-c %tnpc h# 18606c8 x! %y h# 18606d0 l! %tl-c %tt h# 1843cf8 x! sync ; warning !
(from http://src.opensolaris.org/source/xref/systemz/sirius/usr/src/uts/sun4/os/st...)
It seems that we need some Forth functions for creating/managing CPU state? I suspect I'll have to dig into the OpenBOOT source to find out how these are supposed to work.
ATB,
Mark.