[PATCH] drm/amdgpu: add automatic per asic settings for gart_size

Felix Kuehling felix.kuehling at amd.com
Mon Aug 21 20:48:21 UTC 2017


On 2017-08-21 12:00 PM, Alex Deucher wrote:
> We need a larger gart for asics that do not support GPUVM on all
> engines (e.g., MM) to make sure we have enough space for all
> gtt buffers in physical mode.  Change the default size based on
> the asic type.
>
> Signed-off-by: Alex Deucher <alexander.deucher at amd.com>
> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu.h        |  2 +-
>  drivers/gpu/drm/amd/amdgpu/amdgpu_device.c |  4 ++--
>  drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c    |  4 ++--
>  drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c   | 16 +++++++++++++++-
>  4 files changed, 20 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> index ffb98bb..97d50cd 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> @@ -77,7 +77,7 @@
>  extern int amdgpu_modeset;
>  extern int amdgpu_vram_limit;
>  extern int amdgpu_vis_vram_limit;
> -extern unsigned amdgpu_gart_size;
> +extern int amdgpu_gart_size;
>  extern int amdgpu_gtt_size;
>  extern int amdgpu_moverate;
>  extern int amdgpu_benchmarking;
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> index 1e66eda8..3c062a7 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> @@ -1063,11 +1063,11 @@ static void amdgpu_check_arguments(struct amdgpu_device *adev)
>  		amdgpu_sched_jobs = roundup_pow_of_two(amdgpu_sched_jobs);
>  	}
>  
> -	if (amdgpu_gart_size < 32) {
> +	if (amdgpu_gart_size != -1 && amdgpu_gart_size < 32) {
>  		/* gart size must be greater or equal to 32M */
>  		dev_warn(adev->dev, "gart size (%d) too small\n",
>  			 amdgpu_gart_size);
> -		amdgpu_gart_size = 32;
> +		amdgpu_gart_size = -1;
>  	}
>  
>  	if (amdgpu_gtt_size != -1 && amdgpu_gtt_size < 32) {
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> index 3eafe39..3f2143d 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> @@ -76,7 +76,7 @@
>  
>  int amdgpu_vram_limit = 0;
>  int amdgpu_vis_vram_limit = 0;
> -unsigned amdgpu_gart_size = 256;
> +int amdgpu_gart_size = -1; /* auto */
>  int amdgpu_gtt_size = -1; /* auto */
>  int amdgpu_moverate = -1; /* auto */
>  int amdgpu_benchmarking = 0;
> @@ -129,7 +129,7 @@ module_param_named(vramlimit, amdgpu_vram_limit, int, 0600);
>  MODULE_PARM_DESC(vis_vramlimit, "Restrict visible VRAM for testing, in megabytes");
>  module_param_named(vis_vramlimit, amdgpu_vis_vram_limit, int, 0444);
>  
> -MODULE_PARM_DESC(gartsize, "Size of PCIE/IGP gart to setup in megabytes (32, 64, etc.)");
> +MODULE_PARM_DESC(gartsize, "Size of gart to setup in megabytes (32, 64, etc., -1=auto)");

I would spell GART in capitals here.

>  module_param_named(gartsize, amdgpu_gart_size, uint, 0600);
>  
>  MODULE_PARM_DESC(gttsize, "Size of the GTT domain in megabytes (-1 = auto)");
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c
> index 94c1e2e..b9b9f68 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c
> @@ -65,7 +65,21 @@
>   */
>  void amdgpu_gart_set_defaults(struct amdgpu_device *adev)
>  {
> -	adev->mc.gart_size = (uint64_t)amdgpu_gart_size << 20;
> +	u64 gart_size;
> +
> +	if (amdgpu_gart_size == -1) {
> +		/* make the GART larger for chips that
> +		 * dont' support VM for all rings
> +		 */
> +		if (adev->asic_type <= CHIP_STONEY)

I guess that means Polaris10 and later support VM for multimedia? I
needed to go look at amd_shared.h to find that out. It would be more
obvious like this:

    if (adev->asic_type < CHIP_POLARIS10) ...

Other than that, this patch is Reviewed-by: Felix Kuehling
<Felix.Kuehling at amd.com>

Regards,
  Felix

> +			gart_size = 1024;
> +		else
> +			gart_size = 256;
> +	} else {
> +		gart_size = amdgpu_gart_size;
> +	}
> +
> +	adev->mc.gart_size = gart_size << 20;
>  }
>  
>  /**



More information about the amd-gfx mailing list