From patchwork Sun Nov 11 13:45:24 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Wahren X-Patchwork-Id: 10677637 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id BB498139B for ; Sun, 11 Nov 2018 13:46:31 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id A9B2A2A7FE for ; Sun, 11 Nov 2018 13:46:31 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 9E6302A805; Sun, 11 Nov 2018 13:46:31 +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=-7.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 410D52A809 for ; Sun, 11 Nov 2018 13:46:31 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728118AbeKKXfH (ORCPT ); Sun, 11 Nov 2018 18:35:07 -0500 Received: from mout.kundenserver.de ([212.227.126.135]:59679 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728149AbeKKXfH (ORCPT ); Sun, 11 Nov 2018 18:35:07 -0500 Received: from localhost.localdomain ([37.4.249.153]) by mrelayeu.kundenserver.de (mreue012 [212.227.15.167]) with ESMTPSA (Nemesis) id 1M7NaW-1gP8NO1Jmu-007mMT; Sun, 11 Nov 2018 14:46:06 +0100 From: Stefan Wahren To: Eric Anholt , Florian Fainelli , Ulf Hansson Cc: Phil Elwell , Michal Suchanek , linux-rpi-kernel@lists.infradead.org, linux-mmc@vger.kernel.org, linux-arm-kernel@lists.infradead.org Subject: [PATCH 1/7] mmc: bcm2835: reset host on timeout Date: Sun, 11 Nov 2018 14:45:24 +0100 Message-Id: <1541943930-23873-2-git-send-email-stefan.wahren@i2se.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1541943930-23873-1-git-send-email-stefan.wahren@i2se.com> References: <1541943930-23873-1-git-send-email-stefan.wahren@i2se.com> X-Provags-ID: V03:K1:lgrQbZyzXYrUsBpBHyKp6PXGL3aEuAUvGjwIdktVBODnetJqoOG tQ/5sBr/OzWLSD/lQpvRyR4UAE/phup+RYXqtXxq+nKugtiecCb5cRXZu6OwYg9Zna2RnUi YkfRt7kYsFQ4b+7T3XQI/SCSCpUBOYaZO7Y6IgkGZEZOuTGO1cxJvK7mpcXk7PL/icA5Ar2 vofBkgPZ/xxNhrpJ9RGmA== X-UI-Out-Filterresults: notjunk:1;V01:K0:Tj9bhOAtcSc=:Lf+y3NUKECYBYEekZvfH2O h/z8mbcM+3tSxYv1Y86s+i4eEWOMCBxrzuyAG97g3MWGeVDr90Ct4tonLrK4m5vZ57kIEJnwS FV6LsP2qJ/FXXmHkyBg+AW6eH/ey6vOe0m3Szzsu2UYvY5tpXV/Wb//Wu6X+gGjiIox8MsEF2 fcPaYjiYXaGK2OaVZJJbT8xxzjjhoSB/1pyzg/1bo9EnAucj9MXZawjLBg/3ykKpo41dHE17R r71ByhV1+S6f22NBXtKvhWbzUUziygsAZlvFPRFVqM9MNyeIHUwZFiAmbKfYuugepKoJ058Jc VKqqCwcQfG+lQCFIg0llKvy9lxvXi/q+LIW0ml4HqjRgULmJIEKmo1s2oHkyt+pV1rh5xsVS1 R8n8tsI1plhspcf1x+N3wSWcam0/jVkOwE55aoF5kTpTO8mv6Iq2r1VpHI7DI54Q0QaXVehUy uJKNy7jUUqq21IGdNtklkD5oZEUDLJn/FH0yilP4dLUF3SL3/pVnyxoG8i9ozUxhazrEhR1tP WuOuFRcyTOnAEO4FbPk/HC7xYt64wOgHo8p/XuXCl6Ta3bOSWIohZoQ7vY7GuX9iGkcRUKDz3 kLiMR/ztTD50Ao5iIMSnb7grpDXLGjHVnY0FP6wGj9kQiCjgikAAfAXLBXNFO0eDyK0rQvTSQ 1tplXktbCAFY85mugC9zSOUD9I4mzM7CU6ShsWXO6M+vU8ONPO8GWod9LbBoMkTeNaLcXU5KP Ots+3yEB4VUeWnIvbyn7CB6a43+8yQTRzhAqnAGJFIvsKyYk3xJ5Wy6hIa9cdeYCcP5Xb3IH8 0Lg5PsSYHKcP3Dlkm3GU2OO+WsIpw== Sender: linux-mmc-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-mmc@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Michal Suchanek The bcm2835 mmc host tends to lock up for unknown reason so reset it on timeout. The upper mmc block layer tries retransimitting with single blocks which tends to work out after a long wait. This is better than giving up and leaving the machine broken for no obvious reason. Fixes: 660fc733bd74 ("mmc: bcm2835: Add new driver for the sdhost controller.") Signed-off-by: Michal Suchanek --- drivers/mmc/host/bcm2835.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/mmc/host/bcm2835.c b/drivers/mmc/host/bcm2835.c index 768972a..f1712df 100644 --- a/drivers/mmc/host/bcm2835.c +++ b/drivers/mmc/host/bcm2835.c @@ -286,6 +286,7 @@ static void bcm2835_reset(struct mmc_host *mmc) if (host->dma_chan) dmaengine_terminate_sync(host->dma_chan); + host->dma_chan = NULL; bcm2835_reset_internal(host); } @@ -837,6 +838,8 @@ static void bcm2835_timeout(struct work_struct *work) dev_err(dev, "timeout waiting for hardware interrupt.\n"); bcm2835_dumpregs(host); + bcm2835_reset(host->mmc); + if (host->data) { host->data->error = -ETIMEDOUT; bcm2835_finish_data(host);