• Bartlomiej Zolnierkiewicz's avatar
    sis5513: PIO mode setup fixes · 6b8cf772
    Bartlomiej Zolnierkiewicz authored
    * limit max PIO mode to PIO4, this driver doesn't support PIO5 and attempt
      to program PIO5 by config_art_rwp_pio() could result in incorrect PIO
      timings being programmed and possibly the data corruption (for < ATA100
      family chipsets PIO0 timings were used, for ATA100 and ATA100a - the random
      content of test1 variable was used, for ATA133 - MWDMA0 timings were used)
    
    * BUG() in sis5513_tune_chipset() if somebody tries to force unsupported PIO5,
      also cleanup this function a bit while at it
    
    * add comment about PIO0 timings for < ATA100 family chipsets
    
    * remove open-coded best PIO mode selection from config_art_rwp_pio(),
      it contained numerous bugs:
    
      - it didn't check for validity of id->eide_pio_modes and id->eide_pio_iordy
        before using them
    
      - it tried to found out maximum PIO mode basing on minimum IORDY cycle time
        (moreover wrong cycle times were used for PIO1/5)
    
      - it was overriding PIO blacklist and conservative PIO "downgrade" done
        by ide_get_best_pio_mode()
    
    * use sis5513_tune_drive() instead of config_art_rwp_pio()
      in sis5513_config_xfer_rate() so the correct PIO mode is also set
      on drive even if the device is not IORDY/DMA capable
    
    * config_art_rwp_pio() was always setting the best possible mode and not
      the wanted one - fix it and move ide_get_best_pio_mode() call to
      config_chipset_for_pio()
    
    * don't use ide_find_best_mode() in config_chipset_for_pio(), it was being
      overriden by config_art_rwp_pio() for the host timings anyway + we need to
      set the same PIO mode on the device and the host
    
    * pass correct "pio" argument (255 instead of 5) to sis5513_tune_drive() call
      in sis5513_config_xfer_rate() so the best PIO mode is set on the drive
      and not PIO4
    
    * rename sis5513_tune_drive() to sis5513_tuneproc()
      and config_chipset_for_pio() to sis5513_tune_driver()
    
    * bump driver version
    Signed-off-by: default avatarBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
    6b8cf772
sis5513.c 25.6 KB