[Intel-gfx] [PATCH v2 03/17] drm: Nuke mode->vrefresh
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Fri Apr 3 20:58:34 UTC 2020
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 at 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 at samsung.com>
> Cc: Neil Armstrong <narmstrong at baylibre.com>
> Cc: Laurent Pinchart <Laurent.pinchart at ideasonboard.com>
> Cc: Jonas Karlman <jonas at kwiboo.se>
> Cc: Jernej Skrabec <jernej.skrabec at siol.net>
> Cc: Inki Dae <inki.dae at samsung.com>
> Cc: Joonyoung Shim <jy0922.shim at samsung.com>
> Cc: Seung-Woo Kim <sw0312.kim at samsung.com>
> Cc: Kyungmin Park <kyungmin.park at samsung.com>
> Cc: Linus Walleij <linus.walleij at linaro.org>
> Cc: CK Hu <ck.hu at mediatek.com>
> Cc: Philipp Zabel <p.zabel at pengutronix.de>
> Cc: Ben Skeggs <bskeggs at redhat.com>
> Cc: Thierry Reding <thierry.reding at gmail.com>
> Cc: Sam Ravnborg <sam at ravnborg.org>
> Cc: Jerry Han <hanxu5 at huaqin.corp-partner.google.com>
> Cc: Icenowy Zheng <icenowy at aosc.io>
> Cc: Jagan Teki <jagan at amarulasolutions.com>
> Cc: Stefan Mavrodiev <stefan at olimex.com>
> Cc: Robert Chiras <robert.chiras at nxp.com>
> Cc: "Guido Günther" <agx at sigxcpu.org>
> Cc: Purism Kernel Team <kernel at puri.sm>
> Cc: Benjamin Gaignard <benjamin.gaignard at linaro.org>
> Cc: Vincent Abriou <vincent.abriou at st.com>
> Cc: VMware Graphics <linux-graphics-maintainer at vmware.com>
> Cc: Thomas Hellstrom <thellstrom at vmware.com>
> Cc: linux-amlogic at lists.infradead.org
> Cc: nouveau at lists.freedesktop.org
> Reviewed-by: Emil Velikov <emil.velikov at collabora.com>
> Reviewed-by: Sam Ravnborg <sam at ravnborg.org>
> Acked-by: Linus Walleij <linus.walleij at linaro.org>
> Signed-off-by: Ville Syrjälä <ville.syrjala at 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 at 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
More information about the Intel-gfx
mailing list