Skip to content

Commit

Permalink
drm/nouveau: make general drm modesetting init common
Browse files Browse the repository at this point in the history
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
  • Loading branch information
Ben Skeggs committed Sep 20, 2011
1 parent 2e9733f commit 048a885
Show file tree
Hide file tree
Showing 8 changed files with 32 additions and 67 deletions.
3 changes: 1 addition & 2 deletions drivers/gpu/drm/nouveau/nouveau_crtc.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
1 change: 0 additions & 1 deletion drivers/gpu/drm/nouveau/nouveau_drv.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
2 changes: 0 additions & 2 deletions drivers/gpu/drm/nouveau/nouveau_mem.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
21 changes: 21 additions & 0 deletions drivers/gpu/drm/nouveau/nouveau_state.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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);
Expand Down
23 changes: 0 additions & 23 deletions drivers/gpu/drm/nouveau/nv04_display.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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);
}

Expand Down
2 changes: 0 additions & 2 deletions drivers/gpu/drm/nouveau/nv50_crtc.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
18 changes: 0 additions & 18 deletions drivers/gpu/drm/nouveau/nv50_cursor.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)));
}
}

29 changes: 10 additions & 19 deletions drivers/gpu/drm/nouveau/nv50_display.c
Original file line number Diff line number Diff line change
Expand Up @@ -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++) {
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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);
Expand Down

0 comments on commit 048a885

Please sign in to comment.