Loading drivers/gpu/drm/nouveau/nouveau_drv.h +1 −8 Original line number Diff line number Diff line Loading @@ -387,6 +387,7 @@ struct nouveau_pgraph_engine { }; struct nouveau_display_engine { void *priv; int (*early_init)(struct drm_device *); void (*late_takedown)(struct drm_device *); int (*create)(struct drm_device *); Loading Loading @@ -747,14 +748,6 @@ struct drm_nouveau_private { struct backlight_device *backlight; struct nouveau_channel *evo; u32 evo_alloc; struct { struct dcb_entry *dcb; u16 script; u32 pclk; } evo_irq; struct { struct dentry *channel_root; } debugfs; Loading drivers/gpu/drm/nouveau/nv50_crtc.c +6 −10 Original line number Diff line number Diff line Loading @@ -65,7 +65,7 @@ nv50_crtc_blank(struct nouveau_crtc *nv_crtc, bool blanked) { struct drm_device *dev = nv_crtc->base.dev; struct drm_nouveau_private *dev_priv = dev->dev_private; struct nouveau_channel *evo = dev_priv->evo; struct nouveau_channel *evo = nv50_display(dev)->evo; int index = nv_crtc->index, ret; NV_DEBUG_KMS(dev, "index %d\n", nv_crtc->index); Loading Loading @@ -135,8 +135,7 @@ static int nv50_crtc_set_dither(struct nouveau_crtc *nv_crtc, bool on, bool update) { struct drm_device *dev = nv_crtc->base.dev; struct drm_nouveau_private *dev_priv = dev->dev_private; struct nouveau_channel *evo = dev_priv->evo; struct nouveau_channel *evo = nv50_display(dev)->evo; int ret; NV_DEBUG_KMS(dev, "\n"); Loading Loading @@ -186,8 +185,7 @@ nv50_crtc_set_scale(struct nouveau_crtc *nv_crtc, int scaling_mode, bool update) struct nouveau_connector *nv_connector = nouveau_crtc_connector_get(nv_crtc); struct drm_device *dev = nv_crtc->base.dev; struct drm_nouveau_private *dev_priv = dev->dev_private; struct nouveau_channel *evo = dev_priv->evo; struct nouveau_channel *evo = nv50_display(dev)->evo; struct drm_display_mode *native_mode = NULL; struct drm_display_mode *mode = &nv_crtc->base.mode; uint32_t outX, outY, horiz, vert; Loading Loading @@ -461,8 +459,7 @@ static void nv50_crtc_commit(struct drm_crtc *crtc) { struct drm_device *dev = crtc->dev; struct drm_nouveau_private *dev_priv = dev->dev_private; struct nouveau_channel *evo = dev_priv->evo; struct nouveau_channel *evo = nv50_display(dev)->evo; struct nouveau_crtc *nv_crtc = nouveau_crtc(crtc); int ret; Loading Loading @@ -496,7 +493,7 @@ nv50_crtc_do_mode_set_base(struct drm_crtc *crtc, struct nouveau_crtc *nv_crtc = nouveau_crtc(crtc); struct drm_device *dev = nv_crtc->base.dev; struct drm_nouveau_private *dev_priv = dev->dev_private; struct nouveau_channel *evo = dev_priv->evo; struct nouveau_channel *evo = nv50_display(dev)->evo; struct drm_framebuffer *drm_fb = nv_crtc->base.fb; struct nouveau_framebuffer *fb = nouveau_framebuffer(drm_fb); int ret, format; Loading Loading @@ -619,8 +616,7 @@ nv50_crtc_mode_set(struct drm_crtc *crtc, struct drm_display_mode *mode, struct drm_framebuffer *old_fb) { struct drm_device *dev = crtc->dev; struct drm_nouveau_private *dev_priv = dev->dev_private; struct nouveau_channel *evo = dev_priv->evo; struct nouveau_channel *evo = nv50_display(dev)->evo; struct nouveau_crtc *nv_crtc = nouveau_crtc(crtc); struct nouveau_connector *nv_connector = NULL; uint32_t hsync_dur, vsync_dur, hsync_start_to_end, vsync_start_to_end; Loading drivers/gpu/drm/nouveau/nv50_cursor.c +4 −4 Original line number Diff line number Diff line Loading @@ -36,9 +36,9 @@ static void nv50_cursor_show(struct nouveau_crtc *nv_crtc, bool update) { struct drm_nouveau_private *dev_priv = nv_crtc->base.dev->dev_private; struct nouveau_channel *evo = dev_priv->evo; struct drm_device *dev = nv_crtc->base.dev; struct drm_nouveau_private *dev_priv = dev->dev_private; struct nouveau_channel *evo = nv50_display(dev)->evo; int ret; NV_DEBUG_KMS(dev, "\n"); Loading Loading @@ -71,9 +71,9 @@ nv50_cursor_show(struct nouveau_crtc *nv_crtc, bool update) static void nv50_cursor_hide(struct nouveau_crtc *nv_crtc, bool update) { struct drm_nouveau_private *dev_priv = nv_crtc->base.dev->dev_private; struct nouveau_channel *evo = dev_priv->evo; struct drm_device *dev = nv_crtc->base.dev; struct drm_nouveau_private *dev_priv = dev->dev_private; struct nouveau_channel *evo = nv50_display(dev)->evo; int ret; NV_DEBUG_KMS(dev, "\n"); Loading drivers/gpu/drm/nouveau/nv50_dac.c +2 −4 Original line number Diff line number Diff line Loading @@ -41,8 +41,7 @@ nv50_dac_disconnect(struct drm_encoder *encoder) { struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder); struct drm_device *dev = encoder->dev; struct drm_nouveau_private *dev_priv = dev->dev_private; struct nouveau_channel *evo = dev_priv->evo; struct nouveau_channel *evo = nv50_display(dev)->evo; int ret; if (!nv_encoder->crtc) Loading Loading @@ -216,8 +215,7 @@ nv50_dac_mode_set(struct drm_encoder *encoder, struct drm_display_mode *mode, { struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder); struct drm_device *dev = encoder->dev; struct drm_nouveau_private *dev_priv = dev->dev_private; struct nouveau_channel *evo = dev_priv->evo; struct nouveau_channel *evo = nv50_display(dev)->evo; struct nouveau_crtc *crtc = nouveau_crtc(encoder->crtc); uint32_t mode_ctl = 0, mode_ctl2 = 0; int ret; Loading drivers/gpu/drm/nouveau/nv50_display.c +29 −17 Original line number Diff line number Diff line Loading @@ -172,7 +172,7 @@ nv50_display_init(struct drm_device *dev) ret = nv50_evo_init(dev); if (ret) return ret; evo = dev_priv->evo; evo = nv50_display(dev)->evo; nv_wr32(dev, NV50_PDISPLAY_OBJECTS, (evo->ramin->vinst >> 8) | 9); Loading Loading @@ -201,6 +201,8 @@ nv50_display_init(struct drm_device *dev) static int nv50_display_disable(struct drm_device *dev) { struct drm_nouveau_private *dev_priv = dev->dev_private; struct nv50_display *disp = nv50_display(dev); struct nouveau_channel *evo = disp->evo; struct drm_crtc *drm_crtc; int ret, i; Loading @@ -212,12 +214,12 @@ static int nv50_display_disable(struct drm_device *dev) nv50_crtc_blank(crtc, true); } ret = RING_SPACE(dev_priv->evo, 2); ret = RING_SPACE(evo, 2); if (ret == 0) { BEGIN_RING(dev_priv->evo, 0, NV50_EVO_UPDATE, 1); OUT_RING(dev_priv->evo, 0); BEGIN_RING(evo, 0, NV50_EVO_UPDATE, 1); OUT_RING(evo, 0); } FIRE_RING(dev_priv->evo); FIRE_RING(evo); /* Almost like ack'ing a vblank interrupt, maybe in the spirit of * cleaning up? Loading Loading @@ -267,10 +269,16 @@ int nv50_display_create(struct drm_device *dev) struct drm_nouveau_private *dev_priv = dev->dev_private; struct dcb_table *dcb = &dev_priv->vbios.dcb; struct drm_connector *connector, *ct; struct nv50_display *priv; int ret, i; NV_DEBUG_KMS(dev, "\n"); priv = kzalloc(sizeof(*priv), GFP_KERNEL); if (!priv) return -ENOMEM; dev_priv->engine.display.priv = priv; /* init basic kernel modesetting */ drm_mode_config_init(dev); Loading Loading @@ -346,6 +354,7 @@ void nv50_display_destroy(struct drm_device *dev) { struct drm_nouveau_private *dev_priv = dev->dev_private; struct nv50_display *disp = nv50_display(dev); NV_DEBUG_KMS(dev, "\n"); Loading @@ -354,6 +363,7 @@ nv50_display_destroy(struct drm_device *dev) nv50_display_disable(dev); nouveau_irq_unregister(dev, 26); flush_work_sync(&dev_priv->irq_work); kfree(disp); } static u16 Loading Loading @@ -469,11 +479,12 @@ static void nv50_display_unk10_handler(struct drm_device *dev) { struct drm_nouveau_private *dev_priv = dev->dev_private; struct nv50_display *disp = nv50_display(dev); u32 unk30 = nv_rd32(dev, 0x610030), mc; int i, crtc, or, type = OUTPUT_ANY; NV_DEBUG_KMS(dev, "0x610030: 0x%08x\n", unk30); dev_priv->evo_irq.dcb = NULL; disp->irq.dcb = NULL; nv_wr32(dev, 0x619494, nv_rd32(dev, 0x619494) & ~8); Loading Loading @@ -544,7 +555,7 @@ nv50_display_unk10_handler(struct drm_device *dev) if (dcb->type == type && (dcb->or & (1 << or))) { nouveau_bios_run_display_table(dev, dcb, 0, -1); dev_priv->evo_irq.dcb = dcb; disp->irq.dcb = dcb; goto ack; } } Loading Loading @@ -590,15 +601,16 @@ static void nv50_display_unk20_handler(struct drm_device *dev) { struct drm_nouveau_private *dev_priv = dev->dev_private; struct nv50_display *disp = nv50_display(dev); u32 unk30 = nv_rd32(dev, 0x610030), tmp, pclk, script, mc = 0; struct dcb_entry *dcb; int i, crtc, or, type = OUTPUT_ANY; NV_DEBUG_KMS(dev, "0x610030: 0x%08x\n", unk30); dcb = dev_priv->evo_irq.dcb; dcb = disp->irq.dcb; if (dcb) { nouveau_bios_run_display_table(dev, dcb, 0, -2); dev_priv->evo_irq.dcb = NULL; disp->irq.dcb = NULL; } /* CRTC clock change requested? */ Loading Loading @@ -695,9 +707,9 @@ nv50_display_unk20_handler(struct drm_device *dev) nv_wr32(dev, NV50_PDISPLAY_DAC_CLK_CTRL2(or), 0); } dev_priv->evo_irq.dcb = dcb; dev_priv->evo_irq.pclk = pclk; dev_priv->evo_irq.script = script; disp->irq.dcb = dcb; disp->irq.pclk = pclk; disp->irq.script = script; ack: nv_wr32(dev, NV50_PDISPLAY_INTR_1, NV50_PDISPLAY_INTR_1_CLK_UNK20); Loading Loading @@ -738,13 +750,13 @@ nv50_display_unk40_dp_set_tmds(struct drm_device *dev, struct dcb_entry *dcb) static void nv50_display_unk40_handler(struct drm_device *dev) { struct drm_nouveau_private *dev_priv = dev->dev_private; struct dcb_entry *dcb = dev_priv->evo_irq.dcb; u16 script = dev_priv->evo_irq.script; u32 unk30 = nv_rd32(dev, 0x610030), pclk = dev_priv->evo_irq.pclk; struct nv50_display *disp = nv50_display(dev); struct dcb_entry *dcb = disp->irq.dcb; u16 script = disp->irq.script; u32 unk30 = nv_rd32(dev, 0x610030), pclk = disp->irq.pclk; NV_DEBUG_KMS(dev, "0x610030: 0x%08x\n", unk30); dev_priv->evo_irq.dcb = NULL; disp->irq.dcb = NULL; if (!dcb) goto ack; Loading Loading
drivers/gpu/drm/nouveau/nouveau_drv.h +1 −8 Original line number Diff line number Diff line Loading @@ -387,6 +387,7 @@ struct nouveau_pgraph_engine { }; struct nouveau_display_engine { void *priv; int (*early_init)(struct drm_device *); void (*late_takedown)(struct drm_device *); int (*create)(struct drm_device *); Loading Loading @@ -747,14 +748,6 @@ struct drm_nouveau_private { struct backlight_device *backlight; struct nouveau_channel *evo; u32 evo_alloc; struct { struct dcb_entry *dcb; u16 script; u32 pclk; } evo_irq; struct { struct dentry *channel_root; } debugfs; Loading
drivers/gpu/drm/nouveau/nv50_crtc.c +6 −10 Original line number Diff line number Diff line Loading @@ -65,7 +65,7 @@ nv50_crtc_blank(struct nouveau_crtc *nv_crtc, bool blanked) { struct drm_device *dev = nv_crtc->base.dev; struct drm_nouveau_private *dev_priv = dev->dev_private; struct nouveau_channel *evo = dev_priv->evo; struct nouveau_channel *evo = nv50_display(dev)->evo; int index = nv_crtc->index, ret; NV_DEBUG_KMS(dev, "index %d\n", nv_crtc->index); Loading Loading @@ -135,8 +135,7 @@ static int nv50_crtc_set_dither(struct nouveau_crtc *nv_crtc, bool on, bool update) { struct drm_device *dev = nv_crtc->base.dev; struct drm_nouveau_private *dev_priv = dev->dev_private; struct nouveau_channel *evo = dev_priv->evo; struct nouveau_channel *evo = nv50_display(dev)->evo; int ret; NV_DEBUG_KMS(dev, "\n"); Loading Loading @@ -186,8 +185,7 @@ nv50_crtc_set_scale(struct nouveau_crtc *nv_crtc, int scaling_mode, bool update) struct nouveau_connector *nv_connector = nouveau_crtc_connector_get(nv_crtc); struct drm_device *dev = nv_crtc->base.dev; struct drm_nouveau_private *dev_priv = dev->dev_private; struct nouveau_channel *evo = dev_priv->evo; struct nouveau_channel *evo = nv50_display(dev)->evo; struct drm_display_mode *native_mode = NULL; struct drm_display_mode *mode = &nv_crtc->base.mode; uint32_t outX, outY, horiz, vert; Loading Loading @@ -461,8 +459,7 @@ static void nv50_crtc_commit(struct drm_crtc *crtc) { struct drm_device *dev = crtc->dev; struct drm_nouveau_private *dev_priv = dev->dev_private; struct nouveau_channel *evo = dev_priv->evo; struct nouveau_channel *evo = nv50_display(dev)->evo; struct nouveau_crtc *nv_crtc = nouveau_crtc(crtc); int ret; Loading Loading @@ -496,7 +493,7 @@ nv50_crtc_do_mode_set_base(struct drm_crtc *crtc, struct nouveau_crtc *nv_crtc = nouveau_crtc(crtc); struct drm_device *dev = nv_crtc->base.dev; struct drm_nouveau_private *dev_priv = dev->dev_private; struct nouveau_channel *evo = dev_priv->evo; struct nouveau_channel *evo = nv50_display(dev)->evo; struct drm_framebuffer *drm_fb = nv_crtc->base.fb; struct nouveau_framebuffer *fb = nouveau_framebuffer(drm_fb); int ret, format; Loading Loading @@ -619,8 +616,7 @@ nv50_crtc_mode_set(struct drm_crtc *crtc, struct drm_display_mode *mode, struct drm_framebuffer *old_fb) { struct drm_device *dev = crtc->dev; struct drm_nouveau_private *dev_priv = dev->dev_private; struct nouveau_channel *evo = dev_priv->evo; struct nouveau_channel *evo = nv50_display(dev)->evo; struct nouveau_crtc *nv_crtc = nouveau_crtc(crtc); struct nouveau_connector *nv_connector = NULL; uint32_t hsync_dur, vsync_dur, hsync_start_to_end, vsync_start_to_end; Loading
drivers/gpu/drm/nouveau/nv50_cursor.c +4 −4 Original line number Diff line number Diff line Loading @@ -36,9 +36,9 @@ static void nv50_cursor_show(struct nouveau_crtc *nv_crtc, bool update) { struct drm_nouveau_private *dev_priv = nv_crtc->base.dev->dev_private; struct nouveau_channel *evo = dev_priv->evo; struct drm_device *dev = nv_crtc->base.dev; struct drm_nouveau_private *dev_priv = dev->dev_private; struct nouveau_channel *evo = nv50_display(dev)->evo; int ret; NV_DEBUG_KMS(dev, "\n"); Loading Loading @@ -71,9 +71,9 @@ nv50_cursor_show(struct nouveau_crtc *nv_crtc, bool update) static void nv50_cursor_hide(struct nouveau_crtc *nv_crtc, bool update) { struct drm_nouveau_private *dev_priv = nv_crtc->base.dev->dev_private; struct nouveau_channel *evo = dev_priv->evo; struct drm_device *dev = nv_crtc->base.dev; struct drm_nouveau_private *dev_priv = dev->dev_private; struct nouveau_channel *evo = nv50_display(dev)->evo; int ret; NV_DEBUG_KMS(dev, "\n"); Loading
drivers/gpu/drm/nouveau/nv50_dac.c +2 −4 Original line number Diff line number Diff line Loading @@ -41,8 +41,7 @@ nv50_dac_disconnect(struct drm_encoder *encoder) { struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder); struct drm_device *dev = encoder->dev; struct drm_nouveau_private *dev_priv = dev->dev_private; struct nouveau_channel *evo = dev_priv->evo; struct nouveau_channel *evo = nv50_display(dev)->evo; int ret; if (!nv_encoder->crtc) Loading Loading @@ -216,8 +215,7 @@ nv50_dac_mode_set(struct drm_encoder *encoder, struct drm_display_mode *mode, { struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder); struct drm_device *dev = encoder->dev; struct drm_nouveau_private *dev_priv = dev->dev_private; struct nouveau_channel *evo = dev_priv->evo; struct nouveau_channel *evo = nv50_display(dev)->evo; struct nouveau_crtc *crtc = nouveau_crtc(encoder->crtc); uint32_t mode_ctl = 0, mode_ctl2 = 0; int ret; Loading
drivers/gpu/drm/nouveau/nv50_display.c +29 −17 Original line number Diff line number Diff line Loading @@ -172,7 +172,7 @@ nv50_display_init(struct drm_device *dev) ret = nv50_evo_init(dev); if (ret) return ret; evo = dev_priv->evo; evo = nv50_display(dev)->evo; nv_wr32(dev, NV50_PDISPLAY_OBJECTS, (evo->ramin->vinst >> 8) | 9); Loading Loading @@ -201,6 +201,8 @@ nv50_display_init(struct drm_device *dev) static int nv50_display_disable(struct drm_device *dev) { struct drm_nouveau_private *dev_priv = dev->dev_private; struct nv50_display *disp = nv50_display(dev); struct nouveau_channel *evo = disp->evo; struct drm_crtc *drm_crtc; int ret, i; Loading @@ -212,12 +214,12 @@ static int nv50_display_disable(struct drm_device *dev) nv50_crtc_blank(crtc, true); } ret = RING_SPACE(dev_priv->evo, 2); ret = RING_SPACE(evo, 2); if (ret == 0) { BEGIN_RING(dev_priv->evo, 0, NV50_EVO_UPDATE, 1); OUT_RING(dev_priv->evo, 0); BEGIN_RING(evo, 0, NV50_EVO_UPDATE, 1); OUT_RING(evo, 0); } FIRE_RING(dev_priv->evo); FIRE_RING(evo); /* Almost like ack'ing a vblank interrupt, maybe in the spirit of * cleaning up? Loading Loading @@ -267,10 +269,16 @@ int nv50_display_create(struct drm_device *dev) struct drm_nouveau_private *dev_priv = dev->dev_private; struct dcb_table *dcb = &dev_priv->vbios.dcb; struct drm_connector *connector, *ct; struct nv50_display *priv; int ret, i; NV_DEBUG_KMS(dev, "\n"); priv = kzalloc(sizeof(*priv), GFP_KERNEL); if (!priv) return -ENOMEM; dev_priv->engine.display.priv = priv; /* init basic kernel modesetting */ drm_mode_config_init(dev); Loading Loading @@ -346,6 +354,7 @@ void nv50_display_destroy(struct drm_device *dev) { struct drm_nouveau_private *dev_priv = dev->dev_private; struct nv50_display *disp = nv50_display(dev); NV_DEBUG_KMS(dev, "\n"); Loading @@ -354,6 +363,7 @@ nv50_display_destroy(struct drm_device *dev) nv50_display_disable(dev); nouveau_irq_unregister(dev, 26); flush_work_sync(&dev_priv->irq_work); kfree(disp); } static u16 Loading Loading @@ -469,11 +479,12 @@ static void nv50_display_unk10_handler(struct drm_device *dev) { struct drm_nouveau_private *dev_priv = dev->dev_private; struct nv50_display *disp = nv50_display(dev); u32 unk30 = nv_rd32(dev, 0x610030), mc; int i, crtc, or, type = OUTPUT_ANY; NV_DEBUG_KMS(dev, "0x610030: 0x%08x\n", unk30); dev_priv->evo_irq.dcb = NULL; disp->irq.dcb = NULL; nv_wr32(dev, 0x619494, nv_rd32(dev, 0x619494) & ~8); Loading Loading @@ -544,7 +555,7 @@ nv50_display_unk10_handler(struct drm_device *dev) if (dcb->type == type && (dcb->or & (1 << or))) { nouveau_bios_run_display_table(dev, dcb, 0, -1); dev_priv->evo_irq.dcb = dcb; disp->irq.dcb = dcb; goto ack; } } Loading Loading @@ -590,15 +601,16 @@ static void nv50_display_unk20_handler(struct drm_device *dev) { struct drm_nouveau_private *dev_priv = dev->dev_private; struct nv50_display *disp = nv50_display(dev); u32 unk30 = nv_rd32(dev, 0x610030), tmp, pclk, script, mc = 0; struct dcb_entry *dcb; int i, crtc, or, type = OUTPUT_ANY; NV_DEBUG_KMS(dev, "0x610030: 0x%08x\n", unk30); dcb = dev_priv->evo_irq.dcb; dcb = disp->irq.dcb; if (dcb) { nouveau_bios_run_display_table(dev, dcb, 0, -2); dev_priv->evo_irq.dcb = NULL; disp->irq.dcb = NULL; } /* CRTC clock change requested? */ Loading Loading @@ -695,9 +707,9 @@ nv50_display_unk20_handler(struct drm_device *dev) nv_wr32(dev, NV50_PDISPLAY_DAC_CLK_CTRL2(or), 0); } dev_priv->evo_irq.dcb = dcb; dev_priv->evo_irq.pclk = pclk; dev_priv->evo_irq.script = script; disp->irq.dcb = dcb; disp->irq.pclk = pclk; disp->irq.script = script; ack: nv_wr32(dev, NV50_PDISPLAY_INTR_1, NV50_PDISPLAY_INTR_1_CLK_UNK20); Loading Loading @@ -738,13 +750,13 @@ nv50_display_unk40_dp_set_tmds(struct drm_device *dev, struct dcb_entry *dcb) static void nv50_display_unk40_handler(struct drm_device *dev) { struct drm_nouveau_private *dev_priv = dev->dev_private; struct dcb_entry *dcb = dev_priv->evo_irq.dcb; u16 script = dev_priv->evo_irq.script; u32 unk30 = nv_rd32(dev, 0x610030), pclk = dev_priv->evo_irq.pclk; struct nv50_display *disp = nv50_display(dev); struct dcb_entry *dcb = disp->irq.dcb; u16 script = disp->irq.script; u32 unk30 = nv_rd32(dev, 0x610030), pclk = disp->irq.pclk; NV_DEBUG_KMS(dev, "0x610030: 0x%08x\n", unk30); dev_priv->evo_irq.dcb = NULL; disp->irq.dcb = NULL; if (!dcb) goto ack; Loading