Patchwork [v2] ata: Fix DVD not dectected at some Haswell platforms

login
register
mail settings
Submitter Youquan Song
Date Feb. 1, 2013, 3:19 p.m.
Message ID <1359731982-1390-1-git-send-email-youquan.song@intel.com>
Download mbox | patch
Permalink /patch/217338/
State Not Applicable
Delegated to: David Miller
Headers show

Comments

Youquan Song - Feb. 1, 2013, 3:19 p.m.
There is a quirk patch 5e5a4f5d5a08c9c504fe956391ac3dae2c66556d 
"ata_piix: make DVD Drive recognisable on systems with Intel Sandybridge
 chipsets(v2)

    This quirk patch fixes one kind of bug inside some Intel Sandybridge
    chipsets, see reports from

           https://bugzilla.kernel.org/show_bug.cgi?id=40592.

    Many guys also have reported the problem before:

        https://bugs.launchpad.net/bugs/737388
        https://bugs.launchpad.net/bugs/794642
        https://bugs.launchpad.net/bugs/782389
        ......

    With help from Tejun, the problem is found to be caused by 32bit PIO
    mode, so introduce the quirk patch to disable 32bit PIO on SATA piix
    for some Sandybridge CPT chipsets.

    Seth also tested the patch on all five affected chipsets
    (pci device ID: 0x1c00, 0x1c01, 0x1d00, 0x1e00, 0x1e01), and found
    the patch does fix the problem.
"

The above patch only fixing the 4 ports IDE controller 32bit PIO mode. 

Recently, the problem was shown at Haswell Desktop platform which includes 2 
ports IDE controller.

So introduce a quirk patch to disable 32bit PIO on this IDE controller. 

v2: Change spelling error in statememnt pointed by Sergei Shtylyov.

Tested-by: Lee, Chun-Yi <jlee@suse.com>
Signed-off-by: Youquan Song <youquan.song@intel.com>
Cc: stable@vger.kernel.org
---
 drivers/ata/ata_piix.c |   14 +++++++++++++-
 1 files changed, 13 insertions(+), 1 deletions(-)
Libor Pechacek - Feb. 13, 2013, 8:32 a.m.
Youquan Song,

On Fri 01-02-13 10:19:42, Youquan Song wrote:
> There is a quirk patch 5e5a4f5d5a08c9c504fe956391ac3dae2c66556d 
> "ata_piix: make DVD Drive recognisable on systems with Intel Sandybridge
>  chipsets(v2)
> 
>     This quirk patch fixes one kind of bug inside some Intel Sandybridge
>     chipsets, see reports from
> 
>            https://bugzilla.kernel.org/show_bug.cgi?id=40592.
> 
>     Many guys also have reported the problem before:
> 
>         https://bugs.launchpad.net/bugs/737388
>         https://bugs.launchpad.net/bugs/794642
>         https://bugs.launchpad.net/bugs/782389
>         ......
> 
>     With help from Tejun, the problem is found to be caused by 32bit PIO
>     mode, so introduce the quirk patch to disable 32bit PIO on SATA piix
>     for some Sandybridge CPT chipsets.
> 
>     Seth also tested the patch on all five affected chipsets
>     (pci device ID: 0x1c00, 0x1c01, 0x1d00, 0x1e00, 0x1e01), and found
>     the patch does fix the problem.
> "

As to my understanding Sergei did not suggest citing the whole commit message.
I also find the numerous references to Sandy Bridge confusing as this is a fix
for Lynx Point chipset.

How about rephrasing the commit message in a way similar to the following one?
------8<-----
We've hit a problem with DVD not recognized on Haswell Desktop platform which
includes Lynx Point 2-port SATA controller.  This quirk patch disables 32bit
PIO on the controller in IDE mode.
------>8-----

> 
> Recently, the problem was shown at Haswell Desktop platform which includes 2 
> ports IDE controller.
> 
> So introduce a quirk patch to disable 32bit PIO on this IDE controller. 
> 
> v2: Change spelling error in statememnt pointed by Sergei Shtylyov.
> 
> Tested-by: Lee, Chun-Yi <jlee@suse.com>
> Signed-off-by: Youquan Song <youquan.song@intel.com>
> Cc: stable@vger.kernel.org
> ---
>  drivers/ata/ata_piix.c |   14 +++++++++++++-
>  1 files changed, 13 insertions(+), 1 deletions(-)
> 
> diff --git a/drivers/ata/ata_piix.c b/drivers/ata/ata_piix.c
> index ef773e1..1993e52 100644
> --- a/drivers/ata/ata_piix.c
> +++ b/drivers/ata/ata_piix.c
> @@ -150,6 +150,7 @@ enum piix_controller_ids {
>  	tolapai_sata,
>  	piix_pata_vmw,			/* PIIX4 for VMware, spurious DMA_ERR */
>  	ich8_sata_snb,
> +	ich8_2port_sata_snb,
>  };
>  
>  struct piix_map_db {
> @@ -326,7 +327,7 @@ static const struct pci_device_id piix_pci_tbl[] = {
>  	/* SATA Controller IDE (Lynx Point) */
>  	{ 0x8086, 0x8c01, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata_snb },
>  	/* SATA Controller IDE (Lynx Point) */
> -	{ 0x8086, 0x8c08, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata },
> +	{ 0x8086, 0x8c08, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata_snb },
>  	/* SATA Controller IDE (Lynx Point) */
>  	{ 0x8086, 0x8c09, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata },
>  	/* SATA Controller IDE (Lynx Point-LP) */
> @@ -502,6 +503,7 @@ static const struct piix_map_db *piix_map_db_table[] = {
>  	[ich8m_apple_sata]	= &ich8m_apple_map_db,
>  	[tolapai_sata]		= &tolapai_map_db,
>  	[ich8_sata_snb]		= &ich8_map_db,
> +	[ich8_2port_sata_snb]	= &ich8_2port_map_db,
>  };
>  
>  static struct ata_port_info piix_port_info[] = {
> @@ -643,6 +645,16 @@ static struct ata_port_info piix_port_info[] = {
>  		.port_ops	= &piix_sata_ops,
>  	},
>  
> +	[ich8_2port_sata_snb] =
> +	{
> +		.flags		= PIIX_SATA_FLAGS | PIIX_FLAG_SIDPR | PIIX_FLAG_PIO16,

The line might be worth splitting as it's over 80 characters.

Otherwise the patch looks OK to me.

Libor

> The above patch only fixing the 4 ports IDE controller 32bit PIO mode. 

> +		.pio_mask	= ATA_PIO4,
> +		.mwdma_mask	= ATA_MWDMA2,
> +		.udma_mask	= ATA_UDMA6,
> +		.port_ops	= &piix_sata_ops,
> +	},
> +
> +
>  };
>  
>  static struct pci_bits piix_enable_bits[] = {
> -- 
> 1.6.4.2
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/
> 
>
Youquan Song - Feb. 18, 2013, 4:07 p.m.
> 
> As to my understanding Sergei did not suggest citing the whole commit message.
> I also find the numerous references to Sandy Bridge confusing as this is a fix
> for Lynx Point chipset.
> 
> How about rephrasing the commit message in a way similar to the following one?
> ------8<-----
> We've hit a problem with DVD not recognized on Haswell Desktop platform which
> includes Lynx Point 2-port SATA controller.  This quirk patch disables 32bit
> PIO on the controller in IDE mode.
> ------>8-----
Thanks Libor!
I have updated the comments and sent out a v3 patch out to LKML. 


> > +		.flags		= PIIX_SATA_FLAGS | PIIX_FLAG_SIDPR | PIIX_FLAG_PIO16,
> 
> The line might be worth splitting as it's over 80 characters.
> 
> Otherwise the patch looks OK to me.
> 
Also change it in v3 patch.

Thanks
-Youquan
--
To unsubscribe from this list: send the line "unsubscribe linux-ide" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Patch

diff --git a/drivers/ata/ata_piix.c b/drivers/ata/ata_piix.c
index ef773e1..1993e52 100644
--- a/drivers/ata/ata_piix.c
+++ b/drivers/ata/ata_piix.c
@@ -150,6 +150,7 @@  enum piix_controller_ids {
 	tolapai_sata,
 	piix_pata_vmw,			/* PIIX4 for VMware, spurious DMA_ERR */
 	ich8_sata_snb,
+	ich8_2port_sata_snb,
 };
 
 struct piix_map_db {
@@ -326,7 +327,7 @@  static const struct pci_device_id piix_pci_tbl[] = {
 	/* SATA Controller IDE (Lynx Point) */
 	{ 0x8086, 0x8c01, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata_snb },
 	/* SATA Controller IDE (Lynx Point) */
-	{ 0x8086, 0x8c08, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata },
+	{ 0x8086, 0x8c08, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata_snb },
 	/* SATA Controller IDE (Lynx Point) */
 	{ 0x8086, 0x8c09, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata },
 	/* SATA Controller IDE (Lynx Point-LP) */
@@ -502,6 +503,7 @@  static const struct piix_map_db *piix_map_db_table[] = {
 	[ich8m_apple_sata]	= &ich8m_apple_map_db,
 	[tolapai_sata]		= &tolapai_map_db,
 	[ich8_sata_snb]		= &ich8_map_db,
+	[ich8_2port_sata_snb]	= &ich8_2port_map_db,
 };
 
 static struct ata_port_info piix_port_info[] = {
@@ -643,6 +645,16 @@  static struct ata_port_info piix_port_info[] = {
 		.port_ops	= &piix_sata_ops,
 	},
 
+	[ich8_2port_sata_snb] =
+	{
+		.flags		= PIIX_SATA_FLAGS | PIIX_FLAG_SIDPR | PIIX_FLAG_PIO16,
+		.pio_mask	= ATA_PIO4,
+		.mwdma_mask	= ATA_MWDMA2,
+		.udma_mask	= ATA_UDMA6,
+		.port_ops	= &piix_sata_ops,
+	},
+
+
 };
 
 static struct pci_bits piix_enable_bits[] = {