From 4caf5ab903341be66c48b865e3c9f5dc0edca96d Mon Sep 17 00:00:00 2001 From: Kapil Porwal Date: Fri, 6 Mar 2026 14:56:31 +0530 Subject: [PATCH] soc/qualcomm/sc7280: Fix extended EDID read over I2C-over-AUX The eDP AUX controller currently sets the NO_SEND_STOP flag for all I2C-over-AUX transactions. This prevents the controller from issuing an I2C STOP condition, which is required for proper completion of multi-block (extended) EDID reads. Update edp_msg_fifo_tx() to only set the EDP_AUX_TRANS_CTRL_NO_SEND_STOP flag when the DP_AUX_I2C_MOT (Middle-of-Transaction) bit is set in the request. This allows the I2C transaction to correctly finalize with a STOP condition when MOT is not present, enabling successful reads of EDID extension blocks. BUG=none TEST=Verify extended EDID is correctly read on Google/Quartz. Change-Id: I4b637a750ef16148895332abfd9ca202b5a35408 Signed-off-by: Kapil Porwal Reviewed-on: https://review.coreboot.org/c/coreboot/+/91579 Reviewed-by: Subrata Banik Tested-by: build bot (Jenkins) --- src/soc/qualcomm/sc7280/display/edp_aux.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/soc/qualcomm/sc7280/display/edp_aux.c b/src/soc/qualcomm/sc7280/display/edp_aux.c index 0f37c21b47..593f1731a4 100644 --- a/src/soc/qualcomm/sc7280/display/edp_aux.c +++ b/src/soc/qualcomm/sc7280/display/edp_aux.c @@ -88,9 +88,13 @@ static int edp_msg_fifo_tx(unsigned int address, u8 request, void *buffer, size_ write32(&edp_phy->aux_interrupt_clr, 0x0); reg = 0; /* Transaction number is always 1 */ - if (!native) /* i2c */ - reg |= EDP_AUX_TRANS_CTRL_I2C | EDP_AUX_TRANS_CTRL_NO_SEND_ADDR | - EDP_AUX_TRANS_CTRL_NO_SEND_STOP; + if (!native) { /* i2c */ + reg |= EDP_AUX_TRANS_CTRL_I2C | EDP_AUX_TRANS_CTRL_NO_SEND_ADDR; + /* EDP_AUX_TRANS_CTRL_NO_SEND_STOP should be set ONLY if DP_AUX_I2C_MOT is used. */ + if (request & DP_AUX_I2C_MOT) { + reg |= EDP_AUX_TRANS_CTRL_NO_SEND_STOP; + } + } reg |= EDP_AUX_TRANS_CTRL_GO; write32(&edp_auxclk->aux_trans_ctrl, reg);