Commit dfc6ae5b authored by Jerome Glisse's avatar Jerome Glisse Committed by Dave Airlie

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: default avatarJerome Glisse <jglisse@redhat.com>
Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
parent aef6a7ee
...@@ -1135,7 +1135,7 @@ static void r600_vram_gtt_location(struct radeon_device *rdev, struct radeon_mc ...@@ -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 ...@@ -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) ...@@ -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) ...@@ -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",
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment