On Sun, Jan 3, 2010 at 2:57 PM, Mark Cave-Ayland mark.cave-ayland@siriusit.co.uk wrote:
Igor Kovalenko wrote:
Looking at SILO and Linux usage, It looks like OF entry point needs to be in %o4 and %o0 must be zero.
http://fxr.watson.org/fxr/source/arch/sparc64/kernel/head.S?v=linux-2.4.22
http://git.kernel.org/?p=linux/kernel/git/bcollins/silo.git;a=blob;f=first/u... http://fxr.watson.org/fxr/source/arch/sparc/kernel/head.S?v=linux-2.4.22
But start_client_image() already handles this, except for zero %o0.
We may want to rework implementation so go() uses start_client_image() with saved context, and boot word uses client state reset, load, init-program and go words. load would fetch image, init-program would prepare saved context. This would match a hint in of1275 document about difference between boot and load words.
Yeah I think you're right here - by using an intermediate client state then it would be possible to share the majority of code between the two implementations.
Another interesting thing I noticed from this document was that the alarm word is implemented using a timer interrupt. Hence this would be a good test of general timer functionality (as well as given a twirly baton during the first loading stage!). Does anyone know if the qemu SPARC64 model currently supports a timer interrupt?
I thought it does (%tick register works), but it looks like the CPU timer interrupts (%tick_cmpr register) don't work at all.