From patchwork Fri Aug 24 09:20:20 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chunyan Zhang X-Patchwork-Id: 144995 Delivered-To: patch@linaro.org Received: by 2002:a2e:1648:0:0:0:0:0 with SMTP id 8-v6csp1064832ljw; Fri, 24 Aug 2018 02:20:52 -0700 (PDT) X-Google-Smtp-Source: ANB0VdZZ+MgdU8Pxgb4uaHkcEivdZs2MSa1wpKbKL6AIaIYrPcw4FwcmJ84mGxKFEH2lzUbH/87p X-Received: by 2002:a63:eb53:: with SMTP id b19-v6mr865047pgk.371.1535102451885; Fri, 24 Aug 2018 02:20:51 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1535102451; cv=none; d=google.com; s=arc-20160816; b=owxOcfLJkNmvy96VCB7P1LM5WXjB+6TIlaoWxL885gT6ixFsc4+gt8aXXkk/zNElus NCwohUK3eJQUoSVQ91D+ECdGsiixh/C/BYOM7BAucX7eMO3RE+tLdkS9GGBxU3Hc9y7S 323oz5uoo+5AVTzkKQy8Y8zotrrQJIKpd1DEevQiziaPyGHXV1+92Yf7BQRBm/JnSajA rTgiXZk0xUmkuT30D7+QAV1yrJHE35W7Ej4seQsVxpsBlFKkFNMfsM7moW9zou8eS+oY kYOwR4lFD3X0RP8I+tulZPXrBzCmu91r2/P0BkDiWPncy0ukI5Hk+eCZstbIwkLQ4ktU 66ng== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature:arc-authentication-results; bh=UBJImci8KZxRNTfmSw+GGOxU7hKy71vSboxL1xbPDzw=; b=LhPbo9DBYQWzUbdm7SgJy0iHKkuv72+TkikpObE8wRsFpkEaU8Zz+3fFp2GUTcl4ey 9vLGu+aBjyN55oNbbk0Zx9N+KGWDUjPNl6uiVyQhe4Xx0/xnAbW1opAndFW5bM4IkZ93 TTzf8WUXVz/f4p8NudgKdnHioE0YmBfXydhSQowy0+59/zXkOnj6iIV8KhArclKG5Glu H5AfakRqb7Aw5Zt45j3ffvQUIXcdkq8Kt6SXrjB1hmM+BZ3ravml3CVOLhGo+ChrxzpJ 0XZXsD7u6U4FmB8FELrJgp2PiXXXAqJkkuNUK3Jc5CagK2tUDU/dTbzZETrRaUXoVmhV QMmA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=ABaxn2j6; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id x7-v6si5669010pgi.465.2018.08.24.02.20.51; Fri, 24 Aug 2018 02:20:51 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=ABaxn2j6; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727615AbeHXMyf (ORCPT + 32 others); Fri, 24 Aug 2018 08:54:35 -0400 Received: from mail-pl1-f195.google.com ([209.85.214.195]:36656 "EHLO mail-pl1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726842AbeHXMye (ORCPT ); Fri, 24 Aug 2018 08:54:34 -0400 Received: by mail-pl1-f195.google.com with SMTP id e11-v6so852464plb.3 for ; Fri, 24 Aug 2018 02:20:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=UBJImci8KZxRNTfmSw+GGOxU7hKy71vSboxL1xbPDzw=; b=ABaxn2j6d871/4FwgGuV1TemB+Sy+ByjCZoLtNYaOCY4r65N/0yqbPdRx4k7WA2VTx DiBxKmnrRFZvVdhWUJiJsDfnU8/6V5jp9EjHBuaUGH5iw6nKVxyLy9uI6Amvq6uu4t/J Ui9en7q0CdLA7oA8NkqgV8s8dNaFj2UWTF5uU= 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=UBJImci8KZxRNTfmSw+GGOxU7hKy71vSboxL1xbPDzw=; b=XUOHsltBUvT1OLRsQGK81xUiSuG8cj5JWA316Kg71G7SrJVfDy5w6PnHyPBCIqWeNf WjsFL8LWowxK3r2weTAm4fIYavs6LRAIf4cDBNmbV4cmJR53WFfuVQ++nwni4MSLmqbz CMgyXU1LFNPVvzJgA2b1i/y6ags99O61xeTi1QsQoTlZxRSwoJHuYloF8djdbkMHO74s EO3PirJ5uBH6tIum6LPlupfQ2TY7eJoMidCt1/ucimDQnD0EsiWqFWStVCLOFw65xFd2 IZG/T6phchRPKTVvA97n+B5FbwaelJL3TXjoVQvKur1cbXgY+v6R2ZiX87aa/LM0dx5v LUwQ== X-Gm-Message-State: APzg51BVglWxlha+VGQl9Qg2y6PRq2DiCCV9qK92i1ua2pDHnjpb7E2c PmRiNO6hVRIVtmKBh9vEIHQK0g== X-Received: by 2002:a17:902:7683:: with SMTP id m3-v6mr886597pll.255.1535102448934; Fri, 24 Aug 2018 02:20:48 -0700 (PDT) Received: from ubt.spreadtrum.com ([117.18.48.102]) by smtp.gmail.com with ESMTPSA id g6-v6sm9520314pfb.11.2018.08.24.02.20.44 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 24 Aug 2018 02:20:48 -0700 (PDT) From: Chunyan Zhang To: Ulf Hansson , Adrian Hunter Cc: linux-mmc@vger.kernel.org, linux-kernel@vger.kernel.org, Orson Zhai , Baolin Wang , Billows Wu , Jason Wu , Chunyan Zhang , Chunyan Zhang Subject: [PATCH V6 1/9] mmc: sdhci: Add version V4 definition Date: Fri, 24 Aug 2018 17:20:20 +0800 Message-Id: <1535102428-20332-2-git-send-email-zhang.chunyan@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1535102428-20332-1-git-send-email-zhang.chunyan@linaro.org> References: <1535102428-20332-1-git-send-email-zhang.chunyan@linaro.org> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Added definitions for v400, v410, v420. Signed-off-by: Chunyan Zhang --- drivers/mmc/host/sdhci.c | 2 +- drivers/mmc/host/sdhci.h | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) -- 2.7.4 diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c index 8793340..f70135c 100644 --- a/drivers/mmc/host/sdhci.c +++ b/drivers/mmc/host/sdhci.c @@ -3501,7 +3501,7 @@ int sdhci_setup_host(struct sdhci_host *host) override_timeout_clk = host->timeout_clk; - if (host->version > SDHCI_SPEC_300) { + if (host->version > SDHCI_SPEC_420) { pr_err("%s: Unknown controller version (%d). You may experience problems.\n", mmc_hostname(mmc), host->version); } diff --git a/drivers/mmc/host/sdhci.h b/drivers/mmc/host/sdhci.h index 5db81de..7ae95f8 100644 --- a/drivers/mmc/host/sdhci.h +++ b/drivers/mmc/host/sdhci.h @@ -270,6 +270,9 @@ #define SDHCI_SPEC_100 0 #define SDHCI_SPEC_200 1 #define SDHCI_SPEC_300 2 +#define SDHCI_SPEC_400 3 +#define SDHCI_SPEC_410 4 +#define SDHCI_SPEC_420 5 /* * End of controller registers. From patchwork Fri Aug 24 09:20:24 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chunyan Zhang X-Patchwork-Id: 144999 Delivered-To: patch@linaro.org Received: by 2002:a2e:1648:0:0:0:0:0 with SMTP id 8-v6csp1065454ljw; Fri, 24 Aug 2018 02:21:41 -0700 (PDT) X-Google-Smtp-Source: ANB0VdYSDmNMpm1/DXx2yvu4DrkT1VAAfIWanVBsodn95JE/ab0IT2X/tjWNX+a0+cSoXJyfFof9 X-Received: by 2002:a63:c046:: with SMTP id z6-v6mr908677pgi.114.1535102501279; Fri, 24 Aug 2018 02:21:41 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1535102501; cv=none; d=google.com; s=arc-20160816; b=U36lpDqIHIb4mZWW9pXGT3EghxR2LgLG6aH1njEfUinIn7UrHRJp3iWLHNKN9S4fN0 gu3DKLHN8LJZEx8jawGRokzOzwiLaWWzKO3TqSwwTtZW8lr8PubyA7jRjOyWB3GPtKAS 0YZ71M83X78y1Kb1Js/Dpfhfr/tE10n/WWjHD2zygR85ueaGVvXCTdijwQY3U6IWJDuQ BD/Jq0lmCm9YzHmu2+f3C3lBXw1utJZTHGcYin2ppr+2V7BPjM9n3Ua6VZrQtXYfEPLo YnRiXfo4v8jDAd0XkWhu1hJP2gHRv6nkAuNyBWx2HBXmQdkEKJ/4dGNxv6+IkqUbtMRH sFLw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature:arc-authentication-results; bh=j9zEFOBvZaYd5PykWUcd1ipE5wmyuWnJ3HC4tyHGzkY=; b=KNt+QVX/ONmqkkqgSr8jYem3R8FzWzicsmZ5n4x4lATK75pLVrtVSvnw7CGKLAzF4W J92gRUcrC8Y8VWWZPdTL/+KGj5blSyb5WJOdGK7xe0/i1xfq1rLmB2C+lv1X7eHxVuH0 fpiZVsPt+la37/gxg7Ez+2BPYKDEB5eIcfXFMcTV3+N1WzECmhSdbAEulQF+3PkPoonO 7IpzTyBI4CVfKi2vAEcMDtcQvSWKauzVgg0q0bDd0ScH0WQ6h/hvUC4DFMbVaZqX87Es V82AhNWYDLvmPmYfMiD/kjktipt2bKQcl9TxEXD6JwPQfyfXAMW4QypKcLcEgeR32ben cgHA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b="HW/zP1Vd"; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id cf10-v6si6547503plb.9.2018.08.24.02.21.41; Fri, 24 Aug 2018 02:21:41 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b="HW/zP1Vd"; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727823AbeHXMzZ (ORCPT + 32 others); Fri, 24 Aug 2018 08:55:25 -0400 Received: from mail-pf1-f195.google.com ([209.85.210.195]:45313 "EHLO mail-pf1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727019AbeHXMzY (ORCPT ); Fri, 24 Aug 2018 08:55:24 -0400 Received: by mail-pf1-f195.google.com with SMTP id i26-v6so4256766pfo.12 for ; Fri, 24 Aug 2018 02:21:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=j9zEFOBvZaYd5PykWUcd1ipE5wmyuWnJ3HC4tyHGzkY=; b=HW/zP1VdMj6MBoVw9xKNI+nYNP6zvNBrt/Vw3LvtzXSqatWycimbp72OPeXOFS4OQf B7iupeF9wdC8ma3S1haLL8zfWMEnZi+98UArQ9dCEhykz01n2tZqWn+tAPNNVH2HFgo5 TrvbK8ZPKliceAL/OkIIe45679yCiHpweGAIU= 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=j9zEFOBvZaYd5PykWUcd1ipE5wmyuWnJ3HC4tyHGzkY=; b=pf90GkovYUnO4+YtwqXey/6CQw6ErccWhpeP5r7mwWMZvXLiXnlelw05u4BtzlUJ6A GpmJL99bZiHYIPLmwR5RlHFJDZ5Njhb9WknsK2OChL2VHnycDYi1CS7eWSL6QAfmJF9I VoKDHLqBQ6MtJUbXwZ8cbrq1bjOOhIKarZZ+9B7v1+WHEN2p6Xn/4RCi1xJYQAWZdWl2 1c3kOPIBXEAwHO6K+G5OJC7SSqNoUhNrJkV6AknfRCPSVT43f6Pgx+QPVVolbyjqdBjo xg7OTbVqPZW8rb39qD/Zc1KlyoOQX/JbAX/DKqe9dir01uh/UKS6NpXnq+dr0GDlcx1a vQ0A== X-Gm-Message-State: APzg51AvXr/oc0cjkzQPQr+zJqUMmxDkz0hvd44oVnAQ4MTmWrZmjAdu TG00a4TCJTCSGuaZiHt6oIoifw== X-Received: by 2002:a65:6086:: with SMTP id t6-v6mr900441pgu.424.1535102498729; Fri, 24 Aug 2018 02:21:38 -0700 (PDT) Received: from ubt.spreadtrum.com ([117.18.48.102]) by smtp.gmail.com with ESMTPSA id g6-v6sm9520314pfb.11.2018.08.24.02.21.34 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 24 Aug 2018 02:21:37 -0700 (PDT) From: Chunyan Zhang To: Ulf Hansson , Adrian Hunter Cc: linux-mmc@vger.kernel.org, linux-kernel@vger.kernel.org, Orson Zhai , Baolin Wang , Billows Wu , Jason Wu , Chunyan Zhang , Chunyan Zhang Subject: [PATCH V6 5/9] mmc: sdhci: Add 32-bit block count support for v4 mode Date: Fri, 24 Aug 2018 17:20:24 +0800 Message-Id: <1535102428-20332-6-git-send-email-zhang.chunyan@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1535102428-20332-1-git-send-email-zhang.chunyan@linaro.org> References: <1535102428-20332-1-git-send-email-zhang.chunyan@linaro.org> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Host Controller Version 4.10 re-defines SDMA System Address register as 32-bit Block Count for v4 mode, and SDMA uses ADMA System Address register (05Fh-058h) instead if v4 mode is enabled. Also when using 32-bit block count, 16-bit block count register need to be set to zero. Since using 32-bit Block Count would cause problems for auto-cmd23, it can be chosen via host->quirk2. Signed-off-by: Chunyan Zhang --- drivers/mmc/host/sdhci.c | 15 ++++++++++++++- drivers/mmc/host/sdhci.h | 3 +++ 2 files changed, 17 insertions(+), 1 deletion(-) -- 2.7.4 diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c index 38d083c..05f9fff 100644 --- a/drivers/mmc/host/sdhci.c +++ b/drivers/mmc/host/sdhci.c @@ -1073,7 +1073,20 @@ static void sdhci_prepare_data(struct sdhci_host *host, struct mmc_command *cmd) /* Set the DMA boundary value and block size */ sdhci_writew(host, SDHCI_MAKE_BLKSZ(host->sdma_boundary, data->blksz), SDHCI_BLOCK_SIZE); - sdhci_writew(host, data->blocks, SDHCI_BLOCK_COUNT); + + /* + * For Version 4.10 onwards, if v4 mode is enabled, 16-bit Block Count + * register need to be set to zero, 32-bit Block Count register would + * be selected. + */ + if (host->version >= SDHCI_SPEC_410 && host->v4_mode && + !(host->quirks2 & SDHCI_QUIRK2_BROKEN_32BIT_BLK_CNT)) { + if (sdhci_readw(host, SDHCI_BLOCK_COUNT)) + sdhci_writew(host, 0, SDHCI_BLOCK_COUNT); + sdhci_writew(host, data->blocks, SDHCI_32BIT_BLK_CNT); + } else { + sdhci_writew(host, data->blocks, SDHCI_BLOCK_COUNT); + } } static inline bool sdhci_auto_cmd12(struct sdhci_host *host, diff --git a/drivers/mmc/host/sdhci.h b/drivers/mmc/host/sdhci.h index f3b9ebc..0a1e25f 100644 --- a/drivers/mmc/host/sdhci.h +++ b/drivers/mmc/host/sdhci.h @@ -28,6 +28,7 @@ #define SDHCI_DMA_ADDRESS 0x00 #define SDHCI_ARGUMENT2 SDHCI_DMA_ADDRESS +#define SDHCI_32BIT_BLK_CNT SDHCI_DMA_ADDRESS #define SDHCI_BLOCK_SIZE 0x04 #define SDHCI_MAKE_BLKSZ(dma, blksz) (((dma & 0x7) << 12) | (blksz & 0xFFF)) @@ -462,6 +463,8 @@ struct sdhci_host { * obtainable timeout. */ #define SDHCI_QUIRK2_DISABLE_HW_TIMEOUT (1<<17) +/* Controller broken with using 32-bit block count in v4_mode */ +#define SDHCI_QUIRK2_BROKEN_32BIT_BLK_CNT (1<<18) int irq; /* Device IRQ */ void __iomem *ioaddr; /* Mapped address */ From patchwork Fri Aug 24 09:20:25 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chunyan Zhang X-Patchwork-Id: 145000 Delivered-To: patch@linaro.org Received: by 2002:a2e:1648:0:0:0:0:0 with SMTP id 8-v6csp1065510ljw; Fri, 24 Aug 2018 02:21:46 -0700 (PDT) X-Google-Smtp-Source: ANB0VdbViVAJotgTr5qThslQfpf2czlyyDomySVwWDi+PXRwQDYiSJ52DOjsPi6/Rckr1981km9a X-Received: by 2002:a17:902:8ec7:: with SMTP id x7-v6mr902596plo.336.1535102506407; Fri, 24 Aug 2018 02:21:46 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1535102506; cv=none; d=google.com; s=arc-20160816; b=I5TedBZpSwKlwmUbMdR+/kAHoOWFU4L9968szCuIKvICWpT4VfkfcRCzsampxkcrfj ObDsVhrKJY/l2aRmPVTGIy2Jexbr5f3iRPvdwBZxPC3hFgfd15LC4C+Iy1cVgYdwNd+S UdCrBh37rsEVeQOqySjHtIlMOnIT8pB22Zttj3d9ttmYoXRxGdOmr2AKJrCq8M0xOyCw rHVJfxbiMJk+22XoyY2bMnOS4rjNNeKTkF/j5RMOKcLAYRbItOHFYeiHfQg2b7e7QSQM pMyUCxZSXuWWbOfY3ni5PPG23A6MbPuAhyVaqopvOMKEUhiEOWAcwvi/kIJbdzmdspk0 X29g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature:arc-authentication-results; bh=bgWiDR0Rsg/hAoQ1TRN+MoB6IBhSRF8+l9TyLcN+DOA=; b=STwqiUzldnOnvubuUP95cl+5TipNHW9gx+jKHlt3FrhF6r8uQy9aq/oRgnt8tn4WcL JbLW4s6hvOwUxg1TOB7oG9sEKnSFlF0u/Je3ZSoz2d8/L3jJWvzqvrPQRQ+DUTwr/iwg 10ysj9sHEr6mQxXaUUsAvDHfTk4hyMW+FMhRXXII3qapPYZoGnSNFSgz5U485UcLOtMK pbb6UG5Bx3pZF11rnWEstzMRiL74ALoVYVkPUOOa2hAC1o3Yw+FmTAhuFzDZqSlsweAt NVc4RBop/4V8IVfMMQM2ZFlhaWgmuQNYrYduYjpA6VJ/Ib5+9aqYvVfqDbj1dsyqqamG /Btg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=dQlu8mCy; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id ay10-v6si6389276plb.293.2018.08.24.02.21.46; Fri, 24 Aug 2018 02:21:46 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=dQlu8mCy; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727848AbeHXMz3 (ORCPT + 32 others); Fri, 24 Aug 2018 08:55:29 -0400 Received: from mail-pl1-f193.google.com ([209.85.214.193]:40891 "EHLO mail-pl1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727019AbeHXMz3 (ORCPT ); Fri, 24 Aug 2018 08:55:29 -0400 Received: by mail-pl1-f193.google.com with SMTP id s17-v6so849187plp.7 for ; Fri, 24 Aug 2018 02:21:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=bgWiDR0Rsg/hAoQ1TRN+MoB6IBhSRF8+l9TyLcN+DOA=; b=dQlu8mCy9PynuxJxGRTq5n4yo8HJnuuAE3i7I+H5Yrl7TSVz/5S9QQgS8IfLnWBVXJ fq8/ZyMnYNLNMSSxnqY+itXHZZ2XeM5GvfBg4zjFIy1ERnafyE+xSvZQsOPOJg8TOSYf XmMpSN06mp4EezwEoPRs42LQ0oLefdPtafJ9g= 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=bgWiDR0Rsg/hAoQ1TRN+MoB6IBhSRF8+l9TyLcN+DOA=; b=jm4KzvoixGuSS6J3FvRy204GR3JsCiybd3pQ74eW1a78fLc/L5gDGLeDGJ41QggA6S 3c0rU6yrjJ64aYuMpqxEsPpHGaoy49rlEyQ17QeRyngyjI9Bi51CT9Dnjc+tZeq6Cc2U 4MUCFmUstp/kkAoIxljL+QOGh0FJyTrMtUJmKhOMrTmRRGkfRSniUYOVckq2BNoR7yoC eAZGxph8LUownWnRZ8JFN0dLNnlpf9+95shiVqTa688XK/GYJgAbpDa8SQ6MhEDRXe2o /oK7a66vNFV2rEfogbxo1ZI7kyEHbv83drTO4hGfsQJLffbXjiH4izOqW0c4PtVBTcsU 0yww== X-Gm-Message-State: APzg51B8KwK2Pso6EJ6s5pkbkuLJlIbMIYCRAwMRBUQCQmTWHhPtYZmS mAQP420Ow3/+o/NBHQT5kdswsA== X-Received: by 2002:a17:902:32f:: with SMTP id 44-v6mr873421pld.15.1535102503504; Fri, 24 Aug 2018 02:21:43 -0700 (PDT) Received: from ubt.spreadtrum.com ([117.18.48.102]) by smtp.gmail.com with ESMTPSA id g6-v6sm9520314pfb.11.2018.08.24.02.21.39 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 24 Aug 2018 02:21:42 -0700 (PDT) From: Chunyan Zhang To: Ulf Hansson , Adrian Hunter Cc: linux-mmc@vger.kernel.org, linux-kernel@vger.kernel.org, Orson Zhai , Baolin Wang , Billows Wu , Jason Wu , Chunyan Zhang , Chunyan Zhang Subject: [PATCH V6 6/9] mmc: sdhci: Add Auto CMD Auto Select support Date: Fri, 24 Aug 2018 17:20:25 +0800 Message-Id: <1535102428-20332-7-git-send-email-zhang.chunyan@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1535102428-20332-1-git-send-email-zhang.chunyan@linaro.org> References: <1535102428-20332-1-git-send-email-zhang.chunyan@linaro.org> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org As SD Host Controller Specification v4.10 documents: Host Controller Version 4.10 defines this "Auto CMD Auto Select" mode. Selection of Auto CMD depends on setting of CMD23 Enable in the Host Control 2 register which indicates whether card supports CMD23. If CMD23 Enable =1, Auto CMD23 is used and if CMD23 Enable =0, Auto CMD12 is used. In case of Version 4.10 or later, use of Auto CMD Auto Select is recommended rather than use of Auto CMD12 Enable or Auto CMD23 Enable. This patch add this new mode support. Signed-off-by: Chunyan Zhang --- drivers/mmc/host/sdhci.c | 49 ++++++++++++++++++++++++++++++++++++++---------- drivers/mmc/host/sdhci.h | 2 ++ 2 files changed, 41 insertions(+), 10 deletions(-) -- 2.7.4 diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c index 05f9fff..7e01601 100644 --- a/drivers/mmc/host/sdhci.c +++ b/drivers/mmc/host/sdhci.c @@ -1096,6 +1096,43 @@ static inline bool sdhci_auto_cmd12(struct sdhci_host *host, !mrq->cap_cmd_during_tfr; } +static inline void sdhci_auto_cmd_select(struct sdhci_host *host, + struct mmc_command *cmd, + u16 *mode) +{ + bool use_cmd12 = sdhci_auto_cmd12(host, cmd->mrq) && + (cmd->opcode != SD_IO_RW_EXTENDED); + bool use_cmd23 = cmd->mrq->sbc && (host->flags & SDHCI_AUTO_CMD23); + u16 ctrl2; + + /* + * In case of Version 4.10 or later, use of 'Auto CMD Auto + * Select' is recommended rather than use of 'Auto CMD12 + * Enable' or 'Auto CMD23 Enable'. + */ + if (host->version >= SDHCI_SPEC_410 && (use_cmd12 || use_cmd23)) { + *mode |= SDHCI_TRNS_AUTO_SEL; + + ctrl2 = sdhci_readw(host, SDHCI_HOST_CONTROL2); + if (use_cmd23) + ctrl2 |= SDHCI_CMD23_ENABLE; + else + ctrl2 &= ~SDHCI_CMD23_ENABLE; + sdhci_writew(host, ctrl2, SDHCI_HOST_CONTROL2); + + return; + } + + /* + * If we are sending CMD23, CMD12 never gets sent + * on successful completion (so no Auto-CMD12). + */ + if (use_cmd12) + *mode |= SDHCI_TRNS_AUTO_CMD12; + else if (use_cmd23) + *mode |= SDHCI_TRNS_AUTO_CMD23; +} + static void sdhci_set_transfer_mode(struct sdhci_host *host, struct mmc_command *cmd) { @@ -1122,17 +1159,9 @@ static void sdhci_set_transfer_mode(struct sdhci_host *host, if (mmc_op_multi(cmd->opcode) || data->blocks > 1) { mode = SDHCI_TRNS_BLK_CNT_EN | SDHCI_TRNS_MULTI; - /* - * If we are sending CMD23, CMD12 never gets sent - * on successful completion (so no Auto-CMD12). - */ - if (sdhci_auto_cmd12(host, cmd->mrq) && - (cmd->opcode != SD_IO_RW_EXTENDED)) - mode |= SDHCI_TRNS_AUTO_CMD12; - else if (cmd->mrq->sbc && (host->flags & SDHCI_AUTO_CMD23)) { - mode |= SDHCI_TRNS_AUTO_CMD23; + sdhci_auto_cmd_select(host, cmd, &mode); + if (cmd->mrq->sbc && (host->flags & SDHCI_AUTO_CMD23)) sdhci_writel(host, cmd->mrq->sbc->arg, SDHCI_ARGUMENT2); - } } if (data->flags & MMC_DATA_READ) diff --git a/drivers/mmc/host/sdhci.h b/drivers/mmc/host/sdhci.h index 0a1e25f..4913d75 100644 --- a/drivers/mmc/host/sdhci.h +++ b/drivers/mmc/host/sdhci.h @@ -42,6 +42,7 @@ #define SDHCI_TRNS_BLK_CNT_EN 0x02 #define SDHCI_TRNS_AUTO_CMD12 0x04 #define SDHCI_TRNS_AUTO_CMD23 0x08 +#define SDHCI_TRNS_AUTO_SEL 0x0C #define SDHCI_TRNS_READ 0x10 #define SDHCI_TRNS_MULTI 0x20 @@ -185,6 +186,7 @@ #define SDHCI_CTRL_DRV_TYPE_D 0x0030 #define SDHCI_CTRL_EXEC_TUNING 0x0040 #define SDHCI_CTRL_TUNED_CLK 0x0080 +#define SDHCI_CMD23_ENABLE 0x0800 #define SDHCI_CTRL_V4_MODE 0x1000 #define SDHCI_CTRL_64BIT_ADDR 0x2000 #define SDHCI_CTRL_PRESET_VAL_ENABLE 0x8000