From patchwork Thu Oct 12 20:11:15 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Doug Anderson X-Patchwork-Id: 10002777 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 79D7360216 for ; Thu, 12 Oct 2017 20:13:23 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 6D37528E98 for ; Thu, 12 Oct 2017 20:13:23 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 6181F28EA0; Thu, 12 Oct 2017 20:13:23 +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=-5.1 required=2.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_HI,T_DKIM_INVALID,URIBL_BLACK autolearn=unavailable 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 18A6B28E98 for ; Thu, 12 Oct 2017 20:13:23 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755627AbdJLULn (ORCPT ); Thu, 12 Oct 2017 16:11:43 -0400 Received: from mail-pf0-f176.google.com ([209.85.192.176]:46391 "EHLO mail-pf0-f176.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755537AbdJLULl (ORCPT ); Thu, 12 Oct 2017 16:11:41 -0400 Received: by mail-pf0-f176.google.com with SMTP id p87so6450954pfj.3 for ; Thu, 12 Oct 2017 13:11:41 -0700 (PDT) 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; bh=q3PwirLEh7wNr9Na9wkG9qQNUz76d5FHfTOhTEY9VjU=; b=LU7anlOp6C2mebudlqos+q/psN0S9hKij4QihU5B9YXuFfd+TUlrGKCNdvY5VH+TTi Yjr0RrnxZ6RbclgtGw00Ph9ZCdGBS983hYnEKjv6rrps8oITTv18ceSGDA5syA+gyF1f Wriu558kIRtT6Wn3akEJDJDUXrg0UhCUxItrQ= 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; bh=q3PwirLEh7wNr9Na9wkG9qQNUz76d5FHfTOhTEY9VjU=; b=aJVc2C8uiSWZZQQQln6uDOCvTTENj3bafU0J2vXLJHY3ueZUVcyy9Yju0pKbAHsyFF 5h0+UgnQJUUuJ/lQy/N0xbO9wo0D8ugQfcFWDN8gcrDs+7QGEb7NYYivMmzHbYm1ISrd trkjklQ79u3VvkZzxnIgATf4RRc55eBvHxAtaAWqzOZ1DtJYDNBgn9gRcIEpJbq9hxF6 zRHUC3i9TzHgpdMFaXP/XHQZbuVwS3KykMu/8PvVxmoaYluQByZjhx6Zc9kNxJ3neghg 1La8Lu1/uT9+tAkeTAjtCAieDUU+8NUX2LzO3qUq0lwm2Iif/4wFvolVbo/Gm79J74CW pGRg== X-Gm-Message-State: AMCzsaX8qcXoaXK1DwZ723QhAHt9qUbAU2IgtBXH5XwhVtlloBirdZHC InApP3bfBPnV77QZ6ExgvCsCCQ== X-Google-Smtp-Source: AOwi7QDoqLfYuf0uLXTcB5b9DrtvXYUel2BuExuHqPlwh0RiKn7ewZR07y0mjKknr0nLDLY+8YQQkQ== X-Received: by 10.98.67.217 with SMTP id l86mr3135524pfi.92.1507839101216; Thu, 12 Oct 2017 13:11:41 -0700 (PDT) Received: from tictac.mtv.corp.google.com ([172.22.112.154]) by smtp.gmail.com with ESMTPSA id l3sm29749635pgn.36.2017.10.12.13.11.39 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Thu, 12 Oct 2017 13:11:40 -0700 (PDT) From: Douglas Anderson To: jh80.chung@samsung.com, ulf.hansson@linaro.org, shawn.lin@rock-chips.com Cc: xzy.xu@rock-chips.com, amstan@chromium.org, linux-rockchip@lists.infradead.org, briannorris@chromium.org, linux-samsung-soc@vger.kernel.org, kernel@esmil.dk, Douglas Anderson , linux-mmc@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 2/5] mmc: dw_mmc: Fix the CTO timeout calculation Date: Thu, 12 Oct 2017 13:11:15 -0700 Message-Id: <20171012201118.23570-3-dianders@chromium.org> X-Mailer: git-send-email 2.15.0.rc0.271.g36b669edcc-goog In-Reply-To: <20171012201118.23570-1-dianders@chromium.org> References: <20171012201118.23570-1-dianders@chromium.org> Sender: linux-samsung-soc-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-samsung-soc@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP In the commit 03de19212ea3 ("mmc: dw_mmc: introduce timer for broken command transfer over scheme") we tried to calculate the expected hardware command timeout value. Unfortunately that calculation isn't quite correct in all cases. It used "bus_hz" but, as far as I can tell, it's supposed to use the card clock. Let's account for the div value, which is documented as 2x the value stored in the register, or 1 if the register is 0. NOTE: It's not expected that this will actually fix anything important since the 10 ms margin added by the function will pretty much dwarf any calculations. The card clock should be 100 kHz at minimum and: 1000 ms/s * (255 * 2) / 100000 Hz. Gives us 5.1 ms. ...so really the point of this patch is just to make the code more "correct" in case anyone ever tries to remove the 10 ms buffer. Fixes: 03de19212ea3 ("mmc: dw_mmc: introduce timer for broken command transfer over scheme") Tested-by: Emil Renner Berthing Reviewed-by: Shawn Lin Signed-off-by: Douglas Anderson --- Changes in v2: None drivers/mmc/host/dw_mmc.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c index f5b2bb4b4d98..16516c528a88 100644 --- a/drivers/mmc/host/dw_mmc.c +++ b/drivers/mmc/host/dw_mmc.c @@ -401,10 +401,14 @@ static u32 dw_mci_prep_stop_abort(struct dw_mci *host, struct mmc_command *cmd) static inline void dw_mci_set_cto(struct dw_mci *host) { unsigned int cto_clks; + unsigned int cto_div; unsigned int cto_ms; cto_clks = mci_readl(host, TMOUT) & 0xff; - cto_ms = DIV_ROUND_UP(cto_clks, host->bus_hz / 1000); + cto_div = (mci_readl(host, CLKDIV) & 0xff) * 2; + if (cto_div == 0) + cto_div = 1; + cto_ms = DIV_ROUND_UP(MSEC_PER_SEC * cto_clks * cto_div, host->bus_hz); /* add a bit spare time */ cto_ms += 10;