Received: by 10.223.176.5 with SMTP id f5csp353896wra; Tue, 30 Jan 2018 12:36:32 -0800 (PST) X-Google-Smtp-Source: AH8x225gBvJw+vZEYEOaCj3VImj07Uq7tNzlZSZCqUcqIYSGB/LKg69wHxR9mPPKfyBuUH6D+f8+ X-Received: by 2002:a17:902:a711:: with SMTP id w17-v6mr12954898plq.299.1517344591934; Tue, 30 Jan 2018 12:36:31 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1517344591; cv=none; d=google.com; s=arc-20160816; b=tVqQ471jRHow5A/NEhiDMLpSSuzXLllPCcYo0ZKeUuZ4t1oIX+4sqsrIOagQNe5jDU +qI3Ke8KlsyI291faekQipJ98NWEh1KJXz+1oJTeDmOrLPzt8m52uIqjnxEootMerdiG 83v3xaWn4FPPfjsgTcaD6xFyy7MyjxodZViDbixcOkIOUJsgjnDyu2efOmZbyq3NSWUe YLShd8Z6SzmVglj/U60xB4Vl+eO19GX3IKr+SLlb5Glf9Ut7NEpsKtvcbCiFt45kgyeK Gb0k5BmlGm+/8WrJ0YEi5+HTXeaJHYHQfT468ecJj7UYnJnYhTy1nblzKAnI24yI6T0f BjLw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding :content-transfert-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:arc-authentication-results; bh=ZWqmOsLX2I/KZcEAFeVfPE32A5RDqVbUkPK/Dm+NZYk=; b=XL7ZZlTqklLq9V+9laCkmvctppd1kNEDPhDfWX2oQPVnJ92VHrSPIOHC1JdxYnoPvP eFtaalUi6IxYsYhQBpEwpADATNF6B3M6QEbQg+qTtKuyei76IG/IDv3iu8+JVT2eYlC3 /j8Dy7cQr5a2sDlRZ7nVH7UTgWzumqdYtSy+dupxQGJpUwNRH7TEObsmHiRt7X7dDd6I fc5h+N5H5zto9TxpJUxlaQDpIvTyRtXKNf2fS6UmMImD54EiFkiPq+Q/hGimB8vBc3Rv u5KcBfBOoHYRT8UkqgVtG98FRZausQdo1ecpCnKHz0xbE+WVg2keYrxPpweZ6NJcLYeK dkKQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=collabora.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id b6-v6si597196plx.696.2018.01.30.12.36.17; Tue, 30 Jan 2018 12:36:31 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=collabora.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753322AbeA3UfI (ORCPT + 99 others); Tue, 30 Jan 2018 15:35:08 -0500 Received: from bhuna.collabora.co.uk ([46.235.227.227]:56344 "EHLO bhuna.collabora.co.uk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752687AbeA3U3s (ORCPT ); Tue, 30 Jan 2018 15:29:48 -0500 Received: from localhost.localdomain (unknown [IPv6:2a01:e35:8a7e:4790:1865:5d14:35de:d167]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: tescande) by bhuna.collabora.co.uk (Postfix) with ESMTPSA id F3DB7273D93; Tue, 30 Jan 2018 20:29:46 +0000 (GMT) From: Thierry Escande To: Archit Taneja , Inki Dae , Thierry Reding , Sandy Huang , Sean Paul , David Airlie , Tomasz Figa , Enric Balletbo i Serra Cc: Haixia Shi , =?UTF-8?q?=C3=98rjan=20Eide?= , Zain Wang , Yakir Yang , Lin Huang , Douglas Anderson , Mark Yao , linux-kernel@vger.kernel.org, linux-rockchip@lists.infradead.org, dri-devel@lists.freedesktop.org Subject: [PATCH v3 24/43] drm/bridge: analogix_dp: Reset aux channel if an error occurred Date: Tue, 30 Jan 2018 21:28:54 +0100 Message-Id: <20180130202913.28724-25-thierry.escande@collabora.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20180130202913.28724-1-thierry.escande@collabora.com> References: <20180130202913.28724-1-thierry.escande@collabora.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Type: text/plain; charset = "utf-8" Content-Transfert-Encoding: 8bit Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Lin Huang AUX errors are caused by many different reasons. We may not know what happened in aux channel on failure, so let's reset aux channel if some errors occurred. Cc: 征增 王 Cc: Douglas Anderson Signed-off-by: Lin Huang Signed-off-by: Sean Paul Signed-off-by: Thierry Escande Reviewed-by: Andrzej Hajda --- drivers/gpu/drm/bridge/analogix/analogix_dp_reg.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/bridge/analogix/analogix_dp_reg.c b/drivers/gpu/drm/bridge/analogix/analogix_dp_reg.c index dee1ba109b5f..7b7fd227e1f9 100644 --- a/drivers/gpu/drm/bridge/analogix/analogix_dp_reg.c +++ b/drivers/gpu/drm/bridge/analogix/analogix_dp_reg.c @@ -466,6 +466,10 @@ void analogix_dp_init_aux(struct analogix_dp_device *dp) reg = RPLY_RECEIV | AUX_ERR; writel(reg, dp->reg_base + ANALOGIX_DP_INT_STA); + analogix_dp_set_analog_power_down(dp, AUX_BLOCK, true); + usleep_range(10, 11); + analogix_dp_set_analog_power_down(dp, AUX_BLOCK, false); + analogix_dp_reset_aux(dp); /* Disable AUX transaction H/W retry */ @@ -1159,7 +1163,7 @@ ssize_t analogix_dp_transfer(struct analogix_dp_device *dp, reg, !(reg & AUX_EN), 25, 500 * 1000); if (ret) { dev_err(dp->dev, "AUX CH enable timeout!\n"); - return -ETIMEDOUT; + goto aux_error; } /* TODO: Wait for an interrupt instead of looping? */ @@ -1168,7 +1172,7 @@ ssize_t analogix_dp_transfer(struct analogix_dp_device *dp, reg, reg & RPLY_RECEIV, 10, 20 * 1000); if (ret) { dev_err(dp->dev, "AUX CH cmd reply timeout!\n"); - return -ETIMEDOUT; + goto aux_error; } /* Clear interrupt source for AUX CH command reply */ @@ -1178,7 +1182,7 @@ ssize_t analogix_dp_transfer(struct analogix_dp_device *dp, reg = readl(dp->reg_base + ANALOGIX_DP_INT_STA); if (reg & AUX_ERR) { writel(AUX_ERR, dp->reg_base + ANALOGIX_DP_INT_STA); - return -EREMOTEIO; + goto aux_error; } /* Check AUX CH error access status */ @@ -1186,7 +1190,7 @@ ssize_t analogix_dp_transfer(struct analogix_dp_device *dp, if ((reg & AUX_STATUS_MASK)) { dev_err(dp->dev, "AUX CH error happened: %d\n\n", reg & AUX_STATUS_MASK); - return -EREMOTEIO; + goto aux_error; } if (msg->request & DP_AUX_I2C_READ) { @@ -1212,4 +1216,10 @@ ssize_t analogix_dp_transfer(struct analogix_dp_device *dp, msg->reply = DP_AUX_NATIVE_REPLY_ACK; return num_transferred > 0 ? num_transferred : -EBUSY; + +aux_error: + /* if aux err happen, reset aux */ + analogix_dp_init_aux(dp); + + return -EREMOTEIO; } -- 2.14.1