drm/amd/display: Add support for runtime feature detection command
[Why] Add support for new fw command for runtime feature detection. [How] Driver sends command through ring buffer, and fw returns data back through this command. Signed-off-by: Wyatt Wood <wyatt.wood@amd.com> Reviewed-by: Jun Lei <Jun.Lei@amd.com> Acked-by: Eryk Brol <eryk.brol@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
42ddf36e67
commit
92f1fa0d67
|
@ -345,6 +345,9 @@ struct dmub_srv {
|
||||||
uint64_t fb_base;
|
uint64_t fb_base;
|
||||||
uint64_t fb_offset;
|
uint64_t fb_offset;
|
||||||
uint32_t psp_version;
|
uint32_t psp_version;
|
||||||
|
|
||||||
|
/* Feature capabilities reported by fw */
|
||||||
|
struct dmub_feature_caps feature_caps;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -608,6 +611,9 @@ void dmub_flush_buffer_mem(const struct dmub_fb *fb);
|
||||||
enum dmub_status dmub_srv_get_fw_boot_status(struct dmub_srv *dmub,
|
enum dmub_status dmub_srv_get_fw_boot_status(struct dmub_srv *dmub,
|
||||||
union dmub_fw_boot_status *status);
|
union dmub_fw_boot_status *status);
|
||||||
|
|
||||||
|
enum dmub_status dmub_srv_cmd_with_reply_data(struct dmub_srv *dmub,
|
||||||
|
union dmub_rb_cmd *cmd);
|
||||||
|
|
||||||
#if defined(__cplusplus)
|
#if defined(__cplusplus)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -648,3 +648,32 @@ enum dmub_status dmub_srv_get_fw_boot_status(struct dmub_srv *dmub,
|
||||||
|
|
||||||
return DMUB_STATUS_OK;
|
return DMUB_STATUS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum dmub_status dmub_srv_cmd_with_reply_data(struct dmub_srv *dmub,
|
||||||
|
union dmub_rb_cmd *cmd)
|
||||||
|
{
|
||||||
|
enum dmub_status status = DMUB_STATUS_OK;
|
||||||
|
|
||||||
|
// Queue command
|
||||||
|
status = dmub_srv_cmd_queue(dmub, cmd);
|
||||||
|
|
||||||
|
if (status != DMUB_STATUS_OK)
|
||||||
|
return status;
|
||||||
|
|
||||||
|
// Execute command
|
||||||
|
status = dmub_srv_cmd_execute(dmub);
|
||||||
|
|
||||||
|
if (status != DMUB_STATUS_OK)
|
||||||
|
return status;
|
||||||
|
|
||||||
|
// Wait for DMUB to process command
|
||||||
|
status = dmub_srv_wait_for_idle(dmub, 100000);
|
||||||
|
|
||||||
|
if (status != DMUB_STATUS_OK)
|
||||||
|
return status;
|
||||||
|
|
||||||
|
// Copy data back from ring buffer into command
|
||||||
|
dmub_rb_get_return_data(&dmub->inbox1_rb, cmd);
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue