From 2ff39b798b8c300ddaabb9d957b5852b2a3c940b Mon Sep 17 00:00:00 2001 From: YuBiao Wang Date: Tue, 18 Aug 2026 16:07:01 +0800 Subject: [PATCH] drm/amdgpu: fix the unit of the SR-IOV IP discovery size check ip_discovery_size_in_kb is in KB but was compared against DISCOVERY_TMR_SIZE, a byte count, so the check never fired. Compare both sides in KB against a new 16KB SR-IOV bound, since 10KB does not cover new ASICs which need 0x2840, and drop the duplicate check below. Signed-off-by: YuBiao Wang Reviewed-by: Lijo Lazar Signed-off-by: Alex Deucher --- drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.h | 1 + drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c | 11 ++--------- 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.h index 6e1d55e78790..94964efa7dac 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.h @@ -28,6 +28,7 @@ #include "discovery.h" #define DISCOVERY_TMR_SIZE (10 << 10) +#define DISCOVERY_TMR_SIZE_SRIOV (16 << 10) #define DISCOVERY_TMR_OFFSET (64 << 10) struct ip_discovery_top; diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c index 5fd18f3cad9e..21a935d9d32d 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c @@ -1119,7 +1119,8 @@ int amdgpu_virt_init_critical_region(struct amdgpu_device *adev) /* Validation and initialization for each table entry */ if (IS_SRIOV_CRIT_REGN_ENTRY_VALID(init_data_hdr, AMD_SRIOV_MSG_IPD_TABLE_ID)) { if (!init_data_hdr->ip_discovery_size_in_kb || - init_data_hdr->ip_discovery_size_in_kb > DISCOVERY_TMR_SIZE) { + init_data_hdr->ip_discovery_size_in_kb > + (DISCOVERY_TMR_SIZE_SRIOV >> 10)) { dev_err(adev->dev, "Invalid %s size: 0x%x\n", amdgpu_virt_dynamic_crit_table_name[AMD_SRIOV_MSG_IPD_TABLE_ID], init_data_hdr->ip_discovery_size_in_kb); @@ -1193,14 +1194,6 @@ int amdgpu_virt_init_critical_region(struct amdgpu_device *adev) init_data_hdr->bad_page_size_in_kb; } - /* Validation for critical region info */ - if (adev->virt.crit_regn_tbl[AMD_SRIOV_MSG_IPD_TABLE_ID].size_kb > DISCOVERY_TMR_SIZE) { - dev_err(adev->dev, "Invalid IP discovery size: 0x%x\n", - adev->virt.crit_regn_tbl[AMD_SRIOV_MSG_IPD_TABLE_ID].size_kb); - r = -EINVAL; - goto out; - } - /* reserved memory starts from crit region base offset with the size of 5MB */ amdgpu_ttm_init_vram_resv(adev, AMDGPU_RESV_FW_VRAM_USAGE, adev->virt.crit_regn.offset,