Rev 1275 | Rev 1430 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1275 | Rev 1404 | ||
---|---|---|---|
Line 76... | Line 76... | ||
76 | int radeon_gart_table_vram_alloc(struct radeon_device *rdev) |
76 | int radeon_gart_table_vram_alloc(struct radeon_device *rdev) |
77 | { |
77 | { |
78 | int r; |
78 | int r; |
Line 79... | Line 79... | ||
79 | 79 | ||
80 | if (rdev->gart.table.vram.robj == NULL) { |
- | |
81 | r = radeon_object_create(rdev, NULL, |
80 | if (rdev->gart.table.vram.robj == NULL) { |
82 | rdev->gart.table_size, |
- | |
83 | true, |
81 | r = radeon_bo_create(rdev, NULL, rdev->gart.table_size, |
84 | RADEON_GEM_DOMAIN_VRAM, |
82 | true, RADEON_GEM_DOMAIN_VRAM, |
85 | false, &rdev->gart.table.vram.robj); |
83 | &rdev->gart.table.vram.robj); |
86 | if (r) { |
84 | if (r) { |
87 | return r; |
85 | return r; |
88 | } |
86 | } |
89 | } |
87 | } |
Line 93... | Line 91... | ||
93 | int radeon_gart_table_vram_pin(struct radeon_device *rdev) |
91 | int radeon_gart_table_vram_pin(struct radeon_device *rdev) |
94 | { |
92 | { |
95 | uint64_t gpu_addr; |
93 | uint64_t gpu_addr; |
96 | int r; |
94 | int r; |
Line -... | Line 95... | ||
- | 95 | ||
- | 96 | r = radeon_bo_reserve(rdev->gart.table.vram.robj, false); |
|
- | 97 | if (unlikely(r != 0)) |
|
97 | 98 | return r; |
|
98 | r = radeon_object_pin(rdev->gart.table.vram.robj, |
99 | r = radeon_bo_pin(rdev->gart.table.vram.robj, |
99 | RADEON_GEM_DOMAIN_VRAM, &gpu_addr); |
100 | RADEON_GEM_DOMAIN_VRAM, &gpu_addr); |
100 | if (r) { |
101 | if (r) { |
101 | // radeon_object_unref(&rdev->gart.table.vram.robj); |
102 | radeon_bo_unreserve(rdev->gart.table.vram.robj); |
102 | return r; |
103 | return r; |
103 | } |
104 | } |
104 | r = radeon_object_kmap(rdev->gart.table.vram.robj, |
105 | r = radeon_bo_kmap(rdev->gart.table.vram.robj, |
105 | (void **)&rdev->gart.table.vram.ptr); |
106 | (void **)&rdev->gart.table.vram.ptr); |
106 | if (r) { |
107 | if (r) |
107 | // radeon_object_unpin(rdev->gart.table.vram.robj); |
108 | radeon_bo_unpin(rdev->gart.table.vram.robj); |
108 | // radeon_object_unref(&rdev->gart.table.vram.robj); |
- | |
109 | DRM_ERROR("radeon: failed to map gart vram table.\n"); |
- | |
110 | return r; |
- | |
111 | } |
- | |
112 | 109 | radeon_bo_unreserve(rdev->gart.table.vram.robj); |
|
- | 110 | rdev->gart.table_addr = gpu_addr; |
|
Line 113... | Line 111... | ||
113 | rdev->gart.table_addr = gpu_addr; |
111 | return r; |
114 | 112 | ||
115 | dbgprintf("alloc gart vram: gpu_base %x lin_addr %x\n", |
- | |
116 | rdev->gart.table_addr, rdev->gart.table.vram.ptr); |
- | |
117 | - | ||
118 | // gpu_addr = 0x800000; |
- | |
119 | - | ||
120 | // u32_t pci_addr = rdev->mc.aper_base + gpu_addr; |
- | |
121 | - | ||
122 | // rdev->gart.table.vram.ptr = (void*)MapIoMem(pci_addr, rdev->gart.table_size, PG_SW); |
- | |
123 | - | ||
124 | - | ||
125 | // dbgprintf("alloc gart vram:\n gpu_base %x pci_base %x lin_addr %x", |
- | |
126 | // gpu_addr, pci_addr, rdev->gart.table.vram.ptr); |
- | |
127 | 113 | dbgprintf("alloc gart vram: gpu_base %x lin_addr %x\n", |
|
Line 128... | Line 114... | ||
128 | return 0; |
114 | rdev->gart.table_addr, rdev->gart.table.vram.ptr); |
129 | } |
115 | } |
- | 116 | ||
- | 117 | void radeon_gart_table_vram_free(struct radeon_device *rdev) |
|
130 | 118 | { |
|
131 | void radeon_gart_table_vram_free(struct radeon_device *rdev) |
119 | int r; |
132 | { |
120 | |
- | 121 | if (rdev->gart.table.vram.robj == NULL) { |
|
- | 122 | return; |
|
133 | if (rdev->gart.table.vram.robj == NULL) { |
123 | } |
134 | return; |
124 | r = radeon_bo_reserve(rdev->gart.table.vram.robj, false); |
- | 125 | if (likely(r == 0)) { |
|
- | 126 | radeon_bo_kunmap(rdev->gart.table.vram.robj); |
|
135 | } |
127 | radeon_bo_unpin(rdev->gart.table.vram.robj); |
136 | // radeon_object_kunmap(rdev->gart.table.vram.robj); |
128 | radeon_bo_unreserve(rdev->gart.table.vram.robj); |
Line 150... | Line 142... | ||
150 | unsigned t; |
142 | unsigned t; |
151 | unsigned p; |
143 | unsigned p; |
152 | int i, j; |
144 | int i, j; |
Line 153... | Line 145... | ||
153 | 145 | ||
154 | if (!rdev->gart.ready) { |
146 | if (!rdev->gart.ready) { |
155 | // WARN(1, "trying to unbind memory to unitialized GART !\n"); |
147 | WARN(1, "trying to unbind memory to unitialized GART !\n"); |
156 | return; |
148 | return; |
157 | } |
149 | } |
158 | t = offset / RADEON_GPU_PAGE_SIZE; |
150 | t = offset / RADEON_GPU_PAGE_SIZE; |
159 | p = t / (PAGE_SIZE / RADEON_GPU_PAGE_SIZE); |
151 | p = t / (PAGE_SIZE / RADEON_GPU_PAGE_SIZE); |
Line 232... | Line 224... | ||
232 | rdev->gart.num_cpu_pages, rdev->gart.num_gpu_pages); |
224 | rdev->gart.num_cpu_pages, rdev->gart.num_gpu_pages); |
233 | /* Allocate pages table */ |
225 | /* Allocate pages table */ |
234 | rdev->gart.pages = kzalloc(sizeof(void *) * rdev->gart.num_cpu_pages, |
226 | rdev->gart.pages = kzalloc(sizeof(void *) * rdev->gart.num_cpu_pages, |
235 | GFP_KERNEL); |
227 | GFP_KERNEL); |
236 | if (rdev->gart.pages == NULL) { |
228 | if (rdev->gart.pages == NULL) { |
237 | // radeon_gart_fini(rdev); |
229 | radeon_gart_fini(rdev); |
238 | return -ENOMEM; |
230 | return -ENOMEM; |
239 | } |
231 | } |
240 | rdev->gart.pages_addr = kzalloc(sizeof(u32_t) * |
232 | rdev->gart.pages_addr = kzalloc(sizeof(dma_addr_t) * |
241 | rdev->gart.num_cpu_pages, GFP_KERNEL); |
233 | rdev->gart.num_cpu_pages, GFP_KERNEL); |
242 | if (rdev->gart.pages_addr == NULL) { |
234 | if (rdev->gart.pages_addr == NULL) { |
243 | // radeon_gart_fini(rdev); |
235 | radeon_gart_fini(rdev); |
244 | return -ENOMEM; |
236 | return -ENOMEM; |
245 | } |
237 | } |
246 | return 0; |
238 | return 0; |
247 | } |
239 | } |