<html 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:SimSun;
        panose-1:2 1 6 0 3 1 1 1 1 1;}
@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;}
@font-face
        {font-family:"\@SimSun";
        panose-1:2 1 6 0 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        font-size:10.0pt;
        font-family:"Calibri",sans-serif;}
span.EmailStyle19
        {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>
</head>
<body lang="EN-US" link="#0563C1" vlink="#954F72" style="word-wrap:break-word">
<p style="font-family:Arial;font-size:10pt;color:#0000FF;margin:5pt;" align="Left">
[AMD Official Use Only - General]<br>
</p>
<br>
<div>
<div class="WordSection1">
<p class="MsoNormal"><span style="font-size:11.0pt">Reviewed-by: Hawking Zhang <Hawking.Zhang@amd.com><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">Regards,<br>
Hawking<o:p></o:p></span></p>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal" style="margin-bottom:12.0pt"><b><span style="font-size:12.0pt;color:black">From:
</span></b><span style="font-size:12.0pt;color:black">amd-gfx <amd-gfx-bounces@lists.freedesktop.org> on behalf of Candice Li <Candice.Li@amd.com><br>
<b>Date: </b>Saturday, September 10, 2022 at 07:00<br>
<b>To: </b>amd-gfx@lists.freedesktop.org <amd-gfx@lists.freedesktop.org><br>
<b>Cc: </b>Li, Candice <Candice.Li@amd.com>, Clements, John <John.Clements@amd.com><br>
<b>Subject: </b>[PATCH] drm/amdgpu: added support for ras driver loading<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="margin-bottom:12.0pt"><span style="font-size:11.0pt">From: John Clements <john.clements@amd.com><br>
<br>
copy ras driver to psp if present<br>
<br>
Signed-off-by: John Clements <john.clements@amd.com><br>
---<br>
 drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c   | 15 +++++++++++++++<br>
 drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h   |  6 ++++++<br>
 drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h |  1 +<br>
 drivers/gpu/drm/amd/amdgpu/psp_v13_0.c    |  7 +++++++<br>
 4 files changed, 29 insertions(+)<br>
<br>
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c<br>
index cfcaf890a6a122..218666f6203a9f 100644<br>
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c<br>
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c<br>
@@ -2055,6 +2055,15 @@ static int psp_hw_start(struct psp_context *psp)<br>
                         }<br>
                 }<br>
 <br>
+               if ((is_psp_fw_valid(psp->ras_drv)) &&<br>
+                   (psp->funcs->bootloader_load_ras_drv != NULL)) {<br>
+                       ret = psp_bootloader_load_ras_drv(psp);<br>
+                       if (ret) {<br>
+                               DRM_ERROR("PSP load ras_drv failed!\n");<br>
+                               return ret;<br>
+                       }<br>
+               }<br>
+<br>
                 if ((is_psp_fw_valid(psp->sos)) &&<br>
                     (psp->funcs->bootloader_load_sos != NULL)) {<br>
                         ret = psp_bootloader_load_sos(psp);<br>
@@ -3040,6 +3049,12 @@ static int parse_sos_bin_descriptor(struct psp_context *psp,<br>
                 psp->dbg_drv.size_bytes         = le32_to_cpu(desc->size_bytes);<br>
                 psp->dbg_drv.start_addr         = ucode_start_addr;<br>
                 break;<br>
+       case PSP_FW_TYPE_PSP_RAS_DRV:<br>
+               psp->ras_drv.fw_version         = le32_to_cpu(desc->fw_version);<br>
+               psp->ras_drv.feature_version    = le32_to_cpu(desc->fw_version);<br>
+               psp->ras_drv.size_bytes         = le32_to_cpu(desc->size_bytes);<br>
+               psp->ras_drv.start_addr         = ucode_start_addr;<br>
+               break;<br>
         default:<br>
                 dev_warn(psp->adev->dev, "Unsupported PSP FW type: %d\n", desc->fw_type);<br>
                 break;<br>
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h<br>
index c32b74bd970fc5..d7a5ff4660cf9e 100644<br>
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h<br>
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h<br>
@@ -71,6 +71,7 @@ enum psp_bootloader_cmd {<br>
         PSP_BL__LOAD_SOCDRV             = 0xB0000,<br>
         PSP_BL__LOAD_DBGDRV             = 0xC0000,<br>
         PSP_BL__LOAD_INTFDRV            = 0xD0000,<br>
+       PSP_BL__LOAD_RASDRV                 = 0xE0000,<br>
         PSP_BL__DRAM_LONG_TRAIN         = 0x100000,<br>
         PSP_BL__DRAM_SHORT_TRAIN        = 0x200000,<br>
         PSP_BL__LOAD_TOS_SPL_TABLE      = 0x10000000,<br>
@@ -114,6 +115,7 @@ struct psp_funcs<br>
         int (*bootloader_load_soc_drv)(struct psp_context *psp);<br>
         int (*bootloader_load_intf_drv)(struct psp_context *psp);<br>
         int (*bootloader_load_dbg_drv)(struct psp_context *psp);<br>
+       int (*bootloader_load_ras_drv)(struct psp_context *psp);<br>
         int (*bootloader_load_sos)(struct psp_context *psp);<br>
         int (*ring_init)(struct psp_context *psp, enum psp_ring_type ring_type);<br>
         int (*ring_create)(struct psp_context *psp,<br>
@@ -323,6 +325,7 @@ struct psp_context<br>
         struct psp_bin_desc             soc_drv;<br>
         struct psp_bin_desc             intf_drv;<br>
         struct psp_bin_desc             dbg_drv;<br>
+       struct psp_bin_desc             ras_drv;<br>
 <br>
         /* tmr buffer */<br>
         struct amdgpu_bo                *tmr_bo;<br>
@@ -403,6 +406,9 @@ struct amdgpu_psp_funcs {<br>
                 ((psp)->funcs->bootloader_load_intf_drv ? (psp)->funcs->bootloader_load_intf_drv((psp)) : 0)<br>
 #define psp_bootloader_load_dbg_drv(psp) \<br>
                 ((psp)->funcs->bootloader_load_dbg_drv ? (psp)->funcs->bootloader_load_dbg_drv((psp)) : 0)<br>
+#define psp_bootloader_load_ras_drv(psp) \<br>
+               ((psp)->funcs->bootloader_load_ras_drv ? \<br>
+               (psp)->funcs->bootloader_load_ras_drv((psp)) : 0)<br>
 #define psp_bootloader_load_sos(psp) \<br>
                 ((psp)->funcs->bootloader_load_sos ? (psp)->funcs->bootloader_load_sos((psp)) : 0)<br>
 #define psp_smu_reload_quirk(psp) \<br>
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h<br>
index 96b6cf4c4d54f8..3975bcaa2c8997 100644<br>
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h<br>
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h<br>
@@ -124,6 +124,7 @@ enum psp_fw_type {<br>
         PSP_FW_TYPE_PSP_SOC_DRV,<br>
         PSP_FW_TYPE_PSP_INTF_DRV,<br>
         PSP_FW_TYPE_PSP_DBG_DRV,<br>
+       PSP_FW_TYPE_PSP_RAS_DRV,<br>
 };<br>
 <br>
 /* version_major=2, version_minor=0 */<br>
diff --git a/drivers/gpu/drm/amd/amdgpu/psp_v13_0.c b/drivers/gpu/drm/amd/amdgpu/psp_v13_0.c<br>
index eac33d5c93e74f..262dcd7513a6fb 100644<br>
--- a/drivers/gpu/drm/amd/amdgpu/psp_v13_0.c<br>
+++ b/drivers/gpu/drm/amd/amdgpu/psp_v13_0.c<br>
@@ -223,6 +223,12 @@ static int psp_v13_0_bootloader_load_dbg_drv(struct psp_context *psp)<br>
         return psp_v13_0_bootloader_load_component(psp, &psp->dbg_drv, PSP_BL__LOAD_DBGDRV);<br>
 }<br>
 <br>
+static int psp_v13_0_bootloader_load_ras_drv(struct psp_context *psp)<br>
+{<br>
+       return psp_v13_0_bootloader_load_component(psp, &psp->ras_drv, PSP_BL__LOAD_RASDRV);<br>
+}<br>
+<br>
+<br>
 static int psp_v13_0_bootloader_load_sos(struct psp_context *psp)<br>
 {<br>
         int ret;<br>
@@ -719,6 +725,7 @@ static const struct psp_funcs psp_v13_0_funcs = {<br>
         .bootloader_load_soc_drv = psp_v13_0_bootloader_load_soc_drv,<br>
         .bootloader_load_intf_drv = psp_v13_0_bootloader_load_intf_drv,<br>
         .bootloader_load_dbg_drv = psp_v13_0_bootloader_load_dbg_drv,<br>
+       .bootloader_load_ras_drv = psp_v13_0_bootloader_load_ras_drv,<br>
         .bootloader_load_sos = psp_v13_0_bootloader_load_sos,<br>
         .ring_init = psp_v13_0_ring_init,<br>
         .ring_create = psp_v13_0_ring_create,<br>
-- <br>
2.17.1<o:p></o:p></span></p>
</div>
</div>
</div>
</body>
</html>