Hi,
HW: DS90UB941
Platform: NXP I.MX8MP
Our DS90UB941 (connected with DS90UB948) has a problem.
When Kernel init FPD-LINK driver, if it was on built-in driver, 3 piece of our DS90UB941 got i2c R/W error to DS90UB948(NAK). (3/8)
Those piece didn't encounter this issue when set to module driver.
We have tried several tests:
- At the same time i2c R/W retry won't help.
- While in u-boot, i2c transfer always success.
- Add defer probe, i2c transfer success once the drm/mipi-dsi/panel init [see append 1]
- Init using shell script, i2c transfer always success.
- rmmod/ modprobe i2c transfer always success.
Please note that not all of our piece encounter this issue.
We also found that the i2c waveform is quite weird on i2c R/W error.
The stop bit is not followed by NAK bit.
and the SCL LOW time is uncertain...
And here is the i2c regs of DS90UB941 on different timestamp. [see append 2]
append 1:
[ 0.188848] platform 32e80000.lcd-controller: Fixing up cyclic dependency with 32e60000.mipi_dsi
[ 2.419937] [drm] Initialized vivante 1.0.0 20170808 for 40000000.mix_gpu_ml on minor 0
[ 3.231945] dummy 4-002c: REGMAP_RETRY_WRITE: failed: reg 0x01, value 0x03, retry =1
[ 3.309179] ds90ub94x 4-000c: ds90ub94x probe failed with CRC_ERROR_COUNT = 0x01bb
====> first probe, failed
[ 4.207681] dummy 4-002c: REGMAP_RETRY_WRITE: failed: reg 0x01, value 0x03, retry =1
[ 4.284238] ds90ub94x 4-000c: ds90ub94x probe failed with CRC_ERROR_COUNT = 0x01b2
====> defer probe 1 times, failed
[ 4.323765] imx-drm display-subsystem: bound imx-lcdifv3-crtc.0 (ops 0xffff8000093cf378)
[ 4.332014] imx-drm display-subsystem: bound imx-lcdifv3-crtc.1 (ops 0xffff8000093cf378)
[ 4.340196] imx-drm display-subsystem: bound imx-lcdifv3-crtc.2 (ops 0xffff8000093cf378)
[ 4.348563] imx_sec_dsim_drv 32e60000.mipi_dsi: version number is 0x1060200
[ 4.356000] panel-simple-dsi 32e60000.mipi_dsi.0: supply power not found, using dummy regulator
[ 4.365050] imx-drm display-subsystem: bound 32e60000.mipi_dsi (ops 0xffff8000093bd1f0)
[ 4.373174] imx-drm display-subsystem: bound 32fd8000.hdmi (ops 0xffff8000093bc830)
[ 4.382007] [drm] Initialized imx-drm 1.0.0 20120507 for display-subsystem on minor 1
[ 4.462027] imx-drm display-subsystem: [drm] fb0: imx-drmdrmfb frame buffer device
[ 5.017223] ds90ub94x 4-000c: Using Single channel lvds
[ 5.023186] ds90ub94x 4-000c: ds90ub94x probe success with CRC_ERROR_COUNT = 0x0008
=====> defer probe 2 times, success
[ 6.175793] systemd-sysv-generator[196]: SysV service '/etc/init.d/sendsigs' lacks a native systemd unit file. Automatically generating a unit file for compatibility. Please update package to include a native systemd unit file, in order to make it more safe and robust.
[ 7.391969] systemd[1]: Starting Load Kernel Module drm...
Append 2:
============= built-in driver, probe --> failed =============
ds90ub94x 4-000c: >>>> dump reg
>>>> dump_text= 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0e 0f
>>>> dump_text= 00 18 00 00 92 20 00 58 00 00 01 00 00 01 30 00
>>>> dump_text= 10 00 00 01 30 00 00 00 00 00 cb 00 00 fe 1e 7f
>>>> dump_text= 20 00 00 fe 1e 7f 7f 01 00 21 00 01 00 0b 00 25
>>>> dump_text= 30 01 00 0b 00 25 00 00 00 00 00 01 20 20 a0 00
>>>> dump_text= 40 01 20 20 a0 00 00 a5 5a 00 b9 00 05 0c 00 00
>>>> dump_text= 50 00 05 0c 00 00 00 00 00 00 00 00 00 81 02 10
>>>> dump_text= 60 00 00 81 02 10 94 00 00 00 00 00 00 00 00 00
>>>> dump_text= 70 00 00 00 00 00 00 00 00 00 0c 16 00 00 00 02
>>>> dump_text= 80 16 00 00 00 02 00 00 02 00 00 92 00 07 06 44
>>>> dump_text= 90 92 00 07 06 44 00 22 02 00 00 10 00 00 00 00
>>>> dump_text= a0 10 00 00 00 00 00 00 00 00 00 20 00 00 00 00
>>>> dump_text= b0 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>>> dump_text= c0 00 00 00 00 00 00 80 00 00 00 00 00 00 00 00
>>>> dump_text= d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>>> dump_text= e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
============= built-in driver, defer probe 1 --> failed =============
ds90ub94x 4-000c: >>>> dump reg
>>>> dump_text= 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0e 0f
>>>> dump_text= 00 18 00 00 92 20 00 58 00 00 01 00 00 05 30 00
>>>> dump_text= 10 00 00 05 30 00 00 00 00 00 cb 00 00 fe 1e 7f
>>>> dump_text= 20 00 00 fe 1e 7f 7f 01 00 23 00 01 00 0b 00 25
>>>> dump_text= 30 01 00 0b 00 25 00 00 00 00 00 01 20 20 a0 00
>>>> dump_text= 40 01 20 20 a0 00 00 a5 5a 00 b9 00 05 0c 00 00
>>>> dump_text= 50 00 05 0c 00 00 00 00 00 00 00 00 00 81 02 10
>>>> dump_text= 60 00 00 81 02 10 94 00 00 00 00 00 00 00 00 00
>>>> dump_text= 70 00 00 00 00 00 00 00 00 00 0c 16 00 00 00 02
>>>> dump_text= 80 16 00 00 00 02 00 00 02 00 00 08 00 07 06 44
>>>> dump_text= 90 09 00 07 06 44 3b 22 02 00 00 10 00 00 00 00
>>>> dump_text= a0 10 00 00 00 00 00 00 00 00 00 20 00 00 00 00
>>>> dump_text= b0 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>>> dump_text= c0 00 00 00 00 00 00 80 00 00 00 00 00 00 00 00
>>>> dump_text= d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>>> dump_text= e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
============= built-in driver, defer probe 2 --> success =============
ds90ub94x 4-000c: >>>> dump reg
>>>> dump_text= 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0e 0f
>>>> dump_text= 00 18 00 00 92 20 00 58 00 00 01 00 00 05 30 00
>>>> dump_text= 10 00 00 65 30 00 00 00 00 00 cb 00 00 fe 1e 7f
>>>> dump_text= 20 00 00 fe 1e 7f 7f 01 00 27 00 01 00 0b 00 25
>>>> dump_text= 30 01 00 0b 00 25 00 00 00 00 00 01 20 20 a0 00
>>>> dump_text= 40 01 20 20 a0 00 00 a5 5a 00 b9 00 05 0c 00 00
>>>> dump_text= 50 00 05 0c 00 00 00 00 00 00 00 00 00 81 02 10
>>>> dump_text= 60 00 00 81 02 10 94 00 00 00 00 00 00 00 00 00
>>>> dump_text= 70 00 00 00 00 00 00 00 00 00 0c 16 00 00 00 02
>>>> dump_text= 80 16 00 00 00 02 00 00 02 00 00 d9 00 07 06 44
>>>> dump_text= 90 d9 00 07 06 44 44 22 02 00 00 10 00 00 00 00
>>>> dump_text= a0 10 00 00 00 00 00 00 00 00 00 20 00 00 00 00
>>>> dump_text= b0 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>>> dump_text= c0 00 00 00 00 00 00 80 00 00 00 00 00 00 00 00
>>>> dump_text= d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>>> dump_text= e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
============= module driver, probe --> success =============
ds90ub94x 4-000c: >>>> dump reg
>>>> dump_text= 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0e 0f
>>>> dump_text= 00 18 00 00 92 20 00 58 00 00 01 00 00 65 30 00
>>>> dump_text= 10 00 00 65 30 00 00 00 00 00 cb 00 00 fe 1e 7f
>>>> dump_text= 20 00 00 fe 1e 7f 7f 01 00 2f 00 01 00 0b 00 25
>>>> dump_text= 30 01 00 0b 00 25 00 00 00 00 00 01 20 20 a0 00
>>>> dump_text= 40 01 20 20 a0 00 00 a5 5a 00 b9 00 05 0c 00 00
>>>> dump_text= 50 00 05 0c 00 00 00 00 00 00 00 00 00 81 02 10
>>>> dump_text= 60 00 00 81 02 10 94 00 00 00 00 00 00 00 00 00
>>>> dump_text= 70 00 00 00 00 00 00 00 00 00 0c 16 00 00 00 02
>>>> dump_text= 80 16 00 00 00 02 00 00 02 00 00 d9 00 07 06 44
>>>> dump_text= 90 d9 00 07 06 44 44 22 02 00 00 10 00 00 00 00
>>>> dump_text= a0 10 00 00 00 00 00 00 00 00 00 20 00 00 00 00
>>>> dump_text= b0 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>>> dump_text= c0 00 00 00 00 00 00 7f 00 00 00 00 00 00 00 00
>>>> dump_text= d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>>> dump_text= e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00