Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d3ead3a2 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
* 'upstream-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jgarzik/libata-dev:
  libata and starting/stopping ATAPI floppy devices
  sata_sil24: prevent hba lockup when pass-through ATA commands are used
  Update kernel parameter document for libata DMA mode setting knobs.
  libata: don't normalize UNKNOWN to NONE after reset
  libata-pmp: propagate timeout to host link
  libata-pmp: 4726 hates SRST
  pata_ixp4xx_cf: fix compilation introduced by ata_port_desc() conversion
  pata_pdc202xx_old: Further fixups
  libata-sff: PCI IRQ handling fix
  sata_qstor: use hardreset instead of softreset
parents 318851b0 9b8e8de7
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -883,6 +883,14 @@ and is between 256 and 4096 characters. It is defined in the file
	lapic_timer_c2_ok	[X86-32,x86-64,APIC] trust the local apic timer in
			C2 power state.

	libata.dma=	[LIBATA] DMA control
			libata.dma=0	  Disable all PATA and SATA DMA
			libata.dma=1	  PATA and SATA Disk DMA only
			libata.dma=2	  ATAPI (CDROM) DMA only
			libata.dma=4	  Compact Flash DMA only 
			Combinations also work, so libata.dma=3 enables DMA
			for disks and CDROMs, but not CFs.

	libata.noacpi	[LIBATA] Disables use of ACPI in libata suspend/resume
			when set.
			Format: <int>
+16 −8
Original line number Diff line number Diff line
@@ -1733,10 +1733,14 @@ static void ata_eh_link_autopsy(struct ata_link *link)
		ehc->i.action &= ~ATA_EH_PERDEV_MASK;
	}

	/* consider speeding down */
	/* propagate timeout to host link */
	if ((all_err_mask & AC_ERR_TIMEOUT) && !ata_is_host_link(link))
		ap->link.eh_context.i.err_mask |= AC_ERR_TIMEOUT;

	/* record error and consider speeding down */
	dev = ehc->i.dev;
	if (!dev && ata_link_max_devices(link) == 1 &&
	    ata_dev_enabled(link->device))
	if (!dev && ((ata_link_max_devices(link) == 1 &&
		      ata_dev_enabled(link->device))))
	    dev = link->device;

	if (dev)
@@ -1759,8 +1763,14 @@ void ata_eh_autopsy(struct ata_port *ap)
{
	struct ata_link *link;

	__ata_port_for_each_link(link, ap)
	ata_port_for_each_link(link, ap)
		ata_eh_link_autopsy(link);

	/* Autopsy of fanout ports can affect host link autopsy.
	 * Perform host link autopsy last.
	 */
	if (ap->nr_pmp_links)
		ata_eh_link_autopsy(&ap->link);
}

/**
@@ -2157,13 +2167,11 @@ int ata_eh_reset(struct ata_link *link, int classify,
		if (ata_link_offline(link))
			continue;

		/* apply class override and convert UNKNOWN to NONE */
		/* apply class override */
		if (lflags & ATA_LFLAG_ASSUME_ATA)
			classes[dev->devno] = ATA_DEV_ATA;
		else if (lflags & ATA_LFLAG_ASSUME_SEMB)
			classes[dev->devno] = ATA_DEV_SEMB_UNSUP; /* not yet */
		else if (classes[dev->devno] == ATA_DEV_UNKNOWN)
			classes[dev->devno] = ATA_DEV_NONE;
	}

	/* record current link speed */
+5 −7
Original line number Diff line number Diff line
@@ -495,14 +495,12 @@ static void sata_pmp_quirks(struct ata_port *ap)
			/* SError.N need a kick in the ass to get working */
			link->flags |= ATA_LFLAG_HRST_TO_RESUME;

			/* class code report is unreliable */
			if (link->pmp < 5)
				link->flags |= ATA_LFLAG_ASSUME_ATA;

			/* The config device, which can be either at
			 * port 0 or 5, locks up on SRST.
			/* Class code report is unreliable and SRST
			 * times out under certain configurations.
			 * Config device can be at port 0 or 5 and
			 * locks up on SRST.
			 */
			if (link->pmp == 0 || link->pmp == 5)
			if (link->pmp <= 5)
				link->flags |= ATA_LFLAG_NO_SRST |
					       ATA_LFLAG_ASSUME_ATA;

+2 −1
Original line number Diff line number Diff line
@@ -872,6 +872,7 @@ int ata_scsi_slave_config(struct scsi_device *sdev)

	ata_scsi_sdev_config(sdev);

	if (dev->class == ATA_DEV_ATA)
		sdev->manage_start_stop = 1;

	if (dev)
+5 −2
Original line number Diff line number Diff line
@@ -806,7 +806,10 @@ int ata_pci_init_one(struct pci_dev *pdev,
	if (rc)
		goto err_out;

	if (!legacy_mode) {
	if (!legacy_mode && pdev->irq) {
		/* We may have no IRQ assigned in which case we can poll. This
		   shouldn't happen on a sane system but robustness is cheap
		   in this case */
		rc = devm_request_irq(dev, pdev->irq, pi->port_ops->irq_handler,
				      IRQF_SHARED, DRV_NAME, host);
		if (rc)
@@ -814,7 +817,7 @@ int ata_pci_init_one(struct pci_dev *pdev,

		ata_port_desc(host->ports[0], "irq %d", pdev->irq);
		ata_port_desc(host->ports[1], "irq %d", pdev->irq);
	} else {
	} else if (legacy_mode) {
		if (!ata_port_is_dummy(host->ports[0])) {
			rc = devm_request_irq(dev, ATA_PRIMARY_IRQ(pdev),
					      pi->port_ops->irq_handler,
Loading