[PATCH RESEND 14/17] riscv: dts: spacemit: k3: add display nodes

sashiko-bot at kernel.org sashiko-bot at kernel.org
Fri Jul 24 22:08:18 PDT 2026


Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [High] The DP controller hardware is not initialized before the eDP panel probe is triggered, causing synchronous AUX transfers to fail or hang.
- [High] The custom EDID read function violates the I2C EEPROM protocol by omitting the Middle-of-Transaction (MOT) bit, breaking EDID reads on sinks that require a repeated START.
--

--- Patch [14]: [PATCH RESEND 14/17] riscv: dts: spacemit: k3: add display nodes ---
commit 9b9ee39195ad90a76f056f9bddbdabb8377b67ec
Author: Cody Kang <codykang.hk at gmail.com>

riscv: dts: spacemit: k3: add display nodes

Add the SoC-level display nodes: the two Saturn DPUs, the two DP/eDP
controllers with their PHY children.

> diff --git a/arch/riscv/boot/dts/spacemit/k3-display.dtsi b/arch/riscv/boot/dts/spacemit/k3-display.dtsi
> new file mode 100644
> index 0000000000000..4892ee6acda22
> --- /dev/null
> +++ b/arch/riscv/boot/dts/spacemit/k3-display.dtsi
> @@ -0,0 +1,156 @@
[ ... ]
> +&soc {
[ ... ]
> +	edp0: edp at cac84000 {
> +		compatible = "spacemit,k3-inno-dp";

[Severity: High]
Does enabling this device node cause the eDP panel probe to fail?

Looking at inno_dp_probe() in drivers/gpu/drm/spacemit/spacemit_inno_dp.c, it
populates the eDP panel device on the AUX bus:

    ret = devm_of_dp_aux_populate_bus(&dp->aux,
                                      spacemit_dp_edp_link_panel);

The panel driver probes synchronously and attempts an AUX transfer to read the
EDID.

However, the DP controller's hardware registers (including the AUX clock
divider DP_AUX_CTRL_CLK_DIV and soft resets) are not initialized until later:

spacemit_inno_dp.c:spacemit_dp_bind() {
    ...
    ret = spacemit_dp_dev_init(dp);
    ...
}

The uninitialized controller ignores the transfer or the AUX state machine
does not start, causing an unavoidable timeout.

> +		reg = <0x0 0xcac84000 0x0 0x4000>;
[ ... ]
> +	dp1: dp at cac88000 {
> +		compatible = "spacemit,k3-inno-dp";

[Severity: High]
Will EDID reads fail for sinks connected to this node?

When reading EDID, the driver splits the transaction into a write and a read:

spacemit_inno_dp.c:spacemit_dp_conn_get_edid_block() {
    ...
    ret = spacemit_dp_aux_i2c_write(dp, DDC_ADDR,
                                    &edid_offset, 1);
    ...
}

It calls spacemit_dp_aux_i2c_write() which hardcodes the request:

spacemit_inno_dp.c:spacemit_dp_aux_i2c_write() {
    ...
    .request = DP_AUX_I2C_WRITE,
    ...
}

The missing MOT (Middle-of-Transaction) bit guarantees an I2C STOP condition
after writing the offset address. This resets the internal address pointer of
many standard EEPROMs, causing the subsequent read to repeatedly fetch block 0
instead of the requested extension block.

> +		reg = <0x0 0xcac88000 0x0 0x4000>;

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260725-k3-display-v1-0-6de34d80e86c@gmail.com?part=14



More information about the linux-phy mailing list