[APPLIED] Re: [PATCH] ata: make DVD drive recognisable on systems with Sandybridge CPT chipset

Leann Ogasawara leann.ogasawara at canonical.com
Thu Sep 15 13:39:00 UTC 2011


On Thu, 2011-09-15 at 10:27 +0800, ming.lei at canonical.com wrote:
> From: Ming Lei <tom.leiming at gmail.com>
> 
> This quirk patch fixes one kind of bug inside Intel Sandybridge CPT
> chipset, see reports from LP794642, LP737388, LP758433, ...
> 
> Many guys have reported the problem.
> 
> With help from upstream ata maintainer Tejun[1], the problem is found to be
> caused by 32bit PIO mode, which is introduced in the commit below:
> 
> 	commit 0b67c7439fe2a5d76602de36854c88e2beab00b0
> 	Author: Tejun Heo <tj at kernel.org>
> 	Date:   Mon Jan 11 17:03:11 2010 +0900
> 
> 	    ata_piix: enable 32bit PIO on SATA piix
> 
> 	    Commit 871af1210f13966ab911ed2166e4ab2ce775b99d enabled 32bit PIO
> 	    for PATA piix but didn't for SATA.  There's no reason not to use 32bit
> 	    PIO on SATA piix.  Enable it.
> 
> 	Signed-off-by: Tejun Heo <tj at kernel.org>
> 	Cc: Alan Cox <alan at lxorguk.ukuu.org.uk>
> 	Signed-off-by: Jeff Garzik <jgarzik at redhat.com>
> 
> so introduce the quirk patch to disable 32bit PIO on SATA piix for Sandybridge CPT
> chipset, Alan Cox has agreed on the patch[2].
> 
> SRU Justification:
> 
> Impact:
>         - without the patch, DVD drive can't be recognized on Dell
>           optiplex 390.
> Fix:
>         - After applying the patch, DVD drive can be recognized well
> 	  on Dell optiplex 390.
> 
> BugLink: http://bugs.launchpad.net/bugs/794642
> 
> Upstream: [1]/[2]
> 
> [1], https://bugzilla.kernel.org/show_bug.cgi?id=40592
> [2], http://marc.info/?t=131528297300002&r=1&w=2
> 
> Signed-off-by: Ming Lei <tom.leiming at gmail.com>

Signed-off-by: Leann Ogasawara <leann.ogasawara at canonical.com>

Given this is hw specific (ie minimal risk of regression), has positive
test feedback, and appears will make it's way upstream, I've gone ahead
and applied this as a SAUCE patch to Oneiric master-next.

Please be sure to add the SRU justification to the bug report.

Thanks,
Leann

> ---
>  drivers/ata/ata_piix.c |   12 +++++++++++-
>  1 files changed, 11 insertions(+), 1 deletions(-)
> 
> diff --git a/drivers/ata/ata_piix.c b/drivers/ata/ata_piix.c
> index 43107e9..eb7ea56 100644
> --- a/drivers/ata/ata_piix.c
> +++ b/drivers/ata/ata_piix.c
> @@ -341,11 +341,12 @@ static struct ata_port_operations piix_sata_ops = {
>  };
>  
>  static struct ata_port_operations piix_pata_ops = {
> -	.inherits		= &piix_sata_ops,
> +	.inherits		= &ata_bmdma32_port_ops,
>  	.cable_detect		= ata_cable_40wire,
>  	.set_piomode		= piix_set_piomode,
>  	.set_dmamode		= piix_set_dmamode,
>  	.prereset		= piix_pata_prereset,
> +	.sff_irq_check		= piix_irq_check,
>  };
>  
>  static struct ata_port_operations piix_vmw_ops = {
> @@ -1585,6 +1586,15 @@ static int __devinit piix_init_one(struct pci_dev *pdev,
>  				"on poweroff and hibernation\n");
>  	}
>  
> +	/*
> +	 * Sandybridge chipset H61/P67/H67 have broken 32 mode up to now
> +	 * see https://bugzilla.kernel.org/show_bug.cgi?id=40592
> +	 */
> +	if (pdev->vendor == PCI_VENDOR_ID_INTEL && pdev->device == 0x1c00)
> +		piix_sata_ops.inherits = &ata_bmdma_port_ops;
> +	else
> +		piix_sata_ops.inherits = &ata_bmdma32_port_ops;
> +
>  	port_info[0] = piix_port_info[ent->driver_data];
>  	port_info[1] = piix_port_info[ent->driver_data];
>  
> -- 
> 1.7.4.1
> 
> 







More information about the kernel-team mailing list