Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+2 −2
Original line number Original line Diff line number Diff line
@@ -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",
+2 −2
Original line number Original line Diff line number Diff line
@@ -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",