mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-27 12:57:53 +00:00
drm/amdgpu: add PSP RAS address query command
Convert mca address to physical address or vice versa via RAS TA. Signed-off-by: Tao Zhou <tao.zhou1@amd.com> Reviewed-by: Hawking Zhang <Hawking.Zhang@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
e4d65510e8
commit
a1eac5bd91
3 changed files with 64 additions and 0 deletions
|
@ -1782,6 +1782,31 @@ int psp_ras_trigger_error(struct psp_context *psp,
|
|||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int psp_ras_query_address(struct psp_context *psp,
|
||||
struct ta_ras_query_address_input *addr_in,
|
||||
struct ta_ras_query_address_output *addr_out)
|
||||
{
|
||||
struct ta_ras_shared_memory *ras_cmd;
|
||||
int ret;
|
||||
|
||||
if (!psp->ras_context.context.initialized)
|
||||
return -EINVAL;
|
||||
|
||||
ras_cmd = (struct ta_ras_shared_memory *)psp->ras_context.context.mem_context.shared_buf;
|
||||
memset(ras_cmd, 0, sizeof(struct ta_ras_shared_memory));
|
||||
|
||||
ras_cmd->cmd_id = TA_RAS_COMMAND__QUERY_ADDRESS;
|
||||
ras_cmd->ras_in_message.address = *addr_in;
|
||||
|
||||
ret = psp_ras_invoke(psp, ras_cmd->cmd_id);
|
||||
if (ret || ras_cmd->ras_status || psp->cmd_buf_mem->resp.status)
|
||||
return -EINVAL;
|
||||
|
||||
*addr_out = ras_cmd->ras_out_message.address;
|
||||
|
||||
return 0;
|
||||
}
|
||||
// ras end
|
||||
|
||||
// HDCP start
|
||||
|
|
|
@ -502,6 +502,9 @@ int psp_ras_enable_features(struct psp_context *psp,
|
|||
int psp_ras_trigger_error(struct psp_context *psp,
|
||||
struct ta_ras_trigger_error_input *info, uint32_t instance_mask);
|
||||
int psp_ras_terminate(struct psp_context *psp);
|
||||
int psp_ras_query_address(struct psp_context *psp,
|
||||
struct ta_ras_query_address_input *addr_in,
|
||||
struct ta_ras_query_address_output *addr_out);
|
||||
|
||||
int psp_hdcp_invoke(struct psp_context *psp, uint32_t ta_cmd_id);
|
||||
int psp_dtm_invoke(struct psp_context *psp, uint32_t ta_cmd_id);
|
||||
|
|
|
@ -36,6 +36,9 @@ enum ras_command {
|
|||
TA_RAS_COMMAND__ENABLE_FEATURES = 0,
|
||||
TA_RAS_COMMAND__DISABLE_FEATURES,
|
||||
TA_RAS_COMMAND__TRIGGER_ERROR,
|
||||
TA_RAS_COMMAND__QUERY_BLOCK_INFO,
|
||||
TA_RAS_COMMAND__QUERY_SUB_BLOCK_INFO,
|
||||
TA_RAS_COMMAND__QUERY_ADDRESS,
|
||||
};
|
||||
|
||||
enum ta_ras_status {
|
||||
|
@ -105,6 +108,11 @@ enum ta_ras_error_type {
|
|||
TA_RAS_ERROR__POISON = 8,
|
||||
};
|
||||
|
||||
enum ta_ras_address_type {
|
||||
TA_RAS_MCA_TO_PA,
|
||||
TA_RAS_PA_TO_MCA,
|
||||
};
|
||||
|
||||
/* Input/output structures for RAS commands */
|
||||
/**********************************************************/
|
||||
|
||||
|
@ -133,12 +141,38 @@ struct ta_ras_init_flags {
|
|||
uint8_t channel_dis_num;
|
||||
};
|
||||
|
||||
struct ta_ras_mca_addr {
|
||||
uint64_t err_addr;
|
||||
uint32_t ch_inst;
|
||||
uint32_t umc_inst;
|
||||
uint32_t node_inst;
|
||||
};
|
||||
|
||||
struct ta_ras_phy_addr {
|
||||
uint64_t pa;
|
||||
uint32_t bank;
|
||||
uint32_t channel_idx;
|
||||
};
|
||||
|
||||
struct ta_ras_query_address_input {
|
||||
enum ta_ras_address_type addr_type;
|
||||
struct ta_ras_mca_addr ma;
|
||||
struct ta_ras_phy_addr pa;
|
||||
};
|
||||
|
||||
struct ta_ras_output_flags {
|
||||
uint8_t ras_init_success_flag;
|
||||
uint8_t err_inject_switch_disable_flag;
|
||||
uint8_t reg_access_failure_flag;
|
||||
};
|
||||
|
||||
struct ta_ras_query_address_output {
|
||||
/* don't use the flags here */
|
||||
struct ta_ras_output_flags flags;
|
||||
struct ta_ras_mca_addr ma;
|
||||
struct ta_ras_phy_addr pa;
|
||||
};
|
||||
|
||||
/* Common input structure for RAS callbacks */
|
||||
/**********************************************************/
|
||||
union ta_ras_cmd_input {
|
||||
|
@ -146,12 +180,14 @@ union ta_ras_cmd_input {
|
|||
struct ta_ras_enable_features_input enable_features;
|
||||
struct ta_ras_disable_features_input disable_features;
|
||||
struct ta_ras_trigger_error_input trigger_error;
|
||||
struct ta_ras_query_address_input address;
|
||||
|
||||
uint32_t reserve_pad[256];
|
||||
};
|
||||
|
||||
union ta_ras_cmd_output {
|
||||
struct ta_ras_output_flags flags;
|
||||
struct ta_ras_query_address_output address;
|
||||
|
||||
uint32_t reserve_pad[256];
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue