Merge branch 'for-3.19-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/libata
Pull libata fixes from Tejun Heo: - Bartlomiej will be co-maintaining PATA portion of libata. git workflow will stay the same. - sata_sil24 wasn't happy with tag ordered submission. An option to restore the old tag allocation behavior is implemented for sil24. - a very old race condition in PIO host state machine which can trigger BUG fixed. - other driver-specific changes * 'for-3.19-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/libata: libata: prevent HSM state change race between ISR and PIO libata: allow sata_sil24 to opt-out of tag ordered submission ata: pata_at91: depend on !ARCH_MULTIPLATFORM ahci: Remove Device ID for Intel Sunrise Point PCH ahci: Use dev_info() to inform about the lack of Device Sleep support libata: Whitelist SSDs that are known to properly return zeroes after TRIM sata_dwc_460ex: fix resource leak on error path ata: add MAINTAINERS entry for libata PATA drivers libata: clean up MAINTAINERS entries libata: export ata_get_cmd_descript() ahci_xgene: Fix the DMA state machine lockup for the ATA_CMD_PACKET PIO mode command. ahci_xgene: Fix the endianess issue in APM X-Gene SoC AHCI SATA controller driver.
This commit is contained in:
commit
b97f880c83
75
MAINTAINERS
75
MAINTAINERS
|
@ -754,13 +754,6 @@ L: linux-media@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/media/i2c/aptina-pll.*
|
F: drivers/media/i2c/aptina-pll.*
|
||||||
|
|
||||||
ARASAN COMPACT FLASH PATA CONTROLLER
|
|
||||||
M: Viresh Kumar <viresh.linux@gmail.com>
|
|
||||||
L: linux-ide@vger.kernel.org
|
|
||||||
S: Maintained
|
|
||||||
F: include/linux/pata_arasan_cf_data.h
|
|
||||||
F: drivers/ata/pata_arasan_cf.c
|
|
||||||
|
|
||||||
ARC FRAMEBUFFER DRIVER
|
ARC FRAMEBUFFER DRIVER
|
||||||
M: Jaya Kumar <jayalk@intworks.biz>
|
M: Jaya Kumar <jayalk@intworks.biz>
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
@ -5704,6 +5697,49 @@ F: drivers/lguest/
|
||||||
F: include/linux/lguest*.h
|
F: include/linux/lguest*.h
|
||||||
F: tools/lguest/
|
F: tools/lguest/
|
||||||
|
|
||||||
|
LIBATA SUBSYSTEM (Serial and Parallel ATA drivers)
|
||||||
|
M: Tejun Heo <tj@kernel.org>
|
||||||
|
L: linux-ide@vger.kernel.org
|
||||||
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/tj/libata.git
|
||||||
|
S: Maintained
|
||||||
|
F: drivers/ata/
|
||||||
|
F: include/linux/ata.h
|
||||||
|
F: include/linux/libata.h
|
||||||
|
|
||||||
|
LIBATA PATA ARASAN COMPACT FLASH CONTROLLER
|
||||||
|
M: Viresh Kumar <viresh.linux@gmail.com>
|
||||||
|
L: linux-ide@vger.kernel.org
|
||||||
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/tj/libata.git
|
||||||
|
S: Maintained
|
||||||
|
F: include/linux/pata_arasan_cf_data.h
|
||||||
|
F: drivers/ata/pata_arasan_cf.c
|
||||||
|
|
||||||
|
LIBATA PATA DRIVERS
|
||||||
|
M: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
|
||||||
|
M: Tejun Heo <tj@kernel.org>
|
||||||
|
L: linux-ide@vger.kernel.org
|
||||||
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/tj/libata.git
|
||||||
|
S: Maintained
|
||||||
|
F: drivers/ata/pata_*.c
|
||||||
|
F: drivers/ata/ata_generic.c
|
||||||
|
|
||||||
|
LIBATA SATA AHCI PLATFORM devices support
|
||||||
|
M: Hans de Goede <hdegoede@redhat.com>
|
||||||
|
M: Tejun Heo <tj@kernel.org>
|
||||||
|
L: linux-ide@vger.kernel.org
|
||||||
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/tj/libata.git
|
||||||
|
S: Maintained
|
||||||
|
F: drivers/ata/ahci_platform.c
|
||||||
|
F: drivers/ata/libahci_platform.c
|
||||||
|
F: include/linux/ahci_platform.h
|
||||||
|
|
||||||
|
LIBATA SATA PROMISE TX2/TX4 CONTROLLER DRIVER
|
||||||
|
M: Mikael Pettersson <mikpelinux@gmail.com>
|
||||||
|
L: linux-ide@vger.kernel.org
|
||||||
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/tj/libata.git
|
||||||
|
S: Maintained
|
||||||
|
F: drivers/ata/sata_promise.*
|
||||||
|
|
||||||
LIBLOCKDEP
|
LIBLOCKDEP
|
||||||
M: Sasha Levin <sasha.levin@oracle.com>
|
M: Sasha Levin <sasha.levin@oracle.com>
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
@ -7578,12 +7614,6 @@ W: http://wireless.kernel.org/en/users/Drivers/p54
|
||||||
S: Obsolete
|
S: Obsolete
|
||||||
F: drivers/net/wireless/prism54/
|
F: drivers/net/wireless/prism54/
|
||||||
|
|
||||||
PROMISE SATA TX2/TX4 CONTROLLER LIBATA DRIVER
|
|
||||||
M: Mikael Pettersson <mikpelinux@gmail.com>
|
|
||||||
L: linux-ide@vger.kernel.org
|
|
||||||
S: Maintained
|
|
||||||
F: drivers/ata/sata_promise.*
|
|
||||||
|
|
||||||
PS3 NETWORK SUPPORT
|
PS3 NETWORK SUPPORT
|
||||||
M: Geoff Levand <geoff@infradead.org>
|
M: Geoff Levand <geoff@infradead.org>
|
||||||
L: netdev@vger.kernel.org
|
L: netdev@vger.kernel.org
|
||||||
|
@ -8557,25 +8587,6 @@ S: Maintained
|
||||||
F: drivers/misc/phantom.c
|
F: drivers/misc/phantom.c
|
||||||
F: include/uapi/linux/phantom.h
|
F: include/uapi/linux/phantom.h
|
||||||
|
|
||||||
SERIAL ATA (SATA) SUBSYSTEM
|
|
||||||
M: Tejun Heo <tj@kernel.org>
|
|
||||||
L: linux-ide@vger.kernel.org
|
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/tj/libata.git
|
|
||||||
S: Supported
|
|
||||||
F: drivers/ata/
|
|
||||||
F: include/linux/ata.h
|
|
||||||
F: include/linux/libata.h
|
|
||||||
|
|
||||||
SERIAL ATA AHCI PLATFORM devices support
|
|
||||||
M: Hans de Goede <hdegoede@redhat.com>
|
|
||||||
M: Tejun Heo <tj@kernel.org>
|
|
||||||
L: linux-ide@vger.kernel.org
|
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/tj/libata.git
|
|
||||||
S: Supported
|
|
||||||
F: drivers/ata/ahci_platform.c
|
|
||||||
F: drivers/ata/libahci_platform.c
|
|
||||||
F: include/linux/ahci_platform.h
|
|
||||||
|
|
||||||
SERVER ENGINES 10Gbps iSCSI - BladeEngine 2 DRIVER
|
SERVER ENGINES 10Gbps iSCSI - BladeEngine 2 DRIVER
|
||||||
M: Jayamohan Kallickal <jayamohan.kallickal@emulex.com>
|
M: Jayamohan Kallickal <jayamohan.kallickal@emulex.com>
|
||||||
L: linux-scsi@vger.kernel.org
|
L: linux-scsi@vger.kernel.org
|
||||||
|
|
|
@ -835,6 +835,7 @@ config PATA_AT32
|
||||||
config PATA_AT91
|
config PATA_AT91
|
||||||
tristate "PATA support for AT91SAM9260"
|
tristate "PATA support for AT91SAM9260"
|
||||||
depends on ARM && SOC_AT91SAM9
|
depends on ARM && SOC_AT91SAM9
|
||||||
|
depends on !ARCH_MULTIPLATFORM
|
||||||
help
|
help
|
||||||
This option enables support for IDE devices on the Atmel AT91SAM9260 SoC.
|
This option enables support for IDE devices on the Atmel AT91SAM9260 SoC.
|
||||||
|
|
||||||
|
|
|
@ -325,7 +325,6 @@ static const struct pci_device_id ahci_pci_tbl[] = {
|
||||||
{ PCI_VDEVICE(INTEL, 0x9d05), board_ahci }, /* Sunrise Point-LP RAID */
|
{ PCI_VDEVICE(INTEL, 0x9d05), board_ahci }, /* Sunrise Point-LP RAID */
|
||||||
{ PCI_VDEVICE(INTEL, 0x9d07), board_ahci }, /* Sunrise Point-LP RAID */
|
{ PCI_VDEVICE(INTEL, 0x9d07), board_ahci }, /* Sunrise Point-LP RAID */
|
||||||
{ PCI_VDEVICE(INTEL, 0xa103), board_ahci }, /* Sunrise Point-H AHCI */
|
{ PCI_VDEVICE(INTEL, 0xa103), board_ahci }, /* Sunrise Point-H AHCI */
|
||||||
{ PCI_VDEVICE(INTEL, 0xa103), board_ahci }, /* Sunrise Point-H RAID */
|
|
||||||
{ PCI_VDEVICE(INTEL, 0xa105), board_ahci }, /* Sunrise Point-H RAID */
|
{ PCI_VDEVICE(INTEL, 0xa105), board_ahci }, /* Sunrise Point-H RAID */
|
||||||
{ PCI_VDEVICE(INTEL, 0xa107), board_ahci }, /* Sunrise Point-H RAID */
|
{ PCI_VDEVICE(INTEL, 0xa107), board_ahci }, /* Sunrise Point-H RAID */
|
||||||
{ PCI_VDEVICE(INTEL, 0xa10f), board_ahci }, /* Sunrise Point-H RAID */
|
{ PCI_VDEVICE(INTEL, 0xa10f), board_ahci }, /* Sunrise Point-H RAID */
|
||||||
|
|
|
@ -125,10 +125,11 @@ static int xgene_ahci_restart_engine(struct ata_port *ap)
|
||||||
* xgene_ahci_qc_issue - Issue commands to the device
|
* xgene_ahci_qc_issue - Issue commands to the device
|
||||||
* @qc: Command to issue
|
* @qc: Command to issue
|
||||||
*
|
*
|
||||||
* Due to Hardware errata for IDENTIFY DEVICE command, the controller cannot
|
* Due to Hardware errata for IDENTIFY DEVICE command and PACKET
|
||||||
* clear the BSY bit after receiving the PIO setup FIS. This results in the dma
|
* command of ATAPI protocol set, the controller cannot clear the BSY bit
|
||||||
* state machine goes into the CMFatalErrorUpdate state and locks up. By
|
* after receiving the PIO setup FIS. This results in the DMA state machine
|
||||||
* restarting the dma engine, it removes the controller out of lock up state.
|
* going into the CMFatalErrorUpdate state and locks up. By restarting the
|
||||||
|
* DMA engine, it removes the controller out of lock up state.
|
||||||
*/
|
*/
|
||||||
static unsigned int xgene_ahci_qc_issue(struct ata_queued_cmd *qc)
|
static unsigned int xgene_ahci_qc_issue(struct ata_queued_cmd *qc)
|
||||||
{
|
{
|
||||||
|
@ -137,7 +138,8 @@ static unsigned int xgene_ahci_qc_issue(struct ata_queued_cmd *qc)
|
||||||
struct xgene_ahci_context *ctx = hpriv->plat_data;
|
struct xgene_ahci_context *ctx = hpriv->plat_data;
|
||||||
int rc = 0;
|
int rc = 0;
|
||||||
|
|
||||||
if (unlikely(ctx->last_cmd[ap->port_no] == ATA_CMD_ID_ATA))
|
if (unlikely((ctx->last_cmd[ap->port_no] == ATA_CMD_ID_ATA) ||
|
||||||
|
(ctx->last_cmd[ap->port_no] == ATA_CMD_PACKET)))
|
||||||
xgene_ahci_restart_engine(ap);
|
xgene_ahci_restart_engine(ap);
|
||||||
|
|
||||||
rc = ahci_qc_issue(qc);
|
rc = ahci_qc_issue(qc);
|
||||||
|
@ -188,7 +190,7 @@ static unsigned int xgene_ahci_read_id(struct ata_device *dev,
|
||||||
*
|
*
|
||||||
* Clear reserved bit 8 (DEVSLP bit) as we don't support DEVSLP
|
* Clear reserved bit 8 (DEVSLP bit) as we don't support DEVSLP
|
||||||
*/
|
*/
|
||||||
id[ATA_ID_FEATURE_SUPP] &= ~(1 << 8);
|
id[ATA_ID_FEATURE_SUPP] &= cpu_to_le16(~(1 << 8));
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2003,7 +2003,7 @@ static void ahci_set_aggressive_devslp(struct ata_port *ap, bool sleep)
|
||||||
|
|
||||||
devslp = readl(port_mmio + PORT_DEVSLP);
|
devslp = readl(port_mmio + PORT_DEVSLP);
|
||||||
if (!(devslp & PORT_DEVSLP_DSP)) {
|
if (!(devslp & PORT_DEVSLP_DSP)) {
|
||||||
dev_err(ap->host->dev, "port does not support device sleep\n");
|
dev_info(ap->host->dev, "port does not support device sleep\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4233,10 +4233,33 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = {
|
||||||
{ "PIONEER DVD-RW DVR-216D", NULL, ATA_HORKAGE_NOSETXFER },
|
{ "PIONEER DVD-RW DVR-216D", NULL, ATA_HORKAGE_NOSETXFER },
|
||||||
|
|
||||||
/* devices that don't properly handle queued TRIM commands */
|
/* devices that don't properly handle queued TRIM commands */
|
||||||
{ "Micron_M500*", NULL, ATA_HORKAGE_NO_NCQ_TRIM, },
|
{ "Micron_M[56]*", NULL, ATA_HORKAGE_NO_NCQ_TRIM |
|
||||||
{ "Crucial_CT???M500SSD*", NULL, ATA_HORKAGE_NO_NCQ_TRIM, },
|
ATA_HORKAGE_ZERO_AFTER_TRIM, },
|
||||||
{ "Micron_M550*", NULL, ATA_HORKAGE_NO_NCQ_TRIM, },
|
{ "Crucial_CT*SSD*", NULL, ATA_HORKAGE_NO_NCQ_TRIM, },
|
||||||
{ "Crucial_CT*M550SSD*", NULL, ATA_HORKAGE_NO_NCQ_TRIM, },
|
|
||||||
|
/*
|
||||||
|
* As defined, the DRAT (Deterministic Read After Trim) and RZAT
|
||||||
|
* (Return Zero After Trim) flags in the ATA Command Set are
|
||||||
|
* unreliable in the sense that they only define what happens if
|
||||||
|
* the device successfully executed the DSM TRIM command. TRIM
|
||||||
|
* is only advisory, however, and the device is free to silently
|
||||||
|
* ignore all or parts of the request.
|
||||||
|
*
|
||||||
|
* Whitelist drives that are known to reliably return zeroes
|
||||||
|
* after TRIM.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The intel 510 drive has buggy DRAT/RZAT. Explicitly exclude
|
||||||
|
* that model before whitelisting all other intel SSDs.
|
||||||
|
*/
|
||||||
|
{ "INTEL*SSDSC2MH*", NULL, 0, },
|
||||||
|
|
||||||
|
{ "INTEL*SSD*", NULL, ATA_HORKAGE_ZERO_AFTER_TRIM, },
|
||||||
|
{ "SSD*INTEL*", NULL, ATA_HORKAGE_ZERO_AFTER_TRIM, },
|
||||||
|
{ "Samsung*SSD*", NULL, ATA_HORKAGE_ZERO_AFTER_TRIM, },
|
||||||
|
{ "SAMSUNG*SSD*", NULL, ATA_HORKAGE_ZERO_AFTER_TRIM, },
|
||||||
|
{ "ST[1248][0248]0[FH]*", NULL, ATA_HORKAGE_ZERO_AFTER_TRIM, },
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Some WD SATA-I drives spin up and down erratically when the link
|
* Some WD SATA-I drives spin up and down erratically when the link
|
||||||
|
@ -4748,6 +4771,9 @@ static struct ata_queued_cmd *ata_qc_new(struct ata_port *ap)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
for (i = 0, tag = ap->last_tag + 1; i < max_queue; i++, tag++) {
|
for (i = 0, tag = ap->last_tag + 1; i < max_queue; i++, tag++) {
|
||||||
|
if (ap->flags & ATA_FLAG_LOWTAG)
|
||||||
|
tag = i;
|
||||||
|
else
|
||||||
tag = tag < max_queue ? tag : 0;
|
tag = tag < max_queue ? tag : 0;
|
||||||
|
|
||||||
/* the last tag is reserved for internal command. */
|
/* the last tag is reserved for internal command. */
|
||||||
|
|
|
@ -2389,6 +2389,7 @@ const char *ata_get_cmd_descript(u8 command)
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(ata_get_cmd_descript);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ata_eh_link_report - report error handling to user
|
* ata_eh_link_report - report error handling to user
|
||||||
|
|
|
@ -2532,13 +2532,15 @@ static unsigned int ata_scsiop_read_cap(struct ata_scsi_args *args, u8 *rbuf)
|
||||||
rbuf[15] = lowest_aligned;
|
rbuf[15] = lowest_aligned;
|
||||||
|
|
||||||
if (ata_id_has_trim(args->id)) {
|
if (ata_id_has_trim(args->id)) {
|
||||||
rbuf[14] |= 0x80; /* TPE */
|
rbuf[14] |= 0x80; /* LBPME */
|
||||||
|
|
||||||
if (ata_id_has_zero_after_trim(args->id))
|
if (ata_id_has_zero_after_trim(args->id) &&
|
||||||
rbuf[14] |= 0x40; /* TPRZ */
|
dev->horkage & ATA_HORKAGE_ZERO_AFTER_TRIM) {
|
||||||
|
ata_dev_info(dev, "Enabling discard_zeroes_data\n");
|
||||||
|
rbuf[14] |= 0x40; /* LBPRZ */
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1333,7 +1333,19 @@ void ata_sff_flush_pio_task(struct ata_port *ap)
|
||||||
DPRINTK("ENTER\n");
|
DPRINTK("ENTER\n");
|
||||||
|
|
||||||
cancel_delayed_work_sync(&ap->sff_pio_task);
|
cancel_delayed_work_sync(&ap->sff_pio_task);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We wanna reset the HSM state to IDLE. If we do so without
|
||||||
|
* grabbing the port lock, critical sections protected by it which
|
||||||
|
* expect the HSM state to stay stable may get surprised. For
|
||||||
|
* example, we may set IDLE in between the time
|
||||||
|
* __ata_sff_port_intr() checks for HSM_ST_IDLE and before it calls
|
||||||
|
* ata_sff_hsm_move() causing ata_sff_hsm_move() to BUG().
|
||||||
|
*/
|
||||||
|
spin_lock_irq(ap->lock);
|
||||||
ap->hsm_task_state = HSM_ST_IDLE;
|
ap->hsm_task_state = HSM_ST_IDLE;
|
||||||
|
spin_unlock_irq(ap->lock);
|
||||||
|
|
||||||
ap->sff_pio_task_link = NULL;
|
ap->sff_pio_task_link = NULL;
|
||||||
|
|
||||||
if (ata_msg_ctl(ap))
|
if (ata_msg_ctl(ap))
|
||||||
|
|
|
@ -797,7 +797,7 @@ static int dma_dwc_init(struct sata_dwc_device *hsdev, int irq)
|
||||||
if (err) {
|
if (err) {
|
||||||
dev_err(host_pvt.dwc_dev, "%s: dma_request_interrupts returns"
|
dev_err(host_pvt.dwc_dev, "%s: dma_request_interrupts returns"
|
||||||
" %d\n", __func__, err);
|
" %d\n", __func__, err);
|
||||||
goto error_out;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Enabe DMA */
|
/* Enabe DMA */
|
||||||
|
@ -808,11 +808,6 @@ static int dma_dwc_init(struct sata_dwc_device *hsdev, int irq)
|
||||||
sata_dma_regs);
|
sata_dma_regs);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
error_out:
|
|
||||||
dma_dwc_exit(hsdev);
|
|
||||||
|
|
||||||
return err;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int sata_dwc_scr_read(struct ata_link *link, unsigned int scr, u32 *val)
|
static int sata_dwc_scr_read(struct ata_link *link, unsigned int scr, u32 *val)
|
||||||
|
@ -1662,7 +1657,7 @@ static int sata_dwc_probe(struct platform_device *ofdev)
|
||||||
char *ver = (char *)&versionr;
|
char *ver = (char *)&versionr;
|
||||||
u8 *base = NULL;
|
u8 *base = NULL;
|
||||||
int err = 0;
|
int err = 0;
|
||||||
int irq, rc;
|
int irq;
|
||||||
struct ata_host *host;
|
struct ata_host *host;
|
||||||
struct ata_port_info pi = sata_dwc_port_info[0];
|
struct ata_port_info pi = sata_dwc_port_info[0];
|
||||||
const struct ata_port_info *ppi[] = { &pi, NULL };
|
const struct ata_port_info *ppi[] = { &pi, NULL };
|
||||||
|
@ -1725,7 +1720,7 @@ static int sata_dwc_probe(struct platform_device *ofdev)
|
||||||
if (irq == NO_IRQ) {
|
if (irq == NO_IRQ) {
|
||||||
dev_err(&ofdev->dev, "no SATA DMA irq\n");
|
dev_err(&ofdev->dev, "no SATA DMA irq\n");
|
||||||
err = -ENODEV;
|
err = -ENODEV;
|
||||||
goto error_out;
|
goto error_iomap;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Get physical SATA DMA register base address */
|
/* Get physical SATA DMA register base address */
|
||||||
|
@ -1734,14 +1729,16 @@ static int sata_dwc_probe(struct platform_device *ofdev)
|
||||||
dev_err(&ofdev->dev, "ioremap failed for AHBDMA register"
|
dev_err(&ofdev->dev, "ioremap failed for AHBDMA register"
|
||||||
" address\n");
|
" address\n");
|
||||||
err = -ENODEV;
|
err = -ENODEV;
|
||||||
goto error_out;
|
goto error_iomap;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Save dev for later use in dev_xxx() routines */
|
/* Save dev for later use in dev_xxx() routines */
|
||||||
host_pvt.dwc_dev = &ofdev->dev;
|
host_pvt.dwc_dev = &ofdev->dev;
|
||||||
|
|
||||||
/* Initialize AHB DMAC */
|
/* Initialize AHB DMAC */
|
||||||
dma_dwc_init(hsdev, irq);
|
err = dma_dwc_init(hsdev, irq);
|
||||||
|
if (err)
|
||||||
|
goto error_dma_iomap;
|
||||||
|
|
||||||
/* Enable SATA Interrupts */
|
/* Enable SATA Interrupts */
|
||||||
sata_dwc_enable_interrupts(hsdev);
|
sata_dwc_enable_interrupts(hsdev);
|
||||||
|
@ -1759,9 +1756,8 @@ static int sata_dwc_probe(struct platform_device *ofdev)
|
||||||
* device discovery process, invoking our port_start() handler &
|
* device discovery process, invoking our port_start() handler &
|
||||||
* error_handler() to execute a dummy Softreset EH session
|
* error_handler() to execute a dummy Softreset EH session
|
||||||
*/
|
*/
|
||||||
rc = ata_host_activate(host, irq, sata_dwc_isr, 0, &sata_dwc_sht);
|
err = ata_host_activate(host, irq, sata_dwc_isr, 0, &sata_dwc_sht);
|
||||||
|
if (err)
|
||||||
if (rc != 0)
|
|
||||||
dev_err(&ofdev->dev, "failed to activate host");
|
dev_err(&ofdev->dev, "failed to activate host");
|
||||||
|
|
||||||
dev_set_drvdata(&ofdev->dev, host);
|
dev_set_drvdata(&ofdev->dev, host);
|
||||||
|
@ -1770,7 +1766,8 @@ static int sata_dwc_probe(struct platform_device *ofdev)
|
||||||
error_out:
|
error_out:
|
||||||
/* Free SATA DMA resources */
|
/* Free SATA DMA resources */
|
||||||
dma_dwc_exit(hsdev);
|
dma_dwc_exit(hsdev);
|
||||||
|
error_dma_iomap:
|
||||||
|
iounmap((void __iomem *)host_pvt.sata_dma_regs);
|
||||||
error_iomap:
|
error_iomap:
|
||||||
iounmap(base);
|
iounmap(base);
|
||||||
error_kmalloc:
|
error_kmalloc:
|
||||||
|
@ -1791,6 +1788,7 @@ static int sata_dwc_remove(struct platform_device *ofdev)
|
||||||
/* Free SATA DMA resources */
|
/* Free SATA DMA resources */
|
||||||
dma_dwc_exit(hsdev);
|
dma_dwc_exit(hsdev);
|
||||||
|
|
||||||
|
iounmap((void __iomem *)host_pvt.sata_dma_regs);
|
||||||
iounmap(hsdev->reg_base);
|
iounmap(hsdev->reg_base);
|
||||||
kfree(hsdev);
|
kfree(hsdev);
|
||||||
kfree(host);
|
kfree(host);
|
||||||
|
|
|
@ -246,7 +246,7 @@ enum {
|
||||||
/* host flags */
|
/* host flags */
|
||||||
SIL24_COMMON_FLAGS = ATA_FLAG_SATA | ATA_FLAG_PIO_DMA |
|
SIL24_COMMON_FLAGS = ATA_FLAG_SATA | ATA_FLAG_PIO_DMA |
|
||||||
ATA_FLAG_NCQ | ATA_FLAG_ACPI_SATA |
|
ATA_FLAG_NCQ | ATA_FLAG_ACPI_SATA |
|
||||||
ATA_FLAG_AN | ATA_FLAG_PMP,
|
ATA_FLAG_AN | ATA_FLAG_PMP | ATA_FLAG_LOWTAG,
|
||||||
SIL24_FLAG_PCIX_IRQ_WOC = (1 << 24), /* IRQ loss errata on PCI-X */
|
SIL24_FLAG_PCIX_IRQ_WOC = (1 << 24), /* IRQ loss errata on PCI-X */
|
||||||
|
|
||||||
IRQ_STAT_4PORTS = 0xf,
|
IRQ_STAT_4PORTS = 0xf,
|
||||||
|
|
|
@ -231,6 +231,7 @@ enum {
|
||||||
ATA_FLAG_SW_ACTIVITY = (1 << 22), /* driver supports sw activity
|
ATA_FLAG_SW_ACTIVITY = (1 << 22), /* driver supports sw activity
|
||||||
* led */
|
* led */
|
||||||
ATA_FLAG_NO_DIPM = (1 << 23), /* host not happy with DIPM */
|
ATA_FLAG_NO_DIPM = (1 << 23), /* host not happy with DIPM */
|
||||||
|
ATA_FLAG_LOWTAG = (1 << 24), /* host wants lowest available tag */
|
||||||
|
|
||||||
/* bits 24:31 of ap->flags are reserved for LLD specific flags */
|
/* bits 24:31 of ap->flags are reserved for LLD specific flags */
|
||||||
|
|
||||||
|
@ -422,6 +423,7 @@ enum {
|
||||||
ATA_HORKAGE_NO_NCQ_TRIM = (1 << 19), /* don't use queued TRIM */
|
ATA_HORKAGE_NO_NCQ_TRIM = (1 << 19), /* don't use queued TRIM */
|
||||||
ATA_HORKAGE_NOLPM = (1 << 20), /* don't use LPM */
|
ATA_HORKAGE_NOLPM = (1 << 20), /* don't use LPM */
|
||||||
ATA_HORKAGE_WD_BROKEN_LPM = (1 << 21), /* some WDs have broken LPM */
|
ATA_HORKAGE_WD_BROKEN_LPM = (1 << 21), /* some WDs have broken LPM */
|
||||||
|
ATA_HORKAGE_ZERO_AFTER_TRIM = (1 << 22),/* guarantees zero after trim */
|
||||||
|
|
||||||
/* DMA mask for user DMA control: User visible values; DO NOT
|
/* DMA mask for user DMA control: User visible values; DO NOT
|
||||||
renumber */
|
renumber */
|
||||||
|
|
Loading…
Reference in New Issue