From patchwork Wed Jul 10 15:42:04 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Doug Anderson X-Patchwork-Id: 2825776 Return-Path: X-Original-To: patchwork-linux-samsung-soc@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 54993C0AB2 for ; Wed, 10 Jul 2013 15:43:35 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id A062F20187 for ; Wed, 10 Jul 2013 15:43:30 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 8E04D20196 for ; Wed, 10 Jul 2013 15:43:28 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754791Ab3GJPmb (ORCPT ); Wed, 10 Jul 2013 11:42:31 -0400 Received: from mail-qc0-f202.google.com ([209.85.216.202]:59490 "EHLO mail-qc0-f202.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754509Ab3GJPmP (ORCPT ); Wed, 10 Jul 2013 11:42:15 -0400 Received: by mail-qc0-f202.google.com with SMTP id z1so626955qcx.1 for ; Wed, 10 Jul 2013 08:42:14 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=from:to:cc:subject:date:message-id:x-mailer:in-reply-to:references :x-gm-message-state; bh=qO0awSaELOjjEu7HPhXJ9GNcaZa+zuTCZa3QpNQzNHA=; b=IzH+a2tJcHBsYsL+Go49LKJpXBjos7sGNyIRje05UMBjgvhgJMRSs4JSX2BSIOFuGO WUsY2zi2we+gKQSc8KF5fm58f0A7kcnErwkGX0sCPpgw/QtgMTV9/z1dBZujFlAcRelD IvzX0I8vXHwesnWlsogq9Ri7zg339tgM06jSIbZ5lSyiy0arXhBUiBjmDCGILYGTRd3q 8CdU2//Ja9+dwV5J6+EzM8uVA/gBV3jtN0FcJE0i4jrLFXb5yMG2cVuJ6kILVtvC6Zln eFG4Uo5jHNgLJUcncFSRhaFwFHnIufxqAE/zrHvOkMYWtIGvXlYKdM1FaGCb91j5m0xx wQfQ== X-Received: by 10.236.93.113 with SMTP id k77mr17055353yhf.25.1373470934786; Wed, 10 Jul 2013 08:42:14 -0700 (PDT) Received: from corp2gmr1-1.hot.corp.google.com (corp2gmr1-1.hot.corp.google.com [172.24.189.92]) by gmr-mx.google.com with ESMTPS id n70si1954518yhj.7.2013.07.10.08.42.14 for (version=TLSv1.1 cipher=AES128-SHA bits=128/128); Wed, 10 Jul 2013 08:42:14 -0700 (PDT) Received: from tictac.mtv.corp.google.com (tictac.mtv.corp.google.com [172.22.162.34]) by corp2gmr1-1.hot.corp.google.com (Postfix) with ESMTP id 95F0A31C0F6; Wed, 10 Jul 2013 08:42:14 -0700 (PDT) Received: by tictac.mtv.corp.google.com (Postfix, from userid 121310) id 4CCD880B55; Wed, 10 Jul 2013 08:42:14 -0700 (PDT) From: Doug Anderson To: Chris Ball Cc: Olof Johansson , Jaehoon Chung , Seungwon Jeon , James Hogan , Grant Grundler , Alim Akhtar , Abhilash Kesavan , Tomasz Figa , Doug Anderson , Kukjin Kim , linux-mmc@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v3 3/5] mmc: dw_mmc: Add exynos resume_noirq callback to clear WAKEUP_INT Date: Wed, 10 Jul 2013 08:42:04 -0700 Message-Id: <1373470926-19314-4-git-send-email-dianders@chromium.org> X-Mailer: git-send-email 1.8.3 In-Reply-To: <1373470926-19314-1-git-send-email-dianders@chromium.org> References: <1373411961-23812-1-git-send-email-dianders@chromium.org> <1373470926-19314-1-git-send-email-dianders@chromium.org> X-Gm-Message-State: ALoCoQn7EoqfJqL/9yiLEE4A+NL+slhqt3ADd8WldBZwt3ibjkCc+uKlKxAg+kbOzN0NqQLoxqkcW+DSX+OULc+P6C6v/BrgSNS1nDZ9sj5Q6dLB53+FwzMeoIygdo+fmIzy8o9XCu7BTspmQFFxK342kOfF0hU0vm1lMKqBUFB0VIlazzYs4wXQgt1J3CQ8pwvWFjOUJGe03hB1IbY7yjDFDrs0s3GHmw== Sender: linux-samsung-soc-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-samsung-soc@vger.kernel.org X-Spam-Status: No, score=-7.2 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_HI, RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP If the WAKEUP_INT is asserted at wakeup and not cleared, we'll end up looping around forever. This has been seen to happen on exynos5420 silicon despite the fact that we haven't enabled any wakeup events. Signed-off-by: Doug Anderson --- Changes in v3: None Changes in v2: - Use suspend_noirq as per James Hogan. drivers/mmc/host/dw_mmc-exynos.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/drivers/mmc/host/dw_mmc-exynos.c b/drivers/mmc/host/dw_mmc-exynos.c index f013e7e..36b9620 100644 --- a/drivers/mmc/host/dw_mmc-exynos.c +++ b/drivers/mmc/host/dw_mmc-exynos.c @@ -30,6 +30,7 @@ #define SDMMC_CLKSEL_TIMING(x, y, z) (SDMMC_CLKSEL_CCLK_SAMPLE(x) | \ SDMMC_CLKSEL_CCLK_DRIVE(y) | \ SDMMC_CLKSEL_CCLK_DIVIDER(z)) +#define SDMMC_CLKSEL_WAKEUP_INT BIT(11) #define SDMMC_CMD_USE_HOLD_REG BIT(29) @@ -102,6 +103,27 @@ static int dw_mci_exynos_setup_clock(struct dw_mci *host) return 0; } +/** + * dw_mci_exynos_resume_noirq - Exynos-specific resume code + * + * We have seen cases (at least on the exynos5420) where turning off the INT + * power rail during suspend will leave the WAKEUP_INT bit in the CLKSEL + * register asserted. This bit is 1 to indicate that it fired and we can + * clear it by writing a 1 back. Clear it to prevent interrupts from going off + * constantly. + */ + +static int dw_mci_exynos_resume_noirq(struct dw_mci *host) +{ + u32 clksel; + + clksel = mci_readl(host, CLKSEL); + if (clksel & SDMMC_CLKSEL_WAKEUP_INT) + mci_writel(host, CLKSEL, clksel); + + return 0; +} + static void dw_mci_exynos_prepare_command(struct dw_mci *host, u32 *cmdr) { /* @@ -165,6 +187,7 @@ static const struct dw_mci_drv_data exynos_drv_data = { .caps = exynos_dwmmc_caps, .init = dw_mci_exynos_priv_init, .setup_clock = dw_mci_exynos_setup_clock, + .resume_noirq = dw_mci_exynos_resume_noirq, .prepare_command = dw_mci_exynos_prepare_command, .set_ios = dw_mci_exynos_set_ios, .parse_dt = dw_mci_exynos_parse_dt,