drm/amd/display: Create one virtual connector in DC
authorHarry Wentland <harry.wentland@amd.com>
Fri, 1 Dec 2023 13:25:23 +0000 (06:25 -0700)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 6 Dec 2023 20:22:34 +0000 (15:22 -0500)
[WHAT]
Prepare a virtual connector for writeback.

Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Reviewed-by: Alex Hung <alex.hung@amd.com>
Signed-off-by: Harry Wentland <harry.wentland@amd.com>
Signed-off-by: Alex Hung <alex.hung@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
drivers/gpu/drm/amd/display/dc/hwss/dcn31/dcn31_hwseq.c

index bc7b8a3253538121b64480a4e0b3a86a6c69ed62..9b791e3f7e3313224b7bdc5ed2be570d50f82170 100644 (file)
@@ -1675,6 +1675,10 @@ static int amdgpu_dm_init(struct amdgpu_device *adev)
        init_data.nbio_reg_offsets = adev->reg_offset[NBIO_HWIP][0];
        init_data.clk_reg_offsets = adev->reg_offset[CLK_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);
@@ -4465,6 +4469,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;
@@ -4483,8 +4492,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");
 
index 97798cee876e2ec903aeb5777000910319d4dc7d..5d62805f3bdf6106d26e3c3a5cdf3e3438e8b89e 100644 (file)
@@ -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);