From nobody Sun May 10 23:26:00 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 64A2DC433F5 for ; Thu, 21 Apr 2022 09:46:03 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1387908AbiDUJst (ORCPT ); Thu, 21 Apr 2022 05:48:49 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51586 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1387890AbiDUJsf (ORCPT ); Thu, 21 Apr 2022 05:48:35 -0400 Received: from ZXBJCAS.zhaoxin.com (zxbjcas.zhaoxin.com [124.127.214.139]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C810D19023; Thu, 21 Apr 2022 02:45:45 -0700 (PDT) Received: from zxbjmbx1.zhaoxin.com (10.29.252.163) by ZXBJCAS.zhaoxin.com (10.29.252.3) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.27; Thu, 21 Apr 2022 17:43:37 +0800 Received: from zx-HX001EM1.zhaoxin.com (10.29.8.9) by zxbjmbx1.zhaoxin.com (10.29.252.163) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.27; Thu, 21 Apr 2022 17:43:37 +0800 From: Runa Guo-oc To: , , Subject: [PATCH 1/2] ahci: Add PhyRdy Change control on actual LPM capability Date: Thu, 21 Apr 2022 17:43:36 +0800 Message-ID: <1650534217-14052-2-git-send-email-RunaGuo-oc@zhaoxin.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1650534217-14052-1-git-send-email-RunaGuo-oc@zhaoxin.com> References: <1650534217-14052-1-git-send-email-RunaGuo-oc@zhaoxin.com> MIME-Version: 1.0 X-Originating-IP: [10.29.8.9] X-ClientProxiedBy: zxbjmbx1.zhaoxin.com (10.29.252.163) To zxbjmbx1.zhaoxin.com (10.29.252.163) Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" 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 --- 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"); =20 + if (hpriv->cap & HOST_CAP_PART) + host->flags |=3D ATA_HOST_PART; + + if (hpriv->cap & HOST_CAP_SSC) + host->flags |=3D ATA_HOST_SSC; + + if (hpriv->cap2 & HOST_CAP2_SDS) + host->flags |=3D ATA_HOST_DEVSLP; + if (pi.flags & ATA_FLAG_EM) ahci_reset_em(host); =20 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, enu= m ata_lpm_policy policy, unsigned int err_mask; int rc; =20 + /* 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 |=3D 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 =3D (1 << 2), /* Ports on this host can be scanned= in parallel */ ATA_HOST_IGNORE_ATA =3D (1 << 3), /* Ignore ATA devices on this host. */ =20 + ATA_HOST_PART =3D (1 << 4), /* Host support partial.*/ + ATA_HOST_SSC =3D (1 << 5), /* Host support slumber.*/ + ATA_HOST_DEVSLP =3D (1 << 6), /* Host support devslp.*/ + /* bits 24:31 of host->flags are reserved for LLD specific flags */ =20 /* various lengths of time */ --=20 2.7.4 From nobody Sun May 10 23:26:00 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id E56C8C433F5 for ; Thu, 21 Apr 2022 10:00:12 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1387994AbiDUKC7 (ORCPT ); Thu, 21 Apr 2022 06:02:59 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59990 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1388008AbiDUKCi (ORCPT ); Thu, 21 Apr 2022 06:02:38 -0400 Received: from ZXBJCAS.zhaoxin.com (zxbjcas.zhaoxin.com [124.127.214.139]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A07D921250; Thu, 21 Apr 2022 02:59:48 -0700 (PDT) Received: from zxbjmbx1.zhaoxin.com (10.29.252.163) by ZXBJCAS.zhaoxin.com (10.29.252.3) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.27; Thu, 21 Apr 2022 17:43:37 +0800 Received: from zx-HX001EM1.zhaoxin.com (10.29.8.9) by zxbjmbx1.zhaoxin.com (10.29.252.163) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.27; Thu, 21 Apr 2022 17:43:37 +0800 From: Runa Guo-oc To: , , Subject: [PATCH 2/2] ahci: Add PxSCTL.IPM control on actual LPM capability Date: Thu, 21 Apr 2022 17:43:37 +0800 Message-ID: <1650534217-14052-3-git-send-email-RunaGuo-oc@zhaoxin.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1650534217-14052-1-git-send-email-RunaGuo-oc@zhaoxin.com> References: <1650534217-14052-1-git-send-email-RunaGuo-oc@zhaoxin.com> MIME-Version: 1.0 X-Originating-IP: [10.29.8.9] X-ClientProxiedBy: zxbjmbx1.zhaoxin.com (10.29.252.163) To zxbjmbx1.zhaoxin.com (10.29.252.163) Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" On some platform, when OS enables LPM by default (eg, min_power), then, DIPM slumber request cannot be disallowed if ahci's CAP.PSC is set to '1' and CAP.SSC is cleared to '0', which may cause ahci to be an uncertain state (same for Partial). In ahci spec, when CAP.PSC/SSC is cleared to '0', the PxSCTL.IPM field must be programmed to disallow device initiated Partial/ Slumber request. Adds support to control this case on actual LPM capability. Signed-off-by: Runa Guo-oc --- drivers/ata/libata-sata.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/drivers/ata/libata-sata.c b/drivers/ata/libata-sata.c index 7a5fe41..e6195cf 100644 --- a/drivers/ata/libata-sata.c +++ b/drivers/ata/libata-sata.c @@ -394,9 +394,19 @@ int sata_link_scr_lpm(struct ata_link *link, enum ata_= lpm_policy policy, case ATA_LPM_MED_POWER_WITH_DIPM: case ATA_LPM_MIN_POWER_WITH_PARTIAL: case ATA_LPM_MIN_POWER: - if (ata_link_nr_enabled(link) > 0) + if (ata_link_nr_enabled(link) > 0) { /* no restrictions on LPM transitions */ scontrol &=3D ~(0x7 << 8); + + /* if controller does not support partial, then disallows it, + * the same for slumber + */ + if (!(link->ap->host->flags & ATA_HOST_PART)) + scontrol |=3D (0x1 << 8); + + if (!(link->ap->host->flags & ATA_HOST_SSC)) + scontrol |=3D (0x2 << 8); + } else { /* empty port, power off */ scontrol &=3D ~0xf; --=20 2.7.4