1. 26 Jun, 2017 1 commit
  2. 12 Jun, 2017 1 commit
  3. 16 May, 2017 2 commits
  4. 11 Apr, 2017 1 commit
    • Ondrej Zary's avatar
      sata_via: Enable hotplug only on VT6421 · 3cf86452
      Ondrej Zary authored
      Commit 57e5568f ("sata_via: Implement hotplug for VT6421") adds
      hotplug IRQ handler for VT6421 but enables hotplug on all chips. This
      is a bug because it causes "irq xx: nobody cared" error on VT6420 when
      hot-(un)plugging a drive:
      
      [  381.839948] irq 20: nobody cared (try booting with the "irqpoll" option)
      [  381.840014] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 4.10.0-rc5+ #148
      [  381.840066] Hardware name:          P4VM800/P4VM800, BIOS P1.60 05/29/2006
      [  381.840117] Call Trace:
      [  381.840167]  <IRQ>
      [  381.840225]  ? dump_stack+0x44/0x58
      [  381.840278]  ? __report_bad_irq+0x14/0x97
      [  381.840327]  ? handle_edge_irq+0xa5/0xa5
      [  381.840376]  ? note_interrupt+0x155/0x1cf
      [  381.840426]  ? handle_edge_irq+0xa5/0xa5
      [  381.840474]  ? handle_irq_event_percpu+0x32/0x38
      [  381.840524]  ? handle_irq_event+0x1f/0x38
      [  381.840573]  ? handle_fasteoi_irq+0x69/0xb8
      [  381.840625]  ? handle_irq+0x4f/0x5d
      [  381.840672]  </IRQ>
      [  381.840726]  ? do_IRQ+0x2e/0x8b
      [  381.840782]  ? common_interrupt+0x2c/0x34
      [  381.840836]  ? mwait_idle+0x60/0x82
      [  381.840892]  ? arch_cpu_idle+0x6/0x7
      [  381.840949]  ? do_idle+0x96/0x18e
      [  381.841002]  ? cpu_startup_entry+0x16/0x1a
      [  381.841057]  ? start_kernel+0x319/0x31c
      [  381.841111]  ? startup_32_smp+0x166/0x168
      [  381.841165] handlers:
      [  381.841219] [<c12a7263>] ata_bmdma_interrupt
      [  381.841274] Disabling IRQ #20
      
      Seems that VT6420 can do hotplug too (there's no documentation) but the
      comments say that SCR register access (required for detecting hotplug
      events) can cause problems on these chips.
      
      For now, just keep hotplug disabled on anything other than VT6421.
      Signed-off-by: default avatarOndrej Zary <linux@rainbow-software.org>
      Signed-off-by: default avatarTejun Heo <tj@kernel.org>
      3cf86452
  5. 25 Feb, 2016 2 commits
    • Ondrej Zary's avatar
      sata_via: Implement hotplug for VT6421 · 57e5568f
      Ondrej Zary authored
      Enable IRQ on hotplug and add an interrupt handler to handle it.
      
      This allows hotplug to work:
      ata5: exception Emask 0x10 SAct 0x0 SErr 0x70000 action 0xe frozen
      ata5: SError: { PHYRdyChg PHYInt CommWake }
      ata5: hard resetting link
      ata5: SATA link up 1.5 Gbps (SStatus 113 SControl 310)
      ata5.00: LPM support broken, forcing max_power
      ata5.00: ATA-7: WDC WD800JD-75MSA3, 10.01E04, max UDMA/133
      ata5.00: 156250000 sectors, multi 0: LBA48 NCQ (depth 0/32)
      ata5.00: LPM support broken, forcing max_power
      ata5.00: configured for UDMA/133
      ata5: EH complete
      scsi 4:0:0:0: Direct-Access     ATA      WDC WD800JD-75MS 1E04 PQ: 0 ANSI: 5
      sd 4:0:0:0: [sdb] 156250000 512-byte logical blocks: (80.0 GB/74.5 GiB)
      sd 4:0:0:0: [sdb] Write Protect is off
      sd 4:0:0:0: [sdb] Mode Sense: 00 3a 00 00
      sd 4:0:0:0: [sdb] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
      sd 4:0:0:0: Attached scsi generic sg1 type 0
      sd 4:0:0:0: [sdb] Attached SCSI disk
      
      And also hot unplug:
      ata5: exception Emask 0x10 SAct 0x0 SErr 0x1b0000 action 0xe frozen
      ata5: SError: { PHYRdyChg PHYInt 10B8B Dispar }
      ata5: hard resetting link
      ata5: SATA link down (SStatus 0 SControl 310)
      ata5: hard resetting link
      ata5: SATA link down (SStatus 0 SControl 310)
      ata5: hard resetting link
      ata5: SATA link down (SStatus 0 SControl 310)
      ata5.00: disabled
      ata5: EH complete
      ata5.00: detaching (SCSI 4:0:0:0)
      sd 4:0:0:0: [sdb] Synchronizing SCSI cache
      sd 4:0:0:0: [sdb] Synchronize Cache(10) failed: Result: hostbyte=DID_BAD_TARGET driverbyte=DRIVER_OK
      sd 4:0:0:0: [sdb] Stopping disk
      sd 4:0:0:0: [sdb] Start/Stop Unit failed: Result: hostbyte=DID_BAD_TARGET driverbyte=DRIVER_OK
      Signed-off-by: default avatarOndrej Zary <linux@rainbow-software.org>
      Signed-off-by: default avatarTejun Heo <tj@kernel.org>
      57e5568f
    • Ondrej Zary's avatar
      sata_via: Apply WD workaround only when needed on VT6421 · 44a9b494
      Ondrej Zary authored
      Currently, workaround for broken WD drives is applied always, slowing
      down all drives. And it has a bug - it's not applied after resume.
      
      Apply the workaround only if the error really appears
      (SErr == 0x1000500). This allows unaffected drives to run at full speed
      (provided that no affected drive is connected to the controller).
      Also make sure the workaround is re-applied on resume.
      
      Tested on VT6421.
      As SCR registers access is known to cause problems on VT6420 (and I
      don't have it to test), keep the workaround applied always on VT6420.
      
      Unaffected drive (Hitachi HDS721680PLA380):
      Before:
      $ hdparm -t --direct /dev/sdb
      /dev/sdb:
       Timing O_DIRECT disk reads: 160 MB in  3.01 seconds =  53.16 MB/sec
      
      After:
      $ hdparm -t --direct /dev/sdb
      /dev/sdb:
       Timing O_DIRECT disk reads: 200 MB in  3.01 seconds =  66.47 MB/sec
      
      Affected drive (WDC WD5003ABYX-18WERA0):
      Before:
      $ hdparm -t --direct /dev/sda
      
      /dev/sda:
       Timing O_DIRECT disk reads: 180 MB in  3.02 seconds =  59.51 MB/sec
      
      After:
      $ hdparm -t --direct /dev/sdb
      /dev/sdb:
       Timing O_DIRECT disk reads: 156 MB in  3.03 seconds =  51.48 MB/sec
      $ hdparm -t --direct /dev/sdb
      /dev/sdb:
       Timing O_DIRECT disk reads: 180 MB in  3.02 seconds =  59.64 MB/sec
      
      The first hdparm is slower because of the error:
      [   50.408042] ata5: Incompatible drive: enabling workaround. This slows down transfer rate to ~60 MB/s
      [   50.728052] ata5: SATA link up 1.5 Gbps (SStatus 113 SControl 310)
      [   50.744834] ata5.00: configured for UDMA/133
      Signed-off-by: default avatarOndrej Zary <linux@rainbow-software.org>
      Signed-off-by: default avatarTejun Heo <tj@kernel.org>
      44a9b494
  6. 08 Apr, 2015 1 commit
    • Quentin Lambert's avatar
      ata: remove deprecated use of pci api · c54c719b
      Quentin Lambert authored
      Replace occurences of the pci api by appropriate call to the dma api.
      
      A simplified version of the semantic patch that finds this problem is as
      follows: (http://coccinelle.lip6.fr)
      
      @deprecated@
      idexpression id;
      position p;
      @@
      
      (
        pci_dma_supported@p ( id, ...)
      |
        pci_alloc_consistent@p ( id, ...)
      )
      
      @bad1@
      idexpression id;
      position deprecated.p;
      @@
      ...when != &id->dev
         when != pci_get_drvdata ( id )
         when != pci_enable_device ( id )
      (
        pci_dma_supported@p ( id, ...)
      |
        pci_alloc_consistent@p ( id, ...)
      )
      
      @depends on !bad1@
      idexpression id;
      expression direction;
      position deprecated.p;
      @@
      
      (
      - pci_dma_supported@p ( id,
      + dma_supported ( &id->dev,
      ...
      + , GFP_ATOMIC
        )
      |
      - pci_alloc_consistent@p ( id,
      + dma_alloc_coherent ( &id->dev,
      ...
      + , GFP_ATOMIC
        )
      )
      Signed-off-by: default avatarQuentin Lambert <lambert.quentin@gmail.com>
      Signed-off-by: default avatarTejun Heo <tj@kernel.org>
      c54c719b
  7. 10 May, 2014 1 commit
  8. 13 Feb, 2014 1 commit
  9. 14 May, 2013 1 commit
  10. 25 Jul, 2012 1 commit
    • Axel Lin's avatar
      ata: use module_pci_driver · 2fc75da0
      Axel Lin authored
      This patch converts the drivers in drivers/ata/* to use module_pci_driver()
      macro which makes the code smaller and a bit simpler.
      Signed-off-by: default avatarAxel Lin <axel.lin@gmail.com>
      Cc: Alan Cox <alan@linux.intel.com>
      Cc: Jeff Garzik <jgarzik@pobox.com>
      Cc: Mikael Pettersson <mikpe@it.uu.se>
      Cc: Mark Lord <kernel@teksavvy.com>
      Cc: Jeremy Higdon <jeremy@sgi.com>
      Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
      Signed-off-by: default avatarJeff Garzik <jgarzik@redhat.com>
      2fc75da0
  11. 23 Jul, 2011 4 commits
    • Joe Perches's avatar
      ata: sata_via: Use dev_dbg · 5b933e63
      Joe Perches authored
      Use normal debugging path for dynamic debug capability.
      
      Convert dev_printk(KERN_DEBUG to dev_dbg(
      Signed-off-by: default avatarJoe Perches <joe@perches.com>
      Signed-off-by: default avatarJeff Garzik <jgarzik@pobox.com>
      5b933e63
    • Joe Perches's avatar
      ata: Add and use ata_print_version_once · 06296a1e
      Joe Perches authored
      Use a single mechanism to show driver version.
      Reduces text a tiny bit too.
      
      Remove uses of static int printed_version
      Add and use ata_print_version(const struct device *, const char *ver)
      and ata_print_version_once.
      
      $ size drivers/ata/built-in.*
         text	   data	    bss	    dec	    hex	filename
       544969	  73893	 116584	 735446	  b38d6	drivers/ata/built-in.allyesconfig.ata.o
       543870	  73893	 116592	 734355	  b34ad	drivers/ata/built-in.allyesconfig.print_once.o
       141328	  14689	   4220	 160237	  271ed	drivers/ata/built-in.defconfig.ata.o
       141212	  14689	   4220	 160121	  27179	drivers/ata/built-in.defconfig.print_once.o
      Signed-off-by: default avatarJoe Perches <joe@perches.com>
      Signed-off-by: default avatarJeff Garzik <jgarzik@pobox.com>
      06296a1e
    • Joe Perches's avatar
      ata: Convert ata_<foo>_printk(KERN_<LEVEL> to ata_<foo>_<level> · a9a79dfe
      Joe Perches authored
      Saves text by removing nearly duplicated text format strings by
      creating ata_<foo>_printk functions and printf extension %pV.
      
      ata defconfig size shrinks ~5% (~8KB), allyesconfig ~2.5% (~13KB)
      
      Format string duplication comes from:
      
       #define ata_link_printk(link, lv, fmt, args...) do { \
             if (sata_pmp_attached((link)->ap) || (link)->ap->slave_link)    \
                     printk("%sata%u.%02u: "fmt, lv, (link)->ap->print_id,   \
                            (link)->pmp , ##args); \
             else \
                     printk("%sata%u: "fmt, lv, (link)->ap->print_id , ##args); \
             } while(0)
      
      Coalesce long formats.
      
      $ size drivers/ata/built-in.*
         text	   data	    bss	    dec	    hex	filename
       544969	  73893	 116584	 735446	  b38d6	drivers/ata/built-in.allyesconfig.ata.o
       558429	  73893	 117864	 750186	  b726a	drivers/ata/built-in.allyesconfig.dev_level.o
       141328	  14689	   4220	 160237	  271ed	drivers/ata/built-in.defconfig.ata.o
       149567	  14689	   4220	 168476	  2921c	drivers/ata/built-in.defconfig.dev_level.o
      Signed-off-by: default avatarJoe Perches <joe@perches.com>
      Signed-off-by: default avatarJeff Garzik <jgarzik@pobox.com>
      a9a79dfe
    • Joe Perches's avatar
      ata: Convert dev_printk(KERN_<LEVEL> to dev_<level>( · a44fec1f
      Joe Perches authored
      Saves a bit of text as the call takes fewer args.
      
      Coalesce a few formats.
      Convert a few bare printks to pr_cont.
      
      $ size drivers/ata/built-in.o*
         text	   data	    bss	    dec	    hex	filename
       558429	  73893	 117864	 750186	  b726a	drivers/ata/built-in.o.allyesconfig.new
       559574	  73893	 117888	 751355	  b76fb	drivers/ata/built-in.o.allyesconfig.old
       149567	  14689	   4220	 168476	  2921c	drivers/ata/built-in.o.defconfig.new
       149851	  14689	   4220	 168760	  29338	drivers/ata/built-in.o.defconfig.old
      Signed-off-by: default avatarJoe Perches <joe@perches.com>
      Signed-off-by: default avatarJeff Garzik <jgarzik@pobox.com>
      a44fec1f
  12. 31 Mar, 2011 1 commit
  13. 02 Mar, 2011 1 commit
  14. 19 Nov, 2010 1 commit
  15. 22 Oct, 2010 1 commit
  16. 07 Jun, 2010 1 commit
  17. 02 Jun, 2010 1 commit
  18. 25 May, 2010 3 commits
    • Tejun Heo's avatar
      libata-sff: separate out BMDMA init · 1c5afdf7
      Tejun Heo authored
      Separate out ata_pci_bmdma_prepare_host() and ata_pci_bmdma_init_one()
      from their SFF counterparts.  SFF ones no longer try to initialize
      BMDMA or set PCI master.
      Signed-off-by: default avatarTejun Heo <tj@kernel.org>
      Signed-off-by: default avatarJeff Garzik <jgarzik@redhat.com>
      1c5afdf7
    • Tejun Heo's avatar
      libata-sff: separate out BMDMA irq handler · c3b28894
      Tejun Heo authored
      Separate out BMDMA irq handler from SFF irq handler.  The misnamed
      host_intr() functions are renamed to ata_sff_port_intr() and
      ata_bmdma_port_intr().  Common parts are factored into
      __ata_sff_port_intr() and __ata_sff_interrupt() and used by sff and
      bmdma interrupt routines.
      
      All BMDMA drivers now use ata_bmdma_interrupt() or
      ata_bmdma_port_intr() while all non-BMDMA SFF ones use
      ata_sff_interrupt() or ata_sff_port_intr().
      
      For now, ata_pci_sff_init_one() uses ata_bmdma_interrupt() as it's
      used by both SFF and BMDMA drivers.
      Signed-off-by: default avatarTejun Heo <tj@kernel.org>
      Signed-off-by: default avatarJeff Garzik <jgarzik@redhat.com>
      c3b28894
    • Tejun Heo's avatar
      libata-sff: ata_sff_irq_clear() is BMDMA specific · 37f65b8b
      Tejun Heo authored
      ata_sff_irq_clear() is BMDMA specific.  Rename it to
      ata_bmdma_irq_clear(), move it to ata_bmdma_port_ops and make
      ->sff_irq_clear() optional.
      
      Note: ata_bmdma_irq_clear() is actually only needed by ata_piix and
            possibly by sata_sil.  This should be moved to respective low
            level drivers later.
      Signed-off-by: default avatarTejun Heo <tj@kernel.org>
      Signed-off-by: default avatarJeff Garzik <jgarzik@redhat.com>
      37f65b8b
  19. 01 Mar, 2010 2 commits
  20. 03 Nov, 2009 1 commit
  21. 13 Apr, 2009 1 commit
  22. 25 Mar, 2009 1 commit
  23. 16 Jan, 2009 1 commit
  24. 04 Nov, 2008 1 commit
  25. 31 Oct, 2008 1 commit
    • Tejun Heo's avatar
      sata_via: fix support for 5287 · b9d5b89b
      Tejun Heo authored
      5287 used to be treated as vt6420 but it didn't work.  It's new family
      of controllers called vt8251 which hosts four SATA ports as M/S of the
      two ATA ports.  This configuration is rather peculiar in that although
      the M/S devices are on the same port, each have its own SCR (or
      equivalent link status/control) registers which screws up the
      port-link-device hierarchy assumed by libata.  Another controller
      which falls into this category is ata_piix w/ SIDPR access.
      
      libata now has facility to deal with this class of controllers named
      slave_link.  A low level driver for such controllers can just call
      ata_slave_link_init() on the respective ports and libata will handle
      all the difficult parts like following up with single SRST after
      hardresetting both ports.
      
      This patch creates new controller class vt8251, implements slave_link
      aware init sequence and config space based SCR access for it and moves
      5287 to the new class.
      
      This patch is based on Joseph Chan's larger patch which was created
      before slave_link was implemented in libata.
      
        http://thread.gmane.org/gmane.linux.kernel.commits.mm/40640Signed-off-by: default avatarTejun Heo <tj@kernel.org>
      Cc: Joseph Chan <JosephChan@via.com.tw>
      Signed-off-by: default avatarJeff Garzik <jgarzik@redhat.com>
      b9d5b89b
  26. 23 Oct, 2008 1 commit
  27. 29 Sep, 2008 1 commit
    • Tejun Heo's avatar
      libata: make SCR access ops per-link · 82ef04fb
      Tejun Heo authored
      Logically, SCR access ops should take @link; however, there was no
      compelling reason to convert all SCR access ops when adding @link
      abstraction as there's one-to-one mapping between a port and a non-PMP
      link.  However, that assumption won't hold anymore with the scheduled
      addition of slave link.
      
      Make SCR access ops per-link.
      Signed-off-by: default avatarTejun Heo <tj@kernel.org>
      Signed-off-by: default avatarJeff Garzik <jgarzik@redhat.com>
      82ef04fb
  28. 17 Apr, 2008 5 commits
    • Tejun Heo's avatar
      libata: restructure SFF post-reset readiness waits · 705e76be
      Tejun Heo authored
      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: default avatarTejun Heo <htejun@gmail.com>
      705e76be
    • Tejun Heo's avatar
      libata: rename SFF port ops · 5682ed33
      Tejun Heo authored
      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: default avatarTejun Heo <htejun@gmail.com>
      5682ed33
    • Tejun Heo's avatar
      libata: rename SFF functions · 9363c382
      Tejun Heo authored
      SFF functions have confusing names.  Some have sff prefix, some have
      bmdma, some std, some pci and some none.  Unify the naming by...
      
      * SFF functions which are common to both BMDMA and non-BMDMA are
        prefixed with ata_sff_.
      
      * SFF functions which are specific to BMDMA are prefixed with
        ata_bmdma_.
      
      * SFF functions which are specific to PCI but apply to both BMDMA and
        non-BMDMA are prefixed with ata_pci_sff_.
      
      * SFF functions which are specific to PCI and BMDMA are prefixed with
        ata_pci_bmdma_.
      
      * Drop generic prefixes from LLD specific routines.  For example,
        bfin_std_dev_select -> bfin_dev_select.
      
      The following renames are noteworthy.
      
        ata_qc_issue_prot() -> ata_sff_qc_issue()
        ata_pci_default_filter() -> ata_bmdma_mode_filter()
        ata_dev_try_classify() -> ata_sff_dev_classify()
      
      This rename is in preparation of separating SFF support out of libata
      core layer.  This patch strictly renames functions and doesn't
      introduce any behavior difference.
      Signed-off-by: default avatarTejun Heo <htejun@gmail.com>
      9363c382
    • Tejun Heo's avatar
      libata: kill ata_chk_status() · 6fd36390
      Tejun Heo authored
      ata_chk_status() just calls ops->check_status and it only adds
      confusion with other status functions.  Kill it.
      Signed-off-by: default avatarTejun Heo <htejun@gmail.com>
      Signed-off-by: default avatarJeff Garzik <jeff@garzik.org>
      6fd36390
    • Tejun Heo's avatar
      libata: make reset related methods proper port operations · a1efdaba
      Tejun Heo authored
      Currently reset methods are not specified directly in the
      ata_port_operations table.  If a LLD wants to use custom reset
      methods, it should construct and use a error_handler which uses those
      reset methods.  It's done this way for two reasons.
      
      First, the ops table already contained too many methods and adding
      four more of them would noticeably increase the amount of necessary
      boilerplate code all over low level drivers.
      
      Second, as ->error_handler uses those reset methods, it can get
      confusing.  ie. By overriding ->error_handler, those reset ops can be
      made useless making layering a bit hazy.
      
      Now that ops table uses inheritance, the first problem doesn't exist
      anymore.  The second isn't completely solved but is relieved by
      providing default values - most drivers can just override what it has
      implemented and don't have to concern itself about higher level
      callbacks.  In fact, there currently is no driver which actually
      modifies error handling behavior.  Drivers which override
      ->error_handler just wraps the standard error handler only to prepare
      the controller for EH.  I don't think making ops layering strict has
      any noticeable benefit.
      
      This patch makes ->prereset, ->softreset, ->hardreset, ->postreset and
      their PMP counterparts propoer ops.  Default ops are provided in the
      base ops tables and drivers are converted to override individual reset
      methods instead of creating custom error_handler.
      
      * ata_std_error_handler() doesn't use sata_std_hardreset() if SCRs
        aren't accessible.  sata_promise doesn't need to use separate
        error_handlers for PATA and SATA anymore.
      
      * softreset is broken for sata_inic162x and sata_sx4.  As libata now
        always prefers hardreset, this doesn't really matter but the ops are
        forced to NULL using ATA_OP_NULL for documentation purpose.
      
      * pata_hpt374 needs to use different prereset for the first and second
        PCI functions.  This used to be done by branching from
        hpt374_error_handler().  The proper way to do this is to use
        separate ops and port_info tables for each function.  Converted.
      Signed-off-by: default avatarTejun Heo <htejun@gmail.com>
      a1efdaba