[v7 11/12] drm/i915/lspcon: Add retries for MCA LSPCON r/w operations
Uma Shankar
uma.shankar at intel.com
Mon Jun 22 21:38:17 UTC 2020
There are some intermittent failures to read and write on MCA
LSPCON through DPCD when we perform suspend/resume cycles. Adding
few retries to add stability.
Signed-off-by: Uma Shankar <uma.shankar at intel.com>
---
drivers/gpu/drm/i915/display/intel_lspcon.c | 45 +++++++++++++++------
1 file changed, 33 insertions(+), 12 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_lspcon.c b/drivers/gpu/drm/i915/display/intel_lspcon.c
index 52334747fb01..95ab5d77e581 100644
--- a/drivers/gpu/drm/i915/display/intel_lspcon.c
+++ b/drivers/gpu/drm/i915/display/intel_lspcon.c
@@ -433,27 +433,48 @@ static bool _lspcon_write_avi_infoframe_mca(struct drm_dp_aux *aux,
val = 0;
reg = LSPCON_MCA_AVI_IF_CTRL;
- ret = drm_dp_dpcd_read(aux, reg, &val, 1);
- if (ret < 0) {
- DRM_ERROR("DPCD read failed, address 0x%x\n", reg);
- return false;
+ for (retry = 0; retry < 5; retry++) {
+ ret = drm_dp_dpcd_read(aux, reg, &val, 1);
+ if (ret >= 0) {
+ break;
+ } else if (retry < 4) {
+ mdelay(50);
+ continue;
+ } else {
+ DRM_ERROR("DPCD read failed, address 0x%x\n", reg);
+ return false;
+ }
}
/* Indicate LSPCON chip about infoframe, clear bit 1 and set bit 0 */
val &= ~LSPCON_MCA_AVI_IF_HANDLED;
val |= LSPCON_MCA_AVI_IF_KICKOFF;
- ret = drm_dp_dpcd_write(aux, reg, &val, 1);
- if (ret < 0) {
- DRM_ERROR("DPCD read failed, address 0x%x\n", reg);
- return false;
+ for (retry = 0; retry < 5; retry++) {
+ ret = drm_dp_dpcd_write(aux, reg, &val, 1);
+ if (ret >= 0) {
+ break;
+ } else if (retry < 4) {
+ mdelay(50);
+ continue;
+ } else {
+ DRM_ERROR("DPCD write failed, address 0x%x\n", reg);
+ return false;
+ }
}
val = 0;
- ret = drm_dp_dpcd_read(aux, reg, &val, 1);
- if (ret < 0) {
- DRM_ERROR("DPCD read failed, address 0x%x\n", reg);
- return false;
+ for (retry = 0; retry < 5; retry++) {
+ ret = drm_dp_dpcd_read(aux, reg, &val, 1);
+ if (ret >= 0) {
+ break;
+ } else if (retry < 4) {
+ mdelay(50);
+ continue;
+ } else {
+ DRM_ERROR("DPCD read failed, address 0x%x\n", reg);
+ return false;
+ }
}
if (val == LSPCON_MCA_AVI_IF_HANDLED)
--
2.22.0
More information about the Intel-gfx-trybot
mailing list