Commit e2f710f9 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull ata updates from Niklas Cassel:

 - ATA PASS-THROUGH sense data cleanups and fixes (Igor Pylypiv)

   Store the sense data for ATA PASS-THROUGH commands at the correct
   offset in the sense buffer when using fixed format sense data.

   Cleanup the logic related to generating sense data for PASS-THROUGH
   commands. Generating sense data for PASS-THROUGH commands would
   overwrite any eventual (real) sense data received from the device.

   Honor the D_SENSE bit when generating sense data for PASS-THROUGH
   commands. (The D_SENSE bit can be set by the user, and determines if
   the returned sense data should be in fixed format or descriptor
   format)

 - ata port allocation cleanups (me)

   Assign the ata port print_id at port allocation time, such that the
   ata_port_* print functions can be used earlier in the init call
   chain.

   Change the ata port port print_id to use ida_alloc(), such that
   print_ids will get reused on rmmod + modprobe, instead of being
   incremented indefinitely.

   Remove wrappers that only existed in order to export the internal
   libata functions which they wrapped, and instead export the libata
   functions directly.

 - Update SATA_MOBILE_LPM_POLICY Kconfig default to med_power_with_dipm
   (Mario Limonciello)

   Using this default was not always a good idea before, because it
   would break hot plug support. However, with LPM changes in recent
   kernels, a port marked as external will not enable LPM (in order to
   not break hot plug), so it is now safe to change the default value of
   this Kconfig.

   All major Linux distros have had SATA_MOBILE_LPM_POLICY set to
   med_power_with_dipm for quite a long time

 - Convert ahci-fsl-qoriq device tree binding to yaml format (Frank Li)

* tag 'ata-6.11-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/libata/linux:
  dt-bindings: ata: ahci-fsl-qoriq: add fsl,ls1046a-ahci and fsl,ls1012a-ahci
  ata: ahci: Add debug print for external port
  ata,scsi: Remove wrapper ata_sas_port_alloc()
  ata: libata-core: Reuse available ata_port print_ids
  ata: libata: Assign print_id at port allocation time
  ata: libata-core: Remove local_port_no struct member
  ata: libata-sata: Remove superfluous assignment in ata_sas_port_alloc()
  ata: libata-core: Remove support for decreasing the number of ports
  ata: libata: Remove unused function declaration for ata_scsi_detect()
  ata,scsi: Remove wrappers ata_sas_tport_{add,delete}()
  ata: libata-scsi: Check ATA_QCFLAG_RTF_FILLED before using result_tf
  ata: libata-core: Set ATA_QCFLAG_RTF_FILLED in fill_result_tf()
  ata: libata-scsi: Do not pass ATA device id to ata_to_sense_error()
  ata: libata-scsi: Remove redundant sense_buffer memsets
  ata: libata-scsi: Honor the D_SENSE bit for CK_COND=1 and no error
  ata: libata-scsi: Do not overwrite valid sense data when CK_COND=1
  ata: libata-scsi: Fix offsets for the fixed format sense data
  dt-bindings: ata: ahci-fsl-qoriq: convert to yaml format
  ata: Kconfig: Update SATA_MOBILE_LPM_POLICY default to med_power_with_dipm
parents 01f851a0 6739fad4
Loading
Loading
Loading
Loading
+0 −21
Original line number Diff line number Diff line
Binding for Freescale QorIQ AHCI SATA Controller

Required properties:
  - reg: Physical base address and size of the controller's register area.
  - compatible: Compatibility string. Must be 'fsl,<chip>-ahci', where
    chip could be ls1021a, ls1043a, ls1046a, ls1088a, ls2080a etc.
  - clocks: Input clock specifier. Refer to common clock bindings.
  - interrupts: Interrupt specifier. Refer to interrupt binding.

Optional properties:
  - dma-coherent: Enable AHCI coherent DMA operation.
  - reg-names: register area names when there are more than 1 register area.

Examples:
	sata@3200000 {
		compatible = "fsl,ls1021a-ahci";
		reg = <0x0 0x3200000 0x0 0x10000>;
		interrupts = <GIC_SPI 101 IRQ_TYPE_LEVEL_HIGH>;
		clocks = <&platform_clk 1>;
		dma-coherent;
	};
+64 −0
Original line number Diff line number Diff line
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/ata/fsl,ahci.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Freescale QorIQ AHCI SATA Controller

maintainers:
  - Frank Li <Frank.Li@nxp.com>

properties:
  compatible:
    oneOf:
      - description: SATA controller for ls1012a
        items:
          - const: fsl,ls1012a-ahci
          - const: fsl,ls1043a-ahci
      - enum:
          - fsl,ls1021a-ahci
          - fsl,ls1028a-ahci
          - fsl,ls1043a-ahci
          - fsl,ls1046a-ahci
          - fsl,ls1088a-ahci
          - fsl,ls2080a-ahci
          - fsl,lx2160a-ahci

  reg:
    minItems: 1
    maxItems: 2

  reg-names:
    items:
      - const: ahci
      - const: sata-ecc
    minItems: 1

  clocks:
    maxItems: 1

  interrupts:
    maxItems: 1

  dma-coherent: true

required:
  - compatible
  - reg
  - clocks
  - interrupts

additionalProperties: false

examples:
  - |
    #include <dt-bindings/interrupt-controller/arm-gic.h>

    sata@3200000 {
        compatible = "fsl,ls1021a-ahci";
        reg = <0x3200000 0x10000>;
        interrupts = <GIC_SPI 101 IRQ_TYPE_LEVEL_HIGH>;
        clocks = <&platform_clk 1>;
        dma-coherent;
    };
+1 −1
Original line number Diff line number Diff line
@@ -118,7 +118,7 @@ config SATA_AHCI
config SATA_MOBILE_LPM_POLICY
	int "Default SATA Link Power Management policy"
	range 0 4
	default 0
	default 3
	depends on SATA_AHCI
	help
	  Select the Default SATA Link Power Management (LPM) policy to use
+3 −1
Original line number Diff line number Diff line
@@ -1732,8 +1732,10 @@ static void ahci_update_initial_lpm_policy(struct ata_port *ap)
	 * Management Interaction in AHCI 1.3.1. Therefore, do not enable
	 * LPM if the port advertises itself as an external port.
	 */
	if (ap->pflags & ATA_PFLAG_EXTERNAL)
	if (ap->pflags & ATA_PFLAG_EXTERNAL) {
		ata_port_dbg(ap, "external port, not enabling LPM\n");
		return;
	}

	/* If no LPM states are supported by the HBA, do not bother with LPM */
	if ((ap->host->flags & ATA_HOST_NO_PART) &&
+2 −10
Original line number Diff line number Diff line
@@ -2075,13 +2075,6 @@ static void ahci_qc_fill_rtf(struct ata_queued_cmd *qc)
	struct ahci_port_priv *pp = qc->ap->private_data;
	u8 *rx_fis = pp->rx_fis;

	/*
	 * rtf may already be filled (e.g. for successful NCQ commands).
	 * If that is the case, we have nothing to do.
	 */
	if (qc->flags & ATA_QCFLAG_RTF_FILLED)
		return;

	if (pp->fbs_enabled)
		rx_fis += qc->dev->link->pmp * AHCI_RX_FIS_SZ;

@@ -2095,7 +2088,6 @@ static void ahci_qc_fill_rtf(struct ata_queued_cmd *qc)
	    !(qc->flags & ATA_QCFLAG_EH)) {
		ata_tf_from_fis(rx_fis + RX_FIS_PIO_SETUP, &qc->result_tf);
		qc->result_tf.status = (rx_fis + RX_FIS_PIO_SETUP)[15];
		qc->flags |= ATA_QCFLAG_RTF_FILLED;
		return;
	}

@@ -2118,12 +2110,10 @@ static void ahci_qc_fill_rtf(struct ata_queued_cmd *qc)
		 */
		qc->result_tf.status = fis[2];
		qc->result_tf.error = fis[3];
		qc->flags |= ATA_QCFLAG_RTF_FILLED;
		return;
	}

	ata_tf_from_fis(rx_fis + RX_FIS_D2H_REG, &qc->result_tf);
	qc->flags |= ATA_QCFLAG_RTF_FILLED;
}

static void ahci_qc_ncq_fill_rtf(struct ata_port *ap, u64 done_mask)
@@ -2158,6 +2148,7 @@ static void ahci_qc_ncq_fill_rtf(struct ata_port *ap, u64 done_mask)
			if (qc && ata_is_ncq(qc->tf.protocol)) {
				qc->result_tf.status = status;
				qc->result_tf.error = error;
				qc->result_tf.flags = qc->tf.flags;
				qc->flags |= ATA_QCFLAG_RTF_FILLED;
			}
			done_mask &= ~(1ULL << tag);
@@ -2182,6 +2173,7 @@ static void ahci_qc_ncq_fill_rtf(struct ata_port *ap, u64 done_mask)
			fis += RX_FIS_SDB;
			qc->result_tf.status = fis[2];
			qc->result_tf.error = fis[3];
			qc->result_tf.flags = qc->tf.flags;
			qc->flags |= ATA_QCFLAG_RTF_FILLED;
		}
		done_mask &= ~(1ULL << tag);
Loading