Patch "drm/tilcdc: Precalculate total frametime in tilcdc_crtc_set_mode()" has been added to the 4.14-stable tree
Subsystems (4)
This is a note to let you know that I've just added the patch titled
drm/tilcdc: Precalculate total frametime in tilcdc_crtc_set_mode()
to the 4.14-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
drm-tilcdc-precalculate-total-frametime-in-tilcdc_crtc_set_mode.patch
and it can be found in the queue-4.14 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
ce99f7206c9105851d97202ed08c058af6f11ac4Mon Sep 17 00:00:00 2001
From: Jyri Sarha <[email protected]>
Date: Thu, 12 Oct 2017 12:19:46 +0300
Subject: drm/tilcdc: Precalculate total frametime in tilcdc_crtc_set_mode()
From: Jyri Sarha <[email protected]>
commit ce99f7206c9105851d97202ed08c058af6f11ac4 upstream.
We need the total frame refresh time to check if we are too close to vertical sync when updating the two framebuffer DMA registers and risk a collision. This new method is more accurate that the previous that based on mode's vrefresh value, which itself is inaccurate or may not even be initialized.
--- drivers/gpu/drm/tilcdc/tilcdc_crtc.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-)
drivers/gpu/drm/tilcdc/tilcdc_crtc.c +12 -1
@@ -24,6 +24,7 @@#include <linux/completion.h> #include <linux/dma-mapping.h> #include <linux/of_graph.h> +#include <linux/math64.h> #include "tilcdc_drv.h" #include "tilcdc_regs.h"
@@ -48,6 +49,7 @@ struct tilcdc_crtc {unsigned int lcd_fck_rate;ktime_t last_vblank; +unsigned int hvtotal_us;struct drm_framebuffer *curr_fb;struct drm_framebuffer *next_fb;
@@ -292,6 +294,12 @@ static void tilcdc_crtc_set_clk(struct d LCDC_V2_CORE_CLK_EN); } +uint tilcdc_mode_hvtotal (const struct drm_display_mode *mode) +{ +return (uint )div_u64 (1000llu * mode->htotal * mode->vtotal, + mode->clock); +} +static void tilcdc_crtc_set_mode (struct drm_crtc *crtc) {struct tilcdc_crtc *tilcdc_crtc =to_tilcdc_crtc (crtc);
@@ -459,6 +467,9 @@ static void tilcdc_crtc_set_mode(structdrm_framebuffer_reference (fb); crtc->hwmode = crtc->state->adjusted_mode; + + tilcdc_crtc->hvtotal_us = +tilcdc_mode_hvtotal (&crtc->hwmode); }static void tilcdc_crtc_enable (struct drm_crtc *crtc)
@@ -648,7 +659,7 @@ int tilcdc_crtc_update_fb(struct drm_crtspin_lock_irqsave (&tilcdc_crtc->irq_lock, flags); next_vblank =ktime_add_us (tilcdc_crtc->last_vblank, -1000000 / crtc->hwmode.vrefresh); + tilcdc_crtc->hvtotal_us); tdiff =ktime_to_us (ktime_sub (next_vblank,ktime_get ()));if (tdiff <TILCDC_VBLANK_SAFETY_THRESHOLD_US )
Patches currently in stable-queue which might be from [email protected] are
queue-4.14/drm-tilcdc-precalculate-total-frametime-in-tilcdc_crtc_set_mode.patch