From patchwork Thu Jun 29 07:16:01 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Abhishek Sahu X-Patchwork-Id: 782091 X-Patchwork-Delegate: boris.brezillon@free-electrons.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from bombadil.infradead.org (bombadil.infradead.org [65.50.211.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3wysJP3YbGz9s2G for ; Thu, 29 Jun 2017 17:49:57 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="rXdjHUsd"; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=infradead.org header.i=@infradead.org header.b="vv41fihf"; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=codeaurora.org header.i=@codeaurora.org header.b="Ux3QHukU"; dkim=neutral (0-bit key) header.d=codeaurora.org header.i=@codeaurora.org header.b="O5t90UNX"; dkim-atps=neutral DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:MIME-Version:Cc:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:References: In-Reply-To:Message-Id:Date:Subject:To:From:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Owner; bh=PLIjDCq1v18+6p1Mu/mbKyGTp6Jy6ZaiXBCXVVbrR74=; b=rXdjHUsdUAFP+57N1zNAuvKmEa rG0MqRZS5z+LtKqG6fieqQvObBwsUZSq8rIUCmMXVVHzd+ZB1PJ3aUgg9YezsVbDRg1M8BVED0lIj Dq88N51EjRHOBGpL3Rx2yvOzIsOFjALvDFbnApC8HU+lBR6gfpUb5hjzfFoxg+KEm9Yc3Z10lkNHn 25bHuDDKhhUj6SVMhsZwt3uKnZThs2G4XlrWGxgCJqPk4xU3qqQYIYRudH/yP7rGkr0SPLr2C2Ewe C0QZkx7TXcoLxKhgmoLpKV1tH3w0WJJb3FecRel/YKcsiOISoIIxbl4MMQgGWS3ZL2F8GU8/1Xzxz LnVjgpSA==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.87 #1 (Red Hat Linux)) id 1dQUCz-0007FC-2H; Thu, 29 Jun 2017 07:49:49 +0000 Received: from merlin.infradead.org ([2001:8b0:10b:1231::1]) by bombadil.infradead.org with esmtps (Exim 4.87 #1 (Red Hat Linux)) id 1dQUCe-0006Wu-32 for linux-mtd@bombadil.infradead.org; Thu, 29 Jun 2017 07:49:28 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=merlin.20170209; h=References:In-Reply-To:Message-Id:Date: Subject:Cc:To:From:Sender:Reply-To:MIME-Version:Content-Type: Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id: List-Help:List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=oHJntlWrTFjm6TkzGhCszu+fXZiMVEaVI67j+vIArKo=; b=vv41fihft0wZgNGRXk/4wttHj L8S2HmGdFLHc1UoL6S5ybl12Pb4pVh28HpwBM+8VJ+lO8GBCnybGMP/k0rXFHbUJGwMb7yuC0CXiw d/c/8IhUTHkiQUC23n4kJxv+LbfdsbQ8LLZDXCN5aFDaxp3vRfUBhlO5wOyixH2B50zO00S2PenED V5pEVJY21gOyTCEKhrwi09EaDCInkz0u4yb0gqDTMg6jhw8yxAaetchNd4cU8A8pEU7MJ2fhh+8IT HUP16LB5sFXCC0Rs59PbykOmoFtMzDrc43UO4Ltw3/wE0UIyOyiSwCHa2dp/9njB0TG1zF3wJdvpe FjVlGpJ6A==; Received: from smtp.codeaurora.org ([198.145.29.96]) by merlin.infradead.org with esmtps (Exim 4.87 #1 (Red Hat Linux)) id 1dQThh-0008VE-5V for linux-mtd@lists.infradead.org; Thu, 29 Jun 2017 07:17:31 +0000 Received: by smtp.codeaurora.org (Postfix, from userid 1000) id 9CA586110D; Thu, 29 Jun 2017 07:17:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1498720631; bh=RbRl9ykI9FP7pnFwcUGEK9c37YfmDHJ8muPsZOUoYB8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Ux3QHukU9eGiYuilUVvHq1wDwTk0OnKbFKv+R9IFHYq6jU+TfpNJNjIQ4c5tQMAbs zBT1v5AsWQwLGoCAHg5LRxUhz+4Owb6G0NA7TnlL/DmDVJF5Nc5VMVDENmTe6uSEa1 qyWwYjAUq3ZmT9KexA5Q3njZAfaOZ9VkKOANS9eM= X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on pdx-caf-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.8 required=2.0 tests=ALL_TRUSTED,BAYES_00, DKIM_SIGNED, T_DKIM_INVALID autolearn=no autolearn_force=no version=3.4.0 Received: from absahu-linux.qualcomm.com (blr-c-bdr-fw-01_globalnat_allzones-outside.qualcomm.com [103.229.19.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: absahu@smtp.codeaurora.org) by smtp.codeaurora.org (Postfix) with ESMTPSA id 19E3C60FE9; Thu, 29 Jun 2017 07:17:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1498720630; bh=RbRl9ykI9FP7pnFwcUGEK9c37YfmDHJ8muPsZOUoYB8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=O5t90UNXV3IdRrqqYcYkKYnpvBqg+KL/3pJyxzZ8+dwbuW9gxw/opfCwQsjQMiNW9 QKaFsRHrHtXkL7tEptu8cvM9XMpZTV227IL2Q+YtP3V/1+mPvupA5nFE/N+NcZroaA VDgHxgH6Haur9P2APbAO5HCGLSSEnRqmz8fU42qk= DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org 19E3C60FE9 Authentication-Results: pdx-caf-mail.web.codeaurora.org; dmarc=none (p=none dis=none) header.from=codeaurora.org Authentication-Results: pdx-caf-mail.web.codeaurora.org; spf=none smtp.mailfrom=absahu@codeaurora.org From: Abhishek Sahu To: dwmw2@infradead.org, computersforpeace@gmail.com, boris.brezillon@free-electrons.com, marek.vasut@gmail.com, richard@nod.at, cyrille.pitchen@wedev4u.fr, robh+dt@kernel.org, mark.rutland@arm.com Subject: [PATCH 09/14] qcom: mtd: nand: BAM support for read page Date: Thu, 29 Jun 2017 12:46:01 +0530 Message-Id: <1498720566-20782-10-git-send-email-absahu@codeaurora.org> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1498720566-20782-1-git-send-email-absahu@codeaurora.org> References: <1498720566-20782-1-git-send-email-absahu@codeaurora.org> X-Spam-Note: CRM114 invocation failed X-Spam-Score: -2.0 (--) X-Spam-Report: SpamAssassin version 3.4.1 on merlin.infradead.org summary: Content analysis details: (-2.0 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at http://www.dnswl.org/, no trust [198.145.29.96 listed in list.dnswl.org] -0.0 RP_MATCHES_RCVD Envelope sender domain matches handover relay domain -0.0 SPF_PASS SPF: sender matches SPF record -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: devicetree@vger.kernel.org, architt@codeaurora.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, Abhishek Sahu , linux-mtd@lists.infradead.org, andy.gross@linaro.org, sricharan@codeaurora.org MIME-Version: 1.0 Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org 1. The BAM mode requires few registers configuration before each NAND page read and codeword read which is different from ADM so add the helper functions which will be called in BAM mode only. 2. The NAND page read handling of BAM is different from ADM so call the appropriate helper functions Signed-off-by: Abhishek Sahu --- drivers/mtd/nand/qcom_nandc.c | 63 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 62 insertions(+), 1 deletion(-) diff --git a/drivers/mtd/nand/qcom_nandc.c b/drivers/mtd/nand/qcom_nandc.c index 8e7dc9e..17766af 100644 --- a/drivers/mtd/nand/qcom_nandc.c +++ b/drivers/mtd/nand/qcom_nandc.c @@ -870,6 +870,35 @@ static void config_cw_read(struct qcom_nand_controller *nandc) } /* + * Helpers to prepare DMA descriptors for configuring registers + * before reading a NAND page with BAM. + */ +static void config_bam_page_read(struct qcom_nand_controller *nandc) +{ + write_reg_dma(nandc, NAND_FLASH_CMD, 3, 0); + write_reg_dma(nandc, NAND_DEV0_CFG0, 3, 0); + write_reg_dma(nandc, NAND_EBI2_ECC_BUF_CFG, 1, 0); + write_reg_dma(nandc, NAND_ERASED_CW_DETECT_CFG, 1, 0); + write_reg_dma(nandc, NAND_ERASED_CW_DETECT_CFG, 1, + NAND_ERASED_CW_SET | NAND_BAM_NEXT_SGL); +} + +/* + * Helpers to prepare DMA descriptors for configuring registers + * before reading each codeword in NAND page with BAM. + */ +static void config_bam_cw_read(struct qcom_nand_controller *nandc) +{ + write_reg_dma(nandc, NAND_READ_LOCATION_0, 2, 0); + write_reg_dma(nandc, NAND_FLASH_CMD, 1, NAND_BAM_NEXT_SGL); + write_reg_dma(nandc, NAND_EXEC_CMD, 1, NAND_BAM_NEXT_SGL); + + read_reg_dma(nandc, NAND_FLASH_STATUS, 2, 0); + read_reg_dma(nandc, NAND_ERASED_CW_DETECT_STATUS, 1, + NAND_BAM_NEXT_SGL); +} + +/* * helpers to prepare dma descriptors used to configure registers needed for * writing a codeword/step in a page */ @@ -1398,6 +1427,9 @@ static int read_page_ecc(struct qcom_nand_host *host, u8 *data_buf, struct nand_ecc_ctrl *ecc = &chip->ecc; int i, ret; + if (nandc->dma_bam_enabled) + config_bam_page_read(nandc); + /* queue cmd descs for each codeword */ for (i = 0; i < ecc->steps; i++) { int data_size, oob_size; @@ -1411,7 +1443,36 @@ static int read_page_ecc(struct qcom_nand_host *host, u8 *data_buf, oob_size = host->ecc_bytes_hw + host->spare_bytes; } - config_cw_read(nandc); + if (nandc->dma_bam_enabled) { + if (data_buf && oob_buf) { + nandc_set_reg(nandc, NAND_READ_LOCATION_0, + (0 << READ_LOCATION_OFFSET) | + (data_size << + READ_LOCATION_SIZE) | + (0 << READ_LOCATION_LAST)); + nandc_set_reg(nandc, NAND_READ_LOCATION_1, + (data_size << + READ_LOCATION_OFFSET) | + (oob_size << READ_LOCATION_SIZE) | + (1 << READ_LOCATION_LAST)); + } else if (data_buf) { + nandc_set_reg(nandc, NAND_READ_LOCATION_0, + (0 << READ_LOCATION_OFFSET) | + (data_size << + READ_LOCATION_SIZE) | + (1 << READ_LOCATION_LAST)); + } else { + nandc_set_reg(nandc, NAND_READ_LOCATION_0, + (data_size << + READ_LOCATION_OFFSET) | + (oob_size << READ_LOCATION_SIZE) | + (1 << READ_LOCATION_LAST)); + } + + config_bam_cw_read(nandc); + } else { + config_cw_read(nandc); + } if (data_buf) read_data_dma(nandc, FLASH_BUF_ACC, data_buf,