<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:DengXian;
        panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:"\@DengXian";
        panose-1:2 1 6 0 3 1 1 1 1 1;}
/* 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;}
p.msipheader23c54b6f, li.msipheader23c54b6f, div.msipheader23c54b6f
        {mso-style-name:msipheader23c54b6f;
        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.EmailStyle20
        {mso-style-type:personal;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
span.EmailStyle21
        {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">Exactly, I forgot to change it accordingly. Thanks <a id="OWAAMAD724D3237E5446080A2F7F3ECE2EF59" href="mailto:Guchun.Chen@amd.com">
<span style="font-family:"Calibri",sans-serif;text-decoration:none">@Chen, Guchun</span></a><o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<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>
</div>
<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> Chen, Guchun <Guchun.Chen@amd.com> <br>
<b>Sent:</b> Tuesday, August 3, 2021 2:04 PM<br>
<b>To:</b> Li, Candice <Candice.Li@amd.com>; 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> RE: [PATCH] drm/amd/amdgpu: remove redundant host to psp cmd buf<o:p></o:p></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="msipheader23c54b6f" 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">+            if (psp->asd_fw) {<o:p></o:p></p>
<p class="MsoNormal">+                           release_firmware(psp->asd_fw);<o:p></o:p></p>
<p class="MsoNormal">                            adev->psp.asd_fw = NULL;<o:p></o:p></p>
<p class="MsoNormal">             }<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Use “psp->asd_fw = NULL” should be more simple?<o:p></o:p></p>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Regards,<o:p></o:p></p>
<p class="MsoNormal">Guchun<o:p></o:p></p>
</div>
<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> amd-gfx <<a href="mailto:amd-gfx-bounces@lists.freedesktop.org">amd-gfx-bounces@lists.freedesktop.org</a>>
<b>On Behalf Of </b>Li, Candice<br>
<b>Sent:</b> Tuesday, August 3, 2021 11:06 AM<br>
<b>To:</b> <a href="mailto:amd-gfx@lists.freedesktop.org">amd-gfx@lists.freedesktop.org</a><br>
<b>Cc:</b> Clements, John <<a href="mailto:John.Clements@amd.com">John.Clements@amd.com</a>>; Li, Candice <<a href="mailto:Candice.Li@amd.com">Candice.Li@amd.com</a>><br>
<b>Subject:</b> [PATCH] drm/amd/amdgpu: remove redundant host to psp cmd buf<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_psp.c | 253 ++++++++----------------<o:p></o:p></p>
<p class="MsoNormal">1 file changed, 78 insertions(+), 175 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_psp.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c<o:p></o:p></p>
<p class="MsoNormal">index ed731144ca7f..9c18558e3bc0 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">@@ -253,6 +253,12 @@ static int psp_sw_init(void *handle)<o:p></o:p></p>
<p class="MsoNormal">             struct psp_runtime_boot_cfg_entry boot_cfg_entry;<o:p></o:p></p>
<p class="MsoNormal">             struct psp_memory_training_context *mem_training_ctx = &psp->mem_train_ctx;<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">+            psp->cmd = kzalloc(sizeof(struct psp_gfx_cmd_resp), GFP_KERNEL);<o:p></o:p></p>
<p class="MsoNormal">+            if (!psp->cmd) {<o:p></o:p></p>
<p class="MsoNormal">+                           DRM_ERROR("Failed to allocate memory to command buffer!\n");<o:p></o:p></p>
<p class="MsoNormal">+                           ret = -ENOMEM;<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 (!amdgpu_sriov_vf(adev)) {<o:p></o:p></p>
<p class="MsoNormal">                            ret = psp_init_microcode(psp);<o:p></o:p></p>
<p class="MsoNormal">                            if (ret) {<o:p></o:p></p>
<p class="MsoNormal">@@ -315,25 +321,30 @@ static int psp_sw_init(void *handle)<o:p></o:p></p>
<p class="MsoNormal">static int psp_sw_fini(void *handle)<o:p></o:p></p>
<p class="MsoNormal">{<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">+            struct psp_gfx_cmd_resp *cmd = psp->cmd;<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">-             psp_memory_training_fini(&adev->psp);<o:p></o:p></p>
<p class="MsoNormal">-             if (adev->psp.sos_fw) {<o:p></o:p></p>
<p class="MsoNormal">-                           release_firmware(adev->psp.sos_fw);<o:p></o:p></p>
<p class="MsoNormal">-                           adev->psp.sos_fw = NULL;<o:p></o:p></p>
<p class="MsoNormal">+            psp_memory_training_fini(psp);<o:p></o:p></p>
<p class="MsoNormal">+            if (psp->sos_fw) {<o:p></o:p></p>
<p class="MsoNormal">+                           release_firmware(psp->sos_fw);<o:p></o:p></p>
<p class="MsoNormal">+                           psp->sos_fw = NULL;<o:p></o:p></p>
<p class="MsoNormal">             }<o:p></o:p></p>
<p class="MsoNormal">-             if (adev->psp.asd_fw) {<o:p></o:p></p>
<p class="MsoNormal">-                           release_firmware(adev->psp.asd_fw);<o:p></o:p></p>
<p class="MsoNormal">+            if (psp->asd_fw) {<o:p></o:p></p>
<p class="MsoNormal">+                           release_firmware(psp->asd_fw);<o:p></o:p></p>
<p class="MsoNormal">                            adev->psp.asd_fw = NULL;<o:p></o:p></p>
<p class="MsoNormal">             }<o:p></o:p></p>
<p class="MsoNormal">-             if (adev->psp.ta_fw) {<o:p></o:p></p>
<p class="MsoNormal">-                           release_firmware(adev->psp.ta_fw);<o:p></o:p></p>
<p class="MsoNormal">-                           adev->psp.ta_fw = NULL;<o:p></o:p></p>
<p class="MsoNormal">+            if (psp->ta_fw) {<o:p></o:p></p>
<p class="MsoNormal">+                           release_firmware(psp->ta_fw);<o:p></o:p></p>
<p class="MsoNormal">+                           psp->ta_fw = NULL;<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 (adev->asic_type == CHIP_NAVI10 ||<o:p></o:p></p>
<p class="MsoNormal">                 adev->asic_type == CHIP_SIENNA_CICHLID)<o:p></o:p></p>
<p class="MsoNormal">                            psp_sysfs_fini(adev);<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">+            kfree(cmd);<o:p></o:p></p>
<p class="MsoNormal">+            cmd = NULL;<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"><o:p> </o:p></p>
<p class="MsoNormal">@@ -491,6 +502,8 @@ static void psp_prep_tmr_cmd_buf(struct psp_context *psp,<o:p></o:p></p>
<p class="MsoNormal">             uint32_t size = amdgpu_bo_size(tmr_bo);<o:p></o:p></p>
<p class="MsoNormal">             uint64_t tmr_pa = amdgpu_gmc_vram_pa(adev, tmr_bo);<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">+            memset(cmd, 0, sizeof(struct psp_gfx_cmd_resp));<o:p></o:p></p>
<p class="MsoNormal">+<o:p></o:p></p>
<p class="MsoNormal">             if (amdgpu_sriov_vf(psp->adev))<o:p></o:p></p>
<p class="MsoNormal">                            cmd->cmd_id = GFX_CMD_ID_SETUP_VMR;<o:p></o:p></p>
<p class="MsoNormal">             else<o:p></o:p></p>
<p class="MsoNormal">@@ -506,6 +519,8 @@ static void psp_prep_tmr_cmd_buf(struct psp_context *psp,<o:p></o:p></p>
<p class="MsoNormal">static void psp_prep_load_toc_cmd_buf(struct psp_gfx_cmd_resp *cmd,<o:p></o:p></p>
<p class="MsoNormal">                                                               uint64_t pri_buf_mc, uint32_t size)<o:p></o:p></p>
<p class="MsoNormal">{<o:p></o:p></p>
<p class="MsoNormal">+            memset(cmd, 0, sizeof(struct psp_gfx_cmd_resp));<o:p></o:p></p>
<p class="MsoNormal">+<o:p></o:p></p>
<p class="MsoNormal">             cmd->cmd_id = GFX_CMD_ID_LOAD_TOC;<o:p></o:p></p>
<p class="MsoNormal">             cmd->cmd.cmd_load_toc.toc_phy_addr_lo = lower_32_bits(pri_buf_mc);<o:p></o:p></p>
<p class="MsoNormal">             cmd->cmd.cmd_load_toc.toc_phy_addr_hi = upper_32_bits(pri_buf_mc);<o:p></o:p></p>
<p class="MsoNormal">@@ -517,11 +532,8 @@ static int psp_load_toc(struct psp_context *psp,<o:p></o:p></p>
<p class="MsoNormal">                                          uint32_t *tmr_size)<o:p></o:p></p>
<p class="MsoNormal">{<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">+            struct psp_gfx_cmd_resp *cmd = psp->cmd;<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">-             cmd = kzalloc(sizeof(struct psp_gfx_cmd_resp), GFP_KERNEL);<o:p></o:p></p>
<p class="MsoNormal">-             if (!cmd)<o:p></o:p></p>
<p class="MsoNormal">-                           return -ENOMEM;<o:p></o:p></p>
<p class="MsoNormal">             /* Copy toc to psp firmware private buffer */<o:p></o:p></p>
<p class="MsoNormal">             psp_copy_fw(psp, psp->toc.start_addr, psp->toc.size_bytes);<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">@@ -531,7 +543,7 @@ static int psp_load_toc(struct psp_context *psp,<o:p></o:p></p>
<p class="MsoNormal">                                                          psp->fence_buf_mc_addr);<o:p></o:p></p>
<p class="MsoNormal">             if (!ret)<o:p></o:p></p>
<p class="MsoNormal">                            *tmr_size = psp->cmd_buf_mem->resp.tmr_size;<o:p></o:p></p>
<p class="MsoNormal">-             kfree(cmd);<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"><o:p> </o:p></p>
<p class="MsoNormal">@@ -588,7 +600,7 @@ static bool psp_skip_tmr(struct psp_context *psp)<o:p></o:p></p>
<p class="MsoNormal">static int psp_tmr_load(struct psp_context *psp)<o:p></o:p></p>
<p class="MsoNormal">{<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">+            struct psp_gfx_cmd_resp *cmd = psp->cmd;<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">              /* For Navi12 and CHIP_SIENNA_CICHLID SRIOV, do not set up TMR.<o:p></o:p></p>
<p class="MsoNormal">              * Already set up by host driver.<o:p></o:p></p>
<p class="MsoNormal">@@ -596,10 +608,6 @@ static int psp_tmr_load(struct psp_context *psp)<o:p></o:p></p>
<p class="MsoNormal">             if (amdgpu_sriov_vf(psp->adev) && psp_skip_tmr(psp))<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 = kzalloc(sizeof(struct psp_gfx_cmd_resp), GFP_KERNEL);<o:p></o:p></p>
<p class="MsoNormal">-             if (!cmd)<o:p></o:p></p>
<p class="MsoNormal">-                           return -ENOMEM;<o:p></o:p></p>
<p class="MsoNormal">-<o:p></o:p></p>
<p class="MsoNormal">             psp_prep_tmr_cmd_buf(psp, cmd, psp->tmr_mc_addr, psp->tmr_bo);<o:p></o:p></p>
<p class="MsoNormal">             DRM_INFO("reserve 0x%lx from 0x%llx for PSP TMR\n",<o:p></o:p></p>
<p class="MsoNormal">                             amdgpu_bo_size(psp->tmr_bo), psp->tmr_mc_addr);<o:p></o:p></p>
<p class="MsoNormal">@@ -607,14 +615,14 @@ static int psp_tmr_load(struct psp_context *psp)<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">-             kfree(cmd);<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"><o:p> </o:p></p>
<p class="MsoNormal"> static void psp_prep_tmr_unload_cmd_buf(struct psp_context *psp,<o:p></o:p></p>
<p class="MsoNormal">-                                                                       struct psp_gfx_cmd_resp *cmd)<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">+            memset(cmd, 0, sizeof(struct psp_gfx_cmd_resp));<o:p></o:p></p>
<p class="MsoNormal">+<o:p></o:p></p>
<p class="MsoNormal">             if (amdgpu_sriov_vf(psp->adev))<o:p></o:p></p>
<p class="MsoNormal">                            cmd->cmd_id = GFX_CMD_ID_DESTROY_VMR;<o:p></o:p></p>
<p class="MsoNormal">             else<o:p></o:p></p>
<p class="MsoNormal">@@ -624,11 +632,7 @@ static void psp_prep_tmr_unload_cmd_buf(struct psp_context *psp,<o:p></o:p></p>
<p class="MsoNormal">static int psp_tmr_unload(struct psp_context *psp)<o:p></o:p></p>
<p class="MsoNormal">{<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">-             cmd = kzalloc(sizeof(struct psp_gfx_cmd_resp), GFP_KERNEL);<o:p></o:p></p>
<p class="MsoNormal">-             if (!cmd)<o:p></o:p></p>
<p class="MsoNormal">-                           return -ENOMEM;<o:p></o:p></p>
<p class="MsoNormal">+            struct psp_gfx_cmd_resp *cmd = psp->cmd;<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">              psp_prep_tmr_unload_cmd_buf(psp, cmd);<o:p></o:p></p>
<p class="MsoNormal">             DRM_INFO("free PSP TMR buffer\n");<o:p></o:p></p>
<p class="MsoNormal">@@ -636,8 +640,6 @@ static int psp_tmr_unload(struct psp_context *psp)<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">-             kfree(cmd);<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"><o:p> </o:p></p>
<p class="MsoNormal">@@ -662,7 +664,9 @@ int psp_get_fw_attestation_records_addr(struct psp_context *psp,<o:p></o:p></p>
<p class="MsoNormal">                                                                       uint64_t *output_ptr)<o:p></o:p></p>
<p class="MsoNormal">{<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">+            struct psp_gfx_cmd_resp *cmd = psp->cmd;<o:p></o:p></p>
<p class="MsoNormal">+<o:p></o:p></p>
<p class="MsoNormal">+            memset(cmd, 0, sizeof(struct psp_gfx_cmd_resp));<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">              if (!output_ptr)<o:p></o:p></p>
<p class="MsoNormal">                            return -EINVAL;<o:p></o:p></p>
<p class="MsoNormal">@@ -670,10 +674,6 @@ int psp_get_fw_attestation_records_addr(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">-             cmd = kzalloc(sizeof(struct psp_gfx_cmd_resp), GFP_KERNEL);<o:p></o:p></p>
<p class="MsoNormal">-             if (!cmd)<o:p></o:p></p>
<p class="MsoNormal">-                           return -ENOMEM;<o:p></o:p></p>
<p class="MsoNormal">-<o:p></o:p></p>
<p class="MsoNormal">             cmd->cmd_id = GFX_CMD_ID_GET_FW_ATTESTATION;<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">@@ -684,29 +684,26 @@ int psp_get_fw_attestation_records_addr(struct psp_context *psp,<o:p></o:p></p>
<p class="MsoNormal">                                                ((uint64_t)cmd->resp.uresp.fwar_db_info.fwar_db_addr_hi << 32);<o:p></o:p></p>
<p class="MsoNormal">             }<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">-             kfree(cmd);<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"><o:p> </o:p></p>
<p class="MsoNormal"> static int psp_boot_config_get(struct amdgpu_device *adev, uint32_t *boot_cfg)<o:p></o:p></p>
<p class="MsoNormal">{<o:p></o:p></p>
<p class="MsoNormal">             struct psp_context *psp = &adev->psp;<o:p></o:p></p>
<p class="MsoNormal">-             struct psp_gfx_cmd_resp *cmd = psp->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">+            memset(psp->cmd, 0, sizeof(struct psp_gfx_cmd_resp));<o:p></o:p></p>
<p class="MsoNormal">+<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">-             memset(cmd, 0, sizeof(struct psp_gfx_cmd_resp));<o:p></o:p></p>
<p class="MsoNormal">-<o:p></o:p></p>
<p class="MsoNormal">-             cmd->cmd_id = GFX_CMD_ID_BOOT_CFG;<o:p></o:p></p>
<p class="MsoNormal">-             cmd->cmd.boot_cfg.sub_cmd = BOOTCFG_CMD_GET;<o:p></o:p></p>
<p class="MsoNormal">+            psp->cmd->cmd_id = GFX_CMD_ID_BOOT_CFG;<o:p></o:p></p>
<p class="MsoNormal">+            psp->cmd->cmd.boot_cfg.sub_cmd = BOOTCFG_CMD_GET;<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">-             ret = psp_cmd_submit_buf(psp, NULL, cmd, psp->fence_buf_mc_addr);<o:p></o:p></p>
<p class="MsoNormal">+            ret = psp_cmd_submit_buf(psp, NULL, psp->cmd, psp->fence_buf_mc_addr);<o:p></o:p></p>
<p class="MsoNormal">             if (!ret) {<o:p></o:p></p>
<p class="MsoNormal">                            *boot_cfg =<o:p></o:p></p>
<p class="MsoNormal">-                                          (cmd->resp.uresp.boot_cfg.boot_cfg & BOOT_CONFIG_GECC) ? 1 : 0;<o:p></o:p></p>
<p class="MsoNormal">+                                         (psp->cmd->resp.uresp.boot_cfg.boot_cfg & BOOT_CONFIG_GECC) ? 1 : 0;<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 ret;<o:p></o:p></p>
<p class="MsoNormal">@@ -715,19 +712,18 @@ static int psp_boot_config_get(struct amdgpu_device *adev, uint32_t *boot_cfg)<o:p></o:p></p>
<p class="MsoNormal">static int psp_boot_config_set(struct amdgpu_device *adev, uint32_t boot_cfg)<o:p></o:p></p>
<p class="MsoNormal">{<o:p></o:p></p>
<p class="MsoNormal">             struct psp_context *psp = &adev->psp;<o:p></o:p></p>
<p class="MsoNormal">-             struct psp_gfx_cmd_resp *cmd = psp->cmd;<o:p></o:p></p>
<p class="MsoNormal">+<o:p></o:p></p>
<p class="MsoNormal">+            memset(psp->cmd, 0, sizeof(struct psp_gfx_cmd_resp));<o:p></o:p></p>
<p class="MsoNormal"><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">-             memset(cmd, 0, sizeof(struct psp_gfx_cmd_resp));<o:p></o:p></p>
<p class="MsoNormal">-<o:p></o:p></p>
<p class="MsoNormal">-             cmd->cmd_id = GFX_CMD_ID_BOOT_CFG;<o:p></o:p></p>
<p class="MsoNormal">-             cmd->cmd.boot_cfg.sub_cmd = BOOTCFG_CMD_SET;<o:p></o:p></p>
<p class="MsoNormal">-             cmd->cmd.boot_cfg.boot_config = boot_cfg;<o:p></o:p></p>
<p class="MsoNormal">-             cmd->cmd.boot_cfg.boot_config_valid = boot_cfg;<o:p></o:p></p>
<p class="MsoNormal">+            psp->cmd->cmd_id = GFX_CMD_ID_BOOT_CFG;<o:p></o:p></p>
<p class="MsoNormal">+            psp->cmd->cmd.boot_cfg.sub_cmd = BOOTCFG_CMD_SET;<o:p></o:p></p>
<p class="MsoNormal">+            psp->cmd->cmd.boot_cfg.boot_config = boot_cfg;<o:p></o:p></p>
<p class="MsoNormal">+            psp->cmd->cmd.boot_cfg.boot_config_valid = boot_cfg;<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">-             return psp_cmd_submit_buf(psp, NULL, cmd, psp->fence_buf_mc_addr);<o:p></o:p></p>
<p class="MsoNormal">+            return psp_cmd_submit_buf(psp, NULL, psp->cmd, psp->fence_buf_mc_addr);<o:p></o:p></p>
<p class="MsoNormal">}<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> static int psp_rl_load(struct amdgpu_device *adev)<o:p></o:p></p>
<p class="MsoNormal">@@ -735,14 +731,14 @@ static int psp_rl_load(struct amdgpu_device *adev)<o:p></o:p></p>
<p class="MsoNormal">             struct psp_context *psp = &adev->psp;<o:p></o:p></p>
<p class="MsoNormal">             struct psp_gfx_cmd_resp *cmd = psp->cmd;<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">+            memset(cmd, 0, sizeof(struct psp_gfx_cmd_resp));<o:p></o:p></p>
<p class="MsoNormal">+<o:p></o:p></p>
<p class="MsoNormal">             if (!is_psp_fw_valid(psp->rl))<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">              memset(psp->fw_pri_buf, 0, PSP_1_MEG);<o:p></o:p></p>
<p class="MsoNormal">             memcpy(psp->fw_pri_buf, psp->rl.start_addr, psp->rl.size_bytes);<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">-             memset(cmd, 0, sizeof(struct psp_gfx_cmd_resp));<o:p></o:p></p>
<p class="MsoNormal">-<o:p></o:p></p>
<p class="MsoNormal">             cmd->cmd_id = GFX_CMD_ID_LOAD_IP_FW;<o:p></o:p></p>
<p class="MsoNormal">             cmd->cmd.cmd_load_ip_fw.fw_phy_addr_lo = lower_32_bits(psp->fw_pri_mc_addr);<o:p></o:p></p>
<p class="MsoNormal">             cmd->cmd.cmd_load_ip_fw.fw_phy_addr_hi = upper_32_bits(psp->fw_pri_mc_addr);<o:p></o:p></p>
<p class="MsoNormal">@@ -755,6 +751,8 @@ static int psp_rl_load(struct amdgpu_device *adev)<o:p></o:p></p>
<p class="MsoNormal">static void psp_prep_asd_load_cmd_buf(struct psp_gfx_cmd_resp *cmd,<o:p></o:p></p>
<p class="MsoNormal">                                                         uint64_t asd_mc, uint32_t size)<o:p></o:p></p>
<p class="MsoNormal">{<o:p></o:p></p>
<p class="MsoNormal">+            memset(cmd, 0, sizeof(struct psp_gfx_cmd_resp));<o:p></o:p></p>
<p class="MsoNormal">+<o:p></o:p></p>
<p class="MsoNormal">             cmd->cmd_id = GFX_CMD_ID_LOAD_ASD;<o:p></o:p></p>
<p class="MsoNormal">             cmd->cmd.cmd_load_ta.app_phy_addr_lo = lower_32_bits(asd_mc);<o:p></o:p></p>
<p class="MsoNormal">             cmd->cmd.cmd_load_ta.app_phy_addr_hi = upper_32_bits(asd_mc);<o:p></o:p></p>
<p class="MsoNormal">@@ -768,7 +766,7 @@ static void psp_prep_asd_load_cmd_buf(struct psp_gfx_cmd_resp *cmd,<o:p></o:p></p>
<p class="MsoNormal">static int psp_asd_load(struct psp_context *psp)<o:p></o:p></p>
<p class="MsoNormal">{<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">+            struct psp_gfx_cmd_resp *cmd = psp->cmd;<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">              /* If PSP version doesn't match ASD version, asd loading will be failed.<o:p></o:p></p>
<p class="MsoNormal">              * add workaround to bypass it for sriov now.<o:p></o:p></p>
<p class="MsoNormal">@@ -777,10 +775,6 @@ static int psp_asd_load(struct psp_context *psp)<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">                            return 0;<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">-             cmd = kzalloc(sizeof(struct psp_gfx_cmd_resp), GFP_KERNEL);<o:p></o:p></p>
<p class="MsoNormal">-             if (!cmd)<o:p></o:p></p>
<p class="MsoNormal">-                           return -ENOMEM;<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"><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">@@ -793,14 +787,14 @@ static int psp_asd_load(struct psp_context *psp)<o:p></o:p></p>
<p class="MsoNormal">                            psp->asd_context.session_id = cmd->resp.session_id;<o:p></o:p></p>
<p class="MsoNormal">             }<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">-             kfree(cmd);<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"><o:p> </o:p></p>
<p class="MsoNormal"> static void psp_prep_ta_unload_cmd_buf(struct psp_gfx_cmd_resp *cmd,<o:p></o:p></p>
<p class="MsoNormal">                                                                uint32_t session_id)<o:p></o:p></p>
<p class="MsoNormal">{<o:p></o:p></p>
<p class="MsoNormal">+            memset(cmd, 0, sizeof(struct psp_gfx_cmd_resp));<o:p></o:p></p>
<p class="MsoNormal">+<o:p></o:p></p>
<p class="MsoNormal">             cmd->cmd_id = GFX_CMD_ID_UNLOAD_TA;<o:p></o:p></p>
<p class="MsoNormal">             cmd->cmd.cmd_unload_ta.session_id = session_id;<o:p></o:p></p>
<p class="MsoNormal">}<o:p></o:p></p>
<p class="MsoNormal">@@ -808,7 +802,7 @@ static void psp_prep_ta_unload_cmd_buf(struct psp_gfx_cmd_resp *cmd,<o:p></o:p></p>
<p class="MsoNormal">static int psp_asd_unload(struct psp_context *psp)<o:p></o:p></p>
<p class="MsoNormal">{<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">+            struct psp_gfx_cmd_resp *cmd = psp->cmd;<o:p></o:p></p>
<p class="MsoNormal"><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">@@ -816,10 +810,6 @@ static int psp_asd_unload(struct psp_context *psp)<o:p></o:p></p>
<p class="MsoNormal">             if (!psp->asd_context.asd_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">-             cmd = kzalloc(sizeof(struct psp_gfx_cmd_resp), GFP_KERNEL);<o:p></o:p></p>
<p class="MsoNormal">-             if (!cmd)<o:p></o:p></p>
<p class="MsoNormal">-                           return -ENOMEM;<o:p></o:p></p>
<p class="MsoNormal">-<o:p></o:p></p>
<p class="MsoNormal">             psp_prep_ta_unload_cmd_buf(cmd, psp->asd_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">@@ -827,14 +817,14 @@ static int psp_asd_unload(struct psp_context *psp)<o:p></o:p></p>
<p class="MsoNormal">             if (!ret)<o:p></o:p></p>
<p class="MsoNormal">                            psp->asd_context.asd_initialized = false;<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">-             kfree(cmd);<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"><o:p> </o:p></p>
<p class="MsoNormal"> static void psp_prep_reg_prog_cmd_buf(struct psp_gfx_cmd_resp *cmd,<o:p></o:p></p>
<p class="MsoNormal">                            uint32_t id, uint32_t value)<o:p></o:p></p>
<p class="MsoNormal">{<o:p></o:p></p>
<p class="MsoNormal">+            memset(cmd, 0, sizeof(struct psp_gfx_cmd_resp));<o:p></o:p></p>
<p class="MsoNormal">+<o:p></o:p></p>
<p class="MsoNormal">             cmd->cmd_id = GFX_CMD_ID_PROG_REG;<o:p></o:p></p>
<p class="MsoNormal">             cmd->cmd.cmd_setup_reg_prog.reg_value = value;<o:p></o:p></p>
<p class="MsoNormal">             cmd->cmd.cmd_setup_reg_prog.reg_id = id;<o:p></o:p></p>
<p class="MsoNormal">@@ -843,22 +833,17 @@ static void psp_prep_reg_prog_cmd_buf(struct psp_gfx_cmd_resp *cmd,<o:p></o:p></p>
<p class="MsoNormal">int psp_reg_program(struct psp_context *psp, enum psp_reg_prog_id reg,<o:p></o:p></p>
<p class="MsoNormal">                            uint32_t value)<o:p></o:p></p>
<p class="MsoNormal">{<o:p></o:p></p>
<p class="MsoNormal">-             struct psp_gfx_cmd_resp *cmd = NULL;<o:p></o:p></p>
<p class="MsoNormal">+            struct psp_gfx_cmd_resp *cmd = psp->cmd;<o:p></o:p></p>
<p class="MsoNormal">             int ret = 0;<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">              if (reg >= PSP_REG_LAST)<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">-             cmd = kzalloc(sizeof(struct psp_gfx_cmd_resp), GFP_KERNEL);<o:p></o:p></p>
<p class="MsoNormal">-             if (!cmd)<o:p></o:p></p>
<p class="MsoNormal">-                           return -ENOMEM;<o:p></o:p></p>
<p class="MsoNormal">-<o:p></o:p></p>
<p class="MsoNormal">             psp_prep_reg_prog_cmd_buf(cmd, reg, value);<o:p></o:p></p>
<p class="MsoNormal">             ret = psp_cmd_submit_buf(psp, NULL, cmd, psp->fence_buf_mc_addr);<o:p></o:p></p>
<p class="MsoNormal">             if (ret)<o:p></o:p></p>
<p class="MsoNormal">                            DRM_ERROR("PSP failed to program reg id %d", reg);<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">-             kfree(cmd);<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">@@ -868,6 +853,8 @@ static void psp_prep_ta_load_cmd_buf(struct psp_gfx_cmd_resp *cmd,<o:p></o:p></p>
<p class="MsoNormal">                                                              uint64_t ta_shared_mc,<o:p></o:p></p>
<p class="MsoNormal">                                                              uint32_t ta_shared_size)<o:p></o:p></p>
<p class="MsoNormal">{<o:p></o:p></p>
<p class="MsoNormal">+            memset(cmd, 0, sizeof(struct psp_gfx_cmd_resp));<o:p></o:p></p>
<p class="MsoNormal">+<o:p></o:p></p>
<p class="MsoNormal">             cmd->cmd_id                                               = GFX_CMD_ID_LOAD_TA;<o:p></o:p></p>
<p class="MsoNormal">             cmd->cmd.cmd_load_ta.app_phy_addr_lo          = lower_32_bits(ta_bin_mc);<o:p></o:p></p>
<p class="MsoNormal">             cmd->cmd.cmd_load_ta.app_phy_addr_hi          = upper_32_bits(ta_bin_mc);<o:p></o:p></p>
<p class="MsoNormal">@@ -899,6 +886,8 @@ static void psp_prep_ta_invoke_cmd_buf(struct psp_gfx_cmd_resp *cmd,<o:p></o:p></p>
<p class="MsoNormal">                                                                uint32_t ta_cmd_id,<o:p></o:p></p>
<p class="MsoNormal">                                                                uint32_t session_id)<o:p></o:p></p>
<p class="MsoNormal">{<o:p></o:p></p>
<p class="MsoNormal">+            memset(cmd, 0, sizeof(struct psp_gfx_cmd_resp));<o:p></o:p></p>
<p class="MsoNormal">+<o:p></o:p></p>
<p class="MsoNormal">             cmd->cmd_id                                               = GFX_CMD_ID_INVOKE_CMD;<o:p></o:p></p>
<p class="MsoNormal">             cmd->cmd.cmd_invoke_cmd.session_id = session_id;<o:p></o:p></p>
<p class="MsoNormal">             cmd->cmd.cmd_invoke_cmd.ta_cmd_id = ta_cmd_id;<o:p></o:p></p>
<p class="MsoNormal">@@ -909,35 +898,25 @@ static int psp_ta_invoke(struct psp_context *psp,<o:p></o:p></p>
<p class="MsoNormal">                              uint32_t session_id)<o:p></o:p></p>
<p class="MsoNormal">{<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">-             cmd = kzalloc(sizeof(struct psp_gfx_cmd_resp), GFP_KERNEL);<o:p></o:p></p>
<p class="MsoNormal">-             if (!cmd)<o:p></o:p></p>
<p class="MsoNormal">-                           return -ENOMEM;<o:p></o:p></p>
<p class="MsoNormal">+            struct psp_gfx_cmd_resp *cmd = psp->cmd;<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">              psp_prep_ta_invoke_cmd_buf(cmd, ta_cmd_id, 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"><o:p> </o:p></p>
<p class="MsoNormal">-             kfree(cmd);<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"><o:p> </o:p></p>
<p class="MsoNormal"> 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">             int ret;<o:p></o:p></p>
<p class="MsoNormal">-             struct psp_gfx_cmd_resp *cmd;<o:p></o:p></p>
<p class="MsoNormal">+            struct psp_gfx_cmd_resp *cmd = psp->cmd;<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">              */<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">-             cmd = kzalloc(sizeof(struct psp_gfx_cmd_resp), GFP_KERNEL);<o:p></o:p></p>
<p class="MsoNormal">-             if (!cmd)<o:p></o:p></p>
<p class="MsoNormal">-                           return -ENOMEM;<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"><o:p> </o:p></p>
<p class="MsoNormal">              psp_prep_ta_load_cmd_buf(cmd,<o:p></o:p></p>
<p class="MsoNormal">@@ -954,15 +933,13 @@ static int psp_xgmi_load(struct psp_context *psp)<o:p></o:p></p>
<p class="MsoNormal">                            psp->xgmi_context.session_id = cmd->resp.session_id;<o:p></o:p></p>
<p class="MsoNormal">             }<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">-             kfree(cmd);<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"><o:p> </o:p></p>
<p class="MsoNormal"> static int psp_xgmi_unload(struct psp_context *psp)<o:p></o:p></p>
<p class="MsoNormal">{<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">+            struct psp_gfx_cmd_resp *cmd = psp->cmd;<o:p></o:p></p>
<p class="MsoNormal">             struct amdgpu_device *adev = psp->adev;<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">              /* XGMI TA unload currently is not supported on Arcturus/Aldebaran A+A */<o:p></o:p></p>
<p class="MsoNormal">@@ -974,17 +951,11 @@ static int psp_xgmi_unload(struct psp_context *psp)<o:p></o:p></p>
<p class="MsoNormal">              * TODO: bypass the unloading in sriov for now<o:p></o:p></p>
<p class="MsoNormal">              */<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">-             cmd = kzalloc(sizeof(struct psp_gfx_cmd_resp), GFP_KERNEL);<o:p></o:p></p>
<p class="MsoNormal">-             if (!cmd)<o:p></o:p></p>
<p class="MsoNormal">-                           return -ENOMEM;<o:p></o:p></p>
<p class="MsoNormal">-<o:p></o:p></p>
<p class="MsoNormal">             psp_prep_ta_unload_cmd_buf(cmd, psp->xgmi_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"><o:p> </o:p></p>
<p class="MsoNormal">-             kfree(cmd);<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"><o:p> </o:p></p>
<p class="MsoNormal">@@ -1204,7 +1175,7 @@ static int psp_ras_init_shared_buf(struct psp_context *psp)<o:p></o:p></p>
<p class="MsoNormal">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">             int ret;<o:p></o:p></p>
<p class="MsoNormal">-             struct psp_gfx_cmd_resp *cmd;<o:p></o:p></p>
<p class="MsoNormal">+            struct psp_gfx_cmd_resp *cmd = psp->cmd;<o:p></o:p></p>
<p class="MsoNormal">             struct ta_ras_shared_memory *ras_cmd;<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">              /*<o:p></o:p></p>
<p class="MsoNormal">@@ -1213,10 +1184,6 @@ 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">-             cmd = kzalloc(sizeof(struct psp_gfx_cmd_resp), GFP_KERNEL);<o:p></o:p></p>
<p class="MsoNormal">-             if (!cmd)<o:p></o:p></p>
<p class="MsoNormal">-                           return -ENOMEM;<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"><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">@@ -1247,15 +1214,13 @@ static int psp_ras_load(struct psp_context *psp)<o:p></o:p></p>
<p class="MsoNormal">             if (ret || ras_cmd->ras_status)<o:p></o:p></p>
<p class="MsoNormal">                            amdgpu_ras_fini(psp->adev);<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">-             kfree(cmd);<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"><o:p> </o:p></p>
<p class="MsoNormal"> 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">             int ret;<o:p></o:p></p>
<p class="MsoNormal">-             struct psp_gfx_cmd_resp *cmd;<o:p></o:p></p>
<p class="MsoNormal">+            struct psp_gfx_cmd_resp *cmd = psp->cmd;<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 unloading in sriov for now<o:p></o:p></p>
<p class="MsoNormal">@@ -1263,17 +1228,11 @@ static int psp_ras_unload(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">-             cmd = kzalloc(sizeof(struct psp_gfx_cmd_resp), GFP_KERNEL);<o:p></o:p></p>
<p class="MsoNormal">-             if (!cmd)<o:p></o:p></p>
<p class="MsoNormal">-                           return -ENOMEM;<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"><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">-             kfree(cmd);<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"><o:p> </o:p></p>
<p class="MsoNormal">@@ -1514,7 +1473,7 @@ static int psp_hdcp_init_shared_buf(struct psp_context *psp)<o:p></o:p></p>
<p class="MsoNormal">static int psp_hdcp_load(struct psp_context *psp)<o:p></o:p></p>
<p class="MsoNormal">{<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">+            struct psp_gfx_cmd_resp *cmd = psp->cmd;<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">@@ -1522,10 +1481,6 @@ 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">-             cmd = kzalloc(sizeof(struct psp_gfx_cmd_resp), GFP_KERNEL);<o:p></o:p></p>
<p class="MsoNormal">-             if (!cmd)<o:p></o:p></p>
<p class="MsoNormal">-                           return -ENOMEM;<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"><o:p> </o:p></p>
<p class="MsoNormal">@@ -1543,8 +1498,6 @@ static int psp_hdcp_load(struct psp_context *psp)<o:p></o:p></p>
<p class="MsoNormal">                            mutex_init(&psp->hdcp_context.mutex);<o:p></o:p></p>
<p class="MsoNormal">             }<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">-             kfree(cmd);<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">static int psp_hdcp_initialize(struct psp_context *psp)<o:p></o:p></p>
<p class="MsoNormal">@@ -1579,7 +1532,7 @@ static int psp_hdcp_initialize(struct psp_context *psp)<o:p></o:p></p>
<p class="MsoNormal">static int psp_hdcp_unload(struct psp_context *psp)<o:p></o:p></p>
<p class="MsoNormal">{<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">+            struct psp_gfx_cmd_resp *cmd = psp->cmd;<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 unloading in sriov for now<o:p></o:p></p>
<p class="MsoNormal">@@ -1587,16 +1540,10 @@ static int psp_hdcp_unload(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">-             cmd = kzalloc(sizeof(struct psp_gfx_cmd_resp), GFP_KERNEL);<o:p></o:p></p>
<p class="MsoNormal">-             if (!cmd)<o:p></o:p></p>
<p class="MsoNormal">-                           return -ENOMEM;<o:p></o:p></p>
<p class="MsoNormal">-<o:p></o:p></p>
<p class="MsoNormal">             psp_prep_ta_unload_cmd_buf(cmd, psp->hdcp_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, psp->fence_buf_mc_addr);<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">-             kfree(cmd);<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"><o:p> </o:p></p>
<p class="MsoNormal">@@ -1665,7 +1612,7 @@ static int psp_dtm_init_shared_buf(struct psp_context *psp)<o:p></o:p></p>
<p class="MsoNormal">static int psp_dtm_load(struct psp_context *psp)<o:p></o:p></p>
<p class="MsoNormal">{<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">+            struct psp_gfx_cmd_resp *cmd = psp->cmd;<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">@@ -1673,10 +1620,6 @@ 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">-             cmd = kzalloc(sizeof(struct psp_gfx_cmd_resp), GFP_KERNEL);<o:p></o:p></p>
<p class="MsoNormal">-             if (!cmd)<o:p></o:p></p>
<p class="MsoNormal">-                           return -ENOMEM;<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"><o:p> </o:p></p>
<p class="MsoNormal">              psp_prep_ta_load_cmd_buf(cmd,<o:p></o:p></p>
<p class="MsoNormal">@@ -1693,8 +1636,6 @@ static int psp_dtm_load(struct psp_context *psp)<o:p></o:p></p>
<p class="MsoNormal">                            mutex_init(&psp->dtm_context.mutex);<o:p></o:p></p>
<p class="MsoNormal">             }<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">-             kfree(cmd);<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"><o:p> </o:p></p>
<p class="MsoNormal">@@ -1730,7 +1671,7 @@ static int psp_dtm_initialize(struct psp_context *psp)<o:p></o:p></p>
<p class="MsoNormal">static int psp_dtm_unload(struct psp_context *psp)<o:p></o:p></p>
<p class="MsoNormal">{<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">+            struct psp_gfx_cmd_resp *cmd = psp->cmd;<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 unloading in sriov for now<o:p></o:p></p>
<p class="MsoNormal">@@ -1738,16 +1679,10 @@ static int psp_dtm_unload(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">-             cmd = kzalloc(sizeof(struct psp_gfx_cmd_resp), GFP_KERNEL);<o:p></o:p></p>
<p class="MsoNormal">-             if (!cmd)<o:p></o:p></p>
<p class="MsoNormal">-                           return -ENOMEM;<o:p></o:p></p>
<p class="MsoNormal">-<o:p></o:p></p>
<p class="MsoNormal">             psp_prep_ta_unload_cmd_buf(cmd, psp->dtm_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, psp->fence_buf_mc_addr);<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">-             kfree(cmd);<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"><o:p> </o:p></p>
<p class="MsoNormal">@@ -1816,11 +1751,7 @@ static int psp_rap_init_shared_buf(struct psp_context *psp)<o:p></o:p></p>
<p class="MsoNormal">static int psp_rap_load(struct psp_context *psp)<o:p></o:p></p>
<p class="MsoNormal">{<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">-             cmd = kzalloc(sizeof(struct psp_gfx_cmd_resp), GFP_KERNEL);<o:p></o:p></p>
<p class="MsoNormal">-             if (!cmd)<o:p></o:p></p>
<p class="MsoNormal">-                           return -ENOMEM;<o:p></o:p></p>
<p class="MsoNormal">+            struct psp_gfx_cmd_resp *cmd = psp->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"><o:p> </o:p></p>
<p class="MsoNormal">@@ -1838,26 +1769,18 @@ static int psp_rap_load(struct psp_context *psp)<o:p></o:p></p>
<p class="MsoNormal">                            mutex_init(&psp->rap_context.mutex);<o:p></o:p></p>
<p class="MsoNormal">             }<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">-             kfree(cmd);<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"><o:p> </o:p></p>
<p class="MsoNormal"> static int psp_rap_unload(struct psp_context *psp)<o:p></o:p></p>
<p class="MsoNormal">{<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">-             cmd = kzalloc(sizeof(struct psp_gfx_cmd_resp), GFP_KERNEL);<o:p></o:p></p>
<p class="MsoNormal">-             if (!cmd)<o:p></o:p></p>
<p class="MsoNormal">-                           return -ENOMEM;<o:p></o:p></p>
<p class="MsoNormal">+            struct psp_gfx_cmd_resp *cmd = psp->cmd;<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">              psp_prep_ta_unload_cmd_buf(cmd, psp->rap_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, psp->fence_buf_mc_addr);<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">-             kfree(cmd);<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"><o:p> </o:p></p>
<p class="MsoNormal">@@ -1982,11 +1905,7 @@ static int psp_securedisplay_init_shared_buf(struct psp_context *psp)<o:p></o:p></p>
<p class="MsoNormal">static int psp_securedisplay_load(struct psp_context *psp)<o:p></o:p></p>
<p class="MsoNormal">{<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">-             cmd = kzalloc(sizeof(struct psp_gfx_cmd_resp), GFP_KERNEL);<o:p></o:p></p>
<p class="MsoNormal">-             if (!cmd)<o:p></o:p></p>
<p class="MsoNormal">-                           return -ENOMEM;<o:p></o:p></p>
<p class="MsoNormal">+            struct psp_gfx_cmd_resp *cmd = psp->cmd;<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">@@ -2007,25 +1926,18 @@ static int psp_securedisplay_load(struct psp_context *psp)<o:p></o:p></p>
<p class="MsoNormal">             mutex_init(&psp->securedisplay_context.mutex);<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> failed:<o:p></o:p></p>
<p class="MsoNormal">-             kfree(cmd);<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"> static int psp_securedisplay_unload(struct psp_context *psp)<o:p></o:p></p>
<p class="MsoNormal">{<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">-             cmd = kzalloc(sizeof(struct psp_gfx_cmd_resp), GFP_KERNEL);<o:p></o:p></p>
<p class="MsoNormal">-             if (!cmd)<o:p></o:p></p>
<p class="MsoNormal">-                           return -ENOMEM;<o:p></o:p></p>
<p class="MsoNormal">+            struct psp_gfx_cmd_resp *cmd = psp->cmd;<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">              psp_prep_ta_unload_cmd_buf(cmd, psp->securedisplay_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, psp->fence_buf_mc_addr);<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">-             kfree(cmd);<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"><o:p> </o:p></p>
<p class="MsoNormal">@@ -2552,10 +2464,6 @@ static int psp_load_fw(struct amdgpu_device *adev)<o:p></o:p></p>
<p class="MsoNormal">                            goto skip_memalloc;<o:p></o:p></p>
<p class="MsoNormal">             }<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">-             psp->cmd = kzalloc(sizeof(struct psp_gfx_cmd_resp), GFP_KERNEL);<o:p></o:p></p>
<p class="MsoNormal">-             if (!psp->cmd)<o:p></o:p></p>
<p class="MsoNormal">-                           return -ENOMEM;<o:p></o:p></p>
<p class="MsoNormal">-<o:p></o:p></p>
<p class="MsoNormal">             if (amdgpu_sriov_vf(adev)) {<o:p></o:p></p>
<p class="MsoNormal">                            ret = amdgpu_bo_create_kernel(adev, PSP_1_MEG, PSP_1_MEG,<o:p></o:p></p>
<p class="MsoNormal">                                                                                     AMDGPU_GEM_DOMAIN_VRAM,<o:p></o:p></p>
<p class="MsoNormal">@@ -2709,9 +2617,6 @@ static int psp_hw_fini(void *handle)<o:p></o:p></p>
<p class="MsoNormal">             amdgpu_bo_free_kernel(&psp->cmd_buf_bo, &psp->cmd_buf_mc_addr,<o:p></o:p></p>
<p class="MsoNormal">                                                (void **)&psp->cmd_buf_mem);<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">-             kfree(psp->cmd);<o:p></o:p></p>
<p class="MsoNormal">-             psp->cmd = NULL;<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"><o:p> </o:p></p>
<p class="MsoNormal">@@ -2875,17 +2780,15 @@ int psp_gpu_reset(struct amdgpu_device *adev)<o:p></o:p></p>
<p class="MsoNormal">int psp_rlc_autoload_start(struct psp_context *psp)<o:p></o:p></p>
<p class="MsoNormal">{<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">+            struct psp_gfx_cmd_resp *cmd = psp->cmd;<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">-             cmd = kzalloc(sizeof(struct psp_gfx_cmd_resp), GFP_KERNEL);<o:p></o:p></p>
<p class="MsoNormal">-             if (!cmd)<o:p></o:p></p>
<p class="MsoNormal">-                           return -ENOMEM;<o:p></o:p></p>
<p class="MsoNormal">+            memset(cmd, 0, sizeof(struct psp_gfx_cmd_resp));<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">              cmd->cmd_id = GFX_CMD_ID_AUTOLOAD_RLC;<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">-             kfree(cmd);<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"><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"><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>