On 9/21/26 10:33, Mario Limonciello wrote:


On 9/21/26 05:41, Timur Kristóf wrote:
DCE6 should use legacy fast updates, just like all DCE8 - DCN2.

Technically DCE6 should have been included when the fast update
code was refactored, but it just happened to work until now.

A recent commit "Attach only plane updates that actually changed"
has exposed this issue because with that commit, DC accidentally
took the new fast update code path for DCE6 as well, which caused
it to boot into a black screen with a flip done timeout.

This fix should be backported to all kernel versions that
have "Refactor fast update to use new HWSS build sequence",
but this patch won't apply cleanly to older kernels due to
another refactor in "Remove dc param from check_update".

Fixes: 0baae6246307 ("drm/amd/display: Refactor fast update to use new HWSS build sequence") Fixes: 9ec11bb842b6 ("drm/amd/display: Remove dc param from check_update")
Signed-off-by: Timur Kristóf <[email protected]>
Reviewed-by: Mario Limonciello <[email protected]>> ---
  .../drm/amd/display/dc/resource/dce60/dce60_resource.c    | 8 ++++++++
  1 file changed, 8 insertions(+)

diff --git a/drivers/gpu/drm/amd/display/dc/resource/dce60/ dce60_resource.c b/drivers/gpu/drm/amd/display/dc/resource/dce60/ dce60_resource.c
index d2d56a1c4b8b..f4efa55952f3 100644
--- a/drivers/gpu/drm/amd/display/dc/resource/dce60/dce60_resource.c
+++ b/drivers/gpu/drm/amd/display/dc/resource/dce60/dce60_resource.c
@@ -448,6 +448,12 @@ static const struct dce_abm_mask abm_mask = {
          ABM_MASK_SH_LIST_DCE110(_MASK)
  };
+static const struct dc_debug_options debug_defaults = { 0 };
+
+static const struct dc_check_config config_defaults = {
+    .enable_legacy_fast_update = true,
+};
+
  #define CTX  ctx
  #define REG(reg) mm ## reg
@@ -937,6 +943,8 @@ static bool dce60_construct(
      dc->caps.max_cursor_size = 64;
      dc->caps.dual_link_dvi = true;
      dc->caps.extended_aux_timeout_support = false;
+    dc->debug = debug_defaults;
+    dc->check_config = config_defaults;
      /*************************************************
       *  Create resources                             *


I would be remiss not to share something the code-review agent flagged when testing this for merge.

---
Incomplete fix: this is only dce60_construct(), which dc_create_resource_pool() uses for DCE_VERSION_6_0 (Tahiti / Pitcairn / Cape Verde) only.

dce60_resource.c has two more constructors that are reached for the other SI parts (see resource_parse_asic_id() in core/dc_resource.c:150-158):

dce61_construct() (line 1120) -> DCE_VERSION_6_1 (Hainan)
dce64_construct() (line 1318) -> DCE_VERSION_6_4 (Oland)
Neither gets dc->check_config assigned, so enable_legacy_fast_update stays false there (dc is kvzalloc'd in dc_create()), and both keep taking the new fast-update path that ac8349780c5d exposes. They should hit exactly the same black screen / flip-done timeout this patch is fixing, since all three share dce60_hw_sequencer_construct() and dce60_res_pool_funcs.

Suggest adding the same two lines to both, e.g. after dc->caps.is_apu = true; at line 1144 (dce61) and line 1342 (dce64):

dc->debug = debug_defaults;
dc->check_config = config_defaults;
---

I'll hold up the merge to decide what to do (we can just have a v2 if you want).

Reply via email to