[OpenBIOS] [commit] r732 - in trunk/openbios-devel: forth/system libopenbios
Mark Cave-Ayland
mark.cave-ayland at siriusit.co.uk
Mon Apr 5 21:31:36 CEST 2010
Laurent Vivier wrote:
> Nice, I was wondering why Morphos on PPC failed to boot, perhaps this
> corrects the problem... if a day I've time anymore, I'll try ;-)
Well, while I'm testing on PPC...
Using the Morphos ISO I managed to fix a stack error in getprop, however
it looks like the Morphos boot loader is broken. With DEBUG_CIF enabled
I get this:
>> finddevice("/pci") = 0x05415ff4
>> getprop(0x05415ff4, "device_type", 0x078efe90, 64) = 4
>> 0x078efe90 70 63 69 00 __ __ __ __ __ __ __ __ __ __ __ __ pci.
>> child(0x05415ff4) = 0x0541643c
>> getprop(0x0541643c, "device_type", 0x078efe90, 64) = 8
>> 0x078efe90 64 69 73 70 6c 61 79 00 __ __ __ __ __ __ __ __ display.
>> peer(0x0541643c) = 0x05416938
>> getprop(0x05416938, "device_type", 0x078efe90, 64) = 8
>> 0x078efe90 6e 65 74 77 6f 72 6b 00 __ __ __ __ __ __ __ __ network.
>> peer(0x05416938) = 0x05416d0c
>> getprop(0x05416d0c, "device_type", 0x078efe90, 64) = 8
>> 0x078efe90 70 63 69 2d 69 64 65 00 __ __ __ __ __ __ __ __ pci-ide.
>> peer(0x05416d0c) = 0x054177f4
>> getprop(0x054177f4, "device_type", 0x078efe90, 64) = 7
>> 0x078efe90 6d 61 63 2d 69 6f 00 __ __ __ __ __ __ __ __ __ mac-io.
>> getprop(0x054177f4, "assigned-addresses", 0x078efe70, 20) = 20
>> 0x078efe70 82 00 20 10 00 00 00 00 80 80 00 00 00 00 00 00 ..
.............
>> 0x078efe80 00 08 00 00 __ __ __ __ __ __ __ __ __ __ __ __ ....
>> child(0x054177f4) = 0x05417cc0
>> getprop(0x05417cc0, "device_type", 0x078efe90, 64) = 9
>> 0x078efe90 76 69 61 2d 63 75 64 61 00 __ __ __ __ __ __ __ via-cuda.
>> peer(0x05417cc0) = 0x05418530
>> getprop(0x05418530, "device_type", 0x078efe90, 64) = 6
>> 0x078efe90 6e 76 72 61 6d 00 __ __ __ __ __ __ __ __ __ __ nvram.
>> peer(0x05418530) = 0x05418744
>> getprop(0x05418744, "device_type", 0x078efe90, 64) = 5
>> 0x078efe90 65 73 63 63 00 __ __ __ __ __ __ __ __ __ __ __ escc.
>> peer(0x05418744) = 0x05418d20
>> getprop(0x05418d20, "device_type", 0x078efe90, 64) = 4
>> 0x078efe90 61 74 61 00 __ __ __ __ __ __ __ __ __ __ __ __ ata.
>> peer(0x05418d20) = 0x00000000
>> getprop(0x00000000, "device_type", 0x078efe90, 64) = -1
>> peer(0x00000000) = 0x0540de20
>> getprop(0x0540de20, "device_type", 0x078efe90, 64) = -1
>> peer(0x0540de20) = 0x00000000
>> getprop(0x00000000, "device_type", 0x078efe90, 64) = -1
>> peer(0x00000000) = 0x0540de20
>> getprop(0x0540de20, "device_type", 0x078efe90, 64) = -1
>> peer(0x0540de20) = 0x00000000
>> getprop(0x00000000, "device_type", 0x078efe90, 64) = -1
>> peer(0x00000000) = 0x0540de20
>> getprop(0x0540de20, "device_type", 0x078efe90, 64) = -1
>> peer(0x0540de20) = 0x00000000
>> getprop(0x00000000, "device_type", 0x078efe90, 64) = -1
>> peer(0x00000000) = 0x0540de20
So when Morphos gets to the end of enumerating the PCI bus, "peer"
returns a value of 0 which is correct according to the spec. However,
Morphos seems to continue to plug this value back into "getprop" to
retrieve a device type which of course fails. Finally it calls "peer"
again on 0 which again according to spec should return the root node.
And so it gets stuck in a loop trying to locate a peer for the root
device and failing :(
I guess the only way to solve this would be to find out which bug MacOS
firmware has and to emulate it, or ask the Morphos people to change
their loader to follow the spec.
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