In some cases, system bus can be configured for 16-bit mode, in this case using of read/write functions for the 32 bit values causes two cycles of 16 bits, which is incorrect. The patch provides its own function to use the proper 16-bit mode. Signed-off-by: Alexander Shiyan <shc_work@xxxxxxx> --- drivers/ata/pata_platform.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/drivers/ata/pata_platform.c b/drivers/ata/pata_platform.c index ecbc3bf..79dd223 100644 --- a/drivers/ata/pata_platform.c +++ b/drivers/ata/pata_platform.c @@ -43,13 +43,28 @@ static int pata_platform_set_mode(struct ata_link *link, struct ata_device **unu return 0; } +static unsigned int pata_platform_xfer_noirq(struct ata_device *dev, + unsigned char *buf, + unsigned int buflen, int rw) +{ + unsigned long flags; + unsigned int consumed; + + local_irq_save(flags); + /* Use 16-bit transfer */ + consumed = ata_sff_data_xfer(dev, buf, buflen, rw); + local_irq_restore(flags); + + return consumed; +} + static struct scsi_host_template pata_platform_sht = { ATA_PIO_SHT(DRV_NAME), }; static struct ata_port_operations pata_platform_port_ops = { .inherits = &ata_sff_port_ops, - .sff_data_xfer = ata_sff_data_xfer_noirq, + .sff_data_xfer = pata_platform_xfer_noirq, .cable_detect = ata_cable_unknown, .set_mode = pata_platform_set_mode, }; -- 1.8.5.5 -- 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