All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jose Abreu <Jose.Abreu@synopsys.com>
To: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org
Cc: "Jose Abreu" <Jose.Abreu@synopsys.com>,
	"Carlos Palminha" <CARLOS.PALMINHA@synopsys.com>,
	"Alexey Brodkin" <Alexey.Brodkin@synopsys.com>,
	"Ville Syrjälä" <ville.syrjala@linux.intel.com>,
	"Daniel Vetter" <daniel.vetter@ffwll.ch>,
	"Dave Airlie" <airlied@linux.ie>,
	"Andrzej Hajda" <a.hajda@samsung.com>,
	"Archit Taneja" <architt@codeaurora.org>
Subject: [PATCH v2 1/8] drm: Add crtc/encoder/bridge->mode_valid() callbacks
Date: Tue,  9 May 2017 18:00:08 +0100	[thread overview]
Message-ID: <0187832f758eb489258212b0ec917d5013366fe5.1494347165.git.joabreu@synopsys.com> (raw)
In-Reply-To: <cover.1494347164.git.joabreu@synopsys.com>
In-Reply-To: <cover.1494347164.git.joabreu@synopsys.com>

This adds a new callback to crtc, encoder and bridge helper functions
called mode_valid(). This callback shall be implemented if the
corresponding component has some sort of restriction in the modes
that can be displayed. A NULL callback implicates that the component
can display all the modes.

We also change the description of connector->mode_valid() callback
so that it matches the existing behaviour: It is never called in
atomic check phase.

Only the callbacks were implemented to simplify review process,
following patches will make use of them.

Signed-off-by: Jose Abreu <joabreu@synopsys.com>
Cc: Carlos Palminha <palminha@synopsys.com>
Cc: Alexey Brodkin <abrodkin@synopsys.com>
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
Cc: Dave Airlie <airlied@linux.ie>
Cc: Andrzej Hajda <a.hajda@samsung.com>
Cc: Archit Taneja <architt@codeaurora.org>
---

Changes v1->v2:
	- Change description of connector->mode_valid() (Daniel)

 include/drm/drm_bridge.h                 | 20 ++++++++++++++
 include/drm/drm_modeset_helper_vtables.h | 45 ++++++++++++++++++++++++++++++++
 2 files changed, 65 insertions(+)

diff --git a/include/drm/drm_bridge.h b/include/drm/drm_bridge.h
index fdd82fc..00c6c36 100644
--- a/include/drm/drm_bridge.h
+++ b/include/drm/drm_bridge.h
@@ -59,6 +59,26 @@ struct drm_bridge_funcs {
 	void (*detach)(struct drm_bridge *bridge);
 
 	/**
+	 * @mode_valid:
+	 *
+	 * This callback is used to check if a specific mode is valid in this
+	 * bridge. This should be implemented if the bridge has some sort of
+	 * restriction in the modes it can display. For example, a given bridge
+	 * may be responsible to set a clock value. If the clock can not
+	 * produce all the values for the available modes then this callback
+	 * can be used to restrict the number of modes to only the ones that
+	 * can be displayed.
+	 *
+	 * This is called at mode probe and at atomic check phase.
+	 *
+	 * RETURNS:
+	 *
+	 * drm_mode_status Enum
+	 */
+	enum drm_mode_status (*mode_valid)(struct drm_bridge *crtc,
+					   const struct drm_display_mode *mode);
+
+	/**
 	 * @mode_fixup:
 	 *
 	 * This callback is used to validate and adjust a mode. The paramater
diff --git a/include/drm/drm_modeset_helper_vtables.h b/include/drm/drm_modeset_helper_vtables.h
index c01c328..eec2c70 100644
--- a/include/drm/drm_modeset_helper_vtables.h
+++ b/include/drm/drm_modeset_helper_vtables.h
@@ -106,6 +106,26 @@ struct drm_crtc_helper_funcs {
 	void (*commit)(struct drm_crtc *crtc);
 
 	/**
+	 * @mode_valid:
+	 *
+	 * This callback is used to check if a specific mode is valid in this
+	 * crtc. This should be implemented if the crtc has some sort of
+	 * restriction in the modes it can display. For example, a given crtc
+	 * may be responsible to set a clock value. If the clock can not
+	 * produce all the values for the available modes then this callback
+	 * can be used to restrict the number of modes to only the ones that
+	 * can be displayed.
+	 *
+	 * This is called at mode probe and at atomic check phase.
+	 *
+	 * RETURNS:
+	 *
+	 * drm_mode_status Enum
+	 */
+	enum drm_mode_status (*mode_valid)(struct drm_crtc *crtc,
+					   const struct drm_display_mode *mode);
+
+	/**
 	 * @mode_fixup:
 	 *
 	 * This callback is used to validate a mode. The parameter mode is the
@@ -457,6 +477,26 @@ struct drm_encoder_helper_funcs {
 	void (*dpms)(struct drm_encoder *encoder, int mode);
 
 	/**
+	 * @mode_valid:
+	 *
+	 * This callback is used to check if a specific mode is valid in this
+	 * encoder. This should be implemented if the encoder has some sort
+	 * of restriction in the modes it can display. For example, a given
+	 * encoder may be responsible to set a clock value. If the clock can
+	 * not produce all the values for the available modes then this callback
+	 * can be used to restrict the number of modes to only the ones that
+	 * can be displayed.
+	 *
+	 * This is called at mode probe and at atomic check phase.
+	 *
+	 * RETURNS:
+	 *
+	 * drm_mode_status Enum
+	 */
+	enum drm_mode_status (*mode_valid)(struct drm_encoder *crtc,
+					   const struct drm_display_mode *mode);
+
+	/**
 	 * @mode_fixup:
 	 *
 	 * This callback is used to validate and adjust a mode. The parameter
@@ -795,6 +835,11 @@ struct drm_connector_helper_funcs {
 	 * (which is usually derived from the EDID data block from the sink).
 	 * See e.g. drm_helper_probe_single_connector_modes().
 	 *
+	 * This callback is never called in atomic check phase so that userspace
+	 * can override kernel sink checks in case of broken EDID with wrong
+	 * limits from the sink. You can use the remaining mode_valid()
+	 * callbacks to validate the mode against your video path.
+	 *
 	 * NOTE:
 	 *
 	 * This only filters the mode list supplied to userspace in the
-- 
1.9.1

  reply	other threads:[~2017-05-09 17:00 UTC|newest]

Thread overview: 64+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-05-09 17:00 [PATCH v2 0/8] Introduce new mode validation callbacks Jose Abreu
2017-05-09 17:00 ` Jose Abreu [this message]
2017-05-10  8:03   ` [PATCH v2 1/8] drm: Add crtc/encoder/bridge->mode_valid() callbacks Daniel Vetter
2017-05-10  8:03     ` Daniel Vetter
2017-05-10  9:05     ` Jose Abreu
2017-05-12  8:24     ` Laurent Pinchart
2017-05-12  8:24       ` Laurent Pinchart
2017-05-15  6:46       ` Daniel Vetter
2017-05-15  6:46         ` Daniel Vetter
2017-05-09 17:00 ` [PATCH v2 2/8] drm: Add drm_crtc_mode_valid() Jose Abreu
2017-05-10  7:59   ` Daniel Vetter
2017-05-10  7:59     ` Daniel Vetter
2017-05-10  8:57     ` Jose Abreu
2017-05-10 15:12       ` Daniel Vetter
2017-05-10 15:12         ` Daniel Vetter
2017-05-09 17:00 ` [PATCH v2 3/8] drm: Add drm_encoder_mode_valid() Jose Abreu
2017-05-09 17:00 ` [PATCH v2 4/8] drm: Add drm_connector_mode_valid() Jose Abreu
2017-05-09 17:00 ` [PATCH v2 5/8] drm: Use new mode_valid() helpers in connector probe helper Jose Abreu
2017-05-10  8:01   ` Daniel Vetter
2017-05-10  8:01     ` Daniel Vetter
2017-05-10  8:59     ` Jose Abreu
2017-05-12  9:35   ` Laurent Pinchart
2017-05-12  9:35     ` Laurent Pinchart
2017-05-12 16:06     ` Jose Abreu
2017-05-12 16:06       ` Jose Abreu
2017-05-14 11:04       ` Laurent Pinchart
2017-05-14 11:04         ` Laurent Pinchart
2017-05-15  6:47         ` Daniel Vetter
2017-05-15  6:47           ` Daniel Vetter
2017-05-15  7:05           ` Laurent Pinchart
2017-05-15  7:05             ` Laurent Pinchart
2017-05-16  5:11             ` Jose Abreu
2017-05-16  5:11               ` Jose Abreu
2017-05-09 17:00 ` [PATCH v2 6/8] drm: Introduce drm_bridge_mode_valid() Jose Abreu
2017-05-10 13:41   ` Ville Syrjälä
2017-05-10 13:41     ` Ville Syrjälä
2017-05-10 14:01     ` Jose Abreu
2017-05-10 14:01       ` Jose Abreu
2017-05-10 14:07       ` Jose Abreu
2017-05-10 14:07         ` Jose Abreu
2017-05-10 15:14     ` Daniel Vetter
2017-05-10 15:14       ` Daniel Vetter
2017-05-12  9:38       ` Laurent Pinchart
2017-05-12  9:38         ` Laurent Pinchart
2017-05-12 10:50         ` Archit Taneja
2017-05-12 10:50           ` Archit Taneja
2017-05-12 11:01           ` Laurent Pinchart
2017-05-12 11:01             ` Laurent Pinchart
2017-05-15  4:18             ` Archit Taneja
2017-05-15  4:18               ` Archit Taneja
2017-05-15  6:49             ` Daniel Vetter
2017-05-15  6:49               ` Daniel Vetter
2017-05-09 17:00 ` [PATCH v2 7/8] drm: Use mode_valid() in atomic modeset Jose Abreu
2017-05-10 16:08   ` Archit Taneja
2017-05-10 16:08     ` Archit Taneja
2017-05-10 17:55     ` Daniel Vetter
2017-05-10 17:55       ` Daniel Vetter
2017-05-12  9:53       ` Laurent Pinchart
2017-05-12  9:53         ` Laurent Pinchart
2017-05-15  6:50         ` Daniel Vetter
2017-05-09 17:00 ` [PATCH v2 8/8] drm: arc: Use crtc->mode_valid() callback Jose Abreu
2017-05-12  9:57   ` Laurent Pinchart
2017-05-15  1:40     ` Jose Abreu
2017-05-15  1:40       ` Jose Abreu

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=0187832f758eb489258212b0ec917d5013366fe5.1494347165.git.joabreu@synopsys.com \
    --to=jose.abreu@synopsys.com \
    --cc=Alexey.Brodkin@synopsys.com \
    --cc=CARLOS.PALMINHA@synopsys.com \
    --cc=a.hajda@samsung.com \
    --cc=airlied@linux.ie \
    --cc=architt@codeaurora.org \
    --cc=daniel.vetter@ffwll.ch \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=ville.syrjala@linux.intel.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.