• Jyri Sarha's avatar
    drm/tilcdc: Set framebuffer DMA address to HW only if CRTC is enabled · 11abbc9f
    Jyri Sarha authored
    Touching HW while clocks are off is a serious error and for instance
    breaks suspend functionality. After this patch tilcdc_crtc_update_fb()
    always updates the primary plane's framebuffer pointer, increases fb's
    reference count and stores vblank event. tilcdc_crtc_update_fb() only
    writes the fb's DMA address to HW if the crtc is enabled, as
    tilcdc_crtc_enable() takes care of writing the address on enable.
    
    This patch also refactors the tilcdc_crtc_update_fb() a bit. Number of
    subsequent small changes had made it almost unreadable. There should
    be no other functional changes but checking the CRTC's enable
    state. However, the locking goes a bit differently and some of the
    redundant checks have been removed in this new version.
    
    The enable_lock should be enough to protect the access to
    tilcdc_crtc->enabled. The irq_lock protects the access to last_vblank
    and next_fb. The check for vrefresh and last_vblank being valid is
    redundant, as the vrefresh should be always valid if the CRTC is
    enabled and now last_vblank should be too, because it is initialized
    to current time when CRTC raster is enabled. If for some reason the
    values are not correctly initialized the division by zero warning is
    quite appropriate.
    Signed-off-by: default avatarJyri Sarha <jsarha@ti.com>
    Reviewed-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
    11abbc9f
tilcdc_crtc.c 28 KB