From: Sergei Shtylyov <sshtylyov@ru.mvista.com>
To: Alan Cox <alan@lxorguk.ukuu.org.uk>
Cc: Hugh Dickins <hugh@veritas.com>, Jeff Garzik <jgarzik@redhat.com>,
"Rafael J. Wysocki" <rjw@sisk.pl>,
linux-ide@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: 2.6.29-rc libata sff 32bit PIO regression
Date: Sat, 31 Jan 2009 18:11:50 +0300 [thread overview]
Message-ID: <49846A36.5000708@ru.mvista.com> (raw)
In-Reply-To: <20090126191151.18b094e6@lxorguk.ukuu.org.uk>
Hello.
Alan Cox wrote:
> pata_amd: Program FIFO
>
> From: Alan Cox <alan@lxorguk.ukuu.org.uk>
>
> With 32bit PIO we can use the posted write buffers, but only for 32bit I/O
> cycles. This means we must disable the FIFO for ATAPI where a final 16bit
> cycle may occur.
>
> Rework the FIFO logic so that we disable the FIFO then selectively re-enable
> it when we set the timings on AMD devices. Also fix a case where we scribbled
> on PCI config 0x41 of Nvidia chips when we shouldn't.
>
> Signed-off-by: Alan Cox <alan@lxorguk.ukuu.org.uk>
>
[...]
> diff --git a/drivers/ata/pata_amd.c b/drivers/ata/pata_amd.c
> index 63719ab..c380a4e 100644
> --- a/drivers/ata/pata_amd.c
> +++ b/drivers/ata/pata_amd.c
>
[...]
> @@ -158,6 +165,40 @@ static int amd_cable_detect(struct ata_port *ap)
> }
>
> /**
> + * amd_fifo_setup - set the PIO FIFO for ATA/ATAPI
> + * @ap: ATA interface
> + * @adev: ATA device
> + *
> + * Set the PCI fifo for this device according to the devices present
> + * on the bus at this point in time. We need to turn the post write buffer
> + * off for ATAPI devices as we may need to issue a word sized write to the
> + * device as the final I/O
> + */
> +
> +static void amd_fifo_setup(struct ata_port *ap)
> +{
> + struct ata_device *adev;
> + struct pci_dev *pdev = to_pci_dev(ap->host->dev);
> + static const u8 fifobit[2] = { 0xC0, 0x30};
> + u8 fifo = fifobit[ap->port_no];
> + u8 r;
> +
> +
> + ata_for_each_dev(adev, &ap->link, ENABLED) {
> + if (adev->class == ATA_DEV_ATAPI)
> + fifo = 0;
> + }
>
Er, couldn't we do that dynamically, based on which device is
executing the command now?
> + if (pdev->device == PCI_DEVICE_ID_AMD_VIPER_7411) /* FIFO is broken */
> + fifo = 0;
> +
> + /* On the later chips the read prefetch bits become no-op bits */
> + pci_read_config_byte(pdev, 0x41, &r);
> + r &= ~fifobit[ap->port_no];
>
Why not:
r &= ~fifo;
> + r |= fifo;
> + pci_write_config_byte(pdev, 0x41, r);
> +}
MBR, Sergei
next prev parent reply other threads:[~2009-01-31 15:11 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-01-21 13:34 2.6.29-rc libata sff 32bit PIO regression Hugh Dickins
2009-01-21 20:11 ` Mikael Pettersson
2009-01-21 21:47 ` Alan Cox
2009-01-21 22:51 ` Sergei Shtylyov
2009-01-21 22:58 ` Alan Cox
2009-01-21 23:34 ` Sergei Shtylyov
2009-01-21 23:37 ` Sergei Shtylyov
2009-01-22 0:20 ` Sergei Shtylyov
2009-01-25 15:22 ` Alan Cox
2009-01-25 15:22 ` Alan Cox
2009-01-26 19:11 ` Alan Cox
2009-01-31 15:11 ` Sergei Shtylyov [this message]
2009-01-31 16:06 ` Alan Cox
2009-01-31 16:57 ` Sergei Shtylyov
2009-02-01 21:13 ` Hugh Dickins
2009-02-02 11:48 ` Sergei Shtylyov
2009-02-02 12:12 ` Hugh Dickins
2009-02-02 14:17 ` Sergei Shtylyov
2009-02-03 3:59 ` Jeff Garzik
2009-02-04 11:10 ` Sergei Shtylyov
2009-01-26 19:12 ` Alan Cox
2009-02-03 4:00 ` Jeff Garzik
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=49846A36.5000708@ru.mvista.com \
--to=sshtylyov@ru.mvista.com \
--cc=alan@lxorguk.ukuu.org.uk \
--cc=hugh@veritas.com \
--cc=jgarzik@redhat.com \
--cc=linux-ide@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=rjw@sisk.pl \
/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.