This is coarse, applying to all dGPUs. --- drivers/gpu/drm/amd/amdgpu/amdgpu.h | 1 + drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 8 +++++++- drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 9 +++++++++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h index 2efce7fa6a4b..c844e2a8500a 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h @@ -202,6 +202,7 @@ static const bool __maybe_unused no_system_mem_limit; extern int amdgpu_tmz; extern int amdgpu_reset_method; extern bool amdgpu_resize_bar; +extern int amdgpu_max_bar_size; #ifdef CONFIG_DRM_AMDGPU_SI extern int amdgpu_si_support; diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c index 292796e9f83d..b6c5ee490cbf 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c @@ -1125,7 +1125,13 @@ int amdgpu_device_resize_fb_bar(struct amdgpu_device *adev) rbar_size = pci_rebar_bytes_to_size(adev->gmc.real_vram_size); current_size = pci_rebar_get_current_size(adev->pdev, 0); - /* Skip if the BIOS has already enabled large BAR, covering the VRAM */ + /* Skip if the BIOS has already enabled large BAR, covering the VRAM (or >= limit, if set) */ + if (amdgpu_max_bar_size >= 0) { + const u32 max_size = max(amdgpu_max_bar_size, 8); /* clamp to min. 256MB */ + + if (rbar_size > max_size) + rbar_size = max_size; + } if (current_size >= rbar_size) return 0; diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c index 6df33df74775..0542843c7d63 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c @@ -162,6 +162,7 @@ int amdgpu_tmz; int amdgpu_reset_method = -1; /* auto */ int amdgpu_num_kcq = -1; bool amdgpu_resize_bar = true; +int amdgpu_max_bar_size = -1; struct amdgpu_mgpu_info mgpu_info = { .mutex = __MUTEX_INITIALIZER(mgpu_info.mutex), @@ -816,6 +817,14 @@ module_param_named(num_kcq, amdgpu_num_kcq, int, 0444); module_param_named(resize_bar, amdgpu_resize_bar, bool, 0444); MODULE_PARM_DESC(resize_bar, "Controls whether the FB BAR should be resized (default = true)."); +/** + * DOC: max_bar_size (int) + * The maximum BAR size, in megabytes. Only affects BARs which the BIOS hasn't already made larger. + * Unlimited by default. + */ +module_param_named(max_bar_size, amdgpu_max_bar_size, int, 0444); +MODULE_PARM_DESC(max_bar_size, "Maximum FB BAR size, log2(megabytes) (default = -1, meaning unlimited; minimum is 8 for 256MB)."); + static const struct pci_device_id pciidlist[] = { #ifdef CONFIG_DRM_AMDGPU_SI {0x1002, 0x6780, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_TAHITI}, -- 2.20.1 _______________________________________________ amd-gfx mailing list amd-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/amd-gfx