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 <[email protected]> --- 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 a454c6f12d38..73d9072f0c6c 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c @@ -1115,7 +1115,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); @@ -1189,14 +1190,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, -- 2.34.1
