Received: by 10.223.185.116 with SMTP id b49csp3114048wrg; Mon, 5 Mar 2018 14:29:14 -0800 (PST) X-Google-Smtp-Source: AG47ELsffahBwUl+tkHYELqB3Oq+Tuu7iHdOUUCer3qrg/Nju7ekRcbPqWEAqrQZ1lY0dkm0dIm+ X-Received: by 2002:a17:902:28c3:: with SMTP id f61-v6mr14836066plb.346.1520288954135; Mon, 05 Mar 2018 14:29:14 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1520288954; cv=none; d=google.com; s=arc-20160816; b=MYYLrct5IN1zCXxhgRZKPGAaMuY9XVVwE+ZmLbQzDTvhq81Uu09QD3vMqroBQ3ZNkz afoWkd917rwqrNwo9PPlCNiWbOE0QrqQxlpG+jMJfqokFo8jbOSVgWn6z3Gkw/MFhKeY MK/JytX67qd0SdP3hOav/HewVCvLDJLaRVHlsvfZEbSZpYkVYEwOPhEt0TiWgyKxUovK vnEQ8859GAOJVOLL7fjli/YGmCH7LhG5JQbX/jfec/Je7eMb92aVASQxYu014ZslM5Fo RM66fp6LJbw5CuheBP48nncZ1RoOV8CZR8nMu9dZvzsjQcgGiPb5ez99Ak0vTNvgYgTG Difg== 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:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :arc-authentication-results; bh=riKZunTMgWoOHc55WGgIIxce31FtEJbEPiMa0Cdvtl0=; b=S1fJwscR+N7W68llc4xGqp1+Jga2X1ND6/LFXibRpfI/DlUIuHN83q83GDk+pKhZ64 8ssHGK+ywqLHiyJiT+8T5eprS0fDjP0VGYrnW/wlz3LrTU67v5xnYlJh5lfEPRXn2QqL ld/axxom5nml2Hibn7CJ2vVT7INQSOI7p2v/gmd4ByAHh++St3VOJpPUfjyknDVZXO7Z BcVDlqHS27xdbpo8oamByuK4PNpBaTntvGaGT6IzgbIBOhKCwpelBLCQQteuQWda0EbP +1HT10AlKO2+DWv9vheZ6LHRu3XB3bYtbex+pagrG4xidyt5JmpKa6ZKt1dDlvHuwdI1 GA0g== 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 p125si8890447pga.97.2018.03.05.14.29.00; Mon, 05 Mar 2018 14:29:14 -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 S1753607AbeCEW1b (ORCPT + 99 others); Mon, 5 Mar 2018 17:27:31 -0500 Received: from bhuna.collabora.co.uk ([46.235.227.227]:37560 "EHLO bhuna.collabora.co.uk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753024AbeCEWY1 (ORCPT ); Mon, 5 Mar 2018 17:24:27 -0500 Received: from [127.0.0.1] (localhost [127.0.0.1]) (Authenticated sender: eballetbo) with ESMTPSA id 30B76278407 From: Enric Balletbo i Serra To: architt@codeaurora.org, inki.dae@samsung.com, thierry.reding@gmail.com, hjc@rock-chips.com, seanpaul@chromium.org, airlied@linux.ie, tfiga@chromium.org, heiko@sntech.de Cc: hshi@chromium.org, wzz@rock-chips.com, hl@rock-chips.com, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, dianders@chromium.org, linux-rockchip@lists.infradead.org, orjan.eide@arm.com, m.szyprowski@samsung.com, Enric Balletbo i Serra Subject: [PATCH v4 20/38] drm/bridge: analogix_dp: Reset aux channel if an error occurred Date: Mon, 5 Mar 2018 23:23:12 +0100 Message-Id: <20180305222324.5872-21-enric.balletbo@collabora.com> X-Mailer: git-send-email 2.16.1 In-Reply-To: <20180305222324.5872-1-enric.balletbo@collabora.com> References: <20180305222324.5872-1-enric.balletbo@collabora.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 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 Signed-off-by: Enric Balletbo i Serra --- 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.16.1