Commit 13ccaa84 authored by Ellen Pan's avatar Ellen Pan Committed by Alex Deucher
Browse files

drm/amdgpu: Reuse fw_vram_usage_* for dynamic critical region in SRIOV



- 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: default avatarEllen Pan <yunru.pan@amd.com>
Reviewed-by: default avatarAlex Deucher <alexander.deucher@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 07009df6
Loading
Loading
Loading
Loading
+16 −13
Original line number Diff line number Diff line
@@ -181,6 +181,8 @@ int amdgpu_atomfirmware_allocate_fb_scratch(struct amdgpu_device *adev)
	u8 frev, crev;
	int usage_bytes = 0;

	/* 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 =
@@ -196,6 +198,7 @@ int amdgpu_atomfirmware_allocate_fb_scratch(struct amdgpu_device *adev)
						&usage_bytes);
			}
		}
	}

	ctx->scratch_size_bytes = 0;
	if (usage_bytes == 0)
+5 −5
Original line number Diff line number Diff line
@@ -1941,17 +1941,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);
+9 −0
Original line number Diff line number Diff line
@@ -1008,6 +1008,15 @@ int amdgpu_virt_init_critical_region(struct amdgpu_device *adev)
			init_data_hdr->bad_page_size_in_kb;
	}

	/* 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 %08llx with %llu 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: