From: Damien Le Moal <damien.lemoal@opensource.wdc.com>
To: Runa Guo-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: Mon, 2 May 2022 22:05:11 +0900 [thread overview]
Message-ID: <e0213b8b-daea-7e75-793c-50f39956f932@opensource.wdc.com> (raw)
In-Reply-To: <349b0922-7efd-99e9-7bc8-b18ed98d94f8@zhaoxin.com>
On 2022/04/27 19:18, Runa Guo-oc wrote:
>
> On 2022/4/23 6:37, Damien Le Moal wrote:
>> 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.
>
> To avoid some confusion in this patch set, I want to explain it here.
> The patch set involves two LPM related issues, one for the ahci adapter
> does not support LPM (no partial & slumber & devslp), the other for
> ahci adapter supports part of LPM(eg, only partial, no slumber & devslp).
>
> The former case is what I metioned in this mail thread. Namely, when LPM is
> enabled, actions trying to enable this unsupported feature will be failed,
> but will disable PORT_IRQ_PHYRDY bit at the beginning of the ahci_set_lpm()
> function, which would make PhyRdy Changed cannot be detected. So I add flags
> in the ata_eh_set_lpm() function which will not go to the disable operation.
>
> The latter case is what I metioned in "PATCH[2/2]". Namely, if the ahci
> adapter only supports partial (no slumber & devslp), then when LPM is enabled
> (eg, min_power), *device* initiated power mode transitions will be enabled
> with the scontrol register bits setting to indicate no restrictions on LPM
> transitions. After that, if SSD/HDD sends a DIPM slumber request, it cannot
> be disallowed by ahci adpter for driver not setting scontrol register bits
> properly. So I add flags to control it.
>
> Therefore, Mario's patches in the sata_link_scr_lpm() function may fix the
> issue in "PATCH[2/2]".
>
> Revisit ata_scsi_lpm_store() to prevent the user from setting an unsupported
> policy may be a way to fix the issue in "PATCH[1/2]", but there may be another
> case where some operating system manufacturers setting LPM default enable in
> driver, like the following code in the ahci_init_one() function, also need to
> control.
>
> if (ap->flags & ATA_FLAG_EM)
> ap->em_message_type = hpriv->em_msg_type;
>
> + ap->target_lpm_policy = ATA_LPM_MIN_POWER;
This one looks wrong. This is set inside ahci_update_initial_lpm_policy()
according to the default kernel config (CONFIG_SATA_MOBILE_LPM_POLICY) and
module param + what the drive can do according to ACPI. The problem though is
that the adapter capabilities are not checked in that function, so the initial
target lpm policy may be wrong.
Since your patch 1/2 adds the hpriv flags indicating the capabilities, you need
to use these in ahci_update_initial_lpm_policy() to validate whatever initial
policy is asked for by the user.
> ahci_update_initial_lpm_policy(ap, hpriv);
>
> According to my current understanding, the currently submitted patches can
> solve the above problems, and definitely not the best. I haven't figured out
> good way to use CAP flags to patch. Hope you can give me some advice, thanks.
--
Damien Le Moal
Western Digital Research
next prev parent reply other threads:[~2022-05-02 13:06 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
2022-04-27 10:18 ` Runa Guo-oc
2022-05-02 13:05 ` Damien Le Moal [this message]
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=e0213b8b-daea-7e75-793c-50f39956f932@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