1. 19 4月, 2008 1 次提交
  2. 18 4月, 2008 39 次提交
    • B
      ide: remove ide_init_default_irq() macro · 273b8385
      Bartlomiej Zolnierkiewicz 提交于
      * Use ide_default_irq() instead of ide_init_default_irq() in
        ide_generic host driver (so the correct IRQ is always set
        regardless of CONFIG_PCI / CONFIG_BLK_DEV_IDEPCI).
      
      * Remove no longer needed ide_init_default_irq() macro.
      Signed-off-by: NBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      273b8385
    • B
      ide: remove ide_default_io_ctl() macro · 9dfcd15a
      Bartlomiej Zolnierkiewicz 提交于
      It is always == '((base) + 0x206)' if CONFIG_IDE_ARCH_OBSOLETE_DEFAULTS=y
      and it is not needed otherwise (arm, blackfin, parisc, ppc64, sh, sparc[64]).
      Signed-off-by: NBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      9dfcd15a
    • B
      ide: add CONFIG_IDE_ARCH_OBSOLETE_DEFAULTS (take 2) · 0e33555f
      Bartlomiej Zolnierkiewicz 提交于
      * Add CONFIG_IDE_ARCH_OBSOLETE_DEFAULTS to drivers/ide/Kconfig and use
        it instead of defining IDE_ARCH_OBSOLETE_DEFAULTS in <arch/ide.h>.
      
      v2:
      * Define ide_default_irq() in ide-probe.c/ns87415.c if not already defined
        and drop defining ide_default_irq() for CONFIG_IDE_ARCH_OBSOLETE_DEFAULTS=n.
      
        [ Thanks to Stephen Rothwell and David Miller for noticing the problem. ]
      
      Cc: Stephen Rothwell <sfr@canb.auug.org.au>
      Cc: David Miller <davem@davemloft.net>
      Signed-off-by: NBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      0e33555f
    • B
      ppc: remove ppc_ide_md · 1d850bd0
      Bartlomiej Zolnierkiewicz 提交于
      * Add special cases for pplus and prep to ide_default_{irq,io_base}()
        (+ FIXMEs about the need to use IDE platform host driver instead).
      
      * Remove no longer needed ppc_ide_md and struct ide_machdep_calls.
      
      * Then remove <linux/ide.h> include from:
        - arch/powerpc/kernel/setup_32.c
        - arch/ppc/kernel/ppc_ksyms.c
        - arch/ppc/kernel/setup.c
        - arch/ppc/platforms/pplus.c
        - arch/ppc/platforms/prep_setup.c
      
      There should be no functional changes caused by this patch.
      
      Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
      Signed-off-by: NBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      1d850bd0
    • B
    • B
      ide: add generic packet command representation ide_atapi_pc · 8303b46e
      Borislav Petkov 提交于
      This new struct unifies ide{-floppy,-tape,-scsi}'s view of a packet command. For now,
      it represents the common denominator between the three drivers while adding driver-
      specific members at the end of the struct which will be merged/simplified into the
      generic ATAPI handling code in later steps, or removed completely.
      
      Bart:
      - move struct ide_atapi_pc outside of #ifdef/#endif CONFIG_IDE_PROC_FS
      Signed-off-by: NBorislav Petkov <petkovbb@gmail.com>
      Signed-off-by: NBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      8303b46e
    • B
      ide: remove IDE_*_REG macros · 23579a2a
      Bartlomiej Zolnierkiewicz 提交于
      * Add IDE_{ALTSTATUS,IREASON,BCOUNTL,BCOUNTH}_OFFSET defines.
      
      * Remove IDE_*_REG macros - this results in more readable
        and slightly smaller code.
      
      There should be no functional changes caused by this patch.
      
      Cc: Borislav Petkov <petkovbb@gmail.com>
      Acked-by: NSergei Shtylyov <sshtylyov@ru.mvista.com>
      Signed-off-by: NBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      23579a2a
    • B
      ide: add ide_atapi_{discard_data,write_zeros} inline helpers · 7616c0ad
      Bartlomiej Zolnierkiewicz 提交于
      Add ide_atapi_{discard_data,write_zeros} inline helpers to <linux/ide.h>
      and use them instead of home-brewn helpers in ide-{floppy,tape,scsi}.
      
      There should be no functional changes caused by this patch.
      
      Cc: Borislav Petkov <petkovbb@gmail.com>
      Signed-off-by: NBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      7616c0ad
    • B
      ide: remove ide_init_hwif_ports() · e6bfa38a
      Bartlomiej Zolnierkiewicz 提交于
      ide_init_hwif_ports() is only used by init_ide_data() now, inline it there.
      Signed-off-by: NBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      e6bfa38a
    • B
      ide: remove ->hold field from ide_hwif_t (take 2) · 2304dc64
      Bartlomiej Zolnierkiewicz 提交于
      ->hold is write-only now, remove it.
      
      v2:
      * v1 missed bast-ide, palm_bk3710, ide-cs and delkin_cb host drivers.
      Acked-by: NSergei Shtylyov <sshtylyov@ru.mvista.com>
      Signed-off-by: NBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      2304dc64
    • B
      ide: remove broken/dangerous HDIO_[UNREGISTER,SCAN]_HWIF ioctls (take 3) · 93de00fd
      Bartlomiej Zolnierkiewicz 提交于
      hdparm explicitely marks HDIO_[UNREGISTER,SCAN]_HWIF ioctls as DANGEROUS
      and given the number of bugs we can assume that there are no real users:
      
      * DMA has no chance of working because DMA resources are released by
        ide_unregister() and they are never allocated again.
      
      * Since ide_init_hwif_ports() is used for ->io_ports[] setup the ioctls
        don't work for almost all hosts with "non-standard" (== non ISA-like)
        layout of IDE taskfile registers (there is a lot of such host drivers).
      
      * ide_port_init_devices() is not called when probing IDE devices so:
        - drive->autotune is never set and IDE host/devices are not programmed
          for the correct PIO/DMA transfer modes (=> possible data corruption)
        - host specific I/O 32-bit and IRQ unmasking settings are not applied
          (=> possible data corruption)
        - host specific ->port_init_devs method is not called (=> no luck with
          ht6560b, qd65xx and opti621 host drivers)
      
      * ->rw_disk method is not preserved (=> no HPT3xxN chipsets support).
      
      * ->serialized flag is not preserved (=> possible data corruption when
         using icside, aec62xx (ATP850UF chipset), cmd640, cs5530, hpt366
         (HPT3xxN chipsets), rz1000, sc1200, dtc2278 and ht6560b host drivers).
      
      * ->ack_intr method is not preserved (=> needed by ide-cris, buddha,
        gayle and macide host drivers).
      
      * ->sata_scr[] and sata_misc[] is cleared by ide_unregister() and it
        isn't initialized again (SiI3112 support needs them).
      
      * To issue an ioctl() there need to be at least one IDE device present
        in the system.
      
      * ->cable_detect method is not preserved + it is not called when probing
        IDE devices so cable detection is broken (however since DMA support is
        also broken it doesn't really matter ;-).
      
      * Some objects which may have already been freed in ide_unregister()
        are restored by ide_hwif_restore() (i.e. ->hwgroup).
      
      * ide_register_hw() may unregister unrelated IDE ports if free ide_hwifs[]
        slot cannot be found.
      
      * When IDE host drivers are modular unregistered port may be re-used by
        different host driver that owned it first causing subtle bugs.
      
      Since we now have a proper warm-plug support remove these ioctls,
      then remove no longer needed:
      - ide_register_hw() and ide_hwif_restore() functions
      - 'init_default' and 'restore' arguments of ide_unregister()
      - zeroeing of hwif->{dma,extra}_* fields in ide_unregister()
      
      As an added bonus IDE core code size shrinks by ~3kB (x86-32).
      
      v2:
      * fix ide_unregister() arguments in cleanup_module() (Andrew Morton).
      
      v3:
      * fix ide_unregister() arguments in palm_bk3710.c.
      Acked-by: NSergei Shtylyov <sshtylyov@ru.mvista.com>
      Signed-off-by: NBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      93de00fd
    • B
      ide: remove obsoleted "idex=base[,ctl[,irq]]" kernel parameters (take 2) · 9a0e77f2
      Bartlomiej Zolnierkiewicz 提交于
      * Remove obsoleted "idex=base[,ctl[,irq]]" kernel parameters
        and update Documentation/ide/ide.txt.
      
      * Remove no longer needed ide_forced chipset type.
      
      v2:
      * is_chipset_set[] -> is_chipset_set in ide.c.
      
      * Documentation/ide/ide.txt fix.
      Signed-off-by: NBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      9a0e77f2
    • B
      ide: add warm-plug support for IDE devices (take 2) · f74c9141
      Bartlomiej Zolnierkiewicz 提交于
      * Add 'struct class ide_port_class' ('ide_port' class) and a 'struct
        device *portdev' ('ide_port' class device) in ide_hwif_t.
      
      * Register 'ide_port' class in ide_init() and unregister it in
        cleanup_module().
      
      * Create ->portdev in ide_register_port () and unregister it in
        ide_unregister().
      
      * Add "delete_devices" class device attribute for unregistering IDE devices
        on a port and "scan" one for probing+registering IDE devices on a port.
      
      * Add ide_sysfs_register_port() helper for registering "delete_devices"
        and "scan" attributes with ->portdev.  Call it in ide_device_add_all().
      
      * Document IDE warm-plug support in Documentation/ide/warm-plug-howto.txt.
      
      v2:
      * Convert patch from using 'struct class_device' to use 'struct device'.
        (thanks to Kay Sievers for doing it)
      Signed-off-by: NBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      f74c9141
    • B
      ide: remove dead/obsolete ->busproc method · 50672e5d
      Bartlomiej Zolnierkiewicz 提交于
      ->busproc method is used by HDIO_SET_BUSSTATE ioctl but it has no chance
      of working as intended (in 2.4.x days) because to issue an ioctl there
      is a device node needed and:
      
      - for BUSSTATE_TRISTATE+OFF it is too late (devices are already gone)
      
      - for BUSSTATE_TRISTATE+ON it is too early (devices are not registered yet)
      
      Just remove ->busproc method for now (it was only implemented by hpt366,
      siimage and tc86c001 host drivers).
      
      Cc: Sergei Shtylyov <sshtylyov@ru.mvista.com>
      Signed-off-by: NBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      50672e5d
    • B
      ide: rework PowerMac media-bay support (take 2) · 2dde7861
      Bartlomiej Zolnierkiewicz 提交于
      Rework PowerMac media-bay support in such way that instead of
      un/registering the IDE interface we un/register IDE devices:
      
      * Add ide_port_scan() helper for probing+registerering devices on a port.
      
      * Rename ide_port_unregister_devices() to __ide_port_unregister_devices().
      
      * Add ide_port_unregister_devices() helper for unregistering devices on a port.
      
      * Add 'ide_hwif_t *cd_port' to 'struct media_bay_info', pass 'hwif' instead
        of hwif->index to media_bay_set_ide_infos() and use it to setup 'cd_port'.
      
      * Use ide_port_unregister_devices() instead of ide_unregister()
        and ide_port_scan() instead of ide_register_hw() in media_bay_step().
      
      * Unexport ide_register_hw() and make it static.
      
      v2:
      * Fix build by adding <linux/ide.h> include to <asm-powerpc/mediabay.h>.
        (Reported by Michael/Kamalesh/Andrew).
      
      Cc: Kamalesh Babulal <kamalesh@linux.vnet.ibm.com>
      Cc: Michael Ellerman <michael@ellerman.id.au>
      Cc: Andrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      2dde7861
    • B
      ide: remove IDE devices from /proc/ide/ before unregistering them · 5b0c4b30
      Bartlomiej Zolnierkiewicz 提交于
      IDE devices need to be removed from /proc/ide/ _before_ being unregistered:
      
      * Drop 'ide_hwif_t *hwif' argument from destroy_proc_ide_device()
        and use drive->hwif instead.
      
      * Rename destroy_proc_ide_device() to ide_proc_unregister_device().
      
      * Call ide_proc_unregister_device() in drive_release_dev().
      
      * Remove no longer needed destroy_proc_ide_drives().
      Signed-off-by: NBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      5b0c4b30
    • B
      ide: use ide_find_port() instead of ide_deprecated_find_port() · 4f0eee4d
      Bartlomiej Zolnierkiewicz 提交于
      * Use ide_find_port() instead of ide_deprecated_find_port() in bast-ide/
        palm_bk3710/ide-cs/delkin_cb host drivers and in ide_register_hw().
      
      * Remove no longer needed ide_deprecated_find_port().
      Signed-off-by: NBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      4f0eee4d
    • G
      IDE: remove ide=reverse IDE core · a594eeb1
      Greg Kroah-Hartman 提交于
      This option is obsolete and can be removed safely.
      
      It allows us to remove the pci_get_device_reverse() function from the
      PCI core.
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      Signed-off-by: NBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      a594eeb1
    • D
      dmaengine: ack to flags: make use of the unused bits in the 'ack' field · 636bdeaa
      Dan Williams 提交于
      'ack' is currently a simple integer that flags whether or not a client is done
      touching fields in the given descriptor.  It is effectively just a single bit
      of information.  Converting this to a flags parameter allows the other bits to
      be put to use to control completion actions, like dma-unmap, and capture
      results, like xor-zero-sum == 0.
      
      Changes are one of:
      1/ convert all open-coded ->ack manipulations to use async_tx_ack
         and async_tx_test_ack.
      2/ set the ack bit at prep time where possible
      3/ make drivers store the flags at prep time
      4/ add flags to the device_prep_dma_interrupt prototype
      Acked-by: NMaciej Sosnowski <maciej.sosnowski@intel.com>
      Signed-off-by: NDan Williams <dan.j.williams@intel.com>
      636bdeaa
    • D
      iop-adma: remove the workaround for missed interrupts on iop3xx · c4fe1554
      Dan Williams 提交于
      This workaround was covering the dependency submission bug in async_tx.
      Signed-off-by: NDan Williams <dan.j.williams@intel.com>
      c4fe1554
    • D
      async_tx: kill ->device_dependency_added · ce4d65a5
      Dan Williams 提交于
      DMA drivers no longer need to be notified of dependency submission
      events as async_tx_run_dependencies and async_tx_channel_switch will
      handle the scheduling and execution of dependent operations.
      
      [sfr@canb.auug.org.au: extend this for fsldma]
      Acked-by: NShannon Nelson <shannon.nelson@intel.com>
      Signed-off-by: NDan Williams <dan.j.williams@intel.com>
      ce4d65a5
    • D
      async_tx: fix multiple dependency submission · 19242d72
      Dan Williams 提交于
      Shrink struct dma_async_tx_descriptor and introduce
      async_tx_channel_switch to properly inject a channel switch interrupt in
      the descriptor stream.  This simplifies the locking model as drivers no
      longer need to handle dma_async_tx_descriptor.lock.
      Acked-by: NShannon Nelson <shannon.nelson@intel.com>
      Signed-off-by: NDan Williams <dan.j.williams@intel.com>
      19242d72
    • T
      libata: make PMP support optional · 88fcd562
      Tejun Heo 提交于
      Make PMP support optional by adding CONFIG_SATA_PMP and leaving out
      libata-pmp.c if it isn't set.  PMP helpers return constant values if
      PMP support is not enabled and PMP declarations alias non-PMP
      counterparts.  This makes the compiler to leave out PMP related part
      out and LLDs to use non-PMP counterparts automatically.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      88fcd562
    • T
      libata: implement PMP helpers · 071f44b1
      Tejun Heo 提交于
      Implement helpers to test whether PMP is supported, attached and
      determine pmp number to use when issuing SRST to a link.  While at it,
      move ata_is_host_link() so that it's together with the two new PMP
      helpers.
      
      This change simplifies LLDs and helps making PMP support optional.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      071f44b1
    • T
      libata: separate PMP support code from core code · 48515f6c
      Tejun Heo 提交于
      Most of PMP support code is already in libata-pmp.c.  All that are in
      libata-core.c are sata_pmp_port_ops and EXPORTs.  Move them to
      libata-pmp.c.  Also, collect PMP related prototypes and declarations
      in header files and move them right above of SFF stuff.
      
      This change is to make PMP support optional.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      48515f6c
    • T
      libata: make SFF support optional · 127102ae
      Tejun Heo 提交于
      Now that SFF support is completely separated out from the core layer,
      it can be made optional.  Add CONFIG_ATA_SFF and let SFF drivers
      depend on it.  If CONFIG_ATA_SFF isn't set, all codes in libata-sff.c
      and data structures for SFF support are disabled.  This saves good
      number of bytes for small systems.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      127102ae
    • T
      libata: kill ata_noop_dev_select() · c9f75b04
      Tejun Heo 提交于
      Now that SFF assumptions are separated out from non-SFF reset
      sequence, port_ops->sff_dev_select() is no longer necessary for
      non-SFF controllers.  Kill ata_noop_dev_select() and ->sff_dev_select
      initialization from base and other non-SFF port_ops.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      c9f75b04
    • T
      libata: drop @finish_qc from ata_qc_complete_multiple() · 79f97dad
      Tejun Heo 提交于
      ata_qc_complete_multiple() took @finish_qc and called it on every qc
      before completing it.  This was to give opportunity to update TF cache
      before ata_qc_complete() tries to fill result_tf.  Now that result TF
      is a separate operation, this is no longer necessary.
      
      Update sata_sil24, which was the only user of this mechanism, such
      that it implements its own ops->qc_fill_rtf() and drop @finish_qc from
      ata_qc_complete_multiple().
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      79f97dad
    • T
      libata: add qc_fill_rtf port operation · 22183bf5
      Tejun Heo 提交于
      On command completion, ata_qc_complete() directly called ops->tf_read
      to fill qc->result_tf.  This patch adds ops->qc_fill_rtf to replace
      hardcoded ops->tf_read usage.
      
      ata_sff_qc_fill_rtf() which uses ops->tf_read to fill result_tf is
      implemented and set in ata_base_port_ops and other ops tables which
      don't inherit from ata_base_port_ops, so this patch doesn't introduce
      any behavior change.
      
      ops->qc_fill_rtf() is similar to ops->sff_tf_read() but can only be
      called when a command finishes.  As some non-SFF controllers don't
      have TF registers defined unless they're associated with in-flight
      commands, this limited operation makes life easier for those drivers
      and help lifting SFF assumptions from libata core layer.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      22183bf5
    • T
      libata: move PMP SCR access failure during reset to ata_eh_reset() · 5958e302
      Tejun Heo 提交于
      If PMP fan-out reset fails and SCR isn't accessible, PMP should be
      reset.  This used to be tested by sata_pmp_std_hardreset() and
      communicated to EH by -ERESTART.  However, this logic is generic and
      doesn't really have much to do with specific hardreset implementation.
      
      This patch moves SCR access failure detection logic to ata_eh_reset()
      where it belongs.  As this makes sata_pmp_std_hardreset() identical to
      sata_std_hardreset(), the function is killed and replaced with the
      standard method.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      5958e302
    • T
      libata: clear SError after link resume · ac371987
      Tejun Heo 提交于
      SError used to be cleared in ->postreset.  This has small hotplug race
      condition.  If a device is plugged in after reset is complete but
      postreset hasn't run yet, its hotplug event gets lost when SError is
      cleared.  This patch makes sata_link_resume() clear SError.  This
      kills the race condition and makes a lot of sense as some PMP and host
      PHYs don't work properly without SError cleared.
      
      This change makes sata_pmp_std_{pre|post}_reset()'s unnecessary as
      they become identical to ata_std counterparts.  It also simplifies
      sata_pmp_hardreset() and ahci_vt8251_hardreset().
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      ac371987
    • T
      libata: implement and use sata_std_hardreset() · 57c9efdf
      Tejun Heo 提交于
      Implement sata_std_hardreset(), which simply wraps around
      sata_link_hardreset().  sata_std_hardreset() becomes new standard
      hardreset method for sata_port_ops and sata_sff_hardreset() moves from
      ata_base_port_ops to ata_sff_port_ops, which is where it really
      belongs.
      
      ata_is_builtin_hardreset() is added so that both
      ata_std_error_handler() and ata_sff_error_handler() skip both builtin
      hardresets if SCR isn't accessible.
      
      piix_sidpr_hardreset() in ata_piix.c is identical to
      sata_std_hardreset() in functionality and got replaced with the
      standard function.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      57c9efdf
    • T
      libata: move generic hardreset code from sata_sff_hardreset() to sata_link_hardreset() · 9dadd45b
      Tejun Heo 提交于
      sata_sff_hardreset() contains link readiness wait logic which isn't
      SFF specific.  Move that part into sata_link_hardreset(), which now
      takes two more parameters - @online and @check_ready.  Both are
      optional.  The former is out parameter for link onlineness after
      reset.  The latter is used to wait for link readiness after hardreset.
      
      Users of sata_link_hardreset() is updated to use new funtionality and
      ahci_hardreset() is updated to use sata_link_hardreset() instead of
      sata_sff_hardreset().  This doesn't really cause any behavior change.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      9dadd45b
    • T
      libata: separate out ata_wait_ready() and implement ata_wait_after_reset() · aa2731ad
      Tejun Heo 提交于
      Factor out waiting logic (which is common to all ATA controllers) from
      ata_sff_wait_ready() into ata_wait_ready().  ata_wait_ready() takes
      @check_ready function pointer and uses it to poll for readiness.  This
      allows non-SFF controllers to use ata_wait_ready() to wait for link
      readiness.
      
      This patch also implements ata_wait_after_reset() - generic version of
      ata_sff_wait_after_reset() - using ata_wait_ready().
      
      ata_sff_wait_ready() is reimplemented using ata_wait_ready() and
      ata_sff_check_ready().  Functionality remains the same.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      aa2731ad
    • T
      libata: restructure SFF post-reset readiness waits · 705e76be
      Tejun Heo 提交于
      Previously, post-softreset readiness is waited as follows.
      
      1. ata_sff_wait_after_reset() waits for 150ms and then for
         ATA_TMOUT_FF_WAIT if status is 0xff and other conditions meet.
      
      2. ata_bus_softreset() finishes with -ENODEV if status is still 0xff.
         If not, continue to #3.
      
      3. ata_bus_post_reset() waits readiness of dev0 and/or dev1 depending
         on devmask using ata_sff_wait_ready().
      
      And for post-hardreset readiness,
      
      1. ata_sff_wait_after_reset() waits for 150ms and then for
         ATA_TMOUT_FF_WAIT if status is 0xff and other conditions meet.
      
      2. sata_sff_hardreset waits for device readiness using
         ata_sff_wait_ready().
      
      This patch merges and unifies post-reset readiness waits into
      ata_sff_wait_ready() and ata_sff_wait_after_reset().
      
      ATA_TMOUT_FF_WAIT handling is merged into ata_sff_wait_ready().  If TF
      status is 0xff, link status is unknown and the port is SATA, it will
      continue polling till ATA_TMOUT_FF_WAIT.
      
      ata_sff_wait_after_reset() is updated to perform the following steps.
      
      1. waits for 150ms.
      
      2. waits for dev0 readiness using ata_sff_wait_ready().  Note that
         this is done regardless of devmask, as ata_sff_wait_ready() handles
         0xff status correctly, this preserves the original behavior except
         that it may wait longer after softreset if link is online but
         status is 0xff.  This behavior change is very unlikely to cause any
         actual difference and is intended.  It brings softreset behavior to
         that of hardreset.
      
      3. waits for dev1 readiness just the same way ata_bus_post_reset() did.
      
      Now both soft and hard resets call ata_sff_wait_after_reset() after
      reset to wait for readiness after resets.  As
      ata_sff_wait_after_reset() contains calls to ->sff_dev_select(),
      explicit call near the end of sata_sff_hardreset() is removed.
      
      This change makes reset implementation simpler and more consistent.
      
      While at it, make the magical 150ms wait post-reset wait duration a
      constant and ata_sff_wait_ready() and ata_sff_wait_after_reset() take
      @link instead of @ap.  This is to make them consistent with other
      reset helpers and ease core changes.
      
      pata_scc is updated accordingly.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      705e76be
    • T
      libata: separate out ata_std_postreset() from ata_sff_postreset() · 203c75b8
      Tejun Heo 提交于
      Separate out generic ATA portion from ata_sff_postreset() into
      ata_std_postreset() and implement ata_sff_postreset() using the std
      version.
      
      ata_base_port_ops now has ata_std_postreset() for its postreset and
      ata_sff_port_ops overrides it to ata_sff_postreset().
      
      This change affects pdc_adma, ahci, sata_fsl and sata_sil24.  pdc_adma
      now specifies postreset to ata_sff_postreset() explicitly.  sata_fsl
      and sata_sil24 now use ata_std_postreset() which makes no difference
      to them.  ahci now calls ata_std_postreset() from its own postreset
      method, which causes no behavior difference.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      203c75b8
    • T
      libata: separate out ata_std_prereset() from ata_sff_prereset() · 0aa1113d
      Tejun Heo 提交于
      Separate out generic ATA portion from ata_sff_prereset() into
      ata_std_prereset() and implement ata_sff_prereset() using the std
      version.  Waiting for device readiness is the only SFF specific part.
      
      ata_base_port_ops now has ata_std_prereset() for its prereset and
      ata_sff_port_ops overrides it to ata_sff_prereset().  This change can
      affect pdc_adma, ahci, sata_fsl and sata_sil24.  pdc_adma implements
      its own prereset using ata_sff_prereset() and the rest has hardreset
      and thus are unaffected by this change.
      
      This change reflects real world situation.  There is no generic way to
      wait for device readiness for non-SFF controllers and some of them
      don't have any mechanism for that.  Non-sff drivers which don't have
      hardreset should wrap ata_std_prereset() and wait for device readiness
      itself but there's no such driver now and isn't likely to be popular
      in the future either.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      0aa1113d
    • T
      libata: clean up port_ops->sff_irq_clear() · 288623a0
      Tejun Heo 提交于
      ->sff_irq_clear() is called only from SFF interrupt handler, so there
      is no reason to initialize it for non-SFF controllers.  Also,
      ata_sff_irq_clear() can handle both BMDMA and non-BMDMA SFF
      controllers.
      
      This patch kills ata_noop_irq_clear() and removes it from base
      port_ops and sets ->sff_irq_clear to ata_sff_irq_clear() in sff
      port_ops instead of bmdma port_ops.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      288623a0
    • T
      libata: rename SFF port ops · 5682ed33
      Tejun Heo 提交于
      Add sff_ prefix to SFF specific port ops.
      
      This rename is in preparation of separating SFF support out of libata
      core layer.  This patch strictly renames ops and doesn't introduce any
      behavior difference.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      5682ed33