All of lore.kernel.org
 help / color / mirror / Atom feed
From: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
To: Chuck Ebbert <cebbert@redhat.com>
Cc: IDE/ATA development list <linux-ide@vger.kernel.org>,
	linux-kernel <linux-kernel@vger.kernel.org>,
	Olaf Hering <olaf@aepfle.de>
Subject: libata broken on Pegasos PPC platform (was: Re: IDE broken on Pegasos PPC platform)
Date: Mon, 24 Sep 2007 22:58:28 +0200	[thread overview]
Message-ID: <200709242258.28497.bzolnier@gmail.com> (raw)
In-Reply-To: <46F80BB1.7050902@redhat.com>

On Monday 24 September 2007, Chuck Ebbert wrote:
> Without this patch, taken from a Suse 2.6.22 kernel, the Pegasos
> PPC machines can't use their IDE interface. Is this the right fix?

This or use IDE via82cxxx driver.

> Bug:
> https://bugzilla.redhat.com/show_bug.cgi?id=247602
> Patch (also below):
> https://bugzilla.redhat.com/attachment.cgi?id=167747
> 
> ===============
> 
> The built-in IDE controller is configured in legacy mode,
> but the PCI registers advertise native mode.
> Force the PCI class into legacy mode. This allows pata_via to access
> two drives.
> The Pegasos specific irq enforcement in the via82cxxx driver
> must stay because there is aparently no generic way to setup irq per channel.
> 
> Tested on Pegasos2 with firmware version 20040810, and two IDE disks.

Somehow Signed-off-by got lost in this version of the patch....

IIRC the patch comes from Olaf Hering (added to cc:) and is the way to go

Acked-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>

> ---
>  arch/powerpc/kernel/prom_init.c   |   11 ++++++++---
>  arch/powerpc/platforms/chrp/pci.c |   29 +++++++++++++++++++++++++++++
>  2 files changed, 37 insertions(+), 3 deletions(-)
> 
> --- a/arch/powerpc/kernel/prom_init.c
> +++ b/arch/powerpc/kernel/prom_init.c
> @@ -2044,6 +2044,7 @@ static void __init fixup_device_tree_map
>  /*
>   * Pegasos and BriQ lacks the "ranges" property in the isa node
>   * Pegasos needs decimal IRQ 14/15, not hexadecimal
> + * Pegasos has the IDE configured in legacy mode, but advertised as native
>   */
>  static void __init fixup_device_tree_chrp(void)
>  {
> @@ -2081,9 +2082,13 @@ static void __init fixup_device_tree_chr
>  		prom_printf("Fixing up IDE interrupt on Pegasos...\n");
>  		prop[0] = 14;
>  		prop[1] = 0x0;
> -		prop[2] = 15;
> -		prop[3] = 0x0;
> -		prom_setprop(ph, name, "interrupts", prop, 4*sizeof(u32));
> +		prom_setprop(ph, name, "interrupts", prop, 2*sizeof(u32));
> +		prom_printf("Fixing up IDE class-code on Pegasos...\n");
> +		rc = prom_getprop(ph, "class-code", prop, sizeof(u32));
> +		if (rc == sizeof(u32)) {
> +			prop[0] &= ~0x5;
> +			prom_setprop(ph, name, "class-code", prop, sizeof(u32));
> +		}
>  	}
>  }
>  #else
> --- a/arch/powerpc/platforms/chrp/pci.c
> +++ b/arch/powerpc/platforms/chrp/pci.c
> @@ -338,3 +338,32 @@ void chrp_pci_fixup_winbond_ata(struct p
>  }
>  DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_WINBOND, PCI_DEVICE_ID_WINBOND_82C105,
>  		chrp_pci_fixup_winbond_ata);
> +
> +/* Pegasos2 firmware version 20040810 configures the built-in IDE controller
> + * in legacy mode, but sets the PCI registers to PCI native mode.
> + * The chip can only operate in legacy mode, so force the PCI class into legacy
> + * mode as well. The same fixup must be done to the class-code property in
> + * the IDE node /pci@80000000/ide@C,1
> + */
> +static void chrp_pci_fixup_vt8231_ata(struct pci_dev *viaide)
> +{
> +	u8 progif;
> +	struct pci_dev *viaisa;
> +
> +	if (!machine_is(chrp) || _chrp_type != _CHRP_Pegasos)
> +		return;
> +	if (viaide->irq != 14)
> +		return;
> +
> +	viaisa = pci_get_device(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8231, NULL);
> +	if (!viaisa)
> +		return;
> +	printk("Fixing VIA IDE, force legacy mode on '%s'\n", viaide->dev.bus_id);
> +
> +	pci_read_config_byte(viaide, PCI_CLASS_PROG, &progif);
> +	pci_write_config_byte(viaide, PCI_CLASS_PROG, progif & ~0x5);
> +	viaide->class &= ~0x5;
> +
> +	pci_dev_put(viaisa);
> +}
> +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_1, chrp_pci_fixup_vt8231_ata);

  parent reply	other threads:[~2007-09-24 20:55 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-09-24 19:10 IDE broken on Pegasos PPC platform Chuck Ebbert
2007-09-24 20:38 ` Alan Cox
2007-09-24 20:58 ` Bartlomiej Zolnierkiewicz [this message]
2007-09-24 21:10   ` libata broken on Pegasos PPC platform (was: Re: IDE broken on Pegasos PPC platform) Alan Cox
2007-09-25  9:22     ` Olaf Hering
2007-09-24 21:27 ` IDE broken on Pegasos PPC platform Matt Sealey
2007-09-25  9:24   ` Benjamin Herrenschmidt

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=200709242258.28497.bzolnier@gmail.com \
    --to=bzolnier@gmail.com \
    --cc=cebbert@redhat.com \
    --cc=linux-ide@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=olaf@aepfle.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.