1. 01 Feb, 2008 1 commit
  2. 26 Jan, 2008 6 commits
  3. 25 Jan, 2008 8 commits
  4. 10 Jan, 2008 1 commit
  5. 12 Dec, 2007 1 commit
    • Bartlomiej Zolnierkiewicz's avatar
      ide: DMA reporting and validity checking fixes (take 3) · 3ab7efe8
      Bartlomiej Zolnierkiewicz authored
      * ide_xfer_verbose() fixups:
        - beautify returned mode names
        - fix PIO5 reporting
        - make it return 'const char *'
      
      * Change printk() level from KERN_DEBUG to KERN_INFO in ide_find_dma_mode().
      
      * Add ide_id_dma_bug() helper based on ide_dma_verbose() to check for invalid
        DMA info in identify block.
      
      * Use ide_id_dma_bug() in ide_tune_dma() and ide_driveid_update().
      
        As a result DMA won't be tuned or will be disabled after tuning if device
        reports inconsistent info about enabled DMA mode (ide_dma_verbose() does the
        same checks while the IDE device is probed by ide-{cd,disk} device driver).
      
      * Remove no longer needed ide_dma_verbose().
      
      This patch should fix the following problem with out-of-sync IDE messages
      reported by Nick Warne:
      
             hdd: ATAPI 48X DVD-ROM DVD-R-RAM CD-R/RW drive, 2048kB Cache<7>hdd:
             skipping word 93 validity check
              , UDMA(66)
      
      and later debugged by Mark Lord to be caused by:
      
              ide_dma_verbose()
                      printk( ... "2048kB Cache");
              eighty_ninty_three()
                      printk(KERN_DEBUG "%s: skipping word 93 validity check\n");
              ide_dma_verbose()
                      printk(", UDMA(66)"
      
      Please note that as a result ide-{cd,disk} device drivers won't report the
      DMA speed used but this is intended since now DMA mode being used is always
      reported by IDE core code.
      
      v2:
      * fixes suggested by Randy:
        - use KERN_CONT for printk()-s in ide-{cd,disk}.c
        - don't remove argument name from ide_xfer_verbose() declaration
      
      v3:
      * Remove incorrect check for (id->field_valid & 1) from ide_id_dma_bug()
        (spotted by Sergei).
      
      * "XFER SLOW" -> "PIO SLOW" in ide_xfer_verbose() (suggested by Sergei).
      
      * Fix ide_find_dma_mode() to report the correct mode ('mode' after being
        limited by 'req_mode').
      
      Cc: Sergei Shtylyov <sshtylyov@ru.mvista.com>
      Cc: Nick Warne <nick@ukfsn.org>
      Cc: Mark Lord <lkml@rtr.ca>
      Cc: Randy Dunlap <randy.dunlap@oracle.com>
      Signed-off-by: default avatarBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      3ab7efe8
  6. 27 Nov, 2007 3 commits
  7. 05 Nov, 2007 2 commits
  8. 26 Oct, 2007 1 commit
  9. 19 Oct, 2007 1 commit
  10. 16 Oct, 2007 1 commit
    • Bartlomiej Zolnierkiewicz's avatar
      ide: remove ->ide_dma_check (take 2) · 0ae2e178
      Bartlomiej Zolnierkiewicz authored
      * Add IDE_HFLAG_TRUST_BIOS_FOR_DMA host flag for host drivers that depend
        on BIOS for programming device/controller for DMA.  Set it in cy82c693,
        generic, ns87415, opti621 and trm290 host drivers.
      
      * Add IDE_HFLAG_VDMA host flag for host drivers using VDMA.  Set it in cs5520
        host driver.
      
      * Teach ide_tune_dma() about IDE_HFLAG_TRUST_BIOS_FOR_DMA flag.
      
      * Add generic ide_dma_check() helper and remove all open coded ->ide_dma_check
        implementations.  Fix all places checking for presence of ->ide_dma_check
        hook to check for ->ide_dma_on instead.
      
      * Remove no longer needed code from config_drive_for_dma().
      
      * Make ide_tune_dma() static.
      
      v2:
      * Fix config_drive_for_dma() return values.
      
      * Fix ide-dma.c build for CONFIG_BLK_DEV_IDEDMA_PCI=n by adding
        dummy config_drive_for_dma() inline.
      
      * Fix IDE_HFLAG_TRUST_BIOS_FOR_DMA handling in ide_dma_check().
      
      * Fix init_hwif_it8213() comment.
      
      There should be no functionality changes caused by this patch.
      
      Cc: Sergei Shtylyov <sshtylyov@ru.mvista.com>
      Signed-off-by: default avatarBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      0ae2e178
  11. 13 Oct, 2007 6 commits
    • Bartlomiej Zolnierkiewicz's avatar
      ide: remove CONFIG_IDEDMA_IVB config option · 76bb7782
      Bartlomiej Zolnierkiewicz authored
      Devices which don't set word 93 validation bit should be now handled by
      ide-iops.c::ivb_list[] and for debugging purposes cable detection can be
      completely overriden with "idex=ata66" parameter.
      Signed-off-by: default avatarBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      76bb7782
    • Bartlomiej Zolnierkiewicz's avatar
      ide: change master/slave IDENTIFY order · b140b99c
      Bartlomiej Zolnierkiewicz authored
      Need to probe slave device first to make it release PDIAG-
      (this is required for correct device side cable detection).
      
      Based on libata commit f31f0cc2.
      
      Thanks to Craig for testing this patch.
      
      Cc: Craig Block <chblock3@yahoo.com>
      Signed-off-by: default avatarBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      b140b99c
    • Bartlomiej Zolnierkiewicz's avatar
      ide: move ide_config_drive_speed() calls to upper layers (take 2) · 88b2b32b
      Bartlomiej Zolnierkiewicz authored
      * Convert {ide_hwif_t,ide_pci_device_t}->host_flag to be u16.
      
      * Add IDE_HFLAG_POST_SET_MODE host flag to indicate the need to program 
        the host for the transfer mode after programming the device.  Set it
        in au1xxx-ide, amd74xx, cs5530, cs5535, pdc202xx_new, sc1200, pmac
        and via82cxxx host drivers.
      
      * Add IDE_HFLAG_NO_SET_MODE host flag to indicate the need to completely
        skip programming of host/device for the transfer mode ("smart" hosts).
        Set it in it821x host driver and check it in ide_tune_dma().
      
      * Add ide_set_pio_mode()/ide_set_dma_mode() helpers and convert all
        direct ->set_pio_mode/->speedproc users to use these helpers.
      
      * Move ide_config_drive_speed() calls from ->set_pio_mode/->speedproc
        methods to callers.
      
      * Rename ->speedproc method to ->set_dma_mode, make it void and update
        all implementations accordingly.
      
      * Update ide_set_xfer_rate() comments.
      
      * Unexport ide_config_drive_speed().
      
      v2:
      * Fix issues noticed by Sergei:
        - export ide_set_dma_mode() instead of moving ->set_pio_mode abuse wrt
          to setting DMA modes from sc1200_set_pio_mode() to do_special()
        - check IDE_HFLAG_NO_SET_MODE in ide_tune_dma()
        - check for (hwif->set_pio_mode) == NULL in ide_set_pio_mode()
        - check for (hwif->set_dma_mode) == NULL in ide_set_dma_mode()
        - return -1 from ide_set_{pio,dma}_mode() if ->set_{pio,dma}_mode == NULL
        - don't set ->set_{pio,dma}_mode on it821x in "smart" mode
        - fix build problem in pmac.c
        - minor fixes in au1xxx-ide.c/cs5530.c/siimage.c
        - improve patch description
      
      Changes in behavior caused by this patch:
      - HDIO_SET_PIO_MODE ioctl would now return -ENOSYS for attempts to change
        PIO mode if it821x controller is in "smart" mode
      - removal of two debugging printk-s (from cs5530.c and sc1200.c)
      - transfer modes 0x00-0x07 passed from user space may be programmed twice on
        the device (not really an issue since 0x00 is not supported correctly by
        any host driver ATM, 0x01 is not supported at all and 0x02-0x07 are invalid)
      Acked-by: default avatarSergei Shtylyov <sshtylyov@ru.mvista.com>
      Signed-off-by: default avatarBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      88b2b32b
    • Bartlomiej Zolnierkiewicz's avatar
      ide-pmac: remove pmac_ide_do_setfeature() (take 2) · aedea591
      Bartlomiej Zolnierkiewicz authored
      Use ide_config_drive_speed() instead of pmac_ide_do_setfeature() and remove
      the latter, also  ide-iops.c::__ide_wait_stat() could be static again.
      
      Since for IDE PMAC host driver IDE_CONTROL_REG is always true, device's
      ->quirk_list is always zero and ->ide_dma_host_{on,off} are nops than
      the only changes in behavior are:
      
      * if PIO mode is set then ->dma_off_queitly is called to disable DMA
      
      * if setting transfer mode fails ide_dump_status() is called to dump status
      
      v2:
      * IDE PMAC controllers allow separate PIO and DMA timings and PPC userland
        depends on this fact, and calls "hdparm -p" without calling "hdparm -d".
      
        Therefore to compensate for DMA being disabled by ide_config_drive_speed()
        for PIO modes:
      
        - add IDE_HFLAG_SET_PIO_MODE_KEEP_DMA flag and set it in PMAC host driver
      
        - add handling of the new flag to ide-io.c::do_special()
      
      Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
      Signed-off-by: default avatarBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      aedea591
    • Bartlomiej Zolnierkiewicz's avatar
      ide-pmac: use __ide_wait_stat() · ddf15102
      Bartlomiej Zolnierkiewicz authored
      * Use __ide_wait_stat() instead of wait_for_ready() in pmac_ide_do_setfeature().
      
      While at it do following changes to match __ide_wait_stat() call in
      ide_config_drive_speed():
      
      * Wait WAIT_CMD time (20 sec) instead of 2 sec for device to clear BUSY_STAT.
      
      * Check DRQ_STAT bit (shouldn't be set for good device status).
      
      Also remove no longer needed wait_for_ready() from ide-iops.c.
      Acked-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
      Signed-off-by: default avatarBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      ddf15102
    • Bartlomiej Zolnierkiewicz's avatar
      ide: add __ide_wait_stat() helper · 74af21cf
      Bartlomiej Zolnierkiewicz authored
      * Split off checking of the status register from ide_wait_stat() to
        __ide_wait_stat() helper.
      
      * Use the new helper in ide_config_drive_speed().  The only change in the
        functionality is that the function now fails if after 20 sec (WAIT_CMD)
        device is still busy (BUSY_STAT bit is set) while previously instead of
        failing the function continued with checking for the correct device status
        (which would give the device additional 10 usec to clear BUSY_STAT bit).
      
      * Remove stale comment for ide_config_drive_speed().
      
      * Remove duplicate comment for ide_wait_stat() from <linux/ide.h>.
      
      Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
      Acked-by: default avatarSergei Shtylyov <sshtylyov@ru.mvista.com>
      Signed-off-by: default avatarBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      74af21cf
  12. 11 Oct, 2007 1 commit
    • Bartlomiej Zolnierkiewicz's avatar
      ide: add ide_set{_max}_pio() (take 4) · 26bcb879
      Bartlomiej Zolnierkiewicz authored
      * 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: default avatarSergei Shtylyov <sshtylyov@ru.mvista.com>
      Cc: Jeff Garzik <jeff@garzik.org>
      Signed-off-by: default avatarBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      26bcb879
  13. 11 Sep, 2007 1 commit
  14. 20 Aug, 2007 3 commits
    • Bartlomiej Zolnierkiewicz's avatar
      ide-disk: workaround for buggy HPA support on ST340823A (take 3) · b0244a00
      Bartlomiej Zolnierkiewicz authored
      This disk reports total number of sectors instead of maximum sector address
      in response to READ_NATIVE_MAX_ADDRESS command and also happily accepts
      SET_MAX_ADDRESS command with the bogus value.  This results in +1 sector
      capacity being used and errors on attempts to use the last sector.
      
      ...
      hdd: Host Protected Area detected.
              current capacity is 78165360 sectors (40020 MB)
              native  capacity is 78165361 sectors (40020 MB)
      hdd: Host Protected Area disabled.
      ...
      hdd: reading: block=78165360, sectors=1, buffer=0xc1e63000
      hdd: dma_intr: status=0x51 { DriveReady SeekComplete Error }
      hdd: dma_intr: error=0x10 { SectorIdNotFound }, LBAsect=78165360, sector=78165360
      ...
      
      Add hpa_list[] table and workaround the issue in idedisk_check_hpa().
      
      v2:
      * Add missing export and improve patch description a bit.
      
      v3:
      * Add list termination.  (From Mikko)
      
      Fixes kernel bugzilla bug #8816.
      
      Thanks to Mikko for investigating the issue and helping with this patch.
      
      Cc: Mikko Rapeli <mikko.rapeli@iki.fi>
      Cc: Alan Cox <alan@lxorguk.ukuu.org.uk>
      Signed-off-by: default avatarBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      b0244a00
    • Bartlomiej Zolnierkiewicz's avatar
      ide: ide_config_drive_speed() bugfixes · adcd33d4
      Bartlomiej Zolnierkiewicz authored
      * Use ->OUTBSYNC instead of ->OUTB when writing command register
        (needed for scc_pata and pmac host drivers).
      
      * Don't check DRDY bit of the status register on ATAPI devices
        (ATAPI devices are free to ignore DRDY bit).
      
      Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
      Cc: Kou Ishizaki <kou.ishizaki@toshiba.co.jp>
      Cc: Akira Iguchi <akira2.iguchi@toshiba.co.jp>
      Acked-by: default avatarSergei Shtylyov <sshtylyov@ru.mvista.com>
      Signed-off-by: default avatarBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      adcd33d4
    • Bartlomiej Zolnierkiewicz's avatar
      ide: add cable detection for early UDMA66 devices (take 3) · a5b7e70d
      Bartlomiej Zolnierkiewicz authored
      * Move ide_in_drive_list() from ide-dma.c to ide-iops.c.
      
      * Add ivb_list[] table for listening early UDMA66 devices which don't conform
        to ATA4 standard wrt cable detection (bit14 is zero, only bit13 is valid)
        and use only device side cable detection for them since host side cable
        detection may be unreliable.
      
      * Add model "QUANTUM FIREBALLlct10 05" with firwmare "A03.0900" to the list
        (from Craig's bugreport).
      
      v2:
      * Improve kernel message basing on suggestion from Sergei.
      
      v3:
      * Don't print kernel message when no device side cable detection is done,
        plus some minor fixes.  (Noticed by Sergei)
      
      Thanks to Craig for testing this patch.
      
      Cc: Craig Block <chblock3@yahoo.com>
      Acked-by: default avatarSergei Shtylyov <sshtylyov@ru.mvista.com>
      Signed-off-by: default avatarBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      a5b7e70d
  15. 09 Jul, 2007 1 commit
    • Bartlomiej Zolnierkiewicz's avatar
      ide: add short cables support · 49521f97
      Bartlomiej Zolnierkiewicz authored
      This patch allows users to override both host and device side cable detection
      with "ideX=ata66" kernel parameter.  Thanks to this it should be now possible
      to use UDMA > 2 modes on systems (laptops mainly) which use short 40-pin cable
      instead of 80-pin one.
      
      Next patches add automatic detection of some systems using short cables.
      
      Changes:
      
      * Rename hwif->udma_four to hwif->cbl and make it u8.
      
      * Convert all existing users accordingly (use ATA_CBL_* defines while at it).  
      
      * Add ATA_CBL_PATA40_SHORT support to ide-iops.c:eighty_ninty_three().
      
      * Use ATA_CBL_PATA40_SHORT for "ideX=ata66" kernel parameter.
      Signed-off-by: default avatarBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      Reviewed-by: default avatarSergei Shtylyov <sshtylyov@ru.mvista.com>
      49521f97
  16. 09 May, 2007 2 commits
    • Bartlomiej Zolnierkiewicz's avatar
      ide: cable detection fixes (take 2) · 7f8f48af
      Bartlomiej Zolnierkiewicz authored
      Tejun's recent eighty_ninty_three() fix has inspired me to do more thorough
      review of the cable detection code...
      
      * print user-friendly warning about limiting the maximum transfer speed
        to UDMA33 (and the reason behind it) when 80-wire cable is not detected,
        also while at it cleanup eighty_ninty_three() a bit
      
      * use eighty_ninty_three() in ide_ata66_check(), this actually fixes 3 bugs:
        - bit 14 (word 93 validity check) == 1 && bit 13 (80-wire cable test) == 1
          were used as 80-wire cable present test for CONFIG_IDEDMA_IVB=n case
          (please see FIXME comment in eighty_ninty_three() for more details)
        - CONFIG_IDEDMA_IVB=y/n cases were interchanged
        - check for SATA devices was missing
      
      * remove private cable warnings from pdc_202xx{old,new} drivers now that core
        code provides this functionality (plus, in pdc202xx_new case the test could
        give false warnings for ATAPI devices because pdc202xx_new driver doesn't
        even support ATAPI DMA)
      
      Cc: Tejun Heo <htejun@gmail.com>
      Signed-off-by: default avatarBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      7f8f48af
    • Bartlomiej Zolnierkiewicz's avatar
      ide: rework the code for selecting the best DMA transfer mode (v3) · 2d5eaa6d
      Bartlomiej Zolnierkiewicz authored
      Depends on the "ide: fix UDMA/MWDMA/SWDMA masks" patch.
      
      * add ide_hwif_t.udma_filter hook for filtering UDMA mask
        (use it in alim15x3, hpt366, siimage and serverworks drivers)
      * add ide_max_dma_mode() for finding best DMA mode for the device
        (loosely based on some older libata-core.c code)
      * convert ide_dma_speed() users to use ide_max_dma_mode()
      * make ide_rate_filter() take "ide_drive_t *drive" as an argument instead
        of "u8 mode" and teach it to how to use UDMA mask to do filtering
      * use ide_rate_filter() in hpt366 driver
      * remove no longer needed ide_dma_speed() and *_ratemask()
      * unexport eighty_ninty_three()
      
      v2:
      * rename ->filter_udma_mask to ->udma_filter
        [ Suggested by Sergei Shtylyov <sshtylyov@ru.mvista.com>. ]
      
      v3:
      * updated for scc_pata driver (fixes XFER_UDMA_6 filtering for user-space
        originated transfer mode change requests when 100MHz clock is used)
      Signed-off-by: default avatarBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      2d5eaa6d
  17. 10 Apr, 2007 1 commit
    • Suleiman Souhlal's avatar
      ide: correctly prevent IDE timer expiry function to run if request was already handled · 23450319
      Suleiman Souhlal authored
      It is possible for the timer expiry function to run even though the
      request has already been handled: ide_timer_expiry() only checks that
      the handler is not NULL, but it is possible that we have handled a
      request (thus clearing the handler) and then started a new request
      (thus starting the timer again, and setting a handler). 
      
      A simple way to exhibit this is to set the DMA timeout to 1 jiffy and
      run dd: The kernel will panic after a few minutes because
      ide_timer_expiry() tries to add a timer when it's already active.
      
      To fix this, we simply add a request generation count that gets
      incremented at every interrupt, and check in ide_timer_expiry() that
      we have not already handled a new interrupt before running the expiry
      function.
      Signed-off-by: default avatarSuleiman Souhlal <suleiman@google.com>
      Signed-off-by: default avatarBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      23450319