1. 13 10月, 2007 23 次提交
  2. 12 10月, 2007 17 次提交
    • B
      ide: use only ->set_pio_mode method for programming PIO modes (take 2) · 8f4dd2e4
      Bartlomiej Zolnierkiewicz 提交于
      Use ->set_pio_mode method to program PIO modes in ide_set_xfer_rate()
      (the only place which used ->speedproc to program PIO modes) and remove
      handling of PIO modes from all ->speedproc implementations.
      
      v2:
      * Fix pmac_ide_tune_chipset() comment.
      
      There should be no functionality changes caused by this patch.
      Signed-off-by: NBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      8f4dd2e4
    • B
    • B
    • B
      alim15x3: PIO mode setup fixes · a6fe837e
      Bartlomiej Zolnierkiewicz 提交于
      * Return failure in ->speedproc method for unsupported/invalid transfer
        modes passed from user-space (fixes theoretical OOPS in ali_tune_pio()
        and/or setting random PIO timings on host controller + disabling UDMA
        bit + setting unsupported/invalid transfer mode on the device).
      
      * Don't disable UDMA bit when programming PIO modes.
      
      * Add FIXME about DMA timings never being set.
      
      * Bump driver version.
      Acked-by: NSergei Shtylyov <sshtylyov@ru.mvista.com>
      Signed-off-by: NBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      a6fe837e
    • B
      siimage: fix ->set_pio_mode method to select PIO data transfer · ffe5415c
      Bartlomiej Zolnierkiewicz 提交于
      * Remember to select PIO data transfer (with IORDY monitored) in sil_tune_pio()
        (->set_pio_mode method) so the controller is always programmed correctly for
        PIO transfers (this is important if DMA is not going to be used).
      
      * Don't set DMA/UDMA timings for PIO modes in siimage_tune_chipset().
      
      * Bump driver version.
      Acked-by: NSergei Shtylyov <sshtylyov@ru.mvista.com>
      Signed-off-by: NBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      ffe5415c
    • B
      cs5520: don't enable VDMA in ->speedproc · 326d72f4
      Bartlomiej Zolnierkiewicz 提交于
      There is no need to do it in cs5520_tune_chipset() (->speedproc method)
      since it is correctly handled by cs5520_dma_on() (->ide_dma_on method).
      Acked-by: NSergei Shtylyov <sshtylyov@ru.mvista.com>
      Signed-off-by: NBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      326d72f4
    • B
      sc1200: remove redundant warning message from sc1200_tune_chipset() · fabe1510
      Bartlomiej Zolnierkiewicz 提交于
      ide_config_drive_speed() called by sc1200_set_xfer_mode() already gives
      a meaningful warning message in case of failure.
      Acked-by: NSergei Shtylyov <sshtylyov@ru.mvista.com>
      Signed-off-by: NBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      fabe1510
    • B
      ide-pmac: PIO mode setup fixes (take 3) · c15d5d43
      Bartlomiej Zolnierkiewicz 提交于
      * Add { 0, 0 } entry to {kauai,shasta}_pio_timings[] so kauai_lookup_timing()
        always returns a valid PIO timing (fixes PIO timing not being set for devices
        with minimum PIO cycle <= 120ns).
      
      * Add setting transfer mode on the device to pmac_ide_set_pio_mode().
      
      * Fix pmac_ide_set_pio() to always program chipset for given PIO timing instead
        of only when the device we want to program PIO timing for is the currently
        selected one.
      
      * Now that pmac_ide_set_pio() is fixed there is no need to set transfer mode
        on the device and program chipset for PIO in pmac_ide_tune_chipset()
        (returning 0 == success is not entirely correct but is OK for now since
        the upper layers are only checking ->speedproc return value for DMA modes).
      
      v2:
      * s/speed/XFER_PIO_0 + pio/ in pmac_ide_set_pio_mode() so it actually compiles.
      
      * Removal of kauai_lookup_timing() return value checking went to separate patch.
      
      v3:
      * Use XFER_PIO_0 not XFER_PIO. (Noticed by Ben)
      
      Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
      Cc: Sergei Shtylyov <sshtylyov@ru.mvista.com>
      Signed-off-by: NBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      c15d5d43
    • B
      icside: fix ->speedproc to return on unsupported modes (take 5) · f44ae58a
      Bartlomiej Zolnierkiewicz 提交于
      * All other implementations of ->speedproc return zero on success
        and non-zero on failure.  Currently it doesn't matter for icside host
        driver and isn't a bug per se since:
      
        - ide_set_xfer_rate() return value is ignored by all IDE core users
      
        - icside doesn't (yet!) use ide_tune_dma() in icside_dma_check()
      
        but sooner or later we will need to fix anyway - so lets do it now.
      
      * icside_set_speed() happily accepts unsupported transfer modes which
        results in drive->drive_data being set to the maximum value (480)
        and drive->current_speed being set to the unsupported transfer mode.
      
        Fix it.
      
      v2:
      * The initial version of the patch was broken because it didn't take into
        the account (the different from usual) return values of icside_set_speed()
        (Noticed by Russell).
      
      v3:
      * Remove no longer needed initialization/checking of cycle_time
        (Noticed by Sergei).
      
      * No need to set drive->drive_data if DMA is not going to be used
        (Noticed by Sergei).
      
      * Remove incorrect setting of drive->current_speed
        (Noticed by Sergei).
      
      * Move ide_config_drive_speed() at the end of icside_set_speed().
      
      v4:
      * If DMA mode is not found in icside_dma_check() then just return "-1" and
        don't call icside_set_speed() (v3 got it wrong and "1" was returned instead).
      
      v5:
      * Return "-1"/"0" in icside_set_speed() instead of icside_dma_check() return
        value (just like it was before this patch).
      
      Cc: Russell King <rmk@arm.linux.org.uk>
      Cc: Sergei Shtylyov <sshtylyov@ru.mvista.com>
      Signed-off-by: NBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      f44ae58a
    • B
      sgiioc4: use ide_tune_dma() · ca1997c1
      Bartlomiej Zolnierkiewicz 提交于
      * Add DRV_NAME define and use it instead of sgiioc4_chipset.name.
      
      * Remove no longer needed sgiioc4_chipset.
      
      * Remove needless clearing of ->atapi_dma from ide_dma_sgiioc4().
      
      * Fix ide_dma_sgiioc4() to return success/failure.  Check return value in
        sgiioc4_ide_setup_pci_device() and set hwif->autodma accordingly.  Also add
        missing setting of drive->autodma.
      
      * Add sgiioc4_speedproc() (implementation of ->speedproc method).
      
      * Fix ->mwdma_mask (MWDMA2 mask is 0x04 not 0x02) and remove incorrect
        ->swdma_mask.  Also remove needless initialization of ->ultra_mask.
      
      * Use ide_tune_dma() in sgiioc4_ide_dma_check(), this fixes following bugs:
        - DMA capability bit not being checked on the device
        - DMA blacklist not being checked
        - MWDMA2 mode support by device not being checked
      Acked-by: NSergei Shtylyov <sshtylyov@ru.mvista.com>
      Signed-off-by: NJeremy Higdon <jeremy@sgi.com>
      Signed-off-by: NBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      ca1997c1
    • B
      amd74xx/via82cxxx: use ide_tune_dma() · 55f17e8d
      Bartlomiej Zolnierkiewicz 提交于
      * Use ide_tune_dma() in amd74xx/via82cxxx driver, this fixes following bugs:
        - DMA capability bit not being checked on the device
        - DMA blacklist not being checked
        - DMA mode being programmed even if drive->autodma == 0
          (thus possibly destroying PIO timings)
      
      * Bump driver version.
      Acked-by: NSergei Shtylyov <sshtylyov@ru.mvista.com>
      Signed-off-by: NBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      55f17e8d
    • B
      ide: add ide_set{_max}_pio() (take 4) · 26bcb879
      Bartlomiej Zolnierkiewicz 提交于
      * Add IDE_HFLAG_ABUSE_{PREFETCH,FAST_DEVSEL,DMA_MODES} flags
        and set them in ht6560, cmd640, cmd64x and sc1200 host drivers.
      
      * Add set_pio_mode_abuse() for checking if host driver has a non-standard
        ->tuneproc() implementation and use it in do_special().
      
      * Add ide_set_pio() for setting PIO mode (it uses hwif->pio_mask to find
        the maximum PIO mode supported by the host), also add ide_set_max_pio()
        wrapper for ide_set_pio() to use for auto-tuning.  Convert users of
        ->tuneproc to use ide_set{_max}_pio() where possible.  This leaves only
        do_special(), set_using_pio(), ide_hwif_restore() and ide_set_pio() as
        a direct users of ->tuneproc.
      
      * Remove no longer needed ide_get_best_pio_mode() calls and printk-s
        reporting PIO mode selected from ->tuneproc implementations.
      
      * Rename ->tuneproc hook to ->set_pio_mode and make 'pio' argument const.
      
      * Remove stale comment from ide_config_drive_speed().
      
      v2:
      * Fix "ata_" prefix (Noticed by Jeff).
      
      v3:
      * Minor cleanups/fixups per Sergei's suggestions.
      
      v4:
      * Fix compile problem in drivers/ide/pci/cmd640.c
        (Noticed by Andrew Morton).
      
      * Improve some ->set_pio_mode comments.
      Reviewed-by: NSergei Shtylyov <sshtylyov@ru.mvista.com>
      Cc: Jeff Garzik <jeff@garzik.org>
      Signed-off-by: NBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      26bcb879
    • B
      ide: Kconfig face-lift · 842c19ad
      Bartlomiej Zolnierkiewicz 提交于
      * Convert config options for PCI host drivers to select BLK_DEV_IDEPCI.
      
      * Same for BLK_DEV_IDEDMA_PCI and PCI DMA host drivers, also make this
        config option select BLK_DEV_IDEPCI.
      
      * Remove no longer needed help for BLK_DEV_IDEPCI and BLK_DEV_IDEDMA_PCI.
      
      * Remove redundant IDE_CHIPSETS config option.
      
      As a result of this patch users have now three less config options
      to worry about and can just select host drivers that they need
      (IDE config menu is "flatter").
      Signed-off-by: NBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      842c19ad
    • B
      ide: move ide_rate_filter() calls to the upper layer (take 2) · f212ff28
      Bartlomiej Zolnierkiewicz 提交于
      * Move ide_rate_filter() calls from host drivers to IDE core.
      
      * Make ide_rate_filter() static.
      
      * Make 'speed' argument of ->speedproc const.
      
      v2:
      * Fix it8213_tune_chipset() comment.
      
      There should be no functionality changes caused by this patch.
      Acked-by: NSergei Shtylyov <sshtylyov@ru.mvista.com>
      Signed-off-by: NBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      f212ff28
    • B
      sis5513: add ->udma_filter method for chipset_family >= ATA_133 · 3160d541
      Bartlomiej Zolnierkiewicz 提交于
      * Add sis5513_ata133_udma_filter() for chipset_family >= ATA_133,
        use it to filter UDMA6 mode if ATA133 bit is disabled.
      
      * Remove no longer needed UDMA6 limiting logic from sis5513_tune_chipset().
      
      * Bump driver version.
      
      There should be no functionality changes caused by this patch.
      Acked-by: NSergei Shtylyov <sshtylyov@ru.mvista.com>
      Signed-off-by: NBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      3160d541
    • B
      ide: mode limiting fixes for user requested speed changes · 7670df73
      Bartlomiej Zolnierkiewicz 提交于
      * Add an extra argument to ide_max_dma_mode() for passing requested transfer
        mode.  Use it as an upper limit when finding the best DMA for device/host.
      
      * Rename ide_max_dma_mode() to ide_find_dma_mode() and at the same time add
        ide_max_dma_mode() wrapper which passes XFER_UDMA_6 as a requested mode to
        ide_find_dma_mode().  Also add inline ide_find_dma_mode() version for
        CONFIG_BLK_DEV_IDEDMA=n case.
      
      * Pass requested transfer mode from ide_find_dma_mode() to ide_get_mode_mask()
        to avoid false warning from eighty_ninty_three().
      
      * Use ide_find_dma_mode() to limit the user requested transfer mode in
        ide_rate_filter().  Also limit the requested mode by host max PIO mode.
      
      
      Above changes make ide_rate_filter() to:
      
      * Clip desired transfer mode down if it is invalid (values 0x0F, 0x13-0x19
        and 0x25-0x39, values > 0x46 were already clipped down, same for values
        0x25-0x39 but iff UDMA was not supported by the host).
      
      * Clip desired transfer mode down if it is currently unsupported by IDE core
        (PIO6 and MWDMA3-4, the latter were already clipped down but iff UDMA was
        not supported by the host).
      
      * Clip desired transfer mode down according to the host capabilities
        (UDMA modes were already clipped down but MWDMA/SWDMA/PIO weren't,
        also ->atapi_dma flag was not respected).
      
      * Clip desired transfer mode down according to the device capabilities
        (except PIO modes for now which require mode work) - shouldn't be a
        problem since ide_set_xfer_rate() is called _after_ device has accepted
        given transfer mode.
      
      and also result in a number of host driver specific bugfixes:
      
      * icside
        - clip unsupported PIO5 mode down
        - fix unsupported/invalid modes being set in drive->current_speed
      
      * ide-cris
        - clip unsupported PIO5 and SWDMA0-2 modes down
        - clip DMA modes down for ATAPI devices
        - fix BUG() on unsupported/invalid modes
      
      * au1xxx-ide
        - clip unsupported PIO5, SWDMA0-2 and MWDMA0-2
          (if BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA=n) modes down
      
      * aec62xx
        - clip unsupported PIO5 and SWDMA0-2 modes down
        - clip DMA modes down for ATAPI devices
        - fix 0x00 being programmed as PIO timing for unsupported/invalid modes
        - fix unsupported/invalid modes being set on the device
      
      * alim15x3
        - clip DMA modes down for ATAPI devices (chipset revision == 0x20 only)
        - fix theoretical OOPS for 0x0F mode
        - fix unsupported/invalid modes being set on the device
      
      * amd74xx
        - clip unsupported SWDMA0-2 (on COBRA_7401 revs <= 7) modes down
        - fix random PIO timings being set for unsupported/invalid modes
        - fix unsupported/invalid modes being set on the device
      
      * atiixp
        - clip unsupported PIO5 and SWDMA0-2 modes down
        - fix cached MWDMA mode being cleared for unsupported/invalid modes
        - fix PIO{0,2} timings being programmed for unsupported/invalid modes
        - fix theoretical OOPS for PIO5-6 and 0x0F modes
        - fix unsupported/invalid modes being set on the device
      
      * cmd64x
        - clip unsupported SWDMA0-2 modes down
      
      * cs5530
        - clip unsupported PIO5 and SWDMA0-2 modes down
        - fix unsupported/invalid modes being set on the device
        - fix BUG() on unsupported/invalid modes
          (which happened if the device accepted the setting)
      
      * cs5535
        - clip unsupported PIO5 and SWDMA0-2 modes down
        - fix unsupported/invalid modes being set on the device
        - fix theoretical OOPS for PIO5-6 and 0x0F modes
      
      * hpt34x
        - clip DMA modes down for ATAPI devices
        - fix invalid timings being programmed for unsupported/invalid modes
        - fix unsupported/invalid modes being set on the device
      
      * hpt366
        - clip unsupported PIO5 and SWDMA0-2 modes down
        - fix PIO0 timings being programmed for unsupported/invalid modes
        - fix DMA timings being cleared for MWDMA3-4 and 0x25-0x39 modes
        - fix unsupported/invalid modes being set on the device
      
      * it8213
        - clip unsupported PIO5, SWDMA0-1 and MWDMA0 modes down
      
      * it821x
        - clip unsupported PIO5 and SWDMA0-2 modes down
        - clip DMA modes down for ATAPI devices
          (chipset in smart mode and revision 0x10 in pass-through mode)
      
      * jmicron
        - clip unsupported SWDMA0-2 modes down
        - fix unsupported/invalid modes being set on the device
      
      * pdc202xx_new
        - clip unsupported PIO5 and SWDMA0-2 modes down
        - fix unsupported/invalid modes being set on the device
      
      * pdc202xx_old
        - clip unsupported PIO5 mode down
        - fix incorrect timings being set for unsupported/invalid modes
        - fix unsupported/invalid modes being set on the device
      
      * piix
        - clip unsupported PIO5, SWDMA0-1 and MWDMA0 modes down
      
      * sc1200
        - clip unsupported PIO5 and SWDMA0-2 modes down
        - fix unsupported/invalid modes being set on the device
        - fix BUG() on unsupported/invalid modes
          (which happened if the device accepted the setting)
      
      * scc_pata
        - clip unsupported PIO5, SWDMA0-2 and MWDMA0-2 modes down
      
      * serverworks
        - clip unsupported PIO5 and SWDMA0-2 modes down
        - fix DMA/UDMA timings/settings being cleared for unsupported/invalid modes
        - fix unsupported/invalid modes being set on the device
      
      * siimage
        - clip unsupported PIO5 and SWDMA0-2 modes down
        - clip DMA modes down for ATAPI devices (SATA chipsets)
      
      * sis5513
        - clip unsupported PIO5 mode down
        - fix BUG() on unsupported/invalid modes
      
      * sl82c105
        - clip unsupported SWDMA0-2 modes down
      
      * slc90e66
        - clip unsupported PIO5, SWDMA0-1 and MWDMA0 modes down
      
      * tc86c001
        - clip unsupported PIO5 and SWDMA0-2 modes down
        - fix PIO0 timings being programmed for PIO5/0x0F/SWDMA0-2/0x13-0x19 modes
        - fix invalid 0x00 DMA timing being programmed for MWDMA3-4/0x25-0x39 modes
        - fix unsupported/invalid modes being set on the device
      
      * triflex
        - clip unsupported PIO5 mode down
      
      * via82cxxx
        - fix random PIO timings being set for unsupported/invalid modes
        - fix unsupported/invalid modes being set on the device
      
      * pmac
        - clip unsupported PIO5 and SWDMA0-2 modes down
      
      * cmd640/ht6560b
        - clip DMA modes down (if CONFIG_BLK_DEV_IDEDMA=y)
        - fix PIO5 being clipped to PIO4 (if CONFIG_BLK_DEV_IDEDMA=n)
      
      * opti621
        - clip DMA modes down (if CONFIG_BLK_DEV_IDEDMA=y)
        - clip unsupported PIO4 to PIO3 (if CONFIG_BLK_DEV_IDEDMA=n)
      
      
      While at it:
      
      * Use ide_rate_filter() in cs5520.c::cs5520_tune_chipset().
      
      * Remove no longer needed checks from hpt366.c::hpt3{6,7}x_tune_chipset().
      Acked-by: NSergei Shtylyov <sshtylyov@ru.mvista.com>
      Signed-off-by: NBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      7670df73
    • B
      ide: add missing ide_rate_filter() calls to ->speedproc()-s · a8028fcb
      Bartlomiej Zolnierkiewicz 提交于
      * Fix icside, cris-ide, au1xxx-ide, amd74xx, via82cxxx and pmac host drivers
        to use ide_rate_filter().
      
        This results in the following modes (from user requests) being clipped down:
        - invalid modes (values 0x46-0xFF)  [ for all hosts ]
        - unsupported by a host UDMA modes  [ for hosts which support UDMA]
        - all UDMA modes and MWDMA3-4 modes [ for hosts which don't support UDMA ]
        - invalid modes (values 0x25-0x39)  [ for hosts which don't support UDMA ]
      
      * Host driver specific changes in behavior:
      
        icside:
          - no change
      
        cris-ide
          - clip unsupported UDMA3-6 modes down
          - fix BUG() on trying to set unsupported UDMA3-6 modes
      
        au1xxx-ide/pmac
          - clip unsupported UDMA modes down
      
        amd74xx/via82cxxx
          - clip unsupported UDMA modes down
          - fix random PIO timings being set for unsupported/invalid modes
          - fix unsupported/invalid modes being set on the device
      
      * While at it remove no longer needed checks from pmac.c driver.
      Acked-by: NSergei Shtylyov <sshtylyov@ru.mvista.com>
      Signed-off-by: NBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      a8028fcb