On Wed, Oct 15, 2025 at 5:49 PM Ellen Pan <[email protected]> wrote: > > - During guest driver init, asa VFs receive PF msg to > init dynamic critical region(v2), VFs reuse fw_vram_usage_* > from ttm to store critical region tables in a 5MB chunk. > > Signed-off-by: Ellen Pan <[email protected]>
Reviewed-by: Alex Deucher <[email protected]> > --- > .../gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c | 29 ++++++++++--------- > drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 10 +++---- > drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c | 9 ++++++ > 3 files changed, 30 insertions(+), 18 deletions(-) > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c > b/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c > index c7d32fb216e4..636385c80f64 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c > @@ -181,19 +181,22 @@ int amdgpu_atomfirmware_allocate_fb_scratch(struct > amdgpu_device *adev) > u8 frev, crev; > int usage_bytes = 0; > > - if (amdgpu_atom_parse_data_header(ctx, index, NULL, &frev, &crev, > &data_offset)) { > - if (frev == 2 && crev == 1) { > - fw_usage_v2_1 = > - (struct vram_usagebyfirmware_v2_1 > *)(ctx->bios + data_offset); > - amdgpu_atomfirmware_allocate_fb_v2_1(adev, > - fw_usage_v2_1, > - &usage_bytes); > - } else if (frev >= 2 && crev >= 2) { > - fw_usage_v2_2 = > - (struct vram_usagebyfirmware_v2_2 > *)(ctx->bios + data_offset); > - amdgpu_atomfirmware_allocate_fb_v2_2(adev, > - fw_usage_v2_2, > - &usage_bytes); > + /* Skip atomfirmware allocation for SRIOV VFs when dynamic crit regn > is enabled */ > + if (!(amdgpu_sriov_vf(adev) && > adev->virt.is_dynamic_crit_regn_enabled)) { > + if (amdgpu_atom_parse_data_header(ctx, index, NULL, &frev, > &crev, &data_offset)) { > + if (frev == 2 && crev == 1) { > + fw_usage_v2_1 = > + (struct vram_usagebyfirmware_v2_1 > *)(ctx->bios + data_offset); > + amdgpu_atomfirmware_allocate_fb_v2_1(adev, > + fw_usage_v2_1, > + &usage_bytes); > + } else if (frev >= 2 && crev >= 2) { > + fw_usage_v2_2 = > + (struct vram_usagebyfirmware_v2_2 > *)(ctx->bios + data_offset); > + amdgpu_atomfirmware_allocate_fb_v2_2(adev, > + fw_usage_v2_2, > + &usage_bytes); > + } > } > } > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c > b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c > index 7583da3d9ab0..e226c3aff7d7 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c > @@ -1939,17 +1939,17 @@ int amdgpu_ttm_init(struct amdgpu_device *adev) > return r; > > /* > - *The reserved vram for driver must be pinned to the specified > - *place on the VRAM, so reserve it early. > + * The reserved VRAM for the driver must be pinned to a specific > + * location in VRAM, so reserve it early. > */ > r = amdgpu_ttm_drv_reserve_vram_init(adev); > if (r) > return r; > > /* > - * only NAVI10 and onwards ASIC support for IP discovery. > - * If IP discovery enabled, a block of memory should be > - * reserved for IP discovey. > + * only NAVI10 and later ASICs support IP discovery. > + * If IP discovery is enabled, a block of memory should be > + * reserved for it. > */ > if (adev->discovery.reserve_tmr) { > r = amdgpu_ttm_reserve_tmr(adev); > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c > b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c > index 805ecc69a8b5..12659990abe0 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c > @@ -999,6 +999,15 @@ int amdgpu_virt_init_critical_region(struct > amdgpu_device *adev) > goto out; > } > > + /* reserved memory starts from crit region base offset with the size > of 5MB */ > + adev->mman.fw_vram_usage_start_offset = adev->virt.crit_regn.offset; > + adev->mman.fw_vram_usage_size = adev->virt.crit_regn.size_kb << 10; > + dev_info(adev->dev, > + "critical region v%d requested to reserve memory start at > %08x with %d KB.\n", > + init_data_hdr->version, > + adev->mman.fw_vram_usage_start_offset, > + adev->mman.fw_vram_usage_size >> 10); > + > adev->virt.is_dynamic_crit_regn_enabled = true; > > out: > -- > 2.34.1 >
