Searched refs:dcrtc (Results 1 - 7 of 7) sorted by relevance

/linux-4.4.14/drivers/gpu/drm/armada/
H A Darmada_crtc.c109 armada_drm_crtc_update_regs(struct armada_crtc *dcrtc, struct armada_regs *regs) armada_drm_crtc_update_regs() argument
112 void __iomem *reg = dcrtc->base + regs->offset; armada_drm_crtc_update_regs()
125 static void armada_drm_crtc_update(struct armada_crtc *dcrtc) armada_drm_crtc_update() argument
129 dumb_ctrl = dcrtc->cfg_dumb_ctrl; armada_drm_crtc_update()
131 if (!dpms_blanked(dcrtc->dpms)) armada_drm_crtc_update()
140 if (dpms_blanked(dcrtc->dpms) && armada_drm_crtc_update()
154 if (dcrtc->crtc.mode.flags & DRM_MODE_FLAG_NCSYNC) armada_drm_crtc_update()
156 if (dcrtc->crtc.mode.flags & DRM_MODE_FLAG_NHSYNC) armada_drm_crtc_update()
158 if (dcrtc->crtc.mode.flags & DRM_MODE_FLAG_NVSYNC) armada_drm_crtc_update()
161 if (dcrtc->dumb_ctrl != dumb_ctrl) { armada_drm_crtc_update()
162 dcrtc->dumb_ctrl = dumb_ctrl; armada_drm_crtc_update()
163 writel_relaxed(dumb_ctrl, dcrtc->base + LCD_SPU_DUMB_CTRL); armada_drm_crtc_update()
194 static void armada_drm_plane_work_run(struct armada_crtc *dcrtc, armada_drm_plane_work_run() argument
201 work->fn(dcrtc, plane, work); armada_drm_plane_work_run()
202 drm_vblank_put(dcrtc->crtc.dev, dcrtc->num); armada_drm_plane_work_run()
208 int armada_drm_plane_work_queue(struct armada_crtc *dcrtc, armada_drm_plane_work_queue() argument
213 ret = drm_vblank_get(dcrtc->crtc.dev, dcrtc->num); armada_drm_plane_work_queue()
221 drm_vblank_put(dcrtc->crtc.dev, dcrtc->num); armada_drm_plane_work_queue()
232 struct armada_crtc *dcrtc, struct armada_plane *plane) armada_drm_plane_work_cancel()
237 drm_vblank_put(dcrtc->crtc.dev, dcrtc->num); armada_drm_plane_work_cancel()
242 static int armada_drm_crtc_queue_frame_work(struct armada_crtc *dcrtc, armada_drm_crtc_queue_frame_work() argument
245 struct armada_plane *plane = drm_to_armada_plane(dcrtc->crtc.primary); armada_drm_crtc_queue_frame_work()
247 return armada_drm_plane_work_queue(dcrtc, plane, &work->work); armada_drm_crtc_queue_frame_work()
250 static void armada_drm_crtc_complete_frame_work(struct armada_crtc *dcrtc, armada_drm_crtc_complete_frame_work() argument
254 struct drm_device *dev = dcrtc->crtc.dev; armada_drm_crtc_complete_frame_work()
257 spin_lock_irqsave(&dcrtc->irq_lock, flags); armada_drm_crtc_complete_frame_work()
258 armada_drm_crtc_update_regs(dcrtc, fwork->regs); armada_drm_crtc_complete_frame_work()
259 spin_unlock_irqrestore(&dcrtc->irq_lock, flags); armada_drm_crtc_complete_frame_work()
263 drm_send_vblank_event(dev, dcrtc->num, fwork->event); armada_drm_crtc_complete_frame_work()
268 __armada_drm_queue_unref_work(dcrtc->crtc.dev, fwork->old_fb); armada_drm_crtc_complete_frame_work()
272 static void armada_drm_crtc_finish_fb(struct armada_crtc *dcrtc, armada_drm_crtc_finish_fb() argument
294 if (armada_drm_crtc_queue_frame_work(dcrtc, work) == 0) armada_drm_crtc_finish_fb()
308 static void armada_drm_vblank_off(struct armada_crtc *dcrtc) armada_drm_vblank_off() argument
310 struct armada_plane *plane = drm_to_armada_plane(dcrtc->crtc.primary); armada_drm_vblank_off()
316 drm_crtc_vblank_off(&dcrtc->crtc); armada_drm_vblank_off()
317 armada_drm_plane_work_run(dcrtc, plane); armada_drm_vblank_off()
333 struct armada_crtc *dcrtc = drm_to_armada_crtc(crtc); armada_drm_crtc_dpms() local
335 if (dcrtc->dpms != dpms) { armada_drm_crtc_dpms()
336 dcrtc->dpms = dpms; armada_drm_crtc_dpms()
337 if (!IS_ERR(dcrtc->clk) && !dpms_blanked(dpms)) armada_drm_crtc_dpms()
338 WARN_ON(clk_prepare_enable(dcrtc->clk)); armada_drm_crtc_dpms()
339 armada_drm_crtc_update(dcrtc); armada_drm_crtc_dpms()
340 if (!IS_ERR(dcrtc->clk) && dpms_blanked(dpms)) armada_drm_crtc_dpms()
341 clk_disable_unprepare(dcrtc->clk); armada_drm_crtc_dpms()
343 armada_drm_vblank_off(dcrtc); armada_drm_crtc_dpms()
345 drm_crtc_vblank_on(&dcrtc->crtc); armada_drm_crtc_dpms()
358 struct armada_crtc *dcrtc = drm_to_armada_crtc(crtc); armada_drm_crtc_prepare() local
366 plane = dcrtc->plane; armada_drm_crtc_prepare()
374 struct armada_crtc *dcrtc = drm_to_armada_crtc(crtc); armada_drm_crtc_commit() local
376 if (dcrtc->dpms != DRM_MODE_DPMS_ON) { armada_drm_crtc_commit()
377 dcrtc->dpms = DRM_MODE_DPMS_ON; armada_drm_crtc_commit()
378 armada_drm_crtc_update(dcrtc); armada_drm_crtc_commit()
386 struct armada_crtc *dcrtc = drm_to_armada_crtc(crtc); armada_drm_crtc_mode_fixup() local
390 if (!dcrtc->variant->has_spu_adv_reg && armada_drm_crtc_mode_fixup()
395 ret = dcrtc->variant->compute_clock(dcrtc, adj, NULL); armada_drm_crtc_mode_fixup()
402 static void armada_drm_crtc_irq(struct armada_crtc *dcrtc, u32 stat) armada_drm_crtc_irq() argument
404 void __iomem *base = dcrtc->base; armada_drm_crtc_irq()
408 DRM_ERROR("video underflow on crtc %u\n", dcrtc->num); armada_drm_crtc_irq()
410 DRM_ERROR("graphics underflow on crtc %u\n", dcrtc->num); armada_drm_crtc_irq()
413 drm_handle_vblank(dcrtc->crtc.dev, dcrtc->num); armada_drm_crtc_irq()
415 spin_lock(&dcrtc->irq_lock); armada_drm_crtc_irq()
416 ovl_plane = dcrtc->plane; armada_drm_crtc_irq()
419 armada_drm_plane_work_run(dcrtc, plane); armada_drm_crtc_irq()
422 if (stat & GRA_FRAME_IRQ && dcrtc->interlaced) { armada_drm_crtc_irq()
426 writel_relaxed(dcrtc->v[i].spu_v_porch, base + LCD_SPU_V_PORCH); armada_drm_crtc_irq()
427 writel_relaxed(dcrtc->v[i].spu_v_h_total, armada_drm_crtc_irq()
432 val |= dcrtc->v[i].spu_adv_reg; armada_drm_crtc_irq()
436 if (stat & DUMB_FRAMEDONE && dcrtc->cursor_update) { armada_drm_crtc_irq()
437 writel_relaxed(dcrtc->cursor_hw_pos, armada_drm_crtc_irq()
439 writel_relaxed(dcrtc->cursor_hw_sz, armada_drm_crtc_irq()
444 dcrtc->cursor_update = false; armada_drm_crtc_irq()
445 armada_drm_crtc_disable_irq(dcrtc, DUMB_FRAMEDONE_ENA); armada_drm_crtc_irq()
448 spin_unlock(&dcrtc->irq_lock); armada_drm_crtc_irq()
451 struct armada_plane *plane = drm_to_armada_plane(dcrtc->crtc.primary); armada_drm_crtc_irq()
452 armada_drm_plane_work_run(dcrtc, plane); armada_drm_crtc_irq()
458 struct armada_crtc *dcrtc = arg; armada_drm_irq() local
459 u32 v, stat = readl_relaxed(dcrtc->base + LCD_SPU_IRQ_ISR); armada_drm_irq()
465 writel_relaxed(0, dcrtc->base + LCD_SPU_IRQ_ISR); armada_drm_irq()
468 v = stat & dcrtc->irq_ena; armada_drm_irq()
471 armada_drm_crtc_irq(dcrtc, stat); armada_drm_irq()
478 void armada_drm_crtc_disable_irq(struct armada_crtc *dcrtc, u32 mask) armada_drm_crtc_disable_irq() argument
480 if (dcrtc->irq_ena & mask) { armada_drm_crtc_disable_irq()
481 dcrtc->irq_ena &= ~mask; armada_drm_crtc_disable_irq()
482 writel(dcrtc->irq_ena, dcrtc->base + LCD_SPU_IRQ_ENA); armada_drm_crtc_disable_irq()
486 void armada_drm_crtc_enable_irq(struct armada_crtc *dcrtc, u32 mask) armada_drm_crtc_enable_irq() argument
488 if ((dcrtc->irq_ena & mask) != mask) { armada_drm_crtc_enable_irq()
489 dcrtc->irq_ena |= mask; armada_drm_crtc_enable_irq()
490 writel(dcrtc->irq_ena, dcrtc->base + LCD_SPU_IRQ_ENA); armada_drm_crtc_enable_irq()
491 if (readl_relaxed(dcrtc->base + LCD_SPU_IRQ_ISR) & mask) armada_drm_crtc_enable_irq()
492 writel(0, dcrtc->base + LCD_SPU_IRQ_ISR); armada_drm_crtc_enable_irq()
496 static uint32_t armada_drm_crtc_calculate_csc(struct armada_crtc *dcrtc) armada_drm_crtc_calculate_csc() argument
498 struct drm_display_mode *adj = &dcrtc->crtc.mode; armada_drm_crtc_calculate_csc()
501 if (dcrtc->csc_yuv_mode == CSC_YUV_CCIR709) armada_drm_crtc_calculate_csc()
503 if (dcrtc->csc_rgb_mode == CSC_RGB_STUDIO) armada_drm_crtc_calculate_csc()
516 if (dcrtc->csc_yuv_mode == CSC_AUTO) armada_drm_crtc_calculate_csc()
526 if (dcrtc->csc_rgb_mode == CSC_AUTO) armada_drm_crtc_calculate_csc()
537 struct armada_crtc *dcrtc = drm_to_armada_crtc(crtc); armada_drm_crtc_mode_set() local
548 i = armada_drm_crtc_calc_fb(dcrtc->crtc.primary->fb, armada_drm_crtc_mode_set()
568 armada_drm_plane_work_wait(drm_to_armada_plane(dcrtc->crtc.primary), armada_drm_crtc_mode_set()
573 val = dcrtc->dumb_ctrl & ~CFG_DUMB_ENA; armada_drm_crtc_mode_set()
574 if (val != dcrtc->dumb_ctrl) { armada_drm_crtc_mode_set()
575 dcrtc->dumb_ctrl = val; armada_drm_crtc_mode_set()
576 writel_relaxed(val, dcrtc->base + LCD_SPU_DUMB_CTRL); armada_drm_crtc_mode_set()
583 if (!IS_ERR(dcrtc->clk) && dpms_blanked(dcrtc->dpms)) armada_drm_crtc_mode_set()
584 WARN_ON(clk_prepare_enable(dcrtc->clk)); armada_drm_crtc_mode_set()
587 dcrtc->variant->compute_clock(dcrtc, adj, &sclk); armada_drm_crtc_mode_set()
593 if (interlaced ^ dcrtc->interlaced) { armada_drm_crtc_mode_set()
595 drm_vblank_get(dcrtc->crtc.dev, dcrtc->num); armada_drm_crtc_mode_set()
597 drm_vblank_put(dcrtc->crtc.dev, dcrtc->num); armada_drm_crtc_mode_set()
598 dcrtc->interlaced = interlaced; armada_drm_crtc_mode_set()
601 spin_lock_irqsave(&dcrtc->irq_lock, flags); armada_drm_crtc_mode_set()
604 dcrtc->v[1].spu_v_h_total = adj->crtc_vtotal << 16 | armada_drm_crtc_mode_set()
606 dcrtc->v[1].spu_v_porch = tm << 16 | bm; armada_drm_crtc_mode_set()
608 dcrtc->v[1].spu_adv_reg = val << 20 | val | ADV_VSYNCOFFEN | armada_drm_crtc_mode_set()
609 dcrtc->variant->spu_adv_reg; armada_drm_crtc_mode_set()
613 dcrtc->v[0].spu_v_h_total = dcrtc->v[1].spu_v_h_total + armada_drm_crtc_mode_set()
615 dcrtc->v[0].spu_v_porch = dcrtc->v[1].spu_v_porch + 1; armada_drm_crtc_mode_set()
617 dcrtc->v[0].spu_adv_reg = val << 20 | val | ADV_VSYNCOFFEN | armada_drm_crtc_mode_set()
618 dcrtc->variant->spu_adv_reg; armada_drm_crtc_mode_set()
620 dcrtc->v[0] = dcrtc->v[1]; armada_drm_crtc_mode_set()
629 armada_reg_queue_set(regs, i, dcrtc->v[0].spu_v_porch, LCD_SPU_V_PORCH); armada_drm_crtc_mode_set()
630 armada_reg_queue_set(regs, i, dcrtc->v[0].spu_v_h_total, armada_drm_crtc_mode_set()
633 if (dcrtc->variant->has_spu_adv_reg) { armada_drm_crtc_mode_set()
634 armada_reg_queue_mod(regs, i, dcrtc->v[0].spu_adv_reg, armada_drm_crtc_mode_set()
640 val |= CFG_GRA_FMT(drm_fb_to_armada_fb(dcrtc->crtc.primary->fb)->fmt); armada_drm_crtc_mode_set()
641 val |= CFG_GRA_MOD(drm_fb_to_armada_fb(dcrtc->crtc.primary->fb)->mod); armada_drm_crtc_mode_set()
643 if (drm_fb_to_armada_fb(dcrtc->crtc.primary->fb)->fmt > CFG_420) armada_drm_crtc_mode_set()
658 val = dcrtc->spu_iopad_ctrl | armada_drm_crtc_calculate_csc(dcrtc); armada_drm_crtc_mode_set()
662 armada_drm_crtc_update_regs(dcrtc, regs); armada_drm_crtc_mode_set()
663 spin_unlock_irqrestore(&dcrtc->irq_lock, flags); armada_drm_crtc_mode_set()
665 armada_drm_crtc_update(dcrtc); armada_drm_crtc_mode_set()
668 armada_drm_crtc_finish_fb(dcrtc, old_fb, dpms_blanked(dcrtc->dpms)); armada_drm_crtc_mode_set()
677 struct armada_crtc *dcrtc = drm_to_armada_crtc(crtc); armada_drm_crtc_mode_set_base() local
682 dcrtc->interlaced); armada_drm_crtc_mode_set_base()
686 armada_drm_plane_work_wait(drm_to_armada_plane(dcrtc->crtc.primary), armada_drm_crtc_mode_set_base()
693 armada_drm_crtc_update_regs(dcrtc, regs); armada_drm_crtc_mode_set_base()
696 armada_drm_crtc_finish_fb(dcrtc, old_fb, dpms_blanked(dcrtc->dpms)); armada_drm_crtc_mode_set_base()
701 void armada_drm_crtc_plane_disable(struct armada_crtc *dcrtc, armada_drm_crtc_plane_disable() argument
728 spin_lock_irq(&dcrtc->irq_lock); armada_drm_crtc_plane_disable()
729 armada_updatel(0, dma_ctrl0_mask, dcrtc->base + LCD_SPU_DMA_CTRL0); armada_drm_crtc_plane_disable()
730 spin_unlock_irq(&dcrtc->irq_lock); armada_drm_crtc_plane_disable()
732 armada_updatel(sram_para1, 0, dcrtc->base + LCD_SPU_SRAM_PARA1); armada_drm_crtc_plane_disable()
738 struct armada_crtc *dcrtc = drm_to_armada_crtc(crtc); armada_drm_crtc_disable() local
741 armada_drm_crtc_plane_disable(dcrtc, crtc->primary); armada_drm_crtc_disable()
798 static int armada_drm_crtc_cursor_update(struct armada_crtc *dcrtc, bool reload) armada_drm_crtc_cursor_update() argument
800 uint32_t xoff, xscr, w = dcrtc->cursor_w, s; armada_drm_crtc_cursor_update()
801 uint32_t yoff, yscr, h = dcrtc->cursor_h; armada_drm_crtc_cursor_update()
808 if (dcrtc->cursor_x < 0) { armada_drm_crtc_cursor_update()
809 xoff = -dcrtc->cursor_x; armada_drm_crtc_cursor_update()
812 } else if (dcrtc->cursor_x + w > dcrtc->crtc.mode.hdisplay) { armada_drm_crtc_cursor_update()
814 xscr = dcrtc->cursor_x; armada_drm_crtc_cursor_update()
815 w = max_t(int, dcrtc->crtc.mode.hdisplay - dcrtc->cursor_x, 0); armada_drm_crtc_cursor_update()
818 xscr = dcrtc->cursor_x; armada_drm_crtc_cursor_update()
821 if (dcrtc->cursor_y < 0) { armada_drm_crtc_cursor_update()
822 yoff = -dcrtc->cursor_y; armada_drm_crtc_cursor_update()
825 } else if (dcrtc->cursor_y + h > dcrtc->crtc.mode.vdisplay) { armada_drm_crtc_cursor_update()
827 yscr = dcrtc->cursor_y; armada_drm_crtc_cursor_update()
828 h = max_t(int, dcrtc->crtc.mode.vdisplay - dcrtc->cursor_y, 0); armada_drm_crtc_cursor_update()
831 yscr = dcrtc->cursor_y; armada_drm_crtc_cursor_update()
835 s = dcrtc->cursor_w; armada_drm_crtc_cursor_update()
836 if (dcrtc->interlaced) { armada_drm_crtc_cursor_update()
842 if (!dcrtc->cursor_obj || !h || !w) { armada_drm_crtc_cursor_update()
843 spin_lock_irq(&dcrtc->irq_lock); armada_drm_crtc_cursor_update()
844 armada_drm_crtc_disable_irq(dcrtc, DUMB_FRAMEDONE_ENA); armada_drm_crtc_cursor_update()
845 dcrtc->cursor_update = false; armada_drm_crtc_cursor_update()
846 armada_updatel(0, CFG_HWC_ENA, dcrtc->base + LCD_SPU_DMA_CTRL0); armada_drm_crtc_cursor_update()
847 spin_unlock_irq(&dcrtc->irq_lock); armada_drm_crtc_cursor_update()
851 para1 = readl_relaxed(dcrtc->base + LCD_SPU_SRAM_PARA1); armada_drm_crtc_cursor_update()
853 dcrtc->base + LCD_SPU_SRAM_PARA1); armada_drm_crtc_cursor_update()
860 armada_drm_crtc_cursor_tran(dcrtc->base); armada_drm_crtc_cursor_update()
864 if (dcrtc->cursor_hw_sz != (h << 16 | w)) { armada_drm_crtc_cursor_update()
865 spin_lock_irq(&dcrtc->irq_lock); armada_drm_crtc_cursor_update()
866 armada_drm_crtc_disable_irq(dcrtc, DUMB_FRAMEDONE_ENA); armada_drm_crtc_cursor_update()
867 dcrtc->cursor_update = false; armada_drm_crtc_cursor_update()
868 armada_updatel(0, CFG_HWC_ENA, dcrtc->base + LCD_SPU_DMA_CTRL0); armada_drm_crtc_cursor_update()
869 spin_unlock_irq(&dcrtc->irq_lock); armada_drm_crtc_cursor_update()
873 struct armada_gem_object *obj = dcrtc->cursor_obj; armada_drm_crtc_cursor_update()
878 armada_load_cursor_argb(dcrtc->base, pix, s, w, h); armada_drm_crtc_cursor_update()
882 spin_lock_irq(&dcrtc->irq_lock); armada_drm_crtc_cursor_update()
883 dcrtc->cursor_hw_pos = yscr << 16 | xscr; armada_drm_crtc_cursor_update()
884 dcrtc->cursor_hw_sz = h << 16 | w; armada_drm_crtc_cursor_update()
885 dcrtc->cursor_update = true; armada_drm_crtc_cursor_update()
886 armada_drm_crtc_enable_irq(dcrtc, DUMB_FRAMEDONE_ENA); armada_drm_crtc_cursor_update()
887 spin_unlock_irq(&dcrtc->irq_lock); armada_drm_crtc_cursor_update()
901 struct armada_crtc *dcrtc = drm_to_armada_crtc(crtc); armada_drm_crtc_cursor_set() local
906 if (!dcrtc->variant->has_spu_adv_reg) armada_drm_crtc_cursor_set()
932 if (dcrtc->cursor_obj) { armada_drm_crtc_cursor_set()
933 dcrtc->cursor_obj->update = NULL; armada_drm_crtc_cursor_set()
934 dcrtc->cursor_obj->update_data = NULL; armada_drm_crtc_cursor_set()
935 drm_gem_object_unreference(&dcrtc->cursor_obj->obj); armada_drm_crtc_cursor_set()
937 dcrtc->cursor_obj = obj; armada_drm_crtc_cursor_set()
938 dcrtc->cursor_w = w; armada_drm_crtc_cursor_set()
939 dcrtc->cursor_h = h; armada_drm_crtc_cursor_set()
940 ret = armada_drm_crtc_cursor_update(dcrtc, true); armada_drm_crtc_cursor_set()
942 obj->update_data = dcrtc; armada_drm_crtc_cursor_set()
953 struct armada_crtc *dcrtc = drm_to_armada_crtc(crtc); armada_drm_crtc_cursor_move() local
957 if (!dcrtc->variant->has_spu_adv_reg) armada_drm_crtc_cursor_move()
961 dcrtc->cursor_x = x; armada_drm_crtc_cursor_move()
962 dcrtc->cursor_y = y; armada_drm_crtc_cursor_move()
963 ret = armada_drm_crtc_cursor_update(dcrtc, false); armada_drm_crtc_cursor_move()
971 struct armada_crtc *dcrtc = drm_to_armada_crtc(crtc); armada_drm_crtc_destroy() local
974 if (dcrtc->cursor_obj) armada_drm_crtc_destroy()
975 drm_gem_object_unreference(&dcrtc->cursor_obj->obj); armada_drm_crtc_destroy()
977 priv->dcrtc[dcrtc->num] = NULL; armada_drm_crtc_destroy()
978 drm_crtc_cleanup(&dcrtc->crtc); armada_drm_crtc_destroy()
980 if (!IS_ERR(dcrtc->clk)) armada_drm_crtc_destroy()
981 clk_disable_unprepare(dcrtc->clk); armada_drm_crtc_destroy()
983 writel_relaxed(0, dcrtc->base + LCD_SPU_IRQ_ENA); armada_drm_crtc_destroy()
985 of_node_put(dcrtc->crtc.port); armada_drm_crtc_destroy()
987 kfree(dcrtc); armada_drm_crtc_destroy()
997 struct armada_crtc *dcrtc = drm_to_armada_crtc(crtc); armada_drm_crtc_page_flip() local
1012 work->old_fb = dcrtc->crtc.primary->fb; armada_drm_crtc_page_flip()
1015 dcrtc->interlaced); armada_drm_crtc_page_flip()
1024 ret = armada_drm_crtc_queue_frame_work(dcrtc, work); armada_drm_crtc_page_flip()
1038 dcrtc->crtc.primary->fb = fb; armada_drm_crtc_page_flip()
1044 if (dpms_blanked(dcrtc->dpms)) armada_drm_crtc_page_flip()
1045 armada_drm_plane_work_run(dcrtc, drm_to_armada_plane(dcrtc->crtc.primary)); armada_drm_crtc_page_flip()
1055 struct armada_crtc *dcrtc = drm_to_armada_crtc(crtc); armada_drm_crtc_set_property() local
1059 dcrtc->csc_yuv_mode = val; armada_drm_crtc_set_property()
1062 dcrtc->csc_rgb_mode = val; armada_drm_crtc_set_property()
1069 val = dcrtc->spu_iopad_ctrl | armada_drm_crtc_set_property()
1070 armada_drm_crtc_calculate_csc(dcrtc); armada_drm_crtc_set_property()
1071 writel_relaxed(val, dcrtc->base + LCD_SPU_IOPAD_CONTROL); armada_drm_crtc_set_property()
1136 struct armada_crtc *dcrtc; armada_drm_crtc_create() local
1149 dcrtc = kzalloc(sizeof(*dcrtc), GFP_KERNEL); armada_drm_crtc_create()
1150 if (!dcrtc) { armada_drm_crtc_create()
1156 dev_set_drvdata(dev, dcrtc); armada_drm_crtc_create()
1158 dcrtc->variant = variant; armada_drm_crtc_create()
1159 dcrtc->base = base; armada_drm_crtc_create()
1160 dcrtc->num = drm->mode_config.num_crtc; armada_drm_crtc_create()
1161 dcrtc->clk = ERR_PTR(-EINVAL); armada_drm_crtc_create()
1162 dcrtc->csc_yuv_mode = CSC_AUTO; armada_drm_crtc_create()
1163 dcrtc->csc_rgb_mode = CSC_AUTO; armada_drm_crtc_create()
1164 dcrtc->cfg_dumb_ctrl = DUMB24_RGB888_0; armada_drm_crtc_create()
1165 dcrtc->spu_iopad_ctrl = CFG_VSCALE_LN_EN | CFG_IOPAD_DUMB24; armada_drm_crtc_create()
1166 spin_lock_init(&dcrtc->irq_lock); armada_drm_crtc_create()
1167 dcrtc->irq_ena = CLEAN_SPU_IRQ_ISR; armada_drm_crtc_create()
1170 writel_relaxed(0x00000001, dcrtc->base + LCD_CFG_SCLK_DIV); armada_drm_crtc_create()
1171 writel_relaxed(0x00000000, dcrtc->base + LCD_SPU_BLANKCOLOR); armada_drm_crtc_create()
1172 writel_relaxed(dcrtc->spu_iopad_ctrl, armada_drm_crtc_create()
1173 dcrtc->base + LCD_SPU_IOPAD_CONTROL); armada_drm_crtc_create()
1174 writel_relaxed(0x00000000, dcrtc->base + LCD_SPU_SRAM_PARA0); armada_drm_crtc_create()
1177 CFG_PDWN64x66, dcrtc->base + LCD_SPU_SRAM_PARA1); armada_drm_crtc_create()
1178 writel_relaxed(0x2032ff81, dcrtc->base + LCD_SPU_DMA_CTRL1); armada_drm_crtc_create()
1179 writel_relaxed(0x00000000, dcrtc->base + LCD_SPU_GRA_OVSA_HPXL_VLN); armada_drm_crtc_create()
1180 writel_relaxed(dcrtc->irq_ena, dcrtc->base + LCD_SPU_IRQ_ENA); armada_drm_crtc_create()
1181 writel_relaxed(0, dcrtc->base + LCD_SPU_IRQ_ISR); armada_drm_crtc_create()
1184 dcrtc); armada_drm_crtc_create()
1186 kfree(dcrtc); armada_drm_crtc_create()
1190 if (dcrtc->variant->init) { armada_drm_crtc_create()
1191 ret = dcrtc->variant->init(dcrtc, dev); armada_drm_crtc_create()
1193 kfree(dcrtc); armada_drm_crtc_create()
1199 armada_updatel(CFG_ARBFAST_ENA, 0, dcrtc->base + LCD_SPU_DMA_CTRL0); armada_drm_crtc_create()
1201 priv->dcrtc[dcrtc->num] = dcrtc; armada_drm_crtc_create()
1203 dcrtc->crtc.port = port; armada_drm_crtc_create()
1225 ret = drm_crtc_init_with_planes(drm, &dcrtc->crtc, &primary->base, NULL, armada_drm_crtc_create()
1230 drm_crtc_helper_add(&dcrtc->crtc, &armada_crtc_helper_funcs); armada_drm_crtc_create()
1232 drm_object_attach_property(&dcrtc->crtc.base, priv->csc_yuv_prop, armada_drm_crtc_create()
1233 dcrtc->csc_yuv_mode); armada_drm_crtc_create()
1234 drm_object_attach_property(&dcrtc->crtc.base, priv->csc_rgb_prop, armada_drm_crtc_create()
1235 dcrtc->csc_rgb_mode); armada_drm_crtc_create()
1237 return armada_overlay_plane_create(drm, 1 << dcrtc->num); armada_drm_crtc_create()
1293 struct armada_crtc *dcrtc = dev_get_drvdata(dev); armada_lcd_unbind() local
1295 armada_drm_crtc_destroy(&dcrtc->crtc); armada_lcd_unbind()
231 armada_drm_plane_work_cancel( struct armada_crtc *dcrtc, struct armada_plane *plane) armada_drm_plane_work_cancel() argument
H A Darmada_510.c18 static int armada510_crtc_init(struct armada_crtc *dcrtc, struct device *dev) armada510_crtc_init() argument
26 dcrtc->extclk[0] = clk; armada510_crtc_init()
29 armada_updatel(0x20, (1 << 11) | 0xff, dcrtc->base + LCD_CFG_RDREG4F); armada510_crtc_init()
44 static int armada510_crtc_compute_clock(struct armada_crtc *dcrtc, armada510_crtc_compute_clock() argument
47 struct clk *clk = dcrtc->extclk[0]; armada510_crtc_compute_clock()
50 if (dcrtc->num == 1) armada510_crtc_compute_clock()
56 if (dcrtc->clk != clk) { armada510_crtc_compute_clock()
60 dcrtc->clk = clk; armada510_crtc_compute_clock()
H A Darmada_debugfs.c38 for (n = 0; n < ARRAY_SIZE(priv->dcrtc); n++) { armada_debugfs_reg_show()
39 struct armada_crtc *dcrtc = priv->dcrtc[n]; armada_debugfs_reg_show() local
40 if (!dcrtc) armada_debugfs_reg_show()
44 uint32_t v = readl_relaxed(dcrtc->base + i); armada_debugfs_reg_show()
71 struct armada_crtc *dcrtc = priv->dcrtc[0]; armada_debugfs_write() local
93 writel(val, dcrtc->base + reg); armada_debugfs_write()
H A Darmada_overlay.c51 struct armada_crtc *dcrtc) armada_ovl_update_attr()
53 writel_relaxed(prop->colorkey_yr, dcrtc->base + LCD_SPU_COLORKEY_Y); armada_ovl_update_attr()
54 writel_relaxed(prop->colorkey_ug, dcrtc->base + LCD_SPU_COLORKEY_U); armada_ovl_update_attr()
55 writel_relaxed(prop->colorkey_vb, dcrtc->base + LCD_SPU_COLORKEY_V); armada_ovl_update_attr()
58 dcrtc->base + LCD_SPU_CONTRAST); armada_ovl_update_attr()
61 dcrtc->base + LCD_SPU_SATURATION); armada_ovl_update_attr()
62 writel_relaxed(0x00002000, dcrtc->base + LCD_SPU_CBSH_HUE); armada_ovl_update_attr()
64 spin_lock_irq(&dcrtc->irq_lock); armada_ovl_update_attr()
67 dcrtc->base + LCD_SPU_DMA_CTRL1); armada_ovl_update_attr()
69 armada_updatel(ADV_GRACOLORKEY, 0, dcrtc->base + LCD_SPU_ADV_REG); armada_ovl_update_attr()
70 spin_unlock_irq(&dcrtc->irq_lock); armada_ovl_update_attr()
85 static void armada_ovl_plane_work(struct armada_crtc *dcrtc, armada_ovl_plane_work() argument
90 armada_drm_crtc_update_regs(dcrtc, dplane->vbl.regs); armada_ovl_plane_work()
101 struct armada_crtc *dcrtc = drm_to_armada_crtc(crtc); armada_ovl_plane_update() local
136 if (!dcrtc->plane) { armada_ovl_plane_update()
137 dcrtc->plane = plane; armada_ovl_plane_update()
138 armada_ovl_update_attr(&dplane->prop, dcrtc); armada_ovl_plane_update()
147 writel_relaxed(val, dcrtc->base + LCD_SPU_DMA_HPXL_VLN); armada_ovl_plane_update()
151 writel_relaxed(val, dcrtc->base + LCD_SPU_DZM_HPXL_VLN); armada_ovl_plane_update()
155 writel_relaxed(val, dcrtc->base + LCD_SPU_DMA_OVSA_HPXL_VLN); armada_ovl_plane_update()
161 dcrtc->base + LCD_SPU_SRAM_PARA1); armada_ovl_plane_update()
165 armada_drm_plane_work_cancel(dcrtc, &dplane->base); armada_ovl_plane_update()
256 armada_drm_plane_work_queue(dcrtc, &dplane->base, armada_ovl_plane_update()
266 struct armada_crtc *dcrtc; armada_ovl_plane_disable() local
271 dcrtc = drm_to_armada_crtc(dplane->base.base.crtc); armada_ovl_plane_disable()
273 armada_drm_plane_work_cancel(dcrtc, &dplane->base); armada_ovl_plane_disable()
274 armada_drm_crtc_plane_disable(dcrtc, plane); armada_ovl_plane_disable()
276 dcrtc->plane = NULL; armada_ovl_plane_disable()
50 armada_ovl_update_attr(struct armada_ovl_plane_properties *prop, struct armada_crtc *dcrtc) armada_ovl_update_attr() argument
H A Darmada_crtc.h52 int armada_drm_plane_work_queue(struct armada_crtc *dcrtc,
56 struct armada_crtc *dcrtc, struct armada_plane *plane);
101 void armada_drm_crtc_plane_disable(struct armada_crtc *dcrtc,
H A Darmada_drm.h59 struct armada_crtc *dcrtc[2]; member in struct:armada_private
H A Darmada_drv.c156 armada_drm_crtc_enable_irq(priv->dcrtc[pipe], VSYNC_IRQ_ENA); armada_drm_enable_vblank()
163 armada_drm_crtc_disable_irq(priv->dcrtc[pipe], VSYNC_IRQ_ENA); armada_drm_disable_vblank()

Completed in 183 milliseconds