Hello,
On Tue, 30 Jul 2019, BALATON Zoltan wrote:
> 3. Try to get some other OF implementation working like OpenFirmware. Based
> on previous work by Atar for the 40p this is possible although to do it
> cleanly may be more work and hindered by the need to do it in Forth
> completely. But Forth is needed to hack on OpenBIOS as well so once someone
> gets over that hurdle it does not matter. I've started looking at this
> posibility to find out how much work would this be that's why I was asking
> the question. I've compiled Atar's work which is now upstram in Mitch
> Bradley's tree and it worked well with 40p and even started with pegasos2 but
> of course it did not init the hardware correctly expecting to run on 40p
> (haven't tried with mac99 but I expect the same result). So OpenFirmware
> already works on PPC and has some QEMU specific drivers what we may need is
> porting drivers for mac specific and pegasos2 devices from OpenBIOS from C to
> Forth (or get equivalents from somewhere else) and think about how to pass
> the initial device tree similar to SLOF to avoid having to implement each
> board in OpenFirmware separately (although doing hardcoded board
> implementation like Atar's 40p might be a quick and dirty way to get it
> working with much less work).
I gave it a try playing with it for a few hours (without really knowing
what am I doing) just to get to know it better and see what's needed. So I
started by stripping down Atar's QEMU PReP port removing PReP specific
parts and just leaving a bare minimum to work on PowerPC and I actually
managed to build a ROM image that works with my pegasos2 emulation and
gets me an OF environment over diag serial port now:
$ qemu-system-ppc -M pegasos2 -bios ofw.rom -serial stdio
setup_mem_windows: Should enable region 14
Mapping pci1-io-win 0x0+0x2000000 @ 0xfe000000
setup_mem_windows: Should enable region 20
Type 'i' to interrupt stand-init sequence
First stand-init:
Calibrate
CIF buffers
DHCP init
memory node
Instruction cache on
Decrementer
Enable machine check exceptions
Set Memory Map
MMU
Root node
Data cache on
Fast CPU mode
PCI host bridge
CPU nodes
Keyboard overrides
Memory node
not found.
not found.
/pci/isa/serial@i2f8 not found.
/pci/isa/serial@i2f8 not found.
not found.
not found.
, Serial #0, 128 MiB memory installed
Open Firmware
Copyright (c) 1995-2000, FirmWorks.
Copyright (c) 2014,2017,2019 Artyom Tarasenko.
Type any key to interrupt automatic startup
6 5 4 3 2 1
Boot device: net Arguments:
Can't open boot device
ok show-devs
/dropin-fs
/null-nvram
/cpus
/<Unnamed>
/mmu
/memory@0
/aliases
/options
/openprom
/chosen
/packages
/cpus/PowerPC,603evARTHUR@0
/packages/ext2-file-system
/packages/disk-label
/packages/iso9660-file-system
/packages/fat-file-system
/packages/obp-tftp
/packages/deblocker
/packages/stringio
/packages/terminal-emulator
/packages/client-services
ok printenv
Variable Name Value Default Value
hrp-memmap? false false
virt-size 0x0 0xffffffff
virt-base 0x0 0xffffffff
real-size 0x0 0xffffffff
real-base 0x0 0xffffffff
real-mode? false false
diag-switch? false false
fcode-debug? false false
ip-address 255.255.255.255 255.255.255.255
ip-router
ip-domain
ip-netmask 255.255.255.0 255.255.255.0
ip-dns-server
local-mac-address? false false
oem-logo
oem-logo? false false
oem-banner
oem-banner? false false
output-device /pci/isa/serial@i2f8 /pci/isa/serial@i2f8
input-device /pci/isa/serial@i2f8 /pci/isa/serial@i2f8
load-base 4194304 4194304
boot-command boot boot
auto-boot? true true
watchdog-reboot? false false
diag-file
diag-device net net
boot-file
boot-device disk net disk net
ansi-terminal? true true
screen-#columns 80 80
screen-#rows 34 34
silent-mode? false false
use-nvramrc? false false
nvramrc
security-password
security-#badlogins 0
security-mode none
diag-switch? false false
ok dev /
ok .properties
#address-cells 00000001
ok dev openprom
ok .properties
model FirmWorks,3.0
aligned-allocator
relative-addressing
name openprom
ok dev /cpus/PowerPC,603evARTHUR
ok .properties
clock-frequency 05f5e100
reg 00000000
timebase-frequency 007de290
tlb-sets 00000080
tlb-size 00000100
d-cache-sets 00000080
d-cache-block-size 00000020
d-cache-size 00008000
i-cache-sets 00000080
i-cache-block-size 00000020
i-cache-size 00008000
device_type cpu
name PowerPC,603evARTHUR
ok
Of course it's only the start and has a lot of missing parts yet: does not
detect PCI bus and devices (I need to write a driver for the PCI host
similar to what Atar did for 40p), it misdetects the CPU (or it may be
hard coded somewhere), does not detect memory size (this is mentioned on
Atar's blog) and may have other defficiencies. But for a start it works
quite well and it was surprisingly easy to get it up thanks to previous
work. Given that the Pegasos2 is quite close to PReP and PC hardware most
of the drivers for PC like hardware are already there in OF, so maybe if I
can make a working driver for the system controller chip the rest would
just work or should be relatively easy to fix. So for the pegasos2 this
seems to be a viable alternative that may not be too hard to get working
if I limit the scope to just the pegasos2.
For Mac machines more drivers would need to be written as these are not
included in the open source OF version that was released for OLPC so only
those drivers are included which were needed for that. Therefore it would
be more work to write those missing drivers. We have USB driver (I've once
tried porting that to OpenBIOS[1]) so keyboard and mouse might work where
we have USB but we would still need drivers for uninorth and mac-io at
least to get something working but maybe others as well, I'm not sure.
For Sparc machines even CPU support is missing so it may be more difficult
to get that working. Or maybe not as this could be added based on some
other similar architecture: arm, mips and ppc are already there but these
do have a lot of Forth files so it may take a while to understand those. I
don't know Sparc hardware to tell what drivers may be needed.
But from Atar's blog on getting OF working for QEMU PReP/40p I got the
impression that Mitch Bradley (inventor of OpenFirmware and founder of
FirmWorks) did help him by releasing some additional drivers or sources
that he needed so maybe asking politely would not hurt and it may get
easier, unless there are legal hurdles in releasing additional sources.
Otherwise those need to be recreated but that may still be doable if
someone does not mind learning enough Forth to do it.
I'm not sure which is more work, getting OpenBIOS to the same level or
writing drivers for OpenFirmware but maybe for PPC machines it's not much
harder to rewrite the missing drivers. For Sparc I'm not sure, PPC support
was already there so I don't know what it takes to add a new cpu support.
Regards,
BALATON Zoltan
[1] One can follow the thread starting here:
https://mail.coreboot.org/pipermail/openbios/2014-May/008244.html
but basically the attempt to port OF driver to OpenBIOS ended with:
https://mail.coreboot.org/pipermail/openbios/2014-May/008281.html
some of those words are already there now but some are still missing.
I've ended up finishing the C driver which was finally added, even though
I only wanted to try qemu-system-ppc64 originally and did not plan to port
a USB driver. That's what I meant saying I end up having to do fixes
whenever I try something in OpenBIOS: like trying an FCode ROM the last
time. At least OpenFirmware implements the standard already perfectly so
we would only need to care about getting it to work with the machine and
not if it has everythung that might be needed by stuff using it (or at
least much less so than starting from scratch).
_______________________________________________
OpenBIOS mailing list -- openbios@openbios.org
To unsubscribe send an email to openbios-leave@openbios.org