Commit 71ba6b57 authored by Stylon Wang's avatar Stylon Wang Committed by Alex Deucher

drm/amd/display: Add interface to enable DPIA trace

[Why]
DPIA traces from DMUB is not enabled by default, which is
less convenient to debug DPIA related issues because we have
to resort to other debug tools to enable DPIA trace.

[How]
Exposes interfaces to update trace mask from the DMUB GPINT commands.
Also provides DC implementations to enable DPIA trace.
Reviewed-by: default avatarAurabindo Pillai <aurabindo.pillai@amd.com>
Acked-by: default avatarTom Chung <chiahsuan.chung@amd.com>
Signed-off-by: default avatarStylon Wang <stylon.wang@amd.com>
Tested-by: default avatarDaniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent f77d1a49
...@@ -1021,3 +1021,32 @@ bool dc_dmub_check_min_version(struct dmub_srv *srv) ...@@ -1021,3 +1021,32 @@ bool dc_dmub_check_min_version(struct dmub_srv *srv)
return true; return true;
return srv->hw_funcs.is_psrsu_supported(srv); return srv->hw_funcs.is_psrsu_supported(srv);
} }
void dc_dmub_srv_enable_dpia_trace(const struct dc *dc)
{
struct dc_dmub_srv *dc_dmub_srv = dc->ctx->dmub_srv;
struct dmub_srv *dmub;
enum dmub_status status;
static const uint32_t timeout_us = 30;
if (!dc_dmub_srv || !dc_dmub_srv->dmub) {
DC_LOG_ERROR("%s: invalid parameters.", __func__);
return;
}
dmub = dc_dmub_srv->dmub;
status = dmub_srv_send_gpint_command(dmub, DMUB_GPINT__SET_TRACE_BUFFER_MASK_WORD1, 0x0010, timeout_us);
if (status != DMUB_STATUS_OK) {
DC_LOG_ERROR("timeout updating trace buffer mask word\n");
return;
}
status = dmub_srv_send_gpint_command(dmub, DMUB_GPINT__UPDATE_TRACE_BUFFER_MASK, 0x0000, timeout_us);
if (status != DMUB_STATUS_OK) {
DC_LOG_ERROR("timeout updating trace buffer mask word\n");
return;
}
DC_LOG_DEBUG("Enabled DPIA trace\n");
}
\ No newline at end of file
...@@ -87,4 +87,7 @@ void dc_dmub_srv_log_diagnostic_data(struct dc_dmub_srv *dc_dmub_srv); ...@@ -87,4 +87,7 @@ void dc_dmub_srv_log_diagnostic_data(struct dc_dmub_srv *dc_dmub_srv);
void dc_send_update_cursor_info_to_dmu(struct pipe_ctx *pCtx, uint8_t pipe_idx); void dc_send_update_cursor_info_to_dmu(struct pipe_ctx *pCtx, uint8_t pipe_idx);
bool dc_dmub_check_min_version(struct dmub_srv *srv); bool dc_dmub_check_min_version(struct dmub_srv *srv);
void dc_dmub_srv_enable_dpia_trace(const struct dc *dc);
#endif /* _DMUB_DC_SRV_H_ */ #endif /* _DMUB_DC_SRV_H_ */
...@@ -779,6 +779,24 @@ enum dmub_gpint_command { ...@@ -779,6 +779,24 @@ enum dmub_gpint_command {
* DESC: Notifies DMCUB detection is done so detection required can be cleared. * DESC: Notifies DMCUB detection is done so detection required can be cleared.
*/ */
DMUB_GPINT__NOTIFY_DETECTION_DONE = 12, DMUB_GPINT__NOTIFY_DETECTION_DONE = 12,
/**
* DESC: Updates the trace buffer lower 32-bit mask.
* ARGS: The new mask
* RETURN: Lower 32-bit mask.
*/
DMUB_GPINT__UPDATE_TRACE_BUFFER_MASK = 101,
/**
* DESC: Updates the trace buffer lower 32-bit mask.
* ARGS: The new mask
* RETURN: Lower 32-bit mask.
*/
DMUB_GPINT__SET_TRACE_BUFFER_MASK_WORD0 = 102,
/**
* DESC: Updates the trace buffer mask bi0~bit15.
* ARGS: The new mask
* RETURN: Lower 32-bit mask.
*/
DMUB_GPINT__SET_TRACE_BUFFER_MASK_WORD1 = 103,
}; };
/** /**
......
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