Only add the two ide ports that are emulated by QEMU to the device tree to avoid clients trying to access the non-existent third one and fix their names and properties for mac99 to match those used by Apple. This makes MorphOS able to find and use these.
Signed-off-by: BALATON Zoltan balaton@eik.bme.hu ---
v2: improved comment about the naming of device tree nodes
References: http://web.archive.org/web/20081120133742/http://penguinppc.org/historical/d... --- openbios-devel/drivers/ide.c | 7 ++++++- openbios-devel/drivers/macio.c | 17 ++++++++++------- 2 files changed, 16 insertions(+), 8 deletions(-)
diff --git a/openbios-devel/drivers/ide.c b/openbios-devel/drivers/ide.c index 0e0f0cf..327c64a 100644 --- a/openbios-devel/drivers/ide.c +++ b/openbios-devel/drivers/ide.c @@ -1526,6 +1526,10 @@ int macio_ide_init(const char *path, uint32_t addr, int nb_channels) u32 props[8]; struct ide_channel *chan;
+ /* IDE ports on Macs are numbered from 3. + * Also see comments in macio.c:openpic_init() */ + current_channel = 3; + for (i = 0; i < nb_channels; i++, current_channel++) {
chan = malloc(sizeof(struct ide_channel)); @@ -1574,7 +1578,8 @@ int macio_ide_init(const char *path, uint32_t addr, int nb_channels)
dnode = find_dev(nodebuff);
- set_property(dnode, "compatible", "heathrow-ata", 13); + set_property(dnode, "compatible", (is_oldworld() ? + "heathrow-ata" : "keylargo-ata"), 13);
props[0] = 0x00000526; props[1] = 0x00000085; diff --git a/openbios-devel/drivers/macio.c b/openbios-devel/drivers/macio.c index 00d7149..b689f04 100644 --- a/openbios-devel/drivers/macio.c +++ b/openbios-devel/drivers/macio.c @@ -130,7 +130,7 @@ macio_nvram_put(char *buf) else it_shift = NW_IO_NVRAM_SHIFT;
- for (i=0; i< arch_nvram_size() ; i++) + for (i=0; i < arch_nvram_size(); i++) nvram[i << it_shift] = buf[i]; #ifdef DUMP_NVRAM printk("new nvram:\n"); @@ -202,13 +202,16 @@ openpic_init(const char *path, phys_addr_t addr) target_node = find_dev("/pci/mac-io/escc/ch-b"); set_int_property(target_node, "interrupt-parent", dnode);
- target_node = find_dev("/pci/mac-io/ata-1"); - set_int_property(target_node, "interrupt-parent", dnode); - - target_node = find_dev("/pci/mac-io/ata-2"); + /* QEMU only emulates 2 of the 3 ata buses currently */ + /* On a new world Mac these are not numbered but named by the + * ATA version they support. Thus we have: ata-3, ata-3, ata-4 + * On g3beige they all called just ide. + * We take ata-3 and ata-4 which seems to work for both + * at least for clients we care about */ + target_node = find_dev("/pci/mac-io/ata-3"); set_int_property(target_node, "interrupt-parent", dnode);
- target_node = find_dev("/pci/mac-io/ata-3"); + target_node = find_dev("/pci/mac-io/ata-4"); set_int_property(target_node, "interrupt-parent", dnode);
target_node = find_dev("/pci/mac-io/via-cuda"); @@ -311,7 +314,7 @@ ob_macio_keylargo_init(const char *path, phys_addr_t addr) /* The NewWorld NVRAM is not located in the MacIO device */ macio_nvram_init("", 0); escc_init(path, addr); - macio_ide_init(path, addr, 3); + macio_ide_init(path, addr, 2); openpic_init(path, addr); ob_unin_init(); }