* [PATCH v2 00/13] drm/display & drm/i915: more struct drm_edid conversions
@ 2023-05-30 9:08 Jani Nikula
2023-05-30 9:08 ` [PATCH v2 01/13] drm/edid: parse display info has_audio similar to is_hdmi Jani Nikula
` (13 more replies)
0 siblings, 14 replies; 16+ messages in thread
From: Jani Nikula @ 2023-05-30 9:08 UTC (permalink / raw)
To: intel-gfx; +Cc: jani.nikula, Ankit Nautiyal, dri-devel
Rebase of https://patchwork.freedesktop.org/series/116813/
Move struct drm_edid conversions forward.
There are still some drm_edid_raw() stragglers, but this nudges things
forward nicely.
Jani Nikula (13):
drm/edid: parse display info has_audio similar to is_hdmi
drm/display/dp_mst: drop has_audio from struct drm_dp_mst_port
drm/i915/dp: stop caching has_audio in struct intel_dp
drm/i915/dp: stop caching has_hdmi_sink in struct intel_dp
drm/i915/hdmi: stop caching has_audio in struct intel_hdmi
drm/i915/hdmi: stop caching has_hdmi_sink in struct intel_hdmi
drm/i915/sdvo: stop caching has_hdmi_monitor in struct intel_sdvo
drm/i915/sdvo: stop caching has_hdmi_audio in struct intel_sdvo
drm/edid: add drm_edid_read_switcheroo()
drm/i915/lvds: switch to drm_edid_read_switcheroo()
drm/edid: make drm_edid_duplicate() safe to call with NULL parameter
drm/display/dp_mst: convert to struct drm_edid
drm/i915/display: switch the rest of the connectors to struct drm_edid
drivers/gpu/drm/display/drm_dp_mst_topology.c | 55 +++++++--
drivers/gpu/drm/drm_edid.c | 38 +++++++
.../gpu/drm/i915/display/intel_connector.c | 18 +--
.../gpu/drm/i915/display/intel_connector.h | 4 +-
drivers/gpu/drm/i915/display/intel_crt.c | 34 +++---
drivers/gpu/drm/i915/display/intel_ddi.c | 6 +-
.../drm/i915/display/intel_display_debugfs.c | 14 +--
.../drm/i915/display/intel_display_types.h | 4 -
drivers/gpu/drm/i915/display/intel_dp.c | 26 ++---
drivers/gpu/drm/i915/display/intel_dp.h | 1 +
drivers/gpu/drm/i915/display/intel_dp_mst.c | 12 +-
drivers/gpu/drm/i915/display/intel_hdmi.c | 14 +--
drivers/gpu/drm/i915/display/intel_lvds.c | 13 +--
drivers/gpu/drm/i915/display/intel_sdvo.c | 107 +++++++++---------
include/drm/display/drm_dp_mst_helper.h | 14 +--
include/drm/drm_connector.h | 8 ++
include/drm/drm_edid.h | 2 +
17 files changed, 217 insertions(+), 153 deletions(-)
--
2.39.2
^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH v2 01/13] drm/edid: parse display info has_audio similar to is_hdmi
2023-05-30 9:08 [PATCH v2 00/13] drm/display & drm/i915: more struct drm_edid conversions Jani Nikula
@ 2023-05-30 9:08 ` Jani Nikula
2023-05-30 9:08 ` [PATCH v2 02/13] drm/display/dp_mst: drop has_audio from struct drm_dp_mst_port Jani Nikula
` (12 subsequent siblings)
13 siblings, 0 replies; 16+ messages in thread
From: Jani Nikula @ 2023-05-30 9:08 UTC (permalink / raw)
To: intel-gfx; +Cc: jani.nikula, Ankit Nautiyal, dri-devel
Since we already iterate everything that's needed for determining audio,
reduce the need to call drm_detect_monitor_audio() by storing has_audio
to connector info.
Reviewed-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/drm_edid.c | 6 ++++++
include/drm/drm_connector.h | 8 ++++++++
2 files changed, 14 insertions(+)
diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
index 0454da505687..813ce00a106a 100644
--- a/drivers/gpu/drm/drm_edid.c
+++ b/drivers/gpu/drm/drm_edid.c
@@ -6243,6 +6243,9 @@ static void drm_parse_cea_ext(struct drm_connector *connector,
info->color_formats |= DRM_COLOR_FORMAT_YCBCR444;
if (edid_ext[3] & EDID_CEA_YCRCB422)
info->color_formats |= DRM_COLOR_FORMAT_YCBCR422;
+ if (edid_ext[3] & EDID_BASIC_AUDIO)
+ info->has_audio = true;
+
}
drm_edid_iter_end(&edid_iter);
@@ -6268,6 +6271,8 @@ static void drm_parse_cea_ext(struct drm_connector *connector,
drm_parse_hdr_metadata_block(connector, data);
else if (cea_db_tag(db) == CTA_DB_VIDEO)
parse_cta_vdb(connector, db);
+ else if (cea_db_tag(db) == CTA_DB_AUDIO)
+ info->has_audio = true;
}
cea_db_iter_end(&iter);
@@ -6424,6 +6429,7 @@ static void drm_reset_display_info(struct drm_connector *connector)
info->max_tmds_clock = 0;
info->dvi_dual = false;
info->is_hdmi = false;
+ info->has_audio = false;
info->has_hdmi_infoframe = false;
info->rgb_quant_range_selectable = false;
memset(&info->hdmi, 0, sizeof(info->hdmi));
diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h
index e6478fafa6b0..e143fef07de9 100644
--- a/include/drm/drm_connector.h
+++ b/include/drm/drm_connector.h
@@ -658,6 +658,14 @@ struct drm_display_info {
*/
bool is_hdmi;
+ /**
+ * @has_audio: True if the sink supports audio.
+ *
+ * This field shall be used instead of calling
+ * drm_detect_monitor_audio() when possible.
+ */
+ bool has_audio;
+
/**
* @has_hdmi_infoframe: Does the sink support the HDMI infoframe?
*/
--
2.39.2
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v2 02/13] drm/display/dp_mst: drop has_audio from struct drm_dp_mst_port
2023-05-30 9:08 [PATCH v2 00/13] drm/display & drm/i915: more struct drm_edid conversions Jani Nikula
2023-05-30 9:08 ` [PATCH v2 01/13] drm/edid: parse display info has_audio similar to is_hdmi Jani Nikula
@ 2023-05-30 9:08 ` Jani Nikula
2023-05-30 9:08 ` [PATCH v2 03/13] drm/i915/dp: stop caching has_audio in struct intel_dp Jani Nikula
` (11 subsequent siblings)
13 siblings, 0 replies; 16+ messages in thread
From: Jani Nikula @ 2023-05-30 9:08 UTC (permalink / raw)
To: intel-gfx; +Cc: jani.nikula, Ankit Nautiyal, dri-devel
Caching the has_audio in struct drm_dp_mst_port seems odd, and oddly
placed. Defer audio handling to drivers, and use the info from the
connector display info. i915 was the only one using it anyway.
Reviewed-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/display/drm_dp_mst_topology.c | 2 +-
drivers/gpu/drm/i915/display/intel_display_debugfs.c | 4 ++--
drivers/gpu/drm/i915/display/intel_dp_mst.c | 2 +-
include/drm/display/drm_dp_mst_helper.h | 5 -----
4 files changed, 4 insertions(+), 9 deletions(-)
diff --git a/drivers/gpu/drm/display/drm_dp_mst_topology.c b/drivers/gpu/drm/display/drm_dp_mst_topology.c
index 38dab76ae69e..a2b8732db0c8 100644
--- a/drivers/gpu/drm/display/drm_dp_mst_topology.c
+++ b/drivers/gpu/drm/display/drm_dp_mst_topology.c
@@ -4170,7 +4170,7 @@ struct edid *drm_dp_mst_get_edid(struct drm_connector *connector, struct drm_dp_
else {
edid = drm_get_edid(connector, &port->aux.ddc);
}
- port->has_audio = drm_detect_monitor_audio(edid);
+
drm_dp_mst_topology_put_port(port);
return edid;
}
diff --git a/drivers/gpu/drm/i915/display/intel_display_debugfs.c b/drivers/gpu/drm/i915/display/intel_display_debugfs.c
index e72288662f02..77caed2552d0 100644
--- a/drivers/gpu/drm/i915/display/intel_display_debugfs.c
+++ b/drivers/gpu/drm/i915/display/intel_display_debugfs.c
@@ -244,9 +244,9 @@ static void intel_dp_info(struct seq_file *m,
}
static void intel_dp_mst_info(struct seq_file *m,
- struct intel_connector *intel_connector)
+ struct intel_connector *connector)
{
- bool has_audio = intel_connector->port->has_audio;
+ bool has_audio = connector->base.display_info.has_audio;
seq_printf(m, "\taudio support: %s\n", str_yes_no(has_audio));
}
diff --git a/drivers/gpu/drm/i915/display/intel_dp_mst.c b/drivers/gpu/drm/i915/display/intel_dp_mst.c
index 6df8519b3347..1d483a83d59c 100644
--- a/drivers/gpu/drm/i915/display/intel_dp_mst.c
+++ b/drivers/gpu/drm/i915/display/intel_dp_mst.c
@@ -298,7 +298,7 @@ static bool intel_dp_mst_has_audio(const struct drm_connector_state *conn_state)
to_intel_connector(conn_state->connector);
if (intel_conn_state->force_audio == HDMI_AUDIO_AUTO)
- return connector->port->has_audio;
+ return connector->base.display_info.has_audio;
else
return intel_conn_state->force_audio == HDMI_AUDIO_ON;
}
diff --git a/include/drm/display/drm_dp_mst_helper.h b/include/drm/display/drm_dp_mst_helper.h
index 32c764fb9cb5..5be96a158ab2 100644
--- a/include/drm/display/drm_dp_mst_helper.h
+++ b/include/drm/display/drm_dp_mst_helper.h
@@ -139,11 +139,6 @@ struct drm_dp_mst_port {
* that the EDID for all connectors is read immediately.
*/
struct edid *cached_edid;
- /**
- * @has_audio: Tracks whether the sink connector to this port is
- * audio-capable.
- */
- bool has_audio;
/**
* @fec_capable: bool indicating if FEC can be supported up to that
--
2.39.2
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v2 03/13] drm/i915/dp: stop caching has_audio in struct intel_dp
2023-05-30 9:08 [PATCH v2 00/13] drm/display & drm/i915: more struct drm_edid conversions Jani Nikula
2023-05-30 9:08 ` [PATCH v2 01/13] drm/edid: parse display info has_audio similar to is_hdmi Jani Nikula
2023-05-30 9:08 ` [PATCH v2 02/13] drm/display/dp_mst: drop has_audio from struct drm_dp_mst_port Jani Nikula
@ 2023-05-30 9:08 ` Jani Nikula
2023-05-30 9:08 ` [PATCH v2 04/13] drm/i915/dp: stop caching has_hdmi_sink " Jani Nikula
` (10 subsequent siblings)
13 siblings, 0 replies; 16+ messages in thread
From: Jani Nikula @ 2023-05-30 9:08 UTC (permalink / raw)
To: intel-gfx; +Cc: jani.nikula, Ankit Nautiyal, dri-devel
Use the information stored in display info.
Reviewed-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/i915/display/intel_display_debugfs.c | 2 +-
drivers/gpu/drm/i915/display/intel_display_types.h | 1 -
drivers/gpu/drm/i915/display/intel_dp.c | 5 ++---
3 files changed, 3 insertions(+), 5 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_display_debugfs.c b/drivers/gpu/drm/i915/display/intel_display_debugfs.c
index 77caed2552d0..1416b82fc8a3 100644
--- a/drivers/gpu/drm/i915/display/intel_display_debugfs.c
+++ b/drivers/gpu/drm/i915/display/intel_display_debugfs.c
@@ -237,7 +237,7 @@ static void intel_dp_info(struct seq_file *m,
seq_printf(m, "\tDPCD rev: %x\n", intel_dp->dpcd[DP_DPCD_REV]);
seq_printf(m, "\taudio support: %s\n",
- str_yes_no(intel_dp->has_audio));
+ str_yes_no(intel_connector->base.display_info.has_audio));
drm_dp_downstream_debug(m, intel_dp->dpcd, intel_dp->downstream_ports,
edid ? edid->data : NULL, &intel_dp->aux);
diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h b/drivers/gpu/drm/i915/display/intel_display_types.h
index 2d8297f8d088..94a59febc987 100644
--- a/drivers/gpu/drm/i915/display/intel_display_types.h
+++ b/drivers/gpu/drm/i915/display/intel_display_types.h
@@ -1708,7 +1708,6 @@ struct intel_dp {
u8 sink_count;
bool link_trained;
bool has_hdmi_sink;
- bool has_audio;
bool reset_link_params;
bool use_max_params;
u8 dpcd[DP_RECEIVER_CAP_SIZE];
diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
index 4bec8cd7979f..aa1445ad9da8 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -2159,6 +2159,7 @@ static bool intel_dp_has_audio(struct intel_encoder *encoder,
{
struct drm_i915_private *i915 = to_i915(encoder->base.dev);
struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
+ struct intel_connector *connector = intel_dp->attached_connector;
const struct intel_digital_connector_state *intel_conn_state =
to_intel_digital_connector_state(conn_state);
@@ -2166,7 +2167,7 @@ static bool intel_dp_has_audio(struct intel_encoder *encoder,
return false;
if (intel_conn_state->force_audio == HDMI_AUDIO_AUTO)
- return intel_dp->has_audio;
+ return connector->base.display_info.has_audio;
else
return intel_conn_state->force_audio == HDMI_AUDIO_ON;
}
@@ -4813,7 +4814,6 @@ intel_dp_set_edid(struct intel_dp *intel_dp)
edid = drm_edid_raw(drm_edid);
if (edid && edid->input & DRM_EDID_INPUT_DIGITAL) {
intel_dp->has_hdmi_sink = drm_detect_hdmi_monitor(edid);
- intel_dp->has_audio = drm_detect_monitor_audio(edid);
}
drm_dp_cec_set_edid(&intel_dp->aux, edid);
@@ -4829,7 +4829,6 @@ intel_dp_unset_edid(struct intel_dp *intel_dp)
connector->detect_edid = NULL;
intel_dp->has_hdmi_sink = false;
- intel_dp->has_audio = false;
intel_dp->dfp.max_bpc = 0;
intel_dp->dfp.max_dotclock = 0;
--
2.39.2
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v2 04/13] drm/i915/dp: stop caching has_hdmi_sink in struct intel_dp
2023-05-30 9:08 [PATCH v2 00/13] drm/display & drm/i915: more struct drm_edid conversions Jani Nikula
` (2 preceding siblings ...)
2023-05-30 9:08 ` [PATCH v2 03/13] drm/i915/dp: stop caching has_audio in struct intel_dp Jani Nikula
@ 2023-05-30 9:08 ` Jani Nikula
2023-05-30 9:08 ` [PATCH v2 05/13] drm/i915/hdmi: stop caching has_audio in struct intel_hdmi Jani Nikula
` (9 subsequent siblings)
13 siblings, 0 replies; 16+ messages in thread
From: Jani Nikula @ 2023-05-30 9:08 UTC (permalink / raw)
To: intel-gfx; +Cc: jani.nikula, Ankit Nautiyal, dri-devel
Use the information stored in display info. Add intel_dp_has_hdmi_sink()
helper to access it.
v2: Rebased
Reviewed-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/i915/display/intel_ddi.c | 6 +++---
.../drm/i915/display/intel_display_types.h | 1 -
drivers/gpu/drm/i915/display/intel_dp.c | 21 ++++++++++---------
drivers/gpu/drm/i915/display/intel_dp.h | 1 +
4 files changed, 15 insertions(+), 14 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c
index d1a9a3cf94b5..70d44edd8c6e 100644
--- a/drivers/gpu/drm/i915/display/intel_ddi.c
+++ b/drivers/gpu/drm/i915/display/intel_ddi.c
@@ -2801,7 +2801,7 @@ static void intel_ddi_pre_enable(struct intel_atomic_state *state,
/* FIXME precompute everything properly */
/* FIXME how do we turn infoframes off again? */
- if (dig_port->lspcon.active && dig_port->dp.has_hdmi_sink)
+ if (dig_port->lspcon.active && intel_dp_has_hdmi_sink(&dig_port->dp))
dig_port->set_infoframes(encoder,
crtc_state->has_infoframe,
crtc_state, conn_state);
@@ -3110,7 +3110,7 @@ static void intel_enable_ddi_dp(struct intel_atomic_state *state,
drm_connector_update_privacy_screen(conn_state);
intel_edp_backlight_on(crtc_state, conn_state);
- if (!dig_port->lspcon.active || dig_port->dp.has_hdmi_sink)
+ if (!dig_port->lspcon.active || intel_dp_has_hdmi_sink(&dig_port->dp))
intel_dp_set_infoframes(encoder, true, crtc_state, conn_state);
intel_audio_codec_enable(encoder, crtc_state, conn_state);
@@ -3738,7 +3738,7 @@ static void intel_ddi_read_func_ctl(struct intel_encoder *encoder,
pipe_config->fec_enable);
}
- if (dig_port->lspcon.active && dig_port->dp.has_hdmi_sink)
+ if (dig_port->lspcon.active && intel_dp_has_hdmi_sink(&dig_port->dp))
pipe_config->infoframes.enable |=
intel_lspcon_infoframes_enabled(encoder, pipe_config);
else
diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h b/drivers/gpu/drm/i915/display/intel_display_types.h
index 94a59febc987..c5bd0c7be2fa 100644
--- a/drivers/gpu/drm/i915/display/intel_display_types.h
+++ b/drivers/gpu/drm/i915/display/intel_display_types.h
@@ -1707,7 +1707,6 @@ struct intel_dp {
u8 lane_count;
u8 sink_count;
bool link_trained;
- bool has_hdmi_sink;
bool reset_link_params;
bool use_max_params;
u8 dpcd[DP_RECEIVER_CAP_SIZE];
diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
index aa1445ad9da8..8445a37d9d01 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -1287,6 +1287,13 @@ void intel_dp_compute_rate(struct intel_dp *intel_dp, int port_clock,
}
}
+bool intel_dp_has_hdmi_sink(struct intel_dp *intel_dp)
+{
+ struct intel_connector *connector = intel_dp->attached_connector;
+
+ return connector->base.display_info.is_hdmi;
+}
+
static bool intel_dp_source_supports_fec(struct intel_dp *intel_dp,
const struct intel_crtc_state *pipe_config)
{
@@ -1342,7 +1349,7 @@ static int intel_dp_hdmi_compute_bpc(struct intel_dp *intel_dp,
for (; bpc >= 8; bpc -= 2) {
if (intel_hdmi_bpc_possible(crtc_state, bpc,
- intel_dp->has_hdmi_sink) &&
+ intel_dp_has_hdmi_sink(intel_dp)) &&
intel_dp_tmds_clock_valid(intel_dp, clock, bpc, crtc_state->sink_format,
respect_downstream_limits) == MODE_OK)
return bpc;
@@ -2732,7 +2739,7 @@ static int intel_dp_pcon_start_frl_training(struct intel_dp *intel_dp)
static bool intel_dp_is_hdmi_2_1_sink(struct intel_dp *intel_dp)
{
if (drm_dp_is_branch(intel_dp->dpcd) &&
- intel_dp->has_hdmi_sink &&
+ intel_dp_has_hdmi_sink(intel_dp) &&
intel_dp_hdmi_sink_max_frl(intel_dp) > 0)
return true;
@@ -2900,13 +2907,12 @@ void intel_dp_configure_protocol_converter(struct intel_dp *intel_dp,
if (!drm_dp_is_branch(intel_dp->dpcd))
return;
- tmp = intel_dp->has_hdmi_sink ?
- DP_HDMI_DVI_OUTPUT_CONFIG : 0;
+ tmp = intel_dp_has_hdmi_sink(intel_dp) ? DP_HDMI_DVI_OUTPUT_CONFIG : 0;
if (drm_dp_dpcd_writeb(&intel_dp->aux,
DP_PROTOCOL_CONVERTER_CONTROL_0, tmp) != 1)
drm_dbg_kms(&i915->drm, "Failed to %s protocol converter HDMI mode\n",
- str_enable_disable(intel_dp->has_hdmi_sink));
+ str_enable_disable(intel_dp_has_hdmi_sink(intel_dp)));
if (crtc_state->sink_format == INTEL_OUTPUT_FORMAT_YCBCR420) {
switch (crtc_state->output_format) {
@@ -4812,9 +4818,6 @@ intel_dp_set_edid(struct intel_dp *intel_dp)
/* FIXME: Get rid of drm_edid_raw() */
edid = drm_edid_raw(drm_edid);
- if (edid && edid->input & DRM_EDID_INPUT_DIGITAL) {
- intel_dp->has_hdmi_sink = drm_detect_hdmi_monitor(edid);
- }
drm_dp_cec_set_edid(&intel_dp->aux, edid);
}
@@ -4828,8 +4831,6 @@ intel_dp_unset_edid(struct intel_dp *intel_dp)
drm_edid_free(connector->detect_edid);
connector->detect_edid = NULL;
- intel_dp->has_hdmi_sink = false;
-
intel_dp->dfp.max_bpc = 0;
intel_dp->dfp.max_dotclock = 0;
intel_dp->dfp.min_tmds_clock = 0;
diff --git a/drivers/gpu/drm/i915/display/intel_dp.h b/drivers/gpu/drm/i915/display/intel_dp.h
index 5f86157a10d2..22099de3ca45 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.h
+++ b/drivers/gpu/drm/i915/display/intel_dp.h
@@ -65,6 +65,7 @@ int intel_dp_dsc_compute_config(struct intel_dp *intel_dp,
struct link_config_limits *limits,
int timeslots,
bool recompute_pipe_bpp);
+bool intel_dp_has_hdmi_sink(struct intel_dp *intel_dp);
bool intel_dp_is_edp(struct intel_dp *intel_dp);
bool intel_dp_is_uhbr(const struct intel_crtc_state *crtc_state);
bool intel_dp_is_port_edp(struct drm_i915_private *dev_priv, enum port port);
--
2.39.2
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v2 05/13] drm/i915/hdmi: stop caching has_audio in struct intel_hdmi
2023-05-30 9:08 [PATCH v2 00/13] drm/display & drm/i915: more struct drm_edid conversions Jani Nikula
` (3 preceding siblings ...)
2023-05-30 9:08 ` [PATCH v2 04/13] drm/i915/dp: stop caching has_hdmi_sink " Jani Nikula
@ 2023-05-30 9:08 ` Jani Nikula
2023-05-30 9:08 ` [PATCH v2 06/13] drm/i915/hdmi: stop caching has_hdmi_sink " Jani Nikula
` (8 subsequent siblings)
13 siblings, 0 replies; 16+ messages in thread
From: Jani Nikula @ 2023-05-30 9:08 UTC (permalink / raw)
To: intel-gfx; +Cc: jani.nikula, Ankit Nautiyal, dri-devel
Use the information stored in display info.
Reviewed-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/i915/display/intel_display_debugfs.c | 8 +++-----
drivers/gpu/drm/i915/display/intel_display_types.h | 1 -
drivers/gpu/drm/i915/display/intel_hdmi.c | 6 ++----
3 files changed, 5 insertions(+), 10 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_display_debugfs.c b/drivers/gpu/drm/i915/display/intel_display_debugfs.c
index 1416b82fc8a3..2a4df62692a6 100644
--- a/drivers/gpu/drm/i915/display/intel_display_debugfs.c
+++ b/drivers/gpu/drm/i915/display/intel_display_debugfs.c
@@ -252,13 +252,11 @@ static void intel_dp_mst_info(struct seq_file *m,
}
static void intel_hdmi_info(struct seq_file *m,
- struct intel_connector *intel_connector)
+ struct intel_connector *connector)
{
- struct intel_encoder *intel_encoder = intel_attached_encoder(intel_connector);
- struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(intel_encoder);
+ bool has_audio = connector->base.display_info.has_audio;
- seq_printf(m, "\taudio support: %s\n",
- str_yes_no(intel_hdmi->has_audio));
+ seq_printf(m, "\taudio support: %s\n", str_yes_no(has_audio));
}
static void intel_connector_info(struct seq_file *m,
diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h b/drivers/gpu/drm/i915/display/intel_display_types.h
index c5bd0c7be2fa..1ae1519087cb 100644
--- a/drivers/gpu/drm/i915/display/intel_display_types.h
+++ b/drivers/gpu/drm/i915/display/intel_display_types.h
@@ -1587,7 +1587,6 @@ struct intel_hdmi {
int max_tmds_clock;
} dp_dual_mode;
bool has_hdmi_sink;
- bool has_audio;
struct intel_connector *attached_connector;
struct cec_notifier *cec_notifier;
};
diff --git a/drivers/gpu/drm/i915/display/intel_hdmi.c b/drivers/gpu/drm/i915/display/intel_hdmi.c
index c2464f98c76e..89a6b574f95a 100644
--- a/drivers/gpu/drm/i915/display/intel_hdmi.c
+++ b/drivers/gpu/drm/i915/display/intel_hdmi.c
@@ -2169,7 +2169,7 @@ static bool intel_hdmi_has_audio(struct intel_encoder *encoder,
const struct intel_crtc_state *crtc_state,
const struct drm_connector_state *conn_state)
{
- struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(encoder);
+ struct drm_connector *connector = conn_state->connector;
const struct intel_digital_connector_state *intel_conn_state =
to_intel_digital_connector_state(conn_state);
@@ -2177,7 +2177,7 @@ static bool intel_hdmi_has_audio(struct intel_encoder *encoder,
return false;
if (intel_conn_state->force_audio == HDMI_AUDIO_AUTO)
- return intel_hdmi->has_audio;
+ return connector->display_info.has_audio;
else
return intel_conn_state->force_audio == HDMI_AUDIO_ON;
}
@@ -2386,7 +2386,6 @@ intel_hdmi_unset_edid(struct drm_connector *connector)
struct intel_hdmi *intel_hdmi = intel_attached_hdmi(to_intel_connector(connector));
intel_hdmi->has_hdmi_sink = false;
- intel_hdmi->has_audio = false;
intel_hdmi->dp_dual_mode.type = DRM_DP_DUAL_MODE_NONE;
intel_hdmi->dp_dual_mode.max_tmds_clock = 0;
@@ -2479,7 +2478,6 @@ intel_hdmi_set_edid(struct drm_connector *connector)
/* FIXME: Get rid of drm_edid_raw() */
edid = drm_edid_raw(drm_edid);
if (edid && edid->input & DRM_EDID_INPUT_DIGITAL) {
- intel_hdmi->has_audio = drm_detect_monitor_audio(edid);
intel_hdmi->has_hdmi_sink = drm_detect_hdmi_monitor(edid);
intel_hdmi_dp_dual_mode_detect(connector);
--
2.39.2
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v2 06/13] drm/i915/hdmi: stop caching has_hdmi_sink in struct intel_hdmi
2023-05-30 9:08 [PATCH v2 00/13] drm/display & drm/i915: more struct drm_edid conversions Jani Nikula
` (4 preceding siblings ...)
2023-05-30 9:08 ` [PATCH v2 05/13] drm/i915/hdmi: stop caching has_audio in struct intel_hdmi Jani Nikula
@ 2023-05-30 9:08 ` Jani Nikula
2023-05-30 9:08 ` [PATCH v2 07/13] drm/i915/sdvo: stop caching has_hdmi_monitor in struct intel_sdvo Jani Nikula
` (7 subsequent siblings)
13 siblings, 0 replies; 16+ messages in thread
From: Jani Nikula @ 2023-05-30 9:08 UTC (permalink / raw)
To: intel-gfx; +Cc: jani.nikula, Ankit Nautiyal, dri-devel
Use the information stored in display info.
Reviewed-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/i915/display/intel_display_types.h | 1 -
drivers/gpu/drm/i915/display/intel_hdmi.c | 8 +++-----
2 files changed, 3 insertions(+), 6 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h b/drivers/gpu/drm/i915/display/intel_display_types.h
index 1ae1519087cb..731f2ec04d5c 100644
--- a/drivers/gpu/drm/i915/display/intel_display_types.h
+++ b/drivers/gpu/drm/i915/display/intel_display_types.h
@@ -1586,7 +1586,6 @@ struct intel_hdmi {
enum drm_dp_dual_mode_type type;
int max_tmds_clock;
} dp_dual_mode;
- bool has_hdmi_sink;
struct intel_connector *attached_connector;
struct cec_notifier *cec_notifier;
};
diff --git a/drivers/gpu/drm/i915/display/intel_hdmi.c b/drivers/gpu/drm/i915/display/intel_hdmi.c
index 89a6b574f95a..7ac5e6c5e00d 100644
--- a/drivers/gpu/drm/i915/display/intel_hdmi.c
+++ b/drivers/gpu/drm/i915/display/intel_hdmi.c
@@ -1790,7 +1790,9 @@ static int intel_hdmi_source_max_tmds_clock(struct intel_encoder *encoder)
static bool intel_has_hdmi_sink(struct intel_hdmi *hdmi,
const struct drm_connector_state *conn_state)
{
- return hdmi->has_hdmi_sink &&
+ struct intel_connector *connector = hdmi->attached_connector;
+
+ return connector->base.display_info.is_hdmi &&
READ_ONCE(to_intel_digital_connector_state(conn_state)->force_audio) != HDMI_AUDIO_OFF_DVI;
}
@@ -2385,8 +2387,6 @@ intel_hdmi_unset_edid(struct drm_connector *connector)
{
struct intel_hdmi *intel_hdmi = intel_attached_hdmi(to_intel_connector(connector));
- intel_hdmi->has_hdmi_sink = false;
-
intel_hdmi->dp_dual_mode.type = DRM_DP_DUAL_MODE_NONE;
intel_hdmi->dp_dual_mode.max_tmds_clock = 0;
@@ -2478,8 +2478,6 @@ intel_hdmi_set_edid(struct drm_connector *connector)
/* FIXME: Get rid of drm_edid_raw() */
edid = drm_edid_raw(drm_edid);
if (edid && edid->input & DRM_EDID_INPUT_DIGITAL) {
- intel_hdmi->has_hdmi_sink = drm_detect_hdmi_monitor(edid);
-
intel_hdmi_dp_dual_mode_detect(connector);
connected = true;
--
2.39.2
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v2 07/13] drm/i915/sdvo: stop caching has_hdmi_monitor in struct intel_sdvo
2023-05-30 9:08 [PATCH v2 00/13] drm/display & drm/i915: more struct drm_edid conversions Jani Nikula
` (5 preceding siblings ...)
2023-05-30 9:08 ` [PATCH v2 06/13] drm/i915/hdmi: stop caching has_hdmi_sink " Jani Nikula
@ 2023-05-30 9:08 ` Jani Nikula
2023-05-30 9:08 ` [PATCH v2 08/13] drm/i915/sdvo: stop caching has_hdmi_audio " Jani Nikula
` (6 subsequent siblings)
13 siblings, 0 replies; 16+ messages in thread
From: Jani Nikula @ 2023-05-30 9:08 UTC (permalink / raw)
To: intel-gfx; +Cc: jani.nikula, Ankit Nautiyal, dri-devel
Use the information stored in display info.
Reviewed-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/i915/display/intel_sdvo.c | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_sdvo.c b/drivers/gpu/drm/i915/display/intel_sdvo.c
index 34ee9dd82a78..5ce1fed84016 100644
--- a/drivers/gpu/drm/i915/display/intel_sdvo.c
+++ b/drivers/gpu/drm/i915/display/intel_sdvo.c
@@ -117,7 +117,6 @@ struct intel_sdvo {
enum port port;
- bool has_hdmi_monitor;
bool has_hdmi_audio;
/* DDC bus used by this SDVO encoder */
@@ -1303,10 +1302,13 @@ static void i9xx_adjust_sdvo_tv_clock(struct intel_crtc_state *pipe_config)
pipe_config->clock_set = true;
}
-static bool intel_has_hdmi_sink(struct intel_sdvo *sdvo,
+static bool intel_has_hdmi_sink(struct intel_sdvo_connector *intel_sdvo_connector,
const struct drm_connector_state *conn_state)
{
- return sdvo->has_hdmi_monitor &&
+ struct drm_connector *connector = conn_state->connector;
+
+ return intel_sdvo_connector->is_hdmi &&
+ connector->display_info.is_hdmi &&
READ_ONCE(to_intel_digital_connector_state(conn_state)->force_audio) != HDMI_AUDIO_OFF_DVI;
}
@@ -1401,7 +1403,7 @@ static int intel_sdvo_compute_config(struct intel_encoder *encoder,
pipe_config->pixel_multiplier =
intel_sdvo_get_pixel_multiplier(adjusted_mode);
- pipe_config->has_hdmi_sink = intel_has_hdmi_sink(intel_sdvo, conn_state);
+ pipe_config->has_hdmi_sink = intel_has_hdmi_sink(intel_sdvo_connector, conn_state);
pipe_config->has_audio =
intel_sdvo_has_audio(encoder, pipe_config, conn_state) &&
@@ -1907,7 +1909,7 @@ intel_sdvo_mode_valid(struct drm_connector *connector,
struct intel_sdvo_connector *intel_sdvo_connector =
to_intel_sdvo_connector(connector);
int max_dotclk = to_i915(connector->dev)->max_dotclk_freq;
- bool has_hdmi_sink = intel_has_hdmi_sink(intel_sdvo, connector->state);
+ bool has_hdmi_sink = intel_has_hdmi_sink(intel_sdvo_connector, connector->state);
int clock = mode->clock;
if (mode->flags & DRM_MODE_FLAG_DBLSCAN)
@@ -2096,7 +2098,6 @@ intel_sdvo_tmds_sink_detect(struct drm_connector *connector)
if (edid->input & DRM_EDID_INPUT_DIGITAL) {
status = connector_status_connected;
if (intel_sdvo_connector->is_hdmi) {
- intel_sdvo->has_hdmi_monitor = drm_detect_hdmi_monitor(edid);
intel_sdvo->has_hdmi_audio = drm_detect_monitor_audio(edid);
}
} else
@@ -2148,7 +2149,6 @@ intel_sdvo_detect(struct drm_connector *connector, bool force)
intel_sdvo->attached_output = response;
- intel_sdvo->has_hdmi_monitor = false;
intel_sdvo->has_hdmi_audio = false;
if ((intel_sdvo_connector->output_flag & response) == 0)
--
2.39.2
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v2 08/13] drm/i915/sdvo: stop caching has_hdmi_audio in struct intel_sdvo
2023-05-30 9:08 [PATCH v2 00/13] drm/display & drm/i915: more struct drm_edid conversions Jani Nikula
` (6 preceding siblings ...)
2023-05-30 9:08 ` [PATCH v2 07/13] drm/i915/sdvo: stop caching has_hdmi_monitor in struct intel_sdvo Jani Nikula
@ 2023-05-30 9:08 ` Jani Nikula
2023-05-30 9:08 ` [PATCH v2 09/13] drm/edid: add drm_edid_read_switcheroo() Jani Nikula
` (5 subsequent siblings)
13 siblings, 0 replies; 16+ messages in thread
From: Jani Nikula @ 2023-05-30 9:08 UTC (permalink / raw)
To: intel-gfx; +Cc: jani.nikula, Ankit Nautiyal, dri-devel
Use the information stored in display info.
Reviewed-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/i915/display/intel_sdvo.c | 20 +++++++-------------
1 file changed, 7 insertions(+), 13 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_sdvo.c b/drivers/gpu/drm/i915/display/intel_sdvo.c
index 5ce1fed84016..2d1b19f73883 100644
--- a/drivers/gpu/drm/i915/display/intel_sdvo.c
+++ b/drivers/gpu/drm/i915/display/intel_sdvo.c
@@ -117,8 +117,6 @@ struct intel_sdvo {
enum port port;
- bool has_hdmi_audio;
-
/* DDC bus used by this SDVO encoder */
u8 ddc_bus;
@@ -1328,7 +1326,9 @@ static bool intel_sdvo_has_audio(struct intel_encoder *encoder,
const struct intel_crtc_state *crtc_state,
const struct drm_connector_state *conn_state)
{
- struct intel_sdvo *intel_sdvo = to_sdvo(encoder);
+ struct drm_connector *connector = conn_state->connector;
+ struct intel_sdvo_connector *intel_sdvo_connector =
+ to_intel_sdvo_connector(connector);
const struct intel_digital_connector_state *intel_conn_state =
to_intel_digital_connector_state(conn_state);
@@ -1336,7 +1336,8 @@ static bool intel_sdvo_has_audio(struct intel_encoder *encoder,
return false;
if (intel_conn_state->force_audio == HDMI_AUDIO_AUTO)
- return intel_sdvo->has_hdmi_audio;
+ return intel_sdvo_connector->is_hdmi &&
+ connector->display_info.has_audio;
else
return intel_conn_state->force_audio == HDMI_AUDIO_ON;
}
@@ -2057,8 +2058,6 @@ static enum drm_connector_status
intel_sdvo_tmds_sink_detect(struct drm_connector *connector)
{
struct intel_sdvo *intel_sdvo = intel_attached_sdvo(to_intel_connector(connector));
- struct intel_sdvo_connector *intel_sdvo_connector =
- to_intel_sdvo_connector(connector);
enum drm_connector_status status;
struct edid *edid;
@@ -2095,12 +2094,9 @@ intel_sdvo_tmds_sink_detect(struct drm_connector *connector)
status = connector_status_unknown;
if (edid != NULL) {
/* DDC bus is shared, match EDID to connector type */
- if (edid->input & DRM_EDID_INPUT_DIGITAL) {
+ if (edid->input & DRM_EDID_INPUT_DIGITAL)
status = connector_status_connected;
- if (intel_sdvo_connector->is_hdmi) {
- intel_sdvo->has_hdmi_audio = drm_detect_monitor_audio(edid);
- }
- } else
+ else
status = connector_status_disconnected;
kfree(edid);
}
@@ -2149,8 +2145,6 @@ intel_sdvo_detect(struct drm_connector *connector, bool force)
intel_sdvo->attached_output = response;
- intel_sdvo->has_hdmi_audio = false;
-
if ((intel_sdvo_connector->output_flag & response) == 0)
ret = connector_status_disconnected;
else if (IS_TMDS(intel_sdvo_connector))
--
2.39.2
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v2 09/13] drm/edid: add drm_edid_read_switcheroo()
2023-05-30 9:08 [PATCH v2 00/13] drm/display & drm/i915: more struct drm_edid conversions Jani Nikula
` (7 preceding siblings ...)
2023-05-30 9:08 ` [PATCH v2 08/13] drm/i915/sdvo: stop caching has_hdmi_audio " Jani Nikula
@ 2023-05-30 9:08 ` Jani Nikula
2023-05-30 9:08 ` [PATCH v2 10/13] drm/i915/lvds: switch to drm_edid_read_switcheroo() Jani Nikula
` (4 subsequent siblings)
13 siblings, 0 replies; 16+ messages in thread
From: Jani Nikula @ 2023-05-30 9:08 UTC (permalink / raw)
To: intel-gfx; +Cc: jani.nikula, Ankit Nautiyal, dri-devel
Add a switcheroo variant to the struct drm_edid based EDID read
functions.
Reviewed-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/drm_edid.c | 29 +++++++++++++++++++++++++++++
include/drm/drm_edid.h | 2 ++
2 files changed, 31 insertions(+)
diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
index 813ce00a106a..941f3d53a701 100644
--- a/drivers/gpu/drm/drm_edid.c
+++ b/drivers/gpu/drm/drm_edid.c
@@ -2844,6 +2844,35 @@ struct edid *drm_get_edid_switcheroo(struct drm_connector *connector,
}
EXPORT_SYMBOL(drm_get_edid_switcheroo);
+/**
+ * drm_edid_read_switcheroo - get EDID data for a vga_switcheroo output
+ * @connector: connector we're probing
+ * @adapter: I2C adapter to use for DDC
+ *
+ * Wrapper around drm_edid_read_ddc() for laptops with dual GPUs using one set
+ * of outputs. The wrapper adds the requisite vga_switcheroo calls to
+ * temporarily switch DDC to the GPU which is retrieving EDID.
+ *
+ * Return: Pointer to valid EDID or %NULL if we couldn't find any.
+ */
+const struct drm_edid *drm_edid_read_switcheroo(struct drm_connector *connector,
+ struct i2c_adapter *adapter)
+{
+ struct drm_device *dev = connector->dev;
+ struct pci_dev *pdev = to_pci_dev(dev->dev);
+ const struct drm_edid *drm_edid;
+
+ if (drm_WARN_ON_ONCE(dev, !dev_is_pci(dev->dev)))
+ return NULL;
+
+ vga_switcheroo_lock_ddc(pdev);
+ drm_edid = drm_edid_read_ddc(connector, adapter);
+ vga_switcheroo_unlock_ddc(pdev);
+
+ return drm_edid;
+}
+EXPORT_SYMBOL(drm_edid_read_switcheroo);
+
/**
* drm_edid_duplicate - duplicate an EDID and the extensions
* @edid: EDID to duplicate
diff --git a/include/drm/drm_edid.h b/include/drm/drm_edid.h
index 571885d32907..169755d3de19 100644
--- a/include/drm/drm_edid.h
+++ b/include/drm/drm_edid.h
@@ -613,6 +613,8 @@ const struct drm_edid *drm_edid_read_ddc(struct drm_connector *connector,
const struct drm_edid *drm_edid_read_custom(struct drm_connector *connector,
int (*read_block)(void *context, u8 *buf, unsigned int block, size_t len),
void *context);
+const struct drm_edid *drm_edid_read_switcheroo(struct drm_connector *connector,
+ struct i2c_adapter *adapter);
int drm_edid_connector_update(struct drm_connector *connector,
const struct drm_edid *edid);
int drm_edid_connector_add_modes(struct drm_connector *connector);
--
2.39.2
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v2 10/13] drm/i915/lvds: switch to drm_edid_read_switcheroo()
2023-05-30 9:08 [PATCH v2 00/13] drm/display & drm/i915: more struct drm_edid conversions Jani Nikula
` (8 preceding siblings ...)
2023-05-30 9:08 ` [PATCH v2 09/13] drm/edid: add drm_edid_read_switcheroo() Jani Nikula
@ 2023-05-30 9:08 ` Jani Nikula
2023-05-30 9:08 ` [PATCH v2 11/13] drm/edid: make drm_edid_duplicate() safe to call with NULL parameter Jani Nikula
` (3 subsequent siblings)
13 siblings, 0 replies; 16+ messages in thread
From: Jani Nikula @ 2023-05-30 9:08 UTC (permalink / raw)
To: intel-gfx; +Cc: jani.nikula, Ankit Nautiyal, dri-devel
Use drm_edid_read_switcheroo() to switch from struct edid to struct
drm_edid.
Reviewed-by: Lukas Wunner <lukas@wunner.de>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/i915/display/intel_lvds.c | 13 ++-----------
1 file changed, 2 insertions(+), 11 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_lvds.c b/drivers/gpu/drm/i915/display/intel_lvds.c
index 1f4349a12a02..3ace56979b70 100644
--- a/drivers/gpu/drm/i915/display/intel_lvds.c
+++ b/drivers/gpu/drm/i915/display/intel_lvds.c
@@ -944,17 +944,8 @@ void intel_lvds_init(struct drm_i915_private *i915)
*/
mutex_lock(&i915->drm.mode_config.mutex);
if (vga_switcheroo_handler_flags() & VGA_SWITCHEROO_CAN_SWITCH_DDC) {
- const struct edid *edid;
-
- /* FIXME: Make drm_get_edid_switcheroo() return drm_edid */
- edid = drm_get_edid_switcheroo(&connector->base,
- intel_gmbus_get_adapter(i915, pin));
- if (edid) {
- drm_edid = drm_edid_alloc(edid, (edid->extensions + 1) * EDID_LENGTH);
- kfree(edid);
- } else {
- drm_edid = NULL;
- }
+ drm_edid = drm_edid_read_switcheroo(&connector->base,
+ intel_gmbus_get_adapter(i915, pin));
} else {
drm_edid = drm_edid_read_ddc(&connector->base,
intel_gmbus_get_adapter(i915, pin));
--
2.39.2
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v2 11/13] drm/edid: make drm_edid_duplicate() safe to call with NULL parameter
2023-05-30 9:08 [PATCH v2 00/13] drm/display & drm/i915: more struct drm_edid conversions Jani Nikula
` (9 preceding siblings ...)
2023-05-30 9:08 ` [PATCH v2 10/13] drm/i915/lvds: switch to drm_edid_read_switcheroo() Jani Nikula
@ 2023-05-30 9:08 ` Jani Nikula
2023-05-30 9:08 ` [PATCH v2 12/13] drm/display/dp_mst: convert to struct drm_edid Jani Nikula
` (2 subsequent siblings)
13 siblings, 0 replies; 16+ messages in thread
From: Jani Nikula @ 2023-05-30 9:08 UTC (permalink / raw)
To: intel-gfx; +Cc: jani.nikula, Ankit Nautiyal, dri-devel
It's a bit tedious to check for NULL before calling
drm_edid_duplicate(). Make it handle NULL parameter graciously.
Reviewed-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/drm_edid.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
index 941f3d53a701..e0dbd9140726 100644
--- a/drivers/gpu/drm/drm_edid.c
+++ b/drivers/gpu/drm/drm_edid.c
@@ -2881,6 +2881,9 @@ EXPORT_SYMBOL(drm_edid_read_switcheroo);
*/
struct edid *drm_edid_duplicate(const struct edid *edid)
{
+ if (!edid)
+ return NULL;
+
return kmemdup(edid, edid_size(edid), GFP_KERNEL);
}
EXPORT_SYMBOL(drm_edid_duplicate);
--
2.39.2
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v2 12/13] drm/display/dp_mst: convert to struct drm_edid
2023-05-30 9:08 [PATCH v2 00/13] drm/display & drm/i915: more struct drm_edid conversions Jani Nikula
` (10 preceding siblings ...)
2023-05-30 9:08 ` [PATCH v2 11/13] drm/edid: make drm_edid_duplicate() safe to call with NULL parameter Jani Nikula
@ 2023-05-30 9:08 ` Jani Nikula
2023-05-30 9:08 ` [PATCH v2 13/13] drm/i915/display: switch the rest of the connectors " Jani Nikula
2023-05-31 15:12 ` [PATCH v2 00/13] drm/display & drm/i915: more struct drm_edid conversions Jani Nikula
13 siblings, 0 replies; 16+ messages in thread
From: Jani Nikula @ 2023-05-30 9:08 UTC (permalink / raw)
To: intel-gfx; +Cc: jani.nikula, Ankit Nautiyal, dri-devel
Convert the topology manager to use struct drm_edid, add
drm_dp_mst_edid_read() that returns drm_edid, and rewrite the old
drm_dp_mst_get_edid() to use it.
Note that the old drm_get_edid() ended up calling
drm_connector_update_edid_property(). This responsibility is now
deferred to drivers, which all do it anyway after calling
drm_dp_mst_edid_read() or drm_dp_mst_get_edid().
Reviewed-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/display/drm_dp_mst_topology.c | 53 +++++++++++++++----
include/drm/display/drm_dp_mst_helper.h | 9 +++-
2 files changed, 49 insertions(+), 13 deletions(-)
diff --git a/drivers/gpu/drm/display/drm_dp_mst_topology.c b/drivers/gpu/drm/display/drm_dp_mst_topology.c
index a2b8732db0c8..be71be95b706 100644
--- a/drivers/gpu/drm/display/drm_dp_mst_topology.c
+++ b/drivers/gpu/drm/display/drm_dp_mst_topology.c
@@ -1823,7 +1823,7 @@ static void drm_dp_destroy_port(struct kref *kref)
return;
}
- kfree(port->cached_edid);
+ drm_edid_free(port->cached_edid);
/*
* we can't destroy the connector here, as we might be holding the
@@ -2272,8 +2272,8 @@ drm_dp_mst_port_add_connector(struct drm_dp_mst_branch *mstb,
if (port->pdt != DP_PEER_DEVICE_NONE &&
drm_dp_mst_is_end_device(port->pdt, port->mcs) &&
port->port_num >= DP_MST_LOGICAL_PORT_0)
- port->cached_edid = drm_get_edid(port->connector,
- &port->aux.ddc);
+ port->cached_edid = drm_edid_read_ddc(port->connector,
+ &port->aux.ddc);
drm_connector_register(port->connector);
return;
@@ -4133,7 +4133,7 @@ drm_dp_mst_detect_port(struct drm_connector *connector,
ret = connector_status_connected;
/* for logical ports - cache the EDID */
if (port->port_num >= DP_MST_LOGICAL_PORT_0 && !port->cached_edid)
- port->cached_edid = drm_get_edid(connector, &port->aux.ddc);
+ port->cached_edid = drm_edid_read_ddc(connector, &port->aux.ddc);
break;
case DP_PEER_DEVICE_DP_LEGACY_CONV:
if (port->ldps)
@@ -4147,7 +4147,7 @@ drm_dp_mst_detect_port(struct drm_connector *connector,
EXPORT_SYMBOL(drm_dp_mst_detect_port);
/**
- * drm_dp_mst_get_edid() - get EDID for an MST port
+ * drm_dp_mst_edid_read() - get EDID for an MST port
* @connector: toplevel connector to get EDID for
* @mgr: manager for this port
* @port: unverified pointer to a port.
@@ -4156,9 +4156,11 @@ EXPORT_SYMBOL(drm_dp_mst_detect_port);
* It validates the pointer still exists so the caller doesn't require a
* reference.
*/
-struct edid *drm_dp_mst_get_edid(struct drm_connector *connector, struct drm_dp_mst_topology_mgr *mgr, struct drm_dp_mst_port *port)
+const struct drm_edid *drm_dp_mst_edid_read(struct drm_connector *connector,
+ struct drm_dp_mst_topology_mgr *mgr,
+ struct drm_dp_mst_port *port)
{
- struct edid *edid = NULL;
+ const struct drm_edid *drm_edid;
/* we need to search for the port in the mgr in case it's gone */
port = drm_dp_mst_topology_get_port_validated(mgr, port);
@@ -4166,12 +4168,41 @@ struct edid *drm_dp_mst_get_edid(struct drm_connector *connector, struct drm_dp_
return NULL;
if (port->cached_edid)
- edid = drm_edid_duplicate(port->cached_edid);
- else {
- edid = drm_get_edid(connector, &port->aux.ddc);
- }
+ drm_edid = drm_edid_dup(port->cached_edid);
+ else
+ drm_edid = drm_edid_read_ddc(connector, &port->aux.ddc);
drm_dp_mst_topology_put_port(port);
+
+ return drm_edid;
+}
+EXPORT_SYMBOL(drm_dp_mst_edid_read);
+
+/**
+ * drm_dp_mst_get_edid() - get EDID for an MST port
+ * @connector: toplevel connector to get EDID for
+ * @mgr: manager for this port
+ * @port: unverified pointer to a port.
+ *
+ * This function is deprecated; please use drm_dp_mst_edid_read() instead.
+ *
+ * This returns an EDID for the port connected to a connector,
+ * It validates the pointer still exists so the caller doesn't require a
+ * reference.
+ */
+struct edid *drm_dp_mst_get_edid(struct drm_connector *connector,
+ struct drm_dp_mst_topology_mgr *mgr,
+ struct drm_dp_mst_port *port)
+{
+ const struct drm_edid *drm_edid;
+ struct edid *edid;
+
+ drm_edid = drm_dp_mst_edid_read(connector, mgr, port);
+
+ edid = drm_edid_duplicate(drm_edid_raw(drm_edid));
+
+ drm_edid_free(drm_edid);
+
return edid;
}
EXPORT_SYMBOL(drm_dp_mst_get_edid);
diff --git a/include/drm/display/drm_dp_mst_helper.h b/include/drm/display/drm_dp_mst_helper.h
index 5be96a158ab2..f962e97880b4 100644
--- a/include/drm/display/drm_dp_mst_helper.h
+++ b/include/drm/display/drm_dp_mst_helper.h
@@ -138,7 +138,7 @@ struct drm_dp_mst_port {
* @cached_edid: for DP logical ports - make tiling work by ensuring
* that the EDID for all connectors is read immediately.
*/
- struct edid *cached_edid;
+ const struct drm_edid *cached_edid;
/**
* @fec_capable: bool indicating if FEC can be supported up to that
@@ -819,7 +819,12 @@ drm_dp_mst_detect_port(struct drm_connector *connector,
struct drm_dp_mst_topology_mgr *mgr,
struct drm_dp_mst_port *port);
-struct edid *drm_dp_mst_get_edid(struct drm_connector *connector, struct drm_dp_mst_topology_mgr *mgr, struct drm_dp_mst_port *port);
+const struct drm_edid *drm_dp_mst_edid_read(struct drm_connector *connector,
+ struct drm_dp_mst_topology_mgr *mgr,
+ struct drm_dp_mst_port *port);
+struct edid *drm_dp_mst_get_edid(struct drm_connector *connector,
+ struct drm_dp_mst_topology_mgr *mgr,
+ struct drm_dp_mst_port *port);
int drm_dp_get_vc_payload_bw(const struct drm_dp_mst_topology_mgr *mgr,
int link_rate, int link_lane_count);
--
2.39.2
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v2 13/13] drm/i915/display: switch the rest of the connectors to struct drm_edid
2023-05-30 9:08 [PATCH v2 00/13] drm/display & drm/i915: more struct drm_edid conversions Jani Nikula
` (11 preceding siblings ...)
2023-05-30 9:08 ` [PATCH v2 12/13] drm/display/dp_mst: convert to struct drm_edid Jani Nikula
@ 2023-05-30 9:08 ` Jani Nikula
2023-05-31 15:12 ` [PATCH v2 00/13] drm/display & drm/i915: more struct drm_edid conversions Jani Nikula
13 siblings, 0 replies; 16+ messages in thread
From: Jani Nikula @ 2023-05-30 9:08 UTC (permalink / raw)
To: intel-gfx; +Cc: jani.nikula, Ankit Nautiyal, dri-devel
Convert the remaining uses of struct edid based drm_get_edid(),
drm_connector_update_edid_property() and drm_add_edid_modes() calls to
the struct drm_edid based drm_edid_read_ddc(),
drm_edid_connector_update() and drm_edid_connector_add_modes().
Reviewed-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
.../gpu/drm/i915/display/intel_connector.c | 18 ++---
.../gpu/drm/i915/display/intel_connector.h | 4 +-
drivers/gpu/drm/i915/display/intel_crt.c | 34 +++++----
drivers/gpu/drm/i915/display/intel_dp_mst.c | 10 ++-
drivers/gpu/drm/i915/display/intel_sdvo.c | 73 ++++++++++---------
5 files changed, 74 insertions(+), 65 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_connector.c b/drivers/gpu/drm/i915/display/intel_connector.c
index 257afac34839..00ea71b03ec7 100644
--- a/drivers/gpu/drm/i915/display/intel_connector.c
+++ b/drivers/gpu/drm/i915/display/intel_connector.c
@@ -176,15 +176,15 @@ enum pipe intel_connector_get_pipe(struct intel_connector *connector)
/**
* intel_connector_update_modes - update connector from edid
* @connector: DRM connector device to use
- * @edid: previously read EDID information
+ * @drm_edid: previously read EDID information
*/
int intel_connector_update_modes(struct drm_connector *connector,
- struct edid *edid)
+ const struct drm_edid *drm_edid)
{
int ret;
- drm_connector_update_edid_property(connector, edid);
- ret = drm_add_edid_modes(connector, edid);
+ drm_edid_connector_update(connector, drm_edid);
+ ret = drm_edid_connector_add_modes(connector);
return ret;
}
@@ -199,15 +199,15 @@ int intel_connector_update_modes(struct drm_connector *connector,
int intel_ddc_get_modes(struct drm_connector *connector,
struct i2c_adapter *adapter)
{
- struct edid *edid;
+ const struct drm_edid *drm_edid;
int ret;
- edid = drm_get_edid(connector, adapter);
- if (!edid)
+ drm_edid = drm_edid_read_ddc(connector, adapter);
+ if (!drm_edid)
return 0;
- ret = intel_connector_update_modes(connector, edid);
- kfree(edid);
+ ret = intel_connector_update_modes(connector, drm_edid);
+ drm_edid_free(drm_edid);
return ret;
}
diff --git a/drivers/gpu/drm/i915/display/intel_connector.h b/drivers/gpu/drm/i915/display/intel_connector.h
index 9d2bc261b204..aaf7281462dc 100644
--- a/drivers/gpu/drm/i915/display/intel_connector.h
+++ b/drivers/gpu/drm/i915/display/intel_connector.h
@@ -9,7 +9,7 @@
#include <linux/types.h>
struct drm_connector;
-struct edid;
+struct drm_edid;
struct i2c_adapter;
struct intel_connector;
struct intel_encoder;
@@ -25,7 +25,7 @@ void intel_connector_attach_encoder(struct intel_connector *connector,
bool intel_connector_get_hw_state(struct intel_connector *connector);
enum pipe intel_connector_get_pipe(struct intel_connector *connector);
int intel_connector_update_modes(struct drm_connector *connector,
- struct edid *edid);
+ const struct drm_edid *drm_edid);
int intel_ddc_get_modes(struct drm_connector *c, struct i2c_adapter *adapter);
void intel_attach_force_audio_property(struct drm_connector *connector);
void intel_attach_broadcast_rgb_property(struct drm_connector *connector);
diff --git a/drivers/gpu/drm/i915/display/intel_crt.c b/drivers/gpu/drm/i915/display/intel_crt.c
index 673c03646696..ab7cd5e60a0a 100644
--- a/drivers/gpu/drm/i915/display/intel_crt.c
+++ b/drivers/gpu/drm/i915/display/intel_crt.c
@@ -609,37 +609,38 @@ static bool intel_crt_detect_hotplug(struct drm_connector *connector)
return ret;
}
-static struct edid *intel_crt_get_edid(struct drm_connector *connector,
- struct i2c_adapter *i2c)
+static const struct drm_edid *intel_crt_get_edid(struct drm_connector *connector,
+ struct i2c_adapter *i2c)
{
- struct edid *edid;
+ const struct drm_edid *drm_edid;
- edid = drm_get_edid(connector, i2c);
+ drm_edid = drm_edid_read_ddc(connector, i2c);
- if (!edid && !intel_gmbus_is_forced_bit(i2c)) {
+ if (!drm_edid && !intel_gmbus_is_forced_bit(i2c)) {
drm_dbg_kms(connector->dev,
"CRT GMBUS EDID read failed, retry using GPIO bit-banging\n");
intel_gmbus_force_bit(i2c, true);
- edid = drm_get_edid(connector, i2c);
+ drm_edid = drm_edid_read_ddc(connector, i2c);
intel_gmbus_force_bit(i2c, false);
}
- return edid;
+ return drm_edid;
}
/* local version of intel_ddc_get_modes() to use intel_crt_get_edid() */
static int intel_crt_ddc_get_modes(struct drm_connector *connector,
struct i2c_adapter *adapter)
{
- struct edid *edid;
+ const struct drm_edid *drm_edid;
int ret;
- edid = intel_crt_get_edid(connector, adapter);
- if (!edid)
+ drm_edid = intel_crt_get_edid(connector, adapter);
+ if (!drm_edid)
return 0;
- ret = intel_connector_update_modes(connector, edid);
- kfree(edid);
+ ret = intel_connector_update_modes(connector, drm_edid);
+
+ drm_edid_free(drm_edid);
return ret;
}
@@ -648,14 +649,15 @@ static bool intel_crt_detect_ddc(struct drm_connector *connector)
{
struct intel_crt *crt = intel_attached_crt(to_intel_connector(connector));
struct drm_i915_private *dev_priv = to_i915(crt->base.base.dev);
- struct edid *edid;
+ const struct drm_edid *drm_edid;
struct i2c_adapter *i2c;
bool ret = false;
i2c = intel_gmbus_get_adapter(dev_priv, dev_priv->display.vbt.crt_ddc_pin);
- edid = intel_crt_get_edid(connector, i2c);
+ drm_edid = intel_crt_get_edid(connector, i2c);
- if (edid) {
+ if (drm_edid) {
+ const struct edid *edid = drm_edid_raw(drm_edid);
bool is_digital = edid->input & DRM_EDID_INPUT_DIGITAL;
/*
@@ -676,7 +678,7 @@ static bool intel_crt_detect_ddc(struct drm_connector *connector)
"CRT not detected via DDC:0x50 [no valid EDID found]\n");
}
- kfree(edid);
+ drm_edid_free(drm_edid);
return ret;
}
diff --git a/drivers/gpu/drm/i915/display/intel_dp_mst.c b/drivers/gpu/drm/i915/display/intel_dp_mst.c
index 1d483a83d59c..e3f176a093d2 100644
--- a/drivers/gpu/drm/i915/display/intel_dp_mst.c
+++ b/drivers/gpu/drm/i915/display/intel_dp_mst.c
@@ -836,15 +836,17 @@ static int intel_dp_mst_get_ddc_modes(struct drm_connector *connector)
{
struct intel_connector *intel_connector = to_intel_connector(connector);
struct intel_dp *intel_dp = intel_connector->mst_port;
- struct edid *edid;
+ const struct drm_edid *drm_edid;
int ret;
if (drm_connector_is_unregistered(connector))
return intel_connector_update_modes(connector, NULL);
- edid = drm_dp_mst_get_edid(connector, &intel_dp->mst_mgr, intel_connector->port);
- ret = intel_connector_update_modes(connector, edid);
- kfree(edid);
+ drm_edid = drm_dp_mst_edid_read(connector, &intel_dp->mst_mgr, intel_connector->port);
+
+ ret = intel_connector_update_modes(connector, drm_edid);
+
+ drm_edid_free(drm_edid);
return ret;
}
diff --git a/drivers/gpu/drm/i915/display/intel_sdvo.c b/drivers/gpu/drm/i915/display/intel_sdvo.c
index 2d1b19f73883..21f92123c844 100644
--- a/drivers/gpu/drm/i915/display/intel_sdvo.c
+++ b/drivers/gpu/drm/i915/display/intel_sdvo.c
@@ -2036,22 +2036,23 @@ intel_sdvo_multifunc_encoder(struct intel_sdvo *intel_sdvo)
return hweight16(intel_sdvo->caps.output_flags) > 1;
}
-static struct edid *
+static const struct drm_edid *
intel_sdvo_get_edid(struct drm_connector *connector)
{
struct intel_sdvo *sdvo = intel_attached_sdvo(to_intel_connector(connector));
- return drm_get_edid(connector, &sdvo->ddc);
+ return drm_edid_read_ddc(connector, &sdvo->ddc);
}
/* Mac mini hack -- use the same DDC as the analog connector */
-static struct edid *
+static const struct drm_edid *
intel_sdvo_get_analog_edid(struct drm_connector *connector)
{
- struct drm_i915_private *dev_priv = to_i915(connector->dev);
+ struct drm_i915_private *i915 = to_i915(connector->dev);
+ struct i2c_adapter *i2c;
- return drm_get_edid(connector,
- intel_gmbus_get_adapter(dev_priv,
- dev_priv->display.vbt.crt_ddc_pin));
+ i2c = intel_gmbus_get_adapter(i915, i915->display.vbt.crt_ddc_pin);
+
+ return drm_edid_read_ddc(connector, i2c);
}
static enum drm_connector_status
@@ -2059,11 +2060,11 @@ intel_sdvo_tmds_sink_detect(struct drm_connector *connector)
{
struct intel_sdvo *intel_sdvo = intel_attached_sdvo(to_intel_connector(connector));
enum drm_connector_status status;
- struct edid *edid;
+ const struct drm_edid *drm_edid;
- edid = intel_sdvo_get_edid(connector);
+ drm_edid = intel_sdvo_get_edid(connector);
- if (edid == NULL && intel_sdvo_multifunc_encoder(intel_sdvo)) {
+ if (!drm_edid && intel_sdvo_multifunc_encoder(intel_sdvo)) {
u8 ddc, saved_ddc = intel_sdvo->ddc_bus;
/*
@@ -2072,15 +2073,15 @@ intel_sdvo_tmds_sink_detect(struct drm_connector *connector)
*/
for (ddc = intel_sdvo->ddc_bus >> 1; ddc > 1; ddc >>= 1) {
intel_sdvo->ddc_bus = ddc;
- edid = intel_sdvo_get_edid(connector);
- if (edid)
+ drm_edid = intel_sdvo_get_edid(connector);
+ if (drm_edid)
break;
}
/*
* If we found the EDID on the other bus,
* assume that is the correct DDC bus.
*/
- if (edid == NULL)
+ if (!drm_edid)
intel_sdvo->ddc_bus = saved_ddc;
}
@@ -2088,17 +2089,19 @@ intel_sdvo_tmds_sink_detect(struct drm_connector *connector)
* When there is no edid and no monitor is connected with VGA
* port, try to use the CRT ddc to read the EDID for DVI-connector.
*/
- if (edid == NULL)
- edid = intel_sdvo_get_analog_edid(connector);
+ if (!drm_edid)
+ drm_edid = intel_sdvo_get_analog_edid(connector);
status = connector_status_unknown;
- if (edid != NULL) {
+ if (drm_edid) {
+ const struct edid *edid = drm_edid_raw(drm_edid);
+
/* DDC bus is shared, match EDID to connector type */
if (edid->input & DRM_EDID_INPUT_DIGITAL)
status = connector_status_connected;
else
status = connector_status_disconnected;
- kfree(edid);
+ drm_edid_free(drm_edid);
}
return status;
@@ -2106,8 +2109,9 @@ intel_sdvo_tmds_sink_detect(struct drm_connector *connector)
static bool
intel_sdvo_connector_matches_edid(struct intel_sdvo_connector *sdvo,
- struct edid *edid)
+ const struct drm_edid *drm_edid)
{
+ const struct edid *edid = drm_edid_raw(drm_edid);
bool monitor_is_digital = !!(edid->input & DRM_EDID_INPUT_DIGITAL);
bool connector_is_digital = !!IS_DIGITAL(sdvo);
@@ -2150,22 +2154,23 @@ intel_sdvo_detect(struct drm_connector *connector, bool force)
else if (IS_TMDS(intel_sdvo_connector))
ret = intel_sdvo_tmds_sink_detect(connector);
else {
- struct edid *edid;
+ const struct drm_edid *drm_edid;
/* if we have an edid check it matches the connection */
- edid = intel_sdvo_get_edid(connector);
- if (edid == NULL)
- edid = intel_sdvo_get_analog_edid(connector);
- if (edid != NULL) {
+ drm_edid = intel_sdvo_get_edid(connector);
+ if (!drm_edid)
+ drm_edid = intel_sdvo_get_analog_edid(connector);
+ if (drm_edid) {
if (intel_sdvo_connector_matches_edid(intel_sdvo_connector,
- edid))
+ drm_edid))
ret = connector_status_connected;
else
ret = connector_status_disconnected;
- kfree(edid);
- } else
+ drm_edid_free(drm_edid);
+ } else {
ret = connector_status_connected;
+ }
}
return ret;
@@ -2174,13 +2179,13 @@ intel_sdvo_detect(struct drm_connector *connector, bool force)
static int intel_sdvo_get_ddc_modes(struct drm_connector *connector)
{
int num_modes = 0;
- struct edid *edid;
+ const struct drm_edid *drm_edid;
DRM_DEBUG_KMS("[CONNECTOR:%d:%s]\n",
connector->base.id, connector->name);
/* set the bus switch and get the modes */
- edid = intel_sdvo_get_edid(connector);
+ drm_edid = intel_sdvo_get_edid(connector);
/*
* Mac mini hack. On this device, the DVI-I connector shares one DDC
@@ -2188,17 +2193,17 @@ static int intel_sdvo_get_ddc_modes(struct drm_connector *connector)
* DDC fails, check to see if the analog output is disconnected, in
* which case we'll look there for the digital DDC data.
*/
- if (!edid)
- edid = intel_sdvo_get_analog_edid(connector);
+ if (!drm_edid)
+ drm_edid = intel_sdvo_get_analog_edid(connector);
- if (!edid)
+ if (!drm_edid)
return 0;
if (intel_sdvo_connector_matches_edid(to_intel_sdvo_connector(connector),
- edid))
- num_modes += intel_connector_update_modes(connector, edid);
+ drm_edid))
+ num_modes += intel_connector_update_modes(connector, drm_edid);
- kfree(edid);
+ drm_edid_free(drm_edid);
return num_modes;
}
--
2.39.2
^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: [PATCH v2 00/13] drm/display & drm/i915: more struct drm_edid conversions
2023-05-30 9:08 [PATCH v2 00/13] drm/display & drm/i915: more struct drm_edid conversions Jani Nikula
` (12 preceding siblings ...)
2023-05-30 9:08 ` [PATCH v2 13/13] drm/i915/display: switch the rest of the connectors " Jani Nikula
@ 2023-05-31 15:12 ` Jani Nikula
2023-06-02 11:50 ` [Intel-gfx] " Jani Nikula
13 siblings, 1 reply; 16+ messages in thread
From: Jani Nikula @ 2023-05-31 15:12 UTC (permalink / raw)
To: intel-gfx, Thomas Zimmermann, Maarten Lankhorst, Maxime Ripard
Cc: Ankit Nautiyal, dri-devel
On Tue, 30 May 2023, Jani Nikula <jani.nikula@intel.com> wrote:
> Rebase of https://patchwork.freedesktop.org/series/116813/
>
> Move struct drm_edid conversions forward.
>
> There are still some drm_edid_raw() stragglers, but this nudges things
> forward nicely.
>
> Jani Nikula (13):
> drm/edid: parse display info has_audio similar to is_hdmi
> drm/display/dp_mst: drop has_audio from struct drm_dp_mst_port
> drm/edid: add drm_edid_read_switcheroo()
> drm/edid: make drm_edid_duplicate() safe to call with NULL parameter
> drm/display/dp_mst: convert to struct drm_edid
Maarten, Maxime, Thomas, can I get an ack for merging the above commits
via drm-intel, please?
BR,
Jani.
--
Jani Nikula, Intel Open Source Graphics Center
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [Intel-gfx] [PATCH v2 00/13] drm/display & drm/i915: more struct drm_edid conversions
2023-05-31 15:12 ` [PATCH v2 00/13] drm/display & drm/i915: more struct drm_edid conversions Jani Nikula
@ 2023-06-02 11:50 ` Jani Nikula
0 siblings, 0 replies; 16+ messages in thread
From: Jani Nikula @ 2023-06-02 11:50 UTC (permalink / raw)
To: intel-gfx, Thomas Zimmermann, Maarten Lankhorst, Maxime Ripard; +Cc: dri-devel
On Wed, 31 May 2023, Jani Nikula <jani.nikula@intel.com> wrote:
> On Tue, 30 May 2023, Jani Nikula <jani.nikula@intel.com> wrote:
>> Rebase of https://patchwork.freedesktop.org/series/116813/
>>
>> Move struct drm_edid conversions forward.
>>
>> There are still some drm_edid_raw() stragglers, but this nudges things
>> forward nicely.
>>
>> Jani Nikula (13):
>> drm/edid: parse display info has_audio similar to is_hdmi
>> drm/display/dp_mst: drop has_audio from struct drm_dp_mst_port
>> drm/edid: add drm_edid_read_switcheroo()
>> drm/edid: make drm_edid_duplicate() safe to call with NULL parameter
>> drm/display/dp_mst: convert to struct drm_edid
>
> Maarten, Maxime, Thomas, can I get an ack for merging the above commits
> via drm-intel, please?
Pushed all to drm-intel-next with Thomas' IRC ack.
Thanks,
Jani.
>
> BR,
> Jani.
--
Jani Nikula, Intel Open Source Graphics Center
^ permalink raw reply [flat|nested] 16+ messages in thread
end of thread, other threads:[~2023-06-02 11:50 UTC | newest]
Thread overview: 16+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-05-30 9:08 [PATCH v2 00/13] drm/display & drm/i915: more struct drm_edid conversions Jani Nikula
2023-05-30 9:08 ` [PATCH v2 01/13] drm/edid: parse display info has_audio similar to is_hdmi Jani Nikula
2023-05-30 9:08 ` [PATCH v2 02/13] drm/display/dp_mst: drop has_audio from struct drm_dp_mst_port Jani Nikula
2023-05-30 9:08 ` [PATCH v2 03/13] drm/i915/dp: stop caching has_audio in struct intel_dp Jani Nikula
2023-05-30 9:08 ` [PATCH v2 04/13] drm/i915/dp: stop caching has_hdmi_sink " Jani Nikula
2023-05-30 9:08 ` [PATCH v2 05/13] drm/i915/hdmi: stop caching has_audio in struct intel_hdmi Jani Nikula
2023-05-30 9:08 ` [PATCH v2 06/13] drm/i915/hdmi: stop caching has_hdmi_sink " Jani Nikula
2023-05-30 9:08 ` [PATCH v2 07/13] drm/i915/sdvo: stop caching has_hdmi_monitor in struct intel_sdvo Jani Nikula
2023-05-30 9:08 ` [PATCH v2 08/13] drm/i915/sdvo: stop caching has_hdmi_audio " Jani Nikula
2023-05-30 9:08 ` [PATCH v2 09/13] drm/edid: add drm_edid_read_switcheroo() Jani Nikula
2023-05-30 9:08 ` [PATCH v2 10/13] drm/i915/lvds: switch to drm_edid_read_switcheroo() Jani Nikula
2023-05-30 9:08 ` [PATCH v2 11/13] drm/edid: make drm_edid_duplicate() safe to call with NULL parameter Jani Nikula
2023-05-30 9:08 ` [PATCH v2 12/13] drm/display/dp_mst: convert to struct drm_edid Jani Nikula
2023-05-30 9:08 ` [PATCH v2 13/13] drm/i915/display: switch the rest of the connectors " Jani Nikula
2023-05-31 15:12 ` [PATCH v2 00/13] drm/display & drm/i915: more struct drm_edid conversions Jani Nikula
2023-06-02 11:50 ` [Intel-gfx] " Jani Nikula
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).