Received: by 2002:ac0:a5b6:0:0:0:0:0 with SMTP id m51-v6csp5330880imm; Tue, 12 Jun 2018 06:21:21 -0700 (PDT) X-Google-Smtp-Source: ADUXVKKH60NlUv46nkmgSAtlpvv1Xhhe7TfQ4u1hKCQQwSRfHY9ihHdCh0x/DPES7Jhqm4lURo0v X-Received: by 2002:a17:902:70ca:: with SMTP id l10-v6mr425390plt.174.1528809681293; Tue, 12 Jun 2018 06:21:21 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1528809681; cv=none; d=google.com; s=arc-20160816; b=gXyOCW9T9DP5ocWKLjJjajrrafIJ4Zey6RuPU3rRHb8J9Hx34EdjsOQMrX4oVzNQLC ZwyxenGwWzD3pAq0+G/4nwwheovfeZb+V0QqSRbJzMFl6IRilvtFIxqWVa5Xj94u0geb x0kvs61J1cOXiIE5iVNi9KZC4uveIrGMRdyDA/mhkydFiVTioV1MFAGQpPtShAPCf/6X AZh1izi3X+SAu/bE3+mG+6bsktyB4N6PLZSSBEqXDK7GLoVXbZGhTCj1Iu9DpI6O5Ynq ArsAPTIOAj+Z4G8YpDgfPYPFvQK8BovNdtxJLMvuxw4NauuaeMXT3PRbbjviC9rKZBUa todQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:arc-authentication-results; bh=Nx6/HUH8m0sYt4xpx2L9+zwz8AhY4Pv3Te39HtQ+2nM=; b=YB5clhfHypspjafl1geCTXb/lKv6hIB6jhfyI1MVuxEgvIBLh5iCCyI8d4dczjo2iW GSJj8s/x4Yfc5Dqul51wP1lxuAbRdz1JjtrDJga2qoSxniMc3BHWFpg3i51eNfbnPAd2 qfaza8nXer4nzAytzXyeIvkihvXSAFNl67TTUiX5HTQVNp8LbV4QHjnNcSsBRWU9FNPJ Je7Jda7RqZxznVr2F8lkujm013abk/g6R65xDFcZ2dViIcvkzcMYxd3Sbdc5wM+9uyQd qsjmy72PNEoKpJva31shfsKu0fWoSaeUZ5fkWxH+aglNuoFps5O+gAUVH9sQII1dnAm0 TMuA== ARC-Authentication-Results: i=1; mx.google.com; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id i62-v6si134691pfc.255.2018.06.12.06.21.06; Tue, 12 Jun 2018 06:21:21 -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; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933809AbeFLNQd (ORCPT + 99 others); Tue, 12 Jun 2018 09:16:33 -0400 Received: from mx08-00178001.pphosted.com ([91.207.212.93]:1324 "EHLO mx07-00178001.pphosted.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S933704AbeFLNQ3 (ORCPT ); Tue, 12 Jun 2018 09:16:29 -0400 Received: from pps.filterd (m0046660.ppops.net [127.0.0.1]) by mx08-.pphosted.com (8.16.0.21/8.16.0.21) with SMTP id w5CDE38q017834; Tue, 12 Jun 2018 15:16:03 +0200 Received: from beta.dmz-eu.st.com (beta.dmz-eu.st.com [164.129.1.35]) by mx08-00178001.pphosted.com with ESMTP id 2jjegrr43n-1 (version=TLSv1 cipher=ECDHE-RSA-AES256-SHA bits=256 verify=NOT); Tue, 12 Jun 2018 15:16:03 +0200 Received: from zeta.dmz-eu.st.com (zeta.dmz-eu.st.com [164.129.230.9]) by beta.dmz-eu.st.com (STMicroelectronics) with ESMTP id 170F941; Tue, 12 Jun 2018 13:16:01 +0000 (GMT) Received: from Webmail-eu.st.com (Safex1hubcas23.st.com [10.75.90.46]) by zeta.dmz-eu.st.com (STMicroelectronics) with ESMTP id EB7C4A543; Tue, 12 Jun 2018 13:16:00 +0000 (GMT) Received: from SAFEX1HUBCAS21.st.com (10.75.90.44) by SAFEX1HUBCAS23.st.com (10.75.90.46) with Microsoft SMTP Server (TLS) id 14.3.361.1; Tue, 12 Jun 2018 15:16:00 +0200 Received: from lmecxl0923.lme.st.com (10.48.0.237) by Webmail-ga.st.com (10.75.90.48) with Microsoft SMTP Server (TLS) id 14.3.361.1; Tue, 12 Jun 2018 15:16:00 +0200 From: Ludovic Barre To: Ulf Hansson , Rob Herring CC: Maxime Coquelin , Alexandre Torgue , Gerald Baeza , , , , , Ludovic Barre Subject: [PATCH 10/19] mmc: mmci: add variant property to allow remain data Date: Tue, 12 Jun 2018 15:14:31 +0200 Message-ID: <1528809280-31116-11-git-send-email-ludovic.Barre@st.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1528809280-31116-1-git-send-email-ludovic.Barre@st.com> References: <1528809280-31116-1-git-send-email-ludovic.Barre@st.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.48.0.237] X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:,, definitions=2018-06-12_01:,, signatures=0 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Ludovic Barre This patch adds a boolean property to read remaining data. Needed to support the STM32 sdmmc variant. MMCIDATACNT register should be read only after the data transfer is complete. When reading after an error event the read data count value may be different from the real number of data bytes transferred. Signed-off-by: Ludovic Barre --- drivers/mmc/host/mmci.c | 17 +++++++++++++++-- drivers/mmc/host/mmci.h | 3 +++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/drivers/mmc/host/mmci.c b/drivers/mmc/host/mmci.c index 83c3572..abddad7 100644 --- a/drivers/mmc/host/mmci.c +++ b/drivers/mmc/host/mmci.c @@ -58,6 +58,7 @@ static struct variant_data variant_arm = { .datalength_bits = 16, .datactrl_blocksz = 11, .datactrl_dpsm_enable = MCI_DPSM_ENABLE, + .datacnt_remain = true, .pwrreg_powerup = MCI_PWR_UP, .f_max = 100000000, .reversed_irq_handling = true, @@ -78,6 +79,7 @@ static struct variant_data variant_arm_extended_fifo = { .datalength_bits = 16, .datactrl_blocksz = 11, .datactrl_dpsm_enable = MCI_DPSM_ENABLE, + .datacnt_remain = true, .pwrreg_powerup = MCI_PWR_UP, .f_max = 100000000, .mmcimask1 = true, @@ -98,6 +100,7 @@ static struct variant_data variant_arm_extended_fifo_hwfc = { .datalength_bits = 16, .datactrl_blocksz = 11, .datactrl_dpsm_enable = MCI_DPSM_ENABLE, + .datacnt_remain = true, .pwrreg_powerup = MCI_PWR_UP, .f_max = 100000000, .mmcimask1 = true, @@ -120,6 +123,7 @@ static struct variant_data variant_u300 = { .datactrl_blocksz = 11, .datactrl_dpsm_enable = MCI_DPSM_ENABLE, .datactrl_mask_sdio = MCI_DPSM_ST_SDIOEN, + .datacnt_remain = true, .st_sdio = true, .pwrreg_powerup = MCI_PWR_ON, .f_max = 100000000, @@ -146,6 +150,7 @@ static struct variant_data variant_nomadik = { .datactrl_blocksz = 11, .datactrl_dpsm_enable = MCI_DPSM_ENABLE, .datactrl_mask_sdio = MCI_DPSM_ST_SDIOEN, + .datacnt_remain = true, .st_sdio = true, .st_clkdiv = true, .pwrreg_powerup = MCI_PWR_ON, @@ -175,6 +180,7 @@ static struct variant_data variant_ux500 = { .datactrl_blocksz = 11, .datactrl_dpsm_enable = MCI_DPSM_ENABLE, .datactrl_mask_sdio = MCI_DPSM_ST_SDIOEN, + .datacnt_remain = true, .st_sdio = true, .st_clkdiv = true, .pwrreg_powerup = MCI_PWR_ON, @@ -209,6 +215,7 @@ static struct variant_data variant_ux500v2 = { .datactrl_blocksz = 11, .datactrl_dpsm_enable = MCI_DPSM_ENABLE, .datactrl_mask_sdio = MCI_DPSM_ST_SDIOEN, + .datacnt_remain = true, .st_sdio = true, .st_clkdiv = true, .blksz_datactrl16 = true, @@ -244,6 +251,7 @@ static struct variant_data variant_stm32 = { .datactrl_blocksz = 11, .datactrl_dpsm_enable = MCI_DPSM_ENABLE, .datactrl_mask_sdio = MCI_DPSM_ST_SDIOEN, + .datacnt_remain = true, .st_sdio = true, .st_clkdiv = true, .pwrreg_powerup = MCI_PWR_ON, @@ -270,6 +278,7 @@ static struct variant_data variant_qcom = { .datalength_bits = 24, .datactrl_blocksz = 11, .datactrl_dpsm_enable = MCI_DPSM_ENABLE, + .datacnt_remain = true, .pwrreg_powerup = MCI_PWR_UP, .f_max = 208000000, .explicit_mclk_control = true, @@ -711,8 +720,12 @@ mmci_data_irq(struct mmci_host *host, struct mmc_data *data, * can be as much as a FIFO-worth of data ahead. This * matters for FIFO overruns only. */ - remain = readl(host->base + MMCIDATACNT); - success = data->blksz * data->blocks - remain; + if (host->variant->datacnt_remain) { + remain = readl(host->base + MMCIDATACNT); + success = data->blksz * data->blocks - remain; + } else { + success = 0; + } dev_dbg(mmc_dev(host->mmc), "MCI ERROR IRQ, status 0x%08x at 0x%08x\n", status_err, success); diff --git a/drivers/mmc/host/mmci.h b/drivers/mmc/host/mmci.h index 5091025..12ee2e6 100644 --- a/drivers/mmc/host/mmci.h +++ b/drivers/mmc/host/mmci.h @@ -260,6 +260,8 @@ struct mmci_host; * @datactrl_blksz: block size in power of two * @datactrl_dpsm_enable: enable value for DPSM * @datactrl_first: true if data must be setup before send command + * @datacnt_remain: true if you could read datacnt register + * to define remain data * @pwrreg_powerup: power up value for MMCIPOWER register * @f_max: maximum clk frequency supported by the controller. * @signal_direction: input/out direction of bus signals can be indicated @@ -303,6 +305,7 @@ struct variant_data { unsigned int datactrl_blocksz; unsigned int datactrl_dpsm_enable; bool datactrl_first; + bool datacnt_remain; bool st_sdio; bool st_clkdiv; bool blksz_datactrl16; -- 2.7.4