On SRIOV and VM environment, customer may need to switch to new vGPU indexes after hibernate and then resume the VM. For GPUs with XGMI, `vram_start` will change in this case, the FB aperture gpu address of VRAM BOs will also change. These gpu addresses need to be updated when resume. But these addresses are all over the KMD codebase, updating each of them is error-prone and not acceptable.
The solution is to use pdb0 page table to cover both vram and gart memory and use pdb0 virtual gpu address instead. When gpu indexes change, the virtual gpu address won't change. For psp and smu, pdb0's gpu address does not work, so the original FB aperture gpu address is used instead. They need to be updated when resume with changed vGPUs. v4: - remove gmc_v9_0_mc_init() call and `refresh` update. - do not set `fb_start` in mmhub_v1_8_get_fb_location() when pdb0 enabled. Samuel Zhang (7): drm/amdgpu: update XGMI info on resume drm/amdgpu: update GPU addresses for SMU and PSP drm/amdgpu: enable pdb0 for hibernation on SRIOV drm/amdgpu: remove cached gpu addr: amdgpu_firmware.fw_buf_mc drm/amdgpu: remove cached gpu addr: ta_mem_context.shared_mc_addr drm/amdgpu: remove cached gpu addr: psp_context.tmr_mc_addr drm/amdgpu: remove cached gpu addr: psp_context.cmd_buf_mc_addr drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 24 +++++++++++ drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c | 32 ++++++++++---- drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.h | 1 + drivers/gpu/drm/amd/amdgpu/amdgpu_object.c | 20 +++++++++ drivers/gpu/drm/amd/amdgpu/amdgpu_object.h | 1 + drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c | 49 +++++++++++++++------- drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h | 3 -- drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c | 12 +++--- drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h | 1 - drivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.h | 4 ++ drivers/gpu/drm/amd/amdgpu/gfxhub_v1_2.c | 2 +- drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c | 19 +++++++-- drivers/gpu/drm/amd/amdgpu/mmhub_v1_8.c | 6 ++- drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c | 17 ++++++++ 14 files changed, 153 insertions(+), 38 deletions(-) -- 2.43.5
