From patchwork Fri Nov 18 06:29:15 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jun Nie X-Patchwork-Id: 82840 Delivered-To: patch@linaro.org Received: by 10.140.97.165 with SMTP id m34csp1183118qge; Thu, 17 Nov 2016 22:29:42 -0800 (PST) X-Received: by 10.129.98.65 with SMTP id w62mr6307345ywb.38.1479450582655; Thu, 17 Nov 2016 22:29:42 -0800 (PST) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id u99si1337044ybi.13.2016.11.17.22.29.42; Thu, 17 Nov 2016 22:29:42 -0800 (PST) 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; 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 dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751665AbcKRG3l (ORCPT + 4 others); Fri, 18 Nov 2016 01:29:41 -0500 Received: from mail-pf0-f177.google.com ([209.85.192.177]:35589 "EHLO mail-pf0-f177.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751613AbcKRG3l (ORCPT ); Fri, 18 Nov 2016 01:29:41 -0500 Received: by mail-pf0-f177.google.com with SMTP id i88so53056404pfk.2 for ; Thu, 17 Nov 2016 22:29:40 -0800 (PST) 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=T0dq0Wf9Yb6Puyo8jEujF+YG1JTo2PNYwQn1vxDumtU=; b=PPN4RefJRX1xvuNTR/cN50W1WADWclW+rubalaDc7IqGlFLv/JAyjGyjL4QdezfJRL n10wTyJNHVhaUqf8hwtIMYlbhMMx171DfK/woI6cF4Qk6kzdTozkjCTxicXuBcqiQEhq mV6ILTMrjHCqAh4k8S4YWtTTyUIPjgzZkF0JM= 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=T0dq0Wf9Yb6Puyo8jEujF+YG1JTo2PNYwQn1vxDumtU=; b=IBSodOhHRdEpWqBtWUBUgM/NMnIpJ1N12CS0c1DJ3UBSbutB7z9IYR0oXsWGaj/a+d Az3g6XgGRWoNKEzkd3i58MPbBtvJqi1UW/QNANAZW0HZipaOn9KkIk2yqViyxE5s8Uti fMi10WVXY9uVulqLXTE1NsEOevIBYSm+Pfa7jxUfjRETaYX517oviQ283WCXa33I4wjY 5AuFdRrw+BJZn5DlXG3YgPowxx5ua/4xH0C0t+uc1b+GMfv5cnR14IyS+ei19SPVkHtI FHb0pW0si5WwHzRNaOtPVip2K9ybAX2twK5mKuP/W1Fux+tljqA111V93GXXYigReLGh JR3w== X-Gm-Message-State: ABUngvfLXxGK1AJcUlfHMj+fzJsB1fS/PJ6KWJmtHGqAUeEZLcSwjPBQDSDWAOtAQZU80zYx X-Received: by 10.98.4.134 with SMTP id 128mr9667411pfe.156.1479450580221; Thu, 17 Nov 2016 22:29:40 -0800 (PST) Received: from localhost.localdomain (61-216-161-10.HINET-IP.hinet.net. [61.216.161.10]) by smtp.gmail.com with ESMTPSA id z62sm13638848pfz.19.2016.11.17.22.29.37 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Thu, 17 Nov 2016 22:29:39 -0800 (PST) From: Jun Nie To: shawn.guo@linaro.org, xie.baoyou@zte.com.cn Cc: ulf.hansson@linaro.org, jh80.chung@samsung.com, jason.liu@linaro.org, chen.chaokai@zte.com.cn, lai.binz@zte.com.cn, linux-mmc@vger.kernel.org, Jun Nie Subject: [PATCH v6 5/5] mmc: dw: Add fifo watermark alignment property Date: Fri, 18 Nov 2016 14:29:15 +0800 Message-Id: <1479450555-19047-6-git-send-email-jun.nie@linaro.org> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1479450555-19047-1-git-send-email-jun.nie@linaro.org> References: <1479450555-19047-1-git-send-email-jun.nie@linaro.org> Sender: linux-mmc-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-mmc@vger.kernel.org Data done irq is expected if data length is less than watermark in PIO mode. But fifo watermark is requested to be aligned with data length in some SoC so that TX/RX irq can be generated with data done irq. Add the watermark alignment to mark this requirement and force fifo watermark setting accordingly. Signed-off-by: Jun Nie --- drivers/mmc/host/dw_mmc.c | 11 +++++++++-- include/linux/mmc/dw_mmc.h | 3 +++ 2 files changed, 12 insertions(+), 2 deletions(-) -- 1.9.1 -- 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/dw_mmc.c b/drivers/mmc/host/dw_mmc.c index 696b5e6..6d85ca6 100644 --- a/drivers/mmc/host/dw_mmc.c +++ b/drivers/mmc/host/dw_mmc.c @@ -1111,11 +1111,15 @@ static void dw_mci_submit_data(struct dw_mci *host, struct mmc_data *data) mci_writel(host, CTRL, temp); /* - * Use the initial fifoth_val for PIO mode. + * Use the initial fifoth_val for PIO mode. If wm_algined + * is set, we set watermark same as data size. * If next issued data may be transfered by DMA mode, * prev_blksz should be invalidated. */ - mci_writel(host, FIFOTH, host->fifoth_val); + if (host->wm_aligned) + dw_mci_adjust_fifoth(host, data); + else + mci_writel(host, FIFOTH, host->fifoth_val); host->prev_blksz = 0; } else { /* @@ -2957,6 +2961,9 @@ static struct dw_mci_board *dw_mci_parse_dt(struct dw_mci *host) of_property_read_u32(np, "data-addr", &host->data_addr_override); + if (of_get_property(np, "fifo-watermark-aligned", NULL)) + host->wm_aligned = true; + if (!of_property_read_u32(np, "clock-frequency", &clock_frequency)) pdata->bus_hz = clock_frequency; diff --git a/include/linux/mmc/dw_mmc.h b/include/linux/mmc/dw_mmc.h index 17cb95a..ee4bb30 100644 --- a/include/linux/mmc/dw_mmc.h +++ b/include/linux/mmc/dw_mmc.h @@ -108,6 +108,8 @@ struct dw_mci_dma_slave { * @slot: Slots sharing this MMC controller. * @fifo_depth: depth of FIFO. * @data_addr_override: override fifo reg offset with this value. + * @wm_aligned: force fifo watermark equal with data length in PIO mode. + * Set as true if alignment is needed. * @data_shift: log2 of FIFO item size. * @part_buf_start: Start index in part_buf. * @part_buf_count: Bytes of partial data in part_buf. @@ -156,6 +158,7 @@ struct dw_mci { void __iomem *regs; void __iomem *fifo_reg; u32 data_addr_override; + bool wm_aligned; struct scatterlist *sg; struct sg_mapping_iter sg_miter;