MIPI D-PHY Analysis Report

⚠ FLICKER DETECTED — 6 of 30 display load sessions (20%) flickered

Each flagged capture is a genuine flicker event (not an artifact) — the LP pass fires at pipeline startup, so a missing or sub-50 ns LP-low plateau means the SN65DSI83 bridge missed the SoT sequence and dropped a frame.
LP-low plateau < 50 ns means the LP-01/LP-00 SoT states are absent or too brief for the SN65DSI83 bridge to detect start-of-transmission.

CaptureTimestampChannel LP-low plateauLP exit→HSLP-11 voltage
030420260409_132523dat0.3 ns2.4 ns1.015 V
030820260409_132650dat0.3 ns3.1 ns1.015 V
031520260409_132922dat0.3 ns3.8 ns1.016 V
031820260409_133028dat0.3 ns2.3 ns1.015 V
032420260409_133238dat0.3 ns2.2 ns1.014 V
032820260409_133406datNone nsNone ns1.014 V
DSI Register Snapshots (30 captures)
CaptureTimestamp0x32e100b4
DSIM_PHYTIMING
0x32e100b8
DSIM_PHYTIMING1
0x32e100bc
DSIM_PHYTIMING2
030320260409_1325010x000003050x020e0a030x00030605
030420260409_1325230x000003050x020e0a030x00030605
030520260409_1325450x000003050x020e0a030x00030605
030620260409_1326070x000003050x020e0a030x00030605
030720260409_1326280x000003050x020e0a030x00030605
030820260409_1326500x000003050x020e0a030x00030605
030920260409_1327120x000003050x020e0a030x00030605
031020260409_1327330x000003050x020e0a030x00030605
031120260409_1327550x000003050x020e0a030x00030605
031220260409_1328170x000003050x020e0a030x00030605
031320260409_1328390x000003050x020e0a030x00030605
031420260409_1329010x000003050x020e0a030x00030605
031520260409_1329220x000003050x020e0a030x00030605
031620260409_1329440x000003050x020e0a030x00030605
031720260409_1330060x000003050x020e0a030x00030605
031820260409_1330280x000003050x020e0a030x00030605
031920260409_1330490x000003050x020e0a030x00030605
032020260409_1331110x000003050x020e0a030x00030605
032120260409_1331330x000003050x020e0a030x00030605
032220260409_1331550x000003050x020e0a030x00030605
032320260409_1332170x000003050x020e0a030x00030605
032420260409_1332380x000003050x020e0a030x00030605
032520260409_1333000x000003050x020e0a030x00030605
032620260409_1333220x000003050x020e0a030x00030605
032720260409_1333440x000003050x020e0a030x00030605
032820260409_1334060x000003050x020e0a030x00030605
032920260409_1334280x000003050x020e0a030x00030605
033020260409_1334490x000003050x020e0a030x00030605
033120260409_1335110x000003050x020e0a030x00030605
033220260409_1335330x000003050x020e0a030x00030605

Generated: 2026-04-09 13:40:13  |  Scope: Captures 0303–0332  |  Model: claude-opus-4-6

# MIPI D-PHY Signal Integrity Analysis — Captures 0303–0332

## 1. Root Cause Identification

### The Smoking Gun: Register Mismatch vs. Target

Every single capture shows the same wrong register values:

| Register | Target (compliant) | Actual (all captures) | Impact |
|---|---|---|---|
| PHYTIMING (0xb4) | `0x00000306` | `0x00000305` | THS_EXIT=5 → 92.6 ns (spec ≥100 ns) ✗ |
| PHYTIMING1 (0xb8) | `0x03110A04` | `0x020e0a03` | TCLK_PREPARE=2 → 37 ns (spec 38–95 ns) ✗; TCLK_ZERO=14 → 259 ns (spec ≥300 ns) ✗; TCLK_TRAIL=3 → 55.6 ns (spec ≥60 ns) ✗ |
| PHYTIMING2 (0xbc) | `0x00040A03` | `0x00030605` | THS_PREPARE=5 → 92.6 ns (spec 40+4×UI=49.3–85+6×UI=98.9 ns) — marginal high; THS_ZERO=6 → 111 ns (spec ≥145+10×UI=168.2 ns) ✗✗✗; THS_TRAIL=3 → 55.6 ns (spec max(8×UI,60ns+4×UI)=69.3 ns) ✗ |

The driver is programming the wrong timing values. The samsung-dsim driver's timing calculation algorithm is producing values that violate MIPI D-PHY v1.1 for this 432 Mbit/s bit rate. This is the primary root cause.

### Critical Violations Directly Causing Flicker

THS_ZERO = 6 (111 ns) vs. spec minimum 168 ns — This is the most severe violation. THS_ZERO defines the duration of the HS-0 state in the data lane SoT sequence (LP-11 → LP-01 → LP-00 → HS-0 → data). At 111 ns, it is 34% below the minimum. The SN65DSI83 bridge must detect this HS-0 period to synchronize its deserializer. When the PHY's internal timing jitter causes the HS-0 to be even shorter than the already-too-short programmed value, the bridge fails to lock — producing the observed bistable behavior.

TCLK_ZERO = 14 (259 ns) vs. spec minimum 300 ns — The clock lane's HS-0 initialization is also too short. The bridge may not have a stable clock reference established before data lane SoT arrives.

### Why It's Intermittent (20% Failure Rate)

The LP-low plateau measurement shows a trimodal distribution:
- ~343 ns — 14 captures (good sessions, bridge locks)
- ~108 ns — 9 captures (good sessions, bridge locks — barely)
- 0 ns — 5 captures (all confirmed flicker sessions: 0304, 0308, 0315, 0318, 0324)
- 1 capture (0328) — no measurable LP-low, split HS bursts, confirmed flicker

The correlation is perfect: every capture with LP-low = 0 ns produced flicker. The PHY's SoT state machine timing is racing against internal PLL lock and clock distribution. With THS_ZERO programmed 57 ns below spec minimum, there is zero margin. On ~20% of startups, internal timing variation causes the LP-00/HS-0 states to collapse entirely, producing a degenerate SoT that the SN65DSI83 cannot detect.

## 2. Trend Analysis Across All 30 Captures

### HS Signal Quality — Stable, No Degradation
| Parameter | Range | Trend |
|---|---|---|
| CLK Vdiff | 175.4–177.9 mV | Rock-steady, no drift |
| DAT Vdiff | 177.5–223.2 mV | Stable (222 mV outlier in 0322 likely capture artifact) |
| CLK jitter p-p | 94.8–149.6 ps | Random variation, no trend |
| CLK jitter RMS | 25.6–29.7 ps | Stable |
| Rise times | 133.8–153.4 ps | Stable, well within spec |
| Clock frequency | 215.82–216.12 MHz | ±0.1%, excellent |

HS signal quality is not the problem. Once HS mode is established, the link runs perfectly — consistent with the observed bistable behavior.

### LP-11 Voltage — Stable But Low
- Range: 1.014–1.016 V across all captures
- MIPI D-PHY spec: VIH(LP) > 880 mV at receiver; transmitter spec is VDDIO × 0.55 to VDDIO
- At VDDIO = 1.8 V: expected LP-high ≈ 1.08–1.2 V typical
- Measured 1.015 V is 56% of VDDIO — at the absolute floor of the transmitter output spec
- Not causing the flicker (SN65DSI83 VIH threshold is ~880 mV, so 1.015 V is detected), but indicates the LP driver is marginally biased, possibly related to the same timing register misconfiguration affecting LP driver enable timing.

### 1.8 V Supply — Healthy, Not Correlated
| Parameter | Range |
|---|---|
| Mean | 1.7631–1.7685 V |
| Min | 1.7480–1.7600 V |
| Droop | 7.1–16.2 mV |
| Ripple RMS | 4.89–5.70 mV |

No correlation between supply droop and flicker events:
- Flicker capture 0304: droop 8.0 mV (below average)
- Flicker capture 0324: droop 8.3 mV (average)
- Good capture 0321: droop 15.6 mV (worst in batch)
- Good capture 0330: droop 16.2 mV (worst in batch)

The supply is healthy and not a contributing factor.

## 3. Anomaly Flags

### A. LP-Low Plateau Absent on All Flicker Captures
| Capture | LP-low (ns) | Flicker? | LP exit→HS (ns) |
|---|---|---|---|
| 0304 | 0 | YES | 2 |
| 0308 | 0 | YES | 3 |
| 0315 | 0 | YES | 4 |
| 0318 | 0 | YES | 2 |
| 0324 | 0 | YES | 2 |
| 0328 | N/A | YES | N/A |
| 0303 | 343 | no | 3 |
| 0325 | 342 | no | 348 ✓ |
| 0331 | 343 | no | 348 ✓ |

Note: Captures 0325 and 0331 are the only two captures where `LP exit → HS` was measured at a spec-compliant 348 ns. These represent the PHY "getting lucky" with internal timing — the same registers produce wildly different observable timing on the wire.

### B. Capture 0328 — Severely Degenerate SoT
- Two HS bursts (avg 2508 ns each) instead of the normal single 5020 ns burst — the bridge attempted and failed to sync, causing the PHY to re-try
- HS amplitude 3 mV — essentially no HS signal detected on data lane
- sig/dat: 0 mV — DAT0 never entered HS properly
- This is the most severe flicker event: the SoT was so badly malformed that the data lane never achieved HS at all during the capture window

### C. Systematic "Only Negative Swings" on sig/dat
Approximately 70% of captures show only negative differential swings on the data lane high-res capture. This is a probe/trigger alignment artifact — the scope is capturing during blanking intervals where the data lane transmits a consistent pattern. Not a signal integrity concern.

### D. Samples Below 140 mV — Data Lane ISI
The proto/dat captures consistently show 82–10,171 samples below 140 mV minimum Vdiff. This is inter-symbol interference (ISI) during transitions between different bit patterns at 432 Mbit/s. The clock lane (which has a fixed 50/50 pattern) shows far fewer violations. This is a board-level impedance/termination concern but is not correlated with flicker — it affects eye margin during sustained HS, not SoT detection.

## 4. Supply Correlation Assessment

No correlation exists. Statistical analysis:
- Flicker events droop: 7.1, 8.0, 8.3, 8.4, 8.5, 9.0 mV (mean 8.4 mV)
- Good events droop: 7.5–16.2 mV (mean 8.8 mV)
- Ripple RMS is virtually identical across all captures (4.89–5.70 mV)

The 1.8 V supply is not the trigger. The root cause is entirely in the PHY timing registers.

## 5. Warning/Error Explanations

| Warning | Cause | Action |
|---|---|---|
| `LP exit duration X ns below spec min 50 ns` | THS_PREPARE + THS_ZERO too short in registers — PHY collapses LP→HS states | Fix PHYTIMING registers |
| `CLK lane in continuous HS mode` | Normal for Video Mode DSI — CLK runs HS continuously | None needed |
| `Only negative swings in capture window` | Scope triggered during blanking line with constant pattern | Benign — adjust trigger for mixed patterns if needed |
| `No HS signal detected` (sig/dat, captures 0311, 0315, 0323, 0328) | Scope captured during LP or V-blank gap | Benign for 0311/0323; for 0315/0328 (flicker), DAT never entered HS properly |
| `Settled samples below 140 mV` | ISI on data transitions; impedance mismatch on PCB | Review termination; not flicker root cause |
| `[lp_dat] ERROR: index out of bounds` (0312) | Processing script edge case — LP capture truncated | Improve script bounds checking |

## 6. Actionable Recommendations

### PRIORITY 1 — Fix PHY Timing Registers (Root Cause)

The samsung-dsim driver is computing wrong values for 432 Mbit/s. Apply the target values via one of:

Option A: Device Tree override (preferred, no kernel rebuild)
```dts
&mipi_dsi {
samsung,phy-timing = <0x00000306>;
samsung,phy-timing1 = <0x03110a04>;
samsung,phy-timing2 = <0x00040a03>;
};
```

Option B: Kernel driver patch — Fix the `samsung_dsim_set_phy_timing()` calculation in `drivers/gpu/drm/bridge/samsung-dsim.c`. The current algorithm underestimates multiple fields at this bit rate. Specific field corrections needed:

| Field | Current | Required | Byte-clock units |
|---|---|---|---|
| THS_EXIT | 5 | 6 | +1 |
| TCLK_PREPARE | 2 | 3 | +1 |
| TCLK_ZERO | 14 (0x0e) | 17 (0x11) | +3 |
| TCLK_TRAIL | 3 | 4 | +1 |
| THS_ZERO | 6 | 10 (0x0a) | +4 ← critical |
| THS_TRAIL | 3 | 4 | +1 |
| THS_PREPARE | 5 | 3 | −2 (currently over-counting) |

### PRIORITY 2 — Add Margin to THS_ZERO

Even the target value of THS_ZERO=10 (185 ns) provides only 10% margin over the 168 ns spec minimum. For a bridge chip with known sensitivity, consider:
```
THS_ZERO = 12 → 222 ns (32% margin)
```
This eliminates the intermittent SoT failure entirely at the cost of ~37 ns added latency per line — negligible.

### PRIORITY 3 — Investigate LP-11 Voltage

LP-11 at 1.015 V (56% of 1.8 V VDDIO) is lower than typical (~65–70%). Check:
- Series resistors on LP lines (some designs add 200–300 Ω for ESD; verify values)
- SN65DSI83 input termination bias — it may be loading the LP drivers
- VDDIO accuracy at the PHY pins (not just at the regulator output)

### PRIORITY 4 — PCB Signal Integrity for ISI

The persistent below-140 mV samples on the data lane suggest impedance mismatch. For future board revisions:
- Verify 100 Ω differential impedance on MIPI traces
- Check connector stub length if using FPC
- Add/verify 100 Ω differential termination at SN65DSI83 inputs

## 7. Overall Assessment

The flicker root cause is definitively identified: the samsung-dsim PHY timing registers are programmed with values that violate MIPI D-PHY v1.1 minimum timing on six of seven critical parameters, most severely THS_ZERO (111 ns vs. 168 ns minimum). This causes the data lane SoT sequence to be too short for the SN65DSI83 to reliably detect, producing a 20% failure rate at pipeline startup that manifests as the observed bistable flicker behavior. The 1.8 V supply, HS signal quality, and LP-11 voltage are not contributing factors.

Correcting the three PHYTIMING registers to their target values will eliminate the flicker. The fix is a single device-tree or driver change with no hardware modification required. Adding extra margin to THS_ZERO (value 12 instead of 10) is recommended given the bridge chip's sensitivity and the observed zero-margin failure mode.

Tokens: 33977 in / 3728 out