[OpenBIOS] Solaris anyone?

Bob Breuer breuerr at mc.net
Tue Jun 14 07:19:28 CEST 2011


Blue Swirl wrote:
> On Mon, Jun 13, 2011 at 2:06 AM, Bob Breuer <breuerr at mc.net> wrote:
>   
>> Nathan Kunkee wrote:
>>     
>>>> Date: Mon, 6 Jun 2011 15:54:39 -0400
>>>> From: tarl-b2 at tarl.net
>>>> To: openbios at openbios.org
>>>> Subject: Re: [OpenBIOS] Solaris anyone?
>>>>
>>>>         
>>>>> Hmmm it looks from reading the source code that QEMU doesn't actually
>>>>> implement a proper audio device for SS-5 at all but merely provides a
>>>>> dummy device with an empty mapped region. In that case it may be
>>>>> possible to provide a simple mapping in OpenBIOS to match the one in
>>>>> QEMU which may be enough to persuade Solaris to boot.
>>>>>           
>>>> Ugh. I recall that audio chip being non-trivial...
>>>>
>>>> It might be worth deleting that audio device from the device tree and
>>>> see if Solaris really does get further.
>>>>
>>>>         
>>> I've tried the same CD image with the SS-10 QEMU machine, which seems
>>> to lack the audio device, and I still hang. I get the first part of
>>> the kernel, no extra logging, and then the spinner to infinity...
>>>
>>> nathan at xanth:/usr/local/build/qemu$ sparc-softmmu/qemu-system-sparc
>>> -bios openbios-builtin.elf -M SS-10 -cdrom
>>> /local/storage/ISO/solaris-9-sparc-d1.iso -nographic
>>>
>>> Configuration device id QEMU version 1 machine id 64
>>> CPUs: 1 x TI,TMS390Z55
>>> UUID: 00000000-0000-0000-0000-000000000000
>>> Welcome to OpenBIOS v1.0 built on Apr 30 2011 02:11
>>>   Type 'help' for detailed information
>>> Trying disk...
>>> No valid state has been set by load or init-program
>>>
>>> 0 > boot cd:d -k -v 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:
>>> Size: 0x45c9f+0xdaf1+0x1d6a7 Bytes
>>> SunOS Release 5.9 Version Generic_112233-12 32-bit
>>> Copyright 1983-2003 Sun Microsystems, Inc.  All rights reserved.
>>> Use is subject to license terms.
>>> Ethernet address = 52:54:0:12:34:56
>>> Using default device instance data
>>> \
>>>
>>>
>>> Does anyone know what loads on a real SS after the audio device?
>>>
>>> Nathan
>>>       
>> For this hang, Solaris is stuck trying to set and verify a bit which is
>> currently un-settable in qemu.  It's the MMU breakpoint action register
>> (asi 0x4c), and if bit 12 is set, then it should continue on just like
>> with SS-5.  After fcp0, the next thing Solaris should initialize is the
>> network:
>>
>> pseudo-device: fcp0
>> fcp0 is /pseudo/fcp at 0
>> Using RPC Bootparams for network configuration information.
>> le0: No carrier - cable disconnected or hub link test disabled?
>> le0: No carrier - cable disconnected or hub link test disabled?
>> Skipping interface le0
>>     
>
> Would this (untested) patch to QEMU help?
>   
It does work, but ...
> diff --git a/target-sparc/cpu.h b/target-sparc/cpu.h
> index 320530e..b93fdfd 100644
> --- a/target-sparc/cpu.h
> +++ b/target-sparc/cpu.h
> @@ -403,6 +403,7 @@ typedef struct CPUSPARCState {
>      uint32_t mmuregs[32];
>      uint64_t mxccdata[4];
>      uint64_t mxccregs[8];
> +    uint64_t mmubpaction;
>   
Looks like it's less than 64 bits:

ok 0 0 0 4c spaced!
ok 0 4c spaced@ . .
0 0
ok 0 not dup 0 4c spaced!
ok 0 4c spaced@ . .
0 1fff
ok 0 4c spacel@ . 4 4c spacel@ .
1fff 1fff

Would it make sense to declare it as 32-bit, or just mask out the extra
bits?  or not even care since almost nobody writes to that register?
>      uint64_t mmubpregs[4];
>      uint64_t prom_addr;
>  #endif
> diff --git a/target-sparc/op_helper.c b/target-sparc/op_helper.c
> index b38691e..1023870 100644
> --- a/target-sparc/op_helper.c
> +++ b/target-sparc/op_helper.c
> @@ -1941,7 +1941,7 @@ uint64_t helper_ld_asi(target_ulong addr, int
> asi, int size, int sign)
>      case 0x32: // Turbosparc page table descriptor diagnostic
>      case 0x39: /* data cache diagnostic register */
>      case 0x4c: /* SuperSPARC MMU Breakpoint Action register */
> -        ret = 0;
> +        ret = env->mmubpaction;
>          break;
>   
And here, 0x39 and above should still have the ret = 0.
>      case 0x38: /* SuperSPARC MMU Breakpoint Control Registers */
>          {
> @@ -2304,7 +2304,9 @@ void helper_st_asi(target_ulong addr, uint64_t
> val, int asi, int size)
>                 // descriptor diagnostic
>      case 0x36: /* I-cache flash clear */
>      case 0x37: /* D-cache flash clear */
> +        break;
>      case 0x4c: /* breakpoint action */
> +        env->mmubpaction = val;
>          break;
>      case 0x38: /* SuperSPARC MMU Breakpoint Control Registers*/
>          {
>   
By the way, what would it take to get the space[cwLd] commands in
OpenBIOS?  They come in handy for verifying these asi accesses.

Bob




More information about the OpenBIOS mailing list