<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0in;
font-size:11.0pt;
font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
{mso-style-priority:99;
color:#0563C1;
text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
{mso-style-priority:99;
color:#954F72;
text-decoration:underline;}
p.msonormal0, li.msonormal0, div.msonormal0
{mso-style-name:msonormal;
mso-margin-top-alt:auto;
margin-right:0in;
mso-margin-bottom-alt:auto;
margin-left:0in;
font-size:11.0pt;
font-family:"Calibri",sans-serif;}
p.msipheaderc10f11a2, li.msipheaderc10f11a2, div.msipheaderc10f11a2
{mso-style-name:msipheaderc10f11a2;
mso-margin-top-alt:auto;
margin-right:0in;
mso-margin-bottom-alt:auto;
margin-left:0in;
font-size:11.0pt;
font-family:"Calibri",sans-serif;}
span.EmailStyle19
{mso-style-type:personal;
font-family:"Calibri",sans-serif;
color:windowtext;}
span.EmailStyle20
{mso-style-type:personal-reply;
font-family:"Calibri",sans-serif;
color:windowtext;}
.MsoChpDefault
{mso-style-type:export-only;
font-size:10.0pt;}
@page WordSection1
{size:8.5in 11.0in;
margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
{page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="#0563C1" vlink="#954F72" style="word-wrap:break-word">
<div class="WordSection1">
<p class="msipheaderc10f11a2" style="margin:0in"><span style="font-size:10.0pt;font-family:"Arial",sans-serif;color:green">[Public]</span><o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Reviewed-by: John Clements <john.clements@amd.com><o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b>From:</b> Li, Candice <Candice.Li@amd.com> <br>
<b>Sent:</b> Friday, August 13, 2021 3:22 PM<br>
<b>To:</b> amd-gfx@lists.freedesktop.org<br>
<b>Cc:</b> Clements, John <John.Clements@amd.com>; Li, Candice <Candice.Li@amd.com><br>
<b>Subject:</b> [PATCH] drm/amd/amdgpu: consolidate PSP TA context<o:p></o:p></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="msipheaderc10f11a2" style="margin:0in"><span style="font-size:10.0pt;font-family:"Arial",sans-serif;color:green">[Public]</span><o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Signed-off-by: Candice Li <a href="mailto:candice.li@amd.com">
candice.li@amd.com</a><o:p></o:p></p>
<p class="MsoNormal">---<o:p></o:p></p>
<p class="MsoNormal">drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c | 16 +--<o:p></o:p></p>
<p class="MsoNormal">drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c | 162 +++++++++++-----------<o:p></o:p></p>
<p class="MsoNormal">drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h | 37 ++---<o:p></o:p></p>
<p class="MsoNormal">drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c | 2 +-<o:p></o:p></p>
<p class="MsoNormal">drivers/gpu/drm/amd/amdgpu/amdgpu_ras.h | 4 +-<o:p></o:p></p>
<p class="MsoNormal">drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c | 6 +-<o:p></o:p></p>
<p class="MsoNormal">drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h | 20 +--<o:p></o:p></p>
<p class="MsoNormal">drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c | 6 +-<o:p></o:p></p>
<p class="MsoNormal">drivers/gpu/drm/amd/amdgpu/psp_v10_0.c | 40 +++---<o:p></o:p></p>
<p class="MsoNormal">drivers/gpu/drm/amd/amdgpu/psp_v11_0.c | 28 ++--<o:p></o:p></p>
<p class="MsoNormal">drivers/gpu/drm/amd/amdgpu/psp_v12_0.c | 24 ++--<o:p></o:p></p>
<p class="MsoNormal">11 files changed, 158 insertions(+), 187 deletions(-)<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c<o:p></o:p></p>
<p class="MsoNormal">index 20b049ad61c1..7e45640fbee0 100644<o:p></o:p></p>
<p class="MsoNormal">--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c<o:p></o:p></p>
<p class="MsoNormal">+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c<o:p></o:p></p>
<p class="MsoNormal">@@ -341,27 +341,27 @@ static int amdgpu_firmware_info(struct drm_amdgpu_info_firmware *fw_info,<o:p></o:p></p>
<p class="MsoNormal"> switch (query_fw->index) {<o:p></o:p></p>
<p class="MsoNormal"> case TA_FW_TYPE_PSP_XGMI:<o:p></o:p></p>
<p class="MsoNormal"> fw_info->ver = adev->psp.ta_fw_version;<o:p></o:p></p>
<p class="MsoNormal">- fw_info->feature = adev->psp.ta_xgmi_ucode_version;<o:p></o:p></p>
<p class="MsoNormal">+ fw_info->feature = adev->psp.xgmi.feature_version;<o:p></o:p></p>
<p class="MsoNormal"> break;<o:p></o:p></p>
<p class="MsoNormal"> case TA_FW_TYPE_PSP_RAS:<o:p></o:p></p>
<p class="MsoNormal"> fw_info->ver = adev->psp.ta_fw_version;<o:p></o:p></p>
<p class="MsoNormal">- fw_info->feature = adev->psp.ta_ras_ucode_version;<o:p></o:p></p>
<p class="MsoNormal">+ fw_info->feature = adev->psp.ras.feature_version;<o:p></o:p></p>
<p class="MsoNormal"> break;<o:p></o:p></p>
<p class="MsoNormal"> case TA_FW_TYPE_PSP_HDCP:<o:p></o:p></p>
<p class="MsoNormal"> fw_info->ver = adev->psp.ta_fw_version;<o:p></o:p></p>
<p class="MsoNormal">- fw_info->feature = adev->psp.ta_hdcp_ucode_version;<o:p></o:p></p>
<p class="MsoNormal">+ fw_info->feature = adev->psp.hdcp.feature_version;<o:p></o:p></p>
<p class="MsoNormal"> break;<o:p></o:p></p>
<p class="MsoNormal"> case TA_FW_TYPE_PSP_DTM:<o:p></o:p></p>
<p class="MsoNormal"> fw_info->ver = adev->psp.ta_fw_version;<o:p></o:p></p>
<p class="MsoNormal">- fw_info->feature = adev->psp.ta_dtm_ucode_version;<o:p></o:p></p>
<p class="MsoNormal">+ fw_info->feature = adev->psp.dtm.feature_version;<o:p></o:p></p>
<p class="MsoNormal"> break;<o:p></o:p></p>
<p class="MsoNormal"> case TA_FW_TYPE_PSP_RAP:<o:p></o:p></p>
<p class="MsoNormal"> fw_info->ver = adev->psp.ta_fw_version;<o:p></o:p></p>
<p class="MsoNormal">- fw_info->feature = adev->psp.ta_rap_ucode_version;<o:p></o:p></p>
<p class="MsoNormal">+ fw_info->feature = adev->psp.rap.feature_version;<o:p></o:p></p>
<p class="MsoNormal"> break;<o:p></o:p></p>
<p class="MsoNormal"> case TA_FW_TYPE_PSP_SECUREDISPLAY:<o:p></o:p></p>
<p class="MsoNormal"> fw_info->ver = adev->psp.ta_fw_version;<o:p></o:p></p>
<p class="MsoNormal">- fw_info->feature = adev->psp.ta_securedisplay_ucode_version;<o:p></o:p></p>
<p class="MsoNormal">+ fw_info->feature = adev->psp.securedisplay.feature_version;<o:p></o:p></p>
<p class="MsoNormal"> break;<o:p></o:p></p>
<p class="MsoNormal"> default:<o:p></o:p></p>
<p class="MsoNormal"> return -EINVAL;<o:p></o:p></p>
<p class="MsoNormal">@@ -378,8 +378,8 @@ static int amdgpu_firmware_info(struct drm_amdgpu_info_firmware *fw_info,<o:p></o:p></p>
<p class="MsoNormal"> fw_info->feature = adev->psp.sos.feature_version;<o:p></o:p></p>
<p class="MsoNormal"> break;<o:p></o:p></p>
<p class="MsoNormal"> case AMDGPU_INFO_FW_ASD:<o:p></o:p></p>
<p class="MsoNormal">- fw_info->ver = adev->psp.asd_fw_version;<o:p></o:p></p>
<p class="MsoNormal">- fw_info->feature = adev->psp.asd_feature_version;<o:p></o:p></p>
<p class="MsoNormal">+ fw_info->ver = adev->psp.asd.fw_version;<o:p></o:p></p>
<p class="MsoNormal">+ fw_info->feature = adev->psp.asd.feature_version;<o:p></o:p></p>
<p class="MsoNormal"> break;<o:p></o:p></p>
<p class="MsoNormal"> case AMDGPU_INFO_FW_DMCU:<o:p></o:p></p>
<p class="MsoNormal"> fw_info->ver = adev->dm.dmcu_fw_version;<o:p></o:p></p>
<p class="MsoNormal">diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c<o:p></o:p></p>
<p class="MsoNormal">index 9dc2d6d9712a..cf40609f39d4 100644<o:p></o:p></p>
<p class="MsoNormal">--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c<o:p></o:p></p>
<p class="MsoNormal">+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c<o:p></o:p></p>
<p class="MsoNormal">@@ -799,15 +799,15 @@ static int psp_asd_load(struct psp_context *psp)<o:p></o:p></p>
<p class="MsoNormal"> * add workaround to bypass it for sriov now.<o:p></o:p></p>
<p class="MsoNormal"> * TODO: add version check to make it common<o:p></o:p></p>
<p class="MsoNormal"> */<o:p></o:p></p>
<p class="MsoNormal">- if (amdgpu_sriov_vf(psp->adev) || !psp->asd_ucode_size)<o:p></o:p></p>
<p class="MsoNormal">+ if (amdgpu_sriov_vf(psp->adev) || !psp->asd.size_bytes)<o:p></o:p></p>
<p class="MsoNormal"> return 0;<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> cmd = acquire_psp_cmd_buf(psp);<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">- psp_copy_fw(psp, psp->asd_start_addr, psp->asd_ucode_size);<o:p></o:p></p>
<p class="MsoNormal">+ psp_copy_fw(psp, psp->asd.start_addr, psp->asd.size_bytes);<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> psp_prep_asd_load_cmd_buf(cmd, psp->fw_pri_mc_addr,<o:p></o:p></p>
<p class="MsoNormal">- psp->asd_ucode_size);<o:p></o:p></p>
<p class="MsoNormal">+ psp->asd.size_bytes);<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> ret = psp_cmd_submit_buf(psp, NULL, cmd,<o:p></o:p></p>
<p class="MsoNormal"> psp->fence_buf_mc_addr);<o:p></o:p></p>
<p class="MsoNormal">@@ -952,11 +952,11 @@ static int psp_xgmi_load(struct psp_context *psp)<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> cmd = acquire_psp_cmd_buf(psp);<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">- psp_copy_fw(psp, psp->ta_xgmi_start_addr, psp->ta_xgmi_ucode_size);<o:p></o:p></p>
<p class="MsoNormal">+ psp_copy_fw(psp, psp->xgmi.start_addr, psp->xgmi.size_bytes);<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> psp_prep_ta_load_cmd_buf(cmd,<o:p></o:p></p>
<p class="MsoNormal"> psp->fw_pri_mc_addr,<o:p></o:p></p>
<p class="MsoNormal">- psp->ta_xgmi_ucode_size,<o:p></o:p></p>
<p class="MsoNormal">+ psp->xgmi.size_bytes,<o:p></o:p></p>
<p class="MsoNormal"> psp->xgmi_context.xgmi_shared_mc_addr,<o:p></o:p></p>
<p class="MsoNormal"> PSP_XGMI_SHARED_MEM_SIZE);<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">@@ -1031,9 +1031,9 @@ int psp_xgmi_initialize(struct psp_context *psp)<o:p></o:p></p>
<p class="MsoNormal"> struct ta_xgmi_shared_memory *xgmi_cmd;<o:p></o:p></p>
<p class="MsoNormal"> int ret;<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">- if (!psp->adev->psp.ta_fw ||<o:p></o:p></p>
<p class="MsoNormal">- !psp->adev->psp.ta_xgmi_ucode_size ||<o:p></o:p></p>
<p class="MsoNormal">- !psp->adev->psp.ta_xgmi_start_addr)<o:p></o:p></p>
<p class="MsoNormal">+ if (!psp->ta_fw ||<o:p></o:p></p>
<p class="MsoNormal">+ !psp->xgmi.size_bytes ||<o:p></o:p></p>
<p class="MsoNormal">+ !psp->xgmi.start_addr)<o:p></o:p></p>
<p class="MsoNormal"> return -ENOENT;<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> if (!psp->xgmi_context.initialized) {<o:p></o:p></p>
<p class="MsoNormal">@@ -1100,7 +1100,7 @@ int psp_xgmi_get_node_id(struct psp_context *psp, uint64_t *node_id)<o:p></o:p></p>
<p class="MsoNormal">static bool psp_xgmi_peer_link_info_supported(struct psp_context *psp)<o:p></o:p></p>
<p class="MsoNormal">{<o:p></o:p></p>
<p class="MsoNormal"> return psp->adev->asic_type == CHIP_ALDEBARAN &&<o:p></o:p></p>
<p class="MsoNormal">- psp->ta_xgmi_ucode_version >= 0x2000000b;<o:p></o:p></p>
<p class="MsoNormal">+ psp->xgmi.feature_version >= 0x2000000b;<o:p></o:p></p>
<p class="MsoNormal">}<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> int psp_xgmi_get_topology_info(struct psp_context *psp,<o:p></o:p></p>
<p class="MsoNormal">@@ -1206,9 +1206,9 @@ static int psp_ras_init_shared_buf(struct psp_context *psp)<o:p></o:p></p>
<p class="MsoNormal"> */<o:p></o:p></p>
<p class="MsoNormal"> ret = amdgpu_bo_create_kernel(psp->adev, PSP_RAS_SHARED_MEM_SIZE,<o:p></o:p></p>
<p class="MsoNormal"> PAGE_SIZE, AMDGPU_GEM_DOMAIN_VRAM,<o:p></o:p></p>
<p class="MsoNormal">- &psp->ras.ras_shared_bo,<o:p></o:p></p>
<p class="MsoNormal">- &psp->ras.ras_shared_mc_addr,<o:p></o:p></p>
<p class="MsoNormal">- &psp->ras.ras_shared_buf);<o:p></o:p></p>
<p class="MsoNormal">+ &psp->ras_context.ras_shared_bo,<o:p></o:p></p>
<p class="MsoNormal">+ &psp->ras_context.ras_shared_mc_addr,<o:p></o:p></p>
<p class="MsoNormal">+ &psp->ras_context.ras_shared_buf);<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> return ret;<o:p></o:p></p>
<p class="MsoNormal">}<o:p></o:p></p>
<p class="MsoNormal">@@ -1225,9 +1225,9 @@ static int psp_ras_load(struct psp_context *psp)<o:p></o:p></p>
<p class="MsoNormal"> if (amdgpu_sriov_vf(psp->adev))<o:p></o:p></p>
<p class="MsoNormal"> return 0;<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">- psp_copy_fw(psp, psp->ta_ras_start_addr, psp->ta_ras_ucode_size);<o:p></o:p></p>
<p class="MsoNormal">+ psp_copy_fw(psp, psp->ras.start_addr, psp->ras.size_bytes);<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">- ras_cmd = (struct ta_ras_shared_memory *)psp->ras.ras_shared_buf;<o:p></o:p></p>
<p class="MsoNormal">+ ras_cmd = (struct ta_ras_shared_memory *)psp->ras_context.ras_shared_buf;<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> if (psp->adev->gmc.xgmi.connected_to_cpu)<o:p></o:p></p>
<p class="MsoNormal"> ras_cmd->ras_in_message.init_flags.poison_mode_en = 1;<o:p></o:p></p>
<p class="MsoNormal">@@ -1238,18 +1238,18 @@ static int psp_ras_load(struct psp_context *psp)<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> psp_prep_ta_load_cmd_buf(cmd,<o:p></o:p></p>
<p class="MsoNormal"> psp->fw_pri_mc_addr,<o:p></o:p></p>
<p class="MsoNormal">- psp->ta_ras_ucode_size,<o:p></o:p></p>
<p class="MsoNormal">- psp->ras.ras_shared_mc_addr,<o:p></o:p></p>
<p class="MsoNormal">+ psp->ras.size_bytes,<o:p></o:p></p>
<p class="MsoNormal">+ psp->ras_context.ras_shared_mc_addr,<o:p></o:p></p>
<p class="MsoNormal"> PSP_RAS_SHARED_MEM_SIZE);<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> ret = psp_cmd_submit_buf(psp, NULL, cmd,<o:p></o:p></p>
<p class="MsoNormal"> psp->fence_buf_mc_addr);<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> if (!ret) {<o:p></o:p></p>
<p class="MsoNormal">- psp->ras.session_id = cmd->resp.session_id;<o:p></o:p></p>
<p class="MsoNormal">+ psp->ras_context.session_id = cmd->resp.session_id;<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> if (!ras_cmd->ras_status)<o:p></o:p></p>
<p class="MsoNormal">- psp->ras.ras_initialized = true;<o:p></o:p></p>
<p class="MsoNormal">+ psp->ras_context.ras_initialized = true;<o:p></o:p></p>
<p class="MsoNormal"> else<o:p></o:p></p>
<p class="MsoNormal"> dev_warn(psp->adev->dev, "RAS Init Status: 0x%X\n", ras_cmd->ras_status);<o:p></o:p></p>
<p class="MsoNormal"> }<o:p></o:p></p>
<p class="MsoNormal">@@ -1275,7 +1275,7 @@ static int psp_ras_unload(struct psp_context *psp)<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> cmd = acquire_psp_cmd_buf(psp);<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">- psp_prep_ta_unload_cmd_buf(cmd, psp->ras.session_id);<o:p></o:p></p>
<p class="MsoNormal">+ psp_prep_ta_unload_cmd_buf(cmd, psp->ras_context.session_id);<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> ret = psp_cmd_submit_buf(psp, NULL, cmd,<o:p></o:p></p>
<p class="MsoNormal"> psp->fence_buf_mc_addr);<o:p></o:p></p>
<p class="MsoNormal">@@ -1290,7 +1290,7 @@ int psp_ras_invoke(struct psp_context *psp, uint32_t ta_cmd_id)<o:p></o:p></p>
<p class="MsoNormal"> struct ta_ras_shared_memory *ras_cmd;<o:p></o:p></p>
<p class="MsoNormal"> int ret;<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">- ras_cmd = (struct ta_ras_shared_memory *)psp->ras.ras_shared_buf;<o:p></o:p></p>
<p class="MsoNormal">+ ras_cmd = (struct ta_ras_shared_memory *)psp->ras_context.ras_shared_buf;<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> /*<o:p></o:p></p>
<p class="MsoNormal"> * TODO: bypass the loading in sriov for now<o:p></o:p></p>
<p class="MsoNormal">@@ -1298,7 +1298,7 @@ int psp_ras_invoke(struct psp_context *psp, uint32_t ta_cmd_id)<o:p></o:p></p>
<p class="MsoNormal"> if (amdgpu_sriov_vf(psp->adev))<o:p></o:p></p>
<p class="MsoNormal"> return 0;<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">- ret = psp_ta_invoke(psp, ta_cmd_id, psp->ras.session_id);<o:p></o:p></p>
<p class="MsoNormal">+ ret = psp_ta_invoke(psp, ta_cmd_id, psp->ras_context.session_id);<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> if (amdgpu_ras_intr_triggered())<o:p></o:p></p>
<p class="MsoNormal"> return ret;<o:p></o:p></p>
<p class="MsoNormal">@@ -1354,10 +1354,10 @@ int psp_ras_enable_features(struct psp_context *psp,<o:p></o:p></p>
<p class="MsoNormal"> struct ta_ras_shared_memory *ras_cmd;<o:p></o:p></p>
<p class="MsoNormal"> int ret;<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">- if (!psp->ras.ras_initialized)<o:p></o:p></p>
<p class="MsoNormal">+ if (!psp->ras_context.ras_initialized)<o:p></o:p></p>
<p class="MsoNormal"> return -EINVAL;<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">- ras_cmd = (struct ta_ras_shared_memory *)psp->ras.ras_shared_buf;<o:p></o:p></p>
<p class="MsoNormal">+ ras_cmd = (struct ta_ras_shared_memory *)psp->ras_context.ras_shared_buf;<o:p></o:p></p>
<p class="MsoNormal"> memset(ras_cmd, 0, sizeof(struct ta_ras_shared_memory));<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> if (enable)<o:p></o:p></p>
<p class="MsoNormal">@@ -1384,19 +1384,19 @@ static int psp_ras_terminate(struct psp_context *psp)<o:p></o:p></p>
<p class="MsoNormal"> if (amdgpu_sriov_vf(psp->adev))<o:p></o:p></p>
<p class="MsoNormal"> return 0;<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">- if (!psp->ras.ras_initialized)<o:p></o:p></p>
<p class="MsoNormal">+ if (!psp->ras_context.ras_initialized)<o:p></o:p></p>
<p class="MsoNormal"> return 0;<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> ret = psp_ras_unload(psp);<o:p></o:p></p>
<p class="MsoNormal"> if (ret)<o:p></o:p></p>
<p class="MsoNormal"> return ret;<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">- psp->ras.ras_initialized = false;<o:p></o:p></p>
<p class="MsoNormal">+ psp->ras_context.ras_initialized = false;<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> /* free ras shared memory */<o:p></o:p></p>
<p class="MsoNormal">- amdgpu_bo_free_kernel(&psp->ras.ras_shared_bo,<o:p></o:p></p>
<p class="MsoNormal">- &psp->ras.ras_shared_mc_addr,<o:p></o:p></p>
<p class="MsoNormal">- &psp->ras.ras_shared_buf);<o:p></o:p></p>
<p class="MsoNormal">+ amdgpu_bo_free_kernel(&psp->ras_context.ras_shared_bo,<o:p></o:p></p>
<p class="MsoNormal">+ &psp->ras_context.ras_shared_mc_addr,<o:p></o:p></p>
<p class="MsoNormal">+ &psp->ras_context.ras_shared_buf);<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> return 0;<o:p></o:p></p>
<p class="MsoNormal">}<o:p></o:p></p>
<p class="MsoNormal">@@ -1413,8 +1413,8 @@ static int psp_ras_initialize(struct psp_context *psp)<o:p></o:p></p>
<p class="MsoNormal"> if (amdgpu_sriov_vf(adev))<o:p></o:p></p>
<p class="MsoNormal"> return 0;<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">- if (!adev->psp.ta_ras_ucode_size ||<o:p></o:p></p>
<p class="MsoNormal">- !adev->psp.ta_ras_start_addr) {<o:p></o:p></p>
<p class="MsoNormal">+ if (!adev->psp.ras.size_bytes ||<o:p></o:p></p>
<p class="MsoNormal">+ !adev->psp.ras.start_addr) {<o:p></o:p></p>
<p class="MsoNormal"> dev_info(adev->dev, "RAS: optional ras ta ucode is not available\n");<o:p></o:p></p>
<p class="MsoNormal"> return 0;<o:p></o:p></p>
<p class="MsoNormal"> }<o:p></o:p></p>
<p class="MsoNormal">@@ -1460,7 +1460,7 @@ static int psp_ras_initialize(struct psp_context *psp)<o:p></o:p></p>
<p class="MsoNormal"> }<o:p></o:p></p>
<p class="MsoNormal"> }<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">- if (!psp->ras.ras_initialized) {<o:p></o:p></p>
<p class="MsoNormal">+ if (!psp->ras_context.ras_initialized) {<o:p></o:p></p>
<p class="MsoNormal"> ret = psp_ras_init_shared_buf(psp);<o:p></o:p></p>
<p class="MsoNormal"> if (ret)<o:p></o:p></p>
<p class="MsoNormal"> return ret;<o:p></o:p></p>
<p class="MsoNormal">@@ -1479,10 +1479,10 @@ int psp_ras_trigger_error(struct psp_context *psp,<o:p></o:p></p>
<p class="MsoNormal"> struct ta_ras_shared_memory *ras_cmd;<o:p></o:p></p>
<p class="MsoNormal"> int ret;<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">- if (!psp->ras.ras_initialized)<o:p></o:p></p>
<p class="MsoNormal">+ if (!psp->ras_context.ras_initialized)<o:p></o:p></p>
<p class="MsoNormal"> return -EINVAL;<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">- ras_cmd = (struct ta_ras_shared_memory *)psp->ras.ras_shared_buf;<o:p></o:p></p>
<p class="MsoNormal">+ ras_cmd = (struct ta_ras_shared_memory *)psp->ras_context.ras_shared_buf;<o:p></o:p></p>
<p class="MsoNormal"> memset(ras_cmd, 0, sizeof(struct ta_ras_shared_memory));<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> ras_cmd->cmd_id = TA_RAS_COMMAND__TRIGGER_ERROR;<o:p></o:p></p>
<p class="MsoNormal">@@ -1530,14 +1530,14 @@ static int psp_hdcp_load(struct psp_context *psp)<o:p></o:p></p>
<p class="MsoNormal"> if (amdgpu_sriov_vf(psp->adev))<o:p></o:p></p>
<p class="MsoNormal"> return 0;<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">- psp_copy_fw(psp, psp->ta_hdcp_start_addr,<o:p></o:p></p>
<p class="MsoNormal">- psp->ta_hdcp_ucode_size);<o:p></o:p></p>
<p class="MsoNormal">+ psp_copy_fw(psp, psp->hdcp.start_addr,<o:p></o:p></p>
<p class="MsoNormal">+ psp->hdcp.size_bytes);<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> cmd = acquire_psp_cmd_buf(psp);<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> psp_prep_ta_load_cmd_buf(cmd,<o:p></o:p></p>
<p class="MsoNormal"> psp->fw_pri_mc_addr,<o:p></o:p></p>
<p class="MsoNormal">- psp->ta_hdcp_ucode_size,<o:p></o:p></p>
<p class="MsoNormal">+ psp->hdcp.size_bytes,<o:p></o:p></p>
<p class="MsoNormal"> psp->hdcp_context.hdcp_shared_mc_addr,<o:p></o:p></p>
<p class="MsoNormal"> PSP_HDCP_SHARED_MEM_SIZE);<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">@@ -1563,8 +1563,8 @@ static int psp_hdcp_initialize(struct psp_context *psp)<o:p></o:p></p>
<p class="MsoNormal"> if (amdgpu_sriov_vf(psp->adev))<o:p></o:p></p>
<p class="MsoNormal"> return 0;<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">- if (!psp->adev->psp.ta_hdcp_ucode_size ||<o:p></o:p></p>
<p class="MsoNormal">- !psp->adev->psp.ta_hdcp_start_addr) {<o:p></o:p></p>
<p class="MsoNormal">+ if (!psp->hdcp.size_bytes ||<o:p></o:p></p>
<p class="MsoNormal">+ !psp->hdcp.start_addr) {<o:p></o:p></p>
<p class="MsoNormal"> dev_info(psp->adev->dev, "HDCP: optional hdcp ta ucode is not available\n");<o:p></o:p></p>
<p class="MsoNormal"> return 0;<o:p></o:p></p>
<p class="MsoNormal"> }<o:p></o:p></p>
<p class="MsoNormal">@@ -1677,13 +1677,13 @@ static int psp_dtm_load(struct psp_context *psp)<o:p></o:p></p>
<p class="MsoNormal"> if (amdgpu_sriov_vf(psp->adev))<o:p></o:p></p>
<p class="MsoNormal"> return 0;<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">- psp_copy_fw(psp, psp->ta_dtm_start_addr, psp->ta_dtm_ucode_size);<o:p></o:p></p>
<p class="MsoNormal">+ psp_copy_fw(psp, psp->dtm.start_addr, psp->dtm.size_bytes);<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> cmd = acquire_psp_cmd_buf(psp);<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> psp_prep_ta_load_cmd_buf(cmd,<o:p></o:p></p>
<p class="MsoNormal"> psp->fw_pri_mc_addr,<o:p></o:p></p>
<p class="MsoNormal">- psp->ta_dtm_ucode_size,<o:p></o:p></p>
<p class="MsoNormal">+ psp->dtm.size_bytes,<o:p></o:p></p>
<p class="MsoNormal"> psp->dtm_context.dtm_shared_mc_addr,<o:p></o:p></p>
<p class="MsoNormal"> PSP_DTM_SHARED_MEM_SIZE);<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">@@ -1710,8 +1710,8 @@ static int psp_dtm_initialize(struct psp_context *psp)<o:p></o:p></p>
<p class="MsoNormal"> if (amdgpu_sriov_vf(psp->adev))<o:p></o:p></p>
<p class="MsoNormal"> return 0;<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">- if (!psp->adev->psp.ta_dtm_ucode_size ||<o:p></o:p></p>
<p class="MsoNormal">- !psp->adev->psp.ta_dtm_start_addr) {<o:p></o:p></p>
<p class="MsoNormal">+ if (!psp->dtm.size_bytes ||<o:p></o:p></p>
<p class="MsoNormal">+ !psp->dtm.start_addr) {<o:p></o:p></p>
<p class="MsoNormal"> dev_info(psp->adev->dev, "DTM: optional dtm ta ucode is not available\n");<o:p></o:p></p>
<p class="MsoNormal"> return 0;<o:p></o:p></p>
<p class="MsoNormal"> }<o:p></o:p></p>
<p class="MsoNormal">@@ -1818,13 +1818,13 @@ static int psp_rap_load(struct psp_context *psp)<o:p></o:p></p>
<p class="MsoNormal"> int ret;<o:p></o:p></p>
<p class="MsoNormal"> struct psp_gfx_cmd_resp *cmd;<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">- psp_copy_fw(psp, psp->ta_rap_start_addr, psp->ta_rap_ucode_size);<o:p></o:p></p>
<p class="MsoNormal">+ psp_copy_fw(psp, psp->rap.start_addr, psp->rap.size_bytes);<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> cmd = acquire_psp_cmd_buf(psp);<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> psp_prep_ta_load_cmd_buf(cmd,<o:p></o:p></p>
<p class="MsoNormal"> psp->fw_pri_mc_addr,<o:p></o:p></p>
<p class="MsoNormal">- psp->ta_rap_ucode_size,<o:p></o:p></p>
<p class="MsoNormal">+ psp->rap.size_bytes,<o:p></o:p></p>
<p class="MsoNormal"> psp->rap_context.rap_shared_mc_addr,<o:p></o:p></p>
<p class="MsoNormal"> PSP_RAP_SHARED_MEM_SIZE);<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">@@ -1866,8 +1866,8 @@ static int psp_rap_initialize(struct psp_context *psp)<o:p></o:p></p>
<p class="MsoNormal"> if (amdgpu_sriov_vf(psp->adev))<o:p></o:p></p>
<p class="MsoNormal"> return 0;<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">- if (!psp->adev->psp.ta_rap_ucode_size ||<o:p></o:p></p>
<p class="MsoNormal">- !psp->adev->psp.ta_rap_start_addr) {<o:p></o:p></p>
<p class="MsoNormal">+ if (!psp->rap.size_bytes ||<o:p></o:p></p>
<p class="MsoNormal">+ !psp->rap.start_addr) {<o:p></o:p></p>
<p class="MsoNormal"> dev_info(psp->adev->dev, "RAP: optional rap ta ucode is not available\n");<o:p></o:p></p>
<p class="MsoNormal"> return 0;<o:p></o:p></p>
<p class="MsoNormal"> }<o:p></o:p></p>
<p class="MsoNormal">@@ -1979,11 +1979,11 @@ static int psp_securedisplay_load(struct psp_context *psp)<o:p></o:p></p>
<p class="MsoNormal"> struct psp_gfx_cmd_resp *cmd = acquire_psp_cmd_buf(psp);<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> memset(psp->fw_pri_buf, 0, PSP_1_MEG);<o:p></o:p></p>
<p class="MsoNormal">- memcpy(psp->fw_pri_buf, psp->ta_securedisplay_start_addr, psp->ta_securedisplay_ucode_size);<o:p></o:p></p>
<p class="MsoNormal">+ memcpy(psp->fw_pri_buf, psp->securedisplay.start_addr, psp->securedisplay.size_bytes);<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> psp_prep_ta_load_cmd_buf(cmd,<o:p></o:p></p>
<p class="MsoNormal"> psp->fw_pri_mc_addr,<o:p></o:p></p>
<p class="MsoNormal">- psp->ta_securedisplay_ucode_size,<o:p></o:p></p>
<p class="MsoNormal">+ psp->securedisplay.size_bytes,<o:p></o:p></p>
<p class="MsoNormal"> psp->securedisplay_context.securedisplay_shared_mc_addr,<o:p></o:p></p>
<p class="MsoNormal"> PSP_SECUREDISPLAY_SHARED_MEM_SIZE);<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">@@ -2025,8 +2025,8 @@ static int psp_securedisplay_initialize(struct psp_context *psp)<o:p></o:p></p>
<p class="MsoNormal"> if (amdgpu_sriov_vf(psp->adev))<o:p></o:p></p>
<p class="MsoNormal"> return 0;<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">- if (!psp->adev->psp.ta_securedisplay_ucode_size ||<o:p></o:p></p>
<p class="MsoNormal">- !psp->adev->psp.ta_securedisplay_start_addr) {<o:p></o:p></p>
<p class="MsoNormal">+ if (!psp->securedisplay.size_bytes ||<o:p></o:p></p>
<p class="MsoNormal">+ !psp->securedisplay.start_addr) {<o:p></o:p></p>
<p class="MsoNormal"> dev_info(psp->adev->dev, "SECUREDISPLAY: securedisplay ta ucode is not available\n");<o:p></o:p></p>
<p class="MsoNormal"> return 0;<o:p></o:p></p>
<p class="MsoNormal"> }<o:p></o:p></p>
<p class="MsoNormal">@@ -2420,7 +2420,7 @@ static int psp_load_smu_fw(struct psp_context *psp)<o:p></o:p></p>
<p class="MsoNormal"> struct amdgpu_device *adev = psp->adev;<o:p></o:p></p>
<p class="MsoNormal"> struct amdgpu_firmware_info *ucode =<o:p></o:p></p>
<p class="MsoNormal"> &adev->firmware.ucode[AMDGPU_UCODE_ID_SMC];<o:p></o:p></p>
<p class="MsoNormal">- struct amdgpu_ras *ras = psp->ras.ras;<o:p></o:p></p>
<p class="MsoNormal">+ struct amdgpu_ras *ras = psp->ras_context.ras;<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> if (!ucode->fw || amdgpu_sriov_vf(psp->adev))<o:p></o:p></p>
<p class="MsoNormal"> return 0;<o:p></o:p></p>
<p class="MsoNormal">@@ -2625,7 +2625,7 @@ static int psp_load_fw(struct amdgpu_device *adev)<o:p></o:p></p>
<p class="MsoNormal"> return ret;<o:p></o:p></p>
<p class="MsoNormal"> }<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">- if (psp->adev->psp.ta_fw) {<o:p></o:p></p>
<p class="MsoNormal">+ if (psp->ta_fw) {<o:p></o:p></p>
<p class="MsoNormal"> ret = psp_ras_initialize(psp);<o:p></o:p></p>
<p class="MsoNormal"> if (ret)<o:p></o:p></p>
<p class="MsoNormal"> dev_err(psp->adev->dev,<o:p></o:p></p>
<p class="MsoNormal">@@ -2697,7 +2697,7 @@ static int psp_hw_fini(void *handle)<o:p></o:p></p>
<p class="MsoNormal"> struct amdgpu_device *adev = (struct amdgpu_device *)handle;<o:p></o:p></p>
<p class="MsoNormal"> struct psp_context *psp = &adev->psp;<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">- if (psp->adev->psp.ta_fw) {<o:p></o:p></p>
<p class="MsoNormal">+ if (psp->ta_fw) {<o:p></o:p></p>
<p class="MsoNormal"> psp_ras_terminate(psp);<o:p></o:p></p>
<p class="MsoNormal"> psp_securedisplay_terminate(psp);<o:p></o:p></p>
<p class="MsoNormal"> psp_rap_terminate(psp);<o:p></o:p></p>
<p class="MsoNormal">@@ -2735,7 +2735,7 @@ static int psp_suspend(void *handle)<o:p></o:p></p>
<p class="MsoNormal"> }<o:p></o:p></p>
<p class="MsoNormal"> }<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">- if (psp->adev->psp.ta_fw) {<o:p></o:p></p>
<p class="MsoNormal">+ if (psp->ta_fw) {<o:p></o:p></p>
<p class="MsoNormal"> ret = psp_ras_terminate(psp);<o:p></o:p></p>
<p class="MsoNormal"> if (ret) {<o:p></o:p></p>
<p class="MsoNormal"> DRM_ERROR("Failed to terminate ras ta\n");<o:p></o:p></p>
<p class="MsoNormal">@@ -2826,7 +2826,7 @@ static int psp_resume(void *handle)<o:p></o:p></p>
<p class="MsoNormal"> "XGMI: Failed to initialize XGMI session\n");<o:p></o:p></p>
<p class="MsoNormal"> }<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">- if (psp->adev->psp.ta_fw) {<o:p></o:p></p>
<p class="MsoNormal">+ if (psp->ta_fw) {<o:p></o:p></p>
<p class="MsoNormal"> ret = psp_ras_initialize(psp);<o:p></o:p></p>
<p class="MsoNormal"> if (ret)<o:p></o:p></p>
<p class="MsoNormal"> dev_err(psp->adev->dev,<o:p></o:p></p>
<p class="MsoNormal">@@ -2978,10 +2978,10 @@ int psp_init_asd_microcode(struct psp_context *psp,<o:p></o:p></p>
<p class="MsoNormal"> goto out;<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> asd_hdr = (const struct psp_firmware_header_v1_0 *)adev->psp.asd_fw->data;<o:p></o:p></p>
<p class="MsoNormal">- adev->psp.asd_fw_version = le32_to_cpu(asd_hdr->header.ucode_version);<o:p></o:p></p>
<p class="MsoNormal">- adev->psp.asd_feature_version = le32_to_cpu(asd_hdr->sos.fw_version);<o:p></o:p></p>
<p class="MsoNormal">- adev->psp.asd_ucode_size = le32_to_cpu(asd_hdr->header.ucode_size_bytes);<o:p></o:p></p>
<p class="MsoNormal">- adev->psp.asd_start_addr = (uint8_t *)asd_hdr +<o:p></o:p></p>
<p class="MsoNormal">+ adev->psp.asd.fw_version = le32_to_cpu(asd_hdr->header.ucode_version);<o:p></o:p></p>
<p class="MsoNormal">+ adev->psp.asd.feature_version = le32_to_cpu(asd_hdr->sos.fw_version);<o:p></o:p></p>
<p class="MsoNormal">+ adev->psp.asd.size_bytes = le32_to_cpu(asd_hdr->header.ucode_size_bytes);<o:p></o:p></p>
<p class="MsoNormal">+ adev->psp.asd.start_addr = (uint8_t *)asd_hdr +<o:p></o:p></p>
<p class="MsoNormal"> le32_to_cpu(asd_hdr->header.ucode_array_offset_bytes);<o:p></o:p></p>
<p class="MsoNormal"> return 0;<o:p></o:p></p>
<p class="MsoNormal">out:<o:p></o:p></p>
<p class="MsoNormal">@@ -3266,40 +3266,40 @@ static int parse_ta_bin_descriptor(struct psp_context *psp,<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> switch (desc->fw_type) {<o:p></o:p></p>
<p class="MsoNormal"> case TA_FW_TYPE_PSP_ASD:<o:p></o:p></p>
<p class="MsoNormal">- psp->asd_fw_version = le32_to_cpu(desc->fw_version);<o:p></o:p></p>
<p class="MsoNormal">- psp->asd_feature_version = le32_to_cpu(desc->fw_version);<o:p></o:p></p>
<p class="MsoNormal">- psp->asd_ucode_size = le32_to_cpu(desc->size_bytes);<o:p></o:p></p>
<p class="MsoNormal">- psp->asd_start_addr = ucode_start_addr;<o:p></o:p></p>
<p class="MsoNormal">+ psp->asd.fw_version = le32_to_cpu(desc->fw_version);<o:p></o:p></p>
<p class="MsoNormal">+ psp->asd.feature_version = le32_to_cpu(desc->fw_version);<o:p></o:p></p>
<p class="MsoNormal">+ psp->asd.size_bytes = le32_to_cpu(desc->size_bytes);<o:p></o:p></p>
<p class="MsoNormal">+ psp->asd.start_addr = ucode_start_addr;<o:p></o:p></p>
<p class="MsoNormal"> break;<o:p></o:p></p>
<p class="MsoNormal"> case TA_FW_TYPE_PSP_XGMI:<o:p></o:p></p>
<p class="MsoNormal">- psp->ta_xgmi_ucode_version = le32_to_cpu(desc->fw_version);<o:p></o:p></p>
<p class="MsoNormal">- psp->ta_xgmi_ucode_size = le32_to_cpu(desc->size_bytes);<o:p></o:p></p>
<p class="MsoNormal">- psp->ta_xgmi_start_addr = ucode_start_addr;<o:p></o:p></p>
<p class="MsoNormal">+ psp->xgmi.feature_version = le32_to_cpu(desc->fw_version);<o:p></o:p></p>
<p class="MsoNormal">+ psp->xgmi.size_bytes = le32_to_cpu(desc->size_bytes);<o:p></o:p></p>
<p class="MsoNormal">+ psp->xgmi.start_addr = ucode_start_addr;<o:p></o:p></p>
<p class="MsoNormal"> break;<o:p></o:p></p>
<p class="MsoNormal"> case TA_FW_TYPE_PSP_RAS:<o:p></o:p></p>
<p class="MsoNormal">- psp->ta_ras_ucode_version = le32_to_cpu(desc->fw_version);<o:p></o:p></p>
<p class="MsoNormal">- psp->ta_ras_ucode_size = le32_to_cpu(desc->size_bytes);<o:p></o:p></p>
<p class="MsoNormal">- psp->ta_ras_start_addr = ucode_start_addr;<o:p></o:p></p>
<p class="MsoNormal">+ psp->ras.feature_version = le32_to_cpu(desc->fw_version);<o:p></o:p></p>
<p class="MsoNormal">+ psp->ras.size_bytes = le32_to_cpu(desc->size_bytes);<o:p></o:p></p>
<p class="MsoNormal">+ psp->ras.start_addr = ucode_start_addr;<o:p></o:p></p>
<p class="MsoNormal"> break;<o:p></o:p></p>
<p class="MsoNormal"> case TA_FW_TYPE_PSP_HDCP:<o:p></o:p></p>
<p class="MsoNormal">- psp->ta_hdcp_ucode_version = le32_to_cpu(desc->fw_version);<o:p></o:p></p>
<p class="MsoNormal">- psp->ta_hdcp_ucode_size = le32_to_cpu(desc->size_bytes);<o:p></o:p></p>
<p class="MsoNormal">- psp->ta_hdcp_start_addr = ucode_start_addr;<o:p></o:p></p>
<p class="MsoNormal">+ psp->hdcp.feature_version = le32_to_cpu(desc->fw_version);<o:p></o:p></p>
<p class="MsoNormal">+ psp->hdcp.size_bytes = le32_to_cpu(desc->size_bytes);<o:p></o:p></p>
<p class="MsoNormal">+ psp->hdcp.start_addr = ucode_start_addr;<o:p></o:p></p>
<p class="MsoNormal"> break;<o:p></o:p></p>
<p class="MsoNormal"> case TA_FW_TYPE_PSP_DTM:<o:p></o:p></p>
<p class="MsoNormal">- psp->ta_dtm_ucode_version = le32_to_cpu(desc->fw_version);<o:p></o:p></p>
<p class="MsoNormal">- psp->ta_dtm_ucode_size = le32_to_cpu(desc->size_bytes);<o:p></o:p></p>
<p class="MsoNormal">- psp->ta_dtm_start_addr = ucode_start_addr;<o:p></o:p></p>
<p class="MsoNormal">+ psp->dtm.feature_version = le32_to_cpu(desc->fw_version);<o:p></o:p></p>
<p class="MsoNormal">+ psp->dtm.size_bytes = le32_to_cpu(desc->size_bytes);<o:p></o:p></p>
<p class="MsoNormal">+ psp->dtm.start_addr = ucode_start_addr;<o:p></o:p></p>
<p class="MsoNormal"> break;<o:p></o:p></p>
<p class="MsoNormal"> case TA_FW_TYPE_PSP_RAP:<o:p></o:p></p>
<p class="MsoNormal">- psp->ta_rap_ucode_version = le32_to_cpu(desc->fw_version);<o:p></o:p></p>
<p class="MsoNormal">- psp->ta_rap_ucode_size = le32_to_cpu(desc->size_bytes);<o:p></o:p></p>
<p class="MsoNormal">- psp->ta_rap_start_addr = ucode_start_addr;<o:p></o:p></p>
<p class="MsoNormal">+ psp->rap.feature_version = le32_to_cpu(desc->fw_version);<o:p></o:p></p>
<p class="MsoNormal">+ psp->rap.size_bytes = le32_to_cpu(desc->size_bytes);<o:p></o:p></p>
<p class="MsoNormal">+ psp->rap.start_addr = ucode_start_addr;<o:p></o:p></p>
<p class="MsoNormal"> break;<o:p></o:p></p>
<p class="MsoNormal"> case TA_FW_TYPE_PSP_SECUREDISPLAY:<o:p></o:p></p>
<p class="MsoNormal">- psp->ta_securedisplay_ucode_version = le32_to_cpu(desc->fw_version);<o:p></o:p></p>
<p class="MsoNormal">- psp->ta_securedisplay_ucode_size = le32_to_cpu(desc->size_bytes);<o:p></o:p></p>
<p class="MsoNormal">- psp->ta_securedisplay_start_addr = ucode_start_addr;<o:p></o:p></p>
<p class="MsoNormal">+ psp->securedisplay.feature_version = le32_to_cpu(desc->fw_version);<o:p></o:p></p>
<p class="MsoNormal">+ psp->securedisplay.size_bytes = le32_to_cpu(desc->size_bytes);<o:p></o:p></p>
<p class="MsoNormal">+ psp->securedisplay.start_addr = ucode_start_addr;<o:p></o:p></p>
<p class="MsoNormal"> break;<o:p></o:p></p>
<p class="MsoNormal"> default:<o:p></o:p></p>
<p class="MsoNormal"> dev_warn(psp->adev->dev, "Unsupported TA type: %d\n", desc->fw_type);<o:p></o:p></p>
<p class="MsoNormal">diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h<o:p></o:p></p>
<p class="MsoNormal">index 6b1645598fa3..2cd84e21592a 100644<o:p></o:p></p>
<p class="MsoNormal">--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h<o:p></o:p></p>
<p class="MsoNormal">+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h<o:p></o:p></p>
<p class="MsoNormal">@@ -327,11 +327,8 @@ struct psp_context<o:p></o:p></p>
<p class="MsoNormal"> uint64_t tmr_mc_addr;<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> /* asd firmware */<o:p></o:p></p>
<p class="MsoNormal">- const struct firmware *asd_fw;<o:p></o:p></p>
<p class="MsoNormal">- uint32_t asd_fw_version;<o:p></o:p></p>
<p class="MsoNormal">- uint32_t asd_feature_version;<o:p></o:p></p>
<p class="MsoNormal">- uint32_t asd_ucode_size;<o:p></o:p></p>
<p class="MsoNormal">- uint8_t *asd_start_addr;<o:p></o:p></p>
<p class="MsoNormal">+ const struct firmware *asd_fw;<o:p></o:p></p>
<p class="MsoNormal">+ struct psp_bin_desc asd;<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> /* toc firmware */<o:p></o:p></p>
<p class="MsoNormal"> const struct firmware *toc_fw;<o:p></o:p></p>
<p class="MsoNormal">@@ -356,32 +353,16 @@ struct psp_context<o:p></o:p></p>
<p class="MsoNormal"> /* xgmi ta firmware and buffer */<o:p></o:p></p>
<p class="MsoNormal"> const struct firmware *ta_fw;<o:p></o:p></p>
<p class="MsoNormal"> uint32_t ta_fw_version;<o:p></o:p></p>
<p class="MsoNormal">- uint32_t ta_xgmi_ucode_version;<o:p></o:p></p>
<p class="MsoNormal">- uint32_t ta_xgmi_ucode_size;<o:p></o:p></p>
<p class="MsoNormal">- uint8_t *ta_xgmi_start_addr;<o:p></o:p></p>
<p class="MsoNormal">- uint32_t ta_ras_ucode_version;<o:p></o:p></p>
<p class="MsoNormal">- uint32_t ta_ras_ucode_size;<o:p></o:p></p>
<p class="MsoNormal">- uint8_t *ta_ras_start_addr;<o:p></o:p></p>
<p class="MsoNormal">-<o:p></o:p></p>
<p class="MsoNormal">- uint32_t ta_hdcp_ucode_version;<o:p></o:p></p>
<p class="MsoNormal">- uint32_t ta_hdcp_ucode_size;<o:p></o:p></p>
<p class="MsoNormal">- uint8_t *ta_hdcp_start_addr;<o:p></o:p></p>
<p class="MsoNormal">-<o:p></o:p></p>
<p class="MsoNormal">- uint32_t ta_dtm_ucode_version;<o:p></o:p></p>
<p class="MsoNormal">- uint32_t ta_dtm_ucode_size;<o:p></o:p></p>
<p class="MsoNormal">- uint8_t *ta_dtm_start_addr;<o:p></o:p></p>
<p class="MsoNormal">-<o:p></o:p></p>
<p class="MsoNormal">- uint32_t ta_rap_ucode_version;<o:p></o:p></p>
<p class="MsoNormal">- uint32_t ta_rap_ucode_size;<o:p></o:p></p>
<p class="MsoNormal">- uint8_t *ta_rap_start_addr;<o:p></o:p></p>
<p class="MsoNormal">-<o:p></o:p></p>
<p class="MsoNormal">- uint32_t ta_securedisplay_ucode_version;<o:p></o:p></p>
<p class="MsoNormal">- uint32_t ta_securedisplay_ucode_size;<o:p></o:p></p>
<p class="MsoNormal">- uint8_t *ta_securedisplay_start_addr;<o:p></o:p></p>
<p class="MsoNormal">+ struct psp_bin_desc xgmi;<o:p></o:p></p>
<p class="MsoNormal">+ struct psp_bin_desc ras;<o:p></o:p></p>
<p class="MsoNormal">+ struct psp_bin_desc hdcp;<o:p></o:p></p>
<p class="MsoNormal">+ struct psp_bin_desc dtm;<o:p></o:p></p>
<p class="MsoNormal">+ struct psp_bin_desc rap;<o:p></o:p></p>
<p class="MsoNormal">+ struct psp_bin_desc securedisplay;<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> struct psp_asd_context asd_context;<o:p></o:p></p>
<p class="MsoNormal"> struct psp_xgmi_context xgmi_context;<o:p></o:p></p>
<p class="MsoNormal">- struct psp_ras_context ras;<o:p></o:p></p>
<p class="MsoNormal">+ struct psp_ras_context ras_context;<o:p></o:p></p>
<p class="MsoNormal"> struct psp_hdcp_context hdcp_context;<o:p></o:p></p>
<p class="MsoNormal"> struct psp_dtm_context dtm_context;<o:p></o:p></p>
<p class="MsoNormal"> struct psp_rap_context rap_context;<o:p></o:p></p>
<p class="MsoNormal">diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c<o:p></o:p></p>
<p class="MsoNormal">index 194f7ccfbf94..3811b6b6a192 100644<o:p></o:p></p>
<p class="MsoNormal">--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c<o:p></o:p></p>
<p class="MsoNormal">+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c<o:p></o:p></p>
<p class="MsoNormal">@@ -1866,7 +1866,7 @@ int amdgpu_ras_save_bad_pages(struct amdgpu_device *adev)<o:p></o:p></p>
<p class="MsoNormal">static int amdgpu_ras_load_bad_pages(struct amdgpu_device *adev)<o:p></o:p></p>
<p class="MsoNormal">{<o:p></o:p></p>
<p class="MsoNormal"> struct amdgpu_ras_eeprom_control *control =<o:p></o:p></p>
<p class="MsoNormal">- &adev->psp.ras.ras->eeprom_control;<o:p></o:p></p>
<p class="MsoNormal">+ &adev->psp.ras_context.ras->eeprom_control;<o:p></o:p></p>
<p class="MsoNormal"> struct eeprom_table_record *bps;<o:p></o:p></p>
<p class="MsoNormal"> int ret;<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.h<o:p></o:p></p>
<p class="MsoNormal">index 4d9c63f2f377..471ffe885fdf 100644<o:p></o:p></p>
<p class="MsoNormal">--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.h<o:p></o:p></p>
<p class="MsoNormal">+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.h<o:p></o:p></p>
<p class="MsoNormal">@@ -470,8 +470,8 @@ struct ras_debug_if {<o:p></o:p></p>
<p class="MsoNormal"> * 8: feature disable<o:p></o:p></p>
<p class="MsoNormal"> */<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">-#define amdgpu_ras_get_context(adev) ((adev)->psp.ras.ras)<o:p></o:p></p>
<p class="MsoNormal">-#define amdgpu_ras_set_context(adev, ras_con) ((adev)->psp.ras.ras = (ras_con))<o:p></o:p></p>
<p class="MsoNormal">+#define amdgpu_ras_get_context(adev) ((adev)->psp.ras_context.ras)<o:p></o:p></p>
<p class="MsoNormal">+#define amdgpu_ras_set_context(adev, ras_con) ((adev)->psp.ras_context.ras = (ras_con))<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> /* check if ras is supported on block, say, sdma, gfx */<o:p></o:p></p>
<p class="MsoNormal">static inline int amdgpu_ras_is_supported(struct amdgpu_device *adev,<o:p></o:p></p>
<p class="MsoNormal">diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c<o:p></o:p></p>
<p class="MsoNormal">index 5fdeceaa979f..abd8469380e5 100644<o:p></o:p></p>
<p class="MsoNormal">--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c<o:p></o:p></p>
<p class="MsoNormal">+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c<o:p></o:p></p>
<p class="MsoNormal">@@ -525,9 +525,9 @@ FW_VERSION_ATTR(rlc_srls_fw_version, 0444, gfx.rlc_srls_fw_version);<o:p></o:p></p>
<p class="MsoNormal">FW_VERSION_ATTR(mec_fw_version, 0444, gfx.mec_fw_version);<o:p></o:p></p>
<p class="MsoNormal">FW_VERSION_ATTR(mec2_fw_version, 0444, gfx.mec2_fw_version);<o:p></o:p></p>
<p class="MsoNormal">FW_VERSION_ATTR(sos_fw_version, 0444, psp.sos.fw_version);<o:p></o:p></p>
<p class="MsoNormal">-FW_VERSION_ATTR(asd_fw_version, 0444, psp.asd_fw_version);<o:p></o:p></p>
<p class="MsoNormal">-FW_VERSION_ATTR(ta_ras_fw_version, 0444, psp.ta_ras_ucode_version);<o:p></o:p></p>
<p class="MsoNormal">-FW_VERSION_ATTR(ta_xgmi_fw_version, 0444, psp.ta_xgmi_ucode_version);<o:p></o:p></p>
<p class="MsoNormal">+FW_VERSION_ATTR(asd_fw_version, 0444, psp.asd.fw_version);<o:p></o:p></p>
<p class="MsoNormal">+FW_VERSION_ATTR(ta_ras_fw_version, 0444, psp.ras.feature_version);<o:p></o:p></p>
<p class="MsoNormal">+FW_VERSION_ATTR(ta_xgmi_fw_version, 0444, psp.xgmi.feature_version);<o:p></o:p></p>
<p class="MsoNormal">FW_VERSION_ATTR(smc_fw_version, 0444, pm.fw_version);<o:p></o:p></p>
<p class="MsoNormal">FW_VERSION_ATTR(sdma_fw_version, 0444, sdma.instance[0].fw_version);<o:p></o:p></p>
<p class="MsoNormal">FW_VERSION_ATTR(sdma2_fw_version, 0444, sdma.instance[1].fw_version);<o:p></o:p></p>
<p class="MsoNormal">diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h<o:p></o:p></p>
<p class="MsoNormal">index e2e2624ac653..7c2538db3cd5 100644<o:p></o:p></p>
<p class="MsoNormal">--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h<o:p></o:p></p>
<p class="MsoNormal">+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h<o:p></o:p></p>
<p class="MsoNormal">@@ -136,21 +136,11 @@ struct psp_firmware_header_v2_0 {<o:p></o:p></p>
<p class="MsoNormal">/* version_major=1, version_minor=0 */<o:p></o:p></p>
<p class="MsoNormal">struct ta_firmware_header_v1_0 {<o:p></o:p></p>
<p class="MsoNormal"> struct common_firmware_header header;<o:p></o:p></p>
<p class="MsoNormal">- uint32_t ta_xgmi_ucode_version;<o:p></o:p></p>
<p class="MsoNormal">- uint32_t ta_xgmi_offset_bytes;<o:p></o:p></p>
<p class="MsoNormal">- uint32_t ta_xgmi_size_bytes;<o:p></o:p></p>
<p class="MsoNormal">- uint32_t ta_ras_ucode_version;<o:p></o:p></p>
<p class="MsoNormal">- uint32_t ta_ras_offset_bytes;<o:p></o:p></p>
<p class="MsoNormal">- uint32_t ta_ras_size_bytes;<o:p></o:p></p>
<p class="MsoNormal">- uint32_t ta_hdcp_ucode_version;<o:p></o:p></p>
<p class="MsoNormal">- uint32_t ta_hdcp_offset_bytes;<o:p></o:p></p>
<p class="MsoNormal">- uint32_t ta_hdcp_size_bytes;<o:p></o:p></p>
<p class="MsoNormal">- uint32_t ta_dtm_ucode_version;<o:p></o:p></p>
<p class="MsoNormal">- uint32_t ta_dtm_offset_bytes;<o:p></o:p></p>
<p class="MsoNormal">- uint32_t ta_dtm_size_bytes;<o:p></o:p></p>
<p class="MsoNormal">- uint32_t ta_securedisplay_ucode_version;<o:p></o:p></p>
<p class="MsoNormal">- uint32_t ta_securedisplay_offset_bytes;<o:p></o:p></p>
<p class="MsoNormal">- uint32_t ta_securedisplay_size_bytes;<o:p></o:p></p>
<p class="MsoNormal">+ struct psp_fw_legacy_bin_desc xgmi;<o:p></o:p></p>
<p class="MsoNormal">+ struct psp_fw_legacy_bin_desc ras;<o:p></o:p></p>
<p class="MsoNormal">+ struct psp_fw_legacy_bin_desc hdcp;<o:p></o:p></p>
<p class="MsoNormal">+ struct psp_fw_legacy_bin_desc dtm;<o:p></o:p></p>
<p class="MsoNormal">+ struct psp_fw_legacy_bin_desc securedisplay;<o:p></o:p></p>
<p class="MsoNormal">};<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> enum ta_fw_type {<o:p></o:p></p>
<p class="MsoNormal">diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c<o:p></o:p></p>
<p class="MsoNormal">index 12a7cc2f01cd..ca058fbcccd4 100644<o:p></o:p></p>
<p class="MsoNormal">--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c<o:p></o:p></p>
<p class="MsoNormal">+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c<o:p></o:p></p>
<p class="MsoNormal">@@ -532,9 +532,9 @@ static void amdgpu_virt_populate_vf2pf_ucode_info(struct amdgpu_device *adev)<o:p></o:p></p>
<p class="MsoNormal"> POPULATE_UCODE_INFO(vf2pf_info, AMD_SRIOV_UCODE_ID_MEC, adev->gfx.mec_fw_version);<o:p></o:p></p>
<p class="MsoNormal"> POPULATE_UCODE_INFO(vf2pf_info, AMD_SRIOV_UCODE_ID_MEC2, adev->gfx.mec2_fw_version);<o:p></o:p></p>
<p class="MsoNormal"> POPULATE_UCODE_INFO(vf2pf_info, AMD_SRIOV_UCODE_ID_SOS, adev->psp.sos.fw_version);<o:p></o:p></p>
<p class="MsoNormal">- POPULATE_UCODE_INFO(vf2pf_info, AMD_SRIOV_UCODE_ID_ASD, adev->psp.asd_fw_version);<o:p></o:p></p>
<p class="MsoNormal">- POPULATE_UCODE_INFO(vf2pf_info, AMD_SRIOV_UCODE_ID_TA_RAS, adev->psp.ta_ras_ucode_version);<o:p></o:p></p>
<p class="MsoNormal">- POPULATE_UCODE_INFO(vf2pf_info, AMD_SRIOV_UCODE_ID_TA_XGMI, adev->psp.ta_xgmi_ucode_version);<o:p></o:p></p>
<p class="MsoNormal">+ POPULATE_UCODE_INFO(vf2pf_info, AMD_SRIOV_UCODE_ID_ASD, adev->psp.asd.fw_version);<o:p></o:p></p>
<p class="MsoNormal">+ POPULATE_UCODE_INFO(vf2pf_info, AMD_SRIOV_UCODE_ID_TA_RAS, adev->psp.ras.feature_version);<o:p></o:p></p>
<p class="MsoNormal">+ POPULATE_UCODE_INFO(vf2pf_info, AMD_SRIOV_UCODE_ID_TA_XGMI, adev->psp.xgmi.feature_version);<o:p></o:p></p>
<p class="MsoNormal"> POPULATE_UCODE_INFO(vf2pf_info, AMD_SRIOV_UCODE_ID_SMC, adev->pm.fw_version);<o:p></o:p></p>
<p class="MsoNormal"> POPULATE_UCODE_INFO(vf2pf_info, AMD_SRIOV_UCODE_ID_SDMA, adev->sdma.instance[0].fw_version);<o:p></o:p></p>
<p class="MsoNormal"> POPULATE_UCODE_INFO(vf2pf_info, AMD_SRIOV_UCODE_ID_SDMA2, adev->sdma.instance[1].fw_version);<o:p></o:p></p>
<p class="MsoNormal">diff --git a/drivers/gpu/drm/amd/amdgpu/psp_v10_0.c b/drivers/gpu/drm/amd/amdgpu/psp_v10_0.c<o:p></o:p></p>
<p class="MsoNormal">index 4b1cc5e9ee92..5872d68ed13d 100644<o:p></o:p></p>
<p class="MsoNormal">--- a/drivers/gpu/drm/amd/amdgpu/psp_v10_0.c<o:p></o:p></p>
<p class="MsoNormal">+++ b/drivers/gpu/drm/amd/amdgpu/psp_v10_0.c<o:p></o:p></p>
<p class="MsoNormal">@@ -84,29 +84,29 @@ static int psp_v10_0_init_microcode(struct psp_context *psp)<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> ta_hdr = (const struct ta_firmware_header_v1_0 *)<o:p></o:p></p>
<p class="MsoNormal"> adev->psp.ta_fw->data;<o:p></o:p></p>
<p class="MsoNormal">- adev->psp.ta_hdcp_ucode_version =<o:p></o:p></p>
<p class="MsoNormal">- le32_to_cpu(ta_hdr->ta_hdcp_ucode_version);<o:p></o:p></p>
<p class="MsoNormal">- adev->psp.ta_hdcp_ucode_size =<o:p></o:p></p>
<p class="MsoNormal">- le32_to_cpu(ta_hdr->ta_hdcp_size_bytes);<o:p></o:p></p>
<p class="MsoNormal">- adev->psp.ta_hdcp_start_addr =<o:p></o:p></p>
<p class="MsoNormal">+ adev->psp.hdcp.feature_version =<o:p></o:p></p>
<p class="MsoNormal">+ le32_to_cpu(ta_hdr->hdcp.fw_version);<o:p></o:p></p>
<p class="MsoNormal">+ adev->psp.hdcp.size_bytes =<o:p></o:p></p>
<p class="MsoNormal">+ le32_to_cpu(ta_hdr->hdcp.size_bytes);<o:p></o:p></p>
<p class="MsoNormal">+ adev->psp.hdcp.start_addr =<o:p></o:p></p>
<p class="MsoNormal"> (uint8_t *)ta_hdr +<o:p></o:p></p>
<p class="MsoNormal"> le32_to_cpu(ta_hdr->header.ucode_array_offset_bytes);<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">- adev->psp.ta_dtm_ucode_version =<o:p></o:p></p>
<p class="MsoNormal">- le32_to_cpu(ta_hdr->ta_dtm_ucode_version);<o:p></o:p></p>
<p class="MsoNormal">- adev->psp.ta_dtm_ucode_size =<o:p></o:p></p>
<p class="MsoNormal">- le32_to_cpu(ta_hdr->ta_dtm_size_bytes);<o:p></o:p></p>
<p class="MsoNormal">- adev->psp.ta_dtm_start_addr =<o:p></o:p></p>
<p class="MsoNormal">- (uint8_t *)adev->psp.ta_hdcp_start_addr +<o:p></o:p></p>
<p class="MsoNormal">- le32_to_cpu(ta_hdr->ta_dtm_offset_bytes);<o:p></o:p></p>
<p class="MsoNormal">-<o:p></o:p></p>
<p class="MsoNormal">- adev->psp.ta_securedisplay_ucode_version =<o:p></o:p></p>
<p class="MsoNormal">- le32_to_cpu(ta_hdr->ta_securedisplay_ucode_version);<o:p></o:p></p>
<p class="MsoNormal">- adev->psp.ta_securedisplay_ucode_size =<o:p></o:p></p>
<p class="MsoNormal">- le32_to_cpu(ta_hdr->ta_securedisplay_size_bytes);<o:p></o:p></p>
<p class="MsoNormal">- adev->psp.ta_securedisplay_start_addr =<o:p></o:p></p>
<p class="MsoNormal">- (uint8_t *)adev->psp.ta_hdcp_start_addr +<o:p></o:p></p>
<p class="MsoNormal">- le32_to_cpu(ta_hdr->ta_securedisplay_offset_bytes);<o:p></o:p></p>
<p class="MsoNormal">+ adev->psp.dtm.feature_version =<o:p></o:p></p>
<p class="MsoNormal">+ le32_to_cpu(ta_hdr->dtm.fw_version);<o:p></o:p></p>
<p class="MsoNormal">+ adev->psp.dtm.size_bytes =<o:p></o:p></p>
<p class="MsoNormal">+ le32_to_cpu(ta_hdr->dtm.size_bytes);<o:p></o:p></p>
<p class="MsoNormal">+ adev->psp.dtm.start_addr =<o:p></o:p></p>
<p class="MsoNormal">+ (uint8_t *)adev->psp.hdcp.start_addr +<o:p></o:p></p>
<p class="MsoNormal">+ le32_to_cpu(ta_hdr->dtm.offset_bytes);<o:p></o:p></p>
<p class="MsoNormal">+<o:p></o:p></p>
<p class="MsoNormal">+ adev->psp.securedisplay.feature_version =<o:p></o:p></p>
<p class="MsoNormal">+ le32_to_cpu(ta_hdr->securedisplay.fw_version);<o:p></o:p></p>
<p class="MsoNormal">+ adev->psp.securedisplay.size_bytes =<o:p></o:p></p>
<p class="MsoNormal">+ le32_to_cpu(ta_hdr->securedisplay.size_bytes);<o:p></o:p></p>
<p class="MsoNormal">+ adev->psp.securedisplay.start_addr =<o:p></o:p></p>
<p class="MsoNormal">+ (uint8_t *)adev->psp.hdcp.start_addr +<o:p></o:p></p>
<p class="MsoNormal">+ le32_to_cpu(ta_hdr->securedisplay.offset_bytes);<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> adev->psp.ta_fw_version = le32_to_cpu(ta_hdr->header.ucode_version);<o:p></o:p></p>
<p class="MsoNormal"> }<o:p></o:p></p>
<p class="MsoNormal">diff --git a/drivers/gpu/drm/amd/amdgpu/psp_v11_0.c b/drivers/gpu/drm/amd/amdgpu/psp_v11_0.c<o:p></o:p></p>
<p class="MsoNormal">index 8862684f8b43..29bf9f09944b 100644<o:p></o:p></p>
<p class="MsoNormal">--- a/drivers/gpu/drm/amd/amdgpu/psp_v11_0.c<o:p></o:p></p>
<p class="MsoNormal">+++ b/drivers/gpu/drm/amd/amdgpu/psp_v11_0.c<o:p></o:p></p>
<p class="MsoNormal">@@ -151,15 +151,15 @@ static int psp_v11_0_init_microcode(struct psp_context *psp)<o:p></o:p></p>
<p class="MsoNormal"> goto out2;<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> ta_hdr = (const struct ta_firmware_header_v1_0 *)adev->psp.ta_fw->data;<o:p></o:p></p>
<p class="MsoNormal">- adev->psp.ta_xgmi_ucode_version = le32_to_cpu(ta_hdr->ta_xgmi_ucode_version);<o:p></o:p></p>
<p class="MsoNormal">- adev->psp.ta_xgmi_ucode_size = le32_to_cpu(ta_hdr->ta_xgmi_size_bytes);<o:p></o:p></p>
<p class="MsoNormal">- adev->psp.ta_xgmi_start_addr = (uint8_t *)ta_hdr +<o:p></o:p></p>
<p class="MsoNormal">+ adev->psp.xgmi.feature_version = le32_to_cpu(ta_hdr->xgmi.fw_version);<o:p></o:p></p>
<p class="MsoNormal">+ adev->psp.xgmi.size_bytes = le32_to_cpu(ta_hdr->xgmi.size_bytes);<o:p></o:p></p>
<p class="MsoNormal">+ adev->psp.xgmi.start_addr = (uint8_t *)ta_hdr +<o:p></o:p></p>
<p class="MsoNormal"> le32_to_cpu(ta_hdr->header.ucode_array_offset_bytes);<o:p></o:p></p>
<p class="MsoNormal"> adev->psp.ta_fw_version = le32_to_cpu(ta_hdr->header.ucode_version);<o:p></o:p></p>
<p class="MsoNormal">- adev->psp.ta_ras_ucode_version = le32_to_cpu(ta_hdr->ta_ras_ucode_version);<o:p></o:p></p>
<p class="MsoNormal">- adev->psp.ta_ras_ucode_size = le32_to_cpu(ta_hdr->ta_ras_size_bytes);<o:p></o:p></p>
<p class="MsoNormal">- adev->psp.ta_ras_start_addr = (uint8_t *)adev->psp.ta_xgmi_start_addr +<o:p></o:p></p>
<p class="MsoNormal">- le32_to_cpu(ta_hdr->ta_ras_offset_bytes);<o:p></o:p></p>
<p class="MsoNormal">+ adev->psp.ras.feature_version = le32_to_cpu(ta_hdr->ras.fw_version);<o:p></o:p></p>
<p class="MsoNormal">+ adev->psp.ras.size_bytes = le32_to_cpu(ta_hdr->ras.size_bytes);<o:p></o:p></p>
<p class="MsoNormal">+ adev->psp.ras.start_addr = (uint8_t *)adev->psp.xgmi.start_addr +<o:p></o:p></p>
<p class="MsoNormal">+ le32_to_cpu(ta_hdr->ras.offset_bytes);<o:p></o:p></p>
<p class="MsoNormal"> }<o:p></o:p></p>
<p class="MsoNormal"> break;<o:p></o:p></p>
<p class="MsoNormal"> case CHIP_NAVI10:<o:p></o:p></p>
<p class="MsoNormal">@@ -186,17 +186,17 @@ static int psp_v11_0_init_microcode(struct psp_context *psp)<o:p></o:p></p>
<p class="MsoNormal"> goto out2;<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> ta_hdr = (const struct ta_firmware_header_v1_0 *)adev->psp.ta_fw->data;<o:p></o:p></p>
<p class="MsoNormal">- adev->psp.ta_hdcp_ucode_version = le32_to_cpu(ta_hdr->ta_hdcp_ucode_version);<o:p></o:p></p>
<p class="MsoNormal">- adev->psp.ta_hdcp_ucode_size = le32_to_cpu(ta_hdr->ta_hdcp_size_bytes);<o:p></o:p></p>
<p class="MsoNormal">- adev->psp.ta_hdcp_start_addr = (uint8_t *)ta_hdr +<o:p></o:p></p>
<p class="MsoNormal">+ adev->psp.hdcp.feature_version = le32_to_cpu(ta_hdr->hdcp.fw_version);<o:p></o:p></p>
<p class="MsoNormal">+ adev->psp.hdcp.size_bytes = le32_to_cpu(ta_hdr->hdcp.size_bytes);<o:p></o:p></p>
<p class="MsoNormal">+ adev->psp.hdcp.start_addr = (uint8_t *)ta_hdr +<o:p></o:p></p>
<p class="MsoNormal"> le32_to_cpu(ta_hdr->header.ucode_array_offset_bytes);<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> adev->psp.ta_fw_version = le32_to_cpu(ta_hdr->header.ucode_version);<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">- adev->psp.ta_dtm_ucode_version = le32_to_cpu(ta_hdr->ta_dtm_ucode_version);<o:p></o:p></p>
<p class="MsoNormal">- adev->psp.ta_dtm_ucode_size = le32_to_cpu(ta_hdr->ta_dtm_size_bytes);<o:p></o:p></p>
<p class="MsoNormal">- adev->psp.ta_dtm_start_addr = (uint8_t *)adev->psp.ta_hdcp_start_addr +<o:p></o:p></p>
<p class="MsoNormal">- le32_to_cpu(ta_hdr->ta_dtm_offset_bytes);<o:p></o:p></p>
<p class="MsoNormal">+ adev->psp.dtm.feature_version = le32_to_cpu(ta_hdr->dtm.fw_version);<o:p></o:p></p>
<p class="MsoNormal">+ adev->psp.dtm.size_bytes = le32_to_cpu(ta_hdr->dtm.size_bytes);<o:p></o:p></p>
<p class="MsoNormal">+ adev->psp.dtm.start_addr = (uint8_t *)adev->psp.hdcp.start_addr +<o:p></o:p></p>
<p class="MsoNormal">+ le32_to_cpu(ta_hdr->dtm.offset_bytes);<o:p></o:p></p>
<p class="MsoNormal"> }<o:p></o:p></p>
<p class="MsoNormal"> break;<o:p></o:p></p>
<p class="MsoNormal"> case CHIP_SIENNA_CICHLID:<o:p></o:p></p>
<p class="MsoNormal">diff --git a/drivers/gpu/drm/amd/amdgpu/psp_v12_0.c b/drivers/gpu/drm/amd/amdgpu/psp_v12_0.c<o:p></o:p></p>
<p class="MsoNormal">index 0c908d4566e8..cc649406234b 100644<o:p></o:p></p>
<p class="MsoNormal">--- a/drivers/gpu/drm/amd/amdgpu/psp_v12_0.c<o:p></o:p></p>
<p class="MsoNormal">+++ b/drivers/gpu/drm/amd/amdgpu/psp_v12_0.c<o:p></o:p></p>
<p class="MsoNormal">@@ -84,23 +84,23 @@ static int psp_v12_0_init_microcode(struct psp_context *psp)<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> ta_hdr = (const struct ta_firmware_header_v1_0 *)<o:p></o:p></p>
<p class="MsoNormal"> adev->psp.ta_fw->data;<o:p></o:p></p>
<p class="MsoNormal">- adev->psp.ta_hdcp_ucode_version =<o:p></o:p></p>
<p class="MsoNormal">- le32_to_cpu(ta_hdr->ta_hdcp_ucode_version);<o:p></o:p></p>
<p class="MsoNormal">- adev->psp.ta_hdcp_ucode_size =<o:p></o:p></p>
<p class="MsoNormal">- le32_to_cpu(ta_hdr->ta_hdcp_size_bytes);<o:p></o:p></p>
<p class="MsoNormal">- adev->psp.ta_hdcp_start_addr =<o:p></o:p></p>
<p class="MsoNormal">+ adev->psp.hdcp.feature_version =<o:p></o:p></p>
<p class="MsoNormal">+ le32_to_cpu(ta_hdr->hdcp.fw_version);<o:p></o:p></p>
<p class="MsoNormal">+ adev->psp.hdcp.size_bytes =<o:p></o:p></p>
<p class="MsoNormal">+ le32_to_cpu(ta_hdr->hdcp.size_bytes);<o:p></o:p></p>
<p class="MsoNormal">+ adev->psp.hdcp.start_addr =<o:p></o:p></p>
<p class="MsoNormal"> (uint8_t *)ta_hdr +<o:p></o:p></p>
<p class="MsoNormal"> le32_to_cpu(ta_hdr->header.ucode_array_offset_bytes);<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> adev->psp.ta_fw_version = le32_to_cpu(ta_hdr->header.ucode_version);<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">- adev->psp.ta_dtm_ucode_version =<o:p></o:p></p>
<p class="MsoNormal">- le32_to_cpu(ta_hdr->ta_dtm_ucode_version);<o:p></o:p></p>
<p class="MsoNormal">- adev->psp.ta_dtm_ucode_size =<o:p></o:p></p>
<p class="MsoNormal">- le32_to_cpu(ta_hdr->ta_dtm_size_bytes);<o:p></o:p></p>
<p class="MsoNormal">- adev->psp.ta_dtm_start_addr =<o:p></o:p></p>
<p class="MsoNormal">- (uint8_t *)adev->psp.ta_hdcp_start_addr +<o:p></o:p></p>
<p class="MsoNormal">- le32_to_cpu(ta_hdr->ta_dtm_offset_bytes);<o:p></o:p></p>
<p class="MsoNormal">+ adev->psp.dtm.feature_version =<o:p></o:p></p>
<p class="MsoNormal">+ le32_to_cpu(ta_hdr->dtm.fw_version);<o:p></o:p></p>
<p class="MsoNormal">+ adev->psp.dtm.size_bytes =<o:p></o:p></p>
<p class="MsoNormal">+ le32_to_cpu(ta_hdr->dtm.size_bytes);<o:p></o:p></p>
<p class="MsoNormal">+ adev->psp.dtm.start_addr =<o:p></o:p></p>
<p class="MsoNormal">+ (uint8_t *)adev->psp.hdcp.start_addr +<o:p></o:p></p>
<p class="MsoNormal">+ le32_to_cpu(ta_hdr->dtm.offset_bytes);<o:p></o:p></p>
<p class="MsoNormal"> }<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> return 0;<o:p></o:p></p>
<p class="MsoNormal">-- <o:p></o:p></p>
<p class="MsoNormal">2.17.1<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><span style="color:#44546A">Thanks,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#44546A">Candice<o:p></o:p></span></p>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</body>
</html>