[PATCH 2/4] nouveau: Add stubs for reserving old framebuffers
Matthew Garrett
mjg at redhat.com
Fri Feb 3 10:22:20 PST 2012
Add core support for allocating buffer objects that cover the existing
framebuffers at startup.
Signed-off-by: Matthew Garrett <mjg at redhat.com>
---
drivers/gpu/drm/nouveau/nouveau_drv.h | 2 ++
drivers/gpu/drm/nouveau/nouveau_mem.c | 4 ++++
drivers/gpu/drm/nouveau/nouveau_state.c | 9 ++++++++-
3 files changed, 14 insertions(+), 1 deletions(-)
diff --git a/drivers/gpu/drm/nouveau/nouveau_drv.h b/drivers/gpu/drm/nouveau/nouveau_drv.h
index ab4c071..3186545 100644
--- a/drivers/gpu/drm/nouveau/nouveau_drv.h
+++ b/drivers/gpu/drm/nouveau/nouveau_drv.h
@@ -400,6 +400,7 @@ struct nouveau_display_engine {
void (*destroy)(struct drm_device *);
int (*init)(struct drm_device *);
void (*fini)(struct drm_device *);
+ void (*reserve_fbs)(struct drm_device *);
struct drm_property *dithering_mode;
struct drm_property *dithering_depth;
@@ -729,6 +730,7 @@ struct drm_nouveau_private {
struct list_head classes;
struct nouveau_bo *vga_ram;
+ struct nouveau_bo *old_fb[2];
/* interrupt handling */
void (*irq_handler[32])(struct drm_device *);
diff --git a/drivers/gpu/drm/nouveau/nouveau_mem.c b/drivers/gpu/drm/nouveau/nouveau_mem.c
index 1c510ef..7961331 100644
--- a/drivers/gpu/drm/nouveau/nouveau_mem.c
+++ b/drivers/gpu/drm/nouveau/nouveau_mem.c
@@ -339,6 +339,7 @@ nouveau_mem_vram_init(struct drm_device *dev)
struct drm_nouveau_private *dev_priv = dev->dev_private;
struct ttm_bo_device *bdev = &dev_priv->ttm.bdev;
const struct vram_types *vram_type;
+ struct nouveau_engine *engine = &dev_priv->engine;
int ret, dma_bits;
dma_bits = 32;
@@ -426,6 +427,9 @@ nouveau_mem_vram_init(struct drm_device *dev)
}
}
+ if (engine->display.reserve_fbs)
+ engine->display.reserve_fbs(dev);
+
dev_priv->fb_mtrr = drm_mtrr_add(pci_resource_start(dev->pdev, 1),
pci_resource_len(dev->pdev, 1),
DRM_MTRR_WC);
diff --git a/drivers/gpu/drm/nouveau/nouveau_state.c b/drivers/gpu/drm/nouveau/nouveau_state.c
index 1e04305..aff3b8d 100644
--- a/drivers/gpu/drm/nouveau/nouveau_state.c
+++ b/drivers/gpu/drm/nouveau/nouveau_state.c
@@ -557,7 +557,7 @@ nouveau_card_init(struct drm_device *dev)
{
struct drm_nouveau_private *dev_priv = dev->dev_private;
struct nouveau_engine *engine;
- int ret, e = 0;
+ int ret, i, e = 0;
vga_client_register(dev->pdev, dev, NULL, nouveau_vga_set_decode);
vga_switcheroo_register_client(dev->pdev, nouveau_switcheroo_set_state,
@@ -759,6 +759,13 @@ nouveau_card_init(struct drm_device *dev)
nouveau_fbcon_init(dev);
}
+ for (i = 0; i < 2; i++) {
+ if (dev_priv->old_fb[i]) {
+ nouveau_bo_unpin(dev_priv->old_fb[i]);
+ nouveau_bo_ref(NULL, &dev_priv->old_fb[i]);
+ }
+ }
+
return 0;
out_chan:
--
1.7.7.6
More information about the dri-devel
mailing list