From: Dario Binacchi <[email protected]> [ Upstream commit 6acb810ebc5d8dea5c250326c14dc44e32dc8e92 ]
Add Ampire, AM-1280800W8TZQW-T00H 10.1" TFT LCD panel timings. Co-developed-by: Michael Trimarchi <[email protected]> Signed-off-by: Michael Trimarchi <[email protected]> Signed-off-by: Dario Binacchi <[email protected]> Reviewed-by: Dmitry Baryshkov <[email protected]> Signed-off-by: Neil Armstrong <[email protected]> Link: https://patch.msgid.link/[email protected] Signed-off-by: Sasha Levin <[email protected]> --- LLM Generated explanations, may be completely bogus: # Stable Backport Analysis: drm/panel: simple: Add AM-1280800W8TZQW-T00H **Local tree:** Linux **6.18.44** (`v6.18.44`, `stable/linux-6.18.y`) --- ## PHASE 1: COMMIT MESSAGE FORENSICS ### Step 1.1: Subject line **Record:** `[drm/panel: simple]` `[Add]` — Add Ampire AM-1280800W8TZQW-T00H 10.1" TFT LCD panel timings to the existing `panel-simple` driver. ### Step 1.2: Tags **Record:** - **Co-developed-by:** Michael Trimarchi \<[email protected]\> - **Signed-off-by:** Michael Trimarchi, Dario Binacchi - **Reviewed-by:** Dmitry Baryshkov \<[email protected]\> (DRM/panel reviewer) - **Signed-off-by:** Neil Armstrong \<[email protected]\> (maintainer ack) - **Link:** https://patch.msgid.link/20260515082232.1766586-2- [email protected] - **No** Fixes:, Reported-by:, Tested-by:, Cc: [email protected], or syzbot tags - **Notable:** Part of a 2-patch v2 series (patch 2/2); patch 1/2 adds the DT binding ### Step 1.3: Body analysis **Record:** - **Bug description:** None — this is hardware enablement, not a bug fix. - **Symptom without patch:** A device tree node with `compatible = "ampire,am-1280800w8tzqw-t00h"` will not match `panel-simple`, so the display will not probe and no framebuffer will come up. - **Root cause:** Missing `panel_desc` / `drm_display_mode` entry and missing OF compatible in `platform_of_match[]`. - **Version info:** None in the message. ### Step 1.4: Hidden bug fix? **Record:** No. This is a straightforward device-ID / panel-timing addition. It does not fix leaks, races, crashes, or corruption in existing code paths. --- ## PHASE 2: DIFF ANALYSIS ### Step 2.1: Inventory **Record:** - **File changed:** `drivers/gpu/drm/panel/panel-simple.c` only (+28 lines) - **Functions modified:** None (only static data and one `platform_of_match[]` entry) - **Scope:** Single-file, surgical data addition ### Step 2.2: Code flow change **Record:** - **Hunk 1 (after `ampire_am_1280800n3tzqw_t00h`):** Adds `ampire_am_1280800w8tzqw_t00h_mode` (1280×800, 72.4 MHz pixel clock, different vsync from the N3 sibling) and `ampire_am_1280800w8tzqw_t00h` descriptor (8 bpc, LVDS, RGB888 SPWG). - Before: only the N3 variant is known. - After: W8 variant is also known. - **Hunk 2 (`platform_of_match[]`):** Adds `{ .compatible = "ampire,am-1280800w8tzqw-t00h", .data = &ire_am_1280800w8tzqw_t00h }`. - Before: probe fails for W8 compatible strings. - After: probe succeeds and uses W8-specific timings. ### Step 2.3: Bug mechanism **Record:** **Category h) — hardware workarounds / device enablement.** Not a software bug fix; adds OF compatible + timings for a new panel variant on an existing driver. ### Step 2.4: Fix quality **Record:** - **Quality:** High — mirrors the existing `am-1280800n3tzqw-t00h` pattern exactly. - **Regression risk:** Very low — purely additive static data; no logic or locking changes. - **Minor note:** W8 mode struct omits `.flags = DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC` present on the N3 sibling; this matches the submitted upstream patch and was reviewed as-is. --- ## PHASE 3: GIT HISTORY INVESTIGATION ### Step 3.1: Blame **Record:** On `origin/master`, the W8 panel code is present at lines 823–846 and in `platform_of_match`. In the local 6.18.44 tree, the insertion point after `ampire_am_1280800n3tzqw_t00h` (lines 797–821) and the matching `platform_of_match` entry (line 4966) already exist. The W8 entry is absent — this is new mainline content not yet in 6.18.y. ### Step 3.2: Fixes: tag **Record:** Not applicable — no Fixes: tag. ### Step 3.3: Related file history **Record:** - Sibling panel `am-1280800n3tzqw-t00h` is already in this tree and used by in-tree DTS files (`imx6q-icore-ofcap10.dts`, `px30-engicam- px30-core-ctouch2-of10.dts`, `stm32mp157a-icore- stm32mp1-ctouch2-of10.dts`). - On `stable/linux-6.6.y`, the nearly identical sibling addition was backported: `bca684e69c4ce` (+29 lines, same vendor/subject pattern). - `w8tzqw` appears only in `panel-simple.c` and `panel-simple.yaml` on mainline — no in-tree DTS references anywhere. ### Step 3.4: Author context **Record:** Amarula Solutions (same vendor ecosystem as Engicam boards using the N3 panel). Dmitry Baryshkov reviewed; Neil Armstrong signed off. Same maintainer chain as prior Ampire panel additions. ### Step 3.5: Dependencies **Record:** Part of a 2-patch series: 1. `dt-bindings: display: simple: Add AM-1280800W8TZQW-T00H` (Acked-by: Conor Dooley) 2. `drm/panel: simple: Add AM-1280800W8TZQW-T00H` (this commit) This driver patch is self-contained and applies cleanly to 6.18.44. The binding patch is a companion but not a compile-time prerequisite for the driver itself. --- ## PHASE 4: MAILING LIST AND EXTERNAL RESEARCH ### Step 4.1: Original discussion **Record:** - **b4 am** on msgid `[email protected]` found the v2 series (2 patches). - **Link:** https://patch.msgid.link/20260515082232.1766586-1- [email protected] - **b4 dig -c** on merge commit `0fd8b67e27ff7` failed (merge commit, not the original patch). - **No Cc: stable** nominations found in the mbox thread. - **No NAKs** found in the retrieved mbox. ### Step 4.2: Reviewers **Record:** Dmitry Baryshkov (Reviewed-by), Conor Dooley (Acked-by on bindings), Neil Armstrong (Signed-off-by). Appropriate DRM/DT reviewers involved. ### Step 4.3: Bug report **Record:** Not applicable — no bug report, syzbot link, or user crash report. ### Step 4.4: Series context **Record:** 2-patch v2 series. v2 changes were alphabetical ordering and correcting WQVGA → WXGA in the binding comment. No board DTS included in the series. ### Step 4.5: Stable list history **Record:** No stable-list discussion found for this specific panel. Sibling `AM-1280800N3TZQW-T00H` was previously backported to 6.6.y. --- ## PHASE 5: CODE SEMANTIC ANALYSIS ### Step 5.1: Key functions **Record:** No functions modified. Data consumed by `panel_simple_get_desc()` → `of_device_get_match_data()` via `platform_of_match[]`. ### Step 5.2: Callers **Record:** `panel_simple_platform_probe()` and DSI probe paths call `panel_simple_probe()`, which calls `panel_simple_get_desc()`. Any platform device with `compatible = "ampire,am-1280800w8tzqw-t00h"` would use the new descriptor. Triggered at boot during DRM/display initialization on affected embedded boards. ### Step 5.3: Callees **Record:** Standard panel-simple probe path: mode/timing setup, connector registration. No new allocation or locking paths introduced. ### Step 5.4: Reachability **Record:** Reachable on any system with a DT node using this compatible and `CONFIG_DRM_PANEL_SIMPLE`. Not userspace-triggered, but affects display bring-up on boot for matching hardware. ### Step 5.5: Similar patterns **Record:** Identical pattern to `ampire_am_1280800n3tzqw_t00h` already in this tree (29-line sibling addition backported to 6.6.y as `bca684e69c4ce`). --- ## PHASE 6: CROSS-REFERENCING AGAINST LOCAL TREE (6.18.44) ### Step 6.1: Does the “buggy” code exist? **Record:** The `panel-simple` driver and the sibling N3 Ampire panel entry exist in 6.18.44. The W8 compatible is **missing** — boards using it cannot get display support. The gap was introduced when W8 support landed in mainline after the 6.18 branch point. ### Step 6.2: Backport complications **Record:** **Clean apply expected.** Insertion point (`after ampire_am_1280800n3tzqw_t00h` and in `platform_of_match[]`) is present and unchanged. `git diff HEAD origin/master` shows exactly this 28-line addition among broader mainline drift. ### Step 6.3: Related fixes already present? **Record:** No equivalent W8 entry in this tree. Sibling N3 panel is present. No duplicate fix found. --- ## PHASE 7: SUBSYSTEM AND MAINTAINER CONTEXT ### Step 7.1: Subsystem criticality **Record:** **drivers/gpu/drm/panel** — IMPORTANT for embedded/display platforms; not universal core kernel, but critical for affected hardware. ### Step 7.2: Subsystem activity **Record:** `panel-simple.c` is mature with extensive static panel tables. This follows established conventions. --- ## PHASE 8: IMPACT AND RISK ASSESSMENT ### Step 8.1: Who is affected **Record:** **Platform-specific** — embedded boards (Engicam/Amarula ecosystem) using the Ampire AM-1280800W8TZQW-T00H 10.1" LVDS panel. Requires `CONFIG_DRM_PANEL_SIMPLE`. ### Step 8.2: Trigger conditions **Record:** Boot on hardware with DT `compatible = "ampire,am-1280800w8tzqw-t00h"`. **No in-tree DTS currently uses this compatible** on mainline or 6.18.44. Impact is for downstream/custom DTS or future board additions. ### Step 8.3: Failure mode severity **Record:** Without the patch: panel probe failure → **no display** (MEDIUM functional impact for affected hardware; not a crash, corruption, or security issue). ### Step 8.4: Risk-benefit **Record:** - **Benefit:** Enables display on W8-variant Ampire panels; follows established stable exception for device-ID additions; direct precedent from sibling N3 backport to 6.6.y. - **Risk:** Very low — 28 lines of static data, no behavioral change for existing panels. - **Ratio:** Favorable for stable, under the explicit “add a device ID” exception in `stable-kernel-rules.rst`. --- ## PHASE 9: FINAL SYNTHESIS ### Step 9.1: Evidence summary **FOR backport:** - Explicitly permitted by `Documentation/process/stable-kernel- rules.rst`: *“It must either fix a real bug that bothers people or just add a device ID.”* - Falls under the device-ID / DT-binding exception category in the evaluation guidelines. - Small (28 lines), contained, obviously correct, reviewed. - `panel-simple` driver and sibling N3 panel already exist in 6.18.44. - Applies cleanly to this tree. - Already in mainline (prerequisite met). - Identical precedent: `bca684e69c4ce` backported the N3 sibling to 6.6.y (+29 lines). **AGAINST backport:** - Not a bug fix — pure hardware enablement. - No in-tree DTS uses this compatible yet (no demonstrated user impact in 6.18.44 today). - Ideally paired with patch 1/2 (DT binding yaml update). - No stable nomination or user bug report. **Unresolved:** Whether a specific shipping board on 6.18.y already uses this panel in downstream trees (not verifiable from this tree). ### Step 9.2: Stable rules checklist 1. Obviously correct and tested? **PASS** — reviewed by Dmitry Baryshkov; mirrors existing N3 entry. 2. Fixes a real bug affecting users? **PASS (via device-ID exception)** — not a software bug, but enables hardware that otherwise cannot work. 3. Important issue? **PASS (moderate)** — display failure on affected hardware; not crash/security. 4. Small and contained? **PASS** — 28 lines, one file. 5. No new features or APIs? **PASS** — new OF compatible on existing driver; standard stable device-ID pattern. 6. Can apply to local tree? **PASS** — clean apply to existing `panel- simple.c`. ### Step 9.3: Exception category **Record:** **NEW DEVICE ID / DT binding addition** to an existing driver (`panel-simple`). Same category as PCI/USB ID additions and prior Ampire panel additions backported to stable. ### Step 9.4: Decision rationale This commit does not fix a kernel bug, but it adds a device identifier (OF compatible + panel timings) to an existing, in-tree driver. That is explicitly allowed for stable trees per `stable-kernel-rules.rst` and matches the established pattern of backporting Ampire `panel-simple` additions (the N3 sibling was backported to 6.6.y in an essentially identical 29-line patch). The change is low-risk, applies cleanly to Linux 6.18.44, and is already in mainline. The companion DT binding patch should ideally be backported alongside it, but this driver commit alone is valid stable material. --- ## Verification - **[Phase 1]** Parsed subject, tags, body from provided commit message and mbox. - **[Phase 1]** `b4 am [email protected]`: confirmed v2 2-patch series; Reviewed-by Dmitry Baryshkov; Acked-by Conor Dooley on patch 1/2. - **[Phase 2]** Diff analysis: +28 lines in `panel-simple.c`; static data + one `platform_of_match` entry. - **[Phase 3]** `git describe HEAD`: v6.18.44 / 6.18.44 on `stable/linux-6.18.y`. - **[Phase 3]** `git grep "am-1280800w8tzqw-t00h" origin/master`: only in `panel-simple.c` and `panel-simple.yaml` on mainline; absent from HEAD. - **[Phase 3]** `git show bca684e69c4ce --stat`: sibling N3 panel backported to 6.6.y (+29 lines, same pattern). - **[Phase 3]** `git log stable/linux-6.6.y --grep="1280800"`: N3 panel + binding + bpc fix backported to 6.6.y. - **[Phase 4]** `b4 dig -c 0fd8b67e27ff7`: no match (merge commit). - **[Phase 4]** Read mbox `v2_20260515_dario_binacchi_dt_bindings_displa y_simple_add_am_1280800w8tzqw_t00h.mbx`: no Cc: stable; 2-patch series confirmed. - **[Phase 5]** `grep panel_simple_probe/panel_simple_get_desc` in `panel-simple.c`: standard probe path via `of_device_get_match_data()`. - **[Phase 6]** `grep "am-1280800w8tzqw"`: zero matches in local tree. - **[Phase 6]** `grep "am-1280800n3tzqw"`: present in `panel-simple.c` and three in-tree DTS files. - **[Phase 6]** `git diff HEAD origin/master -- drivers/gpu/drm/panel/panel-simple.c`: W8 addition is a clean 28-line insert at expected location. - **[Phase 6]** `git show origin/master:panel-simple.c | rg "1280800w8"`: confirmed mainline has full W8 definition. - **[Phase 7]** Read `Documentation/process/stable-kernel-rules.rst`: confirms device-ID additions are valid stable material. - **[Phase 8]** `git grep "am-1280800w8tzqw-t00h" origin/master`: no DTS references — no in-tree board uses this panel yet. **YES**The background lookups finished and line up with the earlier analysis: - **Pickaxe search** (`am-1280800w8tzqw-t00h` on `origin/master`): only surfaced merge commit `0fd8b67e27ff7`, not the original panel patch — the change is buried in a merge, which is why a direct subject/hash search was needed. - **Broader pickaxe search** (with `--all`): slow and similarly unhelpful for finding the real introducing commit. - **`b4 dig -c 0fd8b67e27ff7`**: no lore match on that RDMA merge commit. The useful trace came from **`b4 am`** on the patch msgid, which found the v2 2-patch series (DT binding + driver). That supports the **YES** verdict for 6.18.44: a small device-ID addition to an existing driver, with the companion binding patch ideally backported alongside it. drivers/gpu/drm/panel/panel-simple.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/drivers/gpu/drm/panel/panel-simple.c b/drivers/gpu/drm/panel/panel-simple.c index ef1c4b9299ee4..878a5dc7748fb 100644 --- a/drivers/gpu/drm/panel/panel-simple.c +++ b/drivers/gpu/drm/panel/panel-simple.c @@ -820,6 +820,31 @@ static const struct panel_desc ampire_am_1280800n3tzqw_t00h = { .connector_type = DRM_MODE_CONNECTOR_LVDS, }; +static const struct drm_display_mode ampire_am_1280800w8tzqw_t00h_mode = { + .clock = 72400, + .hdisplay = 1280, + .hsync_start = 1280 + 40, + .hsync_end = 1280 + 40 + 80, + .htotal = 1280 + 40 + 80 + 40, + .vdisplay = 800, + .vsync_start = 800 + 10, + .vsync_end = 800 + 10 + 18, + .vtotal = 800 + 10 + 18 + 10, +}; + +static const struct panel_desc ampire_am_1280800w8tzqw_t00h = { + .modes = &ire_am_1280800w8tzqw_t00h_mode, + .num_modes = 1, + .bpc = 8, + .size = { + .width = 217, + .height = 136, + }, + .bus_flags = DRM_BUS_FLAG_DE_HIGH, + .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG, + .connector_type = DRM_MODE_CONNECTOR_LVDS, +}; + static const struct drm_display_mode ampire_am_480272h3tmqw_t01h_mode = { .clock = 9000, .hdisplay = 480, @@ -4965,6 +4990,9 @@ static const struct of_device_id platform_of_match[] = { { .compatible = "ampire,am-1280800n3tzqw-t00h", .data = &ire_am_1280800n3tzqw_t00h, + }, { + .compatible = "ampire,am-1280800w8tzqw-t00h", + .data = &ire_am_1280800w8tzqw_t00h, }, { .compatible = "ampire,am-480272h3tmqw-t01h", .data = &ire_am_480272h3tmqw_t01h, -- 2.53.0
