aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/nouveau/nv50_instmem.c
diff options
context:
space:
mode:
authorBen Skeggs <bskeggs@redhat.com>2010-12-14 20:04:39 -0500
committerBen Skeggs <bskeggs@redhat.com>2010-12-21 02:17:01 -0500
commit3ee0128140eed7d32b785a335099a2ec38258283 (patch)
tree073b55ee965a27e521ad4d4ae6ac7deecbb903c9 /drivers/gpu/drm/nouveau/nv50_instmem.c
parent147dc38e976f4dd6d888d585649e724a3e82a9b2 (diff)
drm/nouveau: modify vm to accomodate dual page tables for nvc0
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/nouveau/nv50_instmem.c')
-rw-r--r--drivers/gpu/drm/nouveau/nv50_instmem.c16
1 files changed, 7 insertions, 9 deletions
diff --git a/drivers/gpu/drm/nouveau/nv50_instmem.c b/drivers/gpu/drm/nouveau/nv50_instmem.c
index adac4da98f7e..2e1b1cd19a4b 100644
--- a/drivers/gpu/drm/nouveau/nv50_instmem.c
+++ b/drivers/gpu/drm/nouveau/nv50_instmem.c
@@ -151,20 +151,19 @@ nv50_instmem_init(struct drm_device *dev)
151 151
152 /* BAR3 */ 152 /* BAR3 */
153 ret = nouveau_vm_new(dev, BAR3_VM_BASE, BAR3_VM_SIZE, BAR3_VM_BASE, 153 ret = nouveau_vm_new(dev, BAR3_VM_BASE, BAR3_VM_SIZE, BAR3_VM_BASE,
154 29, 12, 16, &dev_priv->bar3_vm); 154 &dev_priv->bar3_vm);
155 if (ret) 155 if (ret)
156 goto error; 156 goto error;
157 157
158 ret = nouveau_gpuobj_new(dev, NULL, (BAR3_VM_SIZE >> 12) * 8, 158 ret = nouveau_gpuobj_new(dev, NULL, (BAR3_VM_SIZE >> 12) * 8,
159 0x1000, NVOBJ_FLAG_DONT_MAP | 159 0x1000, NVOBJ_FLAG_DONT_MAP |
160 NVOBJ_FLAG_ZERO_ALLOC, 160 NVOBJ_FLAG_ZERO_ALLOC,
161 &dev_priv->bar3_vm->pgt[0].obj); 161 &dev_priv->bar3_vm->pgt[0].obj[0]);
162 if (ret) 162 if (ret)
163 goto error; 163 goto error;
164 dev_priv->bar3_vm->pgt[0].page_shift = 12; 164 dev_priv->bar3_vm->pgt[0].refcount[0] = 1;
165 dev_priv->bar3_vm->pgt[0].refcount = 1;
166 165
167 nv50_instmem_map(dev_priv->bar3_vm->pgt[0].obj); 166 nv50_instmem_map(dev_priv->bar3_vm->pgt[0].obj[0]);
168 167
169 ret = nv50_channel_new(dev, 128 * 1024, dev_priv->bar3_vm, &chan); 168 ret = nv50_channel_new(dev, 128 * 1024, dev_priv->bar3_vm, &chan);
170 if (ret) 169 if (ret)
@@ -195,8 +194,7 @@ nv50_instmem_init(struct drm_device *dev)
195 nv_wo32(chan->ramin, 0, tmp); 194 nv_wo32(chan->ramin, 0, tmp);
196 195
197 /* BAR1 */ 196 /* BAR1 */
198 ret = nouveau_vm_new(dev, BAR1_VM_BASE, BAR1_VM_SIZE, BAR1_VM_BASE, 197 ret = nouveau_vm_new(dev, BAR1_VM_BASE, BAR1_VM_SIZE, BAR1_VM_BASE, &vm);
199 29, 12, 16, &vm);
200 if (ret) 198 if (ret)
201 goto error; 199 goto error;
202 200
@@ -220,7 +218,7 @@ nv50_instmem_init(struct drm_device *dev)
220 * to catch "NULL pointer" references 218 * to catch "NULL pointer" references
221 */ 219 */
222 ret = nouveau_vm_new(dev, 0, (1ULL << 40), 0x0020000000ULL, 220 ret = nouveau_vm_new(dev, 0, (1ULL << 40), 0x0020000000ULL,
223 29, 12, 16, &dev_priv->chan_vm); 221 &dev_priv->chan_vm);
224 if (ret) 222 if (ret)
225 return ret; 223 return ret;
226 224
@@ -258,7 +256,7 @@ nv50_instmem_takedown(struct drm_device *dev)
258 dev_priv->channels.ptr[127] = 0; 256 dev_priv->channels.ptr[127] = 0;
259 nv50_channel_del(&dev_priv->channels.ptr[0]); 257 nv50_channel_del(&dev_priv->channels.ptr[0]);
260 258
261 nouveau_gpuobj_ref(NULL, &dev_priv->bar3_vm->pgt[0].obj); 259 nouveau_gpuobj_ref(NULL, &dev_priv->bar3_vm->pgt[0].obj[0]);
262 nouveau_vm_ref(NULL, &dev_priv->bar3_vm, NULL); 260 nouveau_vm_ref(NULL, &dev_priv->bar3_vm, NULL);
263 261
264 if (dev_priv->ramin_heap.free_stack.next) 262 if (dev_priv->ramin_heap.free_stack.next)