diff options
author | Ben Skeggs <bskeggs@redhat.com> | 2010-12-14 20:04:39 -0500 |
---|---|---|
committer | Ben Skeggs <bskeggs@redhat.com> | 2010-12-21 02:17:01 -0500 |
commit | 3ee0128140eed7d32b785a335099a2ec38258283 (patch) | |
tree | 073b55ee965a27e521ad4d4ae6ac7deecbb903c9 /drivers/gpu/drm/nouveau/nv50_instmem.c | |
parent | 147dc38e976f4dd6d888d585649e724a3e82a9b2 (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.c | 16 |
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) |