I’ve raised this issue before a couple of times, but whenever I try to connect an HDMI display to the Nano via the DisplayPort jack (and obviously using some kind of a DP-to-HDMI dongle or cable) it never works. I’ve tried dozens of active dongles, passive dongles, direct cables, etc. The only thing that seems to work is driving an actual DisplayPort display. I can’t drive any display that accepts only HDMI input.
This has to be some kind of bug. This must be made to work with a DP-to-HDMI solution, because the overwhelming majority of people are going to try to connect displays to the Nano the way I did: by just connecting DP to HDMI. (Obviously this is a two-display scenario, where the HDMI for display 1 is already in use and we are trying to drive a second HDMI display by way of the DP jack.)
I have a tech demo coming up and I’m getting quite desperate for a solution to this problem.
Is there some way to force the Nano to output a certain mode without negotiating with the display? We used to force EDIDs all the time on the Quadro cards. I’m wondering if something similar is possible for the Nano.
This method is from rel-28. But should be applied to rel-32 too.
Forcing edid (This is most likely when your monitor failed to be up due to problematic default EDID)
1. Prepare a known 256byte EDID.
2. set use_fallback = true; in tegra_edid_get_monspecs() under edid.c.
3. fill in the known EDID to default_720p_edid[256].
(It took a long time for me to figure out how to build a kernel and try this.) But, unfortunately this is not working for me.
Here is the output of my dmesg after plugging in a display. The connection is from the DP jack on the nano via a DP-to-HDMI cable to the HDMI input jack of the display.
[ 54.409575] tegradc tegradc.1: dp: plug event received
[ 54.409789] hpd: state 3 (Disabled), hpd 1, pending_hpd_evt 1
[ 54.409829] hpd: switching from state 3 (Disabled) to state 0 (Reset)
[ 54.514219] hpd: state 0 (Reset), hpd 1, pending_hpd_evt 0
[ 54.514330] tegradc tegradc.1: blank - powerdown
[ 54.514552] extcon-disp-state extcon:disp-state: cable 44 state 0 already set.
[ 54.514585] Extcon DP: HPD disabled
[ 54.514614] hpd: hpd_switch 0
[ 54.514653] hpd: switching from state 0 (Reset) to state 1 (Check Plug)
[ 54.514732] hpd: state 1 (Check Plug), hpd 1, pending_hpd_evt 0
[ 54.514782] hpd: switching from state 1 (Check Plug) to state 2 (Check EDID)
[ 54.522133] hpd: state 2 (Check EDID), hpd 1, pending_hpd_evt 0
[ 54.522934] tegradc tegradc.1: dp: aux write retry (0x10000100) -- 2
[ 54.524658] tegradc tegradc.1: dp: aux write retry (0x10000100) -- 1
[ 54.526086] tegradc tegradc.1: dp: aux write retry (0x10000100) -- 0
[ 54.527701] tegradc tegradc.1: dp: aux write got error (0x10000100)
[ 54.534131] tegradc tegradc.1: dp: Failed to write DPCD data. CMD 0x600, Status 0x10000100
[ 54.543439] tegradc tegradc.1: dp: aux write retry (0x10000100) -- 2
[ 54.544713] tegradc tegradc.0: unblank
[ 54.544725] tegradc tegradc.1: blank - powerdown
[ 54.545183] tegradc tegradc.1: dp: aux write retry (0x10000100) -- 1
[ 54.546710] tegradc tegradc.1: dp: aux write retry (0x10000100) -- 0
[ 54.548167] tegradc tegradc.1: dp: aux write got error (0x10000100)
[ 54.555632] tegradc tegradc.1: dp: Failed to write DPCD data. CMD 0x600, Status 0x10000100
[ 54.564821] tegradc tegradc.1: dp: aux write retry (0x10000100) -- 2
[ 54.566327] tegradc tegradc.1: dp: aux write retry (0x10000100) -- 1
[ 54.567797] tegradc tegradc.1: dp: aux write retry (0x10000100) -- 0
[ 54.569430] tegradc tegradc.1: dp: aux write got error (0x10000100)
[ 54.575842] tegradc tegradc.1: dp: Failed to write DPCD data. CMD 0x600, Status 0x10000100
[ 54.585297] tegradc tegradc.1: dp: aux write retry (0x10000100) -- 2
[ 54.586496] tegradc tegradc.1: dp: aux write retry (0x10000100) -- 1
[ 54.587951] tegradc tegradc.1: dp: aux write retry (0x10000100) -- 0
[ 54.589394] tegradc tegradc.1: dp: aux write got error (0x10000100)
[ 54.595761] tegradc tegradc.1: dp: Failed to write DPCD data. CMD 0x600, Status 0x10000100
[ 54.604098] tegradc tegradc.1: dp: failed to exit panel power save mode (0xfffffff2)
[ 54.611883] hpd: edid read prepare failed
[ 54.615776] tegradc tegradc.1: blank - powerdown
[ 54.615802] extcon-disp-state extcon:disp-state: cable 44 state 0 already set.
[ 54.615807] Extcon DP: HPD disabled
[ 54.615810] hpd: hpd_switch 0
[ 54.615816] hpd: switching from state 2 (Check EDID) to state 3 (Disabled)
[ 54.619133] tegradc tegradc.0: unblank
[ 54.619141] tegradc tegradc.1: blank - powerdown
@WayneWWW but I thought that your instructions would force the EDID in the kernel and so I thought that this was going to work even though it couldn’t read the edid. that was what I was asking for originally, to be able to force the EDID.
216 if (data->ops->edid_read_prepare)
217 if (!data->ops->edid_read_prepare(data->drv_data)) {
218 pr_err("hpd: edid read prepare failed");
219 goto end_disabled;
220 }
Actually, I am wondering if link training is needed for such case (HDMI-> DP adapter), if it still needs LT, then maybe this method would not work either.
Facing the same issue. Used a DisplayPort to DVI(-D) Cable (DVI-I at Projector), it does not work for me. Haven’t checked dmesg so far. Projector Canon SX60.