From: Pekka Paalanen <ppaalanen@gmail.com>
To: Ville Syrjala <ville.syrjala@linux.intel.com>
Cc: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org
Subject: Re: [RFC][PATCH 2/2] drm/i915: Populate PATH prop for every connector
Date: Thu, 27 Jun 2019 10:37:14 +0300 [thread overview]
Message-ID: <20190627103714.3d74f49b@eldfell.localdomain> (raw)
In-Reply-To: <20190613184335.7970-3-ville.syrjala@linux.intel.com>
[-- Attachment #1.1: Type: text/plain, Size: 14023 bytes --]
On Thu, 13 Jun 2019 21:43:35 +0300
Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Userspace may want stable identifiers for connectors. Let's try to
> provide that via the PATH prop. I tried to make these somewhat abstract
> by using just "port_type:index" type of approach, where we derive the
> index from the physical instance of that hw block, so it should remain
> stable even if we reorder things in the driver.
>
> Cc: Daniel Vetter <daniel@ffwll.ch>
> Cc: Pekka Paalanen <ppaalanen@gmail.com>
> Cc: Ilia Mirkin <imirkin@alum.mit.edu>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Hi,
I don't know intel driver nor hardware, but the described idea and the
names in the code look good to me.
The only open question is if it should be the existing PATH property or
a new property in case PATH for MST is not persistent.
Thanks,
pq
> ---
> drivers/gpu/drm/i915/icl_dsi.c | 3 +++
> drivers/gpu/drm/i915/intel_connector.c | 20 +++++++++++++++
> drivers/gpu/drm/i915/intel_connector.h | 3 +++
> drivers/gpu/drm/i915/intel_crt.c | 2 ++
> drivers/gpu/drm/i915/intel_dp.c | 6 ++++-
> drivers/gpu/drm/i915/intel_dp_mst.c | 3 +--
> drivers/gpu/drm/i915/intel_dvo.c | 3 +++
> drivers/gpu/drm/i915/intel_hdmi.c | 4 +++
> drivers/gpu/drm/i915/intel_lvds.c | 2 ++
> drivers/gpu/drm/i915/intel_sdvo.c | 35 ++++++++++++++++++--------
> drivers/gpu/drm/i915/intel_tv.c | 2 ++
> drivers/gpu/drm/i915/vlv_dsi.c | 3 +++
> 12 files changed, 72 insertions(+), 14 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/icl_dsi.c b/drivers/gpu/drm/i915/icl_dsi.c
> index 74448e6bf749..54ccc69aa60a 100644
> --- a/drivers/gpu/drm/i915/icl_dsi.c
> +++ b/drivers/gpu/drm/i915/icl_dsi.c
> @@ -1544,6 +1544,9 @@ void icl_dsi_init(struct drm_i915_private *dev_priv)
> /* attach connector to encoder */
> intel_connector_attach_encoder(intel_connector, encoder);
>
> + intel_connector_set_path_property(connector, "dsi:%d",
> + port - PORT_A);
> +
> mutex_lock(&dev->mode_config.mutex);
> fixed_mode = intel_panel_vbt_fixed_mode(intel_connector);
> mutex_unlock(&dev->mode_config.mutex);
> diff --git a/drivers/gpu/drm/i915/intel_connector.c b/drivers/gpu/drm/i915/intel_connector.c
> index 073b6c3ab7cc..6c1b027fdb11 100644
> --- a/drivers/gpu/drm/i915/intel_connector.c
> +++ b/drivers/gpu/drm/i915/intel_connector.c
> @@ -280,3 +280,23 @@ intel_attach_colorspace_property(struct drm_connector *connector)
> drm_object_attach_property(&connector->base,
> connector->colorspace_property, 0);
> }
> +
> +int intel_connector_set_path_property(struct drm_connector *connector,
> + const char *fmt, ...)
> +{
> + char path[64];
> + va_list ap;
> + int ret;
> +
> + va_start(ap, fmt);
> + ret = vsnprintf(path, sizeof(path), fmt, ap);
> + va_end(ap);
> +
> + if (WARN_ON(ret >= sizeof(path)))
> + return -EINVAL;
> +
> + drm_object_attach_property(&connector->base,
> + connector->dev->mode_config.path_property, 0);
> +
> + return drm_connector_set_path_property(connector, path);
> +}
> diff --git a/drivers/gpu/drm/i915/intel_connector.h b/drivers/gpu/drm/i915/intel_connector.h
> index 93a7375c8196..108777bc9545 100644
> --- a/drivers/gpu/drm/i915/intel_connector.h
> +++ b/drivers/gpu/drm/i915/intel_connector.h
> @@ -31,5 +31,8 @@ void intel_attach_force_audio_property(struct drm_connector *connector);
> void intel_attach_broadcast_rgb_property(struct drm_connector *connector);
> void intel_attach_aspect_ratio_property(struct drm_connector *connector);
> void intel_attach_colorspace_property(struct drm_connector *connector);
> +__printf(2, 3)
> +int intel_connector_set_path_property(struct drm_connector *connector,
> + const char *fmt, ...);
>
> #endif /* __INTEL_CONNECTOR_H__ */
> diff --git a/drivers/gpu/drm/i915/intel_crt.c b/drivers/gpu/drm/i915/intel_crt.c
> index 3fcf2f84bcce..1383db646986 100644
> --- a/drivers/gpu/drm/i915/intel_crt.c
> +++ b/drivers/gpu/drm/i915/intel_crt.c
> @@ -1048,6 +1048,8 @@ void intel_crt_init(struct drm_i915_private *dev_priv)
> if (!I915_HAS_HOTPLUG(dev_priv))
> intel_connector->polled = DRM_CONNECTOR_POLL_CONNECT;
>
> + intel_connector_set_path_property(connector, "crt:0");
> +
> /*
> * Configure the automatic hotplug detection stuff
> */
> diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
> index 4336df46fe78..c9071d25bd37 100644
> --- a/drivers/gpu/drm/i915/intel_dp.c
> +++ b/drivers/gpu/drm/i915/intel_dp.c
> @@ -6527,7 +6527,11 @@ static void
> intel_dp_add_properties(struct intel_dp *intel_dp, struct drm_connector *connector)
> {
> struct drm_i915_private *dev_priv = to_i915(connector->dev);
> - enum port port = dp_to_dig_port(intel_dp)->base.port;
> + struct intel_encoder *encoder = &dp_to_dig_port(intel_dp)->base;
> + enum port port = encoder->port;
> +
> + intel_connector_set_path_property(connector, "ddi:%d\n",
> + port - PORT_A);
>
> if (!IS_G4X(dev_priv) && port != PORT_A)
> intel_attach_force_audio_property(connector);
> diff --git a/drivers/gpu/drm/i915/intel_dp_mst.c b/drivers/gpu/drm/i915/intel_dp_mst.c
> index 0caf645fbbb8..3bc0de2ff5af 100644
> --- a/drivers/gpu/drm/i915/intel_dp_mst.c
> +++ b/drivers/gpu/drm/i915/intel_dp_mst.c
> @@ -529,10 +529,9 @@ static struct drm_connector *intel_dp_add_mst_connector(struct drm_dp_mst_topolo
> goto err;
> }
>
> - drm_object_attach_property(&connector->base, dev->mode_config.path_property, 0);
> drm_object_attach_property(&connector->base, dev->mode_config.tile_property, 0);
>
> - ret = drm_connector_set_path_property(connector, pathprop);
> + ret = intel_connector_set_path_property(connector, "%s", pathprop);
> if (ret)
> goto err;
>
> diff --git a/drivers/gpu/drm/i915/intel_dvo.c b/drivers/gpu/drm/i915/intel_dvo.c
> index 22666d28f4aa..4e7ea0f4c5d5 100644
> --- a/drivers/gpu/drm/i915/intel_dvo.c
> +++ b/drivers/gpu/drm/i915/intel_dvo.c
> @@ -531,6 +531,9 @@ void intel_dvo_init(struct drm_i915_private *dev_priv)
> connector->interlace_allowed = false;
> connector->doublescan_allowed = false;
>
> + intel_connector_set_path_property(connector, "dvo:%d",
> + port - PORT_A);
> +
> intel_connector_attach_encoder(intel_connector, intel_encoder);
> if (dvo->type == INTEL_DVO_CHIP_LVDS) {
> /*
> diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c
> index 187a2b828b97..38a0e423420a 100644
> --- a/drivers/gpu/drm/i915/intel_hdmi.c
> +++ b/drivers/gpu/drm/i915/intel_hdmi.c
> @@ -2794,6 +2794,10 @@ intel_hdmi_add_properties(struct intel_hdmi *intel_hdmi, struct drm_connector *c
> struct drm_i915_private *dev_priv = to_i915(connector->dev);
> struct intel_digital_port *intel_dig_port =
> hdmi_to_dig_port(intel_hdmi);
> + enum port port = intel_dig_port->base.port;
> +
> + intel_connector_set_path_property(connector, "ddi:%d",
> + port - PORT_A);
>
> intel_attach_force_audio_property(connector);
> intel_attach_broadcast_rgb_property(connector);
> diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c
> index efefed62a7f8..463665f0ecbd 100644
> --- a/drivers/gpu/drm/i915/intel_lvds.c
> +++ b/drivers/gpu/drm/i915/intel_lvds.c
> @@ -915,6 +915,8 @@ void intel_lvds_init(struct drm_i915_private *dev_priv)
>
> lvds_encoder->reg = lvds_reg;
>
> + intel_connector_set_path_property(connector, "lvds:0");
> +
> /* create the scaling mode property */
> allowed_scalers = BIT(DRM_MODE_SCALE_ASPECT);
> allowed_scalers |= BIT(DRM_MODE_SCALE_FULLSCREEN);
> diff --git a/drivers/gpu/drm/i915/intel_sdvo.c b/drivers/gpu/drm/i915/intel_sdvo.c
> index 0860ae36bb87..c16cdde849cc 100644
> --- a/drivers/gpu/drm/i915/intel_sdvo.c
> +++ b/drivers/gpu/drm/i915/intel_sdvo.c
> @@ -2650,9 +2650,8 @@ static struct intel_sdvo_connector *intel_sdvo_connector_alloc(void)
> static bool
> intel_sdvo_dvi_init(struct intel_sdvo *intel_sdvo, int device)
> {
> - struct drm_encoder *encoder = &intel_sdvo->base.base;
> + struct intel_encoder *encoder = &intel_sdvo->base;
> struct drm_connector *connector;
> - struct intel_encoder *intel_encoder = to_intel_encoder(encoder);
> struct intel_connector *intel_connector;
> struct intel_sdvo_connector *intel_sdvo_connector;
>
> @@ -2679,12 +2678,12 @@ intel_sdvo_dvi_init(struct intel_sdvo *intel_sdvo, int device)
> * Some SDVO devices have one-shot hotplug interrupts.
> * Ensure that they get re-enabled when an interrupt happens.
> */
> - intel_encoder->hotplug = intel_sdvo_hotplug;
> - intel_sdvo_enable_hotplug(intel_encoder);
> + encoder->hotplug = intel_sdvo_hotplug;
> + intel_sdvo_enable_hotplug(encoder);
> } else {
> intel_connector->polled = DRM_CONNECTOR_POLL_CONNECT | DRM_CONNECTOR_POLL_DISCONNECT;
> }
> - encoder->encoder_type = DRM_MODE_ENCODER_TMDS;
> + encoder->base.encoder_type = DRM_MODE_ENCODER_TMDS;
> connector->connector_type = DRM_MODE_CONNECTOR_DVID;
>
> if (intel_sdvo_is_hdmi_connector(intel_sdvo, device)) {
> @@ -2700,13 +2699,18 @@ intel_sdvo_dvi_init(struct intel_sdvo *intel_sdvo, int device)
> if (intel_sdvo_connector->is_hdmi)
> intel_sdvo_add_hdmi_properties(intel_sdvo, intel_sdvo_connector);
>
> + intel_connector_set_path_property(connector, "sdvo:%d:%s:%d",
> + encoder->port - PORT_A,
> + intel_sdvo_connector->is_hdmi ?
> + "hdmi" : "dvi", device);
> +
> return true;
> }
>
> static bool
> intel_sdvo_tv_init(struct intel_sdvo *intel_sdvo, int type)
> {
> - struct drm_encoder *encoder = &intel_sdvo->base.base;
> + struct intel_encoder *encoder = &intel_sdvo->base;
> struct drm_connector *connector;
> struct intel_connector *intel_connector;
> struct intel_sdvo_connector *intel_sdvo_connector;
> @@ -2719,7 +2723,7 @@ intel_sdvo_tv_init(struct intel_sdvo *intel_sdvo, int type)
>
> intel_connector = &intel_sdvo_connector->base;
> connector = &intel_connector->base;
> - encoder->encoder_type = DRM_MODE_ENCODER_TVDAC;
> + encoder->base.encoder_type = DRM_MODE_ENCODER_TVDAC;
> connector->connector_type = DRM_MODE_CONNECTOR_SVIDEO;
>
> intel_sdvo->controlled_output |= type;
> @@ -2736,6 +2740,9 @@ intel_sdvo_tv_init(struct intel_sdvo *intel_sdvo, int type)
> if (!intel_sdvo_create_enhance_property(intel_sdvo, intel_sdvo_connector))
> goto err;
>
> + intel_connector_set_path_property(connector, "sdvo:%d:tv:%d",
> + encoder->port - PORT_A, type);
> +
> return true;
>
> err:
> @@ -2746,7 +2753,7 @@ intel_sdvo_tv_init(struct intel_sdvo *intel_sdvo, int type)
> static bool
> intel_sdvo_analog_init(struct intel_sdvo *intel_sdvo, int device)
> {
> - struct drm_encoder *encoder = &intel_sdvo->base.base;
> + struct intel_encoder *encoder = &intel_sdvo->base;
> struct drm_connector *connector;
> struct intel_connector *intel_connector;
> struct intel_sdvo_connector *intel_sdvo_connector;
> @@ -2760,7 +2767,7 @@ intel_sdvo_analog_init(struct intel_sdvo *intel_sdvo, int device)
> intel_connector = &intel_sdvo_connector->base;
> connector = &intel_connector->base;
> intel_connector->polled = DRM_CONNECTOR_POLL_CONNECT;
> - encoder->encoder_type = DRM_MODE_ENCODER_DAC;
> + encoder->base.encoder_type = DRM_MODE_ENCODER_DAC;
> connector->connector_type = DRM_MODE_CONNECTOR_VGA;
>
> if (device == 0) {
> @@ -2776,13 +2783,16 @@ intel_sdvo_analog_init(struct intel_sdvo *intel_sdvo, int device)
> return false;
> }
>
> + intel_connector_set_path_property(connector, "sdvo:%d:crt:%d",
> + encoder->port - PORT_A, device);
> +
> return true;
> }
>
> static bool
> intel_sdvo_lvds_init(struct intel_sdvo *intel_sdvo, int device)
> {
> - struct drm_encoder *encoder = &intel_sdvo->base.base;
> + struct intel_encoder *encoder = &intel_sdvo->base;
> struct drm_connector *connector;
> struct intel_connector *intel_connector;
> struct intel_sdvo_connector *intel_sdvo_connector;
> @@ -2796,7 +2806,7 @@ intel_sdvo_lvds_init(struct intel_sdvo *intel_sdvo, int device)
>
> intel_connector = &intel_sdvo_connector->base;
> connector = &intel_connector->base;
> - encoder->encoder_type = DRM_MODE_ENCODER_LVDS;
> + encoder->base.encoder_type = DRM_MODE_ENCODER_LVDS;
> connector->connector_type = DRM_MODE_CONNECTOR_LVDS;
>
> if (device == 0) {
> @@ -2831,6 +2841,9 @@ intel_sdvo_lvds_init(struct intel_sdvo *intel_sdvo, int device)
> if (!intel_connector->panel.fixed_mode)
> goto err;
>
> + intel_connector_set_path_property(connector, "sdvo:%d:lvds:%d",
> + encoder->port - PORT_A, device);
> +
> return true;
>
> err:
> diff --git a/drivers/gpu/drm/i915/intel_tv.c b/drivers/gpu/drm/i915/intel_tv.c
> index 5dc594eafaf2..f9481404f642 100644
> --- a/drivers/gpu/drm/i915/intel_tv.c
> +++ b/drivers/gpu/drm/i915/intel_tv.c
> @@ -1988,4 +1988,6 @@ intel_tv_init(struct drm_i915_private *dev_priv)
> drm_object_attach_property(&connector->base,
> dev->mode_config.tv_bottom_margin_property,
> state->tv.margins.bottom);
> +
> + intel_connector_set_path_property(connector, "tv:0");
> }
> diff --git a/drivers/gpu/drm/i915/vlv_dsi.c b/drivers/gpu/drm/i915/vlv_dsi.c
> index e272d826210a..e97e689c6021 100644
> --- a/drivers/gpu/drm/i915/vlv_dsi.c
> +++ b/drivers/gpu/drm/i915/vlv_dsi.c
> @@ -1985,6 +1985,9 @@ void vlv_dsi_init(struct drm_i915_private *dev_priv)
>
> intel_dsi_add_properties(intel_connector);
>
> + intel_connector_set_path_property(connector, "dsi:%d",
> + port - PORT_A);
> +
> return;
>
> err_cleanup_connector:
[-- Attachment #1.2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
[-- Attachment #2: Type: text/plain, Size: 159 bytes --]
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
next prev parent reply other threads:[~2019-06-27 7:37 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-06-13 18:43 [RFC][PATCH 0/2] drm: PATH prop for all connectors? Ville Syrjala
2019-06-13 18:43 ` [RFC][PATCH 1/2] drm: Improve PATH prop docs Ville Syrjala
2019-06-27 7:36 ` Pekka Paalanen
2019-06-13 18:43 ` [RFC][PATCH 2/2] drm/i915: Populate PATH prop for every connector Ville Syrjala
2019-06-27 7:37 ` Pekka Paalanen [this message]
2019-06-13 18:50 ` ✗ Fi.CI.CHECKPATCH: warning for drm: PATH prop for all connectors? Patchwork
2019-06-13 20:42 ` [RFC][PATCH 0/2] " Daniel Vetter
2019-06-27 7:35 ` Pekka Paalanen
2019-06-27 7:44 ` Michel Dänzer
2019-06-14 11:38 ` ✓ Fi.CI.BAT: success for " Patchwork
2019-06-15 8:26 ` ✓ Fi.CI.IGT: " Patchwork
2019-07-10 22:43 ` [Intel-gfx] [RFC][PATCH 0/2] " Lyude Paul
2019-07-11 7:20 ` Daniel Vetter
[not found] ` <20190711102923.3d219640@eldfell.localdomain>
2019-07-16 14:59 ` [Intel-gfx] " Li, Sun peng (Leo)
2019-08-01 9:51 ` Pekka Paalanen
2019-08-01 18:24 ` Li, Sun peng (Leo)
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=20190627103714.3d74f49b@eldfell.localdomain \
--to=ppaalanen@gmail.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=intel-gfx@lists.freedesktop.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox