mirror of
https://github.com/torvalds/linux.git
synced 2024-11-07 12:41:55 +00:00
drm/nouveau: make general drm modesetting init common
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
This commit is contained in:
parent
2e9733ff7d
commit
048a88595a
@ -82,14 +82,13 @@ static inline struct drm_crtc *to_drm_crtc(struct nouveau_crtc *crtc)
|
||||
}
|
||||
|
||||
int nv50_crtc_create(struct drm_device *dev, int index);
|
||||
int nv50_cursor_init(struct nouveau_crtc *);
|
||||
void nv50_cursor_fini(struct nouveau_crtc *);
|
||||
int nv50_crtc_cursor_set(struct drm_crtc *drm_crtc, struct drm_file *file_priv,
|
||||
uint32_t buffer_handle, uint32_t width,
|
||||
uint32_t height);
|
||||
int nv50_crtc_cursor_move(struct drm_crtc *drm_crtc, int x, int y);
|
||||
|
||||
int nv04_cursor_init(struct nouveau_crtc *);
|
||||
int nv50_cursor_init(struct nouveau_crtc *);
|
||||
|
||||
struct nouveau_connector *
|
||||
nouveau_crtc_connector_get(struct nouveau_crtc *crtc);
|
||||
|
@ -736,7 +736,6 @@ struct drm_nouveau_private {
|
||||
uint64_t vram_size;
|
||||
uint64_t vram_sys_base;
|
||||
|
||||
uint64_t fb_phys;
|
||||
uint64_t fb_available_size;
|
||||
uint64_t fb_mappable_pages;
|
||||
uint64_t fb_aper_free;
|
||||
|
@ -408,8 +408,6 @@ nouveau_mem_vram_init(struct drm_device *dev)
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
dev_priv->fb_phys = pci_resource_start(dev->pdev, 1);
|
||||
|
||||
ret = nouveau_ttm_global_init(dev_priv);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
@ -657,6 +657,26 @@ nouveau_card_init(struct drm_device *dev)
|
||||
goto out_engine;
|
||||
}
|
||||
|
||||
/* initialise general modesetting */
|
||||
drm_mode_config_init(dev);
|
||||
drm_mode_create_scaling_mode_property(dev);
|
||||
drm_mode_create_dithering_property(dev);
|
||||
dev->mode_config.funcs = (void *)&nouveau_mode_config_funcs;
|
||||
dev->mode_config.fb_base = pci_resource_start(dev->pdev, 1);
|
||||
dev->mode_config.min_width = 0;
|
||||
dev->mode_config.min_height = 0;
|
||||
if (dev_priv->card_type < NV_10) {
|
||||
dev->mode_config.max_width = 2048;
|
||||
dev->mode_config.max_height = 2048;
|
||||
} else
|
||||
if (dev_priv->card_type < NV_50) {
|
||||
dev->mode_config.max_width = 4096;
|
||||
dev->mode_config.max_height = 4096;
|
||||
} else {
|
||||
dev->mode_config.max_width = 8192;
|
||||
dev->mode_config.max_height = 8192;
|
||||
}
|
||||
|
||||
ret = engine->display.create(dev);
|
||||
if (ret)
|
||||
goto out_fifo;
|
||||
@ -747,6 +767,7 @@ static void nouveau_card_takedown(struct drm_device *dev)
|
||||
}
|
||||
|
||||
engine->display.destroy(dev);
|
||||
drm_mode_config_cleanup(dev);
|
||||
|
||||
if (!dev_priv->noaccel) {
|
||||
engine->fifo.takedown(dev);
|
||||
|
@ -126,27 +126,6 @@ nv04_display_create(struct drm_device *dev)
|
||||
|
||||
nouveau_hw_save_vga_fonts(dev, 1);
|
||||
|
||||
drm_mode_config_init(dev);
|
||||
drm_mode_create_scaling_mode_property(dev);
|
||||
drm_mode_create_dithering_property(dev);
|
||||
|
||||
dev->mode_config.funcs = (void *)&nouveau_mode_config_funcs;
|
||||
|
||||
dev->mode_config.min_width = 0;
|
||||
dev->mode_config.min_height = 0;
|
||||
switch (dev_priv->card_type) {
|
||||
case NV_04:
|
||||
dev->mode_config.max_width = 2048;
|
||||
dev->mode_config.max_height = 2048;
|
||||
break;
|
||||
default:
|
||||
dev->mode_config.max_width = 4096;
|
||||
dev->mode_config.max_height = 4096;
|
||||
break;
|
||||
}
|
||||
|
||||
dev->mode_config.fb_base = dev_priv->fb_phys;
|
||||
|
||||
nv04_crtc_create(dev, 0);
|
||||
if (nv_two_heads(dev))
|
||||
nv04_crtc_create(dev, 1);
|
||||
@ -235,8 +214,6 @@ nv04_display_destroy(struct drm_device *dev)
|
||||
list_for_each_entry(crtc, &dev->mode_config.crtc_list, head)
|
||||
crtc->funcs->restore(crtc);
|
||||
|
||||
drm_mode_config_cleanup(dev);
|
||||
|
||||
nouveau_hw_save_vga_fonts(dev, 0);
|
||||
}
|
||||
|
||||
|
@ -329,8 +329,6 @@ nv50_crtc_destroy(struct drm_crtc *crtc)
|
||||
|
||||
drm_crtc_cleanup(&nv_crtc->base);
|
||||
|
||||
nv50_cursor_fini(nv_crtc);
|
||||
|
||||
nouveau_bo_unmap(nv_crtc->lut.nvbo);
|
||||
nouveau_bo_ref(NULL, &nv_crtc->lut.nvbo);
|
||||
nouveau_bo_unmap(nv_crtc->cursor.nvbo);
|
||||
|
@ -137,21 +137,3 @@ nv50_cursor_init(struct nouveau_crtc *nv_crtc)
|
||||
nv_crtc->cursor.show = nv50_cursor_show;
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
nv50_cursor_fini(struct nouveau_crtc *nv_crtc)
|
||||
{
|
||||
struct drm_device *dev = nv_crtc->base.dev;
|
||||
int idx = nv_crtc->index;
|
||||
|
||||
NV_DEBUG_KMS(dev, "\n");
|
||||
|
||||
nv_wr32(dev, NV50_PDISPLAY_CURSOR_CURSOR_CTRL2(idx), 0);
|
||||
if (!nv_wait(dev, NV50_PDISPLAY_CURSOR_CURSOR_CTRL2(idx),
|
||||
NV50_PDISPLAY_CURSOR_CURSOR_CTRL2_STATUS, 0)) {
|
||||
NV_ERROR(dev, "timeout: CURSOR_CTRL2_STATUS == 0\n");
|
||||
NV_ERROR(dev, "CURSOR_CTRL2 = 0x%08x\n",
|
||||
nv_rd32(dev, NV50_PDISPLAY_CURSOR_CURSOR_CTRL2(idx)));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -247,6 +247,16 @@ static int nv50_display_disable(struct drm_device *dev)
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < 2; i++) {
|
||||
nv_wr32(dev, NV50_PDISPLAY_CURSOR_CURSOR_CTRL2(i), 0);
|
||||
if (!nv_wait(dev, NV50_PDISPLAY_CURSOR_CURSOR_CTRL2(i),
|
||||
NV50_PDISPLAY_CURSOR_CURSOR_CTRL2_STATUS, 0)) {
|
||||
NV_ERROR(dev, "timeout: CURSOR_CTRL2_STATUS == 0\n");
|
||||
NV_ERROR(dev, "CURSOR_CTRL2 = 0x%08x\n",
|
||||
nv_rd32(dev, NV50_PDISPLAY_CURSOR_CURSOR_CTRL2(i)));
|
||||
}
|
||||
}
|
||||
|
||||
nv50_evo_fini(dev);
|
||||
|
||||
for (i = 0; i < 3; i++) {
|
||||
@ -286,23 +296,6 @@ int nv50_display_create(struct drm_device *dev)
|
||||
return -ENOMEM;
|
||||
dev_priv->engine.display.priv = priv;
|
||||
|
||||
/* init basic kernel modesetting */
|
||||
drm_mode_config_init(dev);
|
||||
|
||||
/* Initialise some optional connector properties. */
|
||||
drm_mode_create_scaling_mode_property(dev);
|
||||
drm_mode_create_dithering_property(dev);
|
||||
|
||||
dev->mode_config.min_width = 0;
|
||||
dev->mode_config.min_height = 0;
|
||||
|
||||
dev->mode_config.funcs = (void *)&nouveau_mode_config_funcs;
|
||||
|
||||
dev->mode_config.max_width = 8192;
|
||||
dev->mode_config.max_height = 8192;
|
||||
|
||||
dev->mode_config.fb_base = dev_priv->fb_phys;
|
||||
|
||||
/* Create CRTC objects */
|
||||
for (i = 0; i < 2; i++)
|
||||
nv50_crtc_create(dev, i);
|
||||
@ -364,8 +357,6 @@ nv50_display_destroy(struct drm_device *dev)
|
||||
|
||||
NV_DEBUG_KMS(dev, "\n");
|
||||
|
||||
drm_mode_config_cleanup(dev);
|
||||
|
||||
nv50_display_disable(dev);
|
||||
nouveau_irq_unregister(dev, 26);
|
||||
kfree(disp);
|
||||
|
Loading…
Reference in New Issue
Block a user