On Sat, 21 Nov 2015, Rodrigo Vivi <rodrigo.vivi@xxxxxxxxx> wrote: > Mainly aux communications on sink_crc > were failing a lot randomly on recent platforms. > The first solution was to try to use intel_dp_dpcd_read_wake, but then > it was suggested to move retries to drm level. > > Since drm level was already taking care of retries and didn't want > to through random retries on that level the second solution was to > put the retries at aux_transfer layer what was nacked. > > So I realized we had so many retries in different places and > started to organize that a bit. During this organization I noticed > that we weren't handing at all the case were the message size was > zeroed. And this was exactly the case that was affecting sink_crc. > > Also we weren't respect BSPec who says this size message = 0 or > 20 > are forbidden. > > It is a fact that we still have no clue why we are getting this > forbidden value there. But anyway we need to handle that for now > so we return -EBUSY and drm level takes care of the retries that > are already in place. > > Cc: Jani Nikula <jani.nikula@xxxxxxxxx> > Cc: Daniel Vetter <daniel.vetter@xxxxxxxx> > Signed-off-by: Rodrigo Vivi <rodrigo.vivi@xxxxxxxxx> > --- > drivers/gpu/drm/i915/intel_dp.c | 11 +++++++++++ > 1 file changed, 11 insertions(+) > > diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c > index 35048d6..c87e937 100644 > --- a/drivers/gpu/drm/i915/intel_dp.c > +++ b/drivers/gpu/drm/i915/intel_dp.c > @@ -905,6 +905,17 @@ done: > /* Unload any bytes sent back from the other side */ > recv_bytes = ((status & DP_AUX_CH_CTL_MESSAGE_SIZE_MASK) >> > DP_AUX_CH_CTL_MESSAGE_SIZE_SHIFT); > + > + /* > + * By BSpec: "Message sizes of 0 or >20 are not allowed." > + * We have no idea of what happened so we return -EBUSY so > + * drm layer takes care for the necessary retries. > + */ > + if (recv_bytes == 0 || recv_bytes > 20) { > + ret = -EBUSY; This deserves debug logging at the very least. BR, Jani. > + goto out; > + } > + > if (recv_bytes > recv_size) > recv_bytes = recv_size; -- Jani Nikula, Intel Open Source Technology Center _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/intel-gfx