[PATCH] drm/amdgpu: Fix the runtime pm mode error
Lazar, Lijo
lijo.lazar at amd.com
Thu Mar 21 07:59:02 UTC 2024
On 3/21/2024 12:28 PM, Ma, Jun wrote:
>
>
> On 3/20/2024 9:38 PM, Lazar, Lijo wrote:
>>
>>
>> On 3/20/2024 6:54 PM, Alex Deucher wrote:
>>> On Wed, Mar 20, 2024 at 6:17 AM Ma Jun <Jun.Ma2 at amd.com> wrote:
>>>>
>>>> Because of the logic error, Arcturus and vega20 currently
>>>> use the AMDGPU_RUNPM_NONE for runtime pm even though they
>>>> support BACO. So, the code is optimized to fix this error.
>>>>
>>>> Signed-off-by: Ma Jun <Jun.Ma2 at amd.com>
>>>> ---
>>>> drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c | 56 ++++++++++++-------------
>>>> 1 file changed, 27 insertions(+), 29 deletions(-)
>>>>
>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
>>>> index 1f92fb1e7421..70cf2d0c7683 100644
>>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
>>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
>>>> @@ -150,42 +150,40 @@ int amdgpu_driver_load_kms(struct amdgpu_device *adev, unsigned long flags)
>>>> }
>>>>
>>>> adev->pm.rpm_mode = AMDGPU_RUNPM_NONE;
>>>> - if (amdgpu_device_supports_px(dev) &&
>>>> - (amdgpu_runtime_pm != 0)) { /* enable PX as runtime mode */
>>>> - adev->pm.rpm_mode = AMDGPU_RUNPM_PX;
>>>> - dev_info(adev->dev, "Using ATPX for runtime pm\n");
>>>> - } else if (amdgpu_device_supports_boco(dev) &&
>>>> - (amdgpu_runtime_pm != 0)) { /* enable boco as runtime mode */
>>>> - adev->pm.rpm_mode = AMDGPU_RUNPM_BOCO;
>>>> - dev_info(adev->dev, "Using BOCO for runtime pm\n");
>>>> - } else if (amdgpu_device_supports_baco(dev) &&
>>>> - (amdgpu_runtime_pm != 0)) {
>>>> - switch (adev->asic_type) {
>>>> - case CHIP_VEGA20:
>>>> - case CHIP_ARCTURUS:
>>>> - /* enable BACO as runpm mode if runpm=1 */
>>>> - if (amdgpu_runtime_pm > 0)
>>>> - adev->pm.rpm_mode = AMDGPU_RUNPM_BACO;
>>>> - break;
>>>> - case CHIP_VEGA10:
>>>> - /* enable BACO as runpm mode if noretry=0 */
>>>> - if (!adev->gmc.noretry)
>>>> + if (amdgpu_runtime_pm > 0) {
>>>> + adev->pm.rpm_mode = AMDGPU_RUNPM_BACO;
>>>> + dev_info(adev->dev, "Forcing BACO for runtime pm\n");
>>>
>>> Does this need special handling for BAMACO? Setting
>>> amdgpu_runtime_pm=2 is supposed to set BAMACO and 1 is supposed to
>>> force BACO.
>>>
>>
>> Also, based on the comment it appears as if runpm is not intended to be
>> enabled by default on Vega20/Arcturus (unless forced by module parameter).
>>
> Function amdgpu_dpm_is_baco_supported() is called in soc15_supports_baco
> to check if BACO is supported on Vega20 and Arcturus.
>
BACO support doesn't mean runtime pm needs to be enabled. BACO is also
used for other usecases like reset. Since these are MI series ones, I
doubt if runtime pm is an intended usecase for these.
Thanks,
Lijo
> Regards,
> Ma Jun
>> Thanks,
>> Lijo
>>
>>> Alex
>>>
>>>> + } else if (amdgpu_runtime_pm != 0) {
>>>> + if (amdgpu_device_supports_px(dev)) { /* enable PX as runtime mode */
>>>> + adev->pm.rpm_mode = AMDGPU_RUNPM_PX;
>>>> + dev_info(adev->dev, "Using ATPX for runtime pm\n");
>>>> + } else if (amdgpu_device_supports_boco(dev)) { /* enable boco as runtime mode */
>>>> + adev->pm.rpm_mode = AMDGPU_RUNPM_BOCO;
>>>> + dev_info(adev->dev, "Using BOCO for runtime pm\n");
>>>> + } else if (amdgpu_device_supports_baco(dev)) {
>>>> + switch (adev->asic_type) {
>>>> + case CHIP_VEGA10:
>>>> + /* enable BACO as runpm mode if noretry=0 */
>>>> + if (!adev->gmc.noretry)
>>>> + adev->pm.rpm_mode = AMDGPU_RUNPM_BACO;
>>>> + break;
>>>> + default:
>>>> + /* enable BACO as runpm mode on CI+ */
>>>> adev->pm.rpm_mode = AMDGPU_RUNPM_BACO;
>>>> - break;
>>>> - default:
>>>> - /* enable BACO as runpm mode on CI+ */
>>>> - adev->pm.rpm_mode = AMDGPU_RUNPM_BACO;
>>>> - break;
>>>> - }
>>>> + break;
>>>> + }
>>>>
>>>> - if (adev->pm.rpm_mode == AMDGPU_RUNPM_BACO)
>>>> - dev_info(adev->dev, "Using BACO for runtime pm\n");
>>>> + if (adev->pm.rpm_mode == AMDGPU_RUNPM_BACO)
>>>> + dev_info(adev->dev, "Using BACO for runtime pm\n");
>>>> + }
>>>> }
>>>>
>>>> + if (adev->pm.rpm_mode == AMDGPU_RUNPM_NONE)
>>>> + dev_info(adev->dev, "No PM mode for runtime pm\n");
>>>> +
>>>> /* Call ACPI methods: require modeset init
>>>> * but failure is not fatal
>>>> */
>>>> -
>>>> acpi_status = amdgpu_acpi_init(adev);
>>>> if (acpi_status)
>>>> dev_dbg(dev->dev, "Error during ACPI methods call\n");
>>>> --
>>>> 2.34.1
>>>>
More information about the amd-gfx
mailing list