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.
system
Closed
March 27, 2024, 1:53am
6
This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.