Lines Matching full:crtc
17 * After the CRTC soft reset, the vblank counter would be reset to zero.
18 * But the address and other settings in the CRTC register remain the same
257 * with garbage value, which causes the CRTC hang there.
260 * This overrides the firmware's settings on startup, making the CRTC work
262 * Only touch CRTC hardware-related parts.
308 * and LS2K2000. The counter increases even though the CRTC is disabled,
309 * it will be reset only if the CRTC is being soft reset.
390 static void lsdc_crtc_reset(struct drm_crtc *crtc) in lsdc_crtc_reset() argument
392 struct lsdc_crtc *lcrtc = to_lsdc_crtc(crtc); in lsdc_crtc_reset()
396 if (crtc->state) in lsdc_crtc_reset()
397 crtc->funcs->atomic_destroy_state(crtc, crtc->state); in lsdc_crtc_reset()
402 __drm_atomic_helper_crtc_reset(crtc, NULL); in lsdc_crtc_reset()
404 __drm_atomic_helper_crtc_reset(crtc, &priv_crtc_state->base); in lsdc_crtc_reset()
406 /* Reset the CRTC hardware, this is required for S3 support */ in lsdc_crtc_reset()
410 static void lsdc_crtc_atomic_destroy_state(struct drm_crtc *crtc, in lsdc_crtc_atomic_destroy_state() argument
421 lsdc_crtc_atomic_duplicate_state(struct drm_crtc *crtc) in lsdc_crtc_atomic_duplicate_state() argument
430 __drm_atomic_helper_crtc_duplicate_state(crtc, &new_priv_state->base); in lsdc_crtc_atomic_duplicate_state()
432 old_priv_state = to_lsdc_crtc_state(crtc->state); in lsdc_crtc_atomic_duplicate_state()
440 static u32 lsdc_crtc_get_vblank_counter(struct drm_crtc *crtc) in lsdc_crtc_get_vblank_counter() argument
442 struct lsdc_crtc *lcrtc = to_lsdc_crtc(crtc); in lsdc_crtc_get_vblank_counter()
448 static int lsdc_crtc_enable_vblank(struct drm_crtc *crtc) in lsdc_crtc_enable_vblank() argument
450 struct lsdc_crtc *lcrtc = to_lsdc_crtc(crtc); in lsdc_crtc_enable_vblank()
460 static void lsdc_crtc_disable_vblank(struct drm_crtc *crtc) in lsdc_crtc_disable_vblank() argument
462 struct lsdc_crtc *lcrtc = to_lsdc_crtc(crtc); in lsdc_crtc_disable_vblank()
471 * CRTC related debugfs
472 * Primary planes and cursor planes belong to the CRTC as well.
578 struct drm_crtc *crtc = &lcrtc->base; in lsdc_pixpll_show_clock() local
579 struct drm_display_mode *mode = &crtc->state->mode; in lsdc_pixpll_show_clock()
585 seq_printf(m, "%s: %dx%d@%d\n", crtc->name, in lsdc_pixpll_show_clock()
616 seq_puts(m, "soft_reset: soft reset this CRTC\n"); in lsdc_crtc_man_op_show()
617 seq_puts(m, "enable: enable this CRTC\n"); in lsdc_crtc_man_op_show()
618 seq_puts(m, "disable: disable this CRTC\n"); in lsdc_crtc_man_op_show()
620 seq_puts(m, "clone: clone the another crtc with hardware logic\n"); in lsdc_crtc_man_op_show()
627 struct drm_crtc *crtc = inode->i_private; in lsdc_crtc_man_op_open() local
629 return single_open(file, lsdc_crtc_man_op_show, crtc); in lsdc_crtc_man_op_open()
673 static int lsdc_crtc_late_register(struct drm_crtc *crtc) in lsdc_crtc_late_register() argument
675 struct lsdc_display_pipe *dispipe = crtc_to_display_pipe(crtc); in lsdc_crtc_late_register()
676 struct lsdc_crtc *lcrtc = to_lsdc_crtc(crtc); in lsdc_crtc_late_register()
677 struct drm_minor *minor = crtc->dev->primary; in lsdc_crtc_late_register()
690 crtc->debugfs_entry, minor); in lsdc_crtc_late_register()
693 debugfs_create_file("ops", 0644, crtc->debugfs_entry, lcrtc, in lsdc_crtc_late_register()
743 lsdc_crtc_mode_valid(struct drm_crtc *crtc, const struct drm_display_mode *mode) in lsdc_crtc_mode_valid() argument
745 struct drm_device *ddev = crtc->dev; in lsdc_crtc_mode_valid()
774 static int lsdc_pixpll_atomic_check(struct drm_crtc *crtc, in lsdc_pixpll_atomic_check() argument
777 struct lsdc_crtc *lcrtc = to_lsdc_crtc(crtc); in lsdc_pixpll_atomic_check()
786 drm_warn(crtc->dev, "Failed to find PLL params for %ukHz\n", in lsdc_pixpll_atomic_check()
794 static int lsdc_crtc_helper_atomic_check(struct drm_crtc *crtc, in lsdc_crtc_helper_atomic_check() argument
797 struct drm_crtc_state *crtc_state = drm_atomic_get_new_crtc_state(state, crtc); in lsdc_crtc_helper_atomic_check()
802 return lsdc_pixpll_atomic_check(crtc, crtc_state); in lsdc_crtc_helper_atomic_check()
805 static void lsdc_crtc_mode_set_nofb(struct drm_crtc *crtc) in lsdc_crtc_mode_set_nofb() argument
807 struct lsdc_crtc *lcrtc = to_lsdc_crtc(crtc); in lsdc_crtc_mode_set_nofb()
811 struct drm_crtc_state *state = crtc->state; in lsdc_crtc_mode_set_nofb()
840 static void lsdc_crtc_send_vblank(struct drm_crtc *crtc) in lsdc_crtc_send_vblank() argument
842 struct drm_device *ddev = crtc->dev; in lsdc_crtc_send_vblank()
845 if (!crtc->state || !crtc->state->event) in lsdc_crtc_send_vblank()
851 drm_crtc_send_vblank_event(crtc, crtc->state->event); in lsdc_crtc_send_vblank()
852 crtc->state->event = NULL; in lsdc_crtc_send_vblank()
856 static void lsdc_crtc_atomic_enable(struct drm_crtc *crtc, in lsdc_crtc_atomic_enable() argument
859 struct lsdc_crtc *lcrtc = to_lsdc_crtc(crtc); in lsdc_crtc_atomic_enable()
862 drm_crtc_vblank_on(crtc); in lsdc_crtc_atomic_enable()
867 static void lsdc_crtc_atomic_disable(struct drm_crtc *crtc, in lsdc_crtc_atomic_disable() argument
870 struct lsdc_crtc *lcrtc = to_lsdc_crtc(crtc); in lsdc_crtc_atomic_disable()
873 drm_crtc_vblank_off(crtc); in lsdc_crtc_atomic_disable()
878 * Make sure we issue a vblank event after disabling the CRTC if in lsdc_crtc_atomic_disable()
881 lsdc_crtc_send_vblank(crtc); in lsdc_crtc_atomic_disable()
884 static void lsdc_crtc_atomic_flush(struct drm_crtc *crtc, in lsdc_crtc_atomic_flush() argument
887 spin_lock_irq(&crtc->dev->event_lock); in lsdc_crtc_atomic_flush()
888 if (crtc->state->event) { in lsdc_crtc_atomic_flush()
889 if (drm_crtc_vblank_get(crtc) == 0) in lsdc_crtc_atomic_flush()
890 drm_crtc_arm_vblank_event(crtc, crtc->state->event); in lsdc_crtc_atomic_flush()
892 drm_crtc_send_vblank_event(crtc, crtc->state->event); in lsdc_crtc_atomic_flush()
893 crtc->state->event = NULL; in lsdc_crtc_atomic_flush()
895 spin_unlock_irq(&crtc->dev->event_lock); in lsdc_crtc_atomic_flush()
898 static bool lsdc_crtc_get_scanout_position(struct drm_crtc *crtc, in lsdc_crtc_get_scanout_position() argument
906 struct lsdc_crtc *lcrtc = to_lsdc_crtc(crtc); in lsdc_crtc_get_scanout_position()
950 struct drm_crtc *crtc, in ls7a1000_crtc_init() argument
956 struct lsdc_crtc *lcrtc = to_lsdc_crtc(crtc); in ls7a1000_crtc_init()
969 ret = drm_crtc_init_with_planes(ddev, crtc, primary, cursor, in ls7a1000_crtc_init()
971 "LS-CRTC-%d", index); in ls7a1000_crtc_init()
973 drm_err(ddev, "crtc init with planes failed: %d\n", ret); in ls7a1000_crtc_init()
977 drm_crtc_helper_add(crtc, &lsdc_crtc_helper_funcs); in ls7a1000_crtc_init()
979 ret = drm_mode_crtc_set_gamma_size(crtc, 256); in ls7a1000_crtc_init()
983 drm_crtc_enable_color_mgmt(crtc, 0, false, 256); in ls7a1000_crtc_init()
989 struct drm_crtc *crtc, in ls7a2000_crtc_init() argument
995 struct lsdc_crtc *lcrtc = to_lsdc_crtc(crtc); in ls7a2000_crtc_init()
1000 drm_err(ddev, "crtc init with pll failed: %d\n", ret); in ls7a2000_crtc_init()
1008 ret = drm_crtc_init_with_planes(ddev, crtc, primary, cursor, in ls7a2000_crtc_init()
1010 "LS-CRTC-%u", index); in ls7a2000_crtc_init()
1012 drm_err(ddev, "crtc init with planes failed: %d\n", ret); in ls7a2000_crtc_init()
1016 drm_crtc_helper_add(crtc, &lsdc_crtc_helper_funcs); in ls7a2000_crtc_init()
1018 ret = drm_mode_crtc_set_gamma_size(crtc, 256); in ls7a2000_crtc_init()
1022 drm_crtc_enable_color_mgmt(crtc, 0, false, 256); in ls7a2000_crtc_init()