[OpenBIOS] Re : [PATCH 0/8] RFC: OFMEM cleanup/memory reduction patch

Olivier DANET odanet at caramail.com
Sat Apr 14 20:05:54 CEST 2012


>Interesting, can you tell more about this project? Did you also modify
>QEMU to emulate the HW setup?

The project is currently in stealth mode, so I can't give any details for now.

>We should try to isolate the dependencies for QEMU, even if QEMU is
>probably the most interesting use case for OpenBIOS these days. Could
>you tell more about those bugs and even better, publish your changes?

A few issues :

- arch/sparc32/wuf.S :  WIM register updates must not be immediately
 followed by instructions depending on WIM value (SparcV8, §B.29, page 133) :
 wr %twin_tmp1, 0x0, %wim /* Make window 'I' invalid */
+ nop
+ nop
+ nop
 restore %g0, %g0, %g0 /* Restore to window 'O' */

- arc/sparc32/entry.S : The FP (frame ptr) register is never initialised.
 Registers are not initialized after a RESET (SparcV8, page 75).
 
- arch/sparc32/entry.S : MMU activation is written as :
        set     highmem, %g2
        set 1, %g1
        jmp     %g2
         sta    %g1, [%g0] ASI_M_MMUREGS ! enable mmu

 It doesn't work because there is no precise synchronisation between
 MMU registers updates and instruction fetches (because of pipelining)
 MMU activation must be done in a area where virtual and physical adresses
 are equal ( VA=FF00_0000 --> PA=F_FF00_0000 ).
 The intial page table is modified to add this mapping and the activation
  sequence is :
   - jump from 0_ to F_something (PROM boot mode)
   - activate the MMU
   - plenty of NOPs
   - jump to "highmem"
   
 I also eventually disassembled Sun ROMs, and found sequences like that :
   sta %l1,[%l0],4
   iflush
   nop
   nop
   nop
   nop
   nop
 
I can post patches, but they won't change anything to QEMU (at best).
The currently used version of OpenBIOS isn't the latest (SVN 1046), I
may need to do some cleanup.

(...and sorry for the previous message's bad formatting)



More information about the OpenBIOS mailing list