Subversion Repositories Kolibri OS

Rev

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,