Commit 8a32f81a authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'ata-5.19-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/dlemoal/libata

Pull ata updates from Damien Le Moal:
 "For this cycle, the libata.force kernel parameter changes stand out.
  Beside that, some small cleanups in various drivers. In more detail:

   - Changes to the pata_mpc52xx driver in preparation for powerpc's
     asm/prom.h cleanup, from Christophe.

   - Improved ATA command allocation, from John.

   - Various small cleanups to the pata_via, pata_sil680, pata_ftide010,
     sata_gemini, ahci_brcm drivers and to libata-core, from Sergey,
     Diego, Ruyi, Mighao and Jiabing.

   - Add support for the RZ/G2H SoC to the rcar-sata driver, from Lad.

   - AHCI RAID ID cleanup, from Dan.

   - Improvement to the libata.force kernel parameter to allow most
     horkage flags to be manually forced for debugging drive issues in
     the field without needing recompiling a kernel, from me"

* tag 'ata-5.19-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/dlemoal/libata:
  ata: pata_ftide010: Remove unneeded ERROR check before clk_disable_unprepare
  doc: admin-guide: Update libata kernel parameters
  ata: libata-core: Allow forcing most horkage flags
  ata: libata-core: Improve link flags forced settings
  ata: libata-core: Refactor force_tbl definition
  ata: libata-core: cleanup ata_device_blacklist
  ata: simplify the return expression of brcm_ahci_remove
  ata: Make use of the helper function devm_platform_ioremap_resource()
  ata: libata-core: replace "its" with "it is"
  ahci: Add a generic 'controller2' RAID id
  dt-bindings: ata: renesas,rcar-sata: Add r8a774e1 support
  ata: pata_via: fix sloppy typing in via_do_set_mode()
  ata: pata_sil680: fix result type of sil680_sel{dev|reg}()
  ata: libata-core: fix parameter type in ata_xfer_mode2shift()
  libata: Improve ATA queued command allocation
  ata: pata_mpc52xx: Prepare cleanup of powerpc's asm/prom.h
parents 5dc92186 71abb4df
...@@ -2622,14 +2622,14 @@ ...@@ -2622,14 +2622,14 @@
when set. when set.
Format: <int> Format: <int>
libata.force= [LIBATA] Force configurations. The format is comma- libata.force= [LIBATA] Force configurations. The format is a comma-
separated list of "[ID:]VAL" where ID is separated list of "[ID:]VAL" where ID is PORT[.DEVICE].
PORT[.DEVICE]. PORT and DEVICE are decimal numbers PORT and DEVICE are decimal numbers matching port, link
matching port, link or device. Basically, it matches or device. Basically, it matches the ATA ID string
the ATA ID string printed on console by libata. If printed on console by libata. If the whole ID part is
the whole ID part is omitted, the last PORT and DEVICE omitted, the last PORT and DEVICE values are used. If
values are used. If ID hasn't been specified yet, the ID hasn't been specified yet, the configuration applies
configuration applies to all ports, links and devices. to all ports, links and devices.
If only DEVICE is omitted, the parameter applies to If only DEVICE is omitted, the parameter applies to
the port and all links and devices behind it. DEVICE the port and all links and devices behind it. DEVICE
...@@ -2639,7 +2639,7 @@ ...@@ -2639,7 +2639,7 @@
host link and device attached to it. host link and device attached to it.
The VAL specifies the configuration to force. As long The VAL specifies the configuration to force. As long
as there's no ambiguity shortcut notation is allowed. as there is no ambiguity, shortcut notation is allowed.
For example, both 1.5 and 1.5G would work for 1.5Gbps. For example, both 1.5 and 1.5G would work for 1.5Gbps.
The following configurations can be forced. The following configurations can be forced.
...@@ -2652,19 +2652,58 @@ ...@@ -2652,19 +2652,58 @@
udma[/][16,25,33,44,66,100,133] notation is also udma[/][16,25,33,44,66,100,133] notation is also
allowed. allowed.
* nohrst, nosrst, norst: suppress hard, soft and both
resets.
* rstonce: only attempt one reset during hot-unplug
link recovery.
* [no]dbdelay: Enable or disable the extra 200ms delay
before debouncing a link PHY and device presence
detection.
* [no]ncq: Turn on or off NCQ. * [no]ncq: Turn on or off NCQ.
* [no]ncqtrim: Turn off queued DSM TRIM. * [no]ncqtrim: Enable or disable queued DSM TRIM.
* [no]ncqati: Enable or disable NCQ trim on ATI chipset.
* [no]trim: Enable or disable (unqueued) TRIM.
* trim_zero: Indicate that TRIM command zeroes data.
* max_trim_128m: Set 128M maximum trim size limit.
* [no]dma: Turn on or off DMA transfers.
* atapi_dmadir: Enable ATAPI DMADIR bridge support.
* atapi_mod16_dma: Enable the use of ATAPI DMA for
commands that are not a multiple of 16 bytes.
* [no]dmalog: Enable or disable the use of the
READ LOG DMA EXT command to access logs.
* [no]iddevlog: Enable or disable access to the
identify device data log.
* [no]logdir: Enable or disable access to the general
purpose log directory.
* max_sec_128: Set transfer size limit to 128 sectors.
* max_sec_1024: Set or clear transfer size limit to
1024 sectors.
* nohrst, nosrst, norst: suppress hard, soft * max_sec_lba48: Set or clear transfer size limit to
and both resets. 65535 sectors.
* rstonce: only attempt one reset during * [no]lpm: Enable or disable link power management.
hot-unplug link recovery
* dump_id: dump IDENTIFY data. * [no]setxfer: Indicate if transfer speed mode setting
should be skipped.
* atapi_dmadir: Enable ATAPI DMADIR bridge support * dump_id: Dump IDENTIFY data.
* disable: Disable this device. * disable: Disable this device.
......
...@@ -26,6 +26,7 @@ properties: ...@@ -26,6 +26,7 @@ properties:
- items: - items:
- enum: - enum:
- renesas,sata-r8a774b1 # RZ/G2N - renesas,sata-r8a774b1 # RZ/G2N
- renesas,sata-r8a774e1 # RZ/G2H
- renesas,sata-r8a7795 # R-Car H3 - renesas,sata-r8a7795 # R-Car H3
- renesas,sata-r8a77965 # R-Car M3-N - renesas,sata-r8a77965 # R-Car M3-N
- const: renesas,rcar-gen3-sata # generic R-Car Gen3 or RZ/G2 - const: renesas,rcar-gen3-sata # generic R-Car Gen3 or RZ/G2
......
...@@ -424,12 +424,6 @@ How commands are issued ...@@ -424,12 +424,6 @@ How commands are issued
----------------------- -----------------------
Internal commands Internal commands
First, qc is allocated and initialized using :c:func:`ata_qc_new_init`.
Although :c:func:`ata_qc_new_init` doesn't implement any wait or retry
mechanism when qc is not available, internal commands are currently
issued only during initialization and error recovery, so no other
command is active and allocation is guaranteed to succeed.
Once allocated qc's taskfile is initialized for the command to be Once allocated qc's taskfile is initialized for the command to be
executed. qc currently has two mechanisms to notify completion. One executed. qc currently has two mechanisms to notify completion. One
is via ``qc->complete_fn()`` callback and the other is completion is via ``qc->complete_fn()`` callback and the other is completion
...@@ -447,11 +441,6 @@ SCSI commands ...@@ -447,11 +441,6 @@ SCSI commands
translated. No qc is involved in processing a simulated scmd. The translated. No qc is involved in processing a simulated scmd. The
result is computed right away and the scmd is completed. result is computed right away and the scmd is completed.
For a translated scmd, :c:func:`ata_qc_new_init` is invoked to allocate a
qc and the scmd is translated into the qc. SCSI midlayer's
completion notification function pointer is stored into
``qc->scsidone``.
``qc->complete_fn()`` callback is used for completion notification. ATA ``qc->complete_fn()`` callback is used for completion notification. ATA
commands use :c:func:`ata_scsi_qc_complete` while ATAPI commands use commands use :c:func:`ata_scsi_qc_complete` while ATAPI commands use
:c:func:`atapi_qc_complete`. Both functions end up calling ``qc->scsidone`` :c:func:`atapi_qc_complete`. Both functions end up calling ``qc->scsidone``
......
...@@ -324,7 +324,6 @@ static const struct pci_device_id ahci_pci_tbl[] = { ...@@ -324,7 +324,6 @@ static const struct pci_device_id ahci_pci_tbl[] = {
{ PCI_VDEVICE(INTEL, 0x1d02), board_ahci }, /* PBG AHCI */ { PCI_VDEVICE(INTEL, 0x1d02), board_ahci }, /* PBG AHCI */
{ PCI_VDEVICE(INTEL, 0x1d04), board_ahci }, /* PBG RAID */ { PCI_VDEVICE(INTEL, 0x1d04), board_ahci }, /* PBG RAID */
{ PCI_VDEVICE(INTEL, 0x1d06), board_ahci }, /* PBG RAID */ { PCI_VDEVICE(INTEL, 0x1d06), board_ahci }, /* PBG RAID */
{ PCI_VDEVICE(INTEL, 0x2826), board_ahci }, /* PBG/Lewisburg RAID*/
{ PCI_VDEVICE(INTEL, 0x2323), board_ahci }, /* DH89xxCC AHCI */ { PCI_VDEVICE(INTEL, 0x2323), board_ahci }, /* DH89xxCC AHCI */
{ PCI_VDEVICE(INTEL, 0x1e02), board_ahci }, /* Panther Point AHCI */ { PCI_VDEVICE(INTEL, 0x1e02), board_ahci }, /* Panther Point AHCI */
{ PCI_VDEVICE(INTEL, 0x1e03), board_ahci_low_power }, /* Panther M AHCI */ { PCI_VDEVICE(INTEL, 0x1e03), board_ahci_low_power }, /* Panther M AHCI */
...@@ -367,7 +366,9 @@ static const struct pci_device_id ahci_pci_tbl[] = { ...@@ -367,7 +366,9 @@ static const struct pci_device_id ahci_pci_tbl[] = {
{ PCI_VDEVICE(INTEL, 0x1f3e), board_ahci_avn }, /* Avoton RAID */ { PCI_VDEVICE(INTEL, 0x1f3e), board_ahci_avn }, /* Avoton RAID */
{ PCI_VDEVICE(INTEL, 0x1f3f), board_ahci_avn }, /* Avoton RAID */ { PCI_VDEVICE(INTEL, 0x1f3f), board_ahci_avn }, /* Avoton RAID */
{ PCI_VDEVICE(INTEL, 0x2823), board_ahci }, /* Wellsburg/Lewisburg AHCI*/ { PCI_VDEVICE(INTEL, 0x2823), board_ahci }, /* Wellsburg/Lewisburg AHCI*/
{ PCI_VDEVICE(INTEL, 0x2827), board_ahci }, /* Wellsburg/Lewisburg RAID*/ { PCI_VDEVICE(INTEL, 0x2826), board_ahci }, /* *burg SATA0 'RAID' */
{ PCI_VDEVICE(INTEL, 0x2827), board_ahci }, /* *burg SATA1 'RAID' */
{ PCI_VDEVICE(INTEL, 0x282f), board_ahci }, /* *burg SATA2 'RAID' */
{ PCI_VDEVICE(INTEL, 0x43d4), board_ahci }, /* Rocket Lake PCH-H RAID */ { PCI_VDEVICE(INTEL, 0x43d4), board_ahci }, /* Rocket Lake PCH-H RAID */
{ PCI_VDEVICE(INTEL, 0x43d5), board_ahci }, /* Rocket Lake PCH-H RAID */ { PCI_VDEVICE(INTEL, 0x43d5), board_ahci }, /* Rocket Lake PCH-H RAID */
{ PCI_VDEVICE(INTEL, 0x43d6), board_ahci }, /* Rocket Lake PCH-H RAID */ { PCI_VDEVICE(INTEL, 0x43d6), board_ahci }, /* Rocket Lake PCH-H RAID */
......
...@@ -549,15 +549,10 @@ static int brcm_ahci_remove(struct platform_device *pdev) ...@@ -549,15 +549,10 @@ static int brcm_ahci_remove(struct platform_device *pdev)
struct ata_host *host = dev_get_drvdata(&pdev->dev); struct ata_host *host = dev_get_drvdata(&pdev->dev);
struct ahci_host_priv *hpriv = host->private_data; struct ahci_host_priv *hpriv = host->private_data;
struct brcm_ahci_priv *priv = hpriv->plat_data; struct brcm_ahci_priv *priv = hpriv->plat_data;
int ret;
brcm_sata_phys_disable(priv); brcm_sata_phys_disable(priv);
ret = ata_platform_remove_one(pdev); return ata_platform_remove_one(pdev);
if (ret)
return ret;
return 0;
} }
static void brcm_ahci_shutdown(struct platform_device *pdev) static void brcm_ahci_shutdown(struct platform_device *pdev)
......
This diff is collapsed.
...@@ -1268,31 +1268,6 @@ int ata_sas_queuecmd(struct scsi_cmnd *cmd, struct ata_port *ap) ...@@ -1268,31 +1268,6 @@ int ata_sas_queuecmd(struct scsi_cmnd *cmd, struct ata_port *ap)
} }
EXPORT_SYMBOL_GPL(ata_sas_queuecmd); EXPORT_SYMBOL_GPL(ata_sas_queuecmd);
int ata_sas_allocate_tag(struct ata_port *ap)
{
unsigned int max_queue = ap->host->n_tags;
unsigned int i, tag;
for (i = 0, tag = ap->sas_last_tag + 1; i < max_queue; i++, tag++) {
tag = tag < max_queue ? tag : 0;
/* the last tag is reserved for internal command. */
if (ata_tag_internal(tag))
continue;
if (!test_and_set_bit(tag, &ap->sas_tag_allocated)) {
ap->sas_last_tag = tag;
return tag;
}
}
return -1;
}
void ata_sas_free_tag(unsigned int tag, struct ata_port *ap)
{
clear_bit(tag, &ap->sas_tag_allocated);
}
/** /**
* sata_async_notification - SATA async notification handler * sata_async_notification - SATA async notification handler
* @ap: ATA port where async notification is received * @ap: ATA port where async notification is received
......
...@@ -638,24 +638,48 @@ EXPORT_SYMBOL_GPL(ata_scsi_ioctl); ...@@ -638,24 +638,48 @@ EXPORT_SYMBOL_GPL(ata_scsi_ioctl);
static struct ata_queued_cmd *ata_scsi_qc_new(struct ata_device *dev, static struct ata_queued_cmd *ata_scsi_qc_new(struct ata_device *dev,
struct scsi_cmnd *cmd) struct scsi_cmnd *cmd)
{ {
struct ata_port *ap = dev->link->ap;
struct ata_queued_cmd *qc; struct ata_queued_cmd *qc;
int tag;
qc = ata_qc_new_init(dev, scsi_cmd_to_rq(cmd)->tag); if (unlikely(ap->pflags & ATA_PFLAG_FROZEN))
if (qc) { goto fail;
qc->scsicmd = cmd;
qc->scsidone = scsi_done;
qc->sg = scsi_sglist(cmd);
qc->n_elem = scsi_sg_count(cmd);
if (scsi_cmd_to_rq(cmd)->rq_flags & RQF_QUIET) if (ap->flags & ATA_FLAG_SAS_HOST) {
qc->flags |= ATA_QCFLAG_QUIET; /*
* SAS hosts may queue > ATA_MAX_QUEUE commands so use
* unique per-device budget token as a tag.
*/
if (WARN_ON_ONCE(cmd->budget_token >= ATA_MAX_QUEUE))
goto fail;
tag = cmd->budget_token;
} else { } else {
cmd->result = (DID_OK << 16) | SAM_STAT_TASK_SET_FULL; tag = scsi_cmd_to_rq(cmd)->tag;
scsi_done(cmd);
} }
qc = __ata_qc_from_tag(ap, tag);
qc->tag = qc->hw_tag = tag;
qc->ap = ap;
qc->dev = dev;
ata_qc_reinit(qc);
qc->scsicmd = cmd;
qc->scsidone = scsi_done;
qc->sg = scsi_sglist(cmd);
qc->n_elem = scsi_sg_count(cmd);
if (scsi_cmd_to_rq(cmd)->rq_flags & RQF_QUIET)
qc->flags |= ATA_QCFLAG_QUIET;
return qc; return qc;
fail:
set_host_byte(cmd, DID_OK);
set_status_byte(cmd, SAM_STAT_TASK_SET_FULL);
scsi_done(cmd);
return NULL;
} }
static void ata_qc_set_pc_nbytes(struct ata_queued_cmd *qc) static void ata_qc_set_pc_nbytes(struct ata_queued_cmd *qc)
......
...@@ -44,7 +44,6 @@ static inline void ata_force_cbl(struct ata_port *ap) { } ...@@ -44,7 +44,6 @@ static inline void ata_force_cbl(struct ata_port *ap) { }
#endif #endif
extern u64 ata_tf_to_lba(const struct ata_taskfile *tf); extern u64 ata_tf_to_lba(const struct ata_taskfile *tf);
extern u64 ata_tf_to_lba48(const struct ata_taskfile *tf); extern u64 ata_tf_to_lba48(const struct ata_taskfile *tf);
extern struct ata_queued_cmd *ata_qc_new_init(struct ata_device *dev, int tag);
extern int ata_build_rw_tf(struct ata_taskfile *tf, struct ata_device *dev, extern int ata_build_rw_tf(struct ata_taskfile *tf, struct ata_device *dev,
u64 block, u32 n_block, unsigned int tf_flags, u64 block, u32 n_block, unsigned int tf_flags,
unsigned int tag, int class); unsigned int tag, int class);
...@@ -91,18 +90,6 @@ extern unsigned int ata_read_log_page(struct ata_device *dev, u8 log, ...@@ -91,18 +90,6 @@ extern unsigned int ata_read_log_page(struct ata_device *dev, u8 log,
#define to_ata_port(d) container_of(d, struct ata_port, tdev) #define to_ata_port(d) container_of(d, struct ata_port, tdev)
/* libata-sata.c */
#ifdef CONFIG_SATA_HOST
int ata_sas_allocate_tag(struct ata_port *ap);
void ata_sas_free_tag(unsigned int tag, struct ata_port *ap);
#else
static inline int ata_sas_allocate_tag(struct ata_port *ap)
{
return -EOPNOTSUPP;
}
static inline void ata_sas_free_tag(unsigned int tag, struct ata_port *ap) { }
#endif
/* libata-acpi.c */ /* libata-acpi.c */
#ifdef CONFIG_ATA_ACPI #ifdef CONFIG_ATA_ACPI
extern unsigned int ata_acpi_gtf_filter; extern unsigned int ata_acpi_gtf_filter;
......
...@@ -536,8 +536,8 @@ static int pata_ftide010_probe(struct platform_device *pdev) ...@@ -536,8 +536,8 @@ static int pata_ftide010_probe(struct platform_device *pdev)
return 0; return 0;
err_dis_clk: err_dis_clk:
if (!IS_ERR(ftide->pclk)) clk_disable_unprepare(ftide->pclk);
clk_disable_unprepare(ftide->pclk);
return ret; return ret;
} }
...@@ -547,8 +547,7 @@ static int pata_ftide010_remove(struct platform_device *pdev) ...@@ -547,8 +547,7 @@ static int pata_ftide010_remove(struct platform_device *pdev)
struct ftide010 *ftide = host->private_data; struct ftide010 *ftide = host->private_data;
ata_host_detach(ftide->host); ata_host_detach(ftide->host);
if (!IS_ERR(ftide->pclk)) clk_disable_unprepare(ftide->pclk);
clk_disable_unprepare(ftide->pclk);
return 0; return 0;
} }
......
...@@ -19,11 +19,12 @@ ...@@ -19,11 +19,12 @@
#include <linux/gfp.h> #include <linux/gfp.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/libata.h> #include <linux/libata.h>
#include <linux/of_address.h>
#include <linux/of_irq.h>
#include <linux/of_platform.h> #include <linux/of_platform.h>
#include <linux/types.h> #include <linux/types.h>
#include <asm/cacheflush.h> #include <asm/cacheflush.h>
#include <asm/prom.h>
#include <asm/mpc52xx.h> #include <asm/mpc52xx.h>
#include <linux/fsl/bestcomm/bestcomm.h> #include <linux/fsl/bestcomm/bestcomm.h>
......
...@@ -47,11 +47,9 @@ ...@@ -47,11 +47,9 @@
* criticial. * criticial.
*/ */
static unsigned long sil680_selreg(struct ata_port *ap, int r) static int sil680_selreg(struct ata_port *ap, int r)
{ {
unsigned long base = 0xA0 + r; return 0xA0 + (ap->port_no << 4) + r;
base += (ap->port_no << 4);
return base;
} }
/** /**
...@@ -65,12 +63,9 @@ static unsigned long sil680_selreg(struct ata_port *ap, int r) ...@@ -65,12 +63,9 @@ static unsigned long sil680_selreg(struct ata_port *ap, int r)
* the unit shift. * the unit shift.
*/ */
static unsigned long sil680_seldev(struct ata_port *ap, struct ata_device *adev, int r) static int sil680_seldev(struct ata_port *ap, struct ata_device *adev, int r)
{ {
unsigned long base = 0xA0 + r; return 0xA0 + (ap->port_no << 4) + r + (adev->devno << 1);
base += (ap->port_no << 4);
base |= adev->devno ? 2 : 0;
return base;
} }
...@@ -85,8 +80,9 @@ static unsigned long sil680_seldev(struct ata_port *ap, struct ata_device *adev, ...@@ -85,8 +80,9 @@ static unsigned long sil680_seldev(struct ata_port *ap, struct ata_device *adev,
static int sil680_cable_detect(struct ata_port *ap) static int sil680_cable_detect(struct ata_port *ap)
{ {
struct pci_dev *pdev = to_pci_dev(ap->host->dev); struct pci_dev *pdev = to_pci_dev(ap->host->dev);
unsigned long addr = sil680_selreg(ap, 0); int addr = sil680_selreg(ap, 0);
u8 ata66; u8 ata66;
pci_read_config_byte(pdev, addr, &ata66); pci_read_config_byte(pdev, addr, &ata66);
if (ata66 & 1) if (ata66 & 1)
return ATA_CBL_PATA80; return ATA_CBL_PATA80;
...@@ -113,9 +109,9 @@ static void sil680_set_piomode(struct ata_port *ap, struct ata_device *adev) ...@@ -113,9 +109,9 @@ static void sil680_set_piomode(struct ata_port *ap, struct ata_device *adev)
0x328A, 0x2283, 0x1281, 0x10C3, 0x10C1 0x328A, 0x2283, 0x1281, 0x10C3, 0x10C1
}; };
unsigned long tfaddr = sil680_selreg(ap, 0x02); int tfaddr = sil680_selreg(ap, 0x02);
unsigned long addr = sil680_seldev(ap, adev, 0x04); int addr = sil680_seldev(ap, adev, 0x04);
unsigned long addr_mask = 0x80 + 4 * ap->port_no; int addr_mask = 0x80 + 4 * ap->port_no;
struct pci_dev *pdev = to_pci_dev(ap->host->dev); struct pci_dev *pdev = to_pci_dev(ap->host->dev);
int pio = adev->pio_mode - XFER_PIO_0; int pio = adev->pio_mode - XFER_PIO_0;
int lowest_pio = pio; int lowest_pio = pio;
...@@ -165,9 +161,9 @@ static void sil680_set_dmamode(struct ata_port *ap, struct ata_device *adev) ...@@ -165,9 +161,9 @@ static void sil680_set_dmamode(struct ata_port *ap, struct ata_device *adev)
static const u16 dma_table[3] = { 0x2208, 0x10C2, 0x10C1 }; static const u16 dma_table[3] = { 0x2208, 0x10C2, 0x10C1 };
struct pci_dev *pdev = to_pci_dev(ap->host->dev); struct pci_dev *pdev = to_pci_dev(ap->host->dev);
unsigned long ma = sil680_seldev(ap, adev, 0x08); int ma = sil680_seldev(ap, adev, 0x08);
unsigned long ua = sil680_seldev(ap, adev, 0x0C); int ua = sil680_seldev(ap, adev, 0x0C);
unsigned long addr_mask = 0x80 + 4 * ap->port_no; int addr_mask = 0x80 + 4 * ap->port_no;
int port_shift = adev->devno * 4; int port_shift = adev->devno * 4;
u8 scsc, mode; u8 scsc, mode;
u16 multi, ultra; u16 multi, ultra;
...@@ -219,7 +215,7 @@ static void sil680_sff_exec_command(struct ata_port *ap, ...@@ -219,7 +215,7 @@ static void sil680_sff_exec_command(struct ata_port *ap,
static bool sil680_sff_irq_check(struct ata_port *ap) static bool sil680_sff_irq_check(struct ata_port *ap)
{ {
struct pci_dev *pdev = to_pci_dev(ap->host->dev); struct pci_dev *pdev = to_pci_dev(ap->host->dev);
unsigned long addr = sil680_selreg(ap, 1); int addr = sil680_selreg(ap, 1);
u8 val; u8 val;
pci_read_config_byte(pdev, addr, &val); pci_read_config_byte(pdev, addr, &val);
......
...@@ -248,9 +248,9 @@ static void via_do_set_mode(struct ata_port *ap, struct ata_device *adev, ...@@ -248,9 +248,9 @@ static void via_do_set_mode(struct ata_port *ap, struct ata_device *adev,
struct pci_dev *pdev = to_pci_dev(ap->host->dev); struct pci_dev *pdev = to_pci_dev(ap->host->dev);
struct ata_device *peer = ata_dev_pair(adev); struct ata_device *peer = ata_dev_pair(adev);
struct ata_timing t, p; struct ata_timing t, p;
static int via_clock = 33333; /* Bus clock in kHZ */ const int via_clock = 33333; /* Bus clock in kHz */
unsigned long T = 1000000000 / via_clock; const int T = 1000000000 / via_clock;
unsigned long UT = T; int UT = T;
int ut; int ut;
int offset = 3 - (2*ap->port_no) - adev->devno; int offset = 3 - (2*ap->port_no) - adev->devno;
......
...@@ -318,7 +318,6 @@ static int gemini_sata_probe(struct platform_device *pdev) ...@@ -318,7 +318,6 @@ static int gemini_sata_probe(struct platform_device *pdev)
struct device_node *np = dev->of_node; struct device_node *np = dev->of_node;
struct sata_gemini *sg; struct sata_gemini *sg;
struct regmap *map; struct regmap *map;
struct resource *res;
enum gemini_muxmode muxmode; enum gemini_muxmode muxmode;
u32 gmode; u32 gmode;
u32 gmask; u32 gmask;
...@@ -329,11 +328,7 @@ static int gemini_sata_probe(struct platform_device *pdev) ...@@ -329,11 +328,7 @@ static int gemini_sata_probe(struct platform_device *pdev)
return -ENOMEM; return -ENOMEM;
sg->dev = dev; sg->dev = dev;
res = platform_get_resource(pdev, IORESOURCE_MEM, 0); sg->base = devm_platform_ioremap_resource(pdev, 0);
if (!res)
return -ENODEV;
sg->base = devm_ioremap_resource(dev, res);
if (IS_ERR(sg->base)) if (IS_ERR(sg->base))
return PTR_ERR(sg->base); return PTR_ERR(sg->base);
......
...@@ -820,7 +820,6 @@ struct ata_port { ...@@ -820,7 +820,6 @@ struct ata_port {
unsigned int cbl; /* cable type; ATA_CBL_xxx */ unsigned int cbl; /* cable type; ATA_CBL_xxx */
struct ata_queued_cmd qcmd[ATA_MAX_QUEUE + 1]; struct ata_queued_cmd qcmd[ATA_MAX_QUEUE + 1];
unsigned long sas_tag_allocated; /* for sas tag allocation only */
u64 qc_active; u64 qc_active;
int nr_active_links; /* #links with active qcs */ int nr_active_links; /* #links with active qcs */
unsigned int sas_last_tag; /* track next tag hw expects */ unsigned int sas_last_tag; /* track next tag hw expects */
...@@ -1111,7 +1110,7 @@ extern void ata_unpack_xfermask(unsigned long xfer_mask, ...@@ -1111,7 +1110,7 @@ extern void ata_unpack_xfermask(unsigned long xfer_mask,
unsigned long *udma_mask); unsigned long *udma_mask);
extern u8 ata_xfer_mask2mode(unsigned long xfer_mask); extern u8 ata_xfer_mask2mode(unsigned long xfer_mask);
extern unsigned long ata_xfer_mode2mask(u8 xfer_mode); extern unsigned long ata_xfer_mode2mask(u8 xfer_mode);
extern int ata_xfer_mode2shift(unsigned long xfer_mode); extern int ata_xfer_mode2shift(u8 xfer_mode);
extern const char *ata_mode_string(unsigned long xfer_mask); extern const char *ata_mode_string(unsigned long xfer_mask);
extern unsigned long ata_id_xfermask(const u16 *id); extern unsigned long ata_id_xfermask(const u16 *id);
extern int ata_std_qc_defer(struct ata_queued_cmd *qc); extern int ata_std_qc_defer(struct ata_queued_cmd *qc);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment