evidence · 3.4 KiB

mainline-display-dtb.md

Committed at docs/evidence/mainline-display-dtb.md. This is what grounds the requirements that cite it.

Open raw source

Opt-in mainline display DTB source check

Follow-up: this evidence records the initial candidate before the local genpd port. docs/evidence/mainline-display-power-domain.md records the subsequent DRM-only provider, current DTB and matching boot bundle. The initial omission below remains historical evidence; runtime power/panel/touch behavior is still UNVERIFIED.

Result

On 2026-09-29, the host C preprocessor and dtc compiled nix/dts/k230-tdisplay-mainline-drm.dts against the pinned mainline source output and round-tripped the resulting DTB. The complete stdout/stderr is in mainline-display-dtb.log. The resulting blob is kept only in the ignored .scratch/mainline-display-dtb-check/ directory.

This proves DTS syntax, includes, phandle resolution, and serialized node content for the host compiler invocation. The matching Nix derivation also built successfully; its output and the paired boot-files output are recorded in mainline-display-nix-build.md. Neither host check proves clock or reset behavior on silicon, DT binding correctness at probe time, powered display output, or touch input. The non-MMIO display-subsystem sits outside the SoC simple-bus, so the host compile emits no simple-bus register warning. The source does not claim a working panel.

Reproducible command

tools/mainline-display-dtb-check.sh

The script stages the pinned k230.dtsi includes plus this project’s mainline console DTS and RM69A10 panel DTSI under the checkout’s ignored .scratch/, preprocesses with the kernel’s scripts/dtc/include-prefixes, compiles with dtc -@, and decompiles for a round-trip check. It verified the resolved Goodix I2C node, display subsystem, VO, DSI, and universal panel compatibles. The host-check blob was 10,553 bytes, matching the built Nix derivation DTB.

Grounding and known dependency

The node ranges and interrupts match the pinned vendor tree’s arch/riscv/boot/dts/canaan/k230.dtsi: I2C3 at 0x91408000/IRQ 24, VO at 0x90840000/IRQ 133, and DSI at 0x90850000. The panel GPIOs, timing, DSI lane count, and touch address/IRQ/reset/size come from the board file and panel DTSI already in this repository (nix/dts/k230-tdisplay.dts, nix/dts/display-rm69a10-568x1232.dtsi). The pinned mainline source has K230_LS_I2C3_RATE and K230_LS_I2C3_APB_GATE in include/dt-bindings/clock/canaan,k230-clk.h, mapped by drivers/clk/clk-k230.c; these are used for the new I2C3 node. The generic DesignWare I2C driver obtains functional and optional pclk clocks but does not acquire a reset controller, so the available RST_I2C3 is not attached as unused metadata.

The imported VO/DSI drivers do not call the clock or reset consumer APIs; their current port writes its display/PHY registers directly. The DTB therefore does not guess clock/reset phandles for these nodes. A separate, material gap is display power control: unlike the vendor DTS, this candidate omits power-domains = <&sysctl_power K230_PM_DOMAIN_DISP> because the exact pinned mainline source has no sysctl_power provider or K230_PM_DOMAIN_DISP implementation. Whether firmware leaves this domain powered or a future mainline provider is required is UNVERIFIED; no physical probe has been made.

deviceTreeMainlineDrm and kernelMainlineDrmBootFiles remain opt-in outputs. The boot bundle pairs the candidate Image and DTB for manual U-Boot loading only; it contains no initrd or root filesystem and is not boot proof.