[PATCH 02/18] drm/amd/display: Create one virtual connector in DC

Harry Wentland harry.wentland at amd.com
Thu Aug 17 14:07:00 UTC 2023



On 2023-08-17 09:58, Alex Deucher wrote:
> On Thu, Aug 17, 2023 at 8:45 AM Alex Hung <alex.hung at amd.com> wrote:
>>
>> From: Harry Wentland <harry.wentland at amd.com>
>>
>> [WHAT]
>> Prepare a virtual connector for writeback.
> 
> I presume the main point of virtual connectors in DC is for writeback?
>  Would there be a case where the virtual type would be mis-interpreted
> in DC as something else?
> 

Yes, the only purpose is writeback. In theory one could also use it to
expose a virtual connector, but I'd rather keep that as is, with
amdgpu_vkms handling it.

Without DM making use of it DC shouldn't really be doing anything with
it.

Harry

> Alex
> 
>>
>> Signed-off-by: Harry Wentland <harry.wentland at amd.com>
>> Signed-off-by: Alex Hung <alex.hung at amd.com>
>> ---
>>  drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c  | 11 +++++++++--
>>  drivers/gpu/drm/amd/display/dc/dcn31/dcn31_hwseq.c |  3 ++-
>>  2 files changed, 11 insertions(+), 3 deletions(-)
>>
>> 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 b1245b732cc9..00254fdfa1f7 100644
>> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
>> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
>> @@ -1675,6 +1675,10 @@ static int amdgpu_dm_init(struct amdgpu_device *adev)
>>         init_data.dcn_reg_offsets = adev->reg_offset[DCE_HWIP][0];
>>         init_data.nbio_reg_offsets = adev->reg_offset[NBIO_HWIP][0];
>>
>> +       /* Enable DWB for tested platforms only */
>> +       if (adev->ip_versions[DCE_HWIP][0] >= IP_VERSION(3, 0, 0))
>> +               init_data.num_virtual_links = 1;
>> +
>>         INIT_LIST_HEAD(&adev->dm.da_list);
>>
>>         retrieve_dmi_info(&adev->dm);
>> @@ -4385,6 +4389,11 @@ static int amdgpu_dm_initialize_drm_device(struct amdgpu_device *adev)
>>                         continue;
>>                 }
>>
>> +               link = dc_get_link_at_index(dm->dc, i);
>> +
>> +               if (link->connector_signal == SIGNAL_TYPE_VIRTUAL)
>> +                       continue;
>> +
>>                 aconnector = kzalloc(sizeof(*aconnector), GFP_KERNEL);
>>                 if (!aconnector)
>>                         goto fail;
>> @@ -4403,8 +4412,6 @@ static int amdgpu_dm_initialize_drm_device(struct amdgpu_device *adev)
>>                         goto fail;
>>                 }
>>
>> -               link = dc_get_link_at_index(dm->dc, i);
>> -
>>                 if (!dc_link_detect_connection_type(link, &new_connection_type))
>>                         DRM_ERROR("KMS: Failed to detect connector\n");
>>
>> diff --git a/drivers/gpu/drm/amd/display/dc/dcn31/dcn31_hwseq.c b/drivers/gpu/drm/amd/display/dc/dcn31/dcn31_hwseq.c
>> index 2a7f47642a44..65e8504e6063 100644
>> --- a/drivers/gpu/drm/amd/display/dc/dcn31/dcn31_hwseq.c
>> +++ b/drivers/gpu/drm/amd/display/dc/dcn31/dcn31_hwseq.c
>> @@ -96,7 +96,8 @@ static void enable_memory_low_power(struct dc *dc)
>>         if (dc->debug.enable_mem_low_power.bits.vpg && dc->res_pool->stream_enc[0]->vpg->funcs->vpg_powerdown) {
>>                 // Power down VPGs
>>                 for (i = 0; i < dc->res_pool->stream_enc_count; i++)
>> -                       dc->res_pool->stream_enc[i]->vpg->funcs->vpg_powerdown(dc->res_pool->stream_enc[i]->vpg);
>> +                       if (dc->res_pool->stream_enc[i]->vpg)
>> +                               dc->res_pool->stream_enc[i]->vpg->funcs->vpg_powerdown(dc->res_pool->stream_enc[i]->vpg);
>>  #if defined(CONFIG_DRM_AMD_DC_FP)
>>                 for (i = 0; i < dc->res_pool->hpo_dp_stream_enc_count; i++)
>>                         dc->res_pool->hpo_dp_stream_enc[i]->vpg->funcs->vpg_powerdown(dc->res_pool->hpo_dp_stream_enc[i]->vpg);
>> --
>> 2.41.0
>>



More information about the amd-gfx mailing list