Thread (16 messages) 16 messages, 5 authors, 2011-10-01

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

From: Ming Lei <hidden>
Date: 2011-09-28 04:58:27
Subsystem: libata subsystem (serial and parallel ata drivers), the rest · Maintainers: Damien Le Moal, Niklas Cassel, Linus Torvalds

Hi Tejun,

On Mon, Sep 26, 2011 at 3:23 PM, Ming Lei [off-list ref] wrote:
quoted hunk ↗ jump to hunk
How about this one below?
diff --git a/drivers/ata/ata_piix.c b/drivers/ata/ata_piix.c
index 43107e9..b35086b 100644
--- a/drivers/ata/ata_piix.c
+++ b/drivers/ata/ata_piix.c
@@ -147,6 +147,7 @@ enum piix_controller_ids {
       ich8m_apple_sata,       /* locks up on second port enable */
       tolapai_sata,
       piix_pata_vmw,                  /* PIIX4 for VMware, spurious DMA_ERR */
+       ich8_sata_snb,
 };

 struct piix_map_db {
@@ -298,7 +299,7 @@ static const struct pci_device_id piix_pci_tbl[] = {
       /* SATA Controller IDE (PCH) */
       { 0x8086, 0x3b2e, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata },
       /* SATA Controller IDE (CPT) */
-       { 0x8086, 0x1c00, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata },
+       { 0x8086, 0x1c00, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata_snb },
       /* SATA Controller IDE (CPT) */
       { 0x8086, 0x1c01, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata },
       /* SATA Controller IDE (CPT) */
@@ -335,6 +336,11 @@ static struct scsi_host_template piix_sht = {
       ATA_BMDMA_SHT(DRV_NAME),
 };

+static struct ata_port_operations piix_sata_snb_ops = {
+       .inherits               = &ata_bmdma_port_ops,
+       .sff_irq_check          = piix_irq_check,
+};
+
 static struct ata_port_operations piix_sata_ops = {
       .inherits               = &ata_bmdma32_port_ops,
       .sff_irq_check          = piix_irq_check,
@@ -478,6 +484,7 @@ static const struct piix_map_db *piix_map_db_table[] = {
       [ich8_2port_sata]       = &ich8_2port_map_db,
       [ich8m_apple_sata]      = &ich8m_apple_map_db,
       [tolapai_sata]          = &tolapai_map_db,
+       [ich8_sata_snb]         = &ich8_map_db,
 };

 static struct ata_port_info piix_port_info[] = {
@@ -606,6 +613,15 @@ static struct ata_port_info piix_port_info[] = {
               .port_ops       = &piix_vmw_ops,
       },

+       [ich8_sata_snb] =
+       {
+               .flags          = PIIX_SATA_FLAGS | PIIX_FLAG_SIDPR,
+               .pio_mask       = ATA_PIO4,
+               .mwdma_mask     = ATA_MWDMA2,
+               .udma_mask      = ATA_UDMA6,
+               .port_ops       = &piix_sata_snb_ops,
+       },
+
 };

 static struct pci_bits piix_enable_bits[] = {
After testing, I found the patch above does not make DVD drive work.
But plus the below[1], dvd drive starts to working. Since piix_sidpr_sata_ops
is hardcode in ata_piix.c, looks like it is a bit difficult to figure
out a clean fix.

Tejun, could you give some comments about it?

thanks,
--
Ming Lei

[1],
diff --git a/drivers/ata/ata_piix.c b/drivers/ata/ata_piix.c
index 150d286..3b3785d 100644
--- a/drivers/ata/ata_piix.c
+++ b/drivers/ata/ata_piix.c
@@ -376,7 +376,7 @@ static struct scsi_host_template piix_sidpr_sht = {
 };

 static struct ata_port_operations piix_sidpr_sata_ops = {
-	.inherits		= &piix_sata_ops,
+	.inherits		= &piix_sata_snb_ops,
 	.hardreset		= sata_std_hardreset,
 	.scr_read		= piix_sidpr_scr_read,
 	.scr_write		= piix_sidpr_scr_write,
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help