aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/radeon/r300.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/radeon/r300.c')
-rw-r--r--drivers/gpu/drm/radeon/r300.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/drivers/gpu/drm/radeon/r300.c b/drivers/gpu/drm/radeon/r300.c
index 8d14e665f241..75b30338c226 100644
--- a/drivers/gpu/drm/radeon/r300.c
+++ b/drivers/gpu/drm/radeon/r300.c
@@ -69,17 +69,23 @@ void rv370_pcie_gart_tlb_flush(struct radeon_device *rdev)
69 mb(); 69 mb();
70} 70}
71 71
72#define R300_PTE_UNSNOOPED (1 << 0)
72#define R300_PTE_WRITEABLE (1 << 2) 73#define R300_PTE_WRITEABLE (1 << 2)
73#define R300_PTE_READABLE (1 << 3) 74#define R300_PTE_READABLE (1 << 3)
74 75
75void rv370_pcie_gart_set_page(struct radeon_device *rdev, unsigned i, 76void rv370_pcie_gart_set_page(struct radeon_device *rdev, unsigned i,
76 uint64_t addr) 77 uint64_t addr, uint32_t flags)
77{ 78{
78 void __iomem *ptr = rdev->gart.ptr; 79 void __iomem *ptr = rdev->gart.ptr;
79 80
80 addr = (lower_32_bits(addr) >> 8) | 81 addr = (lower_32_bits(addr) >> 8) |
81 ((upper_32_bits(addr) & 0xff) << 24) | 82 ((upper_32_bits(addr) & 0xff) << 24);
82 R300_PTE_WRITEABLE | R300_PTE_READABLE; 83 if (flags & RADEON_GART_PAGE_READ)
84 addr |= R300_PTE_READABLE;
85 if (flags & RADEON_GART_PAGE_WRITE)
86 addr |= R300_PTE_WRITEABLE;
87 if (!(flags & RADEON_GART_PAGE_SNOOP))
88 addr |= R300_PTE_UNSNOOPED;
83 /* on x86 we want this to be CPU endian, on powerpc 89 /* on x86 we want this to be CPU endian, on powerpc
84 * on powerpc without HW swappers, it'll get swapped on way 90 * on powerpc without HW swappers, it'll get swapped on way
85 * into VRAM - so no need for cpu_to_le32 on VRAM tables */ 91 * into VRAM - so no need for cpu_to_le32 on VRAM tables */