nouveau.lists.freedesktop.org archive mirror
 help / color / mirror / Atom feed
* [RESEND 0/6] drm, nouveau/radeon/amdpgu: edid_blob_ptr cleanups
@ 2024-05-10 15:08 Jani Nikula
  2024-05-10 15:08 ` [RESEND 1/6] drm/nouveau: convert to using is_hdmi and has_audio from display info Jani Nikula
                   ` (6 more replies)
  0 siblings, 7 replies; 15+ messages in thread
From: Jani Nikula @ 2024-05-10 15:08 UTC (permalink / raw)
  To: dri-devel; +Cc: amd-gfx, nouveau, intel-gfx, jani.nikula

I've sent this some moths ago, let's try again...

BR,
Jani.

Jani Nikula (6):
  drm/nouveau: convert to using is_hdmi and has_audio from display info
  drm/radeon: convert to using is_hdmi and has_audio from display info
  drm/radeon: remove radeon_connector_edid() and stop using
    edid_blob_ptr
  drm/amdgpu: remove amdgpu_connector_edid() and stop using
    edid_blob_ptr
  drm/edid: add a helper for EDID sysfs property show
  drm/connector: update edid_blob_ptr documentation

 .../gpu/drm/amd/amdgpu/amdgpu_connectors.c    | 16 ---------
 .../gpu/drm/amd/amdgpu/amdgpu_connectors.h    |  1 -
 drivers/gpu/drm/amd/amdgpu/dce_v10_0.c        |  4 +--
 drivers/gpu/drm/amd/amdgpu/dce_v11_0.c        |  4 +--
 drivers/gpu/drm/amd/amdgpu/dce_v6_0.c         |  4 +--
 drivers/gpu/drm/amd/amdgpu/dce_v8_0.c         |  4 +--
 drivers/gpu/drm/drm_crtc_internal.h           |  2 ++
 drivers/gpu/drm/drm_edid.c                    | 33 +++++++++++++++++++
 drivers/gpu/drm/drm_sysfs.c                   | 24 ++------------
 drivers/gpu/drm/nouveau/dispnv50/disp.c       |  8 ++---
 drivers/gpu/drm/nouveau/dispnv50/head.c       |  8 +----
 drivers/gpu/drm/nouveau/nouveau_connector.c   |  2 +-
 drivers/gpu/drm/radeon/atombios_encoders.c    | 10 +++---
 drivers/gpu/drm/radeon/evergreen_hdmi.c       |  5 ++-
 drivers/gpu/drm/radeon/radeon_audio.c         | 13 ++++----
 drivers/gpu/drm/radeon/radeon_connectors.c    | 27 ++++-----------
 drivers/gpu/drm/radeon/radeon_display.c       |  2 +-
 drivers/gpu/drm/radeon/radeon_encoders.c      |  4 +--
 drivers/gpu/drm/radeon/radeon_mode.h          |  2 --
 include/drm/drm_connector.h                   |  6 +++-
 20 files changed, 79 insertions(+), 100 deletions(-)

-- 
2.39.2


^ permalink raw reply	[flat|nested] 15+ messages in thread

* [RESEND 1/6] drm/nouveau: convert to using is_hdmi and has_audio from display info
  2024-05-10 15:08 [RESEND 0/6] drm, nouveau/radeon/amdpgu: edid_blob_ptr cleanups Jani Nikula
@ 2024-05-10 15:08 ` Jani Nikula
  2024-05-10 19:24   ` Lyude Paul
  2024-05-10 15:08 ` [RESEND 2/6] drm/radeon: " Jani Nikula
                   ` (5 subsequent siblings)
  6 siblings, 1 reply; 15+ messages in thread
From: Jani Nikula @ 2024-05-10 15:08 UTC (permalink / raw)
  To: dri-devel
  Cc: amd-gfx, nouveau, intel-gfx, jani.nikula, Karol Herbst,
	Lyude Paul, Danilo Krummrich

Prefer the parsed results for is_hdmi and has_audio in display info over
calling drm_detect_hdmi_monitor() and drm_detect_monitor_audio(),
respectively.

Conveniently, this also removes the need to use edid_blob_ptr.

v2: Reverse a backwards if condition (Ilia)

Cc: Karol Herbst <kherbst@redhat.com>
Cc: Lyude Paul <lyude@redhat.com>
Cc: Danilo Krummrich <dakr@redhat.com>
Cc: nouveau@lists.freedesktop.org
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/nouveau/dispnv50/disp.c     | 8 ++++----
 drivers/gpu/drm/nouveau/dispnv50/head.c     | 8 +-------
 drivers/gpu/drm/nouveau/nouveau_connector.c | 2 +-
 3 files changed, 6 insertions(+), 12 deletions(-)

diff --git a/drivers/gpu/drm/nouveau/dispnv50/disp.c b/drivers/gpu/drm/nouveau/dispnv50/disp.c
index 0c3d88ad0b0e..168c27213287 100644
--- a/drivers/gpu/drm/nouveau/dispnv50/disp.c
+++ b/drivers/gpu/drm/nouveau/dispnv50/disp.c
@@ -751,7 +751,7 @@ nv50_audio_enable(struct drm_encoder *encoder, struct nouveau_crtc *nv_crtc,
 	struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder);
 	struct nvif_outp *outp = &nv_encoder->outp;
 
-	if (!nv50_audio_supported(encoder) || !drm_detect_monitor_audio(nv_connector->edid))
+	if (!nv50_audio_supported(encoder) || !nv_connector->base.display_info.has_audio)
 		return;
 
 	mutex_lock(&drm->audio.lock);
@@ -1765,7 +1765,7 @@ nv50_sor_atomic_enable(struct drm_encoder *encoder, struct drm_atomic_state *sta
 	if ((disp->disp->object.oclass == GT214_DISP ||
 	     disp->disp->object.oclass >= GF110_DISP) &&
 	    nv_encoder->dcb->type != DCB_OUTPUT_LVDS &&
-	    drm_detect_monitor_audio(nv_connector->edid))
+	    nv_connector->base.display_info.has_audio)
 		hda = true;
 
 	if (!nvif_outp_acquired(outp))
@@ -1774,7 +1774,7 @@ nv50_sor_atomic_enable(struct drm_encoder *encoder, struct drm_atomic_state *sta
 	switch (nv_encoder->dcb->type) {
 	case DCB_OUTPUT_TMDS:
 		if (disp->disp->object.oclass != NV50_DISP &&
-		    drm_detect_hdmi_monitor(nv_connector->edid))
+		    nv_connector->base.display_info.is_hdmi)
 			nv50_hdmi_enable(encoder, nv_crtc, nv_connector, state, mode, hda);
 
 		if (nv_encoder->outp.or.link & 1) {
@@ -1787,7 +1787,7 @@ nv50_sor_atomic_enable(struct drm_encoder *encoder, struct drm_atomic_state *sta
 			 */
 			if (mode->clock >= 165000 &&
 			    nv_encoder->dcb->duallink_possible &&
-			    !drm_detect_hdmi_monitor(nv_connector->edid))
+			    !nv_connector->base.display_info.is_hdmi)
 				proto = NV507D_SOR_SET_CONTROL_PROTOCOL_DUAL_TMDS;
 		} else {
 			proto = NV507D_SOR_SET_CONTROL_PROTOCOL_SINGLE_TMDS_B;
diff --git a/drivers/gpu/drm/nouveau/dispnv50/head.c b/drivers/gpu/drm/nouveau/dispnv50/head.c
index 83355dbc15ee..d7c74cc43ba5 100644
--- a/drivers/gpu/drm/nouveau/dispnv50/head.c
+++ b/drivers/gpu/drm/nouveau/dispnv50/head.c
@@ -127,14 +127,8 @@ nv50_head_atomic_check_view(struct nv50_head_atom *armh,
 	struct drm_display_mode *omode = &asyh->state.adjusted_mode;
 	struct drm_display_mode *umode = &asyh->state.mode;
 	int mode = asyc->scaler.mode;
-	struct edid *edid;
 	int umode_vdisplay, omode_hdisplay, omode_vdisplay;
 
-	if (connector->edid_blob_ptr)
-		edid = (struct edid *)connector->edid_blob_ptr->data;
-	else
-		edid = NULL;
-
 	if (!asyc->scaler.full) {
 		if (mode == DRM_MODE_SCALE_NONE)
 			omode = umode;
@@ -162,7 +156,7 @@ nv50_head_atomic_check_view(struct nv50_head_atom *armh,
 	 */
 	if ((asyc->scaler.underscan.mode == UNDERSCAN_ON ||
 	    (asyc->scaler.underscan.mode == UNDERSCAN_AUTO &&
-	     drm_detect_hdmi_monitor(edid)))) {
+	     connector->display_info.is_hdmi))) {
 		u32 bX = asyc->scaler.underscan.hborder;
 		u32 bY = asyc->scaler.underscan.vborder;
 		u32 r = (asyh->view.oH << 19) / asyh->view.oW;
diff --git a/drivers/gpu/drm/nouveau/nouveau_connector.c b/drivers/gpu/drm/nouveau/nouveau_connector.c
index 856b3ef5edb8..938832a6af15 100644
--- a/drivers/gpu/drm/nouveau/nouveau_connector.c
+++ b/drivers/gpu/drm/nouveau/nouveau_connector.c
@@ -1034,7 +1034,7 @@ get_tmds_link_bandwidth(struct drm_connector *connector)
 	unsigned duallink_scale =
 		nouveau_duallink && nv_encoder->dcb->duallink_possible ? 2 : 1;
 
-	if (drm_detect_hdmi_monitor(nv_connector->edid)) {
+	if (nv_connector->base.display_info.is_hdmi) {
 		info = &nv_connector->base.display_info;
 		duallink_scale = 1;
 	}
-- 
2.39.2


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [RESEND 2/6] drm/radeon: convert to using is_hdmi and has_audio from display info
  2024-05-10 15:08 [RESEND 0/6] drm, nouveau/radeon/amdpgu: edid_blob_ptr cleanups Jani Nikula
  2024-05-10 15:08 ` [RESEND 1/6] drm/nouveau: convert to using is_hdmi and has_audio from display info Jani Nikula
@ 2024-05-10 15:08 ` Jani Nikula
  2024-05-13 16:56   ` Robert Foss
  2024-05-10 15:08 ` [RESEND 3/6] drm/radeon: remove radeon_connector_edid() and stop using edid_blob_ptr Jani Nikula
                   ` (4 subsequent siblings)
  6 siblings, 1 reply; 15+ messages in thread
From: Jani Nikula @ 2024-05-10 15:08 UTC (permalink / raw)
  To: dri-devel
  Cc: amd-gfx, nouveau, intel-gfx, jani.nikula, Alex Deucher,
	Christian König, Pan, Xinhui

Prefer the parsed results for is_hdmi and has_audio in display info over
calling drm_detect_hdmi_monitor() and drm_detect_monitor_audio(),
respectively.

Cc: Alex Deucher <alexander.deucher@amd.com>
Cc: Christian König <christian.koenig@amd.com>
Cc: Pan, Xinhui <Xinhui.Pan@amd.com>
Cc: amd-gfx@lists.freedesktop.org
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/radeon/atombios_encoders.c | 10 +++++-----
 drivers/gpu/drm/radeon/evergreen_hdmi.c    |  5 ++---
 drivers/gpu/drm/radeon/radeon_audio.c      |  6 +++---
 drivers/gpu/drm/radeon/radeon_connectors.c | 12 ++++++------
 drivers/gpu/drm/radeon/radeon_display.c    |  2 +-
 drivers/gpu/drm/radeon/radeon_encoders.c   |  4 ++--
 6 files changed, 19 insertions(+), 20 deletions(-)

diff --git a/drivers/gpu/drm/radeon/atombios_encoders.c b/drivers/gpu/drm/radeon/atombios_encoders.c
index 2bff0d9e20f5..0aa395fac36f 100644
--- a/drivers/gpu/drm/radeon/atombios_encoders.c
+++ b/drivers/gpu/drm/radeon/atombios_encoders.c
@@ -701,7 +701,7 @@ atombios_get_encoder_mode(struct drm_encoder *encoder)
 			if (radeon_connector->use_digital &&
 			    (radeon_connector->audio == RADEON_AUDIO_ENABLE))
 				return ATOM_ENCODER_MODE_HDMI;
-			else if (drm_detect_hdmi_monitor(radeon_connector_edid(connector)) &&
+			else if (connector->display_info.is_hdmi &&
 				 (radeon_connector->audio == RADEON_AUDIO_AUTO))
 				return ATOM_ENCODER_MODE_HDMI;
 			else if (radeon_connector->use_digital)
@@ -720,7 +720,7 @@ atombios_get_encoder_mode(struct drm_encoder *encoder)
 		if (radeon_audio != 0) {
 			if (radeon_connector->audio == RADEON_AUDIO_ENABLE)
 				return ATOM_ENCODER_MODE_HDMI;
-			else if (drm_detect_hdmi_monitor(radeon_connector_edid(connector)) &&
+			else if (connector->display_info.is_hdmi &&
 				 (radeon_connector->audio == RADEON_AUDIO_AUTO))
 				return ATOM_ENCODER_MODE_HDMI;
 			else
@@ -737,14 +737,14 @@ atombios_get_encoder_mode(struct drm_encoder *encoder)
 		if ((dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) ||
 		    (dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_eDP)) {
 			if (radeon_audio != 0 &&
-			    drm_detect_monitor_audio(radeon_connector_edid(connector)) &&
+			    connector->display_info.has_audio &&
 			    ASIC_IS_DCE4(rdev) && !ASIC_IS_DCE5(rdev))
 				return ATOM_ENCODER_MODE_DP_AUDIO;
 			return ATOM_ENCODER_MODE_DP;
 		} else if (radeon_audio != 0) {
 			if (radeon_connector->audio == RADEON_AUDIO_ENABLE)
 				return ATOM_ENCODER_MODE_HDMI;
-			else if (drm_detect_hdmi_monitor(radeon_connector_edid(connector)) &&
+			else if (connector->display_info.is_hdmi &&
 				 (radeon_connector->audio == RADEON_AUDIO_AUTO))
 				return ATOM_ENCODER_MODE_HDMI;
 			else
@@ -755,7 +755,7 @@ atombios_get_encoder_mode(struct drm_encoder *encoder)
 		break;
 	case DRM_MODE_CONNECTOR_eDP:
 		if (radeon_audio != 0 &&
-		    drm_detect_monitor_audio(radeon_connector_edid(connector)) &&
+		    connector->display_info.has_audio &&
 		    ASIC_IS_DCE4(rdev) && !ASIC_IS_DCE5(rdev))
 			return ATOM_ENCODER_MODE_DP_AUDIO;
 		return ATOM_ENCODER_MODE_DP;
diff --git a/drivers/gpu/drm/radeon/evergreen_hdmi.c b/drivers/gpu/drm/radeon/evergreen_hdmi.c
index 681119c91d94..09dda114e218 100644
--- a/drivers/gpu/drm/radeon/evergreen_hdmi.c
+++ b/drivers/gpu/drm/radeon/evergreen_hdmi.c
@@ -412,7 +412,7 @@ void evergreen_hdmi_enable(struct drm_encoder *encoder, bool enable)
 	if (enable) {
 		struct drm_connector *connector = radeon_get_connector_for_encoder(encoder);
 
-		if (connector && drm_detect_monitor_audio(radeon_connector_edid(connector))) {
+		if (connector && connector->display_info.has_audio) {
 			WREG32(HDMI_INFOFRAME_CONTROL0 + dig->afmt->offset,
 			       HDMI_AVI_INFO_SEND | /* enable AVI info frames */
 			       HDMI_AVI_INFO_CONT | /* required for audio info values to be updated */
@@ -450,8 +450,7 @@ void evergreen_dp_enable(struct drm_encoder *encoder, bool enable)
 	if (!dig || !dig->afmt)
 		return;
 
-	if (enable && connector &&
-	    drm_detect_monitor_audio(radeon_connector_edid(connector))) {
+	if (enable && connector && connector->display_info.has_audio) {
 		struct drm_connector *connector = radeon_get_connector_for_encoder(encoder);
 		struct radeon_connector *radeon_connector = to_radeon_connector(connector);
 		struct radeon_connector_atom_dig *dig_connector;
diff --git a/drivers/gpu/drm/radeon/radeon_audio.c b/drivers/gpu/drm/radeon/radeon_audio.c
index 74753bb26d33..16c10db3ce6f 100644
--- a/drivers/gpu/drm/radeon/radeon_audio.c
+++ b/drivers/gpu/drm/radeon/radeon_audio.c
@@ -409,7 +409,7 @@ void radeon_audio_detect(struct drm_connector *connector,
 			radeon_encoder->audio = rdev->audio.hdmi_funcs;
 		}
 
-		if (drm_detect_monitor_audio(radeon_connector_edid(connector))) {
+		if (connector->display_info.has_audio) {
 			if (!dig->pin)
 				dig->pin = radeon_audio_get_pin(encoder);
 			radeon_audio_enable(rdev, dig->pin, 0xf);
@@ -646,7 +646,7 @@ static void radeon_audio_hdmi_mode_set(struct drm_encoder *encoder,
 	if (!connector)
 		return;
 
-	if (drm_detect_monitor_audio(radeon_connector_edid(connector))) {
+	if (connector->display_info.has_audio) {
 		radeon_audio_set_mute(encoder, true);
 
 		radeon_audio_write_speaker_allocation(encoder);
@@ -686,7 +686,7 @@ static void radeon_audio_dp_mode_set(struct drm_encoder *encoder,
 	if (!connector)
 		return;
 
-	if (drm_detect_monitor_audio(radeon_connector_edid(connector))) {
+	if (connector->display_info.has_audio) {
 		radeon_audio_write_speaker_allocation(encoder);
 		radeon_audio_write_sad_regs(encoder);
 		radeon_audio_write_latency_fields(encoder, mode);
diff --git a/drivers/gpu/drm/radeon/radeon_connectors.c b/drivers/gpu/drm/radeon/radeon_connectors.c
index b84b58926106..81b5c3c8f658 100644
--- a/drivers/gpu/drm/radeon/radeon_connectors.c
+++ b/drivers/gpu/drm/radeon/radeon_connectors.c
@@ -109,7 +109,7 @@ int radeon_get_monitor_bpc(struct drm_connector *connector)
 	case DRM_MODE_CONNECTOR_DVII:
 	case DRM_MODE_CONNECTOR_HDMIB:
 		if (radeon_connector->use_digital) {
-			if (drm_detect_hdmi_monitor(radeon_connector_edid(connector))) {
+			if (connector->display_info.is_hdmi) {
 				if (connector->display_info.bpc)
 					bpc = connector->display_info.bpc;
 			}
@@ -117,7 +117,7 @@ int radeon_get_monitor_bpc(struct drm_connector *connector)
 		break;
 	case DRM_MODE_CONNECTOR_DVID:
 	case DRM_MODE_CONNECTOR_HDMIA:
-		if (drm_detect_hdmi_monitor(radeon_connector_edid(connector))) {
+		if (connector->display_info.is_hdmi) {
 			if (connector->display_info.bpc)
 				bpc = connector->display_info.bpc;
 		}
@@ -126,7 +126,7 @@ int radeon_get_monitor_bpc(struct drm_connector *connector)
 		dig_connector = radeon_connector->con_priv;
 		if ((dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) ||
 		    (dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_eDP) ||
-		    drm_detect_hdmi_monitor(radeon_connector_edid(connector))) {
+		    connector->display_info.is_hdmi) {
 			if (connector->display_info.bpc)
 				bpc = connector->display_info.bpc;
 		}
@@ -150,7 +150,7 @@ int radeon_get_monitor_bpc(struct drm_connector *connector)
 		break;
 	}
 
-	if (drm_detect_hdmi_monitor(radeon_connector_edid(connector))) {
+	if (connector->display_info.is_hdmi) {
 		/* hdmi deep color only implemented on DCE4+ */
 		if ((bpc > 8) && !ASIC_IS_DCE4(rdev)) {
 			DRM_DEBUG("%s: HDMI deep color %d bpc unsupported. Using 8 bpc.\n",
@@ -1478,7 +1478,7 @@ static enum drm_mode_status radeon_dvi_mode_valid(struct drm_connector *connecto
 		    (radeon_connector->connector_object_id == CONNECTOR_OBJECT_ID_DUAL_LINK_DVI_D) ||
 		    (radeon_connector->connector_object_id == CONNECTOR_OBJECT_ID_HDMI_TYPE_B))
 			return MODE_OK;
-		else if (ASIC_IS_DCE6(rdev) && drm_detect_hdmi_monitor(radeon_connector_edid(connector))) {
+		else if (ASIC_IS_DCE6(rdev) && connector->display_info.is_hdmi) {
 			/* HDMI 1.3+ supports max clock of 340 Mhz */
 			if (mode->clock > 340000)
 				return MODE_CLOCK_HIGH;
@@ -1774,7 +1774,7 @@ static enum drm_mode_status radeon_dp_mode_valid(struct drm_connector *connector
 		    (radeon_dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_eDP)) {
 			return radeon_dp_mode_valid_helper(connector, mode);
 		} else {
-			if (ASIC_IS_DCE6(rdev) && drm_detect_hdmi_monitor(radeon_connector_edid(connector))) {
+			if (ASIC_IS_DCE6(rdev) && connector->display_info.is_hdmi) {
 				/* HDMI 1.3+ supports max clock of 340 Mhz */
 				if (mode->clock > 340000)
 					return MODE_CLOCK_HIGH;
diff --git a/drivers/gpu/drm/radeon/radeon_display.c b/drivers/gpu/drm/radeon/radeon_display.c
index 5f1d24d3120c..843383f7237f 100644
--- a/drivers/gpu/drm/radeon/radeon_display.c
+++ b/drivers/gpu/drm/radeon/radeon_display.c
@@ -1722,7 +1722,7 @@ bool radeon_crtc_scaling_mode_fixup(struct drm_crtc *crtc,
 			    (!(mode->flags & DRM_MODE_FLAG_INTERLACE)) &&
 			    ((radeon_encoder->underscan_type == UNDERSCAN_ON) ||
 			     ((radeon_encoder->underscan_type == UNDERSCAN_AUTO) &&
-			      drm_detect_hdmi_monitor(radeon_connector_edid(connector)) &&
+			      connector->display_info.is_hdmi &&
 			      is_hdtv_mode(mode)))) {
 				if (radeon_encoder->underscan_hborder != 0)
 					radeon_crtc->h_border = radeon_encoder->underscan_hborder;
diff --git a/drivers/gpu/drm/radeon/radeon_encoders.c b/drivers/gpu/drm/radeon/radeon_encoders.c
index 3de3dce9e89d..0f723292409e 100644
--- a/drivers/gpu/drm/radeon/radeon_encoders.c
+++ b/drivers/gpu/drm/radeon/radeon_encoders.c
@@ -386,7 +386,7 @@ bool radeon_dig_monitor_is_duallink(struct drm_encoder *encoder,
 	case DRM_MODE_CONNECTOR_HDMIB:
 		if (radeon_connector->use_digital) {
 			/* HDMI 1.3 supports up to 340 Mhz over single link */
-			if (ASIC_IS_DCE6(rdev) && drm_detect_hdmi_monitor(radeon_connector_edid(connector))) {
+			if (ASIC_IS_DCE6(rdev) && connector->display_info.is_hdmi) {
 				if (pixel_clock > 340000)
 					return true;
 				else
@@ -408,7 +408,7 @@ bool radeon_dig_monitor_is_duallink(struct drm_encoder *encoder,
 			return false;
 		else {
 			/* HDMI 1.3 supports up to 340 Mhz over single link */
-			if (ASIC_IS_DCE6(rdev) && drm_detect_hdmi_monitor(radeon_connector_edid(connector))) {
+			if (ASIC_IS_DCE6(rdev) && connector->display_info.is_hdmi) {
 				if (pixel_clock > 340000)
 					return true;
 				else
-- 
2.39.2


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [RESEND 3/6] drm/radeon: remove radeon_connector_edid() and stop using edid_blob_ptr
  2024-05-10 15:08 [RESEND 0/6] drm, nouveau/radeon/amdpgu: edid_blob_ptr cleanups Jani Nikula
  2024-05-10 15:08 ` [RESEND 1/6] drm/nouveau: convert to using is_hdmi and has_audio from display info Jani Nikula
  2024-05-10 15:08 ` [RESEND 2/6] drm/radeon: " Jani Nikula
@ 2024-05-10 15:08 ` Jani Nikula
  2024-05-13 16:59   ` Robert Foss
  2024-05-10 15:08 ` [RESEND 4/6] drm/amdgpu: remove amdgpu_connector_edid() " Jani Nikula
                   ` (3 subsequent siblings)
  6 siblings, 1 reply; 15+ messages in thread
From: Jani Nikula @ 2024-05-10 15:08 UTC (permalink / raw)
  To: dri-devel
  Cc: amd-gfx, nouveau, intel-gfx, jani.nikula, Alex Deucher,
	Christian König, Pan, Xinhui

radeon_connector_edid() copies the EDID from edid_blob_ptr as a side
effect if radeon_connector->edid isn't initialized. However, everywhere
that the returned EDID is used, the EDID should have been set
beforehands.

Only the drm EDID code should look at the EDID property, anyway, so stop
using it.

Cc: Alex Deucher <alexander.deucher@amd.com>
Cc: Christian König <christian.koenig@amd.com>
Cc: Pan, Xinhui <Xinhui.Pan@amd.com>
Cc: amd-gfx@lists.freedesktop.org
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/radeon/radeon_audio.c      |  7 ++++---
 drivers/gpu/drm/radeon/radeon_connectors.c | 15 ---------------
 drivers/gpu/drm/radeon/radeon_mode.h       |  2 --
 3 files changed, 4 insertions(+), 20 deletions(-)

diff --git a/drivers/gpu/drm/radeon/radeon_audio.c b/drivers/gpu/drm/radeon/radeon_audio.c
index 16c10db3ce6f..0bcd767b9f47 100644
--- a/drivers/gpu/drm/radeon/radeon_audio.c
+++ b/drivers/gpu/drm/radeon/radeon_audio.c
@@ -303,6 +303,7 @@ void radeon_audio_endpoint_wreg(struct radeon_device *rdev, u32 offset,
 static void radeon_audio_write_sad_regs(struct drm_encoder *encoder)
 {
 	struct drm_connector *connector = radeon_get_connector_for_encoder(encoder);
+	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
 	struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
 	struct cea_sad *sads;
 	int sad_count;
@@ -310,7 +311,7 @@ static void radeon_audio_write_sad_regs(struct drm_encoder *encoder)
 	if (!connector)
 		return;
 
-	sad_count = drm_edid_to_sad(radeon_connector_edid(connector), &sads);
+	sad_count = drm_edid_to_sad(radeon_connector->edid, &sads);
 	if (sad_count < 0)
 		DRM_ERROR("Couldn't read SADs: %d\n", sad_count);
 	if (sad_count <= 0)
@@ -326,6 +327,7 @@ static void radeon_audio_write_sad_regs(struct drm_encoder *encoder)
 static void radeon_audio_write_speaker_allocation(struct drm_encoder *encoder)
 {
 	struct drm_connector *connector = radeon_get_connector_for_encoder(encoder);
+	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
 	struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
 	u8 *sadb = NULL;
 	int sad_count;
@@ -333,8 +335,7 @@ static void radeon_audio_write_speaker_allocation(struct drm_encoder *encoder)
 	if (!connector)
 		return;
 
-	sad_count = drm_edid_to_speaker_allocation(radeon_connector_edid(connector),
-						   &sadb);
+	sad_count = drm_edid_to_speaker_allocation(radeon_connector->edid, &sadb);
 	if (sad_count < 0) {
 		DRM_DEBUG("Couldn't read Speaker Allocation Data Block: %d\n",
 			  sad_count);
diff --git a/drivers/gpu/drm/radeon/radeon_connectors.c b/drivers/gpu/drm/radeon/radeon_connectors.c
index 81b5c3c8f658..80879e946342 100644
--- a/drivers/gpu/drm/radeon/radeon_connectors.c
+++ b/drivers/gpu/drm/radeon/radeon_connectors.c
@@ -255,21 +255,6 @@ static struct drm_encoder *radeon_find_encoder(struct drm_connector *connector,
 	return NULL;
 }
 
-struct edid *radeon_connector_edid(struct drm_connector *connector)
-{
-	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
-	struct drm_property_blob *edid_blob = connector->edid_blob_ptr;
-
-	if (radeon_connector->edid) {
-		return radeon_connector->edid;
-	} else if (edid_blob) {
-		struct edid *edid = kmemdup(edid_blob->data, edid_blob->length, GFP_KERNEL);
-		if (edid)
-			radeon_connector->edid = edid;
-	}
-	return radeon_connector->edid;
-}
-
 static void radeon_connector_get_edid(struct drm_connector *connector)
 {
 	struct drm_device *dev = connector->dev;
diff --git a/drivers/gpu/drm/radeon/radeon_mode.h b/drivers/gpu/drm/radeon/radeon_mode.h
index 546381a5c918..e0a5af180801 100644
--- a/drivers/gpu/drm/radeon/radeon_mode.h
+++ b/drivers/gpu/drm/radeon/radeon_mode.h
@@ -701,8 +701,6 @@ extern u16 radeon_connector_encoder_get_dp_bridge_encoder_id(struct drm_connecto
 extern bool radeon_connector_is_dp12_capable(struct drm_connector *connector);
 extern int radeon_get_monitor_bpc(struct drm_connector *connector);
 
-extern struct edid *radeon_connector_edid(struct drm_connector *connector);
-
 extern void radeon_connector_hotplug(struct drm_connector *connector);
 extern int radeon_dp_mode_valid_helper(struct drm_connector *connector,
 				       struct drm_display_mode *mode);
-- 
2.39.2


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [RESEND 4/6] drm/amdgpu: remove amdgpu_connector_edid() and stop using edid_blob_ptr
  2024-05-10 15:08 [RESEND 0/6] drm, nouveau/radeon/amdpgu: edid_blob_ptr cleanups Jani Nikula
                   ` (2 preceding siblings ...)
  2024-05-10 15:08 ` [RESEND 3/6] drm/radeon: remove radeon_connector_edid() and stop using edid_blob_ptr Jani Nikula
@ 2024-05-10 15:08 ` Jani Nikula
  2024-05-13 17:01   ` Robert Foss
  2024-05-10 15:08 ` [RESEND 5/6] drm/edid: add a helper for EDID sysfs property show Jani Nikula
                   ` (2 subsequent siblings)
  6 siblings, 1 reply; 15+ messages in thread
From: Jani Nikula @ 2024-05-10 15:08 UTC (permalink / raw)
  To: dri-devel
  Cc: amd-gfx, nouveau, intel-gfx, jani.nikula, Alex Deucher,
	Christian König, Pan, Xinhui

amdgpu_connector_edid() copies the EDID from edid_blob_ptr as a side
effect if amdgpu_connector->edid isn't initialized. However, everywhere
that the returned EDID is used, the EDID should have been set
beforehands.

Only the drm EDID code should look at the EDID property, anyway, so stop
using it.

Cc: Alex Deucher <alexander.deucher@amd.com>
Cc: Christian König <christian.koenig@amd.com>
Cc: Pan, Xinhui <Xinhui.Pan@amd.com>
Cc: amd-gfx@lists.freedesktop.org
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c | 16 ----------------
 drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.h |  1 -
 drivers/gpu/drm/amd/amdgpu/dce_v10_0.c         |  4 ++--
 drivers/gpu/drm/amd/amdgpu/dce_v11_0.c         |  4 ++--
 drivers/gpu/drm/amd/amdgpu/dce_v6_0.c          |  4 ++--
 drivers/gpu/drm/amd/amdgpu/dce_v8_0.c          |  4 ++--
 6 files changed, 8 insertions(+), 25 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
index 9caba10315a8..cae7479c3ecf 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
@@ -246,22 +246,6 @@ amdgpu_connector_find_encoder(struct drm_connector *connector,
 	return NULL;
 }
 
-struct edid *amdgpu_connector_edid(struct drm_connector *connector)
-{
-	struct amdgpu_connector *amdgpu_connector = to_amdgpu_connector(connector);
-	struct drm_property_blob *edid_blob = connector->edid_blob_ptr;
-
-	if (amdgpu_connector->edid) {
-		return amdgpu_connector->edid;
-	} else if (edid_blob) {
-		struct edid *edid = kmemdup(edid_blob->data, edid_blob->length, GFP_KERNEL);
-
-		if (edid)
-			amdgpu_connector->edid = edid;
-	}
-	return amdgpu_connector->edid;
-}
-
 static struct edid *
 amdgpu_connector_get_hardcoded_edid(struct amdgpu_device *adev)
 {
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.h
index 61fcef15ad72..eff833b6ed31 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.h
@@ -24,7 +24,6 @@
 #ifndef __AMDGPU_CONNECTORS_H__
 #define __AMDGPU_CONNECTORS_H__
 
-struct edid *amdgpu_connector_edid(struct drm_connector *connector);
 void amdgpu_connector_hotplug(struct drm_connector *connector);
 int amdgpu_connector_get_monitor_bpc(struct drm_connector *connector);
 u16 amdgpu_connector_encoder_get_dp_bridge_encoder_id(struct drm_connector *connector);
diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
index b44fce44c066..dddb5fe16f2c 100644
--- a/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
@@ -1299,7 +1299,7 @@ static void dce_v10_0_audio_write_speaker_allocation(struct drm_encoder *encoder
 		return;
 	}
 
-	sad_count = drm_edid_to_speaker_allocation(amdgpu_connector_edid(connector), &sadb);
+	sad_count = drm_edid_to_speaker_allocation(amdgpu_connector->edid, &sadb);
 	if (sad_count < 0) {
 		DRM_ERROR("Couldn't read Speaker Allocation Data Block: %d\n", sad_count);
 		sad_count = 0;
@@ -1369,7 +1369,7 @@ static void dce_v10_0_audio_write_sad_regs(struct drm_encoder *encoder)
 		return;
 	}
 
-	sad_count = drm_edid_to_sad(amdgpu_connector_edid(connector), &sads);
+	sad_count = drm_edid_to_sad(amdgpu_connector->edid, &sads);
 	if (sad_count < 0)
 		DRM_ERROR("Couldn't read SADs: %d\n", sad_count);
 	if (sad_count <= 0)
diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
index 80b2e7f79acf..11780e4d7e9f 100644
--- a/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
@@ -1331,7 +1331,7 @@ static void dce_v11_0_audio_write_speaker_allocation(struct drm_encoder *encoder
 		return;
 	}
 
-	sad_count = drm_edid_to_speaker_allocation(amdgpu_connector_edid(connector), &sadb);
+	sad_count = drm_edid_to_speaker_allocation(amdgpu_connector->edid, &sadb);
 	if (sad_count < 0) {
 		DRM_ERROR("Couldn't read Speaker Allocation Data Block: %d\n", sad_count);
 		sad_count = 0;
@@ -1401,7 +1401,7 @@ static void dce_v11_0_audio_write_sad_regs(struct drm_encoder *encoder)
 		return;
 	}
 
-	sad_count = drm_edid_to_sad(amdgpu_connector_edid(connector), &sads);
+	sad_count = drm_edid_to_sad(amdgpu_connector->edid, &sads);
 	if (sad_count < 0)
 		DRM_ERROR("Couldn't read SADs: %d\n", sad_count);
 	if (sad_count <= 0)
diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c
index db20012600f5..05c0df97f01d 100644
--- a/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c
@@ -1217,7 +1217,7 @@ static void dce_v6_0_audio_write_speaker_allocation(struct drm_encoder *encoder)
 		return;
 	}
 
-	sad_count = drm_edid_to_speaker_allocation(amdgpu_connector_edid(connector), &sadb);
+	sad_count = drm_edid_to_speaker_allocation(amdgpu_connector->edid, &sadb);
 	if (sad_count < 0) {
 		DRM_ERROR("Couldn't read Speaker Allocation Data Block: %d\n", sad_count);
 		sad_count = 0;
@@ -1292,7 +1292,7 @@ static void dce_v6_0_audio_write_sad_regs(struct drm_encoder *encoder)
 		return;
 	}
 
-	sad_count = drm_edid_to_sad(amdgpu_connector_edid(connector), &sads);
+	sad_count = drm_edid_to_sad(amdgpu_connector->edid, &sads);
 	if (sad_count < 0)
 		DRM_ERROR("Couldn't read SADs: %d\n", sad_count);
 	if (sad_count <= 0)
diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
index 5b56100ec902..dc73e301d937 100644
--- a/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
@@ -1272,7 +1272,7 @@ static void dce_v8_0_audio_write_speaker_allocation(struct drm_encoder *encoder)
 		return;
 	}
 
-	sad_count = drm_edid_to_speaker_allocation(amdgpu_connector_edid(connector), &sadb);
+	sad_count = drm_edid_to_speaker_allocation(amdgpu_connector->edid, &sadb);
 	if (sad_count < 0) {
 		DRM_ERROR("Couldn't read Speaker Allocation Data Block: %d\n", sad_count);
 		sad_count = 0;
@@ -1340,7 +1340,7 @@ static void dce_v8_0_audio_write_sad_regs(struct drm_encoder *encoder)
 		return;
 	}
 
-	sad_count = drm_edid_to_sad(amdgpu_connector_edid(connector), &sads);
+	sad_count = drm_edid_to_sad(amdgpu_connector->edid, &sads);
 	if (sad_count < 0)
 		DRM_ERROR("Couldn't read SADs: %d\n", sad_count);
 	if (sad_count <= 0)
-- 
2.39.2


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [RESEND 5/6] drm/edid: add a helper for EDID sysfs property show
  2024-05-10 15:08 [RESEND 0/6] drm, nouveau/radeon/amdpgu: edid_blob_ptr cleanups Jani Nikula
                   ` (3 preceding siblings ...)
  2024-05-10 15:08 ` [RESEND 4/6] drm/amdgpu: remove amdgpu_connector_edid() " Jani Nikula
@ 2024-05-10 15:08 ` Jani Nikula
  2024-05-10 15:08 ` [RESEND 6/6] drm/connector: update edid_blob_ptr documentation Jani Nikula
  2024-05-10 15:45 ` [RESEND 0/6] drm, nouveau/radeon/amdpgu: edid_blob_ptr cleanups Alex Deucher
  6 siblings, 0 replies; 15+ messages in thread
From: Jani Nikula @ 2024-05-10 15:08 UTC (permalink / raw)
  To: dri-devel; +Cc: amd-gfx, nouveau, intel-gfx, jani.nikula

Add a helper to get the EDID property for sysfs property show. This
hides all the edid_blob_ptr usage within drm_edid.c.

Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/drm_crtc_internal.h |  2 ++
 drivers/gpu/drm/drm_edid.c          | 33 +++++++++++++++++++++++++++++
 drivers/gpu/drm/drm_sysfs.c         | 24 ++-------------------
 3 files changed, 37 insertions(+), 22 deletions(-)

diff --git a/drivers/gpu/drm/drm_crtc_internal.h b/drivers/gpu/drm/drm_crtc_internal.h
index 25aaae937ceb..20e9d7b206a2 100644
--- a/drivers/gpu/drm/drm_crtc_internal.h
+++ b/drivers/gpu/drm/drm_crtc_internal.h
@@ -303,6 +303,8 @@ const u8 *drm_edid_find_extension(const struct drm_edid *drm_edid,
 				  int ext_id, int *ext_index);
 void drm_edid_cta_sad_get(const struct cea_sad *cta_sad, u8 *sad);
 void drm_edid_cta_sad_set(struct cea_sad *cta_sad, const u8 *sad);
+ssize_t drm_edid_connector_property_show(struct drm_connector *connector,
+					 char *buf, loff_t off, size_t count);
 
 /* drm_edid_load.c */
 #ifdef CONFIG_DRM_LOAD_EDID_FIRMWARE
diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
index 4f54c91b31b2..97362dd2330b 100644
--- a/drivers/gpu/drm/drm_edid.c
+++ b/drivers/gpu/drm/drm_edid.c
@@ -6969,6 +6969,39 @@ static int _drm_edid_connector_property_update(struct drm_connector *connector,
 	return ret;
 }
 
+/* For sysfs edid show implementation */
+ssize_t drm_edid_connector_property_show(struct drm_connector *connector,
+					 char *buf, loff_t off, size_t count)
+{
+	const void *edid;
+	size_t size;
+	ssize_t ret = 0;
+
+	mutex_lock(&connector->dev->mode_config.mutex);
+
+	if (!connector->edid_blob_ptr)
+		goto unlock;
+
+	edid = connector->edid_blob_ptr->data;
+	size = connector->edid_blob_ptr->length;
+	if (!edid)
+		goto unlock;
+
+	if (off >= size)
+		goto unlock;
+
+	if (off + count > size)
+		count = size - off;
+
+	memcpy(buf, edid + off, count);
+
+	ret = count;
+unlock:
+	mutex_unlock(&connector->dev->mode_config.mutex);
+
+	return ret;
+}
+
 /**
  * drm_edid_connector_update - Update connector information from EDID
  * @connector: Connector
diff --git a/drivers/gpu/drm/drm_sysfs.c b/drivers/gpu/drm/drm_sysfs.c
index bd9b8ab4f82b..fb3bbb6adcd1 100644
--- a/drivers/gpu/drm/drm_sysfs.c
+++ b/drivers/gpu/drm/drm_sysfs.c
@@ -266,29 +266,9 @@ static ssize_t edid_show(struct file *filp, struct kobject *kobj,
 {
 	struct device *connector_dev = kobj_to_dev(kobj);
 	struct drm_connector *connector = to_drm_connector(connector_dev);
-	unsigned char *edid;
-	size_t size;
-	ssize_t ret = 0;
+	ssize_t ret;
 
-	mutex_lock(&connector->dev->mode_config.mutex);
-	if (!connector->edid_blob_ptr)
-		goto unlock;
-
-	edid = connector->edid_blob_ptr->data;
-	size = connector->edid_blob_ptr->length;
-	if (!edid)
-		goto unlock;
-
-	if (off >= size)
-		goto unlock;
-
-	if (off + count > size)
-		count = size - off;
-	memcpy(buf, edid + off, count);
-
-	ret = count;
-unlock:
-	mutex_unlock(&connector->dev->mode_config.mutex);
+	ret = drm_edid_connector_property_show(connector, buf, off, count);
 
 	return ret;
 }
-- 
2.39.2


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [RESEND 6/6] drm/connector: update edid_blob_ptr documentation
  2024-05-10 15:08 [RESEND 0/6] drm, nouveau/radeon/amdpgu: edid_blob_ptr cleanups Jani Nikula
                   ` (4 preceding siblings ...)
  2024-05-10 15:08 ` [RESEND 5/6] drm/edid: add a helper for EDID sysfs property show Jani Nikula
@ 2024-05-10 15:08 ` Jani Nikula
  2024-05-10 15:45 ` [RESEND 0/6] drm, nouveau/radeon/amdpgu: edid_blob_ptr cleanups Alex Deucher
  6 siblings, 0 replies; 15+ messages in thread
From: Jani Nikula @ 2024-05-10 15:08 UTC (permalink / raw)
  To: dri-devel; +Cc: amd-gfx, nouveau, intel-gfx, jani.nikula

Accessing the EDID via edid_blob_ptr causes chicken-and-egg
problems. Keep edid_blob_ptr as the userspace interface that should be
accessed via dedicated functions.

Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 include/drm/drm_connector.h | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h
index fe88d7fc6b8f..58ee9adf9091 100644
--- a/include/drm/drm_connector.h
+++ b/include/drm/drm_connector.h
@@ -1636,8 +1636,12 @@ struct drm_connector {
 
 	/**
 	 * @edid_blob_ptr: DRM property containing EDID if present. Protected by
-	 * &drm_mode_config.mutex. This should be updated only by calling
+	 * &drm_mode_config.mutex.
+	 *
+	 * This must be updated only by calling drm_edid_connector_update() or
 	 * drm_connector_update_edid_property().
+	 *
+	 * This must not be used by drivers directly.
 	 */
 	struct drm_property_blob *edid_blob_ptr;
 
-- 
2.39.2


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* Re: [RESEND 0/6] drm, nouveau/radeon/amdpgu: edid_blob_ptr cleanups
  2024-05-10 15:08 [RESEND 0/6] drm, nouveau/radeon/amdpgu: edid_blob_ptr cleanups Jani Nikula
                   ` (5 preceding siblings ...)
  2024-05-10 15:08 ` [RESEND 6/6] drm/connector: update edid_blob_ptr documentation Jani Nikula
@ 2024-05-10 15:45 ` Alex Deucher
  2024-05-13 12:19   ` Jani Nikula
  6 siblings, 1 reply; 15+ messages in thread
From: Alex Deucher @ 2024-05-10 15:45 UTC (permalink / raw)
  To: Jani Nikula; +Cc: dri-devel, amd-gfx, nouveau, intel-gfx

On Fri, May 10, 2024 at 11:17 AM Jani Nikula <jani.nikula@intel.com> wrote:
>
> I've sent this some moths ago, let's try again...
>
> BR,
> Jani.
>
> Jani Nikula (6):
>   drm/nouveau: convert to using is_hdmi and has_audio from display info
>   drm/radeon: convert to using is_hdmi and has_audio from display info
>   drm/radeon: remove radeon_connector_edid() and stop using
>     edid_blob_ptr
>   drm/amdgpu: remove amdgpu_connector_edid() and stop using
>     edid_blob_ptr
>   drm/edid: add a helper for EDID sysfs property show
>   drm/connector: update edid_blob_ptr documentation

Series is:
Acked-by: Alex Deucher <alexander.deucher@amd.com>

>
>  .../gpu/drm/amd/amdgpu/amdgpu_connectors.c    | 16 ---------
>  .../gpu/drm/amd/amdgpu/amdgpu_connectors.h    |  1 -
>  drivers/gpu/drm/amd/amdgpu/dce_v10_0.c        |  4 +--
>  drivers/gpu/drm/amd/amdgpu/dce_v11_0.c        |  4 +--
>  drivers/gpu/drm/amd/amdgpu/dce_v6_0.c         |  4 +--
>  drivers/gpu/drm/amd/amdgpu/dce_v8_0.c         |  4 +--
>  drivers/gpu/drm/drm_crtc_internal.h           |  2 ++
>  drivers/gpu/drm/drm_edid.c                    | 33 +++++++++++++++++++
>  drivers/gpu/drm/drm_sysfs.c                   | 24 ++------------
>  drivers/gpu/drm/nouveau/dispnv50/disp.c       |  8 ++---
>  drivers/gpu/drm/nouveau/dispnv50/head.c       |  8 +----
>  drivers/gpu/drm/nouveau/nouveau_connector.c   |  2 +-
>  drivers/gpu/drm/radeon/atombios_encoders.c    | 10 +++---
>  drivers/gpu/drm/radeon/evergreen_hdmi.c       |  5 ++-
>  drivers/gpu/drm/radeon/radeon_audio.c         | 13 ++++----
>  drivers/gpu/drm/radeon/radeon_connectors.c    | 27 ++++-----------
>  drivers/gpu/drm/radeon/radeon_display.c       |  2 +-
>  drivers/gpu/drm/radeon/radeon_encoders.c      |  4 +--
>  drivers/gpu/drm/radeon/radeon_mode.h          |  2 --
>  include/drm/drm_connector.h                   |  6 +++-
>  20 files changed, 79 insertions(+), 100 deletions(-)
>
> --
> 2.39.2
>

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [RESEND 1/6] drm/nouveau: convert to using is_hdmi and has_audio from display info
  2024-05-10 15:08 ` [RESEND 1/6] drm/nouveau: convert to using is_hdmi and has_audio from display info Jani Nikula
@ 2024-05-10 19:24   ` Lyude Paul
  2024-05-13 12:18     ` Jani Nikula
  0 siblings, 1 reply; 15+ messages in thread
From: Lyude Paul @ 2024-05-10 19:24 UTC (permalink / raw)
  To: Jani Nikula, dri-devel
  Cc: amd-gfx, nouveau, intel-gfx, Karol Herbst, Danilo Krummrich

Reviewed-by: Lyude Paul <lyude@redhat.com>

On Fri, 2024-05-10 at 18:08 +0300, Jani Nikula wrote:
> Prefer the parsed results for is_hdmi and has_audio in display info
> over
> calling drm_detect_hdmi_monitor() and drm_detect_monitor_audio(),
> respectively.
> 
> Conveniently, this also removes the need to use edid_blob_ptr.
> 
> v2: Reverse a backwards if condition (Ilia)
> 
> Cc: Karol Herbst <kherbst@redhat.com>
> Cc: Lyude Paul <lyude@redhat.com>
> Cc: Danilo Krummrich <dakr@redhat.com>
> Cc: nouveau@lists.freedesktop.org
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
> ---
>  drivers/gpu/drm/nouveau/dispnv50/disp.c     | 8 ++++----
>  drivers/gpu/drm/nouveau/dispnv50/head.c     | 8 +-------
>  drivers/gpu/drm/nouveau/nouveau_connector.c | 2 +-
>  3 files changed, 6 insertions(+), 12 deletions(-)
> 
> diff --git a/drivers/gpu/drm/nouveau/dispnv50/disp.c
> b/drivers/gpu/drm/nouveau/dispnv50/disp.c
> index 0c3d88ad0b0e..168c27213287 100644
> --- a/drivers/gpu/drm/nouveau/dispnv50/disp.c
> +++ b/drivers/gpu/drm/nouveau/dispnv50/disp.c
> @@ -751,7 +751,7 @@ nv50_audio_enable(struct drm_encoder *encoder,
> struct nouveau_crtc *nv_crtc,
>  	struct nouveau_encoder *nv_encoder =
> nouveau_encoder(encoder);
>  	struct nvif_outp *outp = &nv_encoder->outp;
>  
> -	if (!nv50_audio_supported(encoder) ||
> !drm_detect_monitor_audio(nv_connector->edid))
> +	if (!nv50_audio_supported(encoder) || !nv_connector-
> >base.display_info.has_audio)
>  		return;
>  
>  	mutex_lock(&drm->audio.lock);
> @@ -1765,7 +1765,7 @@ nv50_sor_atomic_enable(struct drm_encoder
> *encoder, struct drm_atomic_state *sta
>  	if ((disp->disp->object.oclass == GT214_DISP ||
>  	     disp->disp->object.oclass >= GF110_DISP) &&
>  	    nv_encoder->dcb->type != DCB_OUTPUT_LVDS &&
> -	    drm_detect_monitor_audio(nv_connector->edid))
> +	    nv_connector->base.display_info.has_audio)
>  		hda = true;
>  
>  	if (!nvif_outp_acquired(outp))
> @@ -1774,7 +1774,7 @@ nv50_sor_atomic_enable(struct drm_encoder
> *encoder, struct drm_atomic_state *sta
>  	switch (nv_encoder->dcb->type) {
>  	case DCB_OUTPUT_TMDS:
>  		if (disp->disp->object.oclass != NV50_DISP &&
> -		    drm_detect_hdmi_monitor(nv_connector->edid))
> +		    nv_connector->base.display_info.is_hdmi)
>  			nv50_hdmi_enable(encoder, nv_crtc,
> nv_connector, state, mode, hda);
>  
>  		if (nv_encoder->outp.or.link & 1) {
> @@ -1787,7 +1787,7 @@ nv50_sor_atomic_enable(struct drm_encoder
> *encoder, struct drm_atomic_state *sta
>  			 */
>  			if (mode->clock >= 165000 &&
>  			    nv_encoder->dcb->duallink_possible &&
> -			    !drm_detect_hdmi_monitor(nv_connector-
> >edid))
> +			    !nv_connector-
> >base.display_info.is_hdmi)
>  				proto =
> NV507D_SOR_SET_CONTROL_PROTOCOL_DUAL_TMDS;
>  		} else {
>  			proto =
> NV507D_SOR_SET_CONTROL_PROTOCOL_SINGLE_TMDS_B;
> diff --git a/drivers/gpu/drm/nouveau/dispnv50/head.c
> b/drivers/gpu/drm/nouveau/dispnv50/head.c
> index 83355dbc15ee..d7c74cc43ba5 100644
> --- a/drivers/gpu/drm/nouveau/dispnv50/head.c
> +++ b/drivers/gpu/drm/nouveau/dispnv50/head.c
> @@ -127,14 +127,8 @@ nv50_head_atomic_check_view(struct
> nv50_head_atom *armh,
>  	struct drm_display_mode *omode = &asyh->state.adjusted_mode;
>  	struct drm_display_mode *umode = &asyh->state.mode;
>  	int mode = asyc->scaler.mode;
> -	struct edid *edid;
>  	int umode_vdisplay, omode_hdisplay, omode_vdisplay;
>  
> -	if (connector->edid_blob_ptr)
> -		edid = (struct edid *)connector->edid_blob_ptr-
> >data;
> -	else
> -		edid = NULL;
> -
>  	if (!asyc->scaler.full) {
>  		if (mode == DRM_MODE_SCALE_NONE)
>  			omode = umode;
> @@ -162,7 +156,7 @@ nv50_head_atomic_check_view(struct nv50_head_atom
> *armh,
>  	 */
>  	if ((asyc->scaler.underscan.mode == UNDERSCAN_ON ||
>  	    (asyc->scaler.underscan.mode == UNDERSCAN_AUTO &&
> -	     drm_detect_hdmi_monitor(edid)))) {
> +	     connector->display_info.is_hdmi))) {
>  		u32 bX = asyc->scaler.underscan.hborder;
>  		u32 bY = asyc->scaler.underscan.vborder;
>  		u32 r = (asyh->view.oH << 19) / asyh->view.oW;
> diff --git a/drivers/gpu/drm/nouveau/nouveau_connector.c
> b/drivers/gpu/drm/nouveau/nouveau_connector.c
> index 856b3ef5edb8..938832a6af15 100644
> --- a/drivers/gpu/drm/nouveau/nouveau_connector.c
> +++ b/drivers/gpu/drm/nouveau/nouveau_connector.c
> @@ -1034,7 +1034,7 @@ get_tmds_link_bandwidth(struct drm_connector
> *connector)
>  	unsigned duallink_scale =
>  		nouveau_duallink && nv_encoder->dcb-
> >duallink_possible ? 2 : 1;
>  
> -	if (drm_detect_hdmi_monitor(nv_connector->edid)) {
> +	if (nv_connector->base.display_info.is_hdmi) {
>  		info = &nv_connector->base.display_info;
>  		duallink_scale = 1;
>  	}

-- 
Cheers,
 Lyude Paul (she/her)
 Software Engineer at Red Hat


^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [RESEND 1/6] drm/nouveau: convert to using is_hdmi and has_audio from display info
  2024-05-10 19:24   ` Lyude Paul
@ 2024-05-13 12:18     ` Jani Nikula
  0 siblings, 0 replies; 15+ messages in thread
From: Jani Nikula @ 2024-05-13 12:18 UTC (permalink / raw)
  To: Lyude Paul, dri-devel
  Cc: amd-gfx, nouveau, intel-gfx, Karol Herbst, Danilo Krummrich

On Fri, 10 May 2024, Lyude Paul <lyude@redhat.com> wrote:
> Reviewed-by: Lyude Paul <lyude@redhat.com>

Thanks, how do you want to handle merging this?

BR,
Jani.


>
> On Fri, 2024-05-10 at 18:08 +0300, Jani Nikula wrote:
>> Prefer the parsed results for is_hdmi and has_audio in display info
>> over
>> calling drm_detect_hdmi_monitor() and drm_detect_monitor_audio(),
>> respectively.
>> 
>> Conveniently, this also removes the need to use edid_blob_ptr.
>> 
>> v2: Reverse a backwards if condition (Ilia)
>> 
>> Cc: Karol Herbst <kherbst@redhat.com>
>> Cc: Lyude Paul <lyude@redhat.com>
>> Cc: Danilo Krummrich <dakr@redhat.com>
>> Cc: nouveau@lists.freedesktop.org
>> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
>> ---
>>  drivers/gpu/drm/nouveau/dispnv50/disp.c     | 8 ++++----
>>  drivers/gpu/drm/nouveau/dispnv50/head.c     | 8 +-------
>>  drivers/gpu/drm/nouveau/nouveau_connector.c | 2 +-
>>  3 files changed, 6 insertions(+), 12 deletions(-)
>> 
>> diff --git a/drivers/gpu/drm/nouveau/dispnv50/disp.c
>> b/drivers/gpu/drm/nouveau/dispnv50/disp.c
>> index 0c3d88ad0b0e..168c27213287 100644
>> --- a/drivers/gpu/drm/nouveau/dispnv50/disp.c
>> +++ b/drivers/gpu/drm/nouveau/dispnv50/disp.c
>> @@ -751,7 +751,7 @@ nv50_audio_enable(struct drm_encoder *encoder,
>> struct nouveau_crtc *nv_crtc,
>>  	struct nouveau_encoder *nv_encoder =
>> nouveau_encoder(encoder);
>>  	struct nvif_outp *outp = &nv_encoder->outp;
>>  
>> -	if (!nv50_audio_supported(encoder) ||
>> !drm_detect_monitor_audio(nv_connector->edid))
>> +	if (!nv50_audio_supported(encoder) || !nv_connector-
>> >base.display_info.has_audio)
>>  		return;
>>  
>>  	mutex_lock(&drm->audio.lock);
>> @@ -1765,7 +1765,7 @@ nv50_sor_atomic_enable(struct drm_encoder
>> *encoder, struct drm_atomic_state *sta
>>  	if ((disp->disp->object.oclass == GT214_DISP ||
>>  	     disp->disp->object.oclass >= GF110_DISP) &&
>>  	    nv_encoder->dcb->type != DCB_OUTPUT_LVDS &&
>> -	    drm_detect_monitor_audio(nv_connector->edid))
>> +	    nv_connector->base.display_info.has_audio)
>>  		hda = true;
>>  
>>  	if (!nvif_outp_acquired(outp))
>> @@ -1774,7 +1774,7 @@ nv50_sor_atomic_enable(struct drm_encoder
>> *encoder, struct drm_atomic_state *sta
>>  	switch (nv_encoder->dcb->type) {
>>  	case DCB_OUTPUT_TMDS:
>>  		if (disp->disp->object.oclass != NV50_DISP &&
>> -		    drm_detect_hdmi_monitor(nv_connector->edid))
>> +		    nv_connector->base.display_info.is_hdmi)
>>  			nv50_hdmi_enable(encoder, nv_crtc,
>> nv_connector, state, mode, hda);
>>  
>>  		if (nv_encoder->outp.or.link & 1) {
>> @@ -1787,7 +1787,7 @@ nv50_sor_atomic_enable(struct drm_encoder
>> *encoder, struct drm_atomic_state *sta
>>  			 */
>>  			if (mode->clock >= 165000 &&
>>  			    nv_encoder->dcb->duallink_possible &&
>> -			    !drm_detect_hdmi_monitor(nv_connector-
>> >edid))
>> +			    !nv_connector-
>> >base.display_info.is_hdmi)
>>  				proto =
>> NV507D_SOR_SET_CONTROL_PROTOCOL_DUAL_TMDS;
>>  		} else {
>>  			proto =
>> NV507D_SOR_SET_CONTROL_PROTOCOL_SINGLE_TMDS_B;
>> diff --git a/drivers/gpu/drm/nouveau/dispnv50/head.c
>> b/drivers/gpu/drm/nouveau/dispnv50/head.c
>> index 83355dbc15ee..d7c74cc43ba5 100644
>> --- a/drivers/gpu/drm/nouveau/dispnv50/head.c
>> +++ b/drivers/gpu/drm/nouveau/dispnv50/head.c
>> @@ -127,14 +127,8 @@ nv50_head_atomic_check_view(struct
>> nv50_head_atom *armh,
>>  	struct drm_display_mode *omode = &asyh->state.adjusted_mode;
>>  	struct drm_display_mode *umode = &asyh->state.mode;
>>  	int mode = asyc->scaler.mode;
>> -	struct edid *edid;
>>  	int umode_vdisplay, omode_hdisplay, omode_vdisplay;
>>  
>> -	if (connector->edid_blob_ptr)
>> -		edid = (struct edid *)connector->edid_blob_ptr-
>> >data;
>> -	else
>> -		edid = NULL;
>> -
>>  	if (!asyc->scaler.full) {
>>  		if (mode == DRM_MODE_SCALE_NONE)
>>  			omode = umode;
>> @@ -162,7 +156,7 @@ nv50_head_atomic_check_view(struct nv50_head_atom
>> *armh,
>>  	 */
>>  	if ((asyc->scaler.underscan.mode == UNDERSCAN_ON ||
>>  	    (asyc->scaler.underscan.mode == UNDERSCAN_AUTO &&
>> -	     drm_detect_hdmi_monitor(edid)))) {
>> +	     connector->display_info.is_hdmi))) {
>>  		u32 bX = asyc->scaler.underscan.hborder;
>>  		u32 bY = asyc->scaler.underscan.vborder;
>>  		u32 r = (asyh->view.oH << 19) / asyh->view.oW;
>> diff --git a/drivers/gpu/drm/nouveau/nouveau_connector.c
>> b/drivers/gpu/drm/nouveau/nouveau_connector.c
>> index 856b3ef5edb8..938832a6af15 100644
>> --- a/drivers/gpu/drm/nouveau/nouveau_connector.c
>> +++ b/drivers/gpu/drm/nouveau/nouveau_connector.c
>> @@ -1034,7 +1034,7 @@ get_tmds_link_bandwidth(struct drm_connector
>> *connector)
>>  	unsigned duallink_scale =
>>  		nouveau_duallink && nv_encoder->dcb-
>> >duallink_possible ? 2 : 1;
>>  
>> -	if (drm_detect_hdmi_monitor(nv_connector->edid)) {
>> +	if (nv_connector->base.display_info.is_hdmi) {
>>  		info = &nv_connector->base.display_info;
>>  		duallink_scale = 1;
>>  	}

-- 
Jani Nikula, Intel

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [RESEND 0/6] drm, nouveau/radeon/amdpgu: edid_blob_ptr cleanups
  2024-05-10 15:45 ` [RESEND 0/6] drm, nouveau/radeon/amdpgu: edid_blob_ptr cleanups Alex Deucher
@ 2024-05-13 12:19   ` Jani Nikula
  2024-05-13 13:53     ` Alex Deucher
  0 siblings, 1 reply; 15+ messages in thread
From: Jani Nikula @ 2024-05-13 12:19 UTC (permalink / raw)
  To: Alex Deucher; +Cc: dri-devel, amd-gfx, nouveau, intel-gfx

On Fri, 10 May 2024, Alex Deucher <alexdeucher@gmail.com> wrote:
> On Fri, May 10, 2024 at 11:17 AM Jani Nikula <jani.nikula@intel.com> wrote:
>>
>> I've sent this some moths ago, let's try again...
>>
>> BR,
>> Jani.
>>
>> Jani Nikula (6):
>>   drm/nouveau: convert to using is_hdmi and has_audio from display info
>>   drm/radeon: convert to using is_hdmi and has_audio from display info
>>   drm/radeon: remove radeon_connector_edid() and stop using
>>     edid_blob_ptr
>>   drm/amdgpu: remove amdgpu_connector_edid() and stop using
>>     edid_blob_ptr
>>   drm/edid: add a helper for EDID sysfs property show
>>   drm/connector: update edid_blob_ptr documentation
>
> Series is:
> Acked-by: Alex Deucher <alexander.deucher@amd.com>

Thanks, do you want to pick these up via your tree? And do you expect a
proper R-b before merging?

BR,
Jani.


>
>>
>>  .../gpu/drm/amd/amdgpu/amdgpu_connectors.c    | 16 ---------
>>  .../gpu/drm/amd/amdgpu/amdgpu_connectors.h    |  1 -
>>  drivers/gpu/drm/amd/amdgpu/dce_v10_0.c        |  4 +--
>>  drivers/gpu/drm/amd/amdgpu/dce_v11_0.c        |  4 +--
>>  drivers/gpu/drm/amd/amdgpu/dce_v6_0.c         |  4 +--
>>  drivers/gpu/drm/amd/amdgpu/dce_v8_0.c         |  4 +--
>>  drivers/gpu/drm/drm_crtc_internal.h           |  2 ++
>>  drivers/gpu/drm/drm_edid.c                    | 33 +++++++++++++++++++
>>  drivers/gpu/drm/drm_sysfs.c                   | 24 ++------------
>>  drivers/gpu/drm/nouveau/dispnv50/disp.c       |  8 ++---
>>  drivers/gpu/drm/nouveau/dispnv50/head.c       |  8 +----
>>  drivers/gpu/drm/nouveau/nouveau_connector.c   |  2 +-
>>  drivers/gpu/drm/radeon/atombios_encoders.c    | 10 +++---
>>  drivers/gpu/drm/radeon/evergreen_hdmi.c       |  5 ++-
>>  drivers/gpu/drm/radeon/radeon_audio.c         | 13 ++++----
>>  drivers/gpu/drm/radeon/radeon_connectors.c    | 27 ++++-----------
>>  drivers/gpu/drm/radeon/radeon_display.c       |  2 +-
>>  drivers/gpu/drm/radeon/radeon_encoders.c      |  4 +--
>>  drivers/gpu/drm/radeon/radeon_mode.h          |  2 --
>>  include/drm/drm_connector.h                   |  6 +++-
>>  20 files changed, 79 insertions(+), 100 deletions(-)
>>
>> --
>> 2.39.2
>>

-- 
Jani Nikula, Intel

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [RESEND 0/6] drm, nouveau/radeon/amdpgu: edid_blob_ptr cleanups
  2024-05-13 12:19   ` Jani Nikula
@ 2024-05-13 13:53     ` Alex Deucher
  0 siblings, 0 replies; 15+ messages in thread
From: Alex Deucher @ 2024-05-13 13:53 UTC (permalink / raw)
  To: Jani Nikula; +Cc: dri-devel, amd-gfx, nouveau, intel-gfx

On Mon, May 13, 2024 at 8:20 AM Jani Nikula <jani.nikula@intel.com> wrote:
>
> On Fri, 10 May 2024, Alex Deucher <alexdeucher@gmail.com> wrote:
> > On Fri, May 10, 2024 at 11:17 AM Jani Nikula <jani.nikula@intel.com> wrote:
> >>
> >> I've sent this some moths ago, let's try again...
> >>
> >> BR,
> >> Jani.
> >>
> >> Jani Nikula (6):
> >>   drm/nouveau: convert to using is_hdmi and has_audio from display info
> >>   drm/radeon: convert to using is_hdmi and has_audio from display info
> >>   drm/radeon: remove radeon_connector_edid() and stop using
> >>     edid_blob_ptr
> >>   drm/amdgpu: remove amdgpu_connector_edid() and stop using
> >>     edid_blob_ptr
> >>   drm/edid: add a helper for EDID sysfs property show
> >>   drm/connector: update edid_blob_ptr documentation
> >
> > Series is:
> > Acked-by: Alex Deucher <alexander.deucher@amd.com>
>
> Thanks, do you want to pick these up via your tree? And do you expect a
> proper R-b before merging?

Feel free to take them via drm-misc if you'd prefer to land the whole
set together, otherwise, I can pick up the radeon/amdgpu patches.

Alex


>
> BR,
> Jani.
>
>
> >
> >>
> >>  .../gpu/drm/amd/amdgpu/amdgpu_connectors.c    | 16 ---------
> >>  .../gpu/drm/amd/amdgpu/amdgpu_connectors.h    |  1 -
> >>  drivers/gpu/drm/amd/amdgpu/dce_v10_0.c        |  4 +--
> >>  drivers/gpu/drm/amd/amdgpu/dce_v11_0.c        |  4 +--
> >>  drivers/gpu/drm/amd/amdgpu/dce_v6_0.c         |  4 +--
> >>  drivers/gpu/drm/amd/amdgpu/dce_v8_0.c         |  4 +--
> >>  drivers/gpu/drm/drm_crtc_internal.h           |  2 ++
> >>  drivers/gpu/drm/drm_edid.c                    | 33 +++++++++++++++++++
> >>  drivers/gpu/drm/drm_sysfs.c                   | 24 ++------------
> >>  drivers/gpu/drm/nouveau/dispnv50/disp.c       |  8 ++---
> >>  drivers/gpu/drm/nouveau/dispnv50/head.c       |  8 +----
> >>  drivers/gpu/drm/nouveau/nouveau_connector.c   |  2 +-
> >>  drivers/gpu/drm/radeon/atombios_encoders.c    | 10 +++---
> >>  drivers/gpu/drm/radeon/evergreen_hdmi.c       |  5 ++-
> >>  drivers/gpu/drm/radeon/radeon_audio.c         | 13 ++++----
> >>  drivers/gpu/drm/radeon/radeon_connectors.c    | 27 ++++-----------
> >>  drivers/gpu/drm/radeon/radeon_display.c       |  2 +-
> >>  drivers/gpu/drm/radeon/radeon_encoders.c      |  4 +--
> >>  drivers/gpu/drm/radeon/radeon_mode.h          |  2 --
> >>  include/drm/drm_connector.h                   |  6 +++-
> >>  20 files changed, 79 insertions(+), 100 deletions(-)
> >>
> >> --
> >> 2.39.2
> >>
>
> --
> Jani Nikula, Intel

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [RESEND 2/6] drm/radeon: convert to using is_hdmi and has_audio from display info
  2024-05-10 15:08 ` [RESEND 2/6] drm/radeon: " Jani Nikula
@ 2024-05-13 16:56   ` Robert Foss
  0 siblings, 0 replies; 15+ messages in thread
From: Robert Foss @ 2024-05-13 16:56 UTC (permalink / raw)
  To: Jani Nikula
  Cc: dri-devel, amd-gfx, nouveau, intel-gfx, Alex Deucher,
	Christian König, Pan, Xinhui

On Fri, May 10, 2024 at 5:08 PM Jani Nikula <jani.nikula@intel.com> wrote:
>
> Prefer the parsed results for is_hdmi and has_audio in display info over
> calling drm_detect_hdmi_monitor() and drm_detect_monitor_audio(),
> respectively.
>
> Cc: Alex Deucher <alexander.deucher@amd.com>
> Cc: Christian König <christian.koenig@amd.com>
> Cc: Pan, Xinhui <Xinhui.Pan@amd.com>
> Cc: amd-gfx@lists.freedesktop.org
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
> ---
>  drivers/gpu/drm/radeon/atombios_encoders.c | 10 +++++-----
>  drivers/gpu/drm/radeon/evergreen_hdmi.c    |  5 ++---
>  drivers/gpu/drm/radeon/radeon_audio.c      |  6 +++---
>  drivers/gpu/drm/radeon/radeon_connectors.c | 12 ++++++------
>  drivers/gpu/drm/radeon/radeon_display.c    |  2 +-
>  drivers/gpu/drm/radeon/radeon_encoders.c   |  4 ++--
>  6 files changed, 19 insertions(+), 20 deletions(-)
>
> diff --git a/drivers/gpu/drm/radeon/atombios_encoders.c b/drivers/gpu/drm/radeon/atombios_encoders.c
> index 2bff0d9e20f5..0aa395fac36f 100644
> --- a/drivers/gpu/drm/radeon/atombios_encoders.c
> +++ b/drivers/gpu/drm/radeon/atombios_encoders.c
> @@ -701,7 +701,7 @@ atombios_get_encoder_mode(struct drm_encoder *encoder)
>                         if (radeon_connector->use_digital &&
>                             (radeon_connector->audio == RADEON_AUDIO_ENABLE))
>                                 return ATOM_ENCODER_MODE_HDMI;
> -                       else if (drm_detect_hdmi_monitor(radeon_connector_edid(connector)) &&
> +                       else if (connector->display_info.is_hdmi &&
>                                  (radeon_connector->audio == RADEON_AUDIO_AUTO))
>                                 return ATOM_ENCODER_MODE_HDMI;
>                         else if (radeon_connector->use_digital)
> @@ -720,7 +720,7 @@ atombios_get_encoder_mode(struct drm_encoder *encoder)
>                 if (radeon_audio != 0) {
>                         if (radeon_connector->audio == RADEON_AUDIO_ENABLE)
>                                 return ATOM_ENCODER_MODE_HDMI;
> -                       else if (drm_detect_hdmi_monitor(radeon_connector_edid(connector)) &&
> +                       else if (connector->display_info.is_hdmi &&
>                                  (radeon_connector->audio == RADEON_AUDIO_AUTO))
>                                 return ATOM_ENCODER_MODE_HDMI;
>                         else
> @@ -737,14 +737,14 @@ atombios_get_encoder_mode(struct drm_encoder *encoder)
>                 if ((dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) ||
>                     (dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_eDP)) {
>                         if (radeon_audio != 0 &&
> -                           drm_detect_monitor_audio(radeon_connector_edid(connector)) &&
> +                           connector->display_info.has_audio &&
>                             ASIC_IS_DCE4(rdev) && !ASIC_IS_DCE5(rdev))
>                                 return ATOM_ENCODER_MODE_DP_AUDIO;
>                         return ATOM_ENCODER_MODE_DP;
>                 } else if (radeon_audio != 0) {
>                         if (radeon_connector->audio == RADEON_AUDIO_ENABLE)
>                                 return ATOM_ENCODER_MODE_HDMI;
> -                       else if (drm_detect_hdmi_monitor(radeon_connector_edid(connector)) &&
> +                       else if (connector->display_info.is_hdmi &&
>                                  (radeon_connector->audio == RADEON_AUDIO_AUTO))
>                                 return ATOM_ENCODER_MODE_HDMI;
>                         else
> @@ -755,7 +755,7 @@ atombios_get_encoder_mode(struct drm_encoder *encoder)
>                 break;
>         case DRM_MODE_CONNECTOR_eDP:
>                 if (radeon_audio != 0 &&
> -                   drm_detect_monitor_audio(radeon_connector_edid(connector)) &&
> +                   connector->display_info.has_audio &&
>                     ASIC_IS_DCE4(rdev) && !ASIC_IS_DCE5(rdev))
>                         return ATOM_ENCODER_MODE_DP_AUDIO;
>                 return ATOM_ENCODER_MODE_DP;
> diff --git a/drivers/gpu/drm/radeon/evergreen_hdmi.c b/drivers/gpu/drm/radeon/evergreen_hdmi.c
> index 681119c91d94..09dda114e218 100644
> --- a/drivers/gpu/drm/radeon/evergreen_hdmi.c
> +++ b/drivers/gpu/drm/radeon/evergreen_hdmi.c
> @@ -412,7 +412,7 @@ void evergreen_hdmi_enable(struct drm_encoder *encoder, bool enable)
>         if (enable) {
>                 struct drm_connector *connector = radeon_get_connector_for_encoder(encoder);
>
> -               if (connector && drm_detect_monitor_audio(radeon_connector_edid(connector))) {
> +               if (connector && connector->display_info.has_audio) {
>                         WREG32(HDMI_INFOFRAME_CONTROL0 + dig->afmt->offset,
>                                HDMI_AVI_INFO_SEND | /* enable AVI info frames */
>                                HDMI_AVI_INFO_CONT | /* required for audio info values to be updated */
> @@ -450,8 +450,7 @@ void evergreen_dp_enable(struct drm_encoder *encoder, bool enable)
>         if (!dig || !dig->afmt)
>                 return;
>
> -       if (enable && connector &&
> -           drm_detect_monitor_audio(radeon_connector_edid(connector))) {
> +       if (enable && connector && connector->display_info.has_audio) {
>                 struct drm_connector *connector = radeon_get_connector_for_encoder(encoder);
>                 struct radeon_connector *radeon_connector = to_radeon_connector(connector);
>                 struct radeon_connector_atom_dig *dig_connector;
> diff --git a/drivers/gpu/drm/radeon/radeon_audio.c b/drivers/gpu/drm/radeon/radeon_audio.c
> index 74753bb26d33..16c10db3ce6f 100644
> --- a/drivers/gpu/drm/radeon/radeon_audio.c
> +++ b/drivers/gpu/drm/radeon/radeon_audio.c
> @@ -409,7 +409,7 @@ void radeon_audio_detect(struct drm_connector *connector,
>                         radeon_encoder->audio = rdev->audio.hdmi_funcs;
>                 }
>
> -               if (drm_detect_monitor_audio(radeon_connector_edid(connector))) {
> +               if (connector->display_info.has_audio) {
>                         if (!dig->pin)
>                                 dig->pin = radeon_audio_get_pin(encoder);
>                         radeon_audio_enable(rdev, dig->pin, 0xf);
> @@ -646,7 +646,7 @@ static void radeon_audio_hdmi_mode_set(struct drm_encoder *encoder,
>         if (!connector)
>                 return;
>
> -       if (drm_detect_monitor_audio(radeon_connector_edid(connector))) {
> +       if (connector->display_info.has_audio) {
>                 radeon_audio_set_mute(encoder, true);
>
>                 radeon_audio_write_speaker_allocation(encoder);
> @@ -686,7 +686,7 @@ static void radeon_audio_dp_mode_set(struct drm_encoder *encoder,
>         if (!connector)
>                 return;
>
> -       if (drm_detect_monitor_audio(radeon_connector_edid(connector))) {
> +       if (connector->display_info.has_audio) {
>                 radeon_audio_write_speaker_allocation(encoder);
>                 radeon_audio_write_sad_regs(encoder);
>                 radeon_audio_write_latency_fields(encoder, mode);
> diff --git a/drivers/gpu/drm/radeon/radeon_connectors.c b/drivers/gpu/drm/radeon/radeon_connectors.c
> index b84b58926106..81b5c3c8f658 100644
> --- a/drivers/gpu/drm/radeon/radeon_connectors.c
> +++ b/drivers/gpu/drm/radeon/radeon_connectors.c
> @@ -109,7 +109,7 @@ int radeon_get_monitor_bpc(struct drm_connector *connector)
>         case DRM_MODE_CONNECTOR_DVII:
>         case DRM_MODE_CONNECTOR_HDMIB:
>                 if (radeon_connector->use_digital) {
> -                       if (drm_detect_hdmi_monitor(radeon_connector_edid(connector))) {
> +                       if (connector->display_info.is_hdmi) {
>                                 if (connector->display_info.bpc)
>                                         bpc = connector->display_info.bpc;
>                         }
> @@ -117,7 +117,7 @@ int radeon_get_monitor_bpc(struct drm_connector *connector)
>                 break;
>         case DRM_MODE_CONNECTOR_DVID:
>         case DRM_MODE_CONNECTOR_HDMIA:
> -               if (drm_detect_hdmi_monitor(radeon_connector_edid(connector))) {
> +               if (connector->display_info.is_hdmi) {
>                         if (connector->display_info.bpc)
>                                 bpc = connector->display_info.bpc;
>                 }
> @@ -126,7 +126,7 @@ int radeon_get_monitor_bpc(struct drm_connector *connector)
>                 dig_connector = radeon_connector->con_priv;
>                 if ((dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) ||
>                     (dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_eDP) ||
> -                   drm_detect_hdmi_monitor(radeon_connector_edid(connector))) {
> +                   connector->display_info.is_hdmi) {
>                         if (connector->display_info.bpc)
>                                 bpc = connector->display_info.bpc;
>                 }
> @@ -150,7 +150,7 @@ int radeon_get_monitor_bpc(struct drm_connector *connector)
>                 break;
>         }
>
> -       if (drm_detect_hdmi_monitor(radeon_connector_edid(connector))) {
> +       if (connector->display_info.is_hdmi) {
>                 /* hdmi deep color only implemented on DCE4+ */
>                 if ((bpc > 8) && !ASIC_IS_DCE4(rdev)) {
>                         DRM_DEBUG("%s: HDMI deep color %d bpc unsupported. Using 8 bpc.\n",
> @@ -1478,7 +1478,7 @@ static enum drm_mode_status radeon_dvi_mode_valid(struct drm_connector *connecto
>                     (radeon_connector->connector_object_id == CONNECTOR_OBJECT_ID_DUAL_LINK_DVI_D) ||
>                     (radeon_connector->connector_object_id == CONNECTOR_OBJECT_ID_HDMI_TYPE_B))
>                         return MODE_OK;
> -               else if (ASIC_IS_DCE6(rdev) && drm_detect_hdmi_monitor(radeon_connector_edid(connector))) {
> +               else if (ASIC_IS_DCE6(rdev) && connector->display_info.is_hdmi) {
>                         /* HDMI 1.3+ supports max clock of 340 Mhz */
>                         if (mode->clock > 340000)
>                                 return MODE_CLOCK_HIGH;
> @@ -1774,7 +1774,7 @@ static enum drm_mode_status radeon_dp_mode_valid(struct drm_connector *connector
>                     (radeon_dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_eDP)) {
>                         return radeon_dp_mode_valid_helper(connector, mode);
>                 } else {
> -                       if (ASIC_IS_DCE6(rdev) && drm_detect_hdmi_monitor(radeon_connector_edid(connector))) {
> +                       if (ASIC_IS_DCE6(rdev) && connector->display_info.is_hdmi) {
>                                 /* HDMI 1.3+ supports max clock of 340 Mhz */
>                                 if (mode->clock > 340000)
>                                         return MODE_CLOCK_HIGH;
> diff --git a/drivers/gpu/drm/radeon/radeon_display.c b/drivers/gpu/drm/radeon/radeon_display.c
> index 5f1d24d3120c..843383f7237f 100644
> --- a/drivers/gpu/drm/radeon/radeon_display.c
> +++ b/drivers/gpu/drm/radeon/radeon_display.c
> @@ -1722,7 +1722,7 @@ bool radeon_crtc_scaling_mode_fixup(struct drm_crtc *crtc,
>                             (!(mode->flags & DRM_MODE_FLAG_INTERLACE)) &&
>                             ((radeon_encoder->underscan_type == UNDERSCAN_ON) ||
>                              ((radeon_encoder->underscan_type == UNDERSCAN_AUTO) &&
> -                             drm_detect_hdmi_monitor(radeon_connector_edid(connector)) &&
> +                             connector->display_info.is_hdmi &&
>                               is_hdtv_mode(mode)))) {
>                                 if (radeon_encoder->underscan_hborder != 0)
>                                         radeon_crtc->h_border = radeon_encoder->underscan_hborder;
> diff --git a/drivers/gpu/drm/radeon/radeon_encoders.c b/drivers/gpu/drm/radeon/radeon_encoders.c
> index 3de3dce9e89d..0f723292409e 100644
> --- a/drivers/gpu/drm/radeon/radeon_encoders.c
> +++ b/drivers/gpu/drm/radeon/radeon_encoders.c
> @@ -386,7 +386,7 @@ bool radeon_dig_monitor_is_duallink(struct drm_encoder *encoder,
>         case DRM_MODE_CONNECTOR_HDMIB:
>                 if (radeon_connector->use_digital) {
>                         /* HDMI 1.3 supports up to 340 Mhz over single link */
> -                       if (ASIC_IS_DCE6(rdev) && drm_detect_hdmi_monitor(radeon_connector_edid(connector))) {
> +                       if (ASIC_IS_DCE6(rdev) && connector->display_info.is_hdmi) {
>                                 if (pixel_clock > 340000)
>                                         return true;
>                                 else
> @@ -408,7 +408,7 @@ bool radeon_dig_monitor_is_duallink(struct drm_encoder *encoder,
>                         return false;
>                 else {
>                         /* HDMI 1.3 supports up to 340 Mhz over single link */
> -                       if (ASIC_IS_DCE6(rdev) && drm_detect_hdmi_monitor(radeon_connector_edid(connector))) {
> +                       if (ASIC_IS_DCE6(rdev) && connector->display_info.is_hdmi) {
>                                 if (pixel_clock > 340000)
>                                         return true;
>                                 else
> --
> 2.39.2
>

Reviewed-by: Robert Foss <rfoss@kernel.org>

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [RESEND 3/6] drm/radeon: remove radeon_connector_edid() and stop using edid_blob_ptr
  2024-05-10 15:08 ` [RESEND 3/6] drm/radeon: remove radeon_connector_edid() and stop using edid_blob_ptr Jani Nikula
@ 2024-05-13 16:59   ` Robert Foss
  0 siblings, 0 replies; 15+ messages in thread
From: Robert Foss @ 2024-05-13 16:59 UTC (permalink / raw)
  To: Jani Nikula
  Cc: dri-devel, amd-gfx, nouveau, intel-gfx, Alex Deucher,
	Christian König, Pan, Xinhui

On Fri, May 10, 2024 at 5:08 PM Jani Nikula <jani.nikula@intel.com> wrote:
>
> radeon_connector_edid() copies the EDID from edid_blob_ptr as a side
> effect if radeon_connector->edid isn't initialized. However, everywhere
> that the returned EDID is used, the EDID should have been set
> beforehands.
>
> Only the drm EDID code should look at the EDID property, anyway, so stop
> using it.
>
> Cc: Alex Deucher <alexander.deucher@amd.com>
> Cc: Christian König <christian.koenig@amd.com>
> Cc: Pan, Xinhui <Xinhui.Pan@amd.com>
> Cc: amd-gfx@lists.freedesktop.org
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
> ---
>  drivers/gpu/drm/radeon/radeon_audio.c      |  7 ++++---
>  drivers/gpu/drm/radeon/radeon_connectors.c | 15 ---------------
>  drivers/gpu/drm/radeon/radeon_mode.h       |  2 --
>  3 files changed, 4 insertions(+), 20 deletions(-)
>
> diff --git a/drivers/gpu/drm/radeon/radeon_audio.c b/drivers/gpu/drm/radeon/radeon_audio.c
> index 16c10db3ce6f..0bcd767b9f47 100644
> --- a/drivers/gpu/drm/radeon/radeon_audio.c
> +++ b/drivers/gpu/drm/radeon/radeon_audio.c
> @@ -303,6 +303,7 @@ void radeon_audio_endpoint_wreg(struct radeon_device *rdev, u32 offset,
>  static void radeon_audio_write_sad_regs(struct drm_encoder *encoder)
>  {
>         struct drm_connector *connector = radeon_get_connector_for_encoder(encoder);
> +       struct radeon_connector *radeon_connector = to_radeon_connector(connector);
>         struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
>         struct cea_sad *sads;
>         int sad_count;
> @@ -310,7 +311,7 @@ static void radeon_audio_write_sad_regs(struct drm_encoder *encoder)
>         if (!connector)
>                 return;
>
> -       sad_count = drm_edid_to_sad(radeon_connector_edid(connector), &sads);
> +       sad_count = drm_edid_to_sad(radeon_connector->edid, &sads);
>         if (sad_count < 0)
>                 DRM_ERROR("Couldn't read SADs: %d\n", sad_count);
>         if (sad_count <= 0)
> @@ -326,6 +327,7 @@ static void radeon_audio_write_sad_regs(struct drm_encoder *encoder)
>  static void radeon_audio_write_speaker_allocation(struct drm_encoder *encoder)
>  {
>         struct drm_connector *connector = radeon_get_connector_for_encoder(encoder);
> +       struct radeon_connector *radeon_connector = to_radeon_connector(connector);
>         struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
>         u8 *sadb = NULL;
>         int sad_count;
> @@ -333,8 +335,7 @@ static void radeon_audio_write_speaker_allocation(struct drm_encoder *encoder)
>         if (!connector)
>                 return;
>
> -       sad_count = drm_edid_to_speaker_allocation(radeon_connector_edid(connector),
> -                                                  &sadb);
> +       sad_count = drm_edid_to_speaker_allocation(radeon_connector->edid, &sadb);
>         if (sad_count < 0) {
>                 DRM_DEBUG("Couldn't read Speaker Allocation Data Block: %d\n",
>                           sad_count);
> diff --git a/drivers/gpu/drm/radeon/radeon_connectors.c b/drivers/gpu/drm/radeon/radeon_connectors.c
> index 81b5c3c8f658..80879e946342 100644
> --- a/drivers/gpu/drm/radeon/radeon_connectors.c
> +++ b/drivers/gpu/drm/radeon/radeon_connectors.c
> @@ -255,21 +255,6 @@ static struct drm_encoder *radeon_find_encoder(struct drm_connector *connector,
>         return NULL;
>  }
>
> -struct edid *radeon_connector_edid(struct drm_connector *connector)
> -{
> -       struct radeon_connector *radeon_connector = to_radeon_connector(connector);
> -       struct drm_property_blob *edid_blob = connector->edid_blob_ptr;
> -
> -       if (radeon_connector->edid) {
> -               return radeon_connector->edid;
> -       } else if (edid_blob) {
> -               struct edid *edid = kmemdup(edid_blob->data, edid_blob->length, GFP_KERNEL);
> -               if (edid)
> -                       radeon_connector->edid = edid;
> -       }
> -       return radeon_connector->edid;
> -}
> -
>  static void radeon_connector_get_edid(struct drm_connector *connector)
>  {
>         struct drm_device *dev = connector->dev;
> diff --git a/drivers/gpu/drm/radeon/radeon_mode.h b/drivers/gpu/drm/radeon/radeon_mode.h
> index 546381a5c918..e0a5af180801 100644
> --- a/drivers/gpu/drm/radeon/radeon_mode.h
> +++ b/drivers/gpu/drm/radeon/radeon_mode.h
> @@ -701,8 +701,6 @@ extern u16 radeon_connector_encoder_get_dp_bridge_encoder_id(struct drm_connecto
>  extern bool radeon_connector_is_dp12_capable(struct drm_connector *connector);
>  extern int radeon_get_monitor_bpc(struct drm_connector *connector);
>
> -extern struct edid *radeon_connector_edid(struct drm_connector *connector);
> -
>  extern void radeon_connector_hotplug(struct drm_connector *connector);
>  extern int radeon_dp_mode_valid_helper(struct drm_connector *connector,
>                                        struct drm_display_mode *mode);
> --
> 2.39.2
>

Reviewed-by: Robert Foss <rfoss@kernel.org>

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [RESEND 4/6] drm/amdgpu: remove amdgpu_connector_edid() and stop using edid_blob_ptr
  2024-05-10 15:08 ` [RESEND 4/6] drm/amdgpu: remove amdgpu_connector_edid() " Jani Nikula
@ 2024-05-13 17:01   ` Robert Foss
  0 siblings, 0 replies; 15+ messages in thread
From: Robert Foss @ 2024-05-13 17:01 UTC (permalink / raw)
  To: Jani Nikula
  Cc: dri-devel, amd-gfx, nouveau, intel-gfx, Alex Deucher,
	Christian König, Pan, Xinhui

On Fri, May 10, 2024 at 5:09 PM Jani Nikula <jani.nikula@intel.com> wrote:
>
> amdgpu_connector_edid() copies the EDID from edid_blob_ptr as a side
> effect if amdgpu_connector->edid isn't initialized. However, everywhere
> that the returned EDID is used, the EDID should have been set
> beforehands.
>
> Only the drm EDID code should look at the EDID property, anyway, so stop
> using it.
>
> Cc: Alex Deucher <alexander.deucher@amd.com>
> Cc: Christian König <christian.koenig@amd.com>
> Cc: Pan, Xinhui <Xinhui.Pan@amd.com>
> Cc: amd-gfx@lists.freedesktop.org
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c | 16 ----------------
>  drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.h |  1 -
>  drivers/gpu/drm/amd/amdgpu/dce_v10_0.c         |  4 ++--
>  drivers/gpu/drm/amd/amdgpu/dce_v11_0.c         |  4 ++--
>  drivers/gpu/drm/amd/amdgpu/dce_v6_0.c          |  4 ++--
>  drivers/gpu/drm/amd/amdgpu/dce_v8_0.c          |  4 ++--
>  6 files changed, 8 insertions(+), 25 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
> index 9caba10315a8..cae7479c3ecf 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
> @@ -246,22 +246,6 @@ amdgpu_connector_find_encoder(struct drm_connector *connector,
>         return NULL;
>  }
>
> -struct edid *amdgpu_connector_edid(struct drm_connector *connector)
> -{
> -       struct amdgpu_connector *amdgpu_connector = to_amdgpu_connector(connector);
> -       struct drm_property_blob *edid_blob = connector->edid_blob_ptr;
> -
> -       if (amdgpu_connector->edid) {
> -               return amdgpu_connector->edid;
> -       } else if (edid_blob) {
> -               struct edid *edid = kmemdup(edid_blob->data, edid_blob->length, GFP_KERNEL);
> -
> -               if (edid)
> -                       amdgpu_connector->edid = edid;
> -       }
> -       return amdgpu_connector->edid;
> -}
> -
>  static struct edid *
>  amdgpu_connector_get_hardcoded_edid(struct amdgpu_device *adev)
>  {
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.h
> index 61fcef15ad72..eff833b6ed31 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.h
> @@ -24,7 +24,6 @@
>  #ifndef __AMDGPU_CONNECTORS_H__
>  #define __AMDGPU_CONNECTORS_H__
>
> -struct edid *amdgpu_connector_edid(struct drm_connector *connector);
>  void amdgpu_connector_hotplug(struct drm_connector *connector);
>  int amdgpu_connector_get_monitor_bpc(struct drm_connector *connector);
>  u16 amdgpu_connector_encoder_get_dp_bridge_encoder_id(struct drm_connector *connector);
> diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
> index b44fce44c066..dddb5fe16f2c 100644
> --- a/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
> @@ -1299,7 +1299,7 @@ static void dce_v10_0_audio_write_speaker_allocation(struct drm_encoder *encoder
>                 return;
>         }
>
> -       sad_count = drm_edid_to_speaker_allocation(amdgpu_connector_edid(connector), &sadb);
> +       sad_count = drm_edid_to_speaker_allocation(amdgpu_connector->edid, &sadb);
>         if (sad_count < 0) {
>                 DRM_ERROR("Couldn't read Speaker Allocation Data Block: %d\n", sad_count);
>                 sad_count = 0;
> @@ -1369,7 +1369,7 @@ static void dce_v10_0_audio_write_sad_regs(struct drm_encoder *encoder)
>                 return;
>         }
>
> -       sad_count = drm_edid_to_sad(amdgpu_connector_edid(connector), &sads);
> +       sad_count = drm_edid_to_sad(amdgpu_connector->edid, &sads);
>         if (sad_count < 0)
>                 DRM_ERROR("Couldn't read SADs: %d\n", sad_count);
>         if (sad_count <= 0)
> diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
> index 80b2e7f79acf..11780e4d7e9f 100644
> --- a/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
> @@ -1331,7 +1331,7 @@ static void dce_v11_0_audio_write_speaker_allocation(struct drm_encoder *encoder
>                 return;
>         }
>
> -       sad_count = drm_edid_to_speaker_allocation(amdgpu_connector_edid(connector), &sadb);
> +       sad_count = drm_edid_to_speaker_allocation(amdgpu_connector->edid, &sadb);
>         if (sad_count < 0) {
>                 DRM_ERROR("Couldn't read Speaker Allocation Data Block: %d\n", sad_count);
>                 sad_count = 0;
> @@ -1401,7 +1401,7 @@ static void dce_v11_0_audio_write_sad_regs(struct drm_encoder *encoder)
>                 return;
>         }
>
> -       sad_count = drm_edid_to_sad(amdgpu_connector_edid(connector), &sads);
> +       sad_count = drm_edid_to_sad(amdgpu_connector->edid, &sads);
>         if (sad_count < 0)
>                 DRM_ERROR("Couldn't read SADs: %d\n", sad_count);
>         if (sad_count <= 0)
> diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c
> index db20012600f5..05c0df97f01d 100644
> --- a/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c
> @@ -1217,7 +1217,7 @@ static void dce_v6_0_audio_write_speaker_allocation(struct drm_encoder *encoder)
>                 return;
>         }
>
> -       sad_count = drm_edid_to_speaker_allocation(amdgpu_connector_edid(connector), &sadb);
> +       sad_count = drm_edid_to_speaker_allocation(amdgpu_connector->edid, &sadb);
>         if (sad_count < 0) {
>                 DRM_ERROR("Couldn't read Speaker Allocation Data Block: %d\n", sad_count);
>                 sad_count = 0;
> @@ -1292,7 +1292,7 @@ static void dce_v6_0_audio_write_sad_regs(struct drm_encoder *encoder)
>                 return;
>         }
>
> -       sad_count = drm_edid_to_sad(amdgpu_connector_edid(connector), &sads);
> +       sad_count = drm_edid_to_sad(amdgpu_connector->edid, &sads);
>         if (sad_count < 0)
>                 DRM_ERROR("Couldn't read SADs: %d\n", sad_count);
>         if (sad_count <= 0)
> diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
> index 5b56100ec902..dc73e301d937 100644
> --- a/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
> @@ -1272,7 +1272,7 @@ static void dce_v8_0_audio_write_speaker_allocation(struct drm_encoder *encoder)
>                 return;
>         }
>
> -       sad_count = drm_edid_to_speaker_allocation(amdgpu_connector_edid(connector), &sadb);
> +       sad_count = drm_edid_to_speaker_allocation(amdgpu_connector->edid, &sadb);
>         if (sad_count < 0) {
>                 DRM_ERROR("Couldn't read Speaker Allocation Data Block: %d\n", sad_count);
>                 sad_count = 0;
> @@ -1340,7 +1340,7 @@ static void dce_v8_0_audio_write_sad_regs(struct drm_encoder *encoder)
>                 return;
>         }
>
> -       sad_count = drm_edid_to_sad(amdgpu_connector_edid(connector), &sads);
> +       sad_count = drm_edid_to_sad(amdgpu_connector->edid, &sads);
>         if (sad_count < 0)
>                 DRM_ERROR("Couldn't read SADs: %d\n", sad_count);
>         if (sad_count <= 0)
> --
> 2.39.2
>

Reviewed-by: Robert Foss <rfoss@kernel.org>

^ permalink raw reply	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2024-05-13 17:01 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-05-10 15:08 [RESEND 0/6] drm, nouveau/radeon/amdpgu: edid_blob_ptr cleanups Jani Nikula
2024-05-10 15:08 ` [RESEND 1/6] drm/nouveau: convert to using is_hdmi and has_audio from display info Jani Nikula
2024-05-10 19:24   ` Lyude Paul
2024-05-13 12:18     ` Jani Nikula
2024-05-10 15:08 ` [RESEND 2/6] drm/radeon: " Jani Nikula
2024-05-13 16:56   ` Robert Foss
2024-05-10 15:08 ` [RESEND 3/6] drm/radeon: remove radeon_connector_edid() and stop using edid_blob_ptr Jani Nikula
2024-05-13 16:59   ` Robert Foss
2024-05-10 15:08 ` [RESEND 4/6] drm/amdgpu: remove amdgpu_connector_edid() " Jani Nikula
2024-05-13 17:01   ` Robert Foss
2024-05-10 15:08 ` [RESEND 5/6] drm/edid: add a helper for EDID sysfs property show Jani Nikula
2024-05-10 15:08 ` [RESEND 6/6] drm/connector: update edid_blob_ptr documentation Jani Nikula
2024-05-10 15:45 ` [RESEND 0/6] drm, nouveau/radeon/amdpgu: edid_blob_ptr cleanups Alex Deucher
2024-05-13 12:19   ` Jani Nikula
2024-05-13 13:53     ` Alex Deucher

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).