Commit 8b09656b authored by Samson Tam's avatar Samson Tam Committed by Alex Deucher

drm/amd/display: skip error logging when DMUB is inactive from S3

[Why]
On resume from S3, while DMUB is inactive, DMUB queue and execute
calls will not work.  Skip reporting errors in these scenarios

[How]
Add new return code during DMUB queue and execute calls when DMUB
is in S3 state. Skip logging errors in these scenarios
Reviewed-by: default avatarAlvin Lee <alvin.lee2@amd.com>
Acked-by: default avatarWayne Lin <wayne.lin@amd.com>
Signed-off-by: default avatarSamson Tam <samson.tam@amd.com>
Tested-by: default avatarDaniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 006ad514
...@@ -140,7 +140,10 @@ bool dc_dmub_srv_cmd_list_queue_execute(struct dc_dmub_srv *dc_dmub_srv, ...@@ -140,7 +140,10 @@ bool dc_dmub_srv_cmd_list_queue_execute(struct dc_dmub_srv *dc_dmub_srv,
if (status == DMUB_STATUS_QUEUE_FULL) { if (status == DMUB_STATUS_QUEUE_FULL) {
/* Execute and wait for queue to become empty again. */ /* Execute and wait for queue to become empty again. */
dmub_srv_cmd_execute(dmub); status = dmub_srv_cmd_execute(dmub);
if (status == DMUB_STATUS_POWER_STATE_D3)
return false;
dmub_srv_wait_for_idle(dmub, 100000); dmub_srv_wait_for_idle(dmub, 100000);
/* Requeue the command. */ /* Requeue the command. */
...@@ -148,16 +151,20 @@ bool dc_dmub_srv_cmd_list_queue_execute(struct dc_dmub_srv *dc_dmub_srv, ...@@ -148,16 +151,20 @@ bool dc_dmub_srv_cmd_list_queue_execute(struct dc_dmub_srv *dc_dmub_srv,
} }
if (status != DMUB_STATUS_OK) { if (status != DMUB_STATUS_OK) {
DC_ERROR("Error queueing DMUB command: status=%d\n", status); if (status != DMUB_STATUS_POWER_STATE_D3) {
dc_dmub_srv_log_diagnostic_data(dc_dmub_srv); DC_ERROR("Error queueing DMUB command: status=%d\n", status);
dc_dmub_srv_log_diagnostic_data(dc_dmub_srv);
}
return false; return false;
} }
} }
status = dmub_srv_cmd_execute(dmub); status = dmub_srv_cmd_execute(dmub);
if (status != DMUB_STATUS_OK) { if (status != DMUB_STATUS_OK) {
DC_ERROR("Error starting DMUB execution: status=%d\n", status); if (status != DMUB_STATUS_POWER_STATE_D3) {
dc_dmub_srv_log_diagnostic_data(dc_dmub_srv); DC_ERROR("Error starting DMUB execution: status=%d\n", status);
dc_dmub_srv_log_diagnostic_data(dc_dmub_srv);
}
return false; return false;
} }
...@@ -218,7 +225,10 @@ bool dc_dmub_srv_cmd_run_list(struct dc_dmub_srv *dc_dmub_srv, unsigned int coun ...@@ -218,7 +225,10 @@ bool dc_dmub_srv_cmd_run_list(struct dc_dmub_srv *dc_dmub_srv, unsigned int coun
if (status == DMUB_STATUS_QUEUE_FULL) { if (status == DMUB_STATUS_QUEUE_FULL) {
/* Execute and wait for queue to become empty again. */ /* Execute and wait for queue to become empty again. */
dmub_srv_cmd_execute(dmub); status = dmub_srv_cmd_execute(dmub);
if (status == DMUB_STATUS_POWER_STATE_D3)
return false;
dmub_srv_wait_for_idle(dmub, 100000); dmub_srv_wait_for_idle(dmub, 100000);
/* Requeue the command. */ /* Requeue the command. */
...@@ -226,16 +236,20 @@ bool dc_dmub_srv_cmd_run_list(struct dc_dmub_srv *dc_dmub_srv, unsigned int coun ...@@ -226,16 +236,20 @@ bool dc_dmub_srv_cmd_run_list(struct dc_dmub_srv *dc_dmub_srv, unsigned int coun
} }
if (status != DMUB_STATUS_OK) { if (status != DMUB_STATUS_OK) {
DC_ERROR("Error queueing DMUB command: status=%d\n", status); if (status != DMUB_STATUS_POWER_STATE_D3) {
dc_dmub_srv_log_diagnostic_data(dc_dmub_srv); DC_ERROR("Error queueing DMUB command: status=%d\n", status);
dc_dmub_srv_log_diagnostic_data(dc_dmub_srv);
}
return false; return false;
} }
} }
status = dmub_srv_cmd_execute(dmub); status = dmub_srv_cmd_execute(dmub);
if (status != DMUB_STATUS_OK) { if (status != DMUB_STATUS_OK) {
DC_ERROR("Error starting DMUB execution: status=%d\n", status); if (status != DMUB_STATUS_POWER_STATE_D3) {
dc_dmub_srv_log_diagnostic_data(dc_dmub_srv); DC_ERROR("Error starting DMUB execution: status=%d\n", status);
dc_dmub_srv_log_diagnostic_data(dc_dmub_srv);
}
return false; return false;
} }
......
...@@ -86,6 +86,7 @@ enum dmub_status { ...@@ -86,6 +86,7 @@ enum dmub_status {
DMUB_STATUS_TIMEOUT, DMUB_STATUS_TIMEOUT,
DMUB_STATUS_INVALID, DMUB_STATUS_INVALID,
DMUB_STATUS_HW_FAILURE, DMUB_STATUS_HW_FAILURE,
DMUB_STATUS_POWER_STATE_D3
}; };
/* enum dmub_asic - dmub asic identifier */ /* enum dmub_asic - dmub asic identifier */
......
...@@ -768,7 +768,7 @@ enum dmub_status dmub_srv_cmd_queue(struct dmub_srv *dmub, ...@@ -768,7 +768,7 @@ enum dmub_status dmub_srv_cmd_queue(struct dmub_srv *dmub,
return DMUB_STATUS_INVALID; return DMUB_STATUS_INVALID;
if (dmub->power_state != DMUB_POWER_STATE_D0) if (dmub->power_state != DMUB_POWER_STATE_D0)
return DMUB_STATUS_INVALID; return DMUB_STATUS_POWER_STATE_D3;
if (dmub->inbox1_rb.rptr > dmub->inbox1_rb.capacity || if (dmub->inbox1_rb.rptr > dmub->inbox1_rb.capacity ||
dmub->inbox1_rb.wrpt > dmub->inbox1_rb.capacity) { dmub->inbox1_rb.wrpt > dmub->inbox1_rb.capacity) {
...@@ -789,7 +789,7 @@ enum dmub_status dmub_srv_cmd_execute(struct dmub_srv *dmub) ...@@ -789,7 +789,7 @@ enum dmub_status dmub_srv_cmd_execute(struct dmub_srv *dmub)
return DMUB_STATUS_INVALID; return DMUB_STATUS_INVALID;
if (dmub->power_state != DMUB_POWER_STATE_D0) if (dmub->power_state != DMUB_POWER_STATE_D0)
return DMUB_STATUS_INVALID; return DMUB_STATUS_POWER_STATE_D3;
/** /**
* Read back all the queued commands to ensure that they've * Read back all the queued commands to ensure that they've
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment