piix/slc90e66: fix PIO1 handling in ->speedproc method (take 2)

* Don't call {piix,slc90e66}_dma_2_pio() for PIO modes in
  {piix,slc90e66}_tune_chipset().

* Add PIO1 handling to {piix,slc90e66}_tune_chipset().

* Bump driver version.  

v2:
* Remove PIO modes from {piix,slc90e66}_dma_2_pio(), they are no longer needed
  there (Noticed by Sergei)
Acked-by: default avatarSergei Shtylyov <sshtylyov@ru.mvista.com>
Signed-off-by: default avatarBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
parent 8b6b33be
/* /*
* linux/drivers/ide/pci/piix.c Version 0.50 Jun 10, 2007 * linux/drivers/ide/pci/piix.c Version 0.51 Jul 6, 2007
* *
* Copyright (C) 1998-1999 Andrzej Krzysztofowicz, Author and Maintainer * Copyright (C) 1998-1999 Andrzej Krzysztofowicz, Author and Maintainer
* Copyright (C) 1998-2000 Andre Hedrick <andre@linux-ide.org> * Copyright (C) 1998-2000 Andre Hedrick <andre@linux-ide.org>
...@@ -109,7 +109,7 @@ static int no_piix_dma; ...@@ -109,7 +109,7 @@ static int no_piix_dma;
* piix_dma_2_pio - return the PIO mode matching DMA * piix_dma_2_pio - return the PIO mode matching DMA
* @xfer_rate: transfer speed * @xfer_rate: transfer speed
* *
* Returns the nearest equivalent PIO timing for the PIO or DMA * Returns the nearest equivalent PIO timing for the DMA
* mode requested by the controller. * mode requested by the controller.
*/ */
...@@ -123,20 +123,14 @@ static u8 piix_dma_2_pio (u8 xfer_rate) { ...@@ -123,20 +123,14 @@ static u8 piix_dma_2_pio (u8 xfer_rate) {
case XFER_UDMA_1: case XFER_UDMA_1:
case XFER_UDMA_0: case XFER_UDMA_0:
case XFER_MW_DMA_2: case XFER_MW_DMA_2:
case XFER_PIO_4:
return 4; return 4;
case XFER_MW_DMA_1: case XFER_MW_DMA_1:
case XFER_PIO_3:
return 3; return 3;
case XFER_SW_DMA_2: case XFER_SW_DMA_2:
case XFER_PIO_2:
return 2; return 2;
case XFER_MW_DMA_0: case XFER_MW_DMA_0:
case XFER_SW_DMA_1: case XFER_SW_DMA_1:
case XFER_SW_DMA_0: case XFER_SW_DMA_0:
case XFER_PIO_1:
case XFER_PIO_0:
case XFER_PIO_SLOW:
default: default:
return 0; return 0;
} }
...@@ -269,6 +263,7 @@ static int piix_tune_chipset (ide_drive_t *drive, u8 xferspeed) ...@@ -269,6 +263,7 @@ static int piix_tune_chipset (ide_drive_t *drive, u8 xferspeed)
case XFER_PIO_4: case XFER_PIO_4:
case XFER_PIO_3: case XFER_PIO_3:
case XFER_PIO_2: case XFER_PIO_2:
case XFER_PIO_1:
case XFER_PIO_0: break; case XFER_PIO_0: break;
default: return -1; default: return -1;
} }
...@@ -299,7 +294,11 @@ static int piix_tune_chipset (ide_drive_t *drive, u8 xferspeed) ...@@ -299,7 +294,11 @@ static int piix_tune_chipset (ide_drive_t *drive, u8 xferspeed)
pci_write_config_byte(dev, 0x55, (u8) reg55 & ~w_flag); pci_write_config_byte(dev, 0x55, (u8) reg55 & ~w_flag);
} }
if (speed > XFER_PIO_4)
piix_tune_pio(drive, piix_dma_2_pio(speed)); piix_tune_pio(drive, piix_dma_2_pio(speed));
else
piix_tune_pio(drive, speed - XFER_PIO_0);
return ide_config_drive_speed(drive, speed); return ide_config_drive_speed(drive, speed);
} }
......
/* /*
* linux/drivers/ide/pci/slc90e66.c Version 0.14 February 8, 2007 * linux/drivers/ide/pci/slc90e66.c Version 0.15 Jul 6, 2007
* *
* Copyright (C) 2000-2002 Andre Hedrick <andre@linux-ide.org> * Copyright (C) 2000-2002 Andre Hedrick <andre@linux-ide.org>
* Copyright (C) 2006-2007 MontaVista Software, Inc. <source@mvista.com> * Copyright (C) 2006-2007 MontaVista Software, Inc. <source@mvista.com>
...@@ -29,20 +29,14 @@ static u8 slc90e66_dma_2_pio (u8 xfer_rate) { ...@@ -29,20 +29,14 @@ static u8 slc90e66_dma_2_pio (u8 xfer_rate) {
case XFER_UDMA_1: case XFER_UDMA_1:
case XFER_UDMA_0: case XFER_UDMA_0:
case XFER_MW_DMA_2: case XFER_MW_DMA_2:
case XFER_PIO_4:
return 4; return 4;
case XFER_MW_DMA_1: case XFER_MW_DMA_1:
case XFER_PIO_3:
return 3; return 3;
case XFER_SW_DMA_2: case XFER_SW_DMA_2:
case XFER_PIO_2:
return 2; return 2;
case XFER_MW_DMA_0: case XFER_MW_DMA_0:
case XFER_SW_DMA_1: case XFER_SW_DMA_1:
case XFER_SW_DMA_0: case XFER_SW_DMA_0:
case XFER_PIO_1:
case XFER_PIO_0:
case XFER_PIO_SLOW:
default: default:
return 0; return 0;
} }
...@@ -136,6 +130,7 @@ static int slc90e66_tune_chipset (ide_drive_t *drive, u8 xferspeed) ...@@ -136,6 +130,7 @@ static int slc90e66_tune_chipset (ide_drive_t *drive, u8 xferspeed)
case XFER_PIO_4: case XFER_PIO_4:
case XFER_PIO_3: case XFER_PIO_3:
case XFER_PIO_2: case XFER_PIO_2:
case XFER_PIO_1:
case XFER_PIO_0: break; case XFER_PIO_0: break;
default: return -1; default: return -1;
} }
...@@ -156,7 +151,11 @@ static int slc90e66_tune_chipset (ide_drive_t *drive, u8 xferspeed) ...@@ -156,7 +151,11 @@ static int slc90e66_tune_chipset (ide_drive_t *drive, u8 xferspeed)
pci_write_config_word(dev, 0x4a, reg4a & ~a_speed); pci_write_config_word(dev, 0x4a, reg4a & ~a_speed);
} }
if (speed > XFER_PIO_4)
slc90e66_tune_pio(drive, slc90e66_dma_2_pio(speed)); slc90e66_tune_pio(drive, slc90e66_dma_2_pio(speed));
else
slc90e66_tune_pio(drive, speed - XFER_PIO_0);
return ide_config_drive_speed(drive, speed); return ide_config_drive_speed(drive, speed);
} }
......
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