linux-ide.vger.kernel.org archive mirror
 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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).