edid override in dts bug or failure?

For hardware reasons (HDMI outputs sent to splitters without DDC connected) I’m specifying the edids in the dts under the host1x/sor (0 & 1) nodes (nvidia,edid=xx) for the two outputs.

the issue is two-fold,

  1. The edid exported appears to repeat the first 128 bytes twice instead of containing the extension data:

given:

#define CTI_EDID_FDI_800x480 \
[00 ff ff ff ff ff ff 00 18 89 f4 70 0a 00 00 00\
 0a 1a 01 03 81 0f 09 78 e7 ee 91 a3 54 4c 99 26\
 0f 50 54 00 00 00 01 00 01 01 01 01 01 01 01 01\
 01 01 01 01 01 01 4e 0c 20 c8 30 e0 2d 10 5a 64\
 32 08 96 5a 00 00 00 14 00 00 00 fe 00 52 65 76\
 20 31 2e 30 0a 20 20 20 20 20 00 00 00 fc 00 45\
 4c 49 37 30 2d 49 78 48 57 0a 20 20 00 00 00 fd\
 00 3c 45 1f 24 04 00 0a 20 20 20 20 20 20 01 e1\
 02 03 0C 00 23 0F 07 07 83 01 00 00 00 00 00 00\
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00\
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00\
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00\
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00\
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00\
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00\
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 2b]

        sor1 {
            status = "okay";

            hdmi-display {
                status = "okay";
                nvidia,edid = CTI_EDID_FDI_800x480;
            };
            dp-display {
                status = "disabled";
            };
        };

In the dts. The output on the device is:

root@tegra-ubuntu:~# cat /sys/kernel/debug/tegradc.0/edid 
 00 ff ff ff ff ff ff 00 18 89 f4 70 0a 00 00 00
 0a 1a 01 03 81 0f 09 78 e7 ee 91 a3 54 4c 99 26
 0f 50 54 00 00 00 01 00 01 01 01 01 01 01 01 01
 01 01 01 01 01 01 4e 0c 20 c8 30 e0 2d 10 5a 64
 32 08 96 5a 00 00 00 14 00 00 00 fe 00 52 65 76
 20 31 2e 30 0a 20 20 20 20 20 00 00 00 fc 00 45
 4c 49 37 30 2d 49 78 48 57 0a 20 20 00 00 00 fd
 00 3c 45 1f 24 04 00 0a 20 20 20 20 20 20 01 e1
 00 ff ff ff ff ff ff 00 18 89 f4 70 0a 00 00 00
 0a 1a 01 03 81 0f 09 78 e7 ee 91 a3 54 4c 99 26
 0f 50 54 00 00 00 01 00 01 01 01 01 01 01 01 01
 01 01 01 01 01 01 4e 0c 20 c8 30 e0 2d 10 5a 64
 32 08 96 5a 00 00 00 14 00 00 00 fe 00 52 65 76
 20 31 2e 30 0a 20 20 20 20 20 00 00 00 fc 00 45
 4c 49 37 30 2d 49 78 48 57 0a 20 20 00 00 00 fd
 00 3c 45 1f 24 04 00 0a 20 20 20 20 20 20 01 e1
root@tegra-ubuntu:~#
  1. And I’m uncertain if the above is the cause, but sound output via HDMI is not available. Despite the output of aplay -l and aplay -L showing the hdmi is there. I verified both edid I’ve used have audio and speakers specified in the edid. Adding the hdmi output devices manually in default.pa makes them visible in Sound Settings but no audio output via test. If I get the same info from the devkit I see the second 128 bytes are different.
root@tegra-ubuntu:/home/nvidia# cat /sys/kernel/debug/tegradc.0/edid
 00 ff ff ff ff ff ff 00 10 ac a0 40 4c 33 33 30
 12 18 01 03 80 33 1d 78 ea e5 95 a6 56 52 9d 27
 10 50 54 a5 4b 00 71 4f 81 80 a9 c0 d1 c0 01 01
 01 01 01 01 01 01 02 3a 80 18 71 38 2d 40 58 2c
 45 00 fd 1e 11 00 00 1e 00 00 00 ff 00 44 57 46
 32 58 34 34 52 30 33 33 4c 0a 00 00 00 fc 00 44
 45 4c 4c 20 50 32 33 31 34 54 0a 20 00 00 00 fd
 00 38 4c 1e 53 11 00 0a 20 20 20 20 20 20 01 85
 02 03 26 f1 4f 90 05 04 03 02 07 16 01 06 11 12
 15 13 14 1f 23 09 07 07 65 03 0c 00 10 00 83 01
 00 00 e3 05 03 01 02 3a 80 18 71 38 2d 40 58 2c
 45 00 fd 1e 11 00 00 1e 01 1d 80 18 71 1c 16 20
 58 2c 25 00 fd 1e 11 00 00 9e 01 1d 00 72 51 d0
 1e 20 6e 28 55 00 fd 1e 11 00 00 1e 8c 0a d0 8a
 20 e0 2d 10 10 3e 96 00 fd 1e 11 00 00 18 00 00
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 c5

root@tegra-ubuntu:~# aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: tegrahda [tegra-hda], device 3: HDMI 0 [HDMI 0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: tegrahda [tegra-hda], device 7: HDMI 0 [HDMI 0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

root@tegra-ubuntu:~# aplay -L
null
    Discard all samples (playback) or generate zero samples (capture)
pulse
    PulseAudio Sound Server
default
music
demixer
voice
aux_plug
music_and_voice
dmix:CARD=tegrahda,DEV=3
    tegra-hda, HDMI 0
    Direct sample mixing device
dmix:CARD=tegrahda,DEV=7
    tegra-hda, HDMI 0
    Direct sample mixing device
dsnoop:CARD=tegrahda,DEV=3
    tegra-hda, HDMI 0
    Direct sample snooping device
dsnoop:CARD=tegrahda,DEV=7
    tegra-hda, HDMI 0
    Direct sample snooping device
hw:CARD=tegrahda,DEV=3
    tegra-hda, HDMI 0
    Direct hardware device without any conversions
hw:CARD=tegrahda,DEV=7
    tegra-hda, HDMI 0
    Direct hardware device without any conversions
plughw:CARD=tegrahda,DEV=3
    tegra-hda, HDMI 0
    Hardware device with all software conversions
plughw:CARD=tegrahda,DEV=7
    tegra-hda, HDMI 0
    Hardware device with all software conversions

Using the fallback mechanism of course doesn’t work because we need different resolutions for the two outputs. Seems better to have the default resolution at the desired setting than relying on xorg configurations when we’d eventually like to not require x/lightdm/user logged in for the embedded device.

And tangentially related - how to get sound output to second HDMI? Two devices are listed, 3 and 7, even on a stock devkit. In the dts there are two dpaux@xxx enabled. I think on the devkit DEV=7 outputs on HDMI-0, but neither works as per above when overriding the edid.

re the audio setup maybe everyone already knows this but there are two udev rules that switch the audio setup (asound.conf and default.pa links) when HDMI is hotplugged.

nvidia@tegra-ubuntu:~$ cat < /etc/udev/rules.d/90-alsa-asound-tegra.rules 
SUBSYSTEM!="sound", GOTO="sound_end"
KERNEL!="card*", GOTO="sound_end"

ATTRS{id}=="tegrasndt186ref", ACTION=="add", RUN+="/bin/rm /var/lib/alsa/asound.state"
ATTRS{id}=="tegrasndt186ref", ACTION=="add", RUN+="/etc/amixer_settings"
ATTRS{id}=="tegrasndt186ref", ACTION=="add", RUN+="/bin/ln -sf /etc/asound.conf.tegrasndt186ref /etc/asound.conf"
ATTRS{id}=="tegrahda", ACTION=="add", RUN+="/bin/ln -sf /etc/asound.conf.tegrahda /etc/asound.conf"

LABEL="sound_end"

nvidia@tegra-ubuntu:~$ cat < /etc/udev/rules.d/92-hdmi-audio-tegra.rules 
SUBSYSTEM!="switch", GOTO="hdmi_end"
KERNEL!="hdmi_audio", GOTO="hdmi_end"

ATTRS{state}=="1", RUN+="/bin/ln -sf /etc/pulse/default.pa.hdmi /etc/pulse/default.pa"
ATTRS{state}=="0", RUN+="/bin/ln -sf /etc/pulse/default.pa.orig /etc/pulse/default.pa"

ATTRS{state}=="1", RUN+="/bin/ln -sf /etc/asound.conf.tegrahda /etc/asound.conf"
ATTRS{state}=="0", RUN+="/bin/ln -sf /etc/asound.conf.tegrasndt186ref /etc/asound.conf"

LABEL="hdmi_end"

dgoetz,

Thanks for reporting this. So the first issue is EDID for 128 byte seems unsupported, right?

As for question 2, I am not sure if I get the scenario clear enough. Could you share how to reproduce this issue?

Hi Wayne

For 1 above I tracked down the issue to code in kernel/display/drivers/video/tegra/dc/edid.c that emulates the i2c transfer function when using nvidia,edid node. I modified it to deal with the offset and read the entire edid.

int tegra_dc_edid_blob(struct tegra_dc *dc, struct i2c_msg *msgs, int num)
{
	struct i2c_msg *pmsg;
	int i;
	int status = 0;
	u32 len = 0;
	struct device_node *np_panel = NULL;
	u32 data_ofst = 0;
	u32 data_len = 0;
	u8* data = NULL;
	
	np_panel = tegra_get_panel_node_out_type_check(dc,
		dc->pdata->default_out->type);

	if (!np_panel || !of_device_is_available(np_panel))
		return -ENOENT;

	for (i = 0; i < num; ++i) {
		pmsg = &msgs[i];

		/* Read */
		if (pmsg->flags & I2C_M_RD) { 
			//printk("      Function %s: (%d) pmsg->flags & I2C_M_RD\n", __FUNCTION__, __LINE__);
			len = pmsg->len;
			//status = of_property_read_u8_array(np_panel,
			//	"nvidia,edid", pmsg->buf, len); 

			status = of_property_read_u8_array(np_panel,
				"nvidia,edid", data, data_len); 

			if (status == EOVERFLOW) {
				status = of_property_read_u8_array(np_panel,
					"nvidia,edid", pmsg->buf, len); 
			}
			else {
				memcpy(pmsg->buf, data + data_ofst, len);
			}

			if (status) {
				dev_err(&dc->ndev->dev,
					"Failed to read EDID blob from DT"
					" addr:%d, size:%d\n",
					pmsg->addr, len);

				if (data)
					kfree(data);

				return status;
			}
		}
 		/* cmd */
		else {
			data_ofst = (int)*pmsg->buf;
			data_len = EDID_BYTES_PER_BLOCK + data_ofst;
			data = kzalloc(sizeof(u8) * data_len, GFP_KERNEL);
		}
	}
	of_node_put(np_panel);

	if (data)
		kfree(data);

	return i;
}

Now I get a full edid that gets parsed correctly in tegra_edid_get_monspecs()/tegra_edid_parse_ext_block() to indicate that the hdmi has audio/speakers in the eld data. (caveat the above code probably still needs to check the i2c address to deal with EDID > 256 bytes)

If I understand correctly the devkit configuration is sor1/HDMI-0/tegrahda,7 and shows up in Sound Settings as HDMI/DisplayPort 2 tegra-hda.

So we have enabled sor for HDMI-1 and dpaux@155c0000, and have valid eld#3.0 data, manually adding “load-module module-alsa-sink device=hw:0,3 sink_name=tegrahda3 sink_properties=device.description=tegrahda3” to /etc/pulse/default.pa (which is actually default.pa.orig) and I can use the HDMI-1 audio output.

But I’m still missing HDMI-0 audio output.

edid appears correct:

root@tegra-ubuntu:~# cat /sys/kernel/debug/tegradc.1/edid
 00 ff ff ff ff ff ff 00 0c 34 21 fc 01 01 01 01
 2e 13 01 03 80 30 1b 78 2e 35 85 a6 56 48 9a 24
 12 50 54 bf ef 80 d1 c0 b3 00 a9 40 95 00 90 40
 81 80 81 40 71 4f f2 39 80 18 71 38 2d 40 58 2c
 45 00 dd 0c 11 00 00 1e 00 00 00 ff 00 59 30 30
 30 30 30 30 30 30 30 30 31 0a 00 00 00 fd 00 32
 4b 0f 52 12 00 0a 20 20 20 20 20 20 00 00 00 fc
 00 56 50 43 2d 48 53 33 0a 20 20 20 20 20 01 cc
 02 03 25 f1 52 90 05 04 03 02 07 06 0f 0e 1f 14
 1e 1d 13 12 11 16 01 23 0f 07 07 83 01 00 00 65
 03 0c 00 10 00 f3 39 80 18 71 38 2d 40 58 2c 45
 00 dd 0c 11 00 00 1e 01 1d 00 72 51 d0 1e 20 6e
 28 55 00 dd 0c 11 00 00 1e 02 3a 80 d0 72 38 2d
 40 10 2c 45 80 dd 0c 11 00 00 1e 8c 0a d0 8a 20
 e0 2d 10 10 3e 96 00 dd 0c 11 00 00 18 00 00 00
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3c

but eld data is missing, hence I think making alsa think it is not available:

root@tegra-ubuntu:~# cat /proc/asound/tegrahda/eld#4.0 
monitor_present		0
eld_valid		0

I added a bunch of printk and something else appears odd as well, the name reported when the device edid is probed appears to not match what shows up in the eld data:

[    0.392681] Enter Function tegra_dc_probe: line(5801)
[    0.392749] DC OR NODE connected to /host1x/sor1
[    0.392879] generic_infoframe_type: 0x87
[    0.392987] tegradc 15210000.nvdisplay: DT parsed successfully
[    0.393031] tegradc 15210000.nvdisplay: Display dc.ffffff80022c0000 registered with id=0
[    0.400002] tegra_nvdisp_bandwidth_register_max_config: max config iso bw = 16727000 KB/s
[    0.400021] tegra_nvdisp_bandwidth_register_max_config: max config EMC floor = 665600000 Hz
[    0.400039] tegra_nvdisp_bandwidth_register_max_config: max config hubclk = 357620000 Hz
[    0.400080] tegradc 15210000.nvdisplay: vblank syncpt # 7 for dc 1
[    0.400095] tegradc 15210000.nvdisplay: vpulse3 syncpt # 8 for dc 1
[    0.400327] tegra-adma 2930000.adma: Tegra ADMA driver register 10 channels
[    0.401914] Enter Function tegra_hdmi_ddc_init: (192)
[    0.401930]       Function tegra_hdmi_ddc_init: (199) tegra_edid_create(dc, tegra_dc_edid_blob)
[    0.401948] Enter Function tegra_edid_create: (991)
[    0.402071] tegra-fuse-burn 3820000.efuse:efuse-burn: Fuse burn driver initialized
[    0.402298] tegradc 15210000.nvdisplay: hdmi: no prod_list_hdmi_board, use default range
[    0.402317] Enter Function tegra_dc_set_fbcon_boot_mode: line(802)
[    0.402330] Enter Function tegra_edid_get_monspecs: line(764)
[    0.402360]       Function tegra_edid_get_monspecs: line(795): Using tegra_edid_read_block (0)
[    0.402377] Enter Function tegra_edid_read_block: line(214) msg_len=2
[    0.402390] Enter Function tegra_dc_edid_blob: (1052) num=2
[    0.402404] kfuse 3830000.kfuse: initialized
[    0.402449]       Function tegra_dc_edid_blob: (1061) i=0
[    0.402462]       Function tegra_dc_edid_blob: (1099) data_ofst = 0, data_len=128
[    0.402477]       Function tegra_dc_edid_blob: (1061) i=1
[    0.402489]       Function tegra_dc_edid_blob: (1066) pmsg->flags & I2C_M_RD
[    0.402501]       Function tegra_dc_edid_blob: (1068) pmsg->len = 128
[    0.402526]       Function tegra_edid_get_monspecs: line(809): new_data->eld.monitor_name ELI70-IxHW
[    0.402542]       Function tegra_edid_get_monspecs: line(820): extension blocks (1)
[    0.402558]       Function tegra_edid_get_monspecs: line(849): extension_blocks - Using tegra_edid_read_block (1)
[    0.402575] Enter Function tegra_edid_read_block: line(214) msg_len=2
[    0.402587] Enter Function tegra_dc_edid_blob: (1052) num=2
[    0.402653]       Function tegra_dc_edid_blob: (1061) i=0
[    0.402666]       Function tegra_dc_edid_blob: (1099) data_ofst = 128, data_len=256
[    0.402681]       Function tegra_dc_edid_blob: (1061) i=1
[    0.402692]       Function tegra_dc_edid_blob: (1066) pmsg->flags & I2C_M_RD
[    0.402704]       Function tegra_dc_edid_blob: (1068) pmsg->len = 128
[    0.402718]       Function tegra_edid_get_monspecs: line(856): extension_blocks - data[1 * EDID_BYTES_PER_BLOCK] == [02]
[    0.402736] Enter Function tegra_edid_parse_ext_block: line(303)
[    0.402748]       Function tegra_edid_parse_ext_block: line(319) basic_audio = true; edid->support_audio = 1;
[    0.402766]       Function tegra_edid_parse_ext_block: line(371) edid->eld.spk_alloc = 1;
[    0.402782]       Function tegra_edid_parse_ext_block: line(465) edid->eld.spk_alloc = 1;
[    0.402800]       Function tegra_dc_set_fbcon_boot_mode: line(823) got mode
[    0.403734] tegra-pmc-iopower pmc-iopower: NO_IOPOWER setting 0x0
[    0.404142] tegradc 15210000.nvdisplay: probed
[    0.404155] Serial: 8250/16550 driver, 4 ports, IRQ sharing disabled
[    0.406069] 3100000.serial: ttyS0 at MMIO 0x3100000 (irq = 37, base_baud = 25500000) is a Tegra
[    0.407273] 3110000.serial: ttyTHS1 at MMIO 0x3110000 (irq = 38, base_baud = 0) is a TEGRA_UART
[    0.408062] c280000.serial: ttyTHS2 at MMIO 0xc280000 (irq = 39, base_baud = 0) is a TEGRA_UART
[    0.408236] serial-tegra 3130000.serial: RX in PIO mode
[    0.408933] 3130000.serial: ttyTHS3 at MMIO 0x3130000 (irq = 40, base_baud = 0) is a TEGRA_UART
[    0.409752] c290000.serial: ttyTHS6 at MMIO 0xc290000 (irq = 41, base_baud = 0) is a TEGRA_UART
[    0.416490] brd: module loaded
[    0.419563] loop: module loaded
[    0.419756] nct1008_nct72 7-004c: find device tree node, parsing dt
[    0.419771] nct1008_nct72 7-004c: starting parse dt
[    0.419849] nct1008_nct72 7-004c: success parsing dt
[    0.419961] nct1008_nct72 7-004c: success in enabling tmp451 VDD rail
[    0.426570] Console: switching to colour frame buffer device 100x30
[    0.430211] tegradc 15210000.nvdisplay: fb registered
[    0.437960] gk20a 17000000.gp10b: failed to allocate secure buffer -12
[    0.438079] PD DISP0 index2 UP
[    0.439052] PD DISP1 index3 UP
[    0.439133] PD DISP2 index4 UP
[    0.447329] Parent Clock set for DC plld2
[    0.451811] tegradc 15210000.nvdisplay: hdmi: pclk:31500K, set prod-setting:prod_c_54M
[    0.456210] tmp451: Enabled overheat logging at 104.00C
[    0.457503] nct1008_nct72 7-004c: nct1008_probe: initialized
[    0.460504] THERMAL EST: found 3 subdevs
[    0.461635] THERMAL EST num_resources: 0
[    0.462713] [THERMAL EST subdev 0]
[    0.463745] [THERMAL EST subdev 1]
[    0.464748] [THERMAL EST subdev 2]
[    0.465893] thermal thermal_zone7: Registering thermal zone thermal_zone7 for type thermal-fan-est
[    0.467827] THERMAL EST: thz register success.
[    0.468886] THERMAL EST: end of probe, return err: 0
[    0.469143] Enter Function tegra_dc_probe: line(5801)
[    0.469199] DC OR NODE connected to /host1x/sor
[    0.469277] generic_infoframe_type: 0x87
[    0.469353] tegradc 15220000.nvdisplay: DT parsed successfully
[    0.469380] tegradc 15220000.nvdisplay: Display dc.ffffff8002660000 registered with id=1
[    0.474774] tegra_profiler: Branch: Dev
[    0.475778] tegra_profiler: Version: 1.117
[    0.476758] tegra_profiler: Samples version: 41
[    0.477699] tegra_profiler: IO version: 22
[    0.478606] armv8_pmu: imp: 0x41, idcode: 0x1
[    0.479539] armv8_pmu: [0] arch: AA64 PmuV3 ARM CORTEX-A57, type: 5, ver: 0, pmu ver: 0x1
[    0.480558] armv8_pmu: imp: 0x4e, idcode: 0x1
[    0.481575] armv8_pmu: [1] arch: AA64 PmuV3 NVIDIA (Denver), type: 6, ver: 0, pmu ver: 0x1
[    0.482172] tegradc 15220000.nvdisplay: vblank syncpt # 9 for dc 2
[    0.482176] tegradc 15220000.nvdisplay: vpulse3 syncpt # 11 for dc 2
[    0.483887] Enter Function tegra_hdmi_ddc_init: (192)
[    0.483889]       Function tegra_hdmi_ddc_init: (199) tegra_edid_create(dc, tegra_dc_edid_blob)
[    0.483891] Enter Function tegra_edid_create: (991)
[    0.484173] tegradc 15220000.nvdisplay: hdmi: no prod_list_hdmi_board, use default range
[    0.484177] Enter Function tegra_dc_set_fbcon_boot_mode: line(802)
[    0.484179] Enter Function tegra_edid_get_monspecs: line(764)
[    0.484202]       Function tegra_edid_get_monspecs: line(795): Using tegra_edid_read_block (0)
[    0.484204] Enter Function tegra_edid_read_block: line(214) msg_len=2
[    0.484206] Enter Function tegra_dc_edid_blob: (1052) num=2
[    0.484232]       Function tegra_dc_edid_blob: (1061) i=0
[    0.484234]       Function tegra_dc_edid_blob: (1099) data_ofst = 0, data_len=128
[    0.484235]       Function tegra_dc_edid_blob: (1061) i=1
[    0.484237]       Function tegra_dc_edid_blob: (1066) pmsg->flags & I2C_M_RD
[    0.484238]       Function tegra_dc_edid_blob: (1068) pmsg->len = 128
[    0.484255]       Function tegra_edid_get_monspecs: line(809): new_data->eld.monitor_name VPC-HS3
[    0.484257]       Function tegra_edid_get_monspecs: line(820): extension blocks (1)
[    0.484259]       Function tegra_edid_get_monspecs: line(849): extension_blocks - Using tegra_edid_read_block (1)
[    0.484260] Enter Function tegra_edid_read_block: line(214) msg_len=2
[    0.484261] Enter Function tegra_dc_edid_blob: (1052) num=2
[    0.484285]       Function tegra_dc_edid_blob: (1061) i=0
[    0.484287]       Function tegra_dc_edid_blob: (1099) data_ofst = 128, data_len=256
[    0.484288]       Function tegra_dc_edid_blob: (1061) i=1
[    0.484290]       Function tegra_dc_edid_blob: (1066) pmsg->flags & I2C_M_RD
[    0.484291]       Function tegra_dc_edid_blob: (1068) pmsg->len = 128
[    0.484295]       Function tegra_edid_get_monspecs: line(856): extension_blocks - data[1 * EDID_BYTES_PER_BLOCK] == [02]
[    0.484303] Enter Function tegra_edid_parse_ext_block: line(303)
[    0.484304]       Function tegra_edid_parse_ext_block: line(319) basic_audio = true; edid->support_audio = 1;
[    0.484306]       Function tegra_edid_parse_ext_block: line(371) edid->eld.spk_alloc = 1;
[    0.484308]       Function tegra_edid_parse_ext_block: line(465) edid->eld.spk_alloc = 1;
[    0.484316]       Function tegra_dc_set_fbcon_boot_mode: line(823) got mode
[    0.485332] tegradc 15220000.nvdisplay: probed

From the above I would expect eld#3.0 to be ELI70-IxHW, instead it is VPC-HS3:

nvidia@tegra-ubuntu:~$ cat /proc/asound/tegrahda/eld#3.0 
monitor_present		1
eld_valid		1
monitor_name		VPC-HS3
connection_type		HDMI
eld_version		[0x2] CEA-861D or below
edid_version		[0x3] CEA-861-B, C or D
manufacture_id		0xfc21
product_id		0x340c
port_id			0x10
support_hdcp		0
support_ai		0
audio_sync_delay	0
speakers		[0x1] FL/FR
sad_count		1
sad0_coding_type	[0x1] LPCM
sad0_channels		8
sad0_rates		[0xe0] 32000 44100 48000
sad0_bits		[0xe0000] 16 20 24

Mayhaps this is where thigs are breaking down, somehow the eld data is improperly assigned.

Hi,

Sorry that I need to make this issue easier to reproduce.

  1. Looks like you are using DP+ HDMI dual display. Could you share what is the correct mapping of tegradc/sor/your monitor so that it is easier to understand log.

  2. Since you are using dual display, I think you have a custom board. How about using devkit with HDMI only? Is the issue reproducible? It seems the audio issue is only on HDMI,right?

  3. If you don’t hack the EDID, could you have audio output?

Wayne,

  1. Yes, dual display but two HDMI not DP+HDMI, maybe that is just semantics though. I extracted from the hardware to hopefully capture everything you’re looking for.
removed to clean up post, see #7 for link

The DTS is too long and forum comment cannot print all out.

Please attach as a file.

Hmm, it appeared to work correctly in the preview, but here is a link to it:

https://www.dropbox.com/s/vocnjdeerz3ms8n/extracted.dts?dl=0

dgoetz,

Thanks for sharing. Could you reproduce this issue on single hdmi usecase?

If so, could you try to use devkit with fallback EDID to reproduce issue? It would be helpful for us to debug.