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?
Igor has suggested a C version in his previous email, although again I don't really know enough about SPARC to know if this is valid or not.
Looks OK, though I don't again see any difference.
You need to skip return for failed ofmem_claim() in elf-loader to see any difference.
I wonder if we should just ignore the return from ofmem_claim() or maybe emit a warning? I guess the clash occurs because of the addresses being hard-coded in various parts of the Fcode loader, and so this won't change with real hardware.
Or then again maybe resetting the client state (as we believe should now happen in init-program) removes some of the old MMU mappings before executing the boot-archive ramdisk and so they wouldn't exist anymore?
ATB,
Mark.