]> www.infradead.org Git - users/willy/xarray.git/commitdiff
drm/amd/display: Fix reset sequence with driver direct DMCUB fw load
authorNicholas Kazlauskas <nicholas.kazlauskas@amd.com>
Mon, 14 Dec 2020 15:50:33 +0000 (10:50 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 20 Jan 2021 21:38:19 +0000 (16:38 -0500)
[Why]
DMCUB encounters a page fault/double exception with driver direct load
because DMCUB is not held in soft reset after releasing secure reset.

The clean shutdown sequence via GPINT is also not executed in this
sequence which leaves hardware behavior in an indeterminate state.

[How]
Move reset earlier in the sequence.

Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com>
Reviewed-by: Eric Yang <eric.yang2@amd.com>
Acked-by: Anson Jacob <anson.jacob@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/dmub/src/dmub_srv.c

index d2588b7cd325514634fe7247bc497d9aa33d2a4a..61f64a295f06aa82c4dfb6092eb3d0be295dc067 100644 (file)
@@ -406,6 +406,9 @@ enum dmub_status dmub_srv_hw_init(struct dmub_srv *dmub,
        dmub->fb_offset = params->fb_offset;
        dmub->psp_version = params->psp_version;
 
+       if (dmub->hw_funcs.reset)
+               dmub->hw_funcs.reset(dmub);
+
        if (inst_fb && data_fb) {
                cw0.offset.quad_part = inst_fb->gpu_addr;
                cw0.region.base = DMUB_CW0_BASE;
@@ -427,9 +430,6 @@ enum dmub_status dmub_srv_hw_init(struct dmub_srv *dmub,
 
        }
 
-       if (dmub->hw_funcs.reset)
-               dmub->hw_funcs.reset(dmub);
-
        if (inst_fb && data_fb && bios_fb && mail_fb && tracebuff_fb &&
            fw_state_fb && scratch_mem_fb) {
                cw2.offset.quad_part = data_fb->gpu_addr;