Subversion Repositories Kolibri OS

Rev

Rev 1275 | Rev 1428 | 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
}