[OpenBIOS] SOLVED: the mystery of Solaris on SPARC32 and the missing Forth arguments

Blue Swirl blauwirbel at gmail.com
Mon Nov 1 19:18:58 CET 2010


On Mon, Nov 1, 2010 at 3:58 PM, Artyom Tarasenko <atar4qemu at gmail.com> wrote:
> On Mon, Nov 1, 2010 at 11:59 AM, Mark Cave-Ayland
> <mark.cave-ayland at siriusit.co.uk> wrote:
>> Artyom Tarasenko wrote:
>>
>>> Unlike Linux/Debian, Solaris rarely does unaligned accesses (in fact I
>>> think I haven't seen one which I didn't trigger myself).
>>
>> Yeah, I see a lot of those on Debian too :(
>
> This is not bad. They are supposed to be there. Probably they are used
> for flushing something.
> The annoying thing is that they don't allow to have DEBUG_UNALIGNED
> always turned on.
>
>> I think one of the next things I'd like to do is try and figure out if it's
>> possible to switch SPARC32 to ofmem, since we already have code that
>> correctly generates all these properties so it would be a shame not to use
>> it (I see accesses to some of the /memory nodes just before it crashes on
>> OpenBIOS, so I'd like to eliminate that as a source of confusion first).
>
> Would be cool. Then the sparc32 port can be used to improve the sparc64 one.
>
>>> Btw, where does the message "device auxio size -1" come from?
>>
>> It seems as if there should be an auxio device somewhere:
>>
>> http://www.cs.fsu.edu/~baker/devices/lxr/http/source/linux/arch/sparc/kernel/auxio.c?v=2.6.11.8
>>
>> Perhaps this is the device that Solaris is trying to access and failing?
>
> Yes, that's what I mean. But what can be wrong with the OpenBIOS implementation?
> OpenBIOS:
>
> 0 > cd /obio/auxio  ok
> 0 > .properties
> name                      "auxio"
> reg                       -- c : 00 00 00 00 00 90 00 00 00 00 00 01
>  ok
>
> OBP:
> ok cd /obio/auxio
> ok .attributes
> address                  ffee6000

This means that the device is not mapped. Maybe this can help:

diff --git a/drivers/obio.c b/drivers/obio.c
index 38c5f8d..d22abe3 100644
--- a/drivers/obio.c
+++ b/drivers/obio.c
@@ -228,7 +228,7 @@ ob_auxio_init(uint64_t base, uint64_t offset)
 {
     ob_new_obio_device("auxio", NULL);

-    ob_reg(base, offset, AUXIO_REGS, 0);
+    ob_reg(base, offset, AUXIO_REGS, 1);

     fword("finish-device");
 }



More information about the OpenBIOS mailing list