Browse Source

Merge dfcbf744862ee79c7e5bb4862a0beee7737087f4 on remote branch

Change-Id: I96fff508d542c4c14459f122b4cfd1e1b5ea174e
Linux Build Service Account 11 months ago
parent
commit
110735449b
3 changed files with 34 additions and 7 deletions
  1. 6 1
      msm/dp/dp_panel.c
  2. 22 5
      msm/sde/sde_vm_trusted.c
  3. 6 1
      msm/sde_edid_parser.c

+ 6 - 1
msm/dp/dp_panel.c

@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 // SPDX-License-Identifier: GPL-2.0-only
 /*
 /*
- * Copyright (c) 2022-2023, Qualcomm Innovation Center, Inc. All rights reserved.
+ * Copyright (c) 2022-2024, Qualcomm Innovation Center, Inc. All rights reserved.
  * Copyright (c) 2012-2021, The Linux Foundation. All rights reserved.
  * Copyright (c) 2012-2021, The Linux Foundation. All rights reserved.
  */
  */
 
 
@@ -1576,6 +1576,8 @@ static int dp_panel_read_dpcd(struct dp_panel *dp_panel, bool multi_func)
 	struct dp_panel_private *panel;
 	struct dp_panel_private *panel;
 	struct drm_dp_link *link_info;
 	struct drm_dp_link *link_info;
 	struct drm_dp_aux *drm_aux;
 	struct drm_dp_aux *drm_aux;
+	struct drm_connector *connector;
+	struct sde_connector *sde_conn;
 	u8 *dpcd, rx_feature, temp;
 	u8 *dpcd, rx_feature, temp;
 	u32 dfp_count = 0, offset = DP_DPCD_REV;
 	u32 dfp_count = 0, offset = DP_DPCD_REV;
 
 
@@ -1596,6 +1598,8 @@ static int dp_panel_read_dpcd(struct dp_panel *dp_panel, bool multi_func)
 	panel->vscext_supported = false;
 	panel->vscext_supported = false;
 	panel->vscext_chaining_supported = false;
 	panel->vscext_chaining_supported = false;
 
 
+	connector = dp_panel->connector;
+	sde_conn = to_sde_connector(connector);
 	rlen = drm_dp_dpcd_read(drm_aux, DP_TRAINING_AUX_RD_INTERVAL, &temp, 1);
 	rlen = drm_dp_dpcd_read(drm_aux, DP_TRAINING_AUX_RD_INTERVAL, &temp, 1);
 	if (rlen != 1) {
 	if (rlen != 1) {
 		DP_ERR("error reading DP_TRAINING_AUX_RD_INTERVAL\n");
 		DP_ERR("error reading DP_TRAINING_AUX_RD_INTERVAL\n");
@@ -1637,6 +1641,7 @@ static int dp_panel_read_dpcd(struct dp_panel *dp_panel, bool multi_func)
 		panel->vscext_chaining_supported = !!(rx_feature &
 		panel->vscext_chaining_supported = !!(rx_feature &
 				VSC_EXT_VESA_SDP_CHAINING_SUPPORTED);
 				VSC_EXT_VESA_SDP_CHAINING_SUPPORTED);
 
 
+		sde_conn->hdr_supported = panel->vsc_supported;
 		DP_DEBUG("vsc=%d, vscext=%d, vscext_chaining=%d\n",
 		DP_DEBUG("vsc=%d, vscext=%d, vscext_chaining=%d\n",
 				panel->vsc_supported, panel->vscext_supported,
 				panel->vsc_supported, panel->vscext_supported,
 				panel->vscext_chaining_supported);
 				panel->vscext_chaining_supported);

+ 22 - 5
msm/sde/sde_vm_trusted.c

@@ -33,22 +33,39 @@ int _sde_vm_validate_sgl(struct gh_sgl_desc *expected,
 {
 {
 	u32 idx;
 	u32 idx;
 
 
+	sort(assigned->sgl_entries, assigned->n_sgl_entries,
+			sizeof(assigned->sgl_entries[0]), __sgl_cmp, NULL);
+
 	/*
 	/*
 	 * fragmented address spaces are not supported.
 	 * fragmented address spaces are not supported.
 	 * So the number of sgl entries is expected to be the same.
 	 * So the number of sgl entries is expected to be the same.
 	 */
 	 */
-	if (expected->n_sgl_entries != assigned->n_sgl_entries)
-		return -E2BIG;
+	if (expected->n_sgl_entries != assigned->n_sgl_entries) {
+		SDE_ERROR("expected sgl entries = %d, assigned sgl entries = %d\n",
+				expected->n_sgl_entries, assigned->n_sgl_entries);
 
 
-	sort(assigned->sgl_entries, assigned->n_sgl_entries,
-			sizeof(assigned->sgl_entries[0]), __sgl_cmp, NULL);
+		for (idx = 0; idx < expected->n_sgl_entries; idx++) {
+			struct gh_sgl_entry *e = &expected->sgl_entries[idx];
+
+			SDE_ERROR("expected sgl entry: (0x%llx - %llx)\n",
+				   e->ipa_base, e->size);
+		}
+
+		for (idx = 0; idx < assigned->n_sgl_entries; idx++) {
+			struct gh_sgl_entry *a = &assigned->sgl_entries[idx];
+
+			SDE_ERROR("assigned sgl entry: (0x%llx - %llx)\n",
+				   a->ipa_base, a->size);
+		}
+		return -E2BIG;
+	}
 
 
 	for (idx = 0; idx < expected->n_sgl_entries; idx++) {
 	for (idx = 0; idx < expected->n_sgl_entries; idx++) {
 		struct gh_sgl_entry *e = &expected->sgl_entries[idx];
 		struct gh_sgl_entry *e = &expected->sgl_entries[idx];
 		struct gh_sgl_entry *a = &assigned->sgl_entries[idx];
 		struct gh_sgl_entry *a = &assigned->sgl_entries[idx];
 
 
 		if ((e->ipa_base != a->ipa_base) || (e->size != a->size)) {
 		if ((e->ipa_base != a->ipa_base) || (e->size != a->size)) {
-			SDE_DEBUG("sgl mismatch: (%llu - %llu) vs (%llu - %llu)\n",
+			SDE_ERROR("sgl mismatch: (%llu - %llu) vs (%llu - %llu)\n",
 				   e->ipa_base, e->size, a->ipa_base, a->size);
 				   e->ipa_base, e->size, a->ipa_base, a->size);
 			return -EINVAL;
 			return -EINVAL;
 		}
 		}

+ 6 - 1
msm/sde_edid_parser.c

@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 // SPDX-License-Identifier: GPL-2.0-only
 /*
 /*
- * Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved.
+ * Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. All rights reserved.
  * Copyright (c) 2017-2021, The Linux Foundation. All rights reserved.
  * Copyright (c) 2017-2021, The Linux Foundation. All rights reserved.
  */
  */
 
 
@@ -255,6 +255,11 @@ sde_edid_parse_hdr_db(struct drm_connector *connector, const u8 *db)
 	if (!db)
 	if (!db)
 		return;
 		return;
 
 
+	if (!c_conn->hdr_supported) {
+		SDE_INFO("connected receiver does not support HDR\n");
+		return;
+	}
+
 	len = db[0] & 0x1f;
 	len = db[0] & 0x1f;
 	/* Byte 3: Electro-Optical Transfer Functions */
 	/* Byte 3: Electro-Optical Transfer Functions */
 	c_conn->hdr_eotf = db[2] & 0x3F;
 	c_conn->hdr_eotf = db[2] & 0x3F;