linux-mtd.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: Lee Jones <lee.jones@linaro.org>
To: linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org
Cc: angus.clark@st.com, kernel@stlinux.com, lee.jones@linaro.org,
	linux-mtd@lists.infradead.org, pekon@ti.com,
	computersforpeace@gmail.com, dwmw2@infradead.org
Subject: [RFC 20/47] mtd: nand: stm_nand_bch: initialise working buffers
Date: Tue, 25 Mar 2014 08:19:37 +0000	[thread overview]
Message-ID: <1395735604-26706-21-git-send-email-lee.jones@linaro.org> (raw)
In-Reply-To: <1395735604-26706-1-git-send-email-lee.jones@linaro.org>

Initialise working buffers, accomodating DMA alignment constraints.

Signed-off-by: Lee Jones <lee.jones@linaro.org>
---
 drivers/mtd/nand/stm_nand_bch.c | 45 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 45 insertions(+)

diff --git a/drivers/mtd/nand/stm_nand_bch.c b/drivers/mtd/nand/stm_nand_bch.c
index 351f5e2..fafde22 100644
--- a/drivers/mtd/nand/stm_nand_bch.c
+++ b/drivers/mtd/nand/stm_nand_bch.c
@@ -31,6 +31,9 @@
 
 /* NANDi BCH Controller properties */
 #define NANDI_BCH_SECTOR_SIZE			1024
+#define NANDI_BCH_DMA_ALIGNMENT			64
+#define NANDI_BCH_MAX_BUF_LIST			8
+#define NANDI_BCH_BUF_LIST_SIZE			(4 * NANDI_BCH_MAX_BUF_LIST)
 
 /* BCH ECC sizes */
 static int bch_ecc_sizes[] = {
@@ -762,6 +765,44 @@ static void nandi_init_controller(struct nandi_controller *nandi,
 	nandi_init_hamming(nandi, emi_bank);
 }
 
+/* Initialise working buffers, accomodating DMA alignment constraints */
+static int nandi_init_working_buffers(struct nandi_controller *nandi,
+				      struct nandi_bbt_info *bbt_info,
+				      struct mtd_info *mtd)
+{
+	uint32_t bbt_buf_size;
+	uint32_t buf_size;
+
+	/*	- Page and OOB */
+	buf_size = mtd->writesize + mtd->oobsize + NANDI_BCH_DMA_ALIGNMENT;
+
+	/*	- BBT data (page-size aligned) */
+	bbt_info->bbt_size = nandi->blocks_per_device >> 2; /* 2 bits/block */
+	bbt_buf_size = ALIGN(bbt_info->bbt_size, mtd->writesize);
+	buf_size += bbt_buf_size + NANDI_BCH_DMA_ALIGNMENT;
+
+	/*	- BCH BUF list */
+	buf_size += NANDI_BCH_BUF_LIST_SIZE + NANDI_BCH_DMA_ALIGNMENT;
+
+	/* Allocate bufffer */
+	nandi->buf = devm_kzalloc(nandi->dev, buf_size, GFP_KERNEL);
+	if (!nandi->buf) {
+		dev_err(nandi->dev, "failed to allocate working buffers\n");
+		return -ENOMEM;
+	}
+
+	/* Set/Align buffer pointers */
+	nandi->page_buf = PTR_ALIGN(nandi->buf, NANDI_BCH_DMA_ALIGNMENT);
+	nandi->oob_buf  = nandi->page_buf + mtd->writesize;
+	bbt_info->bbt   = PTR_ALIGN(nandi->oob_buf + mtd->oobsize,
+				    NANDI_BCH_DMA_ALIGNMENT);
+	nandi->buf_list = (uint32_t *)PTR_ALIGN(bbt_info->bbt + bbt_buf_size,
+						NANDI_BCH_DMA_ALIGNMENT);
+	nandi->cached_page = -1;
+
+	return 0;
+}
+
 static int remap_named_resource(struct platform_device *pdev,
 				char *name,
 				void __iomem **io_ptr)
@@ -990,6 +1031,10 @@ static int stm_nand_bch_probe(struct platform_device *pdev)
 	/* Tune BCH programs according to device found and ECC mode */
 	bch_configure_progs(nandi);
 
+	err = nandi_init_working_buffers(nandi, bbt_info, mtd);
+	if (err)
+		return err;
+
 	return 0;
 }
 
-- 
1.8.3.2

  parent reply	other threads:[~2014-03-25  8:21 UTC|newest]

Thread overview: 77+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-03-25  8:19 [RFC 00/47] mtd: nand: Add new driver supporting ST's BCH h/w Lee Jones
2014-03-25  8:19 ` [RFC 01/47] mtd: nand: export useful functions from core driver Lee Jones
2014-03-25 12:57   ` Ezequiel Garcia
2014-03-25 14:58     ` Lee Jones
2014-03-25  8:19 ` [RFC 02/47] mtd: nand: add ONFI NAND Timing Mode Specifications Lee Jones
2014-03-25 17:01   ` Jason Gunthorpe
2014-03-25  8:19 ` [RFC 03/47] mtd: nand: add shared register defines for ST's NAND Controller drivers Lee Jones
2014-03-25  8:19 ` [RFC 04/47] mtd: nand: adding ST's BCH NAND Controller driver Lee Jones
2014-03-25  8:19 ` [RFC 05/47] mtd: nand: stm_nand_bch: IRQ support for " Lee Jones
2014-03-26  7:10   ` Gupta, Pekon
2014-03-25  8:19 ` [RFC 06/47] mtd: nand: stm_nand_bch: change between BCH and Hamming modes Lee Jones
2014-03-25  8:19 ` [RFC 07/47] mtd: nand: stm_nand_bch: initialise the BCH Controller Lee Jones
2014-03-26 10:25   ` Gupta, Pekon
2014-04-30 10:22     ` Lee Jones
2014-04-30 10:59       ` Gupta, Pekon
2014-04-30 12:29         ` Lee Jones
2014-03-25  8:19 ` [RFC 08/47] mtd: nand: stm_nand_bch: supply clock support Lee Jones
2014-03-26  7:15   ` Gupta, Pekon
2014-03-25  8:19 ` [RFC 09/47] mtd: nand: stm_nand_bch: introduce and initialise some important data structures Lee Jones
2014-03-25  8:19 ` [RFC 10/47] mtd: nand: stm_nand_bch: initialise the Hamming Controller Lee Jones
2014-03-25  8:19 ` [RFC 11/47] mtd: nand: stm_nand_bch: add Power Management Lee Jones
2014-03-25  8:19 ` [RFC 12/47] mtd: nand: stm_nand_bch: scan for NAND devices Lee Jones
2014-03-25  8:19 ` [RFC 13/47] mtd: nand: stm_nand_bch: provide Device Tree support Lee Jones
2014-03-26  9:18   ` Gupta, Pekon
2014-04-30 12:54     ` Lee Jones
2014-05-05  6:55       ` Gupta, Pekon
2014-05-09 10:03         ` Lee Jones
2014-05-09 10:32           ` Gupta, Pekon
2014-05-09 10:38             ` Lee Jones
2014-05-19 14:02             ` Lee Jones
2014-03-25  8:19 ` [RFC 14/47] mtd: nand: stm_nand_bch: configure BCH and FLEX by ONFI timing mode Lee Jones
2014-03-25  8:19 ` [RFC 15/47] mtd: nand: stm_nand_bch: add compatible page size check Lee Jones
2014-03-25  8:19 ` [RFC 16/47] mtd: nand: stm_nand_bch: derive some working variables for latter use Lee Jones
2014-03-25  8:19 ` [RFC 17/47] mtd: nand: stm_nand_bch: automatically set EEC mode if requested Lee Jones
2014-03-25  8:19 ` [RFC 18/47] mtd: nand: stm_nand_bch: ensure configuration is compatible with this driver Lee Jones
2014-03-25  8:19 ` [RFC 19/47] mtd: nand: stm_nand_bch: configure BCH read/write/erase programs Lee Jones
2014-03-25  8:19 ` Lee Jones [this message]
2014-03-25  8:19 ` [RFC 21/47] mtd: nand: stm_nand_bch: provide shared BCH operations Lee Jones
2014-03-25  8:19 ` [RFC 22/47] mtd: nand: stm_nand_bch: check erased page for zeros Lee Jones
2014-03-25  8:19 ` [RFC 23/47] mtd: nand: stm_nand_bch: read and write page (BCH) Lee Jones
2014-03-26 10:17   ` Gupta, Pekon
2014-04-30 11:19     ` Lee Jones
2014-03-25  8:19 ` [RFC 24/47] mtd: nand: stm_nand_bch: find IBBT signature Lee Jones
2014-03-25  8:19 ` [RFC 25/47] mtd: nand: stm_nand_bch: bad block marking helpers Lee Jones
2014-03-25  8:19 ` [RFC 26/47] mtd: nand: stm_nand_bch: populate IBBT BCH Header Lee Jones
2014-03-25  8:19 ` [RFC 27/47] mtd: nand: stm_nand_bch: write IBBT to Flash Lee Jones
2014-03-25  8:19 ` [RFC 28/47] mtd: nand: stm_nand_bch: update flash-resident BBT(s) Lee Jones
2014-03-25  8:19 ` [RFC 29/47] mtd: nand: stm_nand_bch: add Hamming-FLEX operations Lee Jones
2014-03-25  8:19 ` [RFC 30/47] mtd: nand: stm_nand_bch: read and write raw (FLEX) Lee Jones
2014-03-25  8:19 ` [RFC 31/47] mtd: nand: stm_nand_bch: scan block for BBM(s) according to specified BBT options Lee Jones
2014-03-25  8:19 ` [RFC 32/47] mtd: nand: stm_nand_bch: scan for BBMs and build memory-resident BBT Lee Jones
2014-03-25  8:19 ` [RFC 33/47] mtd: nand: stm_nand_bch: search for and load flash-resident BBT Lee Jones
2014-03-25  8:19 ` [RFC 34/47] mtd: nand: stm_nand_bch: " Lee Jones
2014-03-25  8:19 ` [RFC 35/47] mtd: nand: stm_nand_bch: dump bad blocks Lee Jones
2014-03-25 12:53   ` Ezequiel Garcia
2014-03-25  8:19 ` [RFC 36/47] mtd: nand: stm_nand_bch: parse partitions and register an MTD device Lee Jones
2014-03-25  8:19 ` [RFC 37/47] mtd: nand: stm_nand_bch: fetch the bit-flips threshold Lee Jones
2014-03-25  8:19 ` [RFC 38/47] mtd: nand: stm_nand_bch: check WP (FLEX) Lee Jones
2014-03-25  8:19 ` [RFC 39/47] mtd: nand: stm_nand_bch: read and write ops (FLEX) Lee Jones
2014-03-25  8:19 ` [RFC 40/47] mtd: nand: stm_nand_bch: MTD erase (BCH) Lee Jones
2014-03-25  8:19 ` [RFC 41/47] mtd: nand: stm_nand_bch: MTD mark and check for bad blocks (BCH) Lee Jones
2014-03-25  8:19 ` [RFC 42/47] mtd: nand: stm_nand_bch: add read and write OOB (BCH) Lee Jones
2014-03-25  8:20 ` [RFC 43/47] mtd: nand: stm_nand_bch: read and write functions (BCH) Lee Jones
2014-03-26 10:31   ` Gupta, Pekon
2014-04-30  9:19     ` Lee Jones
2014-03-25  8:20 ` [RFC 44/47] mtd: nand: stm_nand_bch: MTD read and write (BCH) Lee Jones
2014-03-25  8:20 ` [RFC 45/47] mtd: nand: stm_nand_bch: read and write buffers (FLEX) Lee Jones
2014-03-25  8:20 ` [RFC 46/47] mtd: nand: mtd_nand_bch: add remaining FLEX functions Lee Jones
2014-03-25  8:20 ` [RFC 47/47] mtd: nand: stm_nand_bch: catch unsupported calls Lee Jones
2014-03-25 12:50 ` [RFC 00/47] mtd: nand: Add new driver supporting ST's BCH h/w Ezequiel Garcia
2014-03-25 13:11   ` Lee Jones
2014-03-25 22:00     ` Ezequiel Garcia
2014-03-26  7:28       ` Brian Norris
2014-03-27 10:28         ` Lee Jones
2014-04-01 11:29           ` Lee Jones
2014-04-10 20:00             ` Brian Norris
2014-04-30  9:57               ` Lee Jones

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1395735604-26706-21-git-send-email-lee.jones@linaro.org \
    --to=lee.jones@linaro.org \
    --cc=angus.clark@st.com \
    --cc=computersforpeace@gmail.com \
    --cc=dwmw2@infradead.org \
    --cc=kernel@stlinux.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mtd@lists.infradead.org \
    --cc=pekon@ti.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).