Commit 3dcc4c7d authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'for-4.13-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/libata

Pull libata fixes from Tejun Heo:
 "Dan found a really old bug where libata hotplug code wasn't sanitizing
  index value from userland and may end up indexing with a negative
  number. It is scary but fortunately can only be triggered by root.

  Other than that, minor fixes"

* 'for-4.13-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/libata:
  libata: fix a couple of doc build warnings
  libata: array underflow in ata_find_dev()
  ata: sata_rcar: add gen[23] fallback compatibility strings
  libata: remove unused rc in ata_eh_handle_port_resume
  libata: Cleanup ata_read_log_page()
  ata: fix gemini Kconfig dependencies
parents 16f73eb0 2f60e1ab
* Renesas R-Car SATA * Renesas R-Car SATA
Required properties: Required properties:
- compatible : should contain one of the following: - compatible : should contain one or more of the following:
- "renesas,sata-r8a7779" for R-Car H1 - "renesas,sata-r8a7779" for R-Car H1
("renesas,rcar-sata" is deprecated)
- "renesas,sata-r8a7790-es1" for R-Car H2 ES1 - "renesas,sata-r8a7790-es1" for R-Car H2 ES1
- "renesas,sata-r8a7790" for R-Car H2 other than ES1 - "renesas,sata-r8a7790" for R-Car H2 other than ES1
- "renesas,sata-r8a7791" for R-Car M2-W - "renesas,sata-r8a7791" for R-Car M2-W
- "renesas,sata-r8a7793" for R-Car M2-N - "renesas,sata-r8a7793" for R-Car M2-N
- "renesas,sata-r8a7795" for R-Car H3 - "renesas,sata-r8a7795" for R-Car H3
- "renesas,rcar-gen2-sata" for a generic R-Car Gen2 compatible device
- "renesas,rcar-gen3-sata" for a generic R-Car Gen3 compatible device
- "renesas,rcar-sata" is deprecated
When compatible with the generic version nodes
must list the SoC-specific version corresponding
to the platform first followed by the generic
version.
- reg : address and length of the SATA registers; - reg : address and length of the SATA registers;
- interrupts : must consist of one interrupt specifier. - interrupts : must consist of one interrupt specifier.
- clocks : must contain a reference to the functional clock. - clocks : must contain a reference to the functional clock.
...@@ -16,7 +24,7 @@ Required properties: ...@@ -16,7 +24,7 @@ Required properties:
Example: Example:
sata0: sata@ee300000 { sata0: sata@ee300000 {
compatible = "renesas,sata-r8a7791"; compatible = "renesas,sata-r8a7791", "renesas,rcar-gen2-sata";
reg = <0 0xee300000 0 0x2000>; reg = <0 0xee300000 0 0x2000>;
interrupt-parent = <&gic>; interrupt-parent = <&gic>;
interrupts = <0 105 IRQ_TYPE_LEVEL_HIGH>; interrupts = <0 105 IRQ_TYPE_LEVEL_HIGH>;
......
...@@ -215,7 +215,7 @@ config SATA_FSL ...@@ -215,7 +215,7 @@ config SATA_FSL
config SATA_GEMINI config SATA_GEMINI
tristate "Gemini SATA bridge support" tristate "Gemini SATA bridge support"
depends on PATA_FTIDE010 depends on ARCH_GEMINI || COMPILE_TEST
default ARCH_GEMINI default ARCH_GEMINI
help help
This enabled support for the FTIDE010 to SATA bridge This enabled support for the FTIDE010 to SATA bridge
...@@ -613,7 +613,7 @@ config PATA_FTIDE010 ...@@ -613,7 +613,7 @@ config PATA_FTIDE010
tristate "Faraday Technology FTIDE010 PATA support" tristate "Faraday Technology FTIDE010 PATA support"
depends on OF depends on OF
depends on ARM depends on ARM
default ARCH_GEMINI depends on SATA_GEMINI
help help
This option enables support for the Faraday FTIDE010 This option enables support for the Faraday FTIDE010
PATA controller found in the Cortina Gemini SoCs. PATA controller found in the Cortina Gemini SoCs.
......
...@@ -2083,7 +2083,7 @@ unsigned int ata_read_log_page(struct ata_device *dev, u8 log, ...@@ -2083,7 +2083,7 @@ unsigned int ata_read_log_page(struct ata_device *dev, u8 log,
retry: retry:
ata_tf_init(dev, &tf); ata_tf_init(dev, &tf);
if (dev->dma_mode && ata_id_has_read_log_dma_ext(dev->id) && if (dev->dma_mode && ata_id_has_read_log_dma_ext(dev->id) &&
!(dev->horkage & ATA_HORKAGE_NO_NCQ_LOG)) { !(dev->horkage & ATA_HORKAGE_NO_DMA_LOG)) {
tf.command = ATA_CMD_READ_LOG_DMA_EXT; tf.command = ATA_CMD_READ_LOG_DMA_EXT;
tf.protocol = ATA_PROT_DMA; tf.protocol = ATA_PROT_DMA;
dma = true; dma = true;
...@@ -2102,8 +2102,8 @@ unsigned int ata_read_log_page(struct ata_device *dev, u8 log, ...@@ -2102,8 +2102,8 @@ unsigned int ata_read_log_page(struct ata_device *dev, u8 log,
buf, sectors * ATA_SECT_SIZE, 0); buf, sectors * ATA_SECT_SIZE, 0);
if (err_mask && dma) { if (err_mask && dma) {
dev->horkage |= ATA_HORKAGE_NO_NCQ_LOG; dev->horkage |= ATA_HORKAGE_NO_DMA_LOG;
ata_dev_warn(dev, "READ LOG DMA EXT failed, trying unqueued\n"); ata_dev_warn(dev, "READ LOG DMA EXT failed, trying PIO\n");
goto retry; goto retry;
} }
......
...@@ -1434,7 +1434,7 @@ void ata_eh_about_to_do(struct ata_link *link, struct ata_device *dev, ...@@ -1434,7 +1434,7 @@ void ata_eh_about_to_do(struct ata_link *link, struct ata_device *dev,
/** /**
* ata_eh_done - EH action complete * ata_eh_done - EH action complete
* @ap: target ATA port * @link: ATA link for which EH actions are complete
* @dev: target ATA dev for per-dev action (can be NULL) * @dev: target ATA dev for per-dev action (can be NULL)
* @action: action just completed * @action: action just completed
* *
...@@ -1576,7 +1576,7 @@ unsigned int atapi_eh_tur(struct ata_device *dev, u8 *r_sense_key) ...@@ -1576,7 +1576,7 @@ unsigned int atapi_eh_tur(struct ata_device *dev, u8 *r_sense_key)
/** /**
* ata_eh_request_sense - perform REQUEST_SENSE_DATA_EXT * ata_eh_request_sense - perform REQUEST_SENSE_DATA_EXT
* @dev: device to perform REQUEST_SENSE_SENSE_DATA_EXT to * @qc: qc to perform REQUEST_SENSE_SENSE_DATA_EXT to
* @cmd: scsi command for which the sense code should be set * @cmd: scsi command for which the sense code should be set
* *
* Perform REQUEST_SENSE_DATA_EXT after the device reported CHECK * Perform REQUEST_SENSE_DATA_EXT after the device reported CHECK
...@@ -4175,7 +4175,6 @@ static void ata_eh_handle_port_resume(struct ata_port *ap) ...@@ -4175,7 +4175,6 @@ static void ata_eh_handle_port_resume(struct ata_port *ap)
struct ata_link *link; struct ata_link *link;
struct ata_device *dev; struct ata_device *dev;
unsigned long flags; unsigned long flags;
int rc = 0;
/* are we resuming? */ /* are we resuming? */
spin_lock_irqsave(ap->lock, flags); spin_lock_irqsave(ap->lock, flags);
...@@ -4202,7 +4201,7 @@ static void ata_eh_handle_port_resume(struct ata_port *ap) ...@@ -4202,7 +4201,7 @@ static void ata_eh_handle_port_resume(struct ata_port *ap)
ata_acpi_set_state(ap, ap->pm_mesg); ata_acpi_set_state(ap, ap->pm_mesg);
if (ap->ops->port_resume) if (ap->ops->port_resume)
rc = ap->ops->port_resume(ap); ap->ops->port_resume(ap);
/* tell ACPI that we're resuming */ /* tell ACPI that we're resuming */
ata_acpi_on_resume(ap); ata_acpi_on_resume(ap);
......
...@@ -3030,10 +3030,12 @@ static unsigned int atapi_xlat(struct ata_queued_cmd *qc) ...@@ -3030,10 +3030,12 @@ static unsigned int atapi_xlat(struct ata_queued_cmd *qc)
static struct ata_device *ata_find_dev(struct ata_port *ap, int devno) static struct ata_device *ata_find_dev(struct ata_port *ap, int devno)
{ {
if (!sata_pmp_attached(ap)) { if (!sata_pmp_attached(ap)) {
if (likely(devno < ata_link_max_devices(&ap->link))) if (likely(devno >= 0 &&
devno < ata_link_max_devices(&ap->link)))
return &ap->link.device[devno]; return &ap->link.device[devno];
} else { } else {
if (likely(devno < ap->nr_pmp_links)) if (likely(devno >= 0 &&
devno < ap->nr_pmp_links))
return &ap->pmp_link[devno].device[0]; return &ap->pmp_link[devno].device[0];
} }
......
...@@ -858,6 +858,14 @@ static const struct of_device_id sata_rcar_match[] = { ...@@ -858,6 +858,14 @@ static const struct of_device_id sata_rcar_match[] = {
.compatible = "renesas,sata-r8a7795", .compatible = "renesas,sata-r8a7795",
.data = (void *)RCAR_GEN2_SATA .data = (void *)RCAR_GEN2_SATA
}, },
{
.compatible = "renesas,rcar-gen2-sata",
.data = (void *)RCAR_GEN2_SATA
},
{
.compatible = "renesas,rcar-gen3-sata",
.data = (void *)RCAR_GEN2_SATA
},
{ }, { },
}; };
MODULE_DEVICE_TABLE(of, sata_rcar_match); MODULE_DEVICE_TABLE(of, sata_rcar_match);
......
...@@ -435,7 +435,7 @@ enum { ...@@ -435,7 +435,7 @@ enum {
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 */ ATA_HORKAGE_ZERO_AFTER_TRIM = (1 << 22),/* guarantees zero after trim */
ATA_HORKAGE_NO_NCQ_LOG = (1 << 23), /* don't use NCQ for log read */ ATA_HORKAGE_NO_DMA_LOG = (1 << 23), /* don't use DMA for log read */
ATA_HORKAGE_NOTRIM = (1 << 24), /* don't use TRIM */ ATA_HORKAGE_NOTRIM = (1 << 24), /* don't use TRIM */
ATA_HORKAGE_MAX_SEC_1024 = (1 << 25), /* Limit max sects to 1024 */ ATA_HORKAGE_MAX_SEC_1024 = (1 << 25), /* Limit max sects to 1024 */
......
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