Jetson TX2 Pinmux table DPx_AUX_CH+-/I2C not working / HDMI crashing at boot

Hello all,

When editing the pinmux table excel file for our custom carrier board, I don’t see anything changed in the output files when changing these settings:

Test1:

Test2:

I’ve used V1.08 of the pinmux excel file, which I believe should be the most recent one.

We’ve encountered this problem because we are having problems getting HDMI to work on our own custom carrier board. It was working fine on 28.2.1, but ever since changing to 32.1 it doesn’t seem to work. The weird thing is, with the original pinmux files (non-edited, default files the flash.sh takes), it does work… I’ve attached a boot log, it seems to be crashing on this part:

[    4.138788] edid invalid
[    4.142100] tegradc 15210000.nvdisplay: hdmi: tmds rate:25200K prod-setting:prod_c_hdmi_0m_54m
[    4.152131] tegradc 15210000.nvdisplay: hdmi: get RGB quant from EDID.
[    4.158693] Unable to handle kernel read from unreadable memory at virtual address 00000063
[    4.167048] Mem abort info:
[    4.169861]   ESR = 0x96000005
[    4.172926]   Exception class = DABT (current EL), IL = 32 bits
[    4.178855]   SET = 0, FnV = 0
[    4.181920]   EA = 0, S1PTW = 0
[    4.185074] Data abort info:
[    4.187952]   ISV = 0, ISS = 0x00000005
[    4.191796]   CM = 0, WnR = 0
[    4.194774] [0000000000000063] user address but active_mm is swapper
[    4.201141] Internal error: Oops: 96000005 [#1] PREEMPT SMP
[    4.206707] Modules linked in:
[    4.209774] CPU: 2 PID: 480 Comm: kworker/u12:4 Not tainted 4.9.140+ #6
[    4.216379] Hardware name: quill (DT)
[    4.220076] Workqueue: events_unbound async_run_entry_fn
[    4.225394] task: ffffffc1eb33aa00 task.stack: ffffffc1eac58000
[    4.231327] PC is at tegra_edid_is_rgb_quantization_selectable+0x4/0x10
[    4.237950] LR is at tegra_hdmi_avi_infoframe+0x168/0xa88
[    4.243359] pc : [<ffffff80085e1b0c>] lr : [<ffffff800862ad58>] pstate: 40400045
[    4.250746] sp : ffffffc1eac5b8a0
[    4.254056] x29: ffffffc1eac5b8a0 x28: 000000000000000b
[    4.259383] x27: ffffffc1ea025108 x26: 0000000001808580
[    4.264712] x25: 0000000000006270 x24: ffffffc1ea173018
[    4.270039] x23: 0000000000000000 x22: 0000000000000000
[    4.275365] x21: ffffffc1eadcb840 x20: ffffffc1ea173018
[    4.280693] x19: ffffffc1eadcb818 x18: 0000000000000010
[    4.286020] x17: 0000000000000001 x16: 0000000000000000
[    4.291347] x15: ffffffffffffffff x14: 6620746e61757120
[    4.296677] x13: 4247522074656720 x12: 3a696d6468203a79
[    4.302003] x11: 616c70736964766e x10: 000000000000022c
[    4.307331] x9 : 3120636461726765 x8 : ffffff80083d2fe8
[    4.312661] x7 : ffffff8009e840d8 x6 : ffffff80083d23f8
[    4.317987] x5 : 0000000000000015 x4 : 000000000000000f
[    4.323314] x3 : 0000000000000000 x2 : ffffff8009e541f0
[    4.328641] x1 : ffffffc1eb33aa00 x0 : 0000000000000000
[    4.333968]
[    4.335458] Process kworker/u12:4 (pid: 480, stack limit = 0xffffffc1eac58000)
[    4.342670] Call trace:
[    4.345116] [<ffffff80085e1b0c>] tegra_edid_is_rgb_quantization_selectable+0x4/0x10
[    4.352765] [<ffffff800862c37c>] tegra_hdmi_controller_enable+0x254/0xf60
[    4.359546] [<ffffff800862d0d0>] tegra_dc_hdmi_enable+0x48/0xb8
[    4.365460] [<ffffff800865c48c>] tegra_nvdisp_head_enable+0x534/0x14c0
[    4.371982] [<ffffff80085c0268>] _tegra_dc_enable+0xf0/0x110
[    4.377635] [<ffffff80085c6a3c>] tegra_dc_probe+0x102c/0x1668
[    4.383377] [<ffffff800876cc50>] platform_drv_probe+0x60/0xc0
[    4.389120] [<ffffff800876a2d0>] driver_probe_device+0xd8/0x408
[    4.395033] [<ffffff800876a6dc>] __driver_attach+0xdc/0x128
[    4.400601] [<ffffff8008767d4c>] bus_for_each_dev+0x5c/0xa8
[    4.406169] [<ffffff8008769ad0>] driver_attach+0x30/0x40
[    4.411476] [<ffffff8008768308>] driver_attach_async+0x20/0x60
[    4.417304] [<ffffff80080dfc48>] async_run_entry_fn+0x48/0x158
[    4.423131] [<ffffff80080d4f3c>] process_one_work+0x1e4/0x4b0
[    4.428872] [<ffffff80080d5258>] worker_thread+0x50/0x4c8
[    4.434265] [<ffffff80080dbee4>] kthread+0xec/0xf0
[    4.439053] [<ffffff8008083850>] ret_from_fork+0x10/0x40
[    4.444362] ---[ end trace e97fcc7a0a0bb8c2 ]---
[    4.455384] Unable to handle kernel paging request at virtual address ffffffffffffffd8
[    4.463298] Mem abort info:
[    4.466089]   ESR = 0x96000005
[    4.469139]   Exception class = DABT (current EL), IL = 32 bits
[    4.475051]   SET = 0, FnV = 0
[    4.478101]   EA = 0, S1PTW = 0
[    4.481237] Data abort info:
[    4.484114]   ISV = 0, ISS = 0x00000005
[    4.487944]   CM = 0, WnR = 0
[    4.490909] swapper pgtable: 4k pages, 39-bit VAs, pgd = ffffff800a1a3000
[    4.497689] [ffffffffffffffd8] *pgd=0000000000000000, *pud=0000000000000000
[    4.504668] Internal error: Oops: 96000005 [#2] PREEMPT SMP
[    4.510235] Modules linked in:
[    4.513300] CPU: 2 PID: 480 Comm: kworker/u12:4 Tainted: G      D         4.9.140+ #6
[    4.521121] Hardware name: quill (DT)
[    4.524802] task: ffffffc1eb33aa00 task.stack: ffffffc1eac58000
[    4.530719] PC is at kthread_data+0x24/0x30
[    4.534899] LR is at wq_worker_sleeping+0x20/0xd0
[    4.539614] pc : [<ffffff80080dcad4>] lr : [<ffffff80080d6380>] pstate: 804000c5
[    4.547003] sp : ffffffc1eac5b4a0
[    4.550314] x29: ffffffc1eac5b4a0 x28: ffffffc1eb33aa00
[    4.555641] x27: ffffffc1ecb30000 x26: 0000000000000000
[    4.560969] x25: ffffff80080ec114 x24: ffffffc1f67afcc0
[    4.566295] x23: ffffffc1eb33b0c8 x22: ffffff8009804000
[    4.571622] x21: ffffff8009e38000 x20: ffffff800980f000
[    4.576949] x19: ffffffc1eb33aa00 x18: 000000000000001d
[    4.582274] x17: 0000000000000000 x16: 0000000000000000
[    4.587602] x15: 0000000000000000 x14: 0000000000000019
[    4.592932] x13: 0000000000000033 x12: 000000000000004c
[    4.598259] x11: 0000000000000068 x10: 000000000000001d
[    4.603586] x9 : 0000000000000000 x8 : 0000000000000400
[    4.608912] x7 : 0000000000000000 x6 : 0000000000000400
[    4.614237] x5 : 0000000000007400 x4 : 0000000002e0d0f1
[    4.619563] x3 : 0000000000000000 x2 : 000000009ec9503d
[    4.624889] x1 : ffffffc1f67afcc0 x0 : 0000000000000000
[    4.630218]
[    4.631708] Process kworker/u12:4 (pid: 480, stack limit = 0xffffffc1eac58000)
[    4.638921] Call trace:
[    4.641368] [<ffffff80080dcad4>] kthread_data+0x24/0x30
[    4.646591] [<ffffff8008f3f1c8>] __schedule+0x418/0x780
[    4.651813] [<ffffff80080ec114>] do_task_dead+0x74/0x78
[    4.657033] [<ffffff80080b9aa8>] do_exit+0x6f8/0xa08
[    4.661994] [<ffffff800808c528>] bug_handler.part.2+0x0/0x88
[    4.667648] [<ffffff80080a31fc>] __do_kernel_fault.isra.1+0x144/0x218
[    4.674081] [<ffffff80080a3408>] do_page_fault+0x60/0x518
[    4.679473] [<ffffff80080a392c>] do_translation_fault+0x6c/0x80
[    4.685387] [<ffffff8008080954>] do_mem_abort+0x54/0xb0
[    4.690607] [<ffffff8008082904>] el1_da+0x24/0xb4
[    4.695308] [<ffffff800862c37c>] tegra_hdmi_controller_enable+0x254/0xf60
[    4.702089] [<ffffff800862d0d0>] tegra_dc_hdmi_enable+0x48/0xb8
[    4.708004] [<ffffff800865c48c>] tegra_nvdisp_head_enable+0x534/0x14c0
[    4.714526] [<ffffff80085c0268>] _tegra_dc_enable+0xf0/0x110
[    4.720181] [<ffffff80085c6a3c>] tegra_dc_probe+0x102c/0x1668
[    4.725922] [<ffffff800876cc50>] platform_drv_probe+0x60/0xc0
[    4.731662] [<ffffff800876a2d0>] driver_probe_device+0xd8/0x408
[    4.737575] [<ffffff800876a6dc>] __driver_attach+0xdc/0x128
[    4.743143] [<ffffff8008767d4c>] bus_for_each_dev+0x5c/0xa8
[    4.748709] [<ffffff8008769ad0>] driver_attach+0x30/0x40
[    4.754015] [<ffffff8008768308>] driver_attach_async+0x20/0x60
[    4.759846] [<ffffff80080dfc48>] async_run_entry_fn+0x48/0x158
[    4.765674] [<ffffff80080d4f3c>] process_one_work+0x1e4/0x4b0
[    4.771413] [<ffffff80080d5258>] worker_thread+0x50/0x4c8
[    4.776808] [<ffffff80080dbee4>] kthread+0xec/0xf0
[    4.781594] [<ffffff8008083850>] ret_from_fork+0x10/0x40
[    4.786902] ---[ end trace e97fcc7a0a0bb8c3 ]---
[    4.796362] Fixing recursive fault but reboot is needed!
[   12.240439] random: crng init done

One last thing, what does the LPDR setting do in the pinmux excel file? I can’t find it anywhere in the documentation or internet…

Thanks in advance,

Falco
hdmi_log.txt (67.1 KB)
test1_pinmux_output.zip (5.15 KB)
test2_pinmux_output.zip (5.15 KB)

" The weird thing is, with the original pinmux files (non-edited, default files the flash.sh takes), it does work… I’ve attached a boot log, it seems to be crashing on this part:"

Could you compare the pinmux diff?

I did, but it is a hard comparison, because I can only compare the final .cfg files, run through the python script. This is because the ‘default’ pinmux table is different than the values used for the devkit (point of attention for Nvidia?). I’ve added the pinmux.cfg we need for our custom carrier and the pinmux used for the devkit. There are quite some differences, but none that I can relate to HDMI, also because the .cfg is quite cryptic in descriptions.

pinmux_cfg_files.zip (8.21 KB)

The real problem from driver is due to this error.

[    4.152131] tegradc 15210000.nvdisplay: hdmi: get RGB quant from EDID.
[    4.158693] Unable to handle kernel read from unreadable memory at virtual address 00000063

So it is related to EDID read. Could you check if any i2c error?

The thing is, with the original .cfg files everything works fine. When using our custom .cfg it crashes, also if no display is connected. How would I proceed in checking for i2c errors, you mean with an oscilloscope?

Well, I’ve got things working… turns out LDPR needs to be enabled on the HPD pins (and possibly also on the DP_AUX/I2C channels…)

We found a description of LDPR in the Tegra manual, but it remains quite cryptic:

E_LPDR:
Enable Base Drivers when set High. Typically set when interfacing chips require minimal rise/fall time such as I2C.
Applicable to ST and DD pads.