From: Haikun Zhou <[email protected]>

[ Upstream commit 844e71ba7d7a50c5ffa29d147afaeaafb19b39e4 ]

MB116AS01'3 raw edid:
00 ff ff ff ff ff ff 00 21 63 03 12 00 00 00 00
00 23 01 04 95 1a 0e 78 23 e7 05 9c 5b 56 93 27
21 50 54 00 00 00 01 01 01 01 01 01 01 01 01 01
01 01 01 01 01 01 36 1c 56 92 50 00 1c 30 60 18
a8 00 00 90 10 00 00 18 00 00 00 fd 00 28 3c 30
30 07 01 0a 20 20 20 20 20 20 00 00 00 fe 00 48
4b 43 20 4d 59 20 20 20 20 0a 20 20 00 00 00 fe
00 4d 42 31 31 36 41 53 30 31 27 33 20 20 01 cb

70 20 79 02 00 22 00 14 1c 1a 01 84 55 05 91 00
5f 00 17 00 ff 02 1b 00 09 00 07 00 2b 00 06 27
00 28 3b 00 00 81 00 13 72 1a 00 00 03 01 28 3c
00 00 00 00 00 00 3c 00 00 00 00 25 01 09 1c 1a
01 1c 1a 01 28 3c 80 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 e7 90

Signed-off-by: Haikun Zhou <[email protected]>
Reviewed-by: Douglas Anderson <[email protected]>
Signed-off-by: Douglas Anderson <[email protected]>
Link: 
https://patch.msgid.link/20260701013018.2621972-1-zhouhaik...@huaqin.corp-partner.google.com
Signed-off-by: Sasha Levin <[email protected]>
---

LLM Generated explanations, may be completely bogus:

Local tree is **6.18.y** (`v6.18.53`, `VERSION=6 PATCHLEVEL=18`). The
MB116AS01'3 table entry is **not** in `v6.18.53`. The driver, HKC table,
`delay_200_500_e80`, and unknown-panel `WARN_ON` path are present. This
is a one-line panel ID / quirk for an existing driver.

===============================================================
PHASE 1: COMMIT MESSAGE FORENSICS
===============================================================

Step 1.1: PARSE THE SUBJECT LINE
Record: `[drm/panel-edp] [Support] [add MB116AS01'3 eDP panel table
entry]`
- Subsystem: `drm/panel-edp`
- Verb: "Support" — hardware enablement / ID addition, not a refactor

Step 1.2: PARSE ALL COMMIT MESSAGE TAGS
Record:
- `Signed-off-by: Haikun Zhou <[email protected]
  partner.google.com>` (author; Huaqin/Google partner)
- `Reviewed-by: Douglas Anderson <[email protected]>` (panel-edp
  reviewer in MAINTAINERS)
- `Signed-off-by: Douglas Anderson <[email protected]>` (maintainer
  applied it)
- `Link: https://patch.msgid.link/20260701013018.2621972-1-
  [email protected]`
- No `Fixes:`, `Reported-by:`, `Tested-by:`, `Cc: stable` (absence
  expected for this review)
- Ignored: `Signed-off-by: Sasha Levin` and `[Upstream commit ...]`
  (pipeline markers)

Step 1.3: ANALYZE THE COMMIT BODY TEXT
Record:
- Bug description: the panel is missing from `edp_panels[]`. The body is
  the raw EDID (base block + extension), not a crash log.
- Symptom: unmatched generic `edp-panel` uses conservative delays and
  hits `WARN_ON(!detected_panel)` at probe.
- Version info: none in the message. Author date is 2026-07-01; `v6.18`
  is 2025-11-30, so this landed after this series branched.
- Root cause: HKC ID `0x1203` was not in the delay/quirk table.

Step 1.4: DETECT HIDDEN BUG FIXES
Record: Not a disguised cleanup. It is an explicit panel ID / power-
sequencing quirk. That is the same class as PCI/USB ID additions.

===============================================================
PHASE 2: DIFF ANALYSIS - LINE BY LINE
===============================================================

Step 2.1: INVENTORY THE CHANGES
Record:
- File: `drivers/gpu/drm/panel/panel-edp.c` (`+1 / -0`)
- Function/table: `edp_panels[]`
- Scope: single-file, one-line surgical addition

Step 2.2: UNDERSTAND THE CODE FLOW CHANGE
Record:
- Before: HKC `0x1203` is not in `edp_panels[]`. `find_edp_panel()`
  returns NULL.
- After: match `EDP_PANEL_ENTRY('H', 'K', 'C', 0x1203,
  &delay_200_500_e80, "MB116AS01'3")`.
- Path: `panel_edp_probe()` → compatible `"edp-panel"` →
  `generic_edp_panel_probe()` → EDID panel ID lookup.
- After match: `desc->delay = *detected_panel->delay` (`hpd_absent=200`,
  `unprepare=500`, `enable=80`).
- Unmatched: `WARN_ON` plus `panel_edp_set_conservative_timings()`
  (`unprepare=2000`, `enable=200`).

Step 2.3: IDENTIFY THE BUG MECHANISM
Record: **Hardware workaround / device ID** (category h).
- Mechanism: EDID mfg `HKC` (bytes `21 63`) and product `0x1203` (bytes
  `03 12`) were not mapped to delays. The panel name in EDID descriptor
  0xFE is `MB116AS01'3` (`0x27` = `'`).
- Fix: add the existing `delay_200_500_e80` preset (already used by many
  11.6" BOE/CMN entries).

Step 2.4: ASSESS THE FIX QUALITY
Record:
- Obviously correct: one table row, sorted under existing HKC entries
  (`0x1203` before `0x2d51`).
- Minimal; no unrelated edits.
- Regression risk: very low. Lookup is ID-specific; other panels
  unchanged.
- `delay_200_500_e80` already exists in this tree (verified at `panel-
  edp.c:1760` on `v6.18.53`).

===============================================================
PHASE 3: GIT HISTORY INVESTIGATION
===============================================================

Step 3.1: BLAME THE CHANGED LINES
Record:
- Table introduced with `panel-edp` split: `5f04e7ce392db` ("Split eDP
  panels out of panel-simple").
- HKC rows already in `v6.18` / `v6.18.53` (`0x2d51`, `0x2d5b`
  MB116AN01, `0x2d5c` MB116AN01-2).
- `delay_200_500_e80` from `4d53cf8147950` ("Add several generic edp
  panels"), present in this tree.
- This ID is new; the table and delay helper are old.

Step 3.2: FOLLOW THE FIXES: TAG
Record: No `Fixes:` tag. N/A. The gap is a missing table row, not a
later regression.

Step 3.3: CHECK FILE HISTORY FOR RELATED CHANGES
Record:
- `v6.18..v6.18.53` already contains many similar one-line panel adds
  (AUO, BOE, CSW, LG, Sharp, mt8189 Chromebook panels).
- Standalone; not `patch X/Y`.

Step 3.4: CHECK THE AUTHOR'S OTHER COMMITS
Record:
- Haikun Zhou has other `panel-edp` ID/delay commits (`CSW MNB601LS1-4`,
  `CMN N116BCJ-EAK`).
- Reviewer Douglas Anderson is `R:` for "DRM DRIVER FOR GENERIC EDP
  PANELS" in MAINTAINERS.

Step 3.5: CHECK FOR DEPENDENT/PREREQUISITE COMMITS
Record: None. Needs only `EDP_PANEL_ENTRY`, HKC table, and
`delay_200_500_e80`, all in `v6.18.53`. Dry-run against the `v6.18.53`
blob: hunk applied (offset -5). Standalone apply: yes.

===============================================================
PHASE 4: MAILING LIST AND EXTERNAL RESEARCH
===============================================================

Step 4.1: FIND THE ORIGINAL PATCH DISCUSSION
Record:
- `b4 dig -c 9e55b14301666`: V2 at https://patch.msgid.link/202607010130
  [email protected]
- `b4 dig -a`:
  - v1 2026-06-29: `MB116AS01-3` (hyphen), msgid
    `20260629012200.248066-1-...`
  - v2 2026-07-01: `MB116AS01'3` (apostrophe, matches EDID)
- Applied version is v2.
- Doug Anderson: Reviewed-by and pushed to drm-misc-next as
  `844e71ba7d7a`.
- No NAK found.
- UNVERIFIED: exact v1 review text (lore 403, MARC 404). Name change
  v1→v2 is verified from the two patches.

Step 4.2: CHECK WHO REVIEWED THE PATCH
Record (`b4 dig -w`):
- To/Cc: `[email protected]`, `[email protected]`,
  `[email protected]`, `[email protected]`, `linux-
  [email protected]`, `[email protected]`, `[email protected]`
- Subsystem reviewer included and signed off.

Step 4.3: SEARCH FOR THE BUG REPORT
Record: No syzbot/bugzilla. Evidence is the EDID dump in the patch.
Author is a hardware partner, typical for ChromeOS panel IDs.

Step 4.4: CHECK FOR RELATED PATCHES AND SERIES
Record: Standalone 1/1. drm-misc pull for 7.3-rc1 lists it under
**panel-edp: quirks** with MB116AS01 (https://lists.openwall.net/linux-
kernel/2026/08/20/246).

Step 4.5: CHECK STABLE MAILING LIST HISTORY
Record: lore.kernel.org/stable search returned 403. UNVERIFIED: no
stable-list thread found. Official `v6.18.53` already took the same
class of panel-edp ID patches, so there is no local policy against this
type.

===============================================================
PHASE 5: CODE SEMANTIC ANALYSIS
===============================================================

Step 5.1: IDENTIFY KEY FUNCTIONS IN THE DIFF
Record: No function body change. Data: `edp_panels[]`. Consumers:
`find_edp_panel()`, `generic_edp_panel_probe()`.

Step 5.2: TRACE CALLERS
Record:
- `find_edp_panel()` ← `generic_edp_panel_probe()`
- `generic_edp_panel_probe()` ← `panel_edp_probe()` when OF compatible
  is `"edp-panel"`
- `panel_edp_probe()` ← `panel_edp_platform_probe()` /
  `panel_edp_dp_aux_ep_probe()`
- Context: device probe / display bring-up, not IRQ-hot.

Step 5.3: TRACE CALLEES
Record: Table is data only. Probe reads EDID, matches ID, copies
`panel_delay`. Delays used in `panel_edp_prepare_once()` (`hpd_absent`)
and `panel_edp_enable()` (`enable`).

Step 5.4: FOLLOW THE CALL CHAIN
Record: Userspace does not call this directly. Plug in the panel
(Chromebook/laptop DT `edp-panel` on DP AUX) and it runs at
probe/resume. Reachable on machines with this HKC panel.

Step 5.5: SEARCH FOR SIMILAR PATTERNS
Record: Same file is a long ID table. HKC already has three entries.
Many sibling "Add … panel" commits are already in official 6.18.y.

===============================================================
PHASE 6: CROSS-REFERENCING AGAINST THE LOCAL TREE
===============================================================

Step 6.1: DOES THE BUGGY CODE EXIST IN THIS TREE?
Record: Yes. `v6.18.53` has `edp_panels[]`, HKC rows,
`find_edp_panel()`, and:
```
if (WARN_ON(!panel->detected_panel)) {
    ... "Unknown panel ... using conservative timings"
```
`MB116AS01` / `0x1203` is **not** in `v6.18` or `v6.18.53`. Bug =
missing quirk for hardware that this driver already enumerates.

Step 6.2: CHECK FOR BACKPORT COMPLICATIONS
Record: Clean apply to `v6.18.53` (dry-run succeeded, offset -5).
Surrounding HKC context matches. Difficulty: clean apply.

Step 6.3: CHECK IF RELATED FIXES ARE ALREADY HERE
Record: No other MB116AS01'3 / HKC `0x1203` fix in this series. Nearby
HKC MB116AN01 entries do not cover `0x1203`.

===============================================================
PHASE 7: SUBSYSTEM AND MAINTAINER CONTEXT
===============================================================

Step 7.1: IDENTIFY THE SUBSYSTEM AND ITS CRITICALITY
Record: `drivers/gpu/drm/panel/` — DRM panel. Criticality: **IMPORTANT**
for devices with this panel (blank/slow display, boot `WARN_ON`);
**PERIPHERAL** for everyone else (ID match is a no-op).

Step 7.2: ASSESS SUBSYSTEM ACTIVITY
Record: Mature table, still getting ID/quirk adds. Official 6.18.y
already backports them. Not a new subsystem.

===============================================================
PHASE 8: IMPACT AND RISK ASSESSMENT
===============================================================

Step 8.1: DETERMINE WHO IS AFFECTED
Record: Driver-specific / hardware-specific: machines whose eDP EDID is
HKC `0x1203` (MB116AS01'3), typically ChromeOS/partner laptops. No
effect on other panels.

Step 8.2: DETERMINE THE TRIGGER CONDITIONS
Record: Every probe of `"edp-panel"` with that EDID (boot and often
resume). Not a race. Unprivileged users do not trigger it except by
using the device.

Step 8.3: DETERMINE THE FAILURE MODE SEVERITY
Record:
- Without the entry: `WARN_ON` stack on probe (noisy, can trip panic-on-
  warn) **plus** conservative delays (2s unprepare vs 500ms; 200ms
  enable vs 80ms). Conservative path is designed so the panel still
  usually works.
- Failure mode: boot warning + slower power sequencing, not a universal
  oops.
- Severity: **MEDIUM** for affected hardware (warning + wrong timings);
  **LOW** globally.
- Still qualifies under the device-ID / quirk exception.

Step 8.4: CALCULATE RISK-BENEFIT RATIO
Record:
- Benefit: high for that panel (correct T3/T12-style delays, no
  `WARN_ON`); zero for others.
- Risk: very low (1 line, existing delay struct, ID-gated).
- Ratio: strongly favors backport.

===============================================================
PHASE 9: FINAL SYNTHESIS
===============================================================

Step 9.1: COMPILE THE EVIDENCE
FOR:
- One-line ID/quirk in an existing driver (`panel-edp.c` /
  `edp_panels[]`).
- Matches stable exceptions: **device ID** and **hardware quirk** (drm-
  misc pull even labeled it "panel-edp: quirks").
- Avoids `WARN_ON` and 2s conservative unprepare on this panel.
- `delay_200_500_e80`, HKC table, and lookup path exist in this 6.18
  tree.
- Reviewed and applied by the panel-edp maintainer.
- Official 6.18.y already contains many identical panel-edp ID
  backports.
- Applies cleanly to `v6.18.53`.

AGAINST:
- Not a UAF/crash/corruption fix for all users; unmatched panels usually
  still work with conservative delays.
- No `Reported-by` from end users; vendor EDID add.

UNRESOLVED:
- Exact v1 review comments (lore/MARC fetch failed).
- Whether this was discussed on stable@ (lore/stable 403).

Step 9.2: APPLY THE STABLE RULES CHECKLIST
1. Obviously correct and tested? **PASS** — one sorted table row;
   maintainer Reviewed-by and merged.
2. Fixes a real bug that affects users? **PASS** — missing quirk:
   `WARN_ON` + wrong power delays on this panel.
3. Important issue? **PASS** under the device-ID/quirk exception (boot
   warning + incorrect sequencing on real hardware). Not a core panic.
4. Small and contained? **PASS** — +1 line, one file.
5. No new features or APIs? **PASS** — no new driver, syscall, or
   userspace API; only a table ID.
6. Can apply to the local tree? **PASS** — dry-run against `v6.18.53`
   succeeded.

Step 9.3: CHECK FOR EXCEPTION CATEGORIES
Record: **Device ID addition to existing driver** and **hardware
quirk/workaround**. Automatic YES class.

Step 9.4: MAKE YOUR DECISION
This tree is 6.18.y. The driver already identifies unknown eDP panels
and warns. Adding HKC `0x1203` is the same kind of ID/quirk 6.18.y
already takes. Benefit is real for that hardware; risk is negligible.

What it solves for stable users: Chromebook/laptop panels with EDID HKC
`0x1203` get the intended 200/500/80 ms sequencing and stop hitting the
unknown-panel `WARN_ON`.

Risk vs benefit: one ID-gated line vs boot warning and multi-second
conservative delays. Favor backport.

Verification:
- [Phase 1] Tags: Haikun Zhou SOB, Douglas Anderson Reviewed-by + SOB,
  lore msgid link; no Fixes/Reported-by/Cc:stable
- [Phase 1] Body is raw EDID; decoded mfg HKC (`0x2163`) product
  `0x1203`; name `MB116AS01'3`
- [Phase 2] Diff: +1 `EDP_PANEL_ENTRY` in `edp_panels[]`; delay
  `&delay_200_500_e80`
- [Phase 2] Unmatched path: `WARN_ON` + `unprepare=2000`/`enable=200` in
  `generic_edp_panel_probe()` (verified in this tree and `v6.18.53`)
- [Phase 3] `git describe HEAD` → `v6.18.53-5049-g0f0bdc2b0dffb`; `make
  kernelversion` → 6.18.53
- [Phase 3] `git merge-base --is-ancestor 9e55b14301666 v6.18.53` → NO
  (not in official 6.18.53)
- [Phase 3] `git grep MB116AS01 v6.18.53 -- panel-edp.c` → not present;
  HKC `0x2d51/0x2d5b/0x2d5c` present
- [Phase 3] `delay_200_500_e80` present at line 1760 on `v6.18.53`
- [Phase 3] `v6.18..v6.18.53` already has multiple `drm/panel-edp: Add …
  panel` commits
- [Phase 4] `b4 dig -c`: V2 lore URL; `b4 dig -a`: v1 hyphen name, v2
  apostrophe; `b4 dig -w`: dianders, dri-devel, drm maintainers
- [Phase 4] LKML: Doug Reviewed-by, pushed `844e71ba7d7a` to drm-misc-
  next
- [Phase 4] drm 7.3-rc1 pull lists MB116AS01 under panel-edp quirks
- [Phase 4] UNVERIFIED: v1 review text; stable@ discussion (HTTP
  403/404)
- [Phase 5] Call chain: `panel_edp_probe` → `generic_edp_panel_probe` →
  `find_edp_panel`; delays used in prepare/enable
- [Phase 6] Dry-run `patch --dry-run` of this commit onto `v6.18.53`
  `panel-edp.c`: succeeded (offset -5)
- [Phase 7] MAINTAINERS: Douglas Anderson is `R:` for panel-edp.c
- [Phase 8] Severity: WARN_ON + wrong delays on this panel; ID-gated so
  other hardware unaffected

**YES**

 drivers/gpu/drm/panel/panel-edp.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/gpu/drm/panel/panel-edp.c 
b/drivers/gpu/drm/panel/panel-edp.c
index f2ae333a32d8c..0da04d75e4e96 100644
--- a/drivers/gpu/drm/panel/panel-edp.c
+++ b/drivers/gpu/drm/panel/panel-edp.c
@@ -2061,6 +2061,7 @@ static const struct edp_panel_entry edp_panels[] = {
 
        EDP_PANEL_ENTRY('E', 'T', 'C', 0x0000, &delay_50_500_e200_d200_po2e335, 
"LP079QX1-SP0V"),
 
+       EDP_PANEL_ENTRY('H', 'K', 'C', 0x1203, &delay_200_500_e80, 
"MB116AS01'3"),
        EDP_PANEL_ENTRY('H', 'K', 'C', 0x2d51, &delay_200_500_e200, "Unknown"),
        EDP_PANEL_ENTRY('H', 'K', 'C', 0x2d5b, &delay_200_500_e200, 
"MB116AN01"),
        EDP_PANEL_ENTRY('H', 'K', 'C', 0x2d5c, &delay_200_500_e200, 
"MB116AN01-2"),
-- 
2.53.0

Reply via email to