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

Mark Cave-Ayland mark.cave-ayland at siriusit.co.uk
Tue Nov 2 11:04:38 CET 2010


Blue Swirl wrote:

> 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");
>  }

Better, but still not quite right:

Configuration device id QEMU version 1 machine id 32
CPUs: 1 x FMI,MB86904
UUID: 00000000-0000-0000-0000-000000000000
Welcome to OpenBIOS v1.0 built on Oct 30 2010 16:27
   Type 'help' for detailed information
Trying cdrom:d...
Not a bootable ELF image
Loading a.out image...
Loaded 7680 bytes
entry point is 0x4000
bootpath: /iommu/sbus/espdma/esp/sd at 2,0:d

Jumping to entry point 00004000 for type 00000005...
switching to new context:
device auxio address prop too big
SunOS Release 5.8 Version Generic_108528-09 32-bit
Copyright 1983-2001 Sun Microsystems, Inc.  All rights reserved.

Looking closer:

Configuration device id QEMU version 1 machine id 32
CPUs: 1 x FMI,MB86904
UUID: 00000000-0000-0000-0000-000000000000
Welcome to OpenBIOS v1.0 built on Oct 30 2010 16:27
   Type 'help' for detailed information

0 > cd /obio/auxio  ok
0 > .properties
name                      "auxio"
reg                       -- c : 00 00 00 00 00 90 00 00 00 00 00 01
address                   -- 8 : ff eb 20 00 00 00 00 04
  ok
0 >

Hmmm. It look as if this part of map_reg in drivers/obio.c is totally 
wrong, at least for SPARC32:

     if (map) {
         unsigned long addr;

         addr = (unsigned long)map_io(base + offset, size);

         PUSH(addr);
         fword("encode-int");
         PUSH(4);
         fword("encode-int");
         fword("encode+");
         push_str("address");
         fword("property");
         return addr;
     }
     return 0;

I'd probably say that based upon the output above we should probably 
remove the second PUSH() and encode-int/encode+ completely, but it must 
have been added for a reason. Blue, any ideas?


ATB,

Mark.

-- 
Mark Cave-Ayland - Senior Technical Architect
PostgreSQL - PostGIS
Sirius Corporation plc - control through freedom
http://www.siriusit.co.uk
t: +44 870 608 0063

Sirius Labs: http://www.siriusit.co.uk/labs



More information about the OpenBIOS mailing list