Intel-GFX Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: Ville Syrjala <ville.syrjala@linux.intel.com>
Cc: "Neil Armstrong" <narmstrong@baylibre.com>,
	nouveau@lists.freedesktop.org, "Guido Günther" <agx@sigxcpu.org>,
	dri-devel@lists.freedesktop.org,
	"Andrzej Hajda" <a.hajda@samsung.com>,
	"Benjamin Gaignard" <benjamin.gaignard@linaro.org>,
	"Sam Ravnborg" <sam@ravnborg.org>,
	"Emil Velikov" <emil.velikov@collabora.com>,
	"Thomas Hellstrom" <thellstrom@vmware.com>,
	"Joonyoung Shim" <jy0922.shim@samsung.com>,
	"Stefan Mavrodiev" <stefan@olimex.com>,
	"Jerry Han" <hanxu5@huaqin.corp-partner.google.com>,
	"VMware Graphics" <linux-graphics-maintainer@vmware.com>,
	"Jagan Teki" <jagan@amarulasolutions.com>,
	"Robert Chiras" <robert.chiras@nxp.com>,
	"Linus Walleij" <linus.walleij@linaro.org>,
	"Ben Skeggs" <bskeggs@redhat.com>,
	"Jonas Karlman" <jonas@kwiboo.se>,
	intel-gfx@lists.freedesktop.org,
	"Inki Dae" <inki.dae@samsung.com>, "CK Hu" <ck.hu@mediatek.com>,
	linux-amlogic@lists.infradead.org,
	"Vincent Abriou" <vincent.abriou@st.com>,
	"Jernej Skrabec" <jernej.skrabec@siol.net>,
	"Purism Kernel Team" <kernel@puri.sm>,
	"Seung-Woo Kim" <sw0312.kim@samsung.com>,
	"Kyungmin Park" <kyungmin.park@samsung.com>,
	"Philipp Zabel" <p.zabel@pengutronix.de>,
	"Icenowy Zheng" <icenowy@aosc.io>
Subject: Re: [Intel-gfx] [PATCH v2 03/17] drm: Nuke mode->vrefresh
Date: Fri, 3 Apr 2020 23:58:34 +0300	[thread overview]
Message-ID: <20200403205455.GD20301@pendragon.ideasonboard.com> (raw)
In-Reply-To: <20200403204008.14864-4-ville.syrjala@linux.intel.com>

Hi Ville,

Thank you for the patch.

On Fri, Apr 03, 2020 at 11:39:54PM +0300, Ville Syrjala wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> 
> Get rid of mode->vrefresh and just calculate it on demand. Saves
> a bit of space and avoids the cached value getting out of sync
> with reality.
> 
> Mostly done with cocci, with the following manual fixups:
> - Remove the now empty loop in drm_helper_probe_single_connector_modes()
> - Fix __MODE() macro in ch7006_mode.c
> - Fix DRM_MODE_ARG() macro in drm_modes.h
> - Remove leftover comment from samsung_s6d16d0_mode
> - Drop the TODO
> 
> @@
> @@
> struct drm_display_mode {
> 	...
> -	int vrefresh;
> 	...
> };
> 
> @@
> identifier N;
> expression E;
> @@
> struct drm_display_mode N = {
> -	.vrefresh = E
> };
> 
> @@
> identifier N;
> expression E;
> @@
> struct drm_display_mode N[...] = {
> ...,
> {
> -	.vrefresh = E
> }
> ,...
> };
> 
> @@
> expression E;
> @@
> {
> 	DRM_MODE(...),
> -	.vrefresh = E,
> }
> 
> @@
> identifier M, R;
> @@
> int drm_mode_vrefresh(const struct drm_display_mode *M)
> {
>   ...
> - if (M->vrefresh > 0)
> - 	R = M->vrefresh;
> - else
>   if (...) {
>   ...
>   }
>   ...
> }
> 
> @@
> struct drm_display_mode *p;
> expression E;
> @@
> (
> - p->vrefresh = E;
> |
> - p->vrefresh
> + drm_mode_vrefresh(p)
> )
> 
> @@
> struct drm_display_mode s;
> expression E;
> @@
> (
> - s.vrefresh = E;
> |
> - s.vrefresh
> + drm_mode_vrefresh(&s)
> )
> 
> @@
> expression E;
> @@
> - drm_mode_vrefresh(E) ? drm_mode_vrefresh(E) : drm_mode_vrefresh(E)
> + drm_mode_vrefresh(E)
> 
> @find_substruct@
> identifier X;
> identifier S;
> @@
> struct X {
> ...
> 	struct drm_display_mode S;
> ...
> };
> 
> @@
> identifier find_substruct.S;
> expression E;
> identifier I;
> @@
> {
> .S = {
> -	.vrefresh = E
> }
> }
> 
> @@
> identifier find_substruct.S;
> identifier find_substruct.X;
> expression E;
> identifier I;
> @@
> struct X I[...] = {
> ...,
> .S = {
> -	.vrefresh = E
> }
> ,...
> };
> 
> v2: Drop TODO
> 
> Cc: Andrzej Hajda <a.hajda@samsung.com>
> Cc: Neil Armstrong <narmstrong@baylibre.com>
> Cc: Laurent Pinchart <Laurent.pinchart@ideasonboard.com>
> Cc: Jonas Karlman <jonas@kwiboo.se>
> Cc: Jernej Skrabec <jernej.skrabec@siol.net>
> Cc: Inki Dae <inki.dae@samsung.com>
> Cc: Joonyoung Shim <jy0922.shim@samsung.com>
> Cc: Seung-Woo Kim <sw0312.kim@samsung.com>
> Cc: Kyungmin Park <kyungmin.park@samsung.com>
> Cc: Linus Walleij <linus.walleij@linaro.org>
> Cc: CK Hu <ck.hu@mediatek.com>
> Cc: Philipp Zabel <p.zabel@pengutronix.de>
> Cc: Ben Skeggs <bskeggs@redhat.com>
> Cc: Thierry Reding <thierry.reding@gmail.com>
> Cc: Sam Ravnborg <sam@ravnborg.org>
> Cc: Jerry Han <hanxu5@huaqin.corp-partner.google.com>
> Cc: Icenowy Zheng <icenowy@aosc.io>
> Cc: Jagan Teki <jagan@amarulasolutions.com>
> Cc: Stefan Mavrodiev <stefan@olimex.com>
> Cc: Robert Chiras <robert.chiras@nxp.com>
> Cc: "Guido Günther" <agx@sigxcpu.org>
> Cc: Purism Kernel Team <kernel@puri.sm>
> Cc: Benjamin Gaignard <benjamin.gaignard@linaro.org>
> Cc: Vincent Abriou <vincent.abriou@st.com>
> Cc: VMware Graphics <linux-graphics-maintainer@vmware.com>
> Cc: Thomas Hellstrom <thellstrom@vmware.com>
> Cc: linux-amlogic@lists.infradead.org
> Cc: nouveau@lists.freedesktop.org
> Reviewed-by: Emil Velikov <emil.velikov@collabora.com>
> Reviewed-by: Sam Ravnborg <sam@ravnborg.org>
> Acked-by: Linus Walleij <linus.walleij@linaro.org>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
>  Documentation/gpu/todo.rst                    |  20 --
>  drivers/gpu/drm/bridge/sii902x.c              |   2 +-
>  drivers/gpu/drm/drm_client_modeset.c          |   2 +-
>  drivers/gpu/drm/drm_edid.c                    | 328 +++++++++---------
>  drivers/gpu/drm/drm_modes.c                   |   9 +-
>  drivers/gpu/drm/drm_probe_helper.c            |   3 -
>  drivers/gpu/drm/exynos/exynos_hdmi.c          |   5 +-
>  drivers/gpu/drm/exynos/exynos_mixer.c         |   2 +-
>  drivers/gpu/drm/i2c/ch7006_mode.c             |   1 -
>  drivers/gpu/drm/i915/display/intel_display.c  |   1 -
>  .../drm/i915/display/intel_display_debugfs.c  |   4 +-
>  drivers/gpu/drm/i915/display/intel_dp.c       |  10 +-
>  drivers/gpu/drm/i915/display/intel_tv.c       |   3 -
>  drivers/gpu/drm/mcde/mcde_dsi.c               |   6 +-
>  drivers/gpu/drm/mediatek/mtk_drm_crtc.c       |   4 +-
>  drivers/gpu/drm/mediatek/mtk_hdmi.c           |   2 +-
>  drivers/gpu/drm/meson/meson_venc_cvbs.c       |   2 -
>  drivers/gpu/drm/nouveau/nouveau_connector.c   |   5 +-
>  drivers/gpu/drm/panel/panel-arm-versatile.c   |   4 -
>  drivers/gpu/drm/panel/panel-boe-himax8279d.c  |   3 +-
>  .../gpu/drm/panel/panel-boe-tv101wum-nl6.c    |   6 +-
>  drivers/gpu/drm/panel/panel-elida-kd35t133.c  |   3 +-
>  .../gpu/drm/panel/panel-feixin-k101-im2ba02.c |   3 +-
>  .../drm/panel/panel-feiyang-fy07024di26a30d.c |   3 +-
>  drivers/gpu/drm/panel/panel-ilitek-ili9322.c  |   7 -
>  drivers/gpu/drm/panel/panel-ilitek-ili9881c.c |   3 +-
>  drivers/gpu/drm/panel/panel-innolux-p079zca.c |   4 +-
>  .../gpu/drm/panel/panel-jdi-lt070me05000.c    |   3 +-
>  .../drm/panel/panel-kingdisplay-kd097d04.c    |   3 +-
>  .../drm/panel/panel-leadtek-ltk500hd1829.c    |   3 +-
>  drivers/gpu/drm/panel/panel-lg-lb035q02.c     |   1 -
>  drivers/gpu/drm/panel/panel-lg-lg4573.c       |   3 +-
>  drivers/gpu/drm/panel/panel-nec-nl8048hl11.c  |   1 -
>  drivers/gpu/drm/panel/panel-novatek-nt35510.c |   1 -
>  drivers/gpu/drm/panel/panel-novatek-nt39016.c |   1 -
>  .../drm/panel/panel-olimex-lcd-olinuxino.c    |   1 -
>  .../gpu/drm/panel/panel-orisetech-otm8009a.c  |   3 +-
>  .../drm/panel/panel-osd-osd101t2587-53ts.c    |   3 +-
>  .../drm/panel/panel-panasonic-vvx10f034n00.c  |   3 +-
>  .../drm/panel/panel-raspberrypi-touchscreen.c |   4 +-
>  drivers/gpu/drm/panel/panel-raydium-rm67191.c |   3 +-
>  drivers/gpu/drm/panel/panel-raydium-rm68200.c |   3 +-
>  .../drm/panel/panel-rocktech-jh057n00900.c    |   5 +-
>  drivers/gpu/drm/panel/panel-ronbo-rb070d30.c  |   1 -
>  drivers/gpu/drm/panel/panel-samsung-s6d16d0.c |   6 -
>  drivers/gpu/drm/panel/panel-samsung-s6e3ha2.c |   4 +-
>  .../gpu/drm/panel/panel-samsung-s6e63j0x03.c  |   3 +-
>  drivers/gpu/drm/panel/panel-samsung-s6e63m0.c |   3 +-
>  .../panel/panel-samsung-s6e88a0-ams452ef01.c  |   1 -
>  drivers/gpu/drm/panel/panel-seiko-43wvf1g.c   |   3 +-
>  .../gpu/drm/panel/panel-sharp-lq101r1sx01.c   |   3 +-
>  .../gpu/drm/panel/panel-sharp-ls037v7dw01.c   |   1 -
>  .../gpu/drm/panel/panel-sharp-ls043t1le01.c   |   3 +-
>  drivers/gpu/drm/panel/panel-simple.c          |  87 +----
>  drivers/gpu/drm/panel/panel-sitronix-st7701.c |   2 +-
>  .../gpu/drm/panel/panel-sitronix-st7789v.c    |   3 +-
>  drivers/gpu/drm/panel/panel-sony-acx424akp.c  |   2 -
>  drivers/gpu/drm/panel/panel-sony-acx565akm.c  |   1 -
>  drivers/gpu/drm/panel/panel-tpo-td028ttec1.c  |   1 -
>  drivers/gpu/drm/panel/panel-tpo-td043mtea1.c  |   1 -
>  drivers/gpu/drm/panel/panel-tpo-tpg110.c      |   5 -
>  drivers/gpu/drm/panel/panel-truly-nt35597.c   |   1 -
>  .../gpu/drm/panel/panel-xinpeng-xpp055c272.c  |   3 +-
>  drivers/gpu/drm/sti/sti_hda.c                 |   1 -
>  drivers/gpu/drm/vmwgfx/vmwgfx_kms.c           |   2 -
>  include/drm/drm_modes.h                       |  12 +-
>  66 files changed, 218 insertions(+), 417 deletions(-)

[snip]

> diff --git a/drivers/gpu/drm/mcde/mcde_dsi.c b/drivers/gpu/drm/mcde/mcde_dsi.c
> index 7af5ebb0c436..52031d826f2c 100644
> --- a/drivers/gpu/drm/mcde/mcde_dsi.c
> +++ b/drivers/gpu/drm/mcde/mcde_dsi.c
> @@ -538,7 +538,7 @@ static void mcde_dsi_setup_video_mode(struct mcde_dsi *d,
>  	 */
>  	/* (ps/s) / (pixels/s) = ps/pixels */
>  	pclk = DIV_ROUND_UP_ULL(1000000000000,
> -				(mode->vrefresh * mode->htotal * mode->vtotal));
> +				(drm_mode_vrefresh(mode) * mode->htotal * mode->vtotal));

Shouldn't you just use the pixel clock here ?

Update: There's a patch further in this series that handles this, great
:-)

>  	dev_dbg(d->dev, "picoseconds between two pixels: %llu\n",
>  		pclk);
>  

[snip]

> diff --git a/drivers/gpu/drm/nouveau/nouveau_connector.c b/drivers/gpu/drm/nouveau/nouveau_connector.c
> index 9a9a7f5003d3..ac80b1ac459c 100644
> --- a/drivers/gpu/drm/nouveau/nouveau_connector.c
> +++ b/drivers/gpu/drm/nouveau/nouveau_connector.c
> @@ -59,7 +59,6 @@ nouveau_conn_native_mode(struct drm_connector *connector)
>  	int high_w = 0, high_h = 0, high_v = 0;
>  
>  	list_for_each_entry(mode, &connector->probed_modes, head) {
> -		mode->vrefresh = drm_mode_vrefresh(mode);
>  		if (helper->mode_valid(connector, mode) != MODE_OK ||
>  		    (mode->flags & DRM_MODE_FLAG_INTERLACE))
>  			continue;
> @@ -80,12 +79,12 @@ nouveau_conn_native_mode(struct drm_connector *connector)
>  			continue;
>  
>  		if (mode->hdisplay == high_w && mode->vdisplay == high_h &&
> -		    mode->vrefresh < high_v)
> +		    drm_mode_vrefresh(mode) < high_v)

Here too, should the logic be modified to use the clock ?

This can be addressed in a separate patch, so for this,

Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>

>  			continue;
>  
>  		high_w = mode->hdisplay;
>  		high_h = mode->vdisplay;
> -		high_v = mode->vrefresh;
> +		high_v = drm_mode_vrefresh(mode);
>  		largest = mode;
>  	}
> 

-- 
Regards,

Laurent Pinchart
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

  reply	other threads:[~2020-04-03 20:58 UTC|newest]

Thread overview: 52+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-04-03 20:39 [Intel-gfx] [PATCH v2 00/17] drm: Put drm_display_mode on diet Ville Syrjala
2020-04-03 20:39 ` [Intel-gfx] [PATCH v2 01/17] drm: Nuke mode->hsync Ville Syrjala
2020-04-07 18:30   ` Sam Ravnborg
2020-04-03 20:39 ` [Intel-gfx] [PATCH v2 02/17] drm/i915: Introduce some local intel_dp variables Ville Syrjala
2020-04-03 20:39 ` [Intel-gfx] [PATCH v2 03/17] drm: Nuke mode->vrefresh Ville Syrjala
2020-04-03 20:58   ` Laurent Pinchart [this message]
2020-04-04  2:01   ` abhinavk
2020-04-06  8:32     ` Jani Nikula
2020-04-07  1:23       ` abhinavk
2020-04-03 20:39 ` [Intel-gfx] [PATCH v2 04/17] drm/msm/dpu: Stop copying around mode->private_flags Ville Syrjala
2020-04-03 20:39 ` [Intel-gfx] [PATCH v2 05/17] drm: Shrink {width,height}_mm to u16 Ville Syrjala
2020-04-07 18:37   ` [Intel-gfx] [PATCH v2 05/17] drm: Shrink {width, height}_mm " Sam Ravnborg
2020-04-03 20:39 ` [Intel-gfx] [PATCH v2 06/17] drm: Shrink mode->type to u8 Ville Syrjala
2020-04-07 18:38   ` Sam Ravnborg
2020-04-03 20:39 ` [Intel-gfx] [PATCH v2 07/17] drm: Make mode->flags u32 Ville Syrjala
2020-04-07 18:38   ` Sam Ravnborg
2020-04-03 20:39 ` [Intel-gfx] [PATCH v2 08/17] drm: Shrink drm_display_mode timings Ville Syrjala
2020-04-07 18:43   ` Sam Ravnborg
2020-04-03 20:40 ` [Intel-gfx] [PATCH v2 09/17] drm: Flatten drm_mode_vrefresh() Ville Syrjala
2020-04-07 18:46   ` Sam Ravnborg
2020-04-03 20:40 ` [Intel-gfx] [PATCH v2 10/17] drm: Shrink mode->private_flags Ville Syrjala
2020-04-07 18:52   ` Sam Ravnborg
2020-04-07 19:10     ` Ville Syrjälä
2020-04-03 20:40 ` [Intel-gfx] [PATCH v2 11/17] drm: pahole struct drm_display_mode Ville Syrjala
2020-04-03 20:40 ` [Intel-gfx] [PATCH v2 12/17] drm/mcde: Use mode->clock instead of reverse calculating it from the vrefresh Ville Syrjala
2020-04-07  7:27   ` Daniel Vetter
2020-04-07 18:53   ` Sam Ravnborg
2020-04-12  0:42   ` Linus Walleij
2020-04-03 20:40 ` [Intel-gfx] [PATCH v2 13/17] drm/i915: Stop using mode->private_flags Ville Syrjala
2020-04-07  7:38   ` Daniel Vetter
2020-04-07 15:20     ` Ville Syrjälä
2020-04-08  9:34       ` Jani Nikula
2020-04-03 20:40 ` [Intel-gfx] [PATCH v2 14/17] drm/i915: Replace I915_MODE_FLAG_INHERITED with a boolean Ville Syrjala
2020-04-07  7:42   ` Daniel Vetter
2020-04-03 20:40 ` [Intel-gfx] [PATCH v2 15/17] drm/gma500: Stop using mode->private_flags Ville Syrjala
2020-04-07  7:46   ` Daniel Vetter
2020-04-07 18:56   ` Sam Ravnborg
2020-04-07 19:08     ` Ville Syrjälä
2020-04-07 19:35       ` Sam Ravnborg
2020-04-09 19:49         ` Ville Syrjälä
2020-04-09 19:54           ` Ville Syrjälä
2020-04-09 20:47           ` Sam Ravnborg
2020-04-14 15:11             ` Ville Syrjälä
2020-04-03 20:40 ` [Intel-gfx] [PATCH v2 16/17] drm: Nuke mode->private_flags Ville Syrjala
2020-04-04  1:40   ` abhinavk
2020-04-06  9:11     ` Jani Nikula
2020-04-07  1:26       ` abhinavk
2020-04-07 18:58   ` Sam Ravnborg
2020-04-03 20:40 ` [Intel-gfx] [PATCH v2 17/17] drm: Replace mode->export_head with a boolean Ville Syrjala
2020-04-03 22:04 ` [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for drm: Put drm_display_mode on diet (rev2) Patchwork
2020-04-03 22:29 ` [Intel-gfx] ✗ Fi.CI.BAT: failure " Patchwork
2020-04-24 17:32 ` [Intel-gfx] ✗ Fi.CI.BUILD: failure for drm: Put drm_display_mode on diet (rev3) Patchwork

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200403205455.GD20301@pendragon.ideasonboard.com \
    --to=laurent.pinchart@ideasonboard.com \
    --cc=a.hajda@samsung.com \
    --cc=agx@sigxcpu.org \
    --cc=benjamin.gaignard@linaro.org \
    --cc=bskeggs@redhat.com \
    --cc=ck.hu@mediatek.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=emil.velikov@collabora.com \
    --cc=hanxu5@huaqin.corp-partner.google.com \
    --cc=icenowy@aosc.io \
    --cc=inki.dae@samsung.com \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=jagan@amarulasolutions.com \
    --cc=jernej.skrabec@siol.net \
    --cc=jonas@kwiboo.se \
    --cc=jy0922.shim@samsung.com \
    --cc=kernel@puri.sm \
    --cc=kyungmin.park@samsung.com \
    --cc=linus.walleij@linaro.org \
    --cc=linux-amlogic@lists.infradead.org \
    --cc=linux-graphics-maintainer@vmware.com \
    --cc=narmstrong@baylibre.com \
    --cc=nouveau@lists.freedesktop.org \
    --cc=p.zabel@pengutronix.de \
    --cc=robert.chiras@nxp.com \
    --cc=sam@ravnborg.org \
    --cc=stefan@olimex.com \
    --cc=sw0312.kim@samsung.com \
    --cc=thellstrom@vmware.com \
    --cc=ville.syrjala@linux.intel.com \
    --cc=vincent.abriou@st.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox