radeon: fix r600/agp when vram is after AGP (v3)
If AGP is placed in the middle, the size_af is off-by-one, it results in VRAM being placed at 0x7fffffff instead of 0x8000000. v2: fix the vram_start setup. v3: also fix r7xx & newer ASIC Reported-by: russiane39 on #radeon Signed-off-by: Jerome Glisse <jglisse@redhat.com> Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
Родитель
aef6a7eeac
Коммит
dfc6ae5bd7
|
@ -1135,7 +1135,7 @@ static void r600_vram_gtt_location(struct radeon_device *rdev, struct radeon_mc
|
||||||
}
|
}
|
||||||
if (rdev->flags & RADEON_IS_AGP) {
|
if (rdev->flags & RADEON_IS_AGP) {
|
||||||
size_bf = mc->gtt_start;
|
size_bf = mc->gtt_start;
|
||||||
size_af = 0xFFFFFFFF - mc->gtt_end + 1;
|
size_af = 0xFFFFFFFF - mc->gtt_end;
|
||||||
if (size_bf > size_af) {
|
if (size_bf > size_af) {
|
||||||
if (mc->mc_vram_size > size_bf) {
|
if (mc->mc_vram_size > size_bf) {
|
||||||
dev_warn(rdev->dev, "limiting VRAM\n");
|
dev_warn(rdev->dev, "limiting VRAM\n");
|
||||||
|
@ -1149,7 +1149,7 @@ static void r600_vram_gtt_location(struct radeon_device *rdev, struct radeon_mc
|
||||||
mc->real_vram_size = size_af;
|
mc->real_vram_size = size_af;
|
||||||
mc->mc_vram_size = size_af;
|
mc->mc_vram_size = size_af;
|
||||||
}
|
}
|
||||||
mc->vram_start = mc->gtt_end;
|
mc->vram_start = mc->gtt_end + 1;
|
||||||
}
|
}
|
||||||
mc->vram_end = mc->vram_start + mc->mc_vram_size - 1;
|
mc->vram_end = mc->vram_start + mc->mc_vram_size - 1;
|
||||||
dev_info(rdev->dev, "VRAM: %lluM 0x%08llX - 0x%08llX (%lluM used)\n",
|
dev_info(rdev->dev, "VRAM: %lluM 0x%08llX - 0x%08llX (%lluM used)\n",
|
||||||
|
|
|
@ -969,7 +969,7 @@ void r700_vram_gtt_location(struct radeon_device *rdev, struct radeon_mc *mc)
|
||||||
}
|
}
|
||||||
if (rdev->flags & RADEON_IS_AGP) {
|
if (rdev->flags & RADEON_IS_AGP) {
|
||||||
size_bf = mc->gtt_start;
|
size_bf = mc->gtt_start;
|
||||||
size_af = 0xFFFFFFFF - mc->gtt_end + 1;
|
size_af = 0xFFFFFFFF - mc->gtt_end;
|
||||||
if (size_bf > size_af) {
|
if (size_bf > size_af) {
|
||||||
if (mc->mc_vram_size > size_bf) {
|
if (mc->mc_vram_size > size_bf) {
|
||||||
dev_warn(rdev->dev, "limiting VRAM\n");
|
dev_warn(rdev->dev, "limiting VRAM\n");
|
||||||
|
@ -983,7 +983,7 @@ void r700_vram_gtt_location(struct radeon_device *rdev, struct radeon_mc *mc)
|
||||||
mc->real_vram_size = size_af;
|
mc->real_vram_size = size_af;
|
||||||
mc->mc_vram_size = size_af;
|
mc->mc_vram_size = size_af;
|
||||||
}
|
}
|
||||||
mc->vram_start = mc->gtt_end;
|
mc->vram_start = mc->gtt_end + 1;
|
||||||
}
|
}
|
||||||
mc->vram_end = mc->vram_start + mc->mc_vram_size - 1;
|
mc->vram_end = mc->vram_start + mc->mc_vram_size - 1;
|
||||||
dev_info(rdev->dev, "VRAM: %lluM 0x%08llX - 0x%08llX (%lluM used)\n",
|
dev_info(rdev->dev, "VRAM: %lluM 0x%08llX - 0x%08llX (%lluM used)\n",
|
||||||
|
|
Загрузка…
Ссылка в новой задаче