public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
* [U-Boot] [PATCH 1/2] mtd: vf610_nfc: remove caching of page in buffer
@ 2015-04-02  9:05 Stefan Agner
  2015-04-02  9:05 ` [U-Boot] [PATCH 2/2] mtd: vf610_nfc: implement OOB only read Stefan Agner
  2015-04-02 20:30 ` [U-Boot] [PATCH 1/2] mtd: vf610_nfc: remove caching of page in buffer Bill Pringlemeir
  0 siblings, 2 replies; 7+ messages in thread
From: Stefan Agner @ 2015-04-02  9:05 UTC (permalink / raw)
  To: u-boot

To improve performance we remember the current page in the buffer
and avoid reading it twice. This implicit page cache increases
complexity while does not increase performance in real world cases.
This patch removes that feature.
---
As discussed in the other patchset...
http://thread.gmane.org/gmane.comp.boot-loaders.u-boot/215802

...I did some performance measurements:

Time to "Starting kernel ..."
- without bad block scan & with UBIFS fastmap: 2.02s
- with bad block scan & with UBIFS fastmap: 3.99s
- without bad block scan & without UBIFS fastmap: 4.42s
- with bad block scan & without UBIFS fastmap: 6.38s

Without page cache (with this patch applied):
Time to "Starting kernel ..."
- without bad block scan & with UBIFS fastmap: 2.02s
- with bad block scan & with UBIFS fastmap: 4.01s
- without bad block scan & without UBIFS fastmap: 4.41s
- with bad block scan & without UBIFS fastmap: 6.39s

I then checked whether that reread occurs at least once with a
printf in the "Already read?" if. It looks like this access
pattern does not occure (anymore?) during a normal boot.

Hence I now vote to get rid of it too...

 drivers/mtd/nand/vf610_nfc.c | 11 +----------
 1 file changed, 1 insertion(+), 10 deletions(-)

diff --git a/drivers/mtd/nand/vf610_nfc.c b/drivers/mtd/nand/vf610_nfc.c
index d98dd28..fa0bb9d 100644
--- a/drivers/mtd/nand/vf610_nfc.c
+++ b/drivers/mtd/nand/vf610_nfc.c
@@ -147,7 +147,6 @@ struct vf610_nfc {
 	uint               column;
 	int                spareonly;
 	int		   page_sz;
-	int                page;
 	/* Status and ID are in alternate locations. */
 	int                alt_buf;
 #define ALT_BUF_ID   1
@@ -347,7 +346,6 @@ static void vf610_nfc_command(struct mtd_info *mtd, unsigned command,
 
 	switch (command) {
 	case NAND_CMD_PAGEPROG:
-		nfc->page = -1;
 		vf610_nfc_transfer_size(nfc->regs, nfc->page_sz);
 		vf610_nfc_send_commands(nfc->regs, NAND_CMD_SEQIN,
 					command, PROGRAM_PAGE_CMD_CODE);
@@ -367,10 +365,6 @@ static void vf610_nfc_command(struct mtd_info *mtd, unsigned command,
 	case NAND_CMD_SEQIN: /* Pre-read for partial writes. */
 	case NAND_CMD_READ0:
 		column = 0;
-		/* Already read? */
-		if (nfc->page == page)
-			return;
-		nfc->page = page;
 		vf610_nfc_transfer_size(nfc->regs, nfc->page_sz);
 		vf610_nfc_send_commands(nfc->regs, NAND_CMD_READ0,
 					NAND_CMD_READSTART, READ_PAGE_CMD_CODE);
@@ -378,7 +372,6 @@ static void vf610_nfc_command(struct mtd_info *mtd, unsigned command,
 		break;
 
 	case NAND_CMD_ERASE1:
-		nfc->page = -1;
 		vf610_nfc_transfer_size(nfc->regs, 0);
 		vf610_nfc_send_commands(nfc->regs, command,
 					NAND_CMD_ERASE2, ERASE_CMD_CODE);
@@ -532,10 +525,8 @@ static inline int vf610_nfc_correct_data(struct mtd_info *mtd, u_char *dat)
 	flip = count_written_bits(dat, nfc->chip.ecc.size, ecc_count);
 
 	/* ECC failed. */
-	if (flip > ecc_count) {
-		nfc->page = -1;
+	if (flip > ecc_count)
 		return -1;
-	}
 
 	/* Erased page. */
 	memset(dat, 0xff, nfc->chip.ecc.size);
-- 
2.3.3

^ permalink raw reply related	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2015-04-07 16:48 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-04-02  9:05 [U-Boot] [PATCH 1/2] mtd: vf610_nfc: remove caching of page in buffer Stefan Agner
2015-04-02  9:05 ` [U-Boot] [PATCH 2/2] mtd: vf610_nfc: implement OOB only read Stefan Agner
2015-04-02 20:30 ` [U-Boot] [PATCH 1/2] mtd: vf610_nfc: remove caching of page in buffer Bill Pringlemeir
2015-04-07 13:14   ` Stefan Agner
2015-04-07 14:24     ` Bill Pringlemeir
2015-04-07 15:09       ` Stefan Agner
2015-04-07 16:48         ` Bill Pringlemeir

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox