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:
parent
54e0398613
commit
5e3c4f9070
|
@ -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;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue