How can I configure a fixed EDID?

Hello.
I have a question about how to set the video output signal to a fixed resolution without external edid.

In our previous TX2-platform products, we utilized the Device Tree to establish a custom EDID, ensuring that the HDMI video output signal remained fixed at a specific resolution.
(Specifically, we set the custom EDID in the sor - hdmi-display - nvidia, edid property.)

Now, how can I achieve the same result for the video output signal on the Orin NX-platform?”

There are some experimental patches like below.

diff --git a/hardware/nvidia/t23x/nv-public/tegra234-p3768-0000+p3767-0000.dts b/hardware/nvidia/t23x/nv-public/tegra234-p3768-0000+p3767-0000.dts
index f3950d2d0..52a112388 100644
--- a/hardware/nvidia/t23x/nv-public/tegra234-p3768-0000+p3767-0000.dts
+++ b/hardware/nvidia/t23x/nv-public/tegra234-p3768-0000+p3767-0000.dts
@@ -104,4 +104,28 @@
 			};
 		};
 	};
+
+	display@13800000 {
+		display-timings {
+			display-connector-0 {
+				dcb-index = <0>;
+				stream-0 {
+					timings-phandle = <&mode0>;
+				};
+			};
+		};
+
+		mode0: 1024-768-60Hz {
+			clock-frequency-khz = <65000>;
+			hactive = <1024>;
+			vactive = <768>;
+			hfront-porch = <24>;
+			hback-porch = <160>;
+			hsync-len = <136>;
+			vfront-porch = <3>;
+			vback-porch = <29>;
+			vsync-len = <6>;
+			rrx1k = <60000>;
+		};
+	};
 };
diff --git a/nvdisplay/src/nvidia-modeset/src/nvkms-dpy.c b/nvdisplay/src/nvidia-modeset/src/nvkms-dpy.c
index c94a9cd9a..7dec27ae6 100644
--- a/nvdisplay/src/nvidia-modeset/src/nvkms-dpy.c
+++ b/nvdisplay/src/nvidia-modeset/src/nvkms-dpy.c
@@ -118,9 +118,15 @@ static NvBool DpyConnectEvo(
             return FALSE;
         }
     } else {
-        ReadAndApplyEdidEvo(pDpyEvo, pParams);
+        if ((pDpyEvo->pConnectorEvo->signalFormat == NVKMS_CONNECTOR_SIGNAL_FORMAT_TMDS) &&
+            GetFixedModeTimings(pDpyEvo, &pParams->reply.superframeInfo)) {
+            goto done;
+        } else {
+            ReadAndApplyEdidEvo(pDpyEvo, pParams);
+        }
     }
 
+done:
     nvUpdateInfoFrames(pDpyEvo);
 
     return TRUE;
@@ -535,7 +541,7 @@ fail:
     return FALSE;
 }
 
-static NvBool ReadDPSerializerTimings(
+static NvBool ParseDfpFixedTimings(
     NVDpyEvoRec *pDpyEvo,
     NVT_TIMING *pTimings,
     NvU8 *pBpc,
@@ -548,7 +554,12 @@ static NvBool ReadDPSerializerTimings(
 
     timingParams.subDeviceInstance = pDispEvo->displayOwner;
     timingParams.displayId = nvDpyIdToNvU32(pDpyEvo->pConnectorEvo->displayId);
-    timingParams.stream = pDpyEvo->dp.serializerStreamIndex;
+    if (nvConnectorIsDPSerializer(pDpyEvo->pConnectorEvo)) {
+        timingParams.stream = pDpyEvo->dp.serializerStreamIndex;
+    } else {
+        // For HDMI, multiple streams are not supported and supports single stream
+        timingParams.stream = 0;
+    }
 
     ret = nvRmApiControl(nvEvoGlobal.clientHandle,
                          pDevEvo->displayCommonHandle,
@@ -604,9 +615,8 @@ static NvBool GetFixedModeTimings(
 
     if (pDpyEvo->pConnectorEvo->signalFormat == NVKMS_CONNECTOR_SIGNAL_FORMAT_DSI) {
         ret = ReadDSITimingsFromResman(pDpyEvo, &timings, &bpc);
-    } else if (nvConnectorIsDPSerializer(pDpyEvo->pConnectorEvo)) {
-        ret = ReadDPSerializerTimings(pDpyEvo, &timings, &bpc,
-                                      pSuperframeInfo);
+    } else {
+        ret = ParseDfpFixedTimings(pDpyEvo, &timings, &bpc, &pSuperframeInfo);
     }
 
     if (!ret) {

Thanks for the quick response. I will try that patch.

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.