From patchwork Fri Mar 10 04:32:41 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Sean Paul X-Patchwork-Id: 9614703 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id BB7BE60415 for ; Fri, 10 Mar 2017 04:41:39 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id AE7B92864A for ; Fri, 10 Mar 2017 04:41:39 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id A3368286EF; Fri, 10 Mar 2017 04:41:39 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-1.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID autolearn=ham version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [65.50.211.133]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 522082864A for ; Fri, 10 Mar 2017 04:41:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=8UQSA4G+6V3njUtyTj4BaSCmD9e+mg1GLWdcRMsAcjU=; b=Wfl4UzNr9bS5Mx u3ebYPUEEhVC0i2VZy63beNdREGJCc03sGNIqhtBp3BeaL1pBWSEd0J0etL2WekAAT6SQ2i83UbdI ZMjrEzHNWAV7ZmjMbG6ygA3gM5RGlToXSL+xiORp6Etg8alK6lTvmsRCNZcdleL54OoLVi8oIA1O7 qbnxVyZb3aPsJAggbqhglma+XYisV+UB5Wc20YJuq5djbNDF+0ykA0/vImrm/PkqM2Hug0ljnRqhw tQHRfLfnu/5OogCmTb2wMfcu6XTyqoaZ77g6bNP9PGD0juYrhMrhdA3jdWFtPffijksNW//4tdlJC JAwsSQvq5HXm3puluEtQ==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.87 #1 (Red Hat Linux)) id 1cmCN0-0004sa-G2; Fri, 10 Mar 2017 04:41:38 +0000 Received: from mail-qk0-x22d.google.com ([2607:f8b0:400d:c09::22d]) by bombadil.infradead.org with esmtps (Exim 4.87 #1 (Red Hat Linux)) id 1cmCLY-0002XQ-S5 for linux-rockchip@lists.infradead.org; Fri, 10 Mar 2017 04:40:11 +0000 Received: by mail-qk0-x22d.google.com with SMTP id y76so152230904qkb.0 for ; Thu, 09 Mar 2017 20:39:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=hwIlWGnbAlCcxen9GQIOA0WllzuJ+HcCk76wNGB/CRY=; b=UK1iQJ32iAgfMOHfSjh/YOC1ZATlxiodK8ofG+1pfBMC/QCaJilWZIP8MZWGONIbWY +LMVXclobZfRMv7veDh5oYEdYmrOO06xCg6lWr79fNPfOpUe8gAL44PT3vFtepRHeHuC Zcv27rQFraWFtArZZ4E3YYndZsNHOWnfWeS/0= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=hwIlWGnbAlCcxen9GQIOA0WllzuJ+HcCk76wNGB/CRY=; b=WnwAclbkaXiEPrEB3vRP45VHk/TPwjpnVMMm79HwrXOc9VN+iAQdYE6EzFk/0VQH+q QHugNonWPMvxtXiIu/aYudq5W6J740AUawuo5Mcpo7qGmRcqKMwgjQvTNeD2CGItQVs2 0ZY3I+n5jeh35J26mAcC0OHLWo5kVak2hJOX5C5HjiMyHBh0W6DrwdpeSXPj0Kr7qXLO nnqKBkkjP+8f0QNFsyg3MNYMFoC5jQndMGpP6c6RrT8OO9L3yaLD/72t9a5YybaoV8HZ neN88ZuDsb3EgYdNqCD66G5tZCV72y7AN99lvCQRGHcGGVTRdMtysZ97ufzC+G7IghGC NOKQ== X-Gm-Message-State: AFeK/H09wY9n4AWFT6GhxasCV1zCsT3z+gr4lN3IZ8M1MDK6cq0uF+fb4v6U9fJg8LQgDQNC X-Received: by 10.55.192.145 with SMTP id v17mr18427240qkv.3.1489120787977; Thu, 09 Mar 2017 20:39:47 -0800 (PST) Received: from boxwood.roam.corp.google.com (cpe-75-189-128-87.nc.res.rr.com. [75.189.128.87]) by smtp.gmail.com with ESMTPSA id n19sm5697731qtn.35.2017.03.09.20.39.46 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Thu, 09 Mar 2017 20:39:47 -0800 (PST) From: Sean Paul To: linux-rockchip@lists.infradead.org, dri-devel@lists.freedesktop.org Subject: [PATCH 26/41] drm/bridge: analogix_dp: Reset aux channel if an error occurred Date: Thu, 9 Mar 2017 23:32:41 -0500 Message-Id: <20170310043305.17216-27-seanpaul@chromium.org> X-Mailer: git-send-email 2.12.0.246.ga2ecc84866-goog In-Reply-To: <20170310043305.17216-1-seanpaul@chromium.org> References: <20170310043305.17216-1-seanpaul@chromium.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20170309_204008_997878_49957CAD X-CRM114-Status: GOOD ( 10.75 ) X-BeenThere: linux-rockchip@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: Upstream kernel work for Rockchip platforms List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Archit Taneja , =?UTF-8?q?=E5=BE=81=E5=A2=9E=20=E7=8E=8B?= , Lin Huang , Tomeu Vizoso , David Airlie , Douglas Anderson , Sean Paul , Yakir Yang , Heiko Stuebner Sender: "Linux-rockchip" Errors-To: linux-rockchip-bounces+patchwork-linux-rockchip=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP 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 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 377bee4e20fd..1cb57e528ec8 100644 --- a/drivers/gpu/drm/bridge/analogix/analogix_dp_reg.c +++ b/drivers/gpu/drm/bridge/analogix/analogix_dp_reg.c @@ -465,6 +465,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 */ @@ -1158,7 +1162,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? */ @@ -1167,7 +1171,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 */ @@ -1177,7 +1181,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 */ @@ -1185,7 +1189,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) { @@ -1211,4 +1215,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; }