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

Commit efac2483 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull libata fixes from Tejun Heo:
 "I sat on them too long and it's quite a few this late, but nothing has
  a wide blast area. The changes are...

   - Fix corner cases in SG command handling.

   - Recent introduction of default powersaving mode config option
     exposed several devices with broken powersaving behaviors. A number
     of patches to update the blacklist accordingly.

   - Fix a kernel panic on SAS hotplug.

   - Other misc and device specific updates"

* 'for-4.16-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/libata:
  libata: Modify quirks for MX100 to limit NCQ_TRIM quirk to MU01 version
  libata: Make Crucial BX100 500GB LPM quirk apply to all firmware versions
  libata: Apply NOLPM quirk to Crucial M500 480 and 960GB SSDs
  libata: Enable queued TRIM for Samsung SSD 860
  PCI: Add function 1 DMA alias quirk for Highpoint RocketRAID 644L
  ahci: Add PCI-id for the Highpoint Rocketraid 644L card
  ata: do not schedule hot plug if it is a sas host
  libata: disable LPM for Crucial BX100 SSD 500GB drive
  libata: Apply NOLPM quirk to Crucial MX100 512GB SSDs
  libata: update documentation for sysfs interfaces
  ata: sata_rcar: Remove unused variable in sata_rcar_init_controller()
  libata: transport: cleanup documentation of sysfs interface
  sata_rcar: Reset SATA PHY when Salvator-X board resumes
  libata: don't try to pass through NCQ commands to non-NCQ devices
  libata: remove WARN() for DMA or PIO command without data
  libata: fix length validation of ATAPI-relayed SCSI commands
  ata: libahci: fix comment indentation
  ahci: Add check for device presence (PCIe hot unplug) in ahci_stop_engine()
  libata: Fix compile warning with ATA_DEBUG enabled
parents c698ca52 d418ff56
Loading
Loading
Loading
Loading
+100 −71
Original line number Diff line number Diff line
What:		/sys/class/ata_...
Date:		August 2008
Contact:	Gwendal Grignou<gwendal@google.com>
Description:

Provide a place in sysfs for storing the ATA topology of the system.  This allows
retrieving various information about ATA objects.
		Provide a place in sysfs for storing the ATA topology of the
		system. This allows retrieving various information about ATA
		objects.

Files under /sys/class/ata_port
-------------------------------

	For each port, a directory ataX is created where X is the ata_port_id of
	the port. The device parent is the ata host device.
For each port, a directory ataX is created where X is the ata_port_id of the
port. The device parent is the ata host device.


idle_irq (read)
What:		/sys/class/ata_port/ataX/nr_pmp_links
What:		/sys/class/ata_port/ataX/idle_irq
Date:		May, 2010
KernelVersion:	v2.6.37
Contact:	Gwendal Grignou <gwendal@chromium.org>
Description:
		nr_pmp_links:	(RO) If a SATA Port Multiplier (PM) is
				connected, the number of links behind it.

	Number of IRQ received by the port while idle [some ata HBA only].
		idle_irq:	(RO) Number of IRQ received by the port while
				idle [some ata HBA only].

nr_pmp_links (read)

	If a SATA Port Multiplier (PM) is connected, number of link behind it.
What:		/sys/class/ata_port/ataX/port_no
Date:		May, 2013
KernelVersion:	v3.11
Contact:	Gwendal Grignou <gwendal@chromium.org>
Description:
		(RO) Host local port number. While registering host controller,
		port numbers are tracked based upon number of ports available on
		the controller. This attribute is needed by udev for composing
		persistent links in /dev/disk/by-path.

Files under /sys/class/ata_link
-------------------------------

	Behind each port, there is a ata_link. If there is a SATA PM in the
	topology, 15 ata_link objects are created.
Behind each port, there is a ata_link. If there is a SATA PM in the topology, 15
ata_link objects are created.

	If a link is behind a port, the directory name is linkX, where X is
	ata_port_id of the port.
	If a link is behind a PM, its name is linkX.Y where X is ata_port_id
	of the parent port and Y the PM port.
If a link is behind a port, the directory name is linkX, where X is ata_port_id
of the port. If a link is behind a PM, its name is linkX.Y where X is
ata_port_id of the parent port and Y the PM port.

hw_sata_spd_limit

	Maximum speed supported by the connected SATA device.

sata_spd_limit
What:		/sys/class/ata_link/linkX[.Y]/hw_sata_spd_limit
What:		/sys/class/ata_link/linkX[.Y]/sata_spd_limit
What:		/sys/class/ata_link/linkX[.Y]/sata_spd
Date:		May, 2010
KernelVersion:	v2.6.37
Contact:	Gwendal Grignou <gwendal@chromium.org>
Description:
		hw_sata_spd_limit:	(RO) Maximum speed supported by the
					connected SATA device.

	Maximum speed imposed by libata.
		sata_spd_limit:		(RO) Maximum speed imposed by libata.

sata_spd
		sata_spd:		(RO) Current speed of the link
					eg. 1.5, 3 Gbps etc.

	Current speed of the link [1.5, 3Gps,...].

Files under /sys/class/ata_device
---------------------------------

	Behind each link, up to two ata device are created.
Behind each link, up to two ata devices are created.
The name of the directory is devX[.Y].Z where:
- X is ata_port_id of the port where the device is connected,
- Y the port of the PM if any, and
	- Z the device id: for PATA, there is usually 2 devices [0,1],
	only 1 for SATA.

class
	Device class. Can be "ata" for disk, "atapi" for packet device,
	"pmp" for PM, or "none" if no device was found behind the link.

dma_mode

	Transfer modes supported by the device when in DMA mode.
	Mostly used by PATA device.

pio_mode

	Transfer modes supported by the device when in PIO mode.
	Mostly used by PATA device.

xfer_mode

	Current transfer mode.

id

	Cached result of IDENTIFY command, as described in ATA8 7.16 and 7.17.
	Only valid if the device is not a PM.
- Z the device id: for PATA, there is usually 2 devices [0,1], only 1 for SATA.


What:		/sys/class/ata_device/devX[.Y].Z/spdn_cnt
What:		/sys/class/ata_device/devX[.Y].Z/gscr
What:		/sys/class/ata_device/devX[.Y].Z/ering
What:		/sys/class/ata_device/devX[.Y].Z/id
What:		/sys/class/ata_device/devX[.Y].Z/pio_mode
What:		/sys/class/ata_device/devX[.Y].Z/xfer_mode
What:		/sys/class/ata_device/devX[.Y].Z/dma_mode
What:		/sys/class/ata_device/devX[.Y].Z/class
Date:		May, 2010
KernelVersion:	v2.6.37
Contact:	Gwendal Grignou <gwendal@chromium.org>
Description:
		spdn_cnt:	(RO) Number of times libata decided to lower the
				speed of link due to errors.

gscr
		gscr:		(RO) Cached result of the dump of PM GSCR
				register. Valid registers are:

	Cached result of the dump of PM GSCR register.
	Valid registers are:
				0:      SATA_PMP_GSCR_PROD_ID,
				1:	SATA_PMP_GSCR_REV,
				2:      SATA_PMP_GSCR_PORT_INFO,
@@ -88,23 +97,43 @@ gscr
				64:     SATA_PMP_GSCR_FEAT,
				96:     SATA_PMP_GSCR_FEAT_EN,
				130:    SATA_PMP_GSCR_SII_GPIO

				Only valid if the device is a PM.

trim
		ering:		(RO) Formatted output of the error ring of the
				device.

		id:		(RO) Cached result of IDENTIFY command, as
				described in ATA8 7.16 and 7.17. Only valid if
				the device is not a PM.

		pio_mode:	(RO) Transfer modes supported by the device when
				in PIO mode. Mostly used by PATA device.

		xfer_mode:	(RO) Current transfer mode

	Shows the DSM TRIM mode currently used by the device. Valid
		dma_mode:	(RO) Transfer modes supported by the device when
				in DMA mode. Mostly used by PATA device.

		class:		(RO) Device class. Can be "ata" for disk,
				"atapi" for packet device, "pmp" for PM, or
				"none" if no device was found behind the link.


What:		/sys/class/ata_device/devX[.Y].Z/trim
Date:		May, 2015
KernelVersion:	v4.10
Contact:	Gwendal Grignou <gwendal@chromium.org>
Description:
		(RO) Shows the DSM TRIM mode currently used by the device. Valid
		values are:
	unsupported:		Drive does not support DSM TRIM
	unqueued:		Drive supports unqueued DSM TRIM only
	queued:			Drive supports queued DSM TRIM
	forced_unqueued:	Drive's queued DSM support is known to be
				buggy and only unqueued TRIM commands
				are sent

spdn_cnt
		unsupported:		Drive does not support DSM TRIM

	Number of time libata decided to lower the speed of link due to errors.
		unqueued:               Drive supports unqueued DSM TRIM only

ering
		queued:                 Drive supports queued DSM TRIM

	Formatted output of the error ring of the device.
		forced_unqueued:	Drive's queued DSM support is known to
					be buggy and only unqueued TRIM commands
					are sent
+58 −0
Original line number Diff line number Diff line
What:		/sys/block/*/device/sw_activity
Date:		Jun, 2008
KernelVersion:	v2.6.27
Contact:	linux-ide@vger.kernel.org
Description:
		(RW) Used by drivers which support software controlled activity
		LEDs.

		It has the following valid values:

		0	OFF - the LED is not activated on activity
		1	BLINK_ON - the LED blinks on every 10ms when activity is
			detected.
		2	BLINK_OFF - the LED is on when idle, and blinks off
			every 10ms when activity is detected.

		Note that the user must turn sw_activity OFF it they wish to
		control the activity LED via the em_message file.


What:		/sys/block/*/device/unload_heads
Date:		Sep, 2008
KernelVersion:	v2.6.28
Contact:	linux-ide@vger.kernel.org
Description:
		(RW) Hard disk shock protection

		Writing an integer value to this file will take the heads of the
		respective drive off the platter and block all I/O operations
		for the specified number of milliseconds.

		- If the device does not support the unload heads feature,
		  access is denied with -EOPNOTSUPP.
		- The maximal value accepted for a timeout is 30000
		  milliseconds.
		- A previously set timeout can be cancelled and disk can resume
		  normal operation immediately by specifying a timeout of 0.
		- Some hard drives only comply with an earlier version of the
		  ATA standard, but support the unload feature nonetheless.
		  There is no safe way Linux can detect these devices, so this
		  is not enabled by default. If it is known that your device
		  does support the unload feature, then you can tell the kernel
		  to enable it by writing -1. It can be disabled again by
		  writing -2.
		- Values below -2 are rejected with -EINVAL

		For more information, see
		Documentation/laptops/disk-shock-protection.txt


What:		/sys/block/*/device/ncq_prio_enable
Date:		Oct, 2016
KernelVersion:	v4.10
Contact:	linux-ide@vger.kernel.org
Description:
		(RW) Write to the file to turn on or off the SATA ncq (native
		command queueing) support. By default this feature is turned
		off.
+89 −0
Original line number Diff line number Diff line
@@ -27,3 +27,92 @@ Description: This file contains the current status of the "SSD Smart Path"
		the direct i/o path to physical devices.  This setting is
		controller wide, affecting all configured logical drives on the
		controller.  This file is readable and writable.

What:		/sys/class/scsi_host/hostX/link_power_management_policy
Date:		Oct, 2007
KernelVersion:	v2.6.24
Contact:	linux-ide@vger.kernel.org
Description:
		(RW) This parameter allows the user to read and set the link
		(interface) power management.

		There are four possible options:

		min_power: Tell the controller to try to make the link use the
		least possible power when possible. This may sacrifice some
		performance due to increased latency when coming out of lower
		power states.

		max_performance: Generally, this means no power management.
		Tell the controller to have performance be a priority over power
		management.

		medium_power: Tell the controller to enter a lower power state
		when possible, but do not enter the lowest power state, thus
		improving latency over min_power setting.

		med_power_with_dipm: Identical to the existing medium_power
		setting except that it enables dipm (device initiated power
		management) on top, which makes it match the Windows IRST (Intel
		Rapid Storage Technology) driver settings. This setting is also
		close to min_power, except that:
		a) It does not use host-initiated slumber mode, but it does
		allow device-initiated slumber
		b) It does not enable low power device sleep mode (DevSlp).

What:		/sys/class/scsi_host/hostX/em_message
What:		/sys/class/scsi_host/hostX/em_message_type
Date:		Jun, 2008
KernelVersion:	v2.6.27
Contact:	linux-ide@vger.kernel.org
Description:
		em_message: (RW) Enclosure management support. For the LED
		protocol, writes and reads correspond to the LED message format
		as defined in the AHCI spec.

		The user must turn sw_activity (under /sys/block/*/device/) OFF
		it they wish to control the activity LED via the em_message
		file.

		em_message_type: (RO) Displays the current enclosure management
		protocol that is being used by the driver (for eg. LED, SAF-TE,
		SES-2, SGPIO etc).

What:		/sys/class/scsi_host/hostX/ahci_port_cmd
What:		/sys/class/scsi_host/hostX/ahci_host_caps
What:		/sys/class/scsi_host/hostX/ahci_host_cap2
Date:		Mar, 2010
KernelVersion:	v2.6.35
Contact:	linux-ide@vger.kernel.org
Description:
		[to be documented]

What:		/sys/class/scsi_host/hostX/ahci_host_version
Date:		Mar, 2010
KernelVersion:	v2.6.35
Contact:	linux-ide@vger.kernel.org
Description:
		(RO) Display the version of the AHCI spec implemented by the
		host.

What:		/sys/class/scsi_host/hostX/em_buffer
Date:		Apr, 2010
KernelVersion:	v2.6.35
Contact:	linux-ide@vger.kernel.org
Description:
		(RW) Allows access to AHCI EM (enclosure management) buffer
		directly if the host supports EM.

		For eg. the AHCI driver supports SGPIO EM messages but the
		SATA/AHCI specs do not define the SGPIO message format of the EM
		buffer. Different hardware(HW) vendors may have different
		definitions. With the em_buffer attribute, this issue can be
		solved by allowing HW vendors to provide userland drivers and
		tools for their SGPIO initiators.

What:		/sys/class/scsi_host/hostX/em_message_supported
Date:		Oct, 2009
KernelVersion:	v2.6.39
Contact:	linux-ide@vger.kernel.org
Description:
		(RO) Displays supported enclosure management message types.
+3 −1
Original line number Diff line number Diff line
@@ -550,7 +550,9 @@ static const struct pci_device_id ahci_pci_tbl[] = {
	  .driver_data = board_ahci_yes_fbs },
	{ PCI_DEVICE(PCI_VENDOR_ID_MARVELL_EXT, 0x9230),
	  .driver_data = board_ahci_yes_fbs },
	{ PCI_DEVICE(PCI_VENDOR_ID_TTI, 0x0642),
	{ PCI_DEVICE(PCI_VENDOR_ID_TTI, 0x0642), /* highpoint rocketraid 642L */
	  .driver_data = board_ahci_yes_fbs },
	{ PCI_DEVICE(PCI_VENDOR_ID_TTI, 0x0645), /* highpoint rocketraid 644L */
	  .driver_data = board_ahci_yes_fbs },

	/* Promise */
+10 −0
Original line number Diff line number Diff line
@@ -665,6 +665,16 @@ int ahci_stop_engine(struct ata_port *ap)
	if ((tmp & (PORT_CMD_START | PORT_CMD_LIST_ON)) == 0)
		return 0;

	/*
	 * Don't try to issue commands but return with ENODEV if the
	 * AHCI controller not available anymore (e.g. due to PCIe hot
	 * unplugging). Otherwise a 500ms delay for each port is added.
	 */
	if (tmp == 0xffffffff) {
		dev_err(ap->host->dev, "AHCI controller unavailable!\n");
		return -ENODEV;
	}

	/* setting HBA to idle */
	tmp &= ~PORT_CMD_START;
	writel(tmp, port_mmio + PORT_CMD);
Loading