Commit 08441f10 authored by Samasth Norway Ananda's avatar Samasth Norway Ananda Committed by Joonas Lahtinen
Browse files

drm/i915/gmbus: fix spurious timeout on 512-byte burst reads



When reading exactly 512 bytes with burst read enabled, the
extra_byte_added path breaks out of the inner do-while without
decrementing len. The outer while(len) then re-enters and gmbus_wait()
times out since all data has been delivered. Decrement len before the
break so the outer loop terminates correctly.

Fixes: d5dc0f43 ("drm/i915/gmbus: Enable burst read")
Signed-off-by: default avatarSamasth Norway Ananda <samasth.norway.ananda@oracle.com>
Reviewed-by: default avatarJani Nikula <jani.nikula@intel.com>
Link: https://patch.msgid.link/20260316231920.135438-2-samasth.norway.ananda@oracle.com


Signed-off-by: default avatarJani Nikula <jani.nikula@intel.com>
(cherry picked from commit 4ab0f09e)
Signed-off-by: default avatarJoonas Lahtinen <joonas.lahtinen@linux.intel.com>
parent c3692998
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -496,8 +496,10 @@ gmbus_xfer_read_chunk(struct intel_display *display,

		val = intel_de_read_fw(display, GMBUS3(display));
		do {
			if (extra_byte_added && len == 1)
			if (extra_byte_added && len == 1) {
				len--;
				break;
			}

			*buf++ = val & 0xff;
			val >>= 8;