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 <kapilporwal@google.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/91579
Reviewed-by: Subrata Banik <subratabanik@google.com>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
This commit is contained in:
Kapil Porwal 2026-03-06 14:56:31 +05:30 committed by Matt DeVillier
commit 4caf5ab903

View file

@ -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);