Adds support to disable FB carveout via PSP mailbox for passthrough A+A.

Signed-off-by: Dejan Andjelkovic <[email protected]>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c | 16 ++++++++++++++++
 drivers/gpu/drm/amd/amdgpu/psp_gfx_if.h       |  2 ++
 2 files changed, 18 insertions(+)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c
index 3372de34149c..872af286e3d7 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c
@@ -455,6 +455,19 @@ static int 
amdgpu_discovery_read_binary_from_psp_mailbox(struct amdgpu_device *a
        return ret;
 }
 
+static int amdgpu_discovery_disable_fb_carveout(struct amdgpu_device *adev)
+{
+       int ret;
+
+       WREG32(mmMP0_SMN_C2PMSG_64, GFX_CTRL_CMD_ID_DISABLE_FB_CARVEOUT);
+
+       ret = amdgpu_discovery_wait_psp_gfx_ctrl_resp(adev);
+       if (ret)
+               dev_err(adev->dev, "disable_fb_carveout: PSP wait timed out\n");
+
+       return ret;
+}
+
 #define IP_DISCOVERY_V2                2
 #define IP_DISCOVERY_V4                4
 
@@ -823,6 +836,9 @@ static int amdgpu_discovery_init(struct amdgpu_device *adev)
                amdgpu_passthrough(adev)) {
                drm_dbg(&adev->ddev, "use ip discovery information from psp 
mailbox");
                r = amdgpu_discovery_read_binary_from_psp_mailbox(adev, 
discovery_bin);
+               if (r)
+                       goto out;
+               r = amdgpu_discovery_disable_fb_carveout(adev);
        }
 
        if (r)
diff --git a/drivers/gpu/drm/amd/amdgpu/psp_gfx_if.h 
b/drivers/gpu/drm/amd/amdgpu/psp_gfx_if.h
index bc777f53a193..7b4ed3bc23d5 100644
--- a/drivers/gpu/drm/amd/amdgpu/psp_gfx_if.h
+++ b/drivers/gpu/drm/amd/amdgpu/psp_gfx_if.h
@@ -50,6 +50,8 @@ enum psp_gfx_crtl_cmd_id
     GFX_CTRL_CMD_ID_CONSUME_CMD     = 0x00090000,   /* send interrupt to psp 
for updating write pointer of vf */
     GFX_CTRL_CMD_ID_DESTROY_GPCOM_RING = 0x000C0000, /* destroy GPCOM ring */
     GFX_CTRL_CMD_ID_GET_IP_DISCOVERY   = 0x000D0000,   /**< Copy 
IP_DISCOVERY_DATA to host-specified address */
+    GFX_CTRL_CMD_ID_DISABLE_FB_CARVEOUT = 0x00100000,   /**< message runtime 
VBL to disable FB carveout */
+    GFX_CTRL_CMD_ID_ENABLE_FB_CARVEOUT  = 0x00110000,   /**< message runtime 
VBL to enable FB carveout */
 
     GFX_CTRL_CMD_ID_MAX             = 0x000F0000,   /* max command ID */
 };
-- 
2.43.0

Reply via email to