drm/radeon: default to 2048 MB GART size on SI+

Newer ASICs have more VRAM on average and allocating more GART as
well can have advantages. Also see commit edcd26e8.

Ideally, we should scale GART size based on actual VRAM size, but
that requires significant restructuring of initialization.

v2: extract small helper, apply to error paths

Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Grigori Goronzy <greg@chown.ath.cx>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
Grigori Goronzy 2015-07-03 01:54:12 +02:00 committed by Alex Deucher
parent 54e0398613
commit 5e3c4f9070
1 changed files with 19 additions and 13 deletions

View File

@ -1079,6 +1079,22 @@ static bool radeon_check_pot_argument(int arg)
return (arg & (arg - 1)) == 0; return (arg & (arg - 1)) == 0;
} }
/**
* Determine a sensible default GART size according to ASIC family.
*
* @family ASIC family name
*/
static int radeon_gart_size_auto(enum radeon_family family)
{
/* default to a larger gart size on newer asics */
if (family >= CHIP_TAHITI)
return 2048;
else if (family >= CHIP_RV770)
return 1024;
else
return 512;
}
/** /**
* radeon_check_arguments - validate module params * radeon_check_arguments - validate module params
* *
@ -1097,27 +1113,17 @@ static void radeon_check_arguments(struct radeon_device *rdev)
} }
if (radeon_gart_size == -1) { if (radeon_gart_size == -1) {
/* default to a larger gart size on newer asics */ radeon_gart_size = radeon_gart_size_auto(rdev->family);
if (rdev->family >= CHIP_RV770)
radeon_gart_size = 1024;
else
radeon_gart_size = 512;
} }
/* gtt size must be power of two and greater or equal to 32M */ /* gtt size must be power of two and greater or equal to 32M */
if (radeon_gart_size < 32) { if (radeon_gart_size < 32) {
dev_warn(rdev->dev, "gart size (%d) too small\n", dev_warn(rdev->dev, "gart size (%d) too small\n",
radeon_gart_size); radeon_gart_size);
if (rdev->family >= CHIP_RV770) radeon_gart_size = radeon_gart_size_auto(rdev->family);
radeon_gart_size = 1024;
else
radeon_gart_size = 512;
} else if (!radeon_check_pot_argument(radeon_gart_size)) { } else if (!radeon_check_pot_argument(radeon_gart_size)) {
dev_warn(rdev->dev, "gart size (%d) must be a power of 2\n", dev_warn(rdev->dev, "gart size (%d) must be a power of 2\n",
radeon_gart_size); radeon_gart_size);
if (rdev->family >= CHIP_RV770) radeon_gart_size = radeon_gart_size_auto(rdev->family);
radeon_gart_size = 1024;
else
radeon_gart_size = 512;
} }
rdev->mc.gtt_size = (uint64_t)radeon_gart_size << 20; rdev->mc.gtt_size = (uint64_t)radeon_gart_size << 20;