[OpenBIOS] [PATCH 5/5] ppc: fix up IDE device tree and control transfer
Alexander Graf
agraf at suse.de
Wed Aug 26 08:49:08 CET 2015
On 21.08.15 00:45, Cormac O'Brien wrote:
> Mac OS 9 is finicky about devices having the correct properties, so we change
> some IDE data to more closely model a real New World Mac.
Please split this into 2 separate patches.
> We also add
> ide_exit() to ciface_quiesce() to properly prepare the drives for transferring
> control to the operating system.
>
> Signed-off-by: Cormac O'Brien <cormac at c-obrien.org>
> ---
> arch/ppc/qemu/methods.c | 2 ++
> drivers/ide.c | 34 ++++++++++++++++++++++++++++++----
> 2 files changed, 32 insertions(+), 4 deletions(-)
>
> diff --git a/arch/ppc/qemu/methods.c b/arch/ppc/qemu/methods.c
> index cb72bc1..adf3ea2 100644
> --- a/arch/ppc/qemu/methods.c
> +++ b/arch/ppc/qemu/methods.c
> @@ -109,11 +109,13 @@ NODE_METHODS( tty ) = {
>
> DECLARE_NODE( ciface, 0, 0, "+/openprom/client-services" );
>
> +extern void ide_exit(void);
> /* ( -- ) */
> static void
> ciface_quiesce( unsigned long args[], unsigned long ret[] )
> {
> usb_exit();
> + ide_exit();
> #if 0
> unsigned long msr;
> /* This seems to be the correct thing to do - but I'm not sure */
> diff --git a/drivers/ide.c b/drivers/ide.c
> index 327c64a..8ef34cb 100644
> --- a/drivers/ide.c
> +++ b/drivers/ide.c
> @@ -1581,6 +1581,12 @@ int macio_ide_init(const char *path, uint32_t addr, int nb_channels)
> set_property(dnode, "compatible", (is_oldworld() ?
> "heathrow-ata" : "keylargo-ata"), 13);
>
> + set_property(dnode, "model", ((current_channel == 3) ?
> + "ata-3" : "ata-4"), strlen("ata-*") + 1);
As Segher mentioned somewhere else, please introduce a helper for string
properties.
> +
> + set_property(dnode, "AAPL,connector", "ata",
> + strlen("ata") + 1);
> +
> props[0] = 0x00000526;
> props[1] = 0x00000085;
> props[2] = 0x00000025;
> @@ -1589,8 +1595,8 @@ int macio_ide_init(const char *path, uint32_t addr, int nb_channels)
> props[5] = 0x00000000;
> props[6] = 0x00000000;
> props[7] = 0x00000000;
> - OLDWORLD(set_property(dnode, "AAPL,pio-timing",
> - (char *)&props, 8*sizeof(props[0])));
> + set_property(dnode, "AAPL,pio-timing",
> + (char *)&props, 8*sizeof(props[0]));
>
> /* The first interrupt entry is the ide interrupt, the second
> the dbdma interrupt */
> @@ -1634,8 +1640,8 @@ int macio_ide_init(const char *path, uint32_t addr, int nb_channels)
> (char *)&props, 2*sizeof(props[0])));
>
> props[0] = 0;
> - OLDWORLD(set_property(dnode, "AAPL,bus-id", (char*)props,
> - 1 * sizeof(props[0])));
> + set_property(dnode, "AAPL,bus-id", (char*)props,
> + 1 * sizeof(props[0]));
> IDE_DPRINTF(DEV_NAME": [io ports 0x%lx]\n",
> current_channel, chan->mmio);
>
> @@ -1683,3 +1689,23 @@ int macio_ide_init(const char *path, uint32_t addr, int nb_channels)
> return 0;
> }
> #endif /* CONFIG_DRIVER_MACIO */
> +
> +void ide_exit(void);
This should go into a header file.
Alex
> +void ide_exit(void)
> +{
> + struct ide_channel *current;
> +
> + current = channels;
> + while (current) {
> + struct ide_drive *drive;
> + int i;
> +
> + for (i = 0; i < 2; i++) {
> + drive = ¤t->drives[i];
> + ob_ide_select_drive(drive);
> + ob_ide_software_reset(drive);
> + ob_ide_device_type_check(drive);
> + }
> + current = current->next;
> + }
> +}
>
More information about the OpenBIOS
mailing list