[PATCH 1/3] drm/amd/display: Add DC Debug mask to disable features for bringup
Harry Wentland
hwentlan at amd.com
Tue May 12 17:10:12 UTC 2020
On 2020-05-12 12:54 p.m., Kazlauskas, Nicholas wrote:
> On 2020-05-12 12:45 p.m., Harry Wentland wrote:
>> [Why]
>> At bringup we want to be able to disable various power features.
>>
>> [How]
>> These features are already exposed as dc_debug_options and exercised
>> on other OSes. Create a new dc_debug_mask module parameter and expose
>> relevant bits, in particular
>> * DC_DISABLE_PIPE_SPLIT
>> * DC_DISABLE_STUTTER
>> * DC_DISABLE_DSC
>> * DC_DISABLE_CLOCK_GATING
>>
>> Signed-off-by: Harry Wentland <harry.wentland at amd.com>
>> ---
>> drivers/gpu/drm/amd/amdgpu/amdgpu.h | 1 +
>> drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 8 ++++++++
>> drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 14 ++++++++++++++
>> drivers/gpu/drm/amd/include/amd_shared.h | 7 +++++++
>> 4 files changed, 30 insertions(+)
>>
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
>> b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
>> index 2a806cb55b78..13c8ccdb2948 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
>> @@ -173,6 +173,7 @@ extern int amdgpu_gpu_recovery;
>> extern int amdgpu_emu_mode;
>> extern uint amdgpu_smu_memory_pool_size;
>> extern uint amdgpu_dc_feature_mask;
>> +extern uint amdgpu_dc_debug_mask;
>> extern uint amdgpu_dm_abm_level;
>> extern struct amdgpu_mgpu_info mgpu_info;
>> extern int amdgpu_ras_enable;
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
>> index 589000938ab6..76707491657e 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
>> @@ -140,6 +140,7 @@ int amdgpu_emu_mode = 0;
>> uint amdgpu_smu_memory_pool_size = 0;
>> /* FBC (bit 0) disabled by default*/
>> uint amdgpu_dc_feature_mask = 0;
>> +uint amdgpu_dc_debug_mask = 0;
>> int amdgpu_async_gfx_ring = 1;
>> int amdgpu_mcbp = 0;
>> int amdgpu_discovery = -1;
>> @@ -714,6 +715,13 @@ MODULE_PARM_DESC(queue_preemption_timeout_ms,
>> "queue preemption timeout in ms (1
>> MODULE_PARM_DESC(dcfeaturemask, "all stable DC features enabled
>> (default))");
>> module_param_named(dcfeaturemask, amdgpu_dc_feature_mask, uint, 0444);
>> +/**
>> + * DOC: dcdebugmask (uint)
>> + * Override display features enabled. See enum DC_DEBUG_MASK in
>> drivers/gpu/drm/amd/include/amd_shared.h.
>> + */
>> +MODULE_PARM_DESC(dcdebugmask, "all debug options disabled (default))");
>> +module_param_named(dcdebugmask, amdgpu_dc_debug_mask, uint, 0444);
>> +
>> /**
>> * DOC: abmlevel (uint)
>> * Override the default ABM (Adaptive Backlight Management) level
>> used for DC
>> diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
>> b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
>> index 60fe64aef11b..bf347ca43064 100644
>> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
>> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
>> @@ -918,6 +918,20 @@ static int amdgpu_dm_init(struct amdgpu_device
>> *adev)
>> goto error;
>> }
>> + if (amdgpu_dc_debug_mask & DC_DISABLE_PIPE_SPLIT) {
>> + adev->dm.dc->debug.force_single_disp_pipe_split = false;
>> + adev->dm.dc->debug.pipe_split_policy = MPC_SPLIT_AVOID;
>> + }
>> +
>> + if (amdgpu_dc_debug_mask & DC_DISABLE_STUTTER)
>> + adev->dm.dc->debug.disable_stutter = true;
>> +
>> + if (amdgpu_dc_debug_mask & DC_DISABLE_DSC)
>> + adev->dm.dc->debug.disable_dsc = true;
>> +
>> + if (amdgpu_dc_debug_mask & DC_DISABLE_CLOCK_GATING)
>> + adev->dm.dc->debug.disable_clock_gate = true;
>> +
>
> Series is Reviewed-by: Nicholas Kazlauskas <nicholas.kazlauskas at amd.com>
>
> Note that we fill in device defaults during dc_create, but there are
> some debug options which we unfortunately do reference during
> dc_create() itself which would apply some options too late in the sequence.
>
> Fortunately, I don't think that's the case for any of these debug
> options, but it's something to keep in mind at least. That's what the
> init_flags were added for I think, and those generally have preference
> over debug option overrides when available (from my understanding).
>
Thanks.
dc_debug isn't provided via dc_init_data, so we can only modify dc_debug
afterwards. if dc_create uses debug options that's a bit unfortunate but
we'd probably have to address that one-by-one if it matters.
Harry
> Regards,
> Nicholas Kazlauskas
>
>> r = dm_dmub_hw_init(adev);
>> if (r) {
>> DRM_ERROR("DMUB interface failed to initialize:
>> status=%d\n", r);
>> diff --git a/drivers/gpu/drm/amd/include/amd_shared.h
>> b/drivers/gpu/drm/amd/include/amd_shared.h
>> index d655a76bedc6..92126c54cb1c 100644
>> --- a/drivers/gpu/drm/amd/include/amd_shared.h
>> +++ b/drivers/gpu/drm/amd/include/amd_shared.h
>> @@ -150,6 +150,13 @@ enum DC_FEATURE_MASK {
>> DC_PSR_MASK = 0x8,
>> };
>> +enum DC_DEBUG_MASK {
>> + DC_DISABLE_PIPE_SPLIT = 0x1,
>> + DC_DISABLE_STUTTER = 0x2,
>> + DC_DISABLE_DSC = 0x4,
>> + DC_DISABLE_CLOCK_GATING = 0x8
>> +};
>> +
>> enum amd_dpm_forced_level;
>> /**
>> * struct amd_ip_funcs - general hooks for managing amdgpu IP Blocks
>>
>
More information about the amd-gfx
mailing list