[PATCH v2] drm/amdgpu: Poweroff uvd/vce/vcn/acp block if they were disabled by user

Koenig, Christian Christian.Koenig at amd.com
Tue Oct 16 18:59:03 UTC 2018


Am 16.10.2018 um 20:54 schrieb Zhu, Rex:
>
>> -----Original Message-----
>> From: Christian König <ckoenig.leichtzumerken at gmail.com>
>> Sent: Wednesday, October 17, 2018 2:31 AM
>> To: Zhu, Rex <Rex.Zhu at amd.com>; amd-gfx at lists.freedesktop.org
>> Subject: Re: [PATCH v2] drm/amdgpu: Poweroff uvd/vce/vcn/acp block if
>> they were disabled by user
>>
>> Am 16.10.2018 um 20:25 schrieb Rex Zhu:
>>> If user disable uvd/vce/vcn/acp blocks via module parameter
>>> ip_block_mask, driver power off thoser blocks to save power.
>>>
>>> v2: power off uvd/vce/vcn/acp via smu.
>> I'm not sure if that is a good idea.
>>
>> The meaning of the flag is to NOT touch the blocks at all, e.g. pretend they
>> don't even exists.
>>
>> Additional to that the ip_block_mask is only for bringup and debugging and
>> not meant for production use and power saving shouldn't be an issue there.
> Hi Christian,
>
> This is requested by Chrome project. As there is an S3 issue caused by VCE, and they still don't find the root cause.
> And in Chrome project, they don't need to use vce engine.
> So as a workaround, they want to disable vce and power off the vce engine to save power.

Oh, please not that stupid idea again! In this case that is a clear NAK.

The mask isn't necessary stable and this module parameter is absolutely 
NOT intended for production use!

If we want to disable a specific block permanently in a project we 
should do so by adding a patch to the specific branch and NOT by abusing 
ip_block_mask for it.

Regards,
Christian.

>
> Best Regards
> Rex
>   
>> So I would rather say that this is a NAK.
>>
>> Christian.
>>
>>> Reviewed-by: Alex Deucher <alexander.deucher at amd.com>
>>> Signed-off-by: Rex Zhu <Rex.Zhu at amd.com>
>>> ---
>>>    drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 19
>> +++++++++++++++++++
>>>    1 file changed, 19 insertions(+)
>>>
>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
>>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
>>> index 6fe6ea9..ef9fe50 100644
>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
>>> @@ -1776,6 +1776,24 @@ static int amdgpu_device_set_pg_state(struct
>>> amdgpu_device *adev, enum amd_power
>>>
>>>    	for (j = 0; j < adev->num_ip_blocks; j++) {
>>>    		i = state == AMD_PG_STATE_GATE ? j : adev->num_ip_blocks
>> - j - 1;
>>> +
>>> +		/* try to power off VCE/UVD/VCN/ACP if they were disabled
>> by user */
>>> +		if ((adev->ip_blocks[i].version->type ==
>> AMD_IP_BLOCK_TYPE_UVD ||
>>> +		    adev->ip_blocks[i].version->type ==
>> AMD_IP_BLOCK_TYPE_VCE ||
>>> +		    adev->ip_blocks[i].version->type ==
>> AMD_IP_BLOCK_TYPE_VCN ||
>>> +		    adev->ip_blocks[i].version->type ==
>> AMD_IP_BLOCK_TYPE_ACP) &&
>>> +		    adev->powerplay.pp_funcs->set_powergating_by_smu) {
>>> +			if (!adev->ip_blocks[i].status.valid) {
>>> +
>> 	amdgpu_dpm_set_powergating_by_smu(adev, adev-
>>> ip_blocks[i].version->type, state == AMD_PG_STATE_GATE ?
>>> +
>> 					true : false);
>>> +				if (r) {
>>> +
>> 	DRM_ERROR("set_powergating_state(gate) of IP block <%s>
>> failed %d\n",
>>> +					  adev->ip_blocks[i].version->funcs-
>>> name, r);
>>> +					return r;
>>> +				}
>>> +			}
>>> +		}
>>> +
>>>    		if (!adev->ip_blocks[i].status.late_initialized)
>>>    			continue;
>>>    		/* skip CG for VCE/UVD, it's handled specially */ @@ -1793,6
>>> +1811,7 @@ static int amdgpu_device_set_pg_state(struct amdgpu_device
>> *adev, enum amd_power
>>>    			}
>>>    		}
>>>    	}
>>> +
>>>    	return 0;
>>>    }
>>>



More information about the amd-gfx mailing list