Reform SN65DSIx6 DSI to eDP is NAK'ing On Boot

My Reform with the A311D processor module has started to have a intermittent failure with the Texas Instruments SN65DSIx6 DSI to eDP bridge, which results in no picture being displayed on the laptop screen. I would say this failure happens about 70% of the time, and the other 30% of the time it boots normally. After a successful boot, I never see any kind of display failure. This started occuring several months ago, which caused me to shelve my Reform (:sob:) for my Framework instead, with me only seriously trying to debug it today. Because of this, I do not know if this started occurring after any kind of software update.

On boot, I get the following errors in the UART kernel log:

[    7.396154] ti_sn65dsi86 1-002c: error -ENXIO: failed to read device id
[    7.397180] ------------[ cut here ]------------
[    7.401736] WARNING: CPU: 2 PID: 231 at drivers/regulator/core.c:2450 _regulator_put+0x58/0x68
[    7.410315] Modules linked in: ti_sn65dsi86(+) meson_gxbb_wdt dw_mipi_dsi ao_cec_g12a libphy rtc_meson_vrtc reset_meson_audio_arb soundcore clk_phase meson_dw_hdmi meson_canvas mdio_bus cpufreq_dt sha1_ce spi_bitbang gpio_regulator pwm_regulator nvmem_meson_efuse drm_dp_aux_bus clk_pwm
[    7.435539] CPU: 2 UID: 0 PID: 231 Comm: (udev-worker) Not tainted 6.16.3-mnt-reform-arm64 #1 PREEMPTLAZY  Debian 6.16.3-1+reform20250830T222127Z 
[    7.448623] Hardware name: MNT Reform 2 with BPI-CM4 Module (DT)
[    7.454603] pstate: 80000005 (Nzcv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
[    7.461535] pc : _regulator_put+0x58/0x68
[    7.465522] lr : regulator_bulk_free+0x54/0x88
[    7.469942] sp : ffff800083353510
[    7.473235] x29: ffff800083353510 x28: ffff800083353aa0 x27: 0000000000000000
[    7.480342] x26: ffff800083353aa0 x25: ffff8000818221a0 x24: ffff800081e3feb0
[    7.487449] x23: ffff00003f2c6040 x22: ffff000001fa0730 x21: ffff00003f06bb40
[    7.494555] x20: ffff80008218b090 x19: ffff000001fa06e8 x18: 0000000000000014
[    7.501662] x17: ffff000000859c80 x16: 00000000000013bb x15: 07640765076c0769
[    7.508768] x14: 0000000000000000 x13: 6469206563697665 x12: 642064616572206f
[    7.515875] x11: 742064656c696166 x10: 203a4f49584e452d x9 : ffff800080aea6bc
[    7.522982] x8 : ffff800083353520 x7 : 0000000000000000 x6 : fffffdffc0fc1ae0
[    7.530088] x5 : fc13c79df950e868 x4 : 0000000000000000 x3 : 0000000000000000
[    7.537195] x2 : ffff00003f2c6040 x1 : 0000000000000001 x0 : ffff00003f06bb40
[    7.544302] Call trace:
[    7.546730]  _regulator_put+0x58/0x68 (P)
[    7.550715]  regulator_bulk_free+0x54/0x88
[    7.554788]  devm_regulator_bulk_release+0x24/0x40
[    7.559555]  release_nodes+0x6c/0x108
[    7.563195]  devres_release_group+0x158/0x1a0
[    7.567528]  i2c_device_probe+0x3a0/0x438
[    7.571515]  really_probe+0xc8/0x3a0
[    7.575068]  __driver_probe_device+0x84/0x160
[    7.579402]  driver_probe_device+0x44/0x130
[    7.583562]  __driver_attach+0xcc/0x208
[    7.587375]  bus_for_each_dev+0x84/0x100
[    7.591275]  driver_attach+0x2c/0x40
[    7.594828]  bus_add_driver+0x118/0x250
[    7.598642]  driver_register+0x70/0x138
[    7.602455]  i2c_register_driver+0x50/0xe8
[    7.606528]  ti_sn65dsi86_init+0x3c/0xff8 [ti_sn65dsi86]
[    7.611815]  do_one_initcall+0x60/0x2d8
[    7.615628]  do_init_module+0x5c/0x268
[    7.619355]  load_module+0x201c/0x27f8
[    7.623082]  init_module_from_file+0x94/0xf8
[    7.627329]  __arm64_sys_finit_module+0x26c/0x368
[    7.632009]  invoke_syscall+0x6c/0x100
[    7.635735]  el0_svc_common.constprop.0+0x48/0xf0
[    7.640415]  do_el0_svc+0x24/0x38
[    7.643708]  el0_svc+0x3c/0x188
[    7.646829]  el0t_64_sync_handler+0x10c/0x140
[    7.651162]  el0t_64_sync+0x198/0x1a0
[    7.654802] ---[ end trace 0000000000000000 ]---

The initial probe over I2C to the bridge is failing. I hooked up a logic analyzer to the I2C lines to investigate, and found this:

The bridge is NAK’ing after the A311D sends out its address (0x2C) on the I2C bus. Essentially, the chip is just not responding.

A successful I2C probe looks like this:

The fact that the chip is just not responding leads me to believe that it’s a hardware failure, possibly with the chip itself or something closely related to it. I suspect it is the chip itself, there is not a whole lot of supporting circuitry to point any blame at. I’ve checked the 4.7k pull-ups on the I2C lines, and the 100K resistor on the reset line. They all seem fine. I’ve also reseated the processor module and A311D module for good measure.

I don’t want to replace this chip without being more sure that will fix my problem though (chips + shipping are $30 and dealing with that huge thermal pad won’t be fun). Does anyone have any other recommendations for debug, or have you ever encountered a similar issue?

My motherboard revision is MREFPMOB25R02.

1 Like

I think I am having the same problem that Suddenly, blank screen at boot! is experiencing. I get those same looping messages after boot on the UART console. Not so sure this is just a hardware issue any more. I will try downgrading to a 6.15 kernel and see if it goes away.

1 Like

For future thread archeologists, @nocko appears to have discovered the fix for this was merged in 6.16.7. Will try with this kernel and see if it fixes my issue too.

1 Like

I confirmed that a kernel upgrade to 6.16.8 has solved my issue. I just did a sudo apt full-upgrade over UART and it pulled the new kernel from the debian repository.

1 Like