Commit fb3896c1 authored by Meenakshikumar Somasundaram's avatar Meenakshikumar Somasundaram Committed by Alex Deucher
Browse files

drm/amd/display: Add dc interface to log pre os firmware information



[Why]
Pre os firmware information is useful to debug pre os to post os fw
transition issues.

[How]
Add dc interface dc_log_preos_dmcub_info() to log pre os firmware
information.

Reviewed-by: default avatarCruise Hung <cruise.hung@amd.com>
Signed-off-by: default avatarMeenakshikumar Somasundaram <meenakshikumar.somasundaram@amd.com>
Signed-off-by: default avatarWayne Lin <wayne.lin@amd.com>
Tested-by: default avatarDan Wheeler <daniel.wheeler@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 14bb17cc
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -6401,3 +6401,8 @@ void dc_get_underflow_debug_data_for_otg(struct dc *dc, int primary_otg_inst,
	if (dc->hwss.get_underflow_debug_data)
		dc->hwss.get_underflow_debug_data(dc, tg, out_data);
}

void dc_log_preos_dmcub_info(const struct dc *dc)
{
	dc_dmub_srv_log_preos_dmcub_info(dc->ctx->dmub_srv);
}
+2 −0
Original line number Diff line number Diff line
@@ -2727,6 +2727,8 @@ unsigned int dc_get_det_buffer_size_from_state(const struct dc_state *context);

bool dc_get_host_router_index(const struct dc_link *link, unsigned int *host_router_index);

void dc_log_preos_dmcub_info(const struct dc *dc);

/* DSC Interfaces */
#include "dc_dsc.h"

+21 −0
Original line number Diff line number Diff line
@@ -2344,3 +2344,24 @@ void dc_dmub_srv_release_hw(const struct dc *dc)

	dm_execute_dmub_cmd(dc->ctx, &cmd,  DM_DMUB_WAIT_TYPE_WAIT);
}

void dc_dmub_srv_log_preos_dmcub_info(struct dc_dmub_srv *dc_dmub_srv)
{
	struct dmub_srv *dmub;

	if (!dc_dmub_srv || !dc_dmub_srv->dmub)
		return;

	dmub = dc_dmub_srv->dmub;

	if (dmub_srv_get_preos_info(dmub)) {
		DC_LOG_DEBUG("%s: PreOS DMCUB Info", __func__);
		DC_LOG_DEBUG("fw_version				: 0x%08x", dmub->preos_info.fw_version);
		DC_LOG_DEBUG("boot_options				: 0x%08x", dmub->preos_info.boot_options);
		DC_LOG_DEBUG("boot_status				: 0x%08x", dmub->preos_info.boot_status);
		DC_LOG_DEBUG("trace_buffer_phy_addr		: 0x%016llx", dmub->preos_info.trace_buffer_phy_addr);
		DC_LOG_DEBUG("trace_buffer_size_bytes	: 0x%08x", dmub->preos_info.trace_buffer_size);
		DC_LOG_DEBUG("fb_base					: 0x%016llx", dmub->preos_info.fb_base);
		DC_LOG_DEBUG("fb_offset					: 0x%016llx", dmub->preos_info.fb_offset);
	}
}
+7 −0
Original line number Diff line number Diff line
@@ -367,4 +367,11 @@ bool dc_dmub_srv_is_cursor_offload_enabled(const struct dc *dc);
 * @dc - pointer to DC object
 */
void dc_dmub_srv_release_hw(const struct dc *dc);

/**
 * dc_dmub_srv_log_preos_dmcub_info() - Logs preos dmcub fw info.
 *
 * @dc - pointer to DC object
 */
void dc_dmub_srv_log_preos_dmcub_info(struct dc_dmub_srv *dc_dmub_srv);
#endif /* _DMUB_DC_SRV_H_ */
+25 −0
Original line number Diff line number Diff line
@@ -363,6 +363,19 @@ struct dmub_diagnostic_data {
	uint8_t is_pwait : 1;
};

/**
 * struct dmub_preos_info - preos fw info before loading post os fw.
 */
struct dmub_preos_info {
	uint64_t fb_base;
	uint64_t fb_offset;
	uint64_t trace_buffer_phy_addr;
	uint32_t trace_buffer_size;
	uint32_t fw_version;
	uint32_t boot_status;
	uint32_t boot_options;
};

struct dmub_srv_inbox {
	/* generic status */
	uint64_t num_submitted;
@@ -488,6 +501,7 @@ struct dmub_srv_hw_funcs {
	uint32_t (*get_current_time)(struct dmub_srv *dmub);

	void (*get_diagnostic_data)(struct dmub_srv *dmub);
	bool (*get_preos_fw_info)(struct dmub_srv *dmub);

	bool (*should_detect)(struct dmub_srv *dmub);
	void (*init_reg_offsets)(struct dmub_srv *dmub, struct dc_context *ctx);
@@ -588,6 +602,7 @@ struct dmub_srv {
	enum dmub_srv_power_state_type power_state;
	struct dmub_diagnostic_data debug;
	struct dmub_fb lsdma_rb_fb;
	struct dmub_preos_info preos_info;
};

/**
@@ -1073,4 +1088,14 @@ enum dmub_status dmub_srv_wait_for_inbox_free(struct dmub_srv *dmub,
 */
enum dmub_status dmub_srv_update_inbox_status(struct dmub_srv *dmub);

/**
 * dmub_srv_get_preos_info() - retrieves preos fw info
 * @dmub: the dmub service
 *
 * Return:
 *   true - preos fw info retrieved successfully
 *   false - preos fw info not retrieved successfully
 */
bool dmub_srv_get_preos_info(struct dmub_srv *dmub);

#endif /* _DMUB_SRV_H_ */
Loading