For legacy SOCs, discovery binary is sideloaded. Instead of checking for
binary blob, use a flag to determine if discovery region needs to be
reserved.

Signed-off-by: Lijo Lazar <[email protected]>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c | 10 ++++++++-
 drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.h |  1 +
 drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c       | 22 ++++++++-----------
 3 files changed, 19 insertions(+), 14 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c
index 02b661232db8..478cbfcc5b5d 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c
@@ -298,10 +298,15 @@ static int amdgpu_discovery_read_binary_from_mem(struct 
amdgpu_device *adev,
        else
                vram_size <<= 20;
 
+       /*
+        * If in VRAM, discovery TMR is marked for reservation. If it is in 
system mem,
+        * then it is not required to be reserved.
+        */
        if (sz_valid) {
                uint64_t pos = vram_size - DISCOVERY_TMR_OFFSET;
                amdgpu_device_vram_access(adev, pos, (uint32_t *)binary,
                                          adev->discovery.size, false);
+               adev->discovery.reserve_tmr = true;
        } else {
                ret = amdgpu_discovery_read_binary_from_sysmem(adev, binary);
        }
@@ -418,8 +423,11 @@ static int amdgpu_discovery_verify_npsinfo(struct 
amdgpu_device *adev,
 
 static const char *amdgpu_discovery_get_fw_name(struct amdgpu_device *adev)
 {
-       if (amdgpu_discovery == 2)
+       if (amdgpu_discovery == 2) {
+               /* Assume there is valid discovery TMR in VRAM even if binary 
is sideloaded */
+               adev->discovery.reserve_tmr = true;
                return "amdgpu/ip_discovery.bin";
+       }
 
        switch (adev->asic_type) {
        case CHIP_VEGA10:
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.h 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.h
index b1eec3af3c4a..4ce04486cc31 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.h
@@ -36,6 +36,7 @@ struct amdgpu_discovery_info {
        struct ip_discovery_top *ip_top;
        uint32_t size;
        uint8_t *bin;
+       bool reserve_tmr;
 };
 
 void amdgpu_discovery_fini(struct amdgpu_device *adev);
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
index 5bf6bb3b2faa..d0a7379255e8 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
@@ -1767,18 +1767,14 @@ static int amdgpu_ttm_reserve_tmr(struct amdgpu_device 
*adev)
                ctx->init = PSP_MEM_TRAIN_RESERVE_SUCCESS;
        }
 
-       if (!adev->gmc.is_app_apu) {
-               ret = amdgpu_bo_create_kernel_at(
-                       adev, adev->gmc.real_vram_size - reserve_size,
-                       reserve_size, &adev->mman.fw_reserved_memory, NULL);
-               if (ret) {
-                       dev_err(adev->dev, "alloc tmr failed(%d)!\n", ret);
-                       amdgpu_bo_free_kernel(&adev->mman.fw_reserved_memory,
-                                             NULL, NULL);
-                       return ret;
-               }
-       } else {
-               DRM_DEBUG_DRIVER("backdoor fw loading path for PSP TMR, no 
reservation needed\n");
+       ret = amdgpu_bo_create_kernel_at(
+               adev, adev->gmc.real_vram_size - reserve_size, reserve_size,
+               &adev->mman.fw_reserved_memory, NULL);
+       if (ret) {
+               dev_err(adev->dev, "alloc tmr failed(%d)!\n", ret);
+               amdgpu_bo_free_kernel(&adev->mman.fw_reserved_memory, NULL,
+                                     NULL);
+               return ret;
        }
 
        return 0;
@@ -1955,7 +1951,7 @@ int amdgpu_ttm_init(struct amdgpu_device *adev)
         * If IP discovery enabled, a block of memory should be
         * reserved for IP discovey.
         */
-       if (adev->discovery.bin) {
+       if (adev->discovery.reserve_tmr) {
                r = amdgpu_ttm_reserve_tmr(adev);
                if (r)
                        return r;
-- 
2.49.0

Reply via email to