diff options
Diffstat (limited to 'drivers/gpu/drm/radeon/r300.c')
-rw-r--r-- | drivers/gpu/drm/radeon/r300.c | 12 |
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 | ||
75 | void rv370_pcie_gart_set_page(struct radeon_device *rdev, unsigned i, | 76 | void 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 */ |