Merge tag 'ata-6.6-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/dlemoal...
authorLinus Torvalds <torvalds@linux-foundation.org>
Tue, 5 Sep 2023 19:37:28 +0000 (12:37 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Tue, 5 Sep 2023 19:37:28 +0000 (12:37 -0700)
Pull ata updates from Damien Le Moal:

 - Fix OF include file for ata platform drivers (Rob)

 - Simplify various ahci, sata and pata platform drivers using the
   function devm_platform_ioremap_resource() (Yangtao)

 - Cleanup libata time related argument types (e.g. timeouts values)
   (Sergey)

 - Cleanup libata code around error handling as all ata drivers now
   define a error_handler operation (Hannes and Niklas)

 - Remove functions intended for libsas that are in fact unused (Niklas)

 - Change the remove device callback of platform drivers to a null
   function (Uwe)

 - Simplify the pata_imx driver using devm_clk_get_enabled() (Li)

 - Remove old and uinused remnants of the ide code in arm, parisc,
   powerpc, sparc and m68k architectures and associated drivers
   (pata_buddha, pata_falcon and pata_gayle) (Geert)

 - Add missing MODULE_DESCRIPTION() in the sata_gemini and pata_ftide010
   drivers (me)

 - Several fixes for the pata_ep93xx and pata_falcon drivers (Nikita,
   Michael)

 - Add Elkhart Lake AHCI controller support to the ahci driver (Werner)

 - Disable NCQ trim on Micron 1100 drives (Pawel)

* tag 'ata-6.6-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/dlemoal/libata: (60 commits)
  ata: libata-core: Disable NCQ_TRIM on Micron 1100 drives
  ata: ahci: Add Elkhart Lake AHCI controller
  ata: pata_falcon: add data_swab option to byte-swap disk data
  ata: pata_falcon: fix IO base selection for Q40
  ata: pata_ep93xx: use soc_device_match for UDMA modes
  ata: pata_ep93xx: fix error return code in probe
  ata: sata_gemini: Add missing MODULE_DESCRIPTION
  ata: pata_ftide010: Add missing MODULE_DESCRIPTION
  m68k: Remove <asm/ide.h>
  ata: pata_gayle: Remove #include <asm/ide.h>
  ata: pata_falcon: Remove #include <asm/ide.h>
  ata: pata_buddha: Remove #include <asm/ide.h>
  asm-generic: Remove ide_iops.h
  sparc: Remove <asm/ide.h>
  powerpc: Remove <asm/ide.h>
  parisc: Remove <asm/ide.h>
  ARM: Remove <asm/ide.h>
  ata: pata_imx: Use helper function devm_clk_get_enabled()
  ata: sata_rcar: Convert to platform remove callback returning void
  ata: sata_mv: Convert to platform remove callback returning void
  ...

52 files changed:
Documentation/driver-api/libata.rst
arch/arm/include/asm/ide.h [deleted file]
arch/m68k/include/asm/ide.h [deleted file]
arch/parisc/include/asm/ide.h [deleted file]
arch/powerpc/include/asm/ide.h [deleted file]
arch/sparc/include/asm/ide.h [deleted file]
drivers/ata/ahci.c
drivers/ata/ahci_ceva.c
drivers/ata/ahci_dwc.c
drivers/ata/ahci_mtk.c
drivers/ata/ahci_mvebu.c
drivers/ata/ahci_octeon.c
drivers/ata/ahci_qoriq.c
drivers/ata/ahci_seattle.c
drivers/ata/ahci_sunxi.c
drivers/ata/ahci_tegra.c
drivers/ata/ahci_xgene.c
drivers/ata/libahci.c
drivers/ata/libahci_platform.c
drivers/ata/libata-core.c
drivers/ata/libata-eh.c
drivers/ata/libata-sata.c
drivers/ata/libata-scsi.c
drivers/ata/libata-sff.c
drivers/ata/libata.h
drivers/ata/pata_arasan_cf.c
drivers/ata/pata_buddha.c
drivers/ata/pata_ep93xx.c
drivers/ata/pata_falcon.c
drivers/ata/pata_ftide010.c
drivers/ata/pata_gayle.c
drivers/ata/pata_imx.c
drivers/ata/pata_ixp4xx_cf.c
drivers/ata/pata_mpc52xx.c
drivers/ata/pata_pxa.c
drivers/ata/pata_rb532_cf.c
drivers/ata/pata_sl82c105.c
drivers/ata/sata_dwc_460ex.c
drivers/ata/sata_fsl.c
drivers/ata/sata_gemini.c
drivers/ata/sata_highbank.c
drivers/ata/sata_inic162x.c
drivers/ata/sata_mv.c
drivers/ata/sata_nv.c
drivers/ata/sata_rcar.c
drivers/ata/sata_sil24.c
drivers/ata/sata_sx4.c
drivers/scsi/hisi_sas/hisi_sas_main.c
drivers/scsi/libsas/sas_ata.c
drivers/scsi/libsas/sas_discover.c
include/asm-generic/ide_iops.h [deleted file]
include/linux/libata.h

index 311af516a3fd9c42a1eff43a2db4c392d0f449b9..5da27a749246edc3b2da24d0f78b5959e5d86f04 100644 (file)
@@ -32,22 +32,6 @@ register blocks.
 :c:type:`struct ata_port_operations <ata_port_operations>`
 ----------------------------------------------------------
 
-Disable ATA port
-~~~~~~~~~~~~~~~~
-
-::
-
-    void (*port_disable) (struct ata_port *);
-
-
-Called from :c:func:`ata_bus_probe` error path, as well as when unregistering
-from the SCSI module (rmmod, hot unplug). This function should do
-whatever needs to be done to take the port out of use. In most cases,
-:c:func:`ata_port_disable` can be used as this hook.
-
-Called from :c:func:`ata_bus_probe` on a failed probe. Called from
-:c:func:`ata_scsi_release`.
-
 Post-IDENTIFY device configuration
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
@@ -272,14 +256,6 @@ advanced drivers implement their own ``->qc_issue``.
 Exception and probe handling (EH)
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-::
-
-    void (*eng_timeout) (struct ata_port *ap);
-    void (*phy_reset) (struct ata_port *ap);
-
-
-Deprecated. Use ``->error_handler()`` instead.
-
 ::
 
     void (*freeze) (struct ata_port *ap);
@@ -364,8 +340,7 @@ SATA phy read/write
                        u32 val);
 
 
-Read and write standard SATA phy registers. Currently only used if
-``->phy_reset`` hook called the :c:func:`sata_phy_reset` helper function.
+Read and write standard SATA phy registers.
 sc_reg is one of SCR_STATUS, SCR_CONTROL, SCR_ERROR, or SCR_ACTIVE.
 
 Init and shutdown
@@ -536,13 +511,12 @@ to return without deallocating the qc. This leads us to
 
 :c:func:`ata_scsi_error` is the current ``transportt->eh_strategy_handler()``
 for libata. As discussed above, this will be entered in two cases -
-timeout and ATAPI error completion. This function calls low level libata
-driver's :c:func:`eng_timeout` callback, the standard callback for which is
-:c:func:`ata_eng_timeout`. It checks if a qc is active and calls
-:c:func:`ata_qc_timeout` on the qc if so. Actual error handling occurs in
-:c:func:`ata_qc_timeout`.
+timeout and ATAPI error completion. This function will check if a qc is active
+and has not failed yet. Such a qc will be marked with AC_ERR_TIMEOUT such that
+EH will know to handle it later. Then it calls low level libata driver's
+:c:func:`error_handler` callback.
 
-If EH is invoked for timeout, :c:func:`ata_qc_timeout` stops BMDMA and
+When the :c:func:`error_handler` callback is invoked it stops BMDMA and
 completes the qc. Note that as we're currently in EH, we cannot call
 scsi_done. As described in SCSI EH doc, a recovered scmd should be
 either retried with :c:func:`scsi_queue_insert` or finished with
diff --git a/arch/arm/include/asm/ide.h b/arch/arm/include/asm/ide.h
deleted file mode 100644 (file)
index a81e0b0..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/*
- *  arch/arm/include/asm/ide.h
- *
- *  Copyright (C) 1994-1996  Linus Torvalds & authors
- */
-
-/*
- *  This file contains the ARM architecture specific IDE code.
- */
-
-#ifndef __ASMARM_IDE_H
-#define __ASMARM_IDE_H
-
-#ifdef __KERNEL__
-
-#define __ide_mm_insw(port,addr,len)   readsw(port,addr,len)
-#define __ide_mm_insl(port,addr,len)   readsl(port,addr,len)
-#define __ide_mm_outsw(port,addr,len)  writesw(port,addr,len)
-#define __ide_mm_outsl(port,addr,len)  writesl(port,addr,len)
-
-#endif /* __KERNEL__ */
-
-#endif /* __ASMARM_IDE_H */
diff --git a/arch/m68k/include/asm/ide.h b/arch/m68k/include/asm/ide.h
deleted file mode 100644 (file)
index 05cc7dc..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/*
- *  Copyright (C) 1994-1996  Linus Torvalds & authors
- */
-
-/* Copyright(c) 1996 Kars de Jong */
-/* Based on the ide driver from 1.2.13pl8 */
-
-/*
- * Credits (alphabetical):
- *
- *  - Bjoern Brauel
- *  - Kars de Jong
- *  - Torsten Ebeling
- *  - Dwight Engen
- *  - Thorsten Floeck
- *  - Roman Hodek
- *  - Guenther Kelleter
- *  - Chris Lawrence
- *  - Michael Rausch
- *  - Christian Sauer
- *  - Michael Schmitz
- *  - Jes Soerensen
- *  - Michael Thurm
- *  - Geert Uytterhoeven
- */
-
-#ifndef _M68K_IDE_H
-#define _M68K_IDE_H
-
-#ifdef __KERNEL__
-#include <asm/setup.h>
-#include <asm/io.h>
-#include <asm/irq.h>
-
-#ifdef CONFIG_MMU
-
-/*
- * Get rid of defs from io.h - ide has its private and conflicting versions
- * Since so far no single m68k platform uses ISA/PCI I/O space for IDE, we
- * always use the `raw' MMIO versions
- */
-#undef readb
-#undef readw
-#undef writeb
-#undef writew
-
-#define readb                          in_8
-#define readw                          in_be16
-#define __ide_mm_insw(port, addr, n)   raw_insw((u16 *)port, addr, n)
-#define __ide_mm_insl(port, addr, n)   raw_insl((u32 *)port, addr, n)
-#define writeb(val, port)              out_8(port, val)
-#define writew(val, port)              out_be16(port, val)
-#define __ide_mm_outsw(port, addr, n)  raw_outsw((u16 *)port, addr, n)
-#define __ide_mm_outsl(port, addr, n)  raw_outsl((u32 *)port, addr, n)
-
-#else
-
-#define __ide_mm_insw(port, addr, n)   io_insw((unsigned int)port, addr, n)
-#define __ide_mm_insl(port, addr, n)   io_insl((unsigned int)port, addr, n)
-#define __ide_mm_outsw(port, addr, n)  io_outsw((unsigned int)port, addr, n)
-#define __ide_mm_outsl(port, addr, n)  io_outsl((unsigned int)port, addr, n)
-
-#endif /* CONFIG_MMU */
-
-#endif /* __KERNEL__ */
-#endif /* _M68K_IDE_H */
diff --git a/arch/parisc/include/asm/ide.h b/arch/parisc/include/asm/ide.h
deleted file mode 100644 (file)
index 7aa75b9..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/*
- *  linux/include/asm-parisc/ide.h
- *
- *  Copyright (C) 1994-1996  Linus Torvalds & authors
- */
-
-/*
- *  This file contains the PARISC architecture specific IDE code.
- */
-
-#ifndef __ASM_PARISC_IDE_H
-#define __ASM_PARISC_IDE_H
-
-/* Generic I/O and MEMIO string operations.  */
-
-#define __ide_insw     insw
-#define __ide_insl     insl
-#define __ide_outsw    outsw
-#define __ide_outsl    outsl
-
-static __inline__ void __ide_mm_insw(void __iomem *port, void *addr, u32 count)
-{
-       while (count--) {
-               *(u16 *)addr = __raw_readw(port);
-               addr += 2;
-       }
-}
-
-static __inline__ void __ide_mm_insl(void __iomem *port, void *addr, u32 count)
-{
-       while (count--) {
-               *(u32 *)addr = __raw_readl(port);
-               addr += 4;
-       }
-}
-
-static __inline__ void __ide_mm_outsw(void __iomem *port, void *addr, u32 count)
-{
-       while (count--) {
-               __raw_writew(*(u16 *)addr, port);
-               addr += 2;
-       }
-}
-
-static __inline__ void __ide_mm_outsl(void __iomem *port, void *addr, u32 count)
-{
-       while (count--) {
-               __raw_writel(*(u32 *)addr, port);
-               addr += 4;
-       }
-}
-
-#endif /* __ASM_PARISC_IDE_H */
diff --git a/arch/powerpc/include/asm/ide.h b/arch/powerpc/include/asm/ide.h
deleted file mode 100644 (file)
index ce87a44..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/*
- *  Copyright (C) 1994-1996 Linus Torvalds & authors
- *
- *  This file contains the powerpc architecture specific IDE code.
- */
-#ifndef _ASM_POWERPC_IDE_H
-#define _ASM_POWERPC_IDE_H
-
-#include <linux/compiler.h>
-#include <asm/io.h>
-
-#define __ide_mm_insw(p, a, c) readsw((void __iomem *)(p), (a), (c))
-#define __ide_mm_insl(p, a, c) readsl((void __iomem *)(p), (a), (c))
-#define __ide_mm_outsw(p, a, c)        writesw((void __iomem *)(p), (a), (c))
-#define __ide_mm_outsl(p, a, c)        writesl((void __iomem *)(p), (a), (c))
-
-#endif /* _ASM_POWERPC_IDE_H */
diff --git a/arch/sparc/include/asm/ide.h b/arch/sparc/include/asm/ide.h
deleted file mode 100644 (file)
index 904cc6c..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/* ide.h: SPARC PCI specific IDE glue.
- *
- * Copyright (C) 1997  David S. Miller (davem@davemloft.net)
- * Copyright (C) 1998  Eddie C. Dost   (ecd@skynet.be)
- * Adaptation from sparc64 version to sparc by Pete Zaitcev.
- */
-
-#ifndef _SPARC_IDE_H
-#define _SPARC_IDE_H
-
-#ifdef __KERNEL__
-
-#include <asm/io.h>
-#ifdef CONFIG_SPARC64
-#include <asm/spitfire.h>
-#include <asm/cacheflush.h>
-#include <asm/page.h>
-#else
-#include <linux/pgtable.h>
-#include <asm/psr.h>
-#endif
-
-#define __ide_insl(data_reg, buffer, wcount) \
-       __ide_insw(data_reg, buffer, (wcount)<<1)
-#define __ide_outsl(data_reg, buffer, wcount) \
-       __ide_outsw(data_reg, buffer, (wcount)<<1)
-
-/* On sparc, I/O ports and MMIO registers are accessed identically.  */
-#define __ide_mm_insw  __ide_insw
-#define __ide_mm_insl  __ide_insl
-#define __ide_mm_outsw __ide_outsw
-#define __ide_mm_outsl __ide_outsl
-
-static inline void __ide_insw(void __iomem *port, void *dst, u32 count)
-{
-#if defined(CONFIG_SPARC64) && defined(DCACHE_ALIASING_POSSIBLE)
-       unsigned long end = (unsigned long)dst + (count << 1);
-#endif
-       u16 *ps = dst;
-       u32 *pi;
-
-       if(((unsigned long)ps) & 0x2) {
-               *ps++ = __raw_readw(port);
-               count--;
-       }
-       pi = (u32 *)ps;
-       while(count >= 2) {
-               u32 w;
-
-               w  = __raw_readw(port) << 16;
-               w |= __raw_readw(port);
-               *pi++ = w;
-               count -= 2;
-       }
-       ps = (u16 *)pi;
-       if(count)
-               *ps++ = __raw_readw(port);
-
-#if defined(CONFIG_SPARC64) && defined(DCACHE_ALIASING_POSSIBLE)
-       __flush_dcache_range((unsigned long)dst, end);
-#endif
-}
-
-static inline void __ide_outsw(void __iomem *port, const void *src, u32 count)
-{
-#if defined(CONFIG_SPARC64) && defined(DCACHE_ALIASING_POSSIBLE)
-       unsigned long end = (unsigned long)src + (count << 1);
-#endif
-       const u16 *ps = src;
-       const u32 *pi;
-
-       if(((unsigned long)src) & 0x2) {
-               __raw_writew(*ps++, port);
-               count--;
-       }
-       pi = (const u32 *)ps;
-       while(count >= 2) {
-               u32 w;
-
-               w = *pi++;
-               __raw_writew((w >> 16), port);
-               __raw_writew(w, port);
-               count -= 2;
-       }
-       ps = (const u16 *)pi;
-       if(count)
-               __raw_writew(*ps, port);
-
-#if defined(CONFIG_SPARC64) && defined(DCACHE_ALIASING_POSSIBLE)
-       __flush_dcache_range((unsigned long)src, end);
-#endif
-}
-
-#endif /* __KERNEL__ */
-
-#endif /* _SPARC_IDE_H */
index addba109406bef11df1c3e39e65318f1157335e7..abb5911c9d09159264436ef0dcc344d1edc72c7e 100644 (file)
@@ -421,6 +421,8 @@ static const struct pci_device_id ahci_pci_tbl[] = {
        { PCI_VDEVICE(INTEL, 0x34d3), board_ahci_low_power }, /* Ice Lake LP AHCI */
        { PCI_VDEVICE(INTEL, 0x02d3), board_ahci_low_power }, /* Comet Lake PCH-U AHCI */
        { PCI_VDEVICE(INTEL, 0x02d7), board_ahci_low_power }, /* Comet Lake PCH RAID */
+       /* Elkhart Lake IDs 0x4b60 & 0x4b62 https://sata-io.org/product/8803 not tested yet */
+       { PCI_VDEVICE(INTEL, 0x4b63), board_ahci_low_power }, /* Elkhart Lake AHCI */
 
        /* JMicron 360/1/3/5/6, match class to avoid IDE function */
        { PCI_VENDOR_ID_JMICRON, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
@@ -807,7 +809,7 @@ static int ahci_p5wdh_hardreset(struct ata_link *link, unsigned int *class,
 static int ahci_avn_hardreset(struct ata_link *link, unsigned int *class,
                              unsigned long deadline)
 {
-       const unsigned long *timing = sata_ehc_deb_timing(&link->eh_context);
+       const unsigned int *timing = sata_ehc_deb_timing(&link->eh_context);
        struct ata_port *ap = link->ap;
        struct ahci_port_priv *pp = ap->private_data;
        struct ahci_host_priv *hpriv = ap->host->private_data;
index c2b6be083af434d2ea2a539bae101b9b7259f9cf..64f7f7d6ba84e07c2f2db2fbbdfb3d315f821ec2 100644 (file)
@@ -10,7 +10,7 @@
 #include <linux/kernel.h>
 #include <linux/libata.h>
 #include <linux/module.h>
-#include <linux/of_device.h>
+#include <linux/of.h>
 #include <linux/platform_device.h>
 #include <linux/reset.h>
 #include "ahci.h"
index 9604a2f6ed489e4ad5d9bde8ede8032446daf262..ed263de3fd7067dfcb75c694de75692ff1ab79a5 100644 (file)
@@ -15,7 +15,7 @@
 #include <linux/log2.h>
 #include <linux/mfd/syscon.h>
 #include <linux/module.h>
-#include <linux/of_device.h>
+#include <linux/of.h>
 #include <linux/platform_device.h>
 #include <linux/pm.h>
 #include <linux/regmap.h>
index 5083fb6c49277324a7e38fd44f158067c64747df..adc851cd55789c9b99ce6461ecb1af78c817e346 100644 (file)
@@ -11,6 +11,7 @@
 #include <linux/libata.h>
 #include <linux/mfd/syscon.h>
 #include <linux/module.h>
+#include <linux/of.h>
 #include <linux/platform_device.h>
 #include <linux/pm.h>
 #include <linux/regmap.h>
index 76450151858236df0b3c3465e28d2109ec6691fb..f3187351e8a6c2daef3438dc3008ecac92692b48 100644 (file)
@@ -15,7 +15,7 @@
 #include <linux/kernel.h>
 #include <linux/mbus.h>
 #include <linux/module.h>
-#include <linux/of_device.h>
+#include <linux/of.h>
 #include <linux/platform_device.h>
 #include "ahci.h"
 
index e89807fa928e4bd1d158554c02e947263a67389f..9accf8923891ab93a2c1c01dbfccea7f0282e146 100644 (file)
@@ -31,13 +31,11 @@ static int ahci_octeon_probe(struct platform_device *pdev)
 {
        struct device *dev = &pdev->dev;
        struct device_node *node = dev->of_node;
-       struct resource *res;
        void __iomem *base;
        u64 cfg;
        int ret;
 
-       res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-       base = devm_ioremap_resource(&pdev->dev, res);
+       base = devm_platform_ioremap_resource(pdev, 0);
        if (IS_ERR(base))
                return PTR_ERR(base);
 
index 3d01b118c9a1a2f8f1770525b8560f007deefc20..b1a4e57578e203f1b8db661782e49b8f1e71fba8 100644 (file)
@@ -12,9 +12,7 @@
 #include <linux/pm.h>
 #include <linux/ahci_platform.h>
 #include <linux/device.h>
-#include <linux/of_address.h>
 #include <linux/of.h>
-#include <linux/of_device.h>
 #include <linux/platform_device.h>
 #include <linux/libata.h>
 #include "ahci.h"
@@ -90,7 +88,7 @@ MODULE_DEVICE_TABLE(acpi, ahci_qoriq_acpi_match);
 static int ahci_qoriq_hardreset(struct ata_link *link, unsigned int *class,
                          unsigned long deadline)
 {
-       const unsigned long *timing = sata_ehc_deb_timing(&link->eh_context);
+       const unsigned int *timing = sata_ehc_deb_timing(&link->eh_context);
        void __iomem *port_mmio = ahci_port_base(link->ap);
        u32 px_cmd, px_is, px_val;
        struct ata_port *ap = link->ap;
index 2c32d58c6ae7543bafb327c99254ceb461b61004..59f97aa7ac75c29a1c1973e9b4d93c806c354ea9 100644 (file)
@@ -12,7 +12,6 @@
 #include <linux/module.h>
 #include <linux/pm.h>
 #include <linux/device.h>
-#include <linux/of_device.h>
 #include <linux/platform_device.h>
 #include <linux/libata.h>
 #include <linux/ahci_platform.h>
@@ -132,8 +131,7 @@ static const struct ata_port_info *ahci_seattle_get_port_info(
        if (!plat_data)
                return &ahci_port_info;
 
-       plat_data->sgpio_ctrl = devm_ioremap_resource(dev,
-                             platform_get_resource(pdev, IORESOURCE_MEM, 1));
+       plat_data->sgpio_ctrl = devm_platform_ioremap_resource(pdev, 1);
        if (IS_ERR(plat_data->sgpio_ctrl))
                return &ahci_port_info;
 
index 04531fa95e404c41ac5313f77231d603b01e7b50..58b2683954ddf765e377bf124407d71d14caa4f6 100644 (file)
@@ -13,8 +13,8 @@
 #include <linux/clk.h>
 #include <linux/errno.h>
 #include <linux/kernel.h>
+#include <linux/mod_devicetable.h>
 #include <linux/module.h>
-#include <linux/of_device.h>
 #include <linux/platform_device.h>
 #include <linux/regulator/consumer.h>
 #include "ahci.h"
index 21c20793e517780ec69c1e65d6df06a9b7315fd0..8703c2a4658bb9b777459629e06545f1f369cb9d 100644 (file)
@@ -12,7 +12,7 @@
 #include <linux/errno.h>
 #include <linux/kernel.h>
 #include <linux/module.h>
-#include <linux/of_device.h>
+#include <linux/of.h>
 #include <linux/platform_device.h>
 #include <linux/regulator/consumer.h>
 #include <linux/reset.h>
@@ -530,8 +530,7 @@ static int tegra_ahci_probe(struct platform_device *pdev)
        tegra->pdev = pdev;
        tegra->soc = of_device_get_match_data(&pdev->dev);
 
-       res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
-       tegra->sata_regs = devm_ioremap_resource(&pdev->dev, res);
+       tegra->sata_regs = devm_platform_ioremap_resource(pdev, 1);
        if (IS_ERR(tegra->sata_regs))
                return PTR_ERR(tegra->sata_regs);
 
index eb773f2e28fcbbc6eeccbc9b0eff6197e2ef6a87..ccef5e63bdf9d916bda97eb96b1957eda0635bf5 100644 (file)
@@ -110,9 +110,8 @@ static int xgene_ahci_init_memram(struct xgene_ahci_context *ctx)
  * @timeout : timeout for achieving the value.
  */
 static int xgene_ahci_poll_reg_val(struct ata_port *ap,
-                                  void __iomem *reg, unsigned
-                                  int val, unsigned long interval,
-                                  unsigned long timeout)
+                                  void __iomem *reg, unsigned int val,
+                                  unsigned int interval, unsigned int timeout)
 {
        unsigned long deadline;
        unsigned int tmp;
@@ -350,7 +349,7 @@ static void xgene_ahci_set_phy_cfg(struct xgene_ahci_context *ctx, int channel)
 static int xgene_ahci_do_hardreset(struct ata_link *link,
                                   unsigned long deadline, bool *online)
 {
-       const unsigned long *timing = sata_ehc_deb_timing(&link->eh_context);
+       const unsigned int *timing = sata_ehc_deb_timing(&link->eh_context);
        struct ata_port *ap = link->ap;
        struct ahci_host_priv *hpriv = ap->host->private_data;
        struct xgene_ahci_context *ctx = hpriv->plat_data;
@@ -755,20 +754,17 @@ static int xgene_ahci_probe(struct platform_device *pdev)
        ctx->dev = dev;
 
        /* Retrieve the IP core resource */
-       res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
-       ctx->csr_core = devm_ioremap_resource(dev, res);
+       ctx->csr_core = devm_platform_ioremap_resource(pdev, 1);
        if (IS_ERR(ctx->csr_core))
                return PTR_ERR(ctx->csr_core);
 
        /* Retrieve the IP diagnostic resource */
-       res = platform_get_resource(pdev, IORESOURCE_MEM, 2);
-       ctx->csr_diag = devm_ioremap_resource(dev, res);
+       ctx->csr_diag = devm_platform_ioremap_resource(pdev, 2);
        if (IS_ERR(ctx->csr_diag))
                return PTR_ERR(ctx->csr_diag);
 
        /* Retrieve the IP AXI resource */
-       res = platform_get_resource(pdev, IORESOURCE_MEM, 3);
-       ctx->csr_axi = devm_ioremap_resource(dev, res);
+       ctx->csr_axi = devm_platform_ioremap_resource(pdev, 3);
        if (IS_ERR(ctx->csr_axi))
                return PTR_ERR(ctx->csr_axi);
 
index 06aec35f88f2c61cf01b0b08d994585a73a4aa87..e2bacedf28ef5be940959628969c64e569f6320d 100644 (file)
@@ -1403,7 +1403,7 @@ EXPORT_SYMBOL_GPL(ahci_kick_engine);
 
 static int ahci_exec_polled_cmd(struct ata_port *ap, int pmp,
                                struct ata_taskfile *tf, int is_cmd, u16 flags,
-                               unsigned long timeout_msec)
+                               unsigned int timeout_msec)
 {
        const u32 cmd_fis_len = 5; /* five dwords */
        struct ahci_port_priv *pp = ap->private_data;
@@ -1448,7 +1448,8 @@ int ahci_do_softreset(struct ata_link *link, unsigned int *class,
        struct ahci_host_priv *hpriv = ap->host->private_data;
        struct ahci_port_priv *pp = ap->private_data;
        const char *reason = NULL;
-       unsigned long now, msecs;
+       unsigned long now;
+       unsigned int msecs;
        struct ata_taskfile tf;
        bool fbs_disabled = false;
        int rc;
@@ -1587,7 +1588,7 @@ static int ahci_pmp_retry_softreset(struct ata_link *link, unsigned int *class,
 int ahci_do_hardreset(struct ata_link *link, unsigned int *class,
                      unsigned long deadline, bool *online)
 {
-       const unsigned long *timing = sata_ehc_deb_timing(&link->eh_context);
+       const unsigned int *timing = sata_ehc_deb_timing(&link->eh_context);
        struct ata_port *ap = link->ap;
        struct ahci_port_priv *pp = ap->private_data;
        struct ahci_host_priv *hpriv = ap->host->private_data;
index 9a8d43f54adcf36ea5b9d9636f509641aec38d56..581704e61f286bf7f013637d7c8fccd54f14f726 100644 (file)
@@ -20,6 +20,7 @@
 #include <linux/ahci_platform.h>
 #include <linux/phy/phy.h>
 #include <linux/pm_runtime.h>
+#include <linux/of.h>
 #include <linux/of_platform.h>
 #include <linux/reset.h>
 #include "ahci.h"
index 04db0f2c683a72d6779aafa8ced3dea777917fd5..74314311295fe43d56241fae063bee6cd530267a 100644 (file)
@@ -1586,13 +1586,11 @@ static unsigned ata_exec_internal_sg(struct ata_device *dev,
                }
        }
 
-       if (ap->ops->error_handler)
-               ata_eh_release(ap);
+       ata_eh_release(ap);
 
        rc = wait_for_completion_timeout(&wait, msecs_to_jiffies(timeout));
 
-       if (ap->ops->error_handler)
-               ata_eh_acquire(ap);
+       ata_eh_acquire(ap);
 
        ata_sff_flush_pio_task(ap);
 
@@ -1607,10 +1605,7 @@ static unsigned ata_exec_internal_sg(struct ata_device *dev,
                if (qc->flags & ATA_QCFLAG_ACTIVE) {
                        qc->err_mask |= AC_ERR_TIMEOUT;
 
-                       if (ap->ops->error_handler)
-                               ata_port_freeze(ap);
-                       else
-                               ata_qc_complete(qc);
+                       ata_port_freeze(ap);
 
                        ata_dev_warn(dev, "qc timeout after %u msecs (cmd 0x%x)\n",
                                     timeout, command);
@@ -3062,144 +3057,6 @@ int ata_cable_sata(struct ata_port *ap)
 }
 EXPORT_SYMBOL_GPL(ata_cable_sata);
 
-/**
- *     ata_bus_probe - Reset and probe ATA bus
- *     @ap: Bus to probe
- *
- *     Master ATA bus probing function.  Initiates a hardware-dependent
- *     bus reset, then attempts to identify any devices found on
- *     the bus.
- *
- *     LOCKING:
- *     PCI/etc. bus probe sem.
- *
- *     RETURNS:
- *     Zero on success, negative errno otherwise.
- */
-
-int ata_bus_probe(struct ata_port *ap)
-{
-       unsigned int classes[ATA_MAX_DEVICES];
-       int tries[ATA_MAX_DEVICES];
-       int rc;
-       struct ata_device *dev;
-
-       ata_for_each_dev(dev, &ap->link, ALL)
-               tries[dev->devno] = ATA_PROBE_MAX_TRIES;
-
- retry:
-       ata_for_each_dev(dev, &ap->link, ALL) {
-               /* If we issue an SRST then an ATA drive (not ATAPI)
-                * may change configuration and be in PIO0 timing. If
-                * we do a hard reset (or are coming from power on)
-                * this is true for ATA or ATAPI. Until we've set a
-                * suitable controller mode we should not touch the
-                * bus as we may be talking too fast.
-                */
-               dev->pio_mode = XFER_PIO_0;
-               dev->dma_mode = 0xff;
-
-               /* If the controller has a pio mode setup function
-                * then use it to set the chipset to rights. Don't
-                * touch the DMA setup as that will be dealt with when
-                * configuring devices.
-                */
-               if (ap->ops->set_piomode)
-                       ap->ops->set_piomode(ap, dev);
-       }
-
-       /* reset and determine device classes */
-       ap->ops->phy_reset(ap);
-
-       ata_for_each_dev(dev, &ap->link, ALL) {
-               if (dev->class != ATA_DEV_UNKNOWN)
-                       classes[dev->devno] = dev->class;
-               else
-                       classes[dev->devno] = ATA_DEV_NONE;
-
-               dev->class = ATA_DEV_UNKNOWN;
-       }
-
-       /* read IDENTIFY page and configure devices. We have to do the identify
-          specific sequence bass-ackwards so that PDIAG- is released by
-          the slave device */
-
-       ata_for_each_dev(dev, &ap->link, ALL_REVERSE) {
-               if (tries[dev->devno])
-                       dev->class = classes[dev->devno];
-
-               if (!ata_dev_enabled(dev))
-                       continue;
-
-               rc = ata_dev_read_id(dev, &dev->class, ATA_READID_POSTRESET,
-                                    dev->id);
-               if (rc)
-                       goto fail;
-       }
-
-       /* Now ask for the cable type as PDIAG- should have been released */
-       if (ap->ops->cable_detect)
-               ap->cbl = ap->ops->cable_detect(ap);
-
-       /* We may have SATA bridge glue hiding here irrespective of
-        * the reported cable types and sensed types.  When SATA
-        * drives indicate we have a bridge, we don't know which end
-        * of the link the bridge is which is a problem.
-        */
-       ata_for_each_dev(dev, &ap->link, ENABLED)
-               if (ata_id_is_sata(dev->id))
-                       ap->cbl = ATA_CBL_SATA;
-
-       /* After the identify sequence we can now set up the devices. We do
-          this in the normal order so that the user doesn't get confused */
-
-       ata_for_each_dev(dev, &ap->link, ENABLED) {
-               ap->link.eh_context.i.flags |= ATA_EHI_PRINTINFO;
-               rc = ata_dev_configure(dev);
-               ap->link.eh_context.i.flags &= ~ATA_EHI_PRINTINFO;
-               if (rc)
-                       goto fail;
-       }
-
-       /* configure transfer mode */
-       rc = ata_set_mode(&ap->link, &dev);
-       if (rc)
-               goto fail;
-
-       ata_for_each_dev(dev, &ap->link, ENABLED)
-               return 0;
-
-       return -ENODEV;
-
- fail:
-       tries[dev->devno]--;
-
-       switch (rc) {
-       case -EINVAL:
-               /* eeek, something went very wrong, give up */
-               tries[dev->devno] = 0;
-               break;
-
-       case -ENODEV:
-               /* give it just one more chance */
-               tries[dev->devno] = min(tries[dev->devno], 1);
-               fallthrough;
-       case -EIO:
-               if (tries[dev->devno] == 1) {
-                       /* This is the last chance, better to slow
-                        * down than lose it.
-                        */
-                       sata_down_spd_limit(&ap->link, 0);
-                       ata_down_xfermask_limit(dev, ATA_DNXFER_PIO);
-               }
-       }
-
-       if (!tries[dev->devno])
-               ata_dev_disable(dev);
-
-       goto retry;
-}
-
 /**
  *     sata_print_link_status - Print SATA link status
  *     @link: SATA link to printk link status about
@@ -3782,7 +3639,7 @@ int ata_std_prereset(struct ata_link *link, unsigned long deadline)
 {
        struct ata_port *ap = link->ap;
        struct ata_eh_context *ehc = &link->eh_context;
-       const unsigned long *timing = sata_ehc_deb_timing(ehc);
+       const unsigned int *timing = sata_ehc_deb_timing(ehc);
        int rc;
 
        /* if we're about to do hardreset, nothing more to do */
@@ -3824,7 +3681,7 @@ EXPORT_SYMBOL_GPL(ata_std_prereset);
 int sata_std_hardreset(struct ata_link *link, unsigned int *class,
                       unsigned long deadline)
 {
-       const unsigned long *timing = sata_ehc_deb_timing(&link->eh_context);
+       const unsigned int *timing = sata_ehc_deb_timing(&link->eh_context);
        bool online;
        int rc;
 
@@ -4213,10 +4070,12 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = {
                                                ATA_HORKAGE_ZERO_AFTER_TRIM },
        { "Micron_M500_*",              NULL,   ATA_HORKAGE_NO_NCQ_TRIM |
                                                ATA_HORKAGE_ZERO_AFTER_TRIM },
-       { "Crucial_CT*M500*",           NULL,   ATA_HORKAGE_NO_NCQ_TRIM |
-                                               ATA_HORKAGE_ZERO_AFTER_TRIM },
        { "Micron_M5[15]0_*",           "MU01", ATA_HORKAGE_NO_NCQ_TRIM |
                                                ATA_HORKAGE_ZERO_AFTER_TRIM },
+       { "Micron_1100_*",              NULL,   ATA_HORKAGE_NO_NCQ_TRIM |
+                                               ATA_HORKAGE_ZERO_AFTER_TRIM, },
+       { "Crucial_CT*M500*",           NULL,   ATA_HORKAGE_NO_NCQ_TRIM |
+                                               ATA_HORKAGE_ZERO_AFTER_TRIM },
        { "Crucial_CT*M550*",           "MU01", ATA_HORKAGE_NO_NCQ_TRIM |
                                                ATA_HORKAGE_ZERO_AFTER_TRIM },
        { "Crucial_CT*MX100*",          "MU01", ATA_HORKAGE_NO_NCQ_TRIM |
@@ -4874,126 +4733,103 @@ static void ata_verify_xfer(struct ata_queued_cmd *qc)
 void ata_qc_complete(struct ata_queued_cmd *qc)
 {
        struct ata_port *ap = qc->ap;
+       struct ata_device *dev = qc->dev;
+       struct ata_eh_info *ehi = &dev->link->eh_info;
 
        /* Trigger the LED (if available) */
        ledtrig_disk_activity(!!(qc->tf.flags & ATA_TFLAG_WRITE));
 
-       /* XXX: New EH and old EH use different mechanisms to
-        * synchronize EH with regular execution path.
-        *
-        * In new EH, a qc owned by EH is marked with ATA_QCFLAG_EH.
-        * Normal execution path is responsible for not accessing a
-        * qc owned by EH.  libata core enforces the rule by returning NULL
-        * from ata_qc_from_tag() for qcs owned by EH.
+       /*
+        * In order to synchronize EH with the regular execution path, a qc that
+        * is owned by EH is marked with ATA_QCFLAG_EH.
         *
-        * Old EH depends on ata_qc_complete() nullifying completion
-        * requests if ATA_QCFLAG_EH_SCHEDULED is set.  Old EH does
-        * not synchronize with interrupt handler.  Only PIO task is
-        * taken care of.
+        * The normal execution path is responsible for not accessing a qc owned
+        * by EH.  libata core enforces the rule by returning NULL from
+        * ata_qc_from_tag() for qcs owned by EH.
         */
-       if (ap->ops->error_handler) {
-               struct ata_device *dev = qc->dev;
-               struct ata_eh_info *ehi = &dev->link->eh_info;
-
-               if (unlikely(qc->err_mask))
-                       qc->flags |= ATA_QCFLAG_EH;
+       if (unlikely(qc->err_mask))
+               qc->flags |= ATA_QCFLAG_EH;
 
-               /*
-                * Finish internal commands without any further processing
-                * and always with the result TF filled.
-                */
-               if (unlikely(ata_tag_internal(qc->tag))) {
-                       fill_result_tf(qc);
-                       trace_ata_qc_complete_internal(qc);
-                       __ata_qc_complete(qc);
-                       return;
-               }
+       /*
+        * Finish internal commands without any further processing and always
+        * with the result TF filled.
+        */
+       if (unlikely(ata_tag_internal(qc->tag))) {
+               fill_result_tf(qc);
+               trace_ata_qc_complete_internal(qc);
+               __ata_qc_complete(qc);
+               return;
+       }
 
-               /*
-                * Non-internal qc has failed.  Fill the result TF and
-                * summon EH.
-                */
-               if (unlikely(qc->flags & ATA_QCFLAG_EH)) {
-                       fill_result_tf(qc);
-                       trace_ata_qc_complete_failed(qc);
-                       ata_qc_schedule_eh(qc);
-                       return;
-               }
+       /* Non-internal qc has failed.  Fill the result TF and summon EH. */
+       if (unlikely(qc->flags & ATA_QCFLAG_EH)) {
+               fill_result_tf(qc);
+               trace_ata_qc_complete_failed(qc);
+               ata_qc_schedule_eh(qc);
+               return;
+       }
 
-               WARN_ON_ONCE(ata_port_is_frozen(ap));
+       WARN_ON_ONCE(ata_port_is_frozen(ap));
 
-               /* read result TF if requested */
-               if (qc->flags & ATA_QCFLAG_RESULT_TF)
-                       fill_result_tf(qc);
+       /* read result TF if requested */
+       if (qc->flags & ATA_QCFLAG_RESULT_TF)
+               fill_result_tf(qc);
 
-               trace_ata_qc_complete_done(qc);
+       trace_ata_qc_complete_done(qc);
 
+       /*
+        * For CDL commands that completed without an error, check if we have
+        * sense data (ATA_SENSE is set). If we do, then the command may have
+        * been aborted by the device due to a limit timeout using the policy
+        * 0xD. For these commands, invoke EH to get the command sense data.
+        */
+       if (qc->result_tf.status & ATA_SENSE &&
+           ((ata_is_ncq(qc->tf.protocol) &&
+             dev->flags & ATA_DFLAG_CDL_ENABLED) ||
+            (!ata_is_ncq(qc->tf.protocol) &&
+             ata_id_sense_reporting_enabled(dev->id)))) {
                /*
-                * For CDL commands that completed without an error, check if
-                * we have sense data (ATA_SENSE is set). If we do, then the
-                * command may have been aborted by the device due to a limit
-                * timeout using the policy 0xD. For these commands, invoke EH
-                * to get the command sense data.
+                * Tell SCSI EH to not overwrite scmd->result even if this
+                * command is finished with result SAM_STAT_GOOD.
                 */
-               if (qc->result_tf.status & ATA_SENSE &&
-                   ((ata_is_ncq(qc->tf.protocol) &&
-                     dev->flags & ATA_DFLAG_CDL_ENABLED) ||
-                    (!ata_is_ncq(qc->tf.protocol) &&
-                     ata_id_sense_reporting_enabled(dev->id)))) {
-                       /*
-                        * Tell SCSI EH to not overwrite scmd->result even if
-                        * this command is finished with result SAM_STAT_GOOD.
-                        */
-                       qc->scsicmd->flags |= SCMD_FORCE_EH_SUCCESS;
-                       qc->flags |= ATA_QCFLAG_EH_SUCCESS_CMD;
-                       ehi->dev_action[dev->devno] |= ATA_EH_GET_SUCCESS_SENSE;
+               qc->scsicmd->flags |= SCMD_FORCE_EH_SUCCESS;
+               qc->flags |= ATA_QCFLAG_EH_SUCCESS_CMD;
+               ehi->dev_action[dev->devno] |= ATA_EH_GET_SUCCESS_SENSE;
 
-                       /*
-                        * set pending so that ata_qc_schedule_eh() does not
-                        * trigger fast drain, and freeze the port.
-                        */
-                       ap->pflags |= ATA_PFLAG_EH_PENDING;
-                       ata_qc_schedule_eh(qc);
-                       return;
-               }
-
-               /* Some commands need post-processing after successful
-                * completion.
+               /*
+                * set pending so that ata_qc_schedule_eh() does not trigger
+                * fast drain, and freeze the port.
                 */
-               switch (qc->tf.command) {
-               case ATA_CMD_SET_FEATURES:
-                       if (qc->tf.feature != SETFEATURES_WC_ON &&
-                           qc->tf.feature != SETFEATURES_WC_OFF &&
-                           qc->tf.feature != SETFEATURES_RA_ON &&
-                           qc->tf.feature != SETFEATURES_RA_OFF)
-                               break;
-                       fallthrough;
-               case ATA_CMD_INIT_DEV_PARAMS: /* CHS translation changed */
-               case ATA_CMD_SET_MULTI: /* multi_count changed */
-                       /* revalidate device */
-                       ehi->dev_action[dev->devno] |= ATA_EH_REVALIDATE;
-                       ata_port_schedule_eh(ap);
-                       break;
+               ap->pflags |= ATA_PFLAG_EH_PENDING;
+               ata_qc_schedule_eh(qc);
+               return;
+       }
 
-               case ATA_CMD_SLEEP:
-                       dev->flags |= ATA_DFLAG_SLEEPING;
+       /* Some commands need post-processing after successful completion. */
+       switch (qc->tf.command) {
+       case ATA_CMD_SET_FEATURES:
+               if (qc->tf.feature != SETFEATURES_WC_ON &&
+                   qc->tf.feature != SETFEATURES_WC_OFF &&
+                   qc->tf.feature != SETFEATURES_RA_ON &&
+                   qc->tf.feature != SETFEATURES_RA_OFF)
                        break;
-               }
-
-               if (unlikely(dev->flags & ATA_DFLAG_DUBIOUS_XFER))
-                       ata_verify_xfer(qc);
+               fallthrough;
+       case ATA_CMD_INIT_DEV_PARAMS: /* CHS translation changed */
+       case ATA_CMD_SET_MULTI: /* multi_count changed */
+               /* revalidate device */
+               ehi->dev_action[dev->devno] |= ATA_EH_REVALIDATE;
+               ata_port_schedule_eh(ap);
+               break;
 
-               __ata_qc_complete(qc);
-       } else {
-               if (qc->flags & ATA_QCFLAG_EH_SCHEDULED)
-                       return;
+       case ATA_CMD_SLEEP:
+               dev->flags |= ATA_DFLAG_SLEEPING;
+               break;
+       }
 
-               /* read result TF if failed or requested */
-               if (qc->err_mask || qc->flags & ATA_QCFLAG_RESULT_TF)
-                       fill_result_tf(qc);
+       if (unlikely(dev->flags & ATA_DFLAG_DUBIOUS_XFER))
+               ata_verify_xfer(qc);
 
-               __ata_qc_complete(qc);
-       }
+       __ata_qc_complete(qc);
 }
 EXPORT_SYMBOL_GPL(ata_qc_complete);
 
@@ -5039,11 +4875,8 @@ void ata_qc_issue(struct ata_queued_cmd *qc)
        struct ata_link *link = qc->dev->link;
        u8 prot = qc->tf.protocol;
 
-       /* Make sure only one non-NCQ command is outstanding.  The
-        * check is skipped for old EH because it reuses active qc to
-        * request ATAPI sense.
-        */
-       WARN_ON_ONCE(ap->ops->error_handler && ata_tag_valid(link->active_tag));
+       /* Make sure only one non-NCQ command is outstanding. */
+       WARN_ON_ONCE(ata_tag_valid(link->active_tag));
 
        if (ata_is_ncq(prot)) {
                WARN_ON_ONCE(link->sactive & (1 << qc->hw_tag));
@@ -5896,7 +5729,7 @@ void ata_host_init(struct ata_host *host, struct device *dev,
 }
 EXPORT_SYMBOL_GPL(ata_host_init);
 
-void __ata_port_probe(struct ata_port *ap)
+void ata_port_probe(struct ata_port *ap)
 {
        struct ata_eh_info *ehi = &ap->link.eh_info;
        unsigned long flags;
@@ -5914,20 +5747,7 @@ void __ata_port_probe(struct ata_port *ap)
 
        spin_unlock_irqrestore(ap->lock, flags);
 }
-
-int ata_port_probe(struct ata_port *ap)
-{
-       int rc = 0;
-
-       if (ap->ops->error_handler) {
-               __ata_port_probe(ap);
-               ata_port_wait_eh(ap);
-       } else {
-               rc = ata_bus_probe(ap);
-       }
-       return rc;
-}
-
+EXPORT_SYMBOL_GPL(ata_port_probe);
 
 static void async_port_probe(void *data, async_cookie_t cookie)
 {
@@ -5943,7 +5763,8 @@ static void async_port_probe(void *data, async_cookie_t cookie)
        if (!(ap->host->flags & ATA_HOST_PARALLEL_SCAN) && ap->port_no != 0)
                async_synchronize_cookie(cookie);
 
-       (void)ata_port_probe(ap);
+       ata_port_probe(ap);
+       ata_port_wait_eh(ap);
 
        /* in order to keep device order, we need to synchronize at this point */
        async_synchronize_cookie(cookie);
@@ -6130,9 +5951,6 @@ static void ata_port_detach(struct ata_port *ap)
        struct ata_link *link;
        struct ata_device *dev;
 
-       if (!ap->ops->error_handler)
-               goto skip_eh;
-
        /* tell EH we're leaving & flush EH */
        spin_lock_irqsave(ap->lock, flags);
        ap->pflags |= ATA_PFLAG_UNLOADING;
@@ -6148,7 +5966,6 @@ static void ata_port_detach(struct ata_port *ap)
        cancel_delayed_work_sync(&ap->hotplug_task);
        cancel_delayed_work_sync(&ap->scsi_rescan_task);
 
- skip_eh:
        /* clean up zpodd on port removal */
        ata_for_each_link(link, ap, HOST_FIRST) {
                ata_for_each_dev(dev, link, ALL) {
@@ -6684,7 +6501,7 @@ EXPORT_SYMBOL_GPL(ata_msleep);
  *     The final register value.
  */
 u32 ata_wait_register(struct ata_port *ap, void __iomem *reg, u32 mask, u32 val,
-                     unsigned long interval, unsigned long timeout)
+                     unsigned int interval, unsigned int timeout)
 {
        unsigned long deadline;
        u32 tmp;
index 35e03679b0bfe77e26587865e0830477759b0994..159ba6ba19ebb7872b87c2bfe03bae8e17023321 100644 (file)
@@ -78,12 +78,12 @@ enum {
  * are mostly for error handling, hotplug and those outlier devices that
  * take an exceptionally long time to recover from reset.
  */
-static const unsigned long ata_eh_reset_timeouts[] = {
+static const unsigned int ata_eh_reset_timeouts[] = {
        10000,  /* most drives spin up by 10sec */
        10000,  /* > 99% working drives spin up before 20sec */
        35000,  /* give > 30 secs of idleness for outlier devices */
         5000,  /* and sweet one last chance */
-       ULONG_MAX, /* > 1 min has elapsed, give up */
+       UINT_MAX, /* > 1 min has elapsed, give up */
 };
 
 static const unsigned int ata_eh_identify_timeouts[] = {
@@ -571,13 +571,10 @@ void ata_scsi_cmd_error_handler(struct Scsi_Host *host, struct ata_port *ap,
        /* make sure sff pio task is not running */
        ata_sff_flush_pio_task(ap);
 
-       if (!ap->ops->error_handler)
-               return;
-
        /* synchronize with host lock and sort out timeouts */
 
        /*
-        * For new EH, all qcs are finished in one of three ways -
+        * For EH, all qcs are finished in one of three ways -
         * normal completion, error completion, and SCSI timeout.
         * Both completions can race against SCSI timeout.  When normal
         * completion wins, the qc never reaches EH.  When error
@@ -659,94 +656,87 @@ EXPORT_SYMBOL(ata_scsi_cmd_error_handler);
 void ata_scsi_port_error_handler(struct Scsi_Host *host, struct ata_port *ap)
 {
        unsigned long flags;
+       struct ata_link *link;
 
-       /* invoke error handler */
-       if (ap->ops->error_handler) {
-               struct ata_link *link;
-
-               /* acquire EH ownership */
-               ata_eh_acquire(ap);
+       /* acquire EH ownership */
+       ata_eh_acquire(ap);
  repeat:
-               /* kill fast drain timer */
-               del_timer_sync(&ap->fastdrain_timer);
+       /* kill fast drain timer */
+       del_timer_sync(&ap->fastdrain_timer);
 
-               /* process port resume request */
-               ata_eh_handle_port_resume(ap);
+       /* process port resume request */
+       ata_eh_handle_port_resume(ap);
 
-               /* fetch & clear EH info */
-               spin_lock_irqsave(ap->lock, flags);
+       /* fetch & clear EH info */
+       spin_lock_irqsave(ap->lock, flags);
 
-               ata_for_each_link(link, ap, HOST_FIRST) {
-                       struct ata_eh_context *ehc = &link->eh_context;
-                       struct ata_device *dev;
+       ata_for_each_link(link, ap, HOST_FIRST) {
+               struct ata_eh_context *ehc = &link->eh_context;
+               struct ata_device *dev;
 
-                       memset(&link->eh_context, 0, sizeof(link->eh_context));
-                       link->eh_context.i = link->eh_info;
-                       memset(&link->eh_info, 0, sizeof(link->eh_info));
+               memset(&link->eh_context, 0, sizeof(link->eh_context));
+               link->eh_context.i = link->eh_info;
+               memset(&link->eh_info, 0, sizeof(link->eh_info));
 
-                       ata_for_each_dev(dev, link, ENABLED) {
-                               int devno = dev->devno;
+               ata_for_each_dev(dev, link, ENABLED) {
+                       int devno = dev->devno;
 
-                               ehc->saved_xfer_mode[devno] = dev->xfer_mode;
-                               if (ata_ncq_enabled(dev))
-                                       ehc->saved_ncq_enabled |= 1 << devno;
-                       }
+                       ehc->saved_xfer_mode[devno] = dev->xfer_mode;
+                       if (ata_ncq_enabled(dev))
+                               ehc->saved_ncq_enabled |= 1 << devno;
                }
+       }
 
-               ap->pflags |= ATA_PFLAG_EH_IN_PROGRESS;
-               ap->pflags &= ~ATA_PFLAG_EH_PENDING;
-               ap->excl_link = NULL;   /* don't maintain exclusion over EH */
+       ap->pflags |= ATA_PFLAG_EH_IN_PROGRESS;
+       ap->pflags &= ~ATA_PFLAG_EH_PENDING;
+       ap->excl_link = NULL;   /* don't maintain exclusion over EH */
 
-               spin_unlock_irqrestore(ap->lock, flags);
+       spin_unlock_irqrestore(ap->lock, flags);
 
-               /* invoke EH, skip if unloading or suspended */
-               if (!(ap->pflags & (ATA_PFLAG_UNLOADING | ATA_PFLAG_SUSPENDED)))
-                       ap->ops->error_handler(ap);
-               else {
-                       /* if unloading, commence suicide */
-                       if ((ap->pflags & ATA_PFLAG_UNLOADING) &&
-                           !(ap->pflags & ATA_PFLAG_UNLOADED))
-                               ata_eh_unload(ap);
-                       ata_eh_finish(ap);
-               }
+       /* invoke EH, skip if unloading or suspended */
+       if (!(ap->pflags & (ATA_PFLAG_UNLOADING | ATA_PFLAG_SUSPENDED)))
+               ap->ops->error_handler(ap);
+       else {
+               /* if unloading, commence suicide */
+               if ((ap->pflags & ATA_PFLAG_UNLOADING) &&
+                   !(ap->pflags & ATA_PFLAG_UNLOADED))
+                       ata_eh_unload(ap);
+               ata_eh_finish(ap);
+       }
 
-               /* process port suspend request */
-               ata_eh_handle_port_suspend(ap);
+       /* process port suspend request */
+       ata_eh_handle_port_suspend(ap);
 
-               /* Exception might have happened after ->error_handler
-                * recovered the port but before this point.  Repeat
-                * EH in such case.
-                */
-               spin_lock_irqsave(ap->lock, flags);
+       /*
+        * Exception might have happened after ->error_handler recovered the
+        * port but before this point.  Repeat EH in such case.
+        */
+       spin_lock_irqsave(ap->lock, flags);
 
-               if (ap->pflags & ATA_PFLAG_EH_PENDING) {
-                       if (--ap->eh_tries) {
-                               spin_unlock_irqrestore(ap->lock, flags);
-                               goto repeat;
-                       }
-                       ata_port_err(ap,
-                                    "EH pending after %d tries, giving up\n",
-                                    ATA_EH_MAX_TRIES);
-                       ap->pflags &= ~ATA_PFLAG_EH_PENDING;
+       if (ap->pflags & ATA_PFLAG_EH_PENDING) {
+               if (--ap->eh_tries) {
+                       spin_unlock_irqrestore(ap->lock, flags);
+                       goto repeat;
                }
+               ata_port_err(ap,
+                            "EH pending after %d tries, giving up\n",
+                            ATA_EH_MAX_TRIES);
+               ap->pflags &= ~ATA_PFLAG_EH_PENDING;
+       }
 
-               /* this run is complete, make sure EH info is clear */
-               ata_for_each_link(link, ap, HOST_FIRST)
-                       memset(&link->eh_info, 0, sizeof(link->eh_info));
+       /* this run is complete, make sure EH info is clear */
+       ata_for_each_link(link, ap, HOST_FIRST)
+               memset(&link->eh_info, 0, sizeof(link->eh_info));
 
-               /* end eh (clear host_eh_scheduled) while holding
-                * ap->lock such that if exception occurs after this
-                * point but before EH completion, SCSI midlayer will
-                * re-initiate EH.
-                */
-               ap->ops->end_eh(ap);
+       /*
+        * end eh (clear host_eh_scheduled) while holding ap->lock such that if
+        * exception occurs after this point but before EH completion, SCSI
+        * midlayer will re-initiate EH.
+        */
+       ap->ops->end_eh(ap);
 
-               spin_unlock_irqrestore(ap->lock, flags);
-               ata_eh_release(ap);
-       } else {
-               WARN_ON(ata_qc_from_tag(ap, ap->link.active_tag) == NULL);
-               ap->ops->eng_timeout(ap);
-       }
+       spin_unlock_irqrestore(ap->lock, flags);
+       ata_eh_release(ap);
 
        scsi_eh_flush_done_q(&ap->eh_done_q);
 
@@ -912,8 +902,6 @@ void ata_qc_schedule_eh(struct ata_queued_cmd *qc)
 {
        struct ata_port *ap = qc->ap;
 
-       WARN_ON(!ap->ops->error_handler);
-
        qc->flags |= ATA_QCFLAG_EH;
        ata_eh_set_pending(ap, 1);
 
@@ -934,8 +922,6 @@ void ata_qc_schedule_eh(struct ata_queued_cmd *qc)
  */
 void ata_std_sched_eh(struct ata_port *ap)
 {
-       WARN_ON(!ap->ops->error_handler);
-
        if (ap->pflags & ATA_PFLAG_INITIALIZING)
                return;
 
@@ -989,8 +975,6 @@ static int ata_do_link_abort(struct ata_port *ap, struct ata_link *link)
        struct ata_queued_cmd *qc;
        int tag, nr_aborted = 0;
 
-       WARN_ON(!ap->ops->error_handler);
-
        /* we're gonna abort all commands, no need for fast drain */
        ata_eh_set_pending(ap, 0);
 
@@ -1065,8 +1049,6 @@ EXPORT_SYMBOL_GPL(ata_port_abort);
  */
 static void __ata_port_freeze(struct ata_port *ap)
 {
-       WARN_ON(!ap->ops->error_handler);
-
        if (ap->ops->freeze)
                ap->ops->freeze(ap);
 
@@ -1091,8 +1073,6 @@ static void __ata_port_freeze(struct ata_port *ap)
  */
 int ata_port_freeze(struct ata_port *ap)
 {
-       WARN_ON(!ap->ops->error_handler);
-
        __ata_port_freeze(ap);
 
        return ata_port_abort(ap);
@@ -1112,9 +1092,6 @@ void ata_eh_freeze_port(struct ata_port *ap)
 {
        unsigned long flags;
 
-       if (!ap->ops->error_handler)
-               return;
-
        spin_lock_irqsave(ap->lock, flags);
        __ata_port_freeze(ap);
        spin_unlock_irqrestore(ap->lock, flags);
@@ -1134,9 +1111,6 @@ void ata_eh_thaw_port(struct ata_port *ap)
 {
        unsigned long flags;
 
-       if (!ap->ops->error_handler)
-               return;
-
        spin_lock_irqsave(ap->lock, flags);
 
        ap->pflags &= ~ATA_PFLAG_FROZEN;
@@ -2575,7 +2549,7 @@ int ata_eh_reset(struct ata_link *link, int classify,
        /*
         * Prepare to reset
         */
-       while (ata_eh_reset_timeouts[max_tries] != ULONG_MAX)
+       while (ata_eh_reset_timeouts[max_tries] != UINT_MAX)
                max_tries++;
        if (link->flags & ATA_LFLAG_RST_ONCE)
                max_tries = 1;
index 85e279a12f62c495f257e8ef25129c7b3e953ad5..5d31c08be0136cc0ff6baeac1d9f6041be48b5fb 100644 (file)
 #include "libata-transport.h"
 
 /* debounce timing parameters in msecs { interval, duration, timeout } */
-const unsigned long sata_deb_timing_normal[]           = {   5,  100, 2000 };
+const unsigned int sata_deb_timing_normal[]            = {   5,  100, 2000 };
 EXPORT_SYMBOL_GPL(sata_deb_timing_normal);
-const unsigned long sata_deb_timing_hotplug[]          = {  25,  500, 2000 };
+const unsigned int sata_deb_timing_hotplug[]           = {  25,  500, 2000 };
 EXPORT_SYMBOL_GPL(sata_deb_timing_hotplug);
-const unsigned long sata_deb_timing_long[]             = { 100, 2000, 5000 };
+const unsigned int sata_deb_timing_long[]              = { 100, 2000, 5000 };
 EXPORT_SYMBOL_GPL(sata_deb_timing_long);
 
 /**
@@ -232,11 +232,11 @@ EXPORT_SYMBOL_GPL(ata_tf_from_fis);
  *     RETURNS:
  *     0 on success, -errno on failure.
  */
-int sata_link_debounce(struct ata_link *link, const unsigned long *params,
+int sata_link_debounce(struct ata_link *link, const unsigned int *params,
                       unsigned long deadline)
 {
-       unsigned long interval = params[0];
-       unsigned long duration = params[1];
+       unsigned int interval = params[0];
+       unsigned int duration = params[1];
        unsigned long last_jiffies, t;
        u32 last, cur;
        int rc;
@@ -295,7 +295,7 @@ EXPORT_SYMBOL_GPL(sata_link_debounce);
  *     RETURNS:
  *     0 on success, -errno on failure.
  */
-int sata_link_resume(struct ata_link *link, const unsigned long *params,
+int sata_link_resume(struct ata_link *link, const unsigned int *params,
                     unsigned long deadline)
 {
        int tries = ATA_LINK_RESUME_TRIES;
@@ -528,7 +528,7 @@ EXPORT_SYMBOL_GPL(sata_set_spd);
  *     RETURNS:
  *     0 on success, -errno otherwise.
  */
-int sata_link_hardreset(struct ata_link *link, const unsigned long *timing,
+int sata_link_hardreset(struct ata_link *link, const unsigned int *timing,
                        unsigned long deadline,
                        bool *online, int (*check_ready)(struct ata_link *))
 {
@@ -1139,92 +1139,12 @@ struct ata_port *ata_sas_port_alloc(struct ata_host *host,
        ap->flags |= port_info->flags;
        ap->ops = port_info->port_ops;
        ap->cbl = ATA_CBL_SATA;
+       ap->print_id = atomic_inc_return(&ata_print_id);
 
        return ap;
 }
 EXPORT_SYMBOL_GPL(ata_sas_port_alloc);
 
-/**
- *     ata_sas_port_start - Set port up for dma.
- *     @ap: Port to initialize
- *
- *     Called just after data structures for each port are
- *     initialized.
- *
- *     May be used as the port_start() entry in ata_port_operations.
- *
- *     LOCKING:
- *     Inherited from caller.
- */
-int ata_sas_port_start(struct ata_port *ap)
-{
-       /*
-        * the port is marked as frozen at allocation time, but if we don't
-        * have new eh, we won't thaw it
-        */
-       if (!ap->ops->error_handler)
-               ap->pflags &= ~ATA_PFLAG_FROZEN;
-       return 0;
-}
-EXPORT_SYMBOL_GPL(ata_sas_port_start);
-
-/**
- *     ata_sas_port_stop - Undo ata_sas_port_start()
- *     @ap: Port to shut down
- *
- *     May be used as the port_stop() entry in ata_port_operations.
- *
- *     LOCKING:
- *     Inherited from caller.
- */
-
-void ata_sas_port_stop(struct ata_port *ap)
-{
-}
-EXPORT_SYMBOL_GPL(ata_sas_port_stop);
-
-/**
- * ata_sas_async_probe - simply schedule probing and return
- * @ap: Port to probe
- *
- * For batch scheduling of probe for sas attached ata devices, assumes
- * the port has already been through ata_sas_port_init()
- */
-void ata_sas_async_probe(struct ata_port *ap)
-{
-       __ata_port_probe(ap);
-}
-EXPORT_SYMBOL_GPL(ata_sas_async_probe);
-
-int ata_sas_sync_probe(struct ata_port *ap)
-{
-       return ata_port_probe(ap);
-}
-EXPORT_SYMBOL_GPL(ata_sas_sync_probe);
-
-
-/**
- *     ata_sas_port_init - Initialize a SATA device
- *     @ap: SATA port to initialize
- *
- *     LOCKING:
- *     PCI/etc. bus probe sem.
- *
- *     RETURNS:
- *     Zero on success, non-zero on error.
- */
-
-int ata_sas_port_init(struct ata_port *ap)
-{
-       int rc = ap->ops->port_start(ap);
-
-       if (rc)
-               return rc;
-       ap->print_id = atomic_inc_return(&ata_print_id);
-       return 0;
-}
-EXPORT_SYMBOL_GPL(ata_sas_port_init);
-
 int ata_sas_tport_add(struct device *parent, struct ata_port *ap)
 {
        return ata_tport_add(parent, ap);
@@ -1237,20 +1157,6 @@ void ata_sas_tport_delete(struct ata_port *ap)
 }
 EXPORT_SYMBOL_GPL(ata_sas_tport_delete);
 
-/**
- *     ata_sas_port_destroy - Destroy a SATA port allocated by ata_sas_port_alloc
- *     @ap: SATA port to destroy
- *
- */
-
-void ata_sas_port_destroy(struct ata_port *ap)
-{
-       if (ap->ops->port_stop)
-               ap->ops->port_stop(ap);
-       kfree(ap);
-}
-EXPORT_SYMBOL_GPL(ata_sas_port_destroy);
-
 /**
  *     ata_sas_slave_configure - Default slave_config routine for libata devices
  *     @sdev: SCSI device to configure
index c6ece32de8e31b69c71178ad89d02b9e90386940..e4e4175e3e83534e715976929a1ada75f063fe9a 100644 (file)
@@ -135,11 +135,11 @@ static ssize_t ata_scsi_park_store(struct device *device,
        struct scsi_device *sdev = to_scsi_device(device);
        struct ata_port *ap;
        struct ata_device *dev;
-       long int input;
+       int input;
        unsigned long flags;
        int rc;
 
-       rc = kstrtol(buf, 10, &input);
+       rc = kstrtoint(buf, 10, &input);
        if (rc)
                return rc;
        if (input < -2)
@@ -709,47 +709,6 @@ static void ata_qc_set_pc_nbytes(struct ata_queued_cmd *qc)
        qc->nbytes = scsi_bufflen(scmd) + qc->extrabytes;
 }
 
-/**
- *     ata_dump_status - user friendly display of error info
- *     @ap: the port in question
- *     @tf: ptr to filled out taskfile
- *
- *     Decode and dump the ATA error/status registers for the user so
- *     that they have some idea what really happened at the non
- *     make-believe layer.
- *
- *     LOCKING:
- *     inherited from caller
- */
-static void ata_dump_status(struct ata_port *ap, struct ata_taskfile *tf)
-{
-       u8 stat = tf->status, err = tf->error;
-
-       if (stat & ATA_BUSY) {
-               ata_port_warn(ap, "status=0x%02x {Busy} ", stat);
-       } else {
-               ata_port_warn(ap, "status=0x%02x { %s%s%s%s%s%s%s} ", stat,
-                             stat & ATA_DRDY ? "DriveReady " : "",
-                             stat & ATA_DF ? "DeviceFault " : "",
-                             stat & ATA_DSC ? "SeekComplete " : "",
-                             stat & ATA_DRQ ? "DataRequest " : "",
-                             stat & ATA_CORR ? "CorrectedError " : "",
-                             stat & ATA_SENSE ? "Sense " : "",
-                             stat & ATA_ERR ? "Error " : "");
-               if (err)
-                       ata_port_warn(ap, "error=0x%02x {%s%s%s%s%s%s", err,
-                                     err & ATA_ABORTED ?
-                                     "DriveStatusError " : "",
-                                     err & ATA_ICRC ?
-                                     (err & ATA_ABORTED ?
-                                      "BadCRC " : "Sector ") : "",
-                                     err & ATA_UNC ? "UncorrectableError " : "",
-                                     err & ATA_IDNF ? "SectorIdNotFound " : "",
-                                     err & ATA_TRK0NF ? "TrackZeroNotFound " : "",
-                                     err & ATA_AMNF ? "AddrMarkNotFound " : "");
-       }
-}
-
 /**
  *     ata_to_sense_error - convert ATA error to SCSI error
  *     @id: ATA device number
@@ -758,7 +717,6 @@ static void ata_dump_status(struct ata_port *ap, struct ata_taskfile *tf)
  *     @sk: the sense key we'll fill out
  *     @asc: the additional sense code we'll fill out
  *     @ascq: the additional sense code qualifier we'll fill out
- *     @verbose: be verbose
  *
  *     Converts an ATA error into a SCSI error.  Fill out pointers to
  *     SK, ASC, and ASCQ bytes for later use in fixed or descriptor
@@ -768,7 +726,7 @@ static void ata_dump_status(struct ata_port *ap, struct ata_taskfile *tf)
  *     spin_lock_irqsave(host lock)
  */
 static void ata_to_sense_error(unsigned id, u8 drv_stat, u8 drv_err, u8 *sk,
-                              u8 *asc, u8 *ascq, int verbose)
+                              u8 *asc, u8 *ascq)
 {
        int i;
 
@@ -847,7 +805,7 @@ static void ata_to_sense_error(unsigned id, u8 drv_stat, u8 drv_err, u8 *sk,
                                *sk = sense_table[i][1];
                                *asc = sense_table[i][2];
                                *ascq = sense_table[i][3];
-                               goto translate_done;
+                               return;
                        }
                }
        }
@@ -862,7 +820,7 @@ static void ata_to_sense_error(unsigned id, u8 drv_stat, u8 drv_err, u8 *sk,
                        *sk = stat_table[i][1];
                        *asc = stat_table[i][2];
                        *ascq = stat_table[i][3];
-                       goto translate_done;
+                       return;
                }
        }
 
@@ -873,12 +831,6 @@ static void ata_to_sense_error(unsigned id, u8 drv_stat, u8 drv_err, u8 *sk,
        *sk = ABORTED_COMMAND;
        *asc = 0x00;
        *ascq = 0x00;
-
- translate_done:
-       if (verbose)
-               pr_err("ata%u: translated ATA stat/err 0x%02x/%02x to SCSI SK/ASC/ASCQ 0x%x/%02x/%02x\n",
-                      id, drv_stat, drv_err, *sk, *asc, *ascq);
-       return;
 }
 
 /*
@@ -904,7 +856,6 @@ static void ata_gen_passthru_sense(struct ata_queued_cmd *qc)
        struct ata_taskfile *tf = &qc->result_tf;
        unsigned char *sb = cmd->sense_buffer;
        unsigned char *desc = sb + 8;
-       int verbose = qc->ap->ops->error_handler == NULL;
        u8 sense_key, asc, ascq;
 
        memset(sb, 0, SCSI_SENSE_BUFFERSIZE);
@@ -916,7 +867,7 @@ static void ata_gen_passthru_sense(struct ata_queued_cmd *qc)
        if (qc->err_mask ||
            tf->status & (ATA_BUSY | ATA_DF | ATA_ERR | ATA_DRQ)) {
                ata_to_sense_error(qc->ap->print_id, tf->status, tf->error,
-                                  &sense_key, &asc, &ascq, verbose);
+                                  &sense_key, &asc, &ascq);
                ata_scsi_set_sense(qc->dev, cmd, sense_key, asc, ascq);
        } else {
                /*
@@ -999,7 +950,6 @@ static void ata_gen_ata_sense(struct ata_queued_cmd *qc)
        struct scsi_cmnd *cmd = qc->scsicmd;
        struct ata_taskfile *tf = &qc->result_tf;
        unsigned char *sb = cmd->sense_buffer;
-       int verbose = qc->ap->ops->error_handler == NULL;
        u64 block;
        u8 sense_key, asc, ascq;
 
@@ -1017,7 +967,7 @@ static void ata_gen_ata_sense(struct ata_queued_cmd *qc)
        if (qc->err_mask ||
            tf->status & (ATA_BUSY | ATA_DF | ATA_ERR | ATA_DRQ)) {
                ata_to_sense_error(qc->ap->print_id, tf->status, tf->error,
-                                  &sense_key, &asc, &ascq, verbose);
+                                  &sense_key, &asc, &ascq);
                ata_scsi_set_sense(dev, cmd, sense_key, asc, ascq);
        } else {
                /* Could not decode error */
@@ -1186,9 +1136,6 @@ void ata_scsi_slave_destroy(struct scsi_device *sdev)
        unsigned long flags;
        struct ata_device *dev;
 
-       if (!ap->ops->error_handler)
-               return;
-
        spin_lock_irqsave(ap->lock, flags);
        dev = __ata_scsi_find_dev(ap, sdev);
        if (dev && dev->sdev) {
@@ -1675,7 +1622,6 @@ static void ata_qc_done(struct ata_queued_cmd *qc)
 
 static void ata_scsi_qc_complete(struct ata_queued_cmd *qc)
 {
-       struct ata_port *ap = qc->ap;
        struct scsi_cmnd *cmd = qc->scsicmd;
        u8 *cdb = cmd->cmnd;
        int need_sense = (qc->err_mask != 0) &&
@@ -1699,9 +1645,6 @@ static void ata_scsi_qc_complete(struct ata_queued_cmd *qc)
                /* Keep the SCSI ML and status byte, clear host byte. */
                cmd->result &= 0x0000ffff;
 
-       if (need_sense && !ap->ops->error_handler)
-               ata_dump_status(ap, &qc->result_tf);
-
        ata_qc_done(qc);
 }
 
@@ -2608,71 +2551,6 @@ static unsigned int ata_scsiop_report_luns(struct ata_scsi_args *args, u8 *rbuf)
        return 0;
 }
 
-static void atapi_sense_complete(struct ata_queued_cmd *qc)
-{
-       if (qc->err_mask && ((qc->err_mask & AC_ERR_DEV) == 0)) {
-               /* FIXME: not quite right; we don't want the
-                * translation of taskfile registers into
-                * a sense descriptors, since that's only
-                * correct for ATA, not ATAPI
-                */
-               ata_gen_passthru_sense(qc);
-       }
-
-       ata_qc_done(qc);
-}
-
-/* is it pointless to prefer PIO for "safety reasons"? */
-static inline int ata_pio_use_silly(struct ata_port *ap)
-{
-       return (ap->flags & ATA_FLAG_PIO_DMA);
-}
-
-static void atapi_request_sense(struct ata_queued_cmd *qc)
-{
-       struct ata_port *ap = qc->ap;
-       struct scsi_cmnd *cmd = qc->scsicmd;
-
-       memset(cmd->sense_buffer, 0, SCSI_SENSE_BUFFERSIZE);
-
-#ifdef CONFIG_ATA_SFF
-       if (ap->ops->sff_tf_read)
-               ap->ops->sff_tf_read(ap, &qc->tf);
-#endif
-
-       /* fill these in, for the case where they are -not- overwritten */
-       cmd->sense_buffer[0] = 0x70;
-       cmd->sense_buffer[2] = qc->tf.error >> 4;
-
-       ata_qc_reinit(qc);
-
-       /* setup sg table and init transfer direction */
-       sg_init_one(&qc->sgent, cmd->sense_buffer, SCSI_SENSE_BUFFERSIZE);
-       ata_sg_init(qc, &qc->sgent, 1);
-       qc->dma_dir = DMA_FROM_DEVICE;
-
-       memset(&qc->cdb, 0, qc->dev->cdb_len);
-       qc->cdb[0] = REQUEST_SENSE;
-       qc->cdb[4] = SCSI_SENSE_BUFFERSIZE;
-
-       qc->tf.flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE;
-       qc->tf.command = ATA_CMD_PACKET;
-
-       if (ata_pio_use_silly(ap)) {
-               qc->tf.protocol = ATAPI_PROT_DMA;
-               qc->tf.feature |= ATAPI_PKT_DMA;
-       } else {
-               qc->tf.protocol = ATAPI_PROT_PIO;
-               qc->tf.lbam = SCSI_SENSE_BUFFERSIZE;
-               qc->tf.lbah = 0;
-       }
-       qc->nbytes = SCSI_SENSE_BUFFERSIZE;
-
-       qc->complete_fn = atapi_sense_complete;
-
-       ata_qc_issue(qc);
-}
-
 /*
  * ATAPI devices typically report zero for their SCSI version, and sometimes
  * deviate from the spec WRT response data format.  If SCSI version is
@@ -2698,9 +2576,8 @@ static void atapi_qc_complete(struct ata_queued_cmd *qc)
        struct scsi_cmnd *cmd = qc->scsicmd;
        unsigned int err_mask = qc->err_mask;
 
-       /* handle completion from new EH */
-       if (unlikely(qc->ap->ops->error_handler &&
-                    (err_mask || qc->flags & ATA_QCFLAG_SENSE_VALID))) {
+       /* handle completion from EH */
+       if (unlikely(err_mask || qc->flags & ATA_QCFLAG_SENSE_VALID)) {
 
                if (!(qc->flags & ATA_QCFLAG_SENSE_VALID)) {
                        /* FIXME: not quite right; we don't want the
@@ -2732,23 +2609,10 @@ static void atapi_qc_complete(struct ata_queued_cmd *qc)
                return;
        }
 
-       /* successful completion or old EH failure path */
-       if (unlikely(err_mask & AC_ERR_DEV)) {
-               cmd->result = SAM_STAT_CHECK_CONDITION;
-               atapi_request_sense(qc);
-               return;
-       } else if (unlikely(err_mask)) {
-               /* FIXME: not quite right; we don't want the
-                * translation of taskfile registers into
-                * a sense descriptors, since that's only
-                * correct for ATA, not ATAPI
-                */
-               ata_gen_passthru_sense(qc);
-       } else {
-               if (cmd->cmnd[0] == INQUIRY && (cmd->cmnd[1] & 0x03) == 0)
-                       atapi_fixup_inquiry(cmd);
-               cmd->result = SAM_STAT_GOOD;
-       }
+       /* successful completion path */
+       if (cmd->cmnd[0] == INQUIRY && (cmd->cmnd[1] & 0x03) == 0)
+               atapi_fixup_inquiry(cmd);
+       cmd->result = SAM_STAT_GOOD;
 
        ata_qc_done(qc);
 }
@@ -4797,9 +4661,6 @@ int ata_scsi_user_scan(struct Scsi_Host *shost, unsigned int channel,
        unsigned long flags;
        int devno, rc = 0;
 
-       if (!ap->ops->error_handler)
-               return -EOPNOTSUPP;
-
        if (lun != SCAN_WILD_CARD && lun)
                return -EINVAL;
 
index 9d28badfe41d667af5ecbdc9274bd912ba4f6612..8fcc622fcb3d49c67dd7c2c6efcf40c47a020f9f 100644 (file)
@@ -883,31 +883,21 @@ static void ata_hsm_qc_complete(struct ata_queued_cmd *qc, int in_wq)
 {
        struct ata_port *ap = qc->ap;
 
-       if (ap->ops->error_handler) {
-               if (in_wq) {
-                       /* EH might have kicked in while host lock is
-                        * released.
-                        */
-                       qc = ata_qc_from_tag(ap, qc->tag);
-                       if (qc) {
-                               if (likely(!(qc->err_mask & AC_ERR_HSM))) {
-                                       ata_sff_irq_on(ap);
-                                       ata_qc_complete(qc);
-                               } else
-                                       ata_port_freeze(ap);
-                       }
-               } else {
-                       if (likely(!(qc->err_mask & AC_ERR_HSM)))
+       if (in_wq) {
+               /* EH might have kicked in while host lock is released. */
+               qc = ata_qc_from_tag(ap, qc->tag);
+               if (qc) {
+                       if (likely(!(qc->err_mask & AC_ERR_HSM))) {
+                               ata_sff_irq_on(ap);
                                ata_qc_complete(qc);
-                       else
+                       else
                                ata_port_freeze(ap);
                }
        } else {
-               if (in_wq) {
-                       ata_sff_irq_on(ap);
-                       ata_qc_complete(qc);
-               } else
+               if (likely(!(qc->err_mask & AC_ERR_HSM)))
                        ata_qc_complete(qc);
+               else
+                       ata_port_freeze(ap);
        }
 }
 
@@ -1971,7 +1961,7 @@ int sata_sff_hardreset(struct ata_link *link, unsigned int *class,
                       unsigned long deadline)
 {
        struct ata_eh_context *ehc = &link->eh_context;
-       const unsigned long *timing = sata_ehc_deb_timing(ehc);
+       const unsigned int *timing = sata_ehc_deb_timing(ehc);
        bool online;
        int rc;
 
index cf993885d2b259b1fc992065b89bed9f37e87b69..6e7d352803bd4abb105046bc9c83ef4cf574c868 100644 (file)
@@ -78,8 +78,6 @@ extern int ata_task_ioctl(struct scsi_device *scsidev, void __user *arg);
 extern int ata_cmd_ioctl(struct scsi_device *scsidev, void __user *arg);
 extern struct ata_port *ata_port_alloc(struct ata_host *host);
 extern const char *sata_spd_string(unsigned int spd);
-extern int ata_port_probe(struct ata_port *ap);
-extern void __ata_port_probe(struct ata_port *ap);
 extern unsigned int ata_read_log_page(struct ata_device *dev, u8 log,
                                      u8 page, void *buf, unsigned int sectors);
 
@@ -124,7 +122,6 @@ extern void ata_scsi_media_change_notify(struct ata_device *dev);
 extern void ata_scsi_hotplug(struct work_struct *work);
 extern void ata_schedule_scsi_eh(struct Scsi_Host *shost);
 extern void ata_scsi_dev_rescan(struct work_struct *work);
-extern int ata_bus_probe(struct ata_port *ap);
 extern int ata_scsi_user_scan(struct Scsi_Host *shost, unsigned int channel,
                              unsigned int id, u64 lun);
 void ata_scsi_sdev_config(struct scsi_device *sdev);
index 314eaa1679540751efb7bc27a346584aec4d0ef6..d0c6924d25b67fbd2f3976fb1a928741a74bed87 100644 (file)
@@ -917,15 +917,13 @@ static int arasan_cf_probe(struct platform_device *pdev)
        return ret;
 }
 
-static int arasan_cf_remove(struct platform_device *pdev)
+static void arasan_cf_remove(struct platform_device *pdev)
 {
        struct ata_host *host = platform_get_drvdata(pdev);
        struct arasan_cf_dev *acdev = host->ports[0]->private_data;
 
        ata_host_detach(host);
        cf_exit(acdev);
-
-       return 0;
 }
 
 #ifdef CONFIG_PM_SLEEP
@@ -966,7 +964,7 @@ MODULE_DEVICE_TABLE(of, arasan_cf_id_table);
 
 static struct platform_driver arasan_cf_driver = {
        .probe          = arasan_cf_probe,
-       .remove         = arasan_cf_remove,
+       .remove_new     = arasan_cf_remove,
        .driver         = {
                .name   = DRIVER_NAME,
                .pm     = &arasan_cf_pm_ops,
index 49bc619b83e255a34e14f41dd53deb3c61cf818d..c36ee991d5e5fdcccb110c3530cda821811fa5c5 100644 (file)
@@ -27,7 +27,6 @@
 
 #include <asm/amigahw.h>
 #include <asm/amigaints.h>
-#include <asm/ide.h>
 #include <asm/setup.h>
 
 #define DRV_NAME "pata_buddha"
index c6e043e05d43b768f32edef39252fc3f7f20644d..c84a20892f1b0ce914937e9ddb6e2dd382b77cb2 100644 (file)
@@ -40,6 +40,7 @@
 #include <linux/ata.h>
 #include <linux/libata.h>
 #include <linux/platform_device.h>
+#include <linux/sys_soc.h>
 #include <linux/delay.h>
 #include <linux/dmaengine.h>
 #include <linux/ktime.h>
@@ -910,6 +911,12 @@ static struct ata_port_operations ep93xx_pata_port_ops = {
        .port_start             = ep93xx_pata_port_start,
 };
 
+static const struct soc_device_attribute ep93xx_soc_table[] = {
+       { .revision = "E1", .data = (void *)ATA_UDMA3 },
+       { .revision = "E2", .data = (void *)ATA_UDMA4 },
+       { /* sentinel */ }
+};
+
 static int ep93xx_pata_probe(struct platform_device *pdev)
 {
        struct ep93xx_pata_data *drv_data;
@@ -939,7 +946,7 @@ static int ep93xx_pata_probe(struct platform_device *pdev)
 
        drv_data = devm_kzalloc(&pdev->dev, sizeof(*drv_data), GFP_KERNEL);
        if (!drv_data) {
-               err = -ENXIO;
+               err = -ENOMEM;
                goto err_rel_gpio;
        }
 
@@ -952,7 +959,7 @@ static int ep93xx_pata_probe(struct platform_device *pdev)
        /* allocate host */
        host = ata_host_alloc(&pdev->dev, 1);
        if (!host) {
-               err = -ENXIO;
+               err = -ENOMEM;
                goto err_rel_dma;
        }
 
@@ -976,12 +983,11 @@ static int ep93xx_pata_probe(struct platform_device *pdev)
         * so this driver supports only UDMA modes.
         */
        if (drv_data->dma_rx_channel && drv_data->dma_tx_channel) {
-               int chip_rev = ep93xx_chip_revision();
+               const struct soc_device_attribute *match;
 
-               if (chip_rev == EP93XX_CHIP_REV_E1)
-                       ap->udma_mask = ATA_UDMA3;
-               else if (chip_rev == EP93XX_CHIP_REV_E2)
-                       ap->udma_mask = ATA_UDMA4;
+               match = soc_device_match(ep93xx_soc_table);
+               if (match)
+                       ap->udma_mask = (unsigned int) match->data;
                else
                        ap->udma_mask = ATA_UDMA2;
        }
@@ -1004,7 +1010,7 @@ err_rel_gpio:
        return err;
 }
 
-static int ep93xx_pata_remove(struct platform_device *pdev)
+static void ep93xx_pata_remove(struct platform_device *pdev)
 {
        struct ata_host *host = platform_get_drvdata(pdev);
        struct ep93xx_pata_data *drv_data = host->private_data;
@@ -1013,7 +1019,6 @@ static int ep93xx_pata_remove(struct platform_device *pdev)
        ep93xx_pata_release_dma(drv_data);
        ep93xx_pata_clear_regs(drv_data->ide_base);
        ep93xx_ide_release_gpio(pdev);
-       return 0;
 }
 
 static struct platform_driver ep93xx_pata_platform_driver = {
@@ -1021,7 +1026,7 @@ static struct platform_driver ep93xx_pata_platform_driver = {
                .name = DRV_NAME,
        },
        .probe = ep93xx_pata_probe,
-       .remove = ep93xx_pata_remove,
+       .remove_new = ep93xx_pata_remove,
 };
 
 module_platform_driver(ep93xx_pata_platform_driver);
index 996516e64f13504e38cb372e6b87b721418832c5..0c2ae430f5aae009c111a4bc63b78bd0e73595ee 100644 (file)
 #include <asm/atarihw.h>
 #include <asm/atariints.h>
 #include <asm/atari_stdma.h>
-#include <asm/ide.h>
 
 #define DRV_NAME "pata_falcon"
 #define DRV_VERSION "0.1.0"
 
+static int pata_falcon_swap_mask;
+
+module_param_named(data_swab, pata_falcon_swap_mask, int, 0444);
+MODULE_PARM_DESC(data_swab, "Data byte swap enable/disable bitmap (0x1==drive1, 0x2==drive2, 0x4==drive3, 0x8==drive4, default==0)");
+
 static const struct scsi_host_template pata_falcon_sht = {
        ATA_PIO_SHT(DRV_NAME),
 };
@@ -50,7 +54,7 @@ static unsigned int pata_falcon_data_xfer(struct ata_queued_cmd *qc,
 
        if (dev->class == ATA_DEV_ATA && cmd &&
            !blk_rq_is_passthrough(scsi_cmd_to_rq(cmd)))
-               swap = 0;
+               swap = (uintptr_t)ap->private_data & BIT(dev->devno);
 
        /* Transfer multiple of 2 bytes */
        if (rw == READ) {
@@ -123,8 +127,9 @@ static int __init pata_falcon_init_one(struct platform_device *pdev)
        struct resource *base_res, *ctl_res, *irq_res;
        struct ata_host *host;
        struct ata_port *ap;
-       void __iomem *base;
-       int irq = 0;
+       void __iomem *base, *ctl_base;
+       int mask_shift = 0; /* Q40 & Falcon default */
+       int irq = 0, io_offset = 1, reg_shift = 2; /* Falcon defaults */
 
        dev_info(&pdev->dev, "Atari Falcon and Q40/Q60 PATA controller\n");
 
@@ -165,26 +170,38 @@ static int __init pata_falcon_init_one(struct platform_device *pdev)
        ap->pio_mask = ATA_PIO4;
        ap->flags |= ATA_FLAG_SLAVE_POSS | ATA_FLAG_NO_IORDY;
 
-       base = (void __iomem *)base_mem_res->start;
        /* N.B. this assumes data_addr will be used for word-sized I/O only */
-       ap->ioaddr.data_addr            = base + 0 + 0 * 4;
-       ap->ioaddr.error_addr           = base + 1 + 1 * 4;
-       ap->ioaddr.feature_addr         = base + 1 + 1 * 4;
-       ap->ioaddr.nsect_addr           = base + 1 + 2 * 4;
-       ap->ioaddr.lbal_addr            = base + 1 + 3 * 4;
-       ap->ioaddr.lbam_addr            = base + 1 + 4 * 4;
-       ap->ioaddr.lbah_addr            = base + 1 + 5 * 4;
-       ap->ioaddr.device_addr          = base + 1 + 6 * 4;
-       ap->ioaddr.status_addr          = base + 1 + 7 * 4;
-       ap->ioaddr.command_addr         = base + 1 + 7 * 4;
-
-       base = (void __iomem *)ctl_mem_res->start;
-       ap->ioaddr.altstatus_addr       = base + 1;
-       ap->ioaddr.ctl_addr             = base + 1;
-
-       ata_port_desc(ap, "cmd 0x%lx ctl 0x%lx",
-                     (unsigned long)base_mem_res->start,
-                     (unsigned long)ctl_mem_res->start);
+       ap->ioaddr.data_addr = (void __iomem *)base_mem_res->start;
+
+       if (base_res) {         /* only Q40 has IO resources */
+               io_offset = 0x10000;
+               reg_shift = 0;
+               base = (void __iomem *)base_res->start;
+               ctl_base = (void __iomem *)ctl_res->start;
+       } else {
+               base = (void __iomem *)base_mem_res->start;
+               ctl_base = (void __iomem *)ctl_mem_res->start;
+       }
+
+       ap->ioaddr.error_addr   = base + io_offset + (1 << reg_shift);
+       ap->ioaddr.feature_addr = base + io_offset + (1 << reg_shift);
+       ap->ioaddr.nsect_addr   = base + io_offset + (2 << reg_shift);
+       ap->ioaddr.lbal_addr    = base + io_offset + (3 << reg_shift);
+       ap->ioaddr.lbam_addr    = base + io_offset + (4 << reg_shift);
+       ap->ioaddr.lbah_addr    = base + io_offset + (5 << reg_shift);
+       ap->ioaddr.device_addr  = base + io_offset + (6 << reg_shift);
+       ap->ioaddr.status_addr  = base + io_offset + (7 << reg_shift);
+       ap->ioaddr.command_addr = base + io_offset + (7 << reg_shift);
+
+       ap->ioaddr.altstatus_addr       = ctl_base + io_offset;
+       ap->ioaddr.ctl_addr             = ctl_base + io_offset;
+
+       ata_port_desc(ap, "cmd %px ctl %px data %px",
+                     base, ctl_base, ap->ioaddr.data_addr);
+
+       if (pdev->id > 0)
+               mask_shift = 2;
+       ap->private_data = (void *)(uintptr_t)(pata_falcon_swap_mask >> mask_shift);
 
        irq_res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
        if (irq_res && irq_res->start > 0) {
index 6f6734c09b1115c6176779d8526008c3b183420a..4d6ef90ccc774b5c9f0b0edb8d455e65f1251244 100644 (file)
@@ -14,8 +14,7 @@
 #include <linux/module.h>
 #include <linux/libata.h>
 #include <linux/bitops.h>
-#include <linux/of_address.h>
-#include <linux/of_device.h>
+#include <linux/of.h>
 #include <linux/clk.h>
 #include "sata_gemini.h"
 
@@ -470,11 +469,7 @@ static int pata_ftide010_probe(struct platform_device *pdev)
        if (irq < 0)
                return irq;
 
-       res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-       if (!res)
-               return -ENODEV;
-
-       ftide->base = devm_ioremap_resource(dev, res);
+       ftide->base = devm_platform_get_and_ioremap_resource(pdev, 0, &res);
        if (IS_ERR(ftide->base))
                return PTR_ERR(ftide->base);
 
@@ -541,15 +536,13 @@ err_dis_clk:
        return ret;
 }
 
-static int pata_ftide010_remove(struct platform_device *pdev)
+static void pata_ftide010_remove(struct platform_device *pdev)
 {
        struct ata_host *host = platform_get_drvdata(pdev);
        struct ftide010 *ftide = host->private_data;
 
        ata_host_detach(ftide->host);
        clk_disable_unprepare(ftide->pclk);
-
-       return 0;
 }
 
 static const struct of_device_id pata_ftide010_of_match[] = {
@@ -563,10 +556,11 @@ static struct platform_driver pata_ftide010_driver = {
                .of_match_table = pata_ftide010_of_match,
        },
        .probe = pata_ftide010_probe,
-       .remove = pata_ftide010_remove,
+       .remove_new = pata_ftide010_remove,
 };
 module_platform_driver(pata_ftide010_driver);
 
+MODULE_DESCRIPTION("low level driver for Faraday Technology FTIDE010");
 MODULE_AUTHOR("Linus Walleij <linus.walleij@linaro.org>");
 MODULE_LICENSE("GPL");
 MODULE_ALIAS("platform:" DRV_NAME);
index e5aa07f92106547e202ee94cd598f9c780ca01a3..3bdbe2b65a2b49f14777fd5fdd21b04f111ba056 100644 (file)
@@ -27,7 +27,6 @@
 #include <asm/amigahw.h>
 #include <asm/amigaints.h>
 #include <asm/amigayle.h>
-#include <asm/ide.h>
 #include <asm/setup.h>
 
 #define DRV_NAME "pata_gayle"
index 4013f28679a9b548cc6c96b21a7a8e38da31acae..d0aa8fc929b4508b5d6d3f6a9e93f87e5e9fe72d 100644 (file)
@@ -141,21 +141,15 @@ static int pata_imx_probe(struct platform_device *pdev)
        if (!priv)
                return -ENOMEM;
 
-       priv->clk = devm_clk_get(&pdev->dev, NULL);
+       priv->clk = devm_clk_get_enabled(&pdev->dev, NULL);
        if (IS_ERR(priv->clk)) {
-               dev_err(&pdev->dev, "Failed to get clock\n");
+               dev_err(&pdev->dev, "Failed to get and enable clock\n");
                return PTR_ERR(priv->clk);
        }
 
-       ret = clk_prepare_enable(priv->clk);
-       if (ret)
-               return ret;
-
        host = ata_host_alloc(&pdev->dev, 1);
-       if (!host) {
-               ret = -ENOMEM;
-               goto err;
-       }
+       if (!host)
+               return -ENOMEM;
 
        host->private_data = priv;
        ap = host->ports[0];
@@ -164,12 +158,9 @@ static int pata_imx_probe(struct platform_device *pdev)
        ap->pio_mask = ATA_PIO4;
        ap->flags |= ATA_FLAG_SLAVE_POSS;
 
-       io_res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-       priv->host_regs = devm_ioremap_resource(&pdev->dev, io_res);
-       if (IS_ERR(priv->host_regs)) {
-               ret = PTR_ERR(priv->host_regs);
-               goto err;
-       }
+       priv->host_regs = devm_platform_get_and_ioremap_resource(pdev, 0, &io_res);
+       if (IS_ERR(priv->host_regs))
+               return PTR_ERR(priv->host_regs);
 
        ap->ioaddr.cmd_addr = priv->host_regs + PATA_IMX_DRIVE_DATA;
        ap->ioaddr.ctl_addr = priv->host_regs + PATA_IMX_DRIVE_CONTROL;
@@ -195,16 +186,12 @@ static int pata_imx_probe(struct platform_device *pdev)
                                &pata_imx_sht);
 
        if (ret)
-               goto err;
+               return ret;
 
        return 0;
-err:
-       clk_disable_unprepare(priv->clk);
-
-       return ret;
 }
 
-static int pata_imx_remove(struct platform_device *pdev)
+static void pata_imx_remove(struct platform_device *pdev)
 {
        struct ata_host *host = platform_get_drvdata(pdev);
        struct pata_imx_priv *priv = host->private_data;
@@ -212,10 +199,6 @@ static int pata_imx_remove(struct platform_device *pdev)
        ata_host_detach(host);
 
        __raw_writel(0, priv->host_regs + PATA_IMX_ATA_INT_EN);
-
-       clk_disable_unprepare(priv->clk);
-
-       return 0;
 }
 
 #ifdef CONFIG_PM_SLEEP
@@ -266,7 +249,7 @@ MODULE_DEVICE_TABLE(of, imx_pata_dt_ids);
 
 static struct platform_driver pata_imx_driver = {
        .probe          = pata_imx_probe,
-       .remove         = pata_imx_remove,
+       .remove_new     = pata_imx_remove,
        .driver = {
                .name           = DRV_NAME,
                .of_match_table = imx_pata_dt_ids,
index b1daa4d3fcd97818bb6b26180008d515cef9ea00..246bb4f8f1f7f6fa451f9ddd1e2adb381cc962d4 100644 (file)
@@ -242,12 +242,6 @@ static int ixp4xx_pata_probe(struct platform_device *pdev)
        int ret;
        int irq;
 
-       cmd = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-       ctl = platform_get_resource(pdev, IORESOURCE_MEM, 1);
-
-       if (!cmd || !ctl)
-               return -EINVAL;
-
        ixpp = devm_kzalloc(dev, sizeof(*ixpp), GFP_KERNEL);
        if (!ixpp)
                return -ENOMEM;
@@ -271,18 +265,18 @@ static int ixp4xx_pata_probe(struct platform_device *pdev)
        if (ret)
                return ret;
 
-       ixpp->cmd = devm_ioremap_resource(dev, cmd);
-       ixpp->ctl = devm_ioremap_resource(dev, ctl);
-       if (IS_ERR(ixpp->cmd) || IS_ERR(ixpp->ctl))
-               return -ENOMEM;
+       ixpp->cmd = devm_platform_get_and_ioremap_resource(pdev, 0, &cmd);
+       if (IS_ERR(ixpp->cmd))
+               return PTR_ERR(ixpp->cmd);
+
+       ixpp->ctl = devm_platform_get_and_ioremap_resource(pdev, 1, &ctl);
+       if (IS_ERR(ixpp->ctl))
+               return PTR_ERR(ixpp->ctl);
 
        irq = platform_get_irq(pdev, 0);
-       if (irq > 0)
-               irq_set_irq_type(irq, IRQ_TYPE_EDGE_RISING);
-       else if (irq < 0)
+       if (irq < 0)
                return irq;
-       else
-               return -EINVAL;
+       irq_set_irq_type(irq, IRQ_TYPE_EDGE_RISING);
 
        /* Just one port to set up */
        ixp4xx_setup_port(ixpp->host->ports[0], ixpp, cmd->start, ctl->start);
index 66c9dea4ea6eeff1af6e35d3495e65696b832a84..6c317a461a1f63178ce9491fb7f4f233f21ff47a 100644 (file)
 #include <linux/gfp.h>
 #include <linux/delay.h>
 #include <linux/libata.h>
+#include <linux/of.h>
 #include <linux/of_address.h>
 #include <linux/of_irq.h>
-#include <linux/of_platform.h>
+#include <linux/platform_device.h>
 #include <linux/types.h>
 
 #include <asm/cacheflush.h>
@@ -800,8 +801,7 @@ static int mpc52xx_ata_probe(struct platform_device *op)
        return rv;
 }
 
-static int
-mpc52xx_ata_remove(struct platform_device *op)
+static void mpc52xx_ata_remove(struct platform_device *op)
 {
        struct ata_host *host = platform_get_drvdata(op);
        struct mpc52xx_ata_priv *priv = host->private_data;
@@ -815,8 +815,6 @@ mpc52xx_ata_remove(struct platform_device *op)
        irq_dispose_mapping(task_irq);
        bcom_ata_release(priv->dmatsk);
        irq_dispose_mapping(priv->ata_irq);
-
-       return 0;
 }
 
 #ifdef CONFIG_PM_SLEEP
@@ -857,7 +855,7 @@ static const struct of_device_id mpc52xx_ata_of_match[] = {
 
 static struct platform_driver mpc52xx_ata_of_platform_driver = {
        .probe          = mpc52xx_ata_probe,
-       .remove         = mpc52xx_ata_remove,
+       .remove_new     = mpc52xx_ata_remove,
 #ifdef CONFIG_PM_SLEEP
        .suspend        = mpc52xx_ata_suspend,
        .resume         = mpc52xx_ata_resume,
index ea402e02c46e25d16dfdb1d36d0d3028369507b4..5275c6464f57fcec2710620e68198c64df519377 100644 (file)
@@ -295,7 +295,7 @@ static int pxa_ata_probe(struct platform_device *pdev)
        return ret;
 }
 
-static int pxa_ata_remove(struct platform_device *pdev)
+static void pxa_ata_remove(struct platform_device *pdev)
 {
        struct ata_host *host = platform_get_drvdata(pdev);
        struct pata_pxa_data *data = host->ports[0]->private_data;
@@ -303,13 +303,11 @@ static int pxa_ata_remove(struct platform_device *pdev)
        dma_release_channel(data->dma_chan);
 
        ata_host_detach(host);
-
-       return 0;
 }
 
 static struct platform_driver pxa_ata_driver = {
        .probe          = pxa_ata_probe,
-       .remove         = pxa_ata_remove,
+       .remove_new     = pxa_ata_remove,
        .driver         = {
                .name           = DRV_NAME,
        },
index 3974d294a341b1da85c85f4daece3ce7513b1ebb..0fa253ad7c93e682f60c410d75b3ad9124364492 100644 (file)
@@ -155,18 +155,16 @@ static int rb532_pata_driver_probe(struct platform_device *pdev)
        return 0;
 }
 
-static int rb532_pata_driver_remove(struct platform_device *pdev)
+static void rb532_pata_driver_remove(struct platform_device *pdev)
 {
        struct ata_host *ah = platform_get_drvdata(pdev);
 
        ata_host_detach(ah);
-
-       return 0;
 }
 
 static struct platform_driver rb532_pata_platform_driver = {
        .probe          = rb532_pata_driver_probe,
-       .remove         = rb532_pata_driver_remove,
+       .remove_new     = rb532_pata_driver_remove,
        .driver  = {
                .name   = DRV_NAME,
        },
index 3b62ea482f1ab176019ab31ef57e11efd8d1d5af..93882e976ede456d5168d844a3dd1005301ea3dd 100644 (file)
@@ -180,8 +180,7 @@ static void sl82c105_bmdma_start(struct ata_queued_cmd *qc)
  *     document.
  *
  *     This function is also called to turn off DMA when a timeout occurs
- *     during DMA operation. In both cases we need to reset the engine,
- *     so no actual eng_timeout handler is required.
+ *     during DMA operation. In both cases we need to reset the engine.
  *
  *     We assume bmdma_stop is always called if bmdma_start as called. If
  *     not then we may need to wrap qc_issue.
index fabdd1e380f94cef1f468ef9dd0d98e0b0510f8f..52f5168e4db542ad6626da8dd6ba00cc8833eada 100644 (file)
@@ -18,9 +18,8 @@
 #include <linux/module.h>
 #include <linux/device.h>
 #include <linux/dmaengine.h>
-#include <linux/of_address.h>
+#include <linux/of.h>
 #include <linux/of_irq.h>
-#include <linux/of_platform.h>
 #include <linux/platform_device.h>
 #include <linux/phy/phy.h>
 #include <linux/libata.h>
@@ -1211,7 +1210,7 @@ error_out:
        return err;
 }
 
-static int sata_dwc_remove(struct platform_device *ofdev)
+static void sata_dwc_remove(struct platform_device *ofdev)
 {
        struct device *dev = &ofdev->dev;
        struct ata_host *host = dev_get_drvdata(dev);
@@ -1227,7 +1226,6 @@ static int sata_dwc_remove(struct platform_device *ofdev)
 #endif
 
        dev_dbg(dev, "done\n");
-       return 0;
 }
 
 static const struct of_device_id sata_dwc_match[] = {
@@ -1242,7 +1240,7 @@ static struct platform_driver sata_dwc_driver = {
                .of_match_table = sata_dwc_match,
        },
        .probe = sata_dwc_probe,
-       .remove = sata_dwc_remove,
+       .remove_new = sata_dwc_remove,
 };
 
 module_platform_driver(sata_dwc_driver);
index ccd99b9aa9ff70cf131d9825926c8ef06d587dbd..01aa05f4c3f5cd1c43cd03643da4a04d8facce20 100644 (file)
@@ -12,6 +12,9 @@
 
 #include <linux/kernel.h>
 #include <linux/module.h>
+#include <linux/of.h>
+#include <linux/of_address.h>
+#include <linux/of_irq.h>
 #include <linux/platform_device.h>
 #include <linux/slab.h>
 
@@ -19,9 +22,6 @@
 #include <scsi/scsi_cmnd.h>
 #include <linux/libata.h>
 #include <asm/io.h>
-#include <linux/of_address.h>
-#include <linux/of_irq.h>
-#include <linux/of_platform.h>
 
 static unsigned int intr_coalescing_count;
 module_param(intr_coalescing_count, int, S_IRUGO);
@@ -1526,7 +1526,7 @@ error_exit_with_cleanup:
        return retval;
 }
 
-static int sata_fsl_remove(struct platform_device *ofdev)
+static void sata_fsl_remove(struct platform_device *ofdev)
 {
        struct ata_host *host = platform_get_drvdata(ofdev);
        struct sata_fsl_host_priv *host_priv = host->private_data;
@@ -1535,8 +1535,6 @@ static int sata_fsl_remove(struct platform_device *ofdev)
        device_remove_file(&ofdev->dev, &host_priv->rx_watermark);
 
        ata_host_detach(host);
-
-       return 0;
 }
 
 #ifdef CONFIG_PM_SLEEP
@@ -1591,7 +1589,7 @@ static struct platform_driver fsl_sata_driver = {
                .of_match_table = fsl_sata_match,
        },
        .probe          = sata_fsl_probe,
-       .remove         = sata_fsl_remove,
+       .remove_new     = sata_fsl_remove,
 #ifdef CONFIG_PM_SLEEP
        .suspend        = sata_fsl_suspend,
        .resume         = sata_fsl_resume,
index c42cc9bbbc4ed46188a8a80b7f2837cbd732d5b8..400b22ee99c33affba7b25ae46de0a2014bfd71f 100644 (file)
@@ -12,8 +12,7 @@
 #include <linux/regmap.h>
 #include <linux/delay.h>
 #include <linux/reset.h>
-#include <linux/of_address.h>
-#include <linux/of_device.h>
+#include <linux/of.h>
 #include <linux/clk.h>
 #include <linux/io.h>
 #include <linux/pinctrl/consumer.h>
@@ -400,7 +399,7 @@ out_unprep_clk:
        return ret;
 }
 
-static int gemini_sata_remove(struct platform_device *pdev)
+static void gemini_sata_remove(struct platform_device *pdev)
 {
        struct sata_gemini *sg = platform_get_drvdata(pdev);
 
@@ -409,8 +408,6 @@ static int gemini_sata_remove(struct platform_device *pdev)
                clk_unprepare(sg->sata0_pclk);
        }
        sg_singleton = NULL;
-
-       return 0;
 }
 
 static const struct of_device_id gemini_sata_of_match[] = {
@@ -424,10 +421,11 @@ static struct platform_driver gemini_sata_driver = {
                .of_match_table = gemini_sata_of_match,
        },
        .probe = gemini_sata_probe,
-       .remove = gemini_sata_remove,
+       .remove_new = gemini_sata_remove,
 };
 module_platform_driver(gemini_sata_driver);
 
+MODULE_DESCRIPTION("low level driver for Cortina Systems Gemini SATA bridge");
 MODULE_AUTHOR("Linus Walleij <linus.walleij@linaro.org>");
 MODULE_LICENSE("GPL");
 MODULE_ALIAS("platform:" DRV_NAME);
index d6b324d03e5974b7fde0bdaf9b027df3083d5868..63ef7bb073ce03362b9290d32d07fe5392385c19 100644 (file)
@@ -13,7 +13,7 @@
 #include <linux/io.h>
 #include <linux/spinlock.h>
 #include <linux/device.h>
-#include <linux/of_device.h>
+#include <linux/of.h>
 #include <linux/of_address.h>
 #include <linux/platform_device.h>
 #include <linux/libata.h>
@@ -385,7 +385,7 @@ static int highbank_initialize_phys(struct device *dev, void __iomem *addr)
 static int ahci_highbank_hardreset(struct ata_link *link, unsigned int *class,
                                unsigned long deadline)
 {
-       static const unsigned long timing[] = { 5, 100, 500};
+       static const unsigned int timing[] = { 5, 100, 500};
        struct ata_port *ap = link->ap;
        struct ahci_port_priv *pp = ap->private_data;
        struct ahci_host_priv *hpriv = ap->host->private_data;
index 2c8c78ed86c199799969994b34bbb603d9b3a235..db9c255dc9f2ecc60630e5eeb820b974648bc613 100644 (file)
@@ -619,7 +619,7 @@ static int inic_hardreset(struct ata_link *link, unsigned int *class,
        struct ata_port *ap = link->ap;
        void __iomem *port_base = inic_port_base(ap);
        void __iomem *idma_ctl = port_base + PORT_IDMA_CTL;
-       const unsigned long *timing = sata_ehc_deb_timing(&link->eh_context);
+       const unsigned int *timing = sata_ehc_deb_timing(&link->eh_context);
        int rc;
 
        /* hammer it into sane state */
index d404e631d1527431bb53472f0f67cda7c9dbc1e1..d105db5c7d81a6b15fd68bee9f9ad9c17799a55c 100644 (file)
@@ -3633,7 +3633,7 @@ static int mv_hardreset(struct ata_link *link, unsigned int *class,
 
        /* Workaround for errata FEr SATA#10 (part 2) */
        do {
-               const unsigned long *timing =
+               const unsigned int *timing =
                                sata_ehc_deb_timing(&link->eh_context);
 
                rc = sata_link_hardreset(link, timing, deadline + extra,
@@ -4210,7 +4210,7 @@ err:
  *      A platform bus SATA device has been unplugged. Perform the needed
  *      cleanup. Also called on module unload for any active devices.
  */
-static int mv_platform_remove(struct platform_device *pdev)
+static void mv_platform_remove(struct platform_device *pdev)
 {
        struct ata_host *host = platform_get_drvdata(pdev);
        struct mv_host_priv *hpriv = host->private_data;
@@ -4228,7 +4228,6 @@ static int mv_platform_remove(struct platform_device *pdev)
                }
                phy_power_off(hpriv->port_phys[port]);
        }
-       return 0;
 }
 
 #ifdef CONFIG_PM_SLEEP
@@ -4284,7 +4283,7 @@ MODULE_DEVICE_TABLE(of, mv_sata_dt_ids);
 
 static struct platform_driver mv_platform_driver = {
        .probe          = mv_platform_probe,
-       .remove         = mv_platform_remove,
+       .remove_new     = mv_platform_remove,
        .suspend        = mv_platform_suspend,
        .resume         = mv_platform_resume,
        .driver         = {
index abf5651c87ab45c77499c886f26aa5808a2eb011..0a0cee755bde736a743e78d9f58c4c54ff754486 100644 (file)
@@ -1529,7 +1529,7 @@ static int nv_hardreset(struct ata_link *link, unsigned int *class,
                sata_link_hardreset(link, sata_deb_timing_hotplug, deadline,
                                    NULL, NULL);
        else {
-               const unsigned long *timing = sata_ehc_deb_timing(ehc);
+               const unsigned int *timing = sata_ehc_deb_timing(ehc);
                int rc;
 
                if (!(ehc->i.flags & ATA_EHI_QUIET))
index 34790f15c1b81fb5913cb033c4e6c929665befad..c1469d0768801943d6a27679b06286a33c124aab 100644 (file)
@@ -11,7 +11,7 @@
 #include <linux/module.h>
 #include <linux/ata.h>
 #include <linux/libata.h>
-#include <linux/of_device.h>
+#include <linux/of.h>
 #include <linux/platform_device.h>
 #include <linux/pm_runtime.h>
 #include <linux/err.h>
@@ -861,15 +861,11 @@ static int sata_rcar_probe(struct platform_device *pdev)
        struct device *dev = &pdev->dev;
        struct ata_host *host;
        struct sata_rcar_priv *priv;
-       struct resource *mem;
-       int irq;
-       int ret = 0;
+       int irq, ret;
 
        irq = platform_get_irq(pdev, 0);
        if (irq < 0)
                return irq;
-       if (!irq)
-               return -EINVAL;
 
        priv = devm_kzalloc(dev, sizeof(struct sata_rcar_priv), GFP_KERNEL);
        if (!priv)
@@ -890,8 +886,7 @@ static int sata_rcar_probe(struct platform_device *pdev)
 
        host->private_data = priv;
 
-       mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-       priv->base = devm_ioremap_resource(dev, mem);
+       priv->base = devm_platform_ioremap_resource(pdev, 0);
        if (IS_ERR(priv->base)) {
                ret = PTR_ERR(priv->base);
                goto err_pm_put;
@@ -914,7 +909,7 @@ err_pm_put:
        return ret;
 }
 
-static int sata_rcar_remove(struct platform_device *pdev)
+static void sata_rcar_remove(struct platform_device *pdev)
 {
        struct ata_host *host = platform_get_drvdata(pdev);
        struct sata_rcar_priv *priv = host->private_data;
@@ -930,8 +925,6 @@ static int sata_rcar_remove(struct platform_device *pdev)
 
        pm_runtime_put(&pdev->dev);
        pm_runtime_disable(&pdev->dev);
-
-       return 0;
 }
 
 #ifdef CONFIG_PM_SLEEP
@@ -1016,7 +1009,7 @@ static const struct dev_pm_ops sata_rcar_pm_ops = {
 
 static struct platform_driver sata_rcar_driver = {
        .probe          = sata_rcar_probe,
-       .remove         = sata_rcar_remove,
+       .remove_new     = sata_rcar_remove,
        .driver = {
                .name           = DRV_NAME,
                .of_match_table = sata_rcar_match,
index e72a0257990d884db06238a147f46c7695bd93b6..142e70bfc4982c13af4752e60b34f759449a6511 100644 (file)
@@ -597,7 +597,7 @@ static int sil24_init_port(struct ata_port *ap)
 static int sil24_exec_polled_cmd(struct ata_port *ap, int pmp,
                                 const struct ata_taskfile *tf,
                                 int is_cmd, u32 ctrl,
-                                unsigned long timeout_msec)
+                                unsigned int timeout_msec)
 {
        void __iomem *port = sil24_port_base(ap);
        struct sil24_port_priv *pp = ap->private_data;
@@ -651,7 +651,7 @@ static int sil24_softreset(struct ata_link *link, unsigned int *class,
 {
        struct ata_port *ap = link->ap;
        int pmp = sata_srst_pmp(link);
-       unsigned long timeout_msec = 0;
+       unsigned int timeout_msec = 0;
        struct ata_taskfile tf;
        const char *reason;
        int rc;
index ccc0160726372cab28670eceaf3f4a01ec81fd07..b51d7a9d0d90ce0a6c72fe841aad222708c046e1 100644 (file)
@@ -232,7 +232,6 @@ static const struct scsi_host_template pdc_sata_sht = {
        .dma_boundary           = ATA_DMA_BOUNDARY,
 };
 
-/* TODO: inherit from base port_ops after converting to new EH */
 static struct ata_port_operations pdc_20621_ops = {
        .inherits               = &ata_sff_port_ops,
 
index bd5f39de83d1d2f8e0b738bd75eee672230b70c4..9472b9743aefbe85f0e8aeb6f55374f14db52cac 100644 (file)
@@ -787,7 +787,7 @@ static int hisi_sas_init_device(struct domain_device *device)
                 * However we don't need to issue a hard reset here for these
                 * reasons:
                 * a. When probing the device, libsas/libata already issues a
-                * hard reset in sas_probe_sata() -> ata_sas_async_probe().
+                * hard reset in sas_probe_sata() -> ata_port_probe().
                 * Note that in hisi_sas_debug_I_T_nexus_reset() we take care
                 * to issue a hard reset by checking the dev status (== INIT).
                 * b. When resetting the controller, this is simply unnecessary.
index 3bf454792a6db409a21add4fcca37fea0f91b80b..12e2653846e3f0d93a9dee938eee0ba65df169e2 100644 (file)
@@ -567,8 +567,6 @@ static struct ata_port_operations sas_sata_ops = {
        .qc_prep                = ata_noop_qc_prep,
        .qc_issue               = sas_ata_qc_issue,
        .qc_fill_rtf            = sas_ata_qc_fill_rtf,
-       .port_start             = ata_sas_port_start,
-       .port_stop              = ata_sas_port_stop,
        .set_dmamode            = sas_ata_set_dmamode,
        .sched_eh               = sas_ata_sched_eh,
        .end_eh                 = sas_ata_end_eh,
@@ -609,9 +607,6 @@ int sas_ata_init(struct domain_device *found_dev)
        ap->private_data = found_dev;
        ap->cbl = ATA_CBL_SATA;
        ap->scsi_host = shost;
-       rc = ata_sas_port_init(ap);
-       if (rc)
-               goto destroy_port;
 
        rc = ata_sas_tport_add(ata_host->dev, ap);
        if (rc)
@@ -623,7 +618,7 @@ int sas_ata_init(struct domain_device *found_dev)
        return 0;
 
 destroy_port:
-       ata_sas_port_destroy(ap);
+       kfree(ap);
 free_host:
        ata_host_put(ata_host);
        return rc;
@@ -657,7 +652,7 @@ void sas_probe_sata(struct asd_sas_port *port)
                if (!dev_is_sata(dev))
                        continue;
 
-               ata_sas_async_probe(dev->sata_dev.ap);
+               ata_port_probe(dev->sata_dev.ap);
        }
        mutex_unlock(&port->ha->disco_mutex);
 
index 15cb9965faa2d3c9e747878c2387e34da21a2d98..ff7b63b10aeb372939d12c95fb4dc1be490c6f1e 100644 (file)
@@ -301,7 +301,7 @@ void sas_free_device(struct kref *kref)
 
        if (dev_is_sata(dev) && dev->sata_dev.ap) {
                ata_sas_tport_delete(dev->sata_dev.ap);
-               ata_sas_port_destroy(dev->sata_dev.ap);
+               kfree(dev->sata_dev.ap);
                ata_host_put(dev->sata_dev.ata_host);
                dev->sata_dev.ata_host = NULL;
                dev->sata_dev.ap = NULL;
diff --git a/include/asm-generic/ide_iops.h b/include/asm-generic/ide_iops.h
deleted file mode 100644 (file)
index 81dfa3e..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/* Generic I/O and MEMIO string operations.  */
-
-#define __ide_insw     insw
-#define __ide_insl     insl
-#define __ide_outsw    outsw
-#define __ide_outsl    outsl
-
-static __inline__ void __ide_mm_insw(void __iomem *port, void *addr, u32 count)
-{
-       while (count--) {
-               *(u16 *)addr = readw(port);
-               addr += 2;
-       }
-}
-
-static __inline__ void __ide_mm_insl(void __iomem *port, void *addr, u32 count)
-{
-       while (count--) {
-               *(u32 *)addr = readl(port);
-               addr += 4;
-       }
-}
-
-static __inline__ void __ide_mm_outsw(void __iomem *port, void *addr, u32 count)
-{
-       while (count--) {
-               writew(*(u16 *)addr, port);
-               addr += 2;
-       }
-}
-
-static __inline__ void __ide_mm_outsl(void __iomem * port, void *addr, u32 count)
-{
-       while (count--) {
-               writel(*(u32 *)addr, port);
-               addr += 4;
-       }
-}
index 820f7a3a2749bedf8f46cc2684cda1d336b7cfa4..52d58b13e5eee7e5b004fb84dd0fba853f2ea0dc 100644 (file)
@@ -344,7 +344,6 @@ enum {
        ATA_LINK_RESUME_TRIES   = 5,
 
        /* how hard are we gonna try to probe/recover devices */
-       ATA_PROBE_MAX_TRIES     = 3,
        ATA_EH_DEV_TRIES        = 3,
        ATA_EH_PMP_TRIES        = 5,
        ATA_EH_PMP_LINK_TRIES   = 3,
@@ -976,12 +975,6 @@ struct ata_port_operations {
        ssize_t (*transmit_led_message)(struct ata_port *ap, u32 state,
                                        ssize_t size);
 
-       /*
-        * Obsolete
-        */
-       void (*phy_reset)(struct ata_port *ap);
-       void (*eng_timeout)(struct ata_port *ap);
-
        /*
         * ->inherits must be the last field and all the preceding
         * fields must be pointers.
@@ -1116,7 +1109,7 @@ static inline void ata_sas_port_resume(struct ata_port *ap)
 extern int ata_ratelimit(void);
 extern void ata_msleep(struct ata_port *ap, unsigned int msecs);
 extern u32 ata_wait_register(struct ata_port *ap, void __iomem *reg, u32 mask,
-                       u32 val, unsigned long interval, unsigned long timeout);
+                            u32 val, unsigned int interval, unsigned int timeout);
 extern int atapi_cmd_type(u8 opcode);
 extern unsigned int ata_pack_xfermask(unsigned int pio_mask,
                                      unsigned int mwdma_mask,
@@ -1166,11 +1159,11 @@ extern void ata_scsi_cmd_error_handler(struct Scsi_Host *host, struct ata_port *
  * SATA specific code - drivers/ata/libata-sata.c
  */
 #ifdef CONFIG_SATA_HOST
-extern const unsigned long sata_deb_timing_normal[];
-extern const unsigned long sata_deb_timing_hotplug[];
-extern const unsigned long sata_deb_timing_long[];
+extern const unsigned int sata_deb_timing_normal[];
+extern const unsigned int sata_deb_timing_hotplug[];
+extern const unsigned int sata_deb_timing_long[];
 
-static inline const unsigned long *
+static inline const unsigned int *
 sata_ehc_deb_timing(struct ata_eh_context *ehc)
 {
        if (ehc->i.flags & ATA_EHI_HOTPLUGGED)
@@ -1185,14 +1178,14 @@ extern int sata_scr_write(struct ata_link *link, int reg, u32 val);
 extern int sata_scr_write_flush(struct ata_link *link, int reg, u32 val);
 extern int sata_set_spd(struct ata_link *link);
 extern int sata_link_hardreset(struct ata_link *link,
-                       const unsigned long *timing, unsigned long deadline,
+                       const unsigned int *timing, unsigned long deadline,
                        bool *online, int (*check_ready)(struct ata_link *));
-extern int sata_link_resume(struct ata_link *link, const unsigned long *params,
+extern int sata_link_resume(struct ata_link *link, const unsigned int *params,
                            unsigned long deadline);
 extern int ata_eh_read_sense_success_ncq_log(struct ata_link *link);
 extern void ata_eh_analyze_ncq_error(struct ata_link *link);
 #else
-static inline const unsigned long *
+static inline const unsigned int *
 sata_ehc_deb_timing(struct ata_eh_context *ehc)
 {
        return NULL;
@@ -1212,7 +1205,7 @@ static inline int sata_scr_write_flush(struct ata_link *link, int reg, u32 val)
 }
 static inline int sata_set_spd(struct ata_link *link) { return -EOPNOTSUPP; }
 static inline int sata_link_hardreset(struct ata_link *link,
-                                     const unsigned long *timing,
+                                     const unsigned int *timing,
                                      unsigned long deadline,
                                      bool *online,
                                      int (*check_ready)(struct ata_link *))
@@ -1222,7 +1215,7 @@ static inline int sata_link_hardreset(struct ata_link *link,
        return -EOPNOTSUPP;
 }
 static inline int sata_link_resume(struct ata_link *link,
-                                  const unsigned long *params,
+                                  const unsigned int *params,
                                   unsigned long deadline)
 {
        return -EOPNOTSUPP;
@@ -1234,20 +1227,15 @@ static inline int ata_eh_read_sense_success_ncq_log(struct ata_link *link)
 static inline void ata_eh_analyze_ncq_error(struct ata_link *link) { }
 #endif
 extern int sata_link_debounce(struct ata_link *link,
-                       const unsigned long *params, unsigned long deadline);
+                             const unsigned int *params, unsigned long deadline);
 extern int sata_link_scr_lpm(struct ata_link *link, enum ata_lpm_policy policy,
                             bool spm_wakeup);
 extern int ata_slave_link_init(struct ata_port *ap);
-extern void ata_sas_port_destroy(struct ata_port *);
 extern struct ata_port *ata_sas_port_alloc(struct ata_host *,
                                           struct ata_port_info *, struct Scsi_Host *);
-extern void ata_sas_async_probe(struct ata_port *ap);
-extern int ata_sas_sync_probe(struct ata_port *ap);
-extern int ata_sas_port_init(struct ata_port *);
-extern int ata_sas_port_start(struct ata_port *ap);
+extern void ata_port_probe(struct ata_port *ap);
 extern int ata_sas_tport_add(struct device *parent, struct ata_port *ap);
 extern void ata_sas_tport_delete(struct ata_port *ap);
-extern void ata_sas_port_stop(struct ata_port *ap);
 extern int ata_sas_slave_configure(struct scsi_device *, struct ata_port *);
 extern int ata_sas_queuecmd(struct scsi_cmnd *cmd, struct ata_port *ap);
 extern void ata_tf_to_fis(const struct ata_taskfile *tf,
@@ -1785,7 +1773,7 @@ static inline struct ata_queued_cmd *ata_qc_from_tag(struct ata_port *ap,
 {
        struct ata_queued_cmd *qc = __ata_qc_from_tag(ap, tag);
 
-       if (unlikely(!qc) || !ap->ops->error_handler)
+       if (unlikely(!qc))
                return qc;
 
        if ((qc->flags & (ATA_QCFLAG_ACTIVE |
@@ -1876,7 +1864,7 @@ static inline int ata_check_ready(u8 status)
 }
 
 static inline unsigned long ata_deadline(unsigned long from_jiffies,
-                                        unsigned long timeout_msecs)
+                                        unsigned int timeout_msecs)
 {
        return from_jiffies + msecs_to_jiffies(timeout_msecs);
 }