Hi Tejun, On Mon, Sep 26, 2011 at 3:23 PM, Ming Lei <ming.lei@xxxxxxxxxxxxx> wrote: > 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, -- To unsubscribe from this list: send the line "unsubscribe linux-ide" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html