Message ID | 1452230332-14926-1-git-send-email-danielwa@cisco.com |
---|---|
State | Not Applicable |
Delegated to: | David Miller |
Headers | show |
Hello, Daniel. On Thu, Jan 07, 2016 at 09:18:51PM -0800, Daniel Walker wrote: > From: Anil Veliyankara Madam <aveliyan@cisco.com> > > Since viking flash has a problem in the MWDMA mode which causes data > corruption, this patch allows the driver to detect the model number > and switch the IO mode to PIO6 if it's a viking flash. Hmmm... is this specific to pata_octeon_cf or should it apply to the device regardless of the controller in use? Thanks.
On 01/08/2016 07:30 AM, Tejun Heo wrote: > Hello, Daniel. > > On Thu, Jan 07, 2016 at 09:18:51PM -0800, Daniel Walker wrote: >> From: Anil Veliyankara Madam <aveliyan@cisco.com> >> >> Since viking flash has a problem in the MWDMA mode which causes data >> corruption, this patch allows the driver to detect the model number >> and switch the IO mode to PIO6 if it's a viking flash. > Hmmm... is this specific to pata_octeon_cf or should it apply to the > device regardless of the controller in use? > > It's not specific to pata_octeon_cf , it should be applied to the device regardless of controller. Is there a better place to put this to cover all ? Daniel -- 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
Hello, On Fri, Jan 8, 2016 at 3:11 PM, Daniel Walker <danielwa@cisco.com> wrote: > It's not specific to pata_octeon_cf , it should be applied to the device > regardless of controller. Is there a better place to put this to cover all ? Yeap, libata-core.c:ata_device_blacklist[] Thanks.
On 01/08/2016 12:22 PM, Tejun Heo wrote: > Hello, > > On Fri, Jan 8, 2016 at 3:11 PM, Daniel Walker <danielwa@cisco.com> wrote: >> It's not specific to pata_octeon_cf , it should be applied to the device >> regardless of controller. Is there a better place to put this to cover all ? > Yeap, libata-core.c:ata_device_blacklist[] > > Thanks. > Will do (and resend). Thanks for the review. Daniel -- 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
diff --git a/drivers/ata/pata_octeon_cf.c b/drivers/ata/pata_octeon_cf.c index 2724595..9d05bc9 100644 --- a/drivers/ata/pata_octeon_cf.c +++ b/drivers/ata/pata_octeon_cf.c @@ -826,6 +826,30 @@ static unsigned int octeon_cf_qc_issue(struct ata_queued_cmd *qc) return 0; } +static unsigned long octeon_cf_mode_filter(struct ata_device *dev, + unsigned long mask) +{ + const char viking_model_num[] = "VRFDFC22048UCHC-TE"; + unsigned char model_num[ATA_ID_PROD_LEN + 1]; + + if (dev->class != ATA_DEV_ATA) + return mask; + + ata_id_c_string(dev->id, model_num, ATA_ID_PROD, sizeof(model_num)); + /* + * Viking flash with SMI controller causes read errors in + * MWDMA modes. Force PIO mode. + */ + if (strncmp(model_num, viking_model_num, + strlen(viking_model_num)) == 0) { + DPRINTK("Viking flash with SMI controller detected."); + DPRINTK("Forcing PIO mode.\n"); + mask &= ATA_MASK_PIO; + } + + return mask; +} + static struct ata_port_operations octeon_cf_ops = { .inherits = &ata_sff_port_ops, .check_atapi_dma = octeon_cf_check_atapi_dma, @@ -835,6 +859,7 @@ static struct ata_port_operations octeon_cf_ops = { .sff_irq_on = octeon_cf_ata_port_noaction, .sff_irq_clear = octeon_cf_ata_port_noaction, .cable_detect = ata_cable_40wire, + .mode_filter = octeon_cf_mode_filter, .set_piomode = octeon_cf_set_piomode, .set_dmamode = octeon_cf_set_dmamode, .dev_config = octeon_cf_dev_config,