From: Lijo Lazar <lijo.la...@amd.com>

If SOC doesn't expose dedicated vram, discovery region may be
available through system memory. Rename the existing interface to
generic read_binary_from_mem and add a fallback path to read from system
memory.

Signed-off-by: Lijo Lazar <lijo.la...@amd.com>
Reviewed-by: Hawking Zhang <hawking.zh...@amd.com>
Signed-off-by: Alex Deucher <alexander.deuc...@amd.com>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c | 21 ++++++++++++++-----
 1 file changed, 16 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c
index 246070938c41..01b21988c1ae 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c
@@ -226,13 +226,21 @@ static int 
amdgpu_discovery_read_binary_from_sysmem(struct amdgpu_device *adev,
        return -ENOENT;
 }
 
-static void amdgpu_discovery_read_binary_from_vram(struct amdgpu_device *adev, 
uint8_t *binary)
+static int amdgpu_discovery_read_binary_from_mem(struct amdgpu_device *adev,
+                                                uint8_t *binary)
 {
        uint64_t vram_size = (uint64_t)RREG32(mmRCC_CONFIG_MEMSIZE) << 20;
-       uint64_t pos = vram_size - DISCOVERY_TMR_OFFSET;
+       int ret = 0;
 
-       amdgpu_device_vram_access(adev, pos, (uint32_t *)binary,
-                                 adev->mman.discovery_tmr_size, false);
+       if (vram_size) {
+               uint64_t pos = vram_size - DISCOVERY_TMR_OFFSET;
+               amdgpu_device_vram_access(adev, pos, (uint32_t *)binary,
+                                         adev->mman.discovery_tmr_size, false);
+       } else {
+               ret = amdgpu_discovery_read_binary_from_sysmem(adev, binary);
+       }
+
+       return ret;
 }
 
 static int amdgpu_discovery_read_binary_from_file(struct amdgpu_device *adev, 
uint8_t *binary)
@@ -338,7 +346,10 @@ static int amdgpu_discovery_init(struct amdgpu_device 
*adev)
                }
 
        } else {
-               amdgpu_discovery_read_binary_from_vram(adev, 
adev->mman.discovery_bin);
+               r = amdgpu_discovery_read_binary_from_mem(
+                       adev, adev->mman.discovery_bin);
+               if (r)
+                       goto out;
        }
 
        /* check the ip discovery binary signature */
-- 
2.40.1

Reply via email to