driver loading failed on VEGA10 SRIOV VF with linux host due to a wide range of stolen reserved vram. Since VEGA10 SRIOV VF need to reserve vram for firmware with windows Hyper_V host specifically, check high part of FB address to only reserve memory for it, and the range of the reserved vram can be limited to between 5M-7M area. Signed-off-by: Yongqiang Sun <yongqiang.sun@xxxxxxx> --- drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c | 9 +++++---- drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.h | 3 +++ 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c index a66a0881a934..324b43c1bc4c 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c @@ -647,11 +647,12 @@ void amdgpu_gmc_get_vbios_allocations(struct amdgpu_device *adev) case CHIP_VEGA10: adev->mman.keep_stolen_vga_memory = true; /* - * VEGA10 SRIOV VF needs some firmware reserved area. + * VEGA10 SRIOV VF with hyper-v host needs some firmware reserved area. */ - if (amdgpu_sriov_vf(adev)) { - adev->mman.stolen_reserved_offset = 0x100000; - adev->mman.stolen_reserved_size = 0x600000; + if (amdgpu_sriov_vf(adev) && + (adev->gmc.vram_start & AMDGPU_GMC_HYPERV_FB_BASE_MASK)) { + adev->mman.stolen_reserved_offset = 0x500000; + adev->mman.stolen_reserved_size = 0x200000; } break; case CHIP_RAVEN: diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.h index 032b0313f277..906ec15e8dac 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.h @@ -61,6 +61,9 @@ */ #define AMDGPU_GMC_FAULT_TIMEOUT 5000ULL +/* High part (33 - 47bit) FB address for VEGA10 HYPERV Host*/ +#define AMDGPU_GMC_HYPERV_FB_BASE_MASK 0xF400000000ULL + struct firmware; /* -- 2.25.1