drm/amd/display: Wait for mailbox ready when powering up DMCUB
authorNicholas Kazlauskas <nicholas.kazlauskas@amd.com>
Fri, 12 Jan 2024 15:06:15 +0000 (10:06 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Mon, 29 Jan 2024 20:41:36 +0000 (15:41 -0500)
[Why]
Otherwise we can send commands too early and they don't execute until
the next command is sent.

[How]
Check the extra status bit when polling for HW powered up.

Reviewed-by: Charlene Liu <charlene.liu@amd.com>
Acked-by: Tom Chung <chiahsuan.chung@amd.com>
Signed-off-by: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com>
Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/dmub/src/dmub_srv.c

index 71eee58..569c2a2 100644 (file)
@@ -791,11 +791,20 @@ enum dmub_status dmub_srv_cmd_execute(struct dmub_srv *dmub)
 
 bool dmub_srv_is_hw_pwr_up(struct dmub_srv *dmub)
 {
+       union dmub_fw_boot_status status;
+
        if (!dmub->hw_funcs.is_hw_powered_up)
                return true;
 
-       return dmub->hw_funcs.is_hw_powered_up(dmub) &&
-               dmub->hw_funcs.is_hw_init(dmub);
+       if (!dmub->hw_funcs.is_hw_powered_up(dmub))
+               return false;
+
+       if (!dmub->hw_funcs.is_hw_init(dmub))
+               return false;
+
+       status = dmub->hw_funcs.get_fw_status(dmub);
+
+       return status.bits.dal_fw && status.bits.mailbox_rdy;
 }
 
 enum dmub_status dmub_srv_wait_for_hw_pwr_up(struct dmub_srv *dmub,