All of lore.kernel.org
 help / color / mirror / Atom feed
From: Runa Guo-oc <RunaGuo-oc@zhaoxin.com>
To: <damien.lemoal@opensource.wdc.com>, <linux-ide@vger.kernel.org>,
	<linux-kernel@vger.kernel.org>
Subject: [PATCH 1/2] ahci: Add PhyRdy Change control on actual LPM capability
Date: Thu, 21 Apr 2022 17:43:36 +0800	[thread overview]
Message-ID: <1650534217-14052-2-git-send-email-RunaGuo-oc@zhaoxin.com> (raw)
In-Reply-To: <1650534217-14052-1-git-send-email-RunaGuo-oc@zhaoxin.com>

On some platform, when OS enables LPM by default (eg, min_power),
then, PhyRdy Change cannot be detected if ahci supports no LPM.

In ahci spec, PhyRdy Change cannot coexist with LPM.

Adds support to control this case on actual LPM capability.

Signed-off-by: Runa Guo-oc <RunaGuo-oc@zhaoxin.com>
---
 drivers/ata/ahci.c      | 9 +++++++++
 drivers/ata/libata-eh.c | 4 ++++
 include/linux/libata.h  | 4 ++++
 3 files changed, 17 insertions(+)

diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c
index 397dfd2..03f0cb3 100644
--- a/drivers/ata/ahci.c
+++ b/drivers/ata/ahci.c
@@ -1870,6 +1870,15 @@ static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
 	else
 		dev_info(&pdev->dev, "SSS flag set, parallel bus scan disabled\n");
 
+	if (hpriv->cap & HOST_CAP_PART)
+		host->flags |= ATA_HOST_PART;
+
+	if (hpriv->cap & HOST_CAP_SSC)
+		host->flags |= ATA_HOST_SSC;
+
+	if (hpriv->cap2 & HOST_CAP2_SDS)
+		host->flags |= ATA_HOST_DEVSLP;
+
 	if (pi.flags & ATA_FLAG_EM)
 		ahci_reset_em(host);
 
diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c
index 3307ed4..05b1043 100644
--- a/drivers/ata/libata-eh.c
+++ b/drivers/ata/libata-eh.c
@@ -3246,6 +3246,10 @@ static int ata_eh_set_lpm(struct ata_link *link, enum ata_lpm_policy policy,
 	unsigned int err_mask;
 	int rc;
 
+	/* if controller does not support lpm, then sets no LPM flags*/
+	if (!(ap->host->flags & (ATA_HOST_PART | ATA_HOST_SSC | ATA_HOST_DEVSLP)))
+		link->flags |= ATA_LFLAG_NO_LPM;
+
 	/* if the link or host doesn't do LPM, noop */
 	if (!IS_ENABLED(CONFIG_SATA_HOST) ||
 	    (link->flags & ATA_LFLAG_NO_LPM) || (ap && !ap->ops->set_lpm))
diff --git a/include/linux/libata.h b/include/linux/libata.h
index 732de90..7a243f4 100644
--- a/include/linux/libata.h
+++ b/include/linux/libata.h
@@ -216,6 +216,10 @@ enum {
 	ATA_HOST_PARALLEL_SCAN	= (1 << 2),	/* Ports on this host can be scanned in parallel */
 	ATA_HOST_IGNORE_ATA	= (1 << 3),	/* Ignore ATA devices on this host. */
 
+	ATA_HOST_PART		= (1 << 4), /* Host support partial.*/
+	ATA_HOST_SSC		= (1 << 5), /* Host support slumber.*/
+	ATA_HOST_DEVSLP		= (1 << 6), /* Host support devslp.*/
+
 	/* bits 24:31 of host->flags are reserved for LLD specific flags */
 
 	/* various lengths of time */
-- 
2.7.4


  reply	other threads:[~2022-04-21  9:45 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-04-21  9:43 [PATCH 0/2] ahci: Add some controls on actual LPM capability Runa Guo-oc
2022-04-21  9:43 ` Runa Guo-oc [this message]
2022-04-21 10:39   ` [PATCH 1/2] ahci: Add PhyRdy Change control " Damien Le Moal
2022-04-22  9:57     ` RunaGuo-oc
2022-04-22 22:37       ` Damien Le Moal
2022-04-27 10:18         ` Runa Guo-oc
2022-05-02 13:05           ` Damien Le Moal
2022-05-07  7:36             ` Runa Guo-oc
2022-05-11  8:14               ` Damien Le Moal
2022-05-18 21:31                 ` Limonciello, Mario
2022-04-21  9:43 ` [PATCH 2/2] ahci: Add PxSCTL.IPM " Runa Guo-oc
2022-04-21 10:53   ` Damien Le Moal
2022-04-22  9:58     ` RunaGuo-oc

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1650534217-14052-2-git-send-email-RunaGuo-oc@zhaoxin.com \
    --to=runaguo-oc@zhaoxin.com \
    --cc=damien.lemoal@opensource.wdc.com \
    --cc=linux-ide@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.