diff options
author | Ben Skeggs <bskeggs@redhat.com> | 2010-11-14 20:54:21 -0500 |
---|---|---|
committer | Ben Skeggs <bskeggs@redhat.com> | 2010-12-07 22:48:13 -0500 |
commit | 4c1361429841344ce4d164492ee7620cf3286eb7 (patch) | |
tree | 7cd23e9e99299b3265b2e59d49e3aa5b77a465f0 /drivers/gpu/drm/nouveau/nv50_fbcon.c | |
parent | f869ef882382a4b6cb42d259e399aeec3781d4bb (diff) |
drm/nv50: implement global channel address space on new VM code
As of this commit, it's guaranteed that if an object is in VRAM that its
GPU virtual address will be constant.
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/nouveau/nv50_fbcon.c')
-rw-r--r-- | drivers/gpu/drm/nouveau/nv50_fbcon.c | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/drivers/gpu/drm/nouveau/nv50_fbcon.c b/drivers/gpu/drm/nouveau/nv50_fbcon.c index 156731993907..6d38cb1488ae 100644 --- a/drivers/gpu/drm/nouveau/nv50_fbcon.c +++ b/drivers/gpu/drm/nouveau/nv50_fbcon.c | |||
@@ -3,6 +3,7 @@ | |||
3 | #include "nouveau_dma.h" | 3 | #include "nouveau_dma.h" |
4 | #include "nouveau_ramht.h" | 4 | #include "nouveau_ramht.h" |
5 | #include "nouveau_fbcon.h" | 5 | #include "nouveau_fbcon.h" |
6 | #include "nouveau_mm.h" | ||
6 | 7 | ||
7 | int | 8 | int |
8 | nv50_fbcon_fillrect(struct fb_info *info, const struct fb_fillrect *rect) | 9 | nv50_fbcon_fillrect(struct fb_info *info, const struct fb_fillrect *rect) |
@@ -134,10 +135,8 @@ nv50_fbcon_accel_init(struct fb_info *info) | |||
134 | struct drm_device *dev = nfbdev->dev; | 135 | struct drm_device *dev = nfbdev->dev; |
135 | struct drm_nouveau_private *dev_priv = dev->dev_private; | 136 | struct drm_nouveau_private *dev_priv = dev->dev_private; |
136 | struct nouveau_channel *chan = dev_priv->channel; | 137 | struct nouveau_channel *chan = dev_priv->channel; |
138 | struct nouveau_bo *nvbo = nfbdev->nouveau_fb.nvbo; | ||
137 | int ret, format; | 139 | int ret, format; |
138 | uint64_t fb; | ||
139 | |||
140 | fb = info->fix.smem_start - dev_priv->fb_phys + dev_priv->vm_vram_base; | ||
141 | 140 | ||
142 | switch (info->var.bits_per_pixel) { | 141 | switch (info->var.bits_per_pixel) { |
143 | case 8: | 142 | case 8: |
@@ -224,8 +223,8 @@ nv50_fbcon_accel_init(struct fb_info *info) | |||
224 | OUT_RING(chan, info->fix.line_length); | 223 | OUT_RING(chan, info->fix.line_length); |
225 | OUT_RING(chan, info->var.xres_virtual); | 224 | OUT_RING(chan, info->var.xres_virtual); |
226 | OUT_RING(chan, info->var.yres_virtual); | 225 | OUT_RING(chan, info->var.yres_virtual); |
227 | OUT_RING(chan, upper_32_bits(fb)); | 226 | OUT_RING(chan, upper_32_bits(nvbo->vma.offset)); |
228 | OUT_RING(chan, lower_32_bits(fb)); | 227 | OUT_RING(chan, lower_32_bits(nvbo->vma.offset)); |
229 | BEGIN_RING(chan, NvSub2D, 0x0230, 2); | 228 | BEGIN_RING(chan, NvSub2D, 0x0230, 2); |
230 | OUT_RING(chan, format); | 229 | OUT_RING(chan, format); |
231 | OUT_RING(chan, 1); | 230 | OUT_RING(chan, 1); |
@@ -233,8 +232,8 @@ nv50_fbcon_accel_init(struct fb_info *info) | |||
233 | OUT_RING(chan, info->fix.line_length); | 232 | OUT_RING(chan, info->fix.line_length); |
234 | OUT_RING(chan, info->var.xres_virtual); | 233 | OUT_RING(chan, info->var.xres_virtual); |
235 | OUT_RING(chan, info->var.yres_virtual); | 234 | OUT_RING(chan, info->var.yres_virtual); |
236 | OUT_RING(chan, upper_32_bits(fb)); | 235 | OUT_RING(chan, upper_32_bits(nvbo->vma.offset)); |
237 | OUT_RING(chan, lower_32_bits(fb)); | 236 | OUT_RING(chan, lower_32_bits(nvbo->vma.offset)); |
238 | 237 | ||
239 | return 0; | 238 | return 0; |
240 | } | 239 | } |