From: Damien Le Moal <damien.lemoal@opensource.wdc.com>
To: RunaGuo-oc <RunaGuo-oc@zhaoxin.com>,
linux-ide@vger.kernel.org,
Mario Limonciello <mario.limonciello@amd.com>,
Cobe Chen <CobeChen@zhaoxin.com>, Tim Guo <TimGuo@zhaoxin.com>,
TonyW Wang <TonyWWang@zhaoxin.com>, Leo Liu <LeoLiu@zhaoxin.com>
Subject: Re: [PATCH 1/2] ahci: Add PhyRdy Change control on actual LPM capability
Date: Sat, 23 Apr 2022 07:37:38 +0900 [thread overview]
Message-ID: <ffc33fd4-a676-167d-ec2c-18e8211f2858@opensource.wdc.com> (raw)
In-Reply-To: <af0571fe-a8f4-cb0a-323f-4dc0c4e7517d@zhaoxin.com>
On 4/22/22 18:57, RunaGuo-oc wrote:
> On 2022/4/21 18:39, Damien Le Moal wrote:
>> On 4/21/22 18:43, Runa Guo-oc wrote:
>>> On some platform, when OS enables LPM by default (eg, min_power),
>>> then, PhyRdy Change cannot be detected if ahci supports no LPM.
>> Do you mean "...if the ahci adapter does not support LPM." ?
>
> Yes.
>
>> If that is what you mean, then min_power should not be set.
>
> Yes, I agree with you. But, as we know, link_power_management
> is a user policy which can be modified, if some users are not
> familiar with ahci spec, then the above case may happen.
Users should *never* need to be aware of the HW specs and what can or
cannot be done with a particular adapter/drive. User actions trying to
enable an unsupported feature should be failed, always.
In your case though, quickly checking the AHCI specs, the scontrol
register bits you change seem to be for preventing *device* initiated
power mode transitions, not user/host initiated operations. Your commit
message should clearly mention that. But I still need to spend more time
re-reading the specs to confirm. Will do that next week.
Since you added the CAP flags, these flags should be used to detect low
power policies that can be allowed for user actions.
Mario,
Please rebase and repost your patches ! I rebased the for-5.19 branch on
rc3 to have the LPM config name revert. We need to fix this LPM mess :)
>
>> Mario has patches to fix that.
>
>
> Hmm. How to patch this case ?
Mario's patches modify the beginning of the sata_link_scr_lpm() function
to prevent setting an LPM policy that the adapter/drive does not support.
This together with the correct bits set/reset in the scr register will
only allow LPM transitions that are supported.
It may also be good to revisit ata_scsi_lpm_store() to prevent the user
from setting an unsupported policy. Currently, that uselessly triggers an
EH sequence.
>
>>> 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 */
>>
>
--
Damien Le Moal
Western Digital Research
next prev parent reply other threads:[~2022-04-22 23:03 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 ` [PATCH 1/2] ahci: Add PhyRdy Change control " Runa Guo-oc
2022-04-21 10:39 ` Damien Le Moal
2022-04-22 9:57 ` RunaGuo-oc
2022-04-22 22:37 ` Damien Le Moal [this message]
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=ffc33fd4-a676-167d-ec2c-18e8211f2858@opensource.wdc.com \
--to=damien.lemoal@opensource.wdc.com \
--cc=CobeChen@zhaoxin.com \
--cc=LeoLiu@zhaoxin.com \
--cc=RunaGuo-oc@zhaoxin.com \
--cc=TimGuo@zhaoxin.com \
--cc=TonyWWang@zhaoxin.com \
--cc=linux-ide@vger.kernel.org \
--cc=mario.limonciello@amd.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox