Rev 1246 | Rev 1275 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1246 | Rev 1268 | ||
---|---|---|---|
Line 155... | Line 155... | ||
155 | 155 | ||
156 | if (!rdev->gart.ready) { |
156 | if (!rdev->gart.ready) { |
157 | // WARN(1, "trying to unbind memory to unitialized GART !\n"); |
157 | // WARN(1, "trying to unbind memory to unitialized GART !\n"); |
158 | return; |
158 | return; |
159 | } |
159 | } |
160 | t = offset / 4096; |
160 | t = offset / RADEON_GPU_PAGE_SIZE; |
161 | p = t / (PAGE_SIZE / 4096); |
161 | p = t / (PAGE_SIZE / RADEON_GPU_PAGE_SIZE); |
162 | for (i = 0; i < pages; i++, p++) { |
162 | for (i = 0; i < pages; i++, p++) { |
163 | if (rdev->gart.pages[p]) { |
163 | if (rdev->gart.pages[p]) { |
164 | // pci_unmap_page(rdev->pdev, rdev->gart.pages_addr[p], |
164 | // pci_unmap_page(rdev->pdev, rdev->gart.pages_addr[p], |
165 | // PAGE_SIZE, PCI_DMA_BIDIRECTIONAL); |
165 | // PAGE_SIZE, PCI_DMA_BIDIRECTIONAL); |
166 | rdev->gart.pages[p] = NULL; |
166 | rdev->gart.pages[p] = NULL; |
167 | rdev->gart.pages_addr[p] = 0; |
167 | rdev->gart.pages_addr[p] = 0; |
168 | for (j = 0; j < (PAGE_SIZE / 4096); j++, t++) { |
168 | for (j = 0; j < (PAGE_SIZE / RADEON_GPU_PAGE_SIZE); j++, t++) { |
169 | radeon_gart_set_page(rdev, t, 0); |
169 | radeon_gart_set_page(rdev, t, 0); |
170 | } |
170 | } |
171 | } |
171 | } |
172 | } |
172 | } |
Line 189... | Line 189... | ||
189 | 189 | ||
190 | if (!rdev->gart.ready) { |
190 | if (!rdev->gart.ready) { |
191 | DRM_ERROR("trying to bind memory to unitialized GART !\n"); |
191 | DRM_ERROR("trying to bind memory to unitialized GART !\n"); |
192 | return -EINVAL; |
192 | return -EINVAL; |
193 | } |
193 | } |
194 | t = offset / 4096; |
194 | t = offset / RADEON_GPU_PAGE_SIZE; |
Line 195... | Line 195... | ||
195 | p = t / (PAGE_SIZE / 4096); |
195 | p = t / (PAGE_SIZE / RADEON_GPU_PAGE_SIZE); |
196 | 196 | ||
197 | for (i = 0; i < pages; i++, p++) { |
197 | for (i = 0; i < pages; i++, p++) { |
Line 204... | Line 204... | ||
204 | // /* FIXME: failed to map page (return -ENOMEM?) */ |
204 | // /* FIXME: failed to map page (return -ENOMEM?) */ |
205 | // radeon_gart_unbind(rdev, offset, pages); |
205 | // radeon_gart_unbind(rdev, offset, pages); |
206 | // return -ENOMEM; |
206 | // return -ENOMEM; |
207 | //} |
207 | //} |
208 | rdev->gart.pages[p] = pagelist[i]; |
208 | rdev->gart.pages[p] = pagelist[i]; |
209 | page_base = (uint32_t)rdev->gart.pages_addr[p]; |
209 | page_base = rdev->gart.pages_addr[p]; |
210 | for (j = 0; j < (PAGE_SIZE / 4096); j++, t++) { |
210 | for (j = 0; j < (PAGE_SIZE / RADEON_GPU_PAGE_SIZE); j++, t++) { |
211 | radeon_gart_set_page(rdev, t, page_base); |
211 | radeon_gart_set_page(rdev, t, page_base); |
212 | page_base += 4096; |
212 | page_base += RADEON_GPU_PAGE_SIZE; |
213 | } |
213 | } |
214 | } |
214 | } |
215 | mb(); |
215 | mb(); |
216 | radeon_gart_tlb_flush(rdev); |
216 | radeon_gart_tlb_flush(rdev); |
Line 226... | Line 226... | ||
226 | ENTER(); |
226 | ENTER(); |
Line 227... | Line 227... | ||
227 | 227 | ||
228 | if (rdev->gart.pages) { |
228 | if (rdev->gart.pages) { |
229 | return 0; |
229 | return 0; |
230 | } |
230 | } |
231 | /* We need PAGE_SIZE >= 4096 */ |
231 | /* We need PAGE_SIZE >= RADEON_GPU_PAGE_SIZE */ |
232 | if (PAGE_SIZE < 4096) { |
232 | if (PAGE_SIZE < RADEON_GPU_PAGE_SIZE) { |
233 | DRM_ERROR("Page size is smaller than GPU page size!\n"); |
233 | DRM_ERROR("Page size is smaller than GPU page size!\n"); |
234 | return -EINVAL; |
234 | return -EINVAL; |
235 | } |
235 | } |
236 | /* Compute table size */ |
236 | /* Compute table size */ |
237 | rdev->gart.num_cpu_pages = rdev->mc.gtt_size / PAGE_SIZE; |
237 | rdev->gart.num_cpu_pages = rdev->mc.gtt_size / PAGE_SIZE; |
238 | rdev->gart.num_gpu_pages = rdev->mc.gtt_size / 4096; |
238 | rdev->gart.num_gpu_pages = rdev->mc.gtt_size / RADEON_GPU_PAGE_SIZE; |
239 | DRM_INFO("GART: num cpu pages %u, num gpu pages %u\n", |
239 | DRM_INFO("GART: num cpu pages %u, num gpu pages %u\n", |
240 | rdev->gart.num_cpu_pages, rdev->gart.num_gpu_pages); |
240 | rdev->gart.num_cpu_pages, rdev->gart.num_gpu_pages); |
241 | /* Allocate pages table */ |
241 | /* Allocate pages table */ |
242 | rdev->gart.pages = kzalloc(sizeof(void *) * rdev->gart.num_cpu_pages, |
242 | rdev->gart.pages = kzalloc(sizeof(void *) * rdev->gart.num_cpu_pages, |