From patchwork Mon Jul 9 03:19:56 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chunyan Zhang X-Patchwork-Id: 141363 Delivered-To: patch@linaro.org Received: by 2002:a2e:9754:0:0:0:0:0 with SMTP id f20-v6csp2167140ljj; Sun, 8 Jul 2018 20:22:03 -0700 (PDT) X-Google-Smtp-Source: AAOMgpcvXZK3kpS8oXefNDXC+yGV5pURlNZLY0v48eNk1zdEm8sa9xai/3BRHF75z4YGL8XzCGgT X-Received: by 2002:a62:e18:: with SMTP id w24-v6mr19639012pfi.145.1531106523089; Sun, 08 Jul 2018 20:22:03 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1531106523; cv=none; d=google.com; s=arc-20160816; b=Dq2fKEtRwkSFQZAmM5f9VmP2kuzqaAh4g3AjmHY4PWn7gOdf/xamsxNaFenj9Q7SfQ 2Bp96CCT70y+uKAT32qaMczb/SI7firkOW1jNZmxsp/DB4Zz4IvDVSMnbV1pRA/tCJHF 3ldfJyMSkvzh2R4ykq5PnVZWSFSznplA7Dzc8CImwPgO5sFCiAJTwN2ituf669BFZjxL Avkh6IdVBwwQQyhiE7T+DNG99FEjs88fuX1866s/cP6k7y8fUiOyrunblVbvz0KBmCz5 VDUDhQSHZFZJO7kS8cFVWpJ6bgsqQiEbMatGPaTPBdsf4APvvY2by5X7KNXxqlomuBCM WO7A== 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=dZTY46EcY/a632sV7OpmQl03btKKNrwTdanpP0HI/4I=; b=iiPT28cwqWH9y74PzRythKA7Eip8bwA71UEO9eujPJfkobMnCRWRwm4Lmf4G5rSLSm E858WNuSgIBr45rFkBxMCtjuzkMmrusX9xwe5iCHowS/3nuDSVgtcSVPMzUTWBuKrDNa jb6+IxSQiMEqO4mfvjunEX6pZG/uwA7NhxSTqorFJlTKtnHc7acR60NWRU+lCabcuuc0 kGvKx8HW6yeD6SRZk64i5sP4ScGS27k6V1Za3v5nN6aiDJaHqzOTY3O+jUHgSAXHEiOB akq/XvWqU+whQdlJzbWfDia/O3E8611M9IOFxSa7tDTRb0MwXKrl+L8O1QxFEoirU2wQ Tv5Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@linaro.org header.s=google header.b=eExNJfwr; spf=pass (google.com: best guess record for domain of linux-mmc-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-mmc-owner@vger.kernel.org; dmarc=fail (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 b23-v6si13219207pls.341.2018.07.08.20.22.02; Sun, 08 Jul 2018 20:22:03 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-mmc-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@linaro.org header.s=google header.b=eExNJfwr; spf=pass (google.com: best guess record for domain of linux-mmc-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-mmc-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754442AbeGIDWB (ORCPT + 6 others); Sun, 8 Jul 2018 23:22:01 -0400 Received: from mail-pl0-f65.google.com ([209.85.160.65]:41849 "EHLO mail-pl0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754375AbeGIDWA (ORCPT ); Sun, 8 Jul 2018 23:22:00 -0400 Received: by mail-pl0-f65.google.com with SMTP id w8-v6so5343258ply.8 for ; Sun, 08 Jul 2018 20:22:00 -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=ey789fHEvUYxMIfFWvZa0+J79sna2Fb1Og/8oPpUtLc=; b=eExNJfwrcCCDcUfslT48vdm3LZaaKmHx7HmOx8tCxk8d+e++fQyDtDmNGDCLgIKRAk CsG3xcfTCHM31RHCebwLP8iaD2cfetFa9cQ0cLoHrwdwxV7LwD/36lPt8sryH0efLYDM KVvERUpn913AFY875wb6IB7XVBbXfeGrQ19Aw= 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=ey789fHEvUYxMIfFWvZa0+J79sna2Fb1Og/8oPpUtLc=; b=azHGmAnZ1v2t0F1J+5ivrFjhdPfNFMlxwKN4BTgGTDEM8DLOiwzA6F/9FGSdD6EjAD gcUUcsSqzNBPxUlV2jhFxAmBwguEMnFyfBFeKVmWsgjAF1OIId34SlUe2xo2HDLSXTAF bANG2+TMqjRl9NgXur3n918XsXo+WUPvcyrc0CZP5muV3ma8vNbV8wH7pnBSJAp+CLFt xJq5IObNiGu8pKzKCqtVOsWOBbPErx5spCVXfxQi50WcpZKBgv3L2GCbxKw/FlaGfml2 3Qy89+icRuDnGokJQWVLCe50oX5UzPZ83zgITAFUBV776SlK+zfPCUU2ZKm+gt4xRn8t cheA== X-Gm-Message-State: APt69E2KtGjNhJbuG66DCcO5vmDpmAqntgv6MF7F1Q8wwYV0FIIMr5D/ sIq+LuJoBvJCYjzSPnkMlVoYGQ== X-Received: by 2002:a17:902:2006:: with SMTP id n6-v6mr18808377pla.325.1531106519740; Sun, 08 Jul 2018 20:21:59 -0700 (PDT) Received: from ubt.spreadtrum.com ([117.18.48.102]) by smtp.gmail.com with ESMTPSA id e82-v6sm41458950pfk.87.2018.07.08.20.21.51 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Sun, 08 Jul 2018 20:21:58 -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 , zhang.lyra@gmail.com Subject: [PATCH V3 5/7] mmc: sdhci: add Auto CMD Auto Select support Date: Mon, 9 Jul 2018 11:19:56 +0800 Message-Id: <1531106398-14062-6-git-send-email-zhang.chunyan@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1531106398-14062-1-git-send-email-zhang.chunyan@linaro.org> References: <1531106398-14062-1-git-send-email-zhang.chunyan@linaro.org> Sender: linux-mmc-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-mmc@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 | 39 ++++++++++++++++++++++++++++----------- drivers/mmc/host/sdhci.h | 2 ++ 2 files changed, 30 insertions(+), 11 deletions(-) -- 2.7.4 -- To unsubscribe from this list: send the line "unsubscribe linux-mmc" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c index f64e766..1ca3871 100644 --- a/drivers/mmc/host/sdhci.c +++ b/drivers/mmc/host/sdhci.c @@ -1033,6 +1033,33 @@ static inline bool sdhci_auto_cmd12(struct sdhci_host *host, !mrq->cap_cmd_during_tfr; } +static inline void sdhci_auto_cmd_enable(struct sdhci_host *host, + struct mmc_command *cmd, + u16 *mode) +{ + /* + * 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) { + *mode |= SDHCI_TRNS_AUTO_SEL; + return; + } + + /* + * 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_writel(host, cmd->mrq->sbc->arg, SDHCI_ARGUMENT2); + } +} + static void sdhci_set_transfer_mode(struct sdhci_host *host, struct mmc_command *cmd) { @@ -1059,17 +1086,7 @@ 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_writel(host, cmd->mrq->sbc->arg, SDHCI_ARGUMENT2); - } + sdhci_auto_cmd_enable(host, cmd, &mode); } if (data->flags & MMC_DATA_READ) diff --git a/drivers/mmc/host/sdhci.h b/drivers/mmc/host/sdhci.h index 889e48b..8263ac6 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