Commit f79ff926 authored by Bartlomiej Zolnierkiewicz's avatar Bartlomiej Zolnierkiewicz Committed by Jeff Garzik

pata_efar: fix wrong PIO timings being programmed

* do not clear PIO timings for master when programming slave
* do not clear PIO timings for device on the other port when
  programming slave device

Both changes should be safe as this is how we have been doing
things in IDE slc90e66 host driver for years.
Signed-off-by: default avatarBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Signed-off-by: default avatarJeff Garzik <jgarzik@redhat.com>
parent 69385943
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
* pata_efar.c - EFAR PIIX clone controller driver * pata_efar.c - EFAR PIIX clone controller driver
* *
* (C) 2005 Red Hat * (C) 2005 Red Hat
* (C) 2009 Bartlomiej Zolnierkiewicz
* *
* Some parts based on ata_piix.c by Jeff Garzik and others. * Some parts based on ata_piix.c by Jeff Garzik and others.
* *
...@@ -118,12 +119,12 @@ static void efar_set_piomode (struct ata_port *ap, struct ata_device *adev) ...@@ -118,12 +119,12 @@ static void efar_set_piomode (struct ata_port *ap, struct ata_device *adev)
int shift = 4 * ap->port_no; int shift = 4 * ap->port_no;
u8 slave_data; u8 slave_data;
idetm_data &= 0xCC0F; idetm_data &= 0xFF0F;
idetm_data |= (control << 4); idetm_data |= (control << 4);
/* Slave timing in separate register */ /* Slave timing in separate register */
pci_read_config_byte(dev, 0x44, &slave_data); pci_read_config_byte(dev, 0x44, &slave_data);
slave_data &= 0x0F << shift; slave_data &= ap->port_no ? 0x0F : 0xF0;
slave_data |= ((timings[pio][0] << 2) | timings[pio][1]) << shift; slave_data |= ((timings[pio][0] << 2) | timings[pio][1]) << shift;
pci_write_config_byte(dev, 0x44, slave_data); pci_write_config_byte(dev, 0x44, slave_data);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment