From patchwork Fri May 23 12:51:44 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Srinivas Kandagatla X-Patchwork-Id: 4232571 Return-Path: X-Original-To: patchwork-linux-arm-msm@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork1.web.kernel.org (Postfix) with ESMTP id C31769F32B for ; Fri, 23 May 2014 12:56:31 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 016C2201DC for ; Fri, 23 May 2014 12:56:31 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 06A1F203A9 for ; Fri, 23 May 2014 12:56:30 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752698AbaEWMvv (ORCPT ); Fri, 23 May 2014 08:51:51 -0400 Received: from mail-wi0-f179.google.com ([209.85.212.179]:54660 "EHLO mail-wi0-f179.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752696AbaEWMvt (ORCPT ); Fri, 23 May 2014 08:51:49 -0400 Received: by mail-wi0-f179.google.com with SMTP id bs8so810340wib.0 for ; Fri, 23 May 2014 05:51:48 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=COuwT4vz/twDNk/Ua/xKxQfnRu+9tKwSaL3TycmNSUg=; b=QHZWOUyNhbiFYSoeBmhD+rOvu3rglDJFqnYLhMm7U2mg7elsXgQTG3X3n/rrM0ngUS WvilTjSsVQ7Mz0J/qwvzYLIOA2stW1p0zBcqvkHnAdjpHMrGpR6qHTPLe9nE2Xq9fjWF sC47vmn8fL7sPcFVH5wvRvubfTSJNvpMpJpo2yCxBffYqkNcOJSuc/0OLK5zb2w0wMNq Xd3iMblpqU4jlguY1u3b2miu4dJSKwu4pWnWZen2TMdFhIF+pmh7YjQ674Z9vHt9j8GC q+vRUd8vvW5v/OXeH7S2NMX0qX5xErPXGgA7u4DPESK0oEN/zCEL2Ryipq7YtQ+vQSwl Jfiw== X-Gm-Message-State: ALoCoQluHbZ+yUDBVICAvv7zbWeHoYNuJY1huKZW/xX/AuXtDvB1eDAxvNRG0ytlozkGvC6duDg/ X-Received: by 10.180.91.162 with SMTP id cf2mr3010590wib.57.1400849508023; Fri, 23 May 2014 05:51:48 -0700 (PDT) Received: from srini-ThinkPad-X1-Carbon-2nd.dlink.com (host-78-149-4-211.as13285.net. [78.149.4.211]) by mx.google.com with ESMTPSA id ed6sm2791420wib.20.2014.05.23.05.51.46 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 23 May 2014 05:51:47 -0700 (PDT) From: srinivas.kandagatla@linaro.org To: Russell King , Ulf Hansson , linux-mmc@vger.kernel.org Cc: Chris Ball , linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, linus.walleij@linaro.org, Srinivas Kandagatla Subject: [PATCH v3 06/13] mmc: mmci: Qcomm: Add 3 clock cycle delay after register write Date: Fri, 23 May 2014 13:51:44 +0100 Message-Id: <1400849504-7302-1-git-send-email-srinivas.kandagatla@linaro.org> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1400849362-7007-1-git-send-email-srinivas.kandagatla@linaro.org> References: <1400849362-7007-1-git-send-email-srinivas.kandagatla@linaro.org> Sender: linux-arm-msm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-arm-msm@vger.kernel.org X-Spam-Status: No, score=-7.5 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 From: Srinivas Kandagatla Most of the Qcomm SD card controller registers must be updated to the MCLK domain so subsequent writes to registers will be ignored until 3 clock cycles have passed. This patch adds a 3 clock cycle delay required after writing to controller registers on Qualcomm SOCs. Without this delay all the register writes are not successful, resulting in not detecting cards. The write clock delay is activated by setting up mclk_delayed_writes variable in variant data. Signed-off-by: Srinivas Kandagatla Reviewed-by: Linus Walleij --- drivers/mmc/host/mmci.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/drivers/mmc/host/mmci.c b/drivers/mmc/host/mmci.c index 881bb24..1385554 100644 --- a/drivers/mmc/host/mmci.c +++ b/drivers/mmc/host/mmci.c @@ -67,6 +67,8 @@ static unsigned int fmax = 515633; * @pwrreg_clkgate: MMCIPOWER register must be used to gate the clock * @busy_detect: true if busy detection on dat0 is supported * @pwrreg_nopower: bits in MMCIPOWER don't controls ext. power supply + * @mclk_delayed_writes: enable delayed writes to ensure, subsequent updates + * are not ignored. */ struct variant_data { unsigned int clkreg; @@ -83,6 +85,7 @@ struct variant_data { bool pwrreg_clkgate; bool busy_detect; bool pwrreg_nopower; + bool mclk_delayed_writes; }; static struct variant_data variant_arm = { @@ -171,6 +174,12 @@ static struct variant_data variant_qcom = { .datalength_bits = 24, .blksz_datactrl4 = true, .pwrreg_powerup = MCI_PWR_UP, + /* + * On QCom SD card controller, registers must be updated to the + * MCLK domain so subsequent writes to this register will be ignored + * for 3 clk cycles. + */ + .mclk_delayed_writes = true, }; static inline u32 mmci_readl(struct mmci_host *host, u32 off) @@ -181,6 +190,9 @@ static inline u32 mmci_readl(struct mmci_host *host, u32 off) static inline void mmci_writel(struct mmci_host *host, u32 data, u32 off) { writel(data, host->base + off); + + if (host->variant->mclk_delayed_writes) + udelay(DIV_ROUND_UP((3 * USEC_PER_SEC), host->mclk)); } static int mmci_card_busy(struct mmc_host *mmc)