All of lore.kernel.org
 help / color / mirror / Atom feed
* [U-Boot] [PATCH 1/5] sf: inline data constants
@ 2012-03-05  4:21 Mike Frysinger
  2012-03-05  4:21 ` [U-Boot] [PATCH 2/5] sf: unify erase commands Mike Frysinger
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: Mike Frysinger @ 2012-03-05  4:21 UTC (permalink / raw)
  To: u-boot

I imagine much of these constants are due to copy & pasting previous
drivers rather than an actual reflection of the hardware layout.  At
any rate, inline the info that we don't care about externally as it
shrinks things nicely.

Signed-off-by: Mike Frysinger <vapier@gentoo.org>
---
 drivers/mtd/spi/eon.c      |   19 +++----------------
 drivers/mtd/spi/macronix.c |   29 ++---------------------------
 drivers/mtd/spi/spansion.c |   13 ++-----------
 drivers/mtd/spi/stmicro.c  |   13 ++-----------
 drivers/mtd/spi/winbond.c  |   40 +++-------------------------------------
 5 files changed, 12 insertions(+), 102 deletions(-)

diff --git a/drivers/mtd/spi/eon.c b/drivers/mtd/spi/eon.c
index 6a3bf0f..eccdf83 100644
--- a/drivers/mtd/spi/eon.c
+++ b/drivers/mtd/spi/eon.c
@@ -16,9 +16,6 @@
 
 struct eon_spi_flash_params {
 	u8 idcode1;
-	u16 page_size;
-	u16 pages_per_sector;
-	u16 sectors_per_block;
 	u16 nr_sectors;
 	const char *name;
 };
@@ -26,25 +23,16 @@ struct eon_spi_flash_params {
 static const struct eon_spi_flash_params eon_spi_flash_table[] = {
 	{
 		.idcode1 = 0x16,
-		.page_size = 256,
-		.pages_per_sector = 16,
-		.sectors_per_block = 16,
 		.nr_sectors = 1024,
 		.name = "EN25Q32B",
 	},
 	{
 		.idcode1 = 0x18,
-		.page_size = 256,
-		.pages_per_sector = 16,
-		.sectors_per_block = 16,
 		.nr_sectors = 4096,
 		.name = "EN25Q128",
 	},
 	{
 		.idcode1 = 0x16,
-		.page_size = 256,
-		.pages_per_sector = 16,
-		.sectors_per_block = 16,
 		.nr_sectors = 1024,
 		.name = "EN25Q32B",
 	},
@@ -84,10 +72,9 @@ struct spi_flash *spi_flash_probe_eon(struct spi_slave *spi, u8 *idcode)
 	flash->write = spi_flash_cmd_write_multi;
 	flash->erase = eon_erase;
 	flash->read = spi_flash_cmd_read_fast;
-	flash->page_size = params->page_size;
-	flash->sector_size = params->page_size * params->pages_per_sector
-	    * params->sectors_per_block;
-	flash->size = params->page_size * params->pages_per_sector
+	flash->page_size = 256;
+	flash->sector_size = 256 * 16 * 16;
+	flash->size = 256 * 16
 	    * params->nr_sectors;
 
 	return flash;
diff --git a/drivers/mtd/spi/macronix.c b/drivers/mtd/spi/macronix.c
index 87a3ad0..894b1ca 100644
--- a/drivers/mtd/spi/macronix.c
+++ b/drivers/mtd/spi/macronix.c
@@ -42,9 +42,6 @@
 
 struct macronix_spi_flash_params {
 	u16 idcode;
-	u16 page_size;
-	u16 pages_per_sector;
-	u16 sectors_per_block;
 	u16 nr_blocks;
 	const char *name;
 };
@@ -52,57 +49,36 @@ struct macronix_spi_flash_params {
 static const struct macronix_spi_flash_params macronix_spi_flash_table[] = {
 	{
 		.idcode = 0x2013,
-		.page_size = 256,
-		.pages_per_sector = 16,
-		.sectors_per_block = 16,
 		.nr_blocks = 8,
 		.name = "MX25L4005",
 	},
 	{
 		.idcode = 0x2014,
-		.page_size = 256,
-		.pages_per_sector = 16,
-		.sectors_per_block = 16,
 		.nr_blocks = 16,
 		.name = "MX25L8005",
 	},
 	{
 		.idcode = 0x2015,
-		.page_size = 256,
-		.pages_per_sector = 16,
-		.sectors_per_block = 16,
 		.nr_blocks = 32,
 		.name = "MX25L1605D",
 	},
 	{
 		.idcode = 0x2016,
-		.page_size = 256,
-		.pages_per_sector = 16,
-		.sectors_per_block = 16,
 		.nr_blocks = 64,
 		.name = "MX25L3205D",
 	},
 	{
 		.idcode = 0x2017,
-		.page_size = 256,
-		.pages_per_sector = 16,
-		.sectors_per_block = 16,
 		.nr_blocks = 128,
 		.name = "MX25L6405D",
 	},
 	{
 		.idcode = 0x2018,
-		.page_size = 256,
-		.pages_per_sector = 16,
-		.sectors_per_block = 16,
 		.nr_blocks = 256,
 		.name = "MX25L12805D",
 	},
 	{
 		.idcode = 0x2618,
-		.page_size = 256,
-		.pages_per_sector = 16,
-		.sectors_per_block = 16,
 		.nr_blocks = 256,
 		.name = "MX25L12855E",
 	},
@@ -182,9 +158,8 @@ struct spi_flash *spi_flash_probe_macronix(struct spi_slave *spi, u8 *idcode)
 	flash->write = spi_flash_cmd_write_multi;
 	flash->erase = macronix_erase;
 	flash->read = spi_flash_cmd_read_fast;
-	flash->page_size = params->page_size;
-	flash->sector_size = params->page_size * params->pages_per_sector
-		* params->sectors_per_block;
+	flash->page_size = 256;
+	flash->sector_size = 256 * 16 * 16;
 	flash->size = flash->sector_size * params->nr_blocks;
 
 	/* Clear BP# bits for read-only flash */
diff --git a/drivers/mtd/spi/spansion.c b/drivers/mtd/spi/spansion.c
index 457cc06..bedde07 100644
--- a/drivers/mtd/spi/spansion.c
+++ b/drivers/mtd/spi/spansion.c
@@ -38,7 +38,6 @@
 struct spansion_spi_flash_params {
 	u16 idcode1;
 	u16 idcode2;
-	u16 page_size;
 	u16 pages_per_sector;
 	u16 nr_sectors;
 	const char *name;
@@ -48,7 +47,6 @@ static const struct spansion_spi_flash_params spansion_spi_flash_table[] = {
 	{
 		.idcode1 = 0x0213,
 		.idcode2 = 0,
-		.page_size = 256,
 		.pages_per_sector = 256,
 		.nr_sectors = 16,
 		.name = "S25FL008A",
@@ -56,7 +54,6 @@ static const struct spansion_spi_flash_params spansion_spi_flash_table[] = {
 	{
 		.idcode1 = 0x0214,
 		.idcode2 = 0,
-		.page_size = 256,
 		.pages_per_sector = 256,
 		.nr_sectors = 32,
 		.name = "S25FL016A",
@@ -64,7 +61,6 @@ static const struct spansion_spi_flash_params spansion_spi_flash_table[] = {
 	{
 		.idcode1 = 0x0215,
 		.idcode2 = 0,
-		.page_size = 256,
 		.pages_per_sector = 256,
 		.nr_sectors = 64,
 		.name = "S25FL032A",
@@ -72,7 +68,6 @@ static const struct spansion_spi_flash_params spansion_spi_flash_table[] = {
 	{
 		.idcode1 = 0x0216,
 		.idcode2 = 0,
-		.page_size = 256,
 		.pages_per_sector = 256,
 		.nr_sectors = 128,
 		.name = "S25FL064A",
@@ -80,7 +75,6 @@ static const struct spansion_spi_flash_params spansion_spi_flash_table[] = {
 	{
 		.idcode1 = 0x2018,
 		.idcode2 = 0x0301,
-		.page_size = 256,
 		.pages_per_sector = 256,
 		.nr_sectors = 256,
 		.name = "S25FL128P_64K",
@@ -88,7 +82,6 @@ static const struct spansion_spi_flash_params spansion_spi_flash_table[] = {
 	{
 		.idcode1 = 0x2018,
 		.idcode2 = 0x0300,
-		.page_size = 256,
 		.pages_per_sector = 1024,
 		.nr_sectors = 64,
 		.name = "S25FL128P_256K",
@@ -96,7 +89,6 @@ static const struct spansion_spi_flash_params spansion_spi_flash_table[] = {
 	{
 		.idcode1 = 0x0215,
 		.idcode2 = 0x4d00,
-		.page_size = 256,
 		.pages_per_sector = 256,
 		.nr_sectors = 64,
 		.name = "S25FL032P",
@@ -104,7 +96,6 @@ static const struct spansion_spi_flash_params spansion_spi_flash_table[] = {
 	{
 		.idcode1 = 0x2018,
 		.idcode2 = 0x4d01,
-		.page_size = 256,
 		.pages_per_sector = 256,
 		.nr_sectors = 256,
 		.name = "S25FL129P_64K",
@@ -151,8 +142,8 @@ struct spi_flash *spi_flash_probe_spansion(struct spi_slave *spi, u8 *idcode)
 	flash->write = spi_flash_cmd_write_multi;
 	flash->erase = spansion_erase;
 	flash->read = spi_flash_cmd_read_fast;
-	flash->page_size = params->page_size;
-	flash->sector_size = params->page_size * params->pages_per_sector;
+	flash->page_size = 256;
+	flash->sector_size = 256 * params->pages_per_sector;
 	flash->size = flash->sector_size * params->nr_sectors;
 
 	return flash;
diff --git a/drivers/mtd/spi/stmicro.c b/drivers/mtd/spi/stmicro.c
index 5b68479..6f7b807 100644
--- a/drivers/mtd/spi/stmicro.c
+++ b/drivers/mtd/spi/stmicro.c
@@ -40,7 +40,6 @@
 
 struct stmicro_spi_flash_params {
 	u8 idcode1;
-	u16 page_size;
 	u16 pages_per_sector;
 	u16 nr_sectors;
 	const char *name;
@@ -49,56 +48,48 @@ struct stmicro_spi_flash_params {
 static const struct stmicro_spi_flash_params stmicro_spi_flash_table[] = {
 	{
 		.idcode1 = 0x11,
-		.page_size = 256,
 		.pages_per_sector = 128,
 		.nr_sectors = 4,
 		.name = "M25P10",
 	},
 	{
 		.idcode1 = 0x15,
-		.page_size = 256,
 		.pages_per_sector = 256,
 		.nr_sectors = 32,
 		.name = "M25P16",
 	},
 	{
 		.idcode1 = 0x12,
-		.page_size = 256,
 		.pages_per_sector = 256,
 		.nr_sectors = 4,
 		.name = "M25P20",
 	},
 	{
 		.idcode1 = 0x16,
-		.page_size = 256,
 		.pages_per_sector = 256,
 		.nr_sectors = 64,
 		.name = "M25P32",
 	},
 	{
 		.idcode1 = 0x13,
-		.page_size = 256,
 		.pages_per_sector = 256,
 		.nr_sectors = 8,
 		.name = "M25P40",
 	},
 	{
 		.idcode1 = 0x17,
-		.page_size = 256,
 		.pages_per_sector = 256,
 		.nr_sectors = 128,
 		.name = "M25P64",
 	},
 	{
 		.idcode1 = 0x14,
-		.page_size = 256,
 		.pages_per_sector = 256,
 		.nr_sectors = 16,
 		.name = "M25P80",
 	},
 	{
 		.idcode1 = 0x18,
-		.page_size = 256,
 		.pages_per_sector = 1024,
 		.nr_sectors = 64,
 		.name = "M25P128",
@@ -153,8 +144,8 @@ struct spi_flash *spi_flash_probe_stmicro(struct spi_slave *spi, u8 * idcode)
 	flash->write = spi_flash_cmd_write_multi;
 	flash->erase = stmicro_erase;
 	flash->read = spi_flash_cmd_read_fast;
-	flash->page_size = params->page_size;
-	flash->sector_size = params->page_size * params->pages_per_sector;
+	flash->page_size = 256;
+	flash->sector_size = 256 * params->pages_per_sector;
 	flash->size = flash->sector_size * params->nr_sectors;
 
 	return flash;
diff --git a/drivers/mtd/spi/winbond.c b/drivers/mtd/spi/winbond.c
index 05e555a..b07d949 100644
--- a/drivers/mtd/spi/winbond.c
+++ b/drivers/mtd/spi/winbond.c
@@ -17,10 +17,6 @@
 
 struct winbond_spi_flash_params {
 	uint16_t	id;
-	/* Log2 of page size in power-of-two mode */
-	uint8_t		l2_page_size;
-	uint16_t	pages_per_sector;
-	uint16_t	sectors_per_block;
 	uint16_t	nr_blocks;
 	const char	*name;
 };
@@ -28,65 +24,41 @@ struct winbond_spi_flash_params {
 static const struct winbond_spi_flash_params winbond_spi_flash_table[] = {
 	{
 		.id			= 0x3013,
-		.l2_page_size		= 8,
-		.pages_per_sector	= 16,
-		.sectors_per_block	= 16,
 		.nr_blocks		= 8,
 		.name			= "W25X40",
 	},
 	{
 		.id			= 0x3015,
-		.l2_page_size		= 8,
-		.pages_per_sector	= 16,
-		.sectors_per_block	= 16,
 		.nr_blocks		= 32,
 		.name			= "W25X16",
 	},
 	{
 		.id			= 0x3016,
-		.l2_page_size		= 8,
-		.pages_per_sector	= 16,
-		.sectors_per_block	= 16,
 		.nr_blocks		= 64,
 		.name			= "W25X32",
 	},
 	{
 		.id			= 0x3017,
-		.l2_page_size		= 8,
-		.pages_per_sector	= 16,
-		.sectors_per_block	= 16,
 		.nr_blocks		= 128,
 		.name			= "W25X64",
 	},
 	{
 		.id			= 0x4015,
-		.l2_page_size		= 8,
-		.pages_per_sector	= 16,
-		.sectors_per_block	= 16,
 		.nr_blocks		= 32,
 		.name			= "W25Q16",
 	},
 	{
 		.id			= 0x4016,
-		.l2_page_size		= 8,
-		.pages_per_sector	= 16,
-		.sectors_per_block	= 16,
 		.nr_blocks		= 64,
 		.name			= "W25Q32",
 	},
 	{
 		.id			= 0x4017,
-		.l2_page_size		= 8,
-		.pages_per_sector	= 16,
-		.sectors_per_block	= 16,
 		.nr_blocks		= 128,
 		.name			= "W25Q64",
 	},
 	{
 		.id			= 0x4018,
-		.l2_page_size		= 8,
-		.pages_per_sector	= 16,
-		.sectors_per_block	= 16,
 		.nr_blocks		= 256,
 		.name			= "W25Q128",
 	},
@@ -102,7 +74,6 @@ struct spi_flash *spi_flash_probe_winbond(struct spi_slave *spi, u8 *idcode)
 	const struct winbond_spi_flash_params *params;
 	struct spi_flash *flash;
 	unsigned int i;
-	unsigned page_size;
 
 	for (i = 0; i < ARRAY_SIZE(winbond_spi_flash_table); i++) {
 		params = &winbond_spi_flash_table[i];
@@ -125,17 +96,12 @@ struct spi_flash *spi_flash_probe_winbond(struct spi_slave *spi, u8 *idcode)
 	flash->spi = spi;
 	flash->name = params->name;
 
-	/* Assuming power-of-two page size initially. */
-	page_size = 1 << params->l2_page_size;
-
 	flash->write = spi_flash_cmd_write_multi;
 	flash->erase = winbond_erase;
 	flash->read = spi_flash_cmd_read_fast;
-	flash->page_size = page_size;
-	flash->sector_size = page_size * params->pages_per_sector;
-	flash->size = page_size * params->pages_per_sector
-				* params->sectors_per_block
-				* params->nr_blocks;
+	flash->page_size = 4096;
+	flash->sector_size = 4096;
+	flash->size = 4096 * 16 * params->nr_blocks;
 
 	return flash;
 }
-- 
1.7.8.4

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

* [U-Boot] [PATCH 2/5] sf: unify erase commands
  2012-03-05  4:21 [U-Boot] [PATCH 1/5] sf: inline data constants Mike Frysinger
@ 2012-03-05  4:21 ` Mike Frysinger
  2012-03-05  4:21 ` [U-Boot] [PATCH 3/5] sf: eon: drop duplicate id Mike Frysinger
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: Mike Frysinger @ 2012-03-05  4:21 UTC (permalink / raw)
  To: u-boot

Analysis of the flash drivers shows that they all use 0x20 if the erase
size is 4KiB, or 0xd8 if it's larger.  So with this info in hand, we can
unify all the erase functionality in one place.

Signed-off-by: Mike Frysinger <vapier@gentoo.org>
---
 drivers/mtd/spi/eon.c                |   11 +----------
 drivers/mtd/spi/macronix.c           |   12 +-----------
 drivers/mtd/spi/spansion.c           |   11 +----------
 drivers/mtd/spi/spi_flash.c          |    8 +++++---
 drivers/mtd/spi/spi_flash_internal.h |    7 +++++--
 drivers/mtd/spi/sst.c                |   19 +++----------------
 drivers/mtd/spi/stmicro.c            |    9 +--------
 drivers/mtd/spi/winbond.c            |   12 +-----------
 8 files changed, 18 insertions(+), 71 deletions(-)

diff --git a/drivers/mtd/spi/eon.c b/drivers/mtd/spi/eon.c
index eccdf83..d9d43ca 100644
--- a/drivers/mtd/spi/eon.c
+++ b/drivers/mtd/spi/eon.c
@@ -10,10 +10,6 @@
 
 #include "spi_flash_internal.h"
 
-/* EN25Q128-specific commands */
-#define CMD_EN25Q128_SE		0x20    /* Sector Erase */
-#define CMD_EN25Q128_BE		0xd8    /* Block Erase */
-
 struct eon_spi_flash_params {
 	u8 idcode1;
 	u16 nr_sectors;
@@ -38,11 +34,6 @@ static const struct eon_spi_flash_params eon_spi_flash_table[] = {
 	},
 };
 
-static int eon_erase(struct spi_flash *flash, u32 offset, size_t len)
-{
-	return spi_flash_cmd_erase(flash, CMD_EN25Q128_BE, offset, len);
-}
-
 struct spi_flash *spi_flash_probe_eon(struct spi_slave *spi, u8 *idcode)
 {
 	const struct eon_spi_flash_params *params;
@@ -70,7 +61,7 @@ struct spi_flash *spi_flash_probe_eon(struct spi_slave *spi, u8 *idcode)
 	flash->name = params->name;
 
 	flash->write = spi_flash_cmd_write_multi;
-	flash->erase = eon_erase;
+	flash->erase = spi_flash_cmd_erase;
 	flash->read = spi_flash_cmd_read_fast;
 	flash->page_size = 256;
 	flash->sector_size = 256 * 16 * 16;
diff --git a/drivers/mtd/spi/macronix.c b/drivers/mtd/spi/macronix.c
index 894b1ca..5268c66 100644
--- a/drivers/mtd/spi/macronix.c
+++ b/drivers/mtd/spi/macronix.c
@@ -35,11 +35,6 @@
 
 #include "spi_flash_internal.h"
 
-/* MX25xx-specific commands */
-#define CMD_MX25XX_SE		0x20	/* Sector Erase */
-#define CMD_MX25XX_BE		0xD8	/* Block Erase */
-#define CMD_MX25XX_CE		0xc7	/* Chip Erase */
-
 struct macronix_spi_flash_params {
 	u16 idcode;
 	u16 nr_blocks;
@@ -123,11 +118,6 @@ static int macronix_unlock(struct spi_flash *flash)
 	return ret;
 }
 
-static int macronix_erase(struct spi_flash *flash, u32 offset, size_t len)
-{
-	return spi_flash_cmd_erase(flash, CMD_MX25XX_BE, offset, len);
-}
-
 struct spi_flash *spi_flash_probe_macronix(struct spi_slave *spi, u8 *idcode)
 {
 	const struct macronix_spi_flash_params *params;
@@ -156,7 +146,7 @@ struct spi_flash *spi_flash_probe_macronix(struct spi_slave *spi, u8 *idcode)
 	flash->name = params->name;
 
 	flash->write = spi_flash_cmd_write_multi;
-	flash->erase = macronix_erase;
+	flash->erase = spi_flash_cmd_erase;
 	flash->read = spi_flash_cmd_read_fast;
 	flash->page_size = 256;
 	flash->sector_size = 256 * 16 * 16;
diff --git a/drivers/mtd/spi/spansion.c b/drivers/mtd/spi/spansion.c
index bedde07..9a114ac 100644
--- a/drivers/mtd/spi/spansion.c
+++ b/drivers/mtd/spi/spansion.c
@@ -31,10 +31,6 @@
 
 #include "spi_flash_internal.h"
 
-/* S25FLxx-specific commands */
-#define CMD_S25FLXX_SE		0xd8	/* Sector Erase */
-#define CMD_S25FLXX_BE		0xc7	/* Bulk Erase */
-
 struct spansion_spi_flash_params {
 	u16 idcode1;
 	u16 idcode2;
@@ -102,11 +98,6 @@ static const struct spansion_spi_flash_params spansion_spi_flash_table[] = {
 	},
 };
 
-static int spansion_erase(struct spi_flash *flash, u32 offset, size_t len)
-{
-	return spi_flash_cmd_erase(flash, CMD_S25FLXX_SE, offset, len);
-}
-
 struct spi_flash *spi_flash_probe_spansion(struct spi_slave *spi, u8 *idcode)
 {
 	const struct spansion_spi_flash_params *params;
@@ -140,7 +131,7 @@ struct spi_flash *spi_flash_probe_spansion(struct spi_slave *spi, u8 *idcode)
 	flash->name = params->name;
 
 	flash->write = spi_flash_cmd_write_multi;
-	flash->erase = spansion_erase;
+	flash->erase = spi_flash_cmd_erase;
 	flash->read = spi_flash_cmd_read_fast;
 	flash->page_size = 256;
 	flash->sector_size = 256 * params->pages_per_sector;
diff --git a/drivers/mtd/spi/spi_flash.c b/drivers/mtd/spi/spi_flash.c
index f689cc4..4ab4e13 100644
--- a/drivers/mtd/spi/spi_flash.c
+++ b/drivers/mtd/spi/spi_flash.c
@@ -190,8 +190,7 @@ int spi_flash_cmd_wait_ready(struct spi_flash *flash, unsigned long timeout)
 		CMD_READ_STATUS, STATUS_WIP);
 }
 
-int spi_flash_cmd_erase(struct spi_flash *flash, u8 erase_cmd,
-			u32 offset, size_t len)
+int spi_flash_cmd_erase(struct spi_flash *flash, u32 offset, size_t len)
 {
 	u32 start, end, erase_size;
 	int ret;
@@ -209,7 +208,10 @@ int spi_flash_cmd_erase(struct spi_flash *flash, u8 erase_cmd,
 		return ret;
 	}
 
-	cmd[0] = erase_cmd;
+	if (erase_size == 4096)
+		cmd[0] = CMD_ERASE_4K;
+	else
+		cmd[0] = CMD_ERASE_64K;
 	start = offset;
 	end = start + len;
 
diff --git a/drivers/mtd/spi/spi_flash_internal.h b/drivers/mtd/spi/spi_flash_internal.h
index 0c78249..3c6bccf 100644
--- a/drivers/mtd/spi/spi_flash_internal.h
+++ b/drivers/mtd/spi/spi_flash_internal.h
@@ -23,6 +23,10 @@
 #define CMD_WRITE_DISABLE		0x04
 #define CMD_READ_STATUS			0x05
 #define CMD_WRITE_ENABLE		0x06
+#define CMD_ERASE_4K			0x20
+#define CMD_ERASE_32K			0x52
+#define CMD_ERASE_64K			0xd8
+#define CMD_ERASE_CHIP			0xc7
 
 /* Common status */
 #define STATUS_WIP			0x01
@@ -88,8 +92,7 @@ int spi_flash_cmd_poll_bit(struct spi_flash *flash, unsigned long timeout,
 int spi_flash_cmd_wait_ready(struct spi_flash *flash, unsigned long timeout);
 
 /* Erase sectors. */
-int spi_flash_cmd_erase(struct spi_flash *flash, u8 erase_cmd,
-			u32 offset, size_t len);
+int spi_flash_cmd_erase(struct spi_flash *flash, u32 offset, size_t len);
 
 /* Manufacturer-specific probe functions */
 struct spi_flash *spi_flash_probe_spansion(struct spi_slave *spi, u8 *idcode);
diff --git a/drivers/mtd/spi/sst.c b/drivers/mtd/spi/sst.c
index e51dfc7..dcc0bbe 100644
--- a/drivers/mtd/spi/sst.c
+++ b/drivers/mtd/spi/sst.c
@@ -20,7 +20,6 @@
 
 #define CMD_SST_BP		0x02	/* Byte Program */
 #define CMD_SST_AAI_WP		0xAD	/* Auto Address Increment Word Program */
-#define CMD_SST_SE		0x20	/* Sector Erase */
 
 #define SST_SR_WIP		(1 << 0)	/* Write-in-Progress */
 #define SST_SR_WEL		(1 << 1)	/* Write enable */
@@ -45,13 +44,6 @@ struct sst_spi_flash {
 	const struct sst_spi_flash_params *params;
 };
 
-static inline struct sst_spi_flash *to_sst_spi_flash(struct spi_flash *flash)
-{
-	return container_of(flash, struct sst_spi_flash, flash);
-}
-
-#define SST_SECTOR_SIZE (4 * 1024)
-#define SST_PAGE_SIZE   256
 static const struct sst_spi_flash_params sst_spi_flash_table[] = {
 	{
 		.idcode1 = 0x8d,
@@ -211,11 +203,6 @@ sst_write_wp(struct spi_flash *flash, u32 offset, size_t len, const void *buf)
 	return ret;
 }
 
-static int sst_erase(struct spi_flash *flash, u32 offset, size_t len)
-{
-	return spi_flash_cmd_erase(flash, CMD_SST_SE, offset, len);
-}
-
 static int
 sst_unlock(struct spi_flash *flash)
 {
@@ -269,10 +256,10 @@ spi_flash_probe_sst(struct spi_slave *spi, u8 *idcode)
 		stm->flash.write = sst_write_wp;
 	else
 		stm->flash.write = spi_flash_cmd_write_multi;
-	stm->flash.erase = sst_erase;
+	stm->flash.erase = spi_flash_cmd_erase;
 	stm->flash.read = spi_flash_cmd_read_fast;
-	stm->flash.page_size = SST_PAGE_SIZE;
-	stm->flash.sector_size = SST_SECTOR_SIZE;
+	stm->flash.page_size = 256;
+	stm->flash.sector_size = 4096;
 	stm->flash.size = stm->flash.sector_size * params->nr_sectors;
 
 	/* Flash powers up read-only, so clear BP# bits */
diff --git a/drivers/mtd/spi/stmicro.c b/drivers/mtd/spi/stmicro.c
index 6f7b807..75d6822 100644
--- a/drivers/mtd/spi/stmicro.c
+++ b/drivers/mtd/spi/stmicro.c
@@ -34,8 +34,6 @@
 #include "spi_flash_internal.h"
 
 /* M25Pxx-specific commands */
-#define CMD_M25PXX_SE		0xd8	/* Sector Erase */
-#define CMD_M25PXX_BE		0xc7	/* Bulk Erase */
 #define CMD_M25PXX_RES		0xab	/* Release from DP, and Read Signature */
 
 struct stmicro_spi_flash_params {
@@ -96,11 +94,6 @@ static const struct stmicro_spi_flash_params stmicro_spi_flash_table[] = {
 	},
 };
 
-static int stmicro_erase(struct spi_flash *flash, u32 offset, size_t len)
-{
-	return spi_flash_cmd_erase(flash, CMD_M25PXX_SE, offset, len);
-}
-
 struct spi_flash *spi_flash_probe_stmicro(struct spi_slave *spi, u8 * idcode)
 {
 	const struct stmicro_spi_flash_params *params;
@@ -142,7 +135,7 @@ struct spi_flash *spi_flash_probe_stmicro(struct spi_slave *spi, u8 * idcode)
 	flash->name = params->name;
 
 	flash->write = spi_flash_cmd_write_multi;
-	flash->erase = stmicro_erase;
+	flash->erase = spi_flash_cmd_erase;
 	flash->read = spi_flash_cmd_read_fast;
 	flash->page_size = 256;
 	flash->sector_size = 256 * params->pages_per_sector;
diff --git a/drivers/mtd/spi/winbond.c b/drivers/mtd/spi/winbond.c
index b07d949..0fc2877 100644
--- a/drivers/mtd/spi/winbond.c
+++ b/drivers/mtd/spi/winbond.c
@@ -10,11 +10,6 @@
 
 #include "spi_flash_internal.h"
 
-/* M25Pxx-specific commands */
-#define CMD_W25_SE		0x20	/* Sector (4K) Erase */
-#define CMD_W25_BE		0xd8	/* Block (64K) Erase */
-#define CMD_W25_CE		0xc7	/* Chip Erase */
-
 struct winbond_spi_flash_params {
 	uint16_t	id;
 	uint16_t	nr_blocks;
@@ -64,11 +59,6 @@ static const struct winbond_spi_flash_params winbond_spi_flash_table[] = {
 	},
 };
 
-static int winbond_erase(struct spi_flash *flash, u32 offset, size_t len)
-{
-	return spi_flash_cmd_erase(flash, CMD_W25_SE, offset, len);
-}
-
 struct spi_flash *spi_flash_probe_winbond(struct spi_slave *spi, u8 *idcode)
 {
 	const struct winbond_spi_flash_params *params;
@@ -97,7 +87,7 @@ struct spi_flash *spi_flash_probe_winbond(struct spi_slave *spi, u8 *idcode)
 	flash->name = params->name;
 
 	flash->write = spi_flash_cmd_write_multi;
-	flash->erase = winbond_erase;
+	flash->erase = spi_flash_cmd_erase;
 	flash->read = spi_flash_cmd_read_fast;
 	flash->page_size = 4096;
 	flash->sector_size = 4096;
-- 
1.7.8.4

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

* [U-Boot] [PATCH 3/5] sf: eon: drop duplicate id
  2012-03-05  4:21 [U-Boot] [PATCH 1/5] sf: inline data constants Mike Frysinger
  2012-03-05  4:21 ` [U-Boot] [PATCH 2/5] sf: unify erase commands Mike Frysinger
@ 2012-03-05  4:21 ` Mike Frysinger
  2012-03-05  4:21 ` [U-Boot] [PATCH 4/5] sf: sst: inline duplicate write enable helper funcs Mike Frysinger
  2012-03-05  4:21 ` [U-Boot] [PATCH 5/5] sf: unify status register writing (and thus block unlocking) Mike Frysinger
  3 siblings, 0 replies; 5+ messages in thread
From: Mike Frysinger @ 2012-03-05  4:21 UTC (permalink / raw)
  To: u-boot

Looks like Shaohui Xie's patch got merged twice.

Signed-off-by: Mike Frysinger <vapier@gentoo.org>
---
 drivers/mtd/spi/eon.c |    5 -----
 1 files changed, 0 insertions(+), 5 deletions(-)

diff --git a/drivers/mtd/spi/eon.c b/drivers/mtd/spi/eon.c
index d9d43ca..691ed4e 100644
--- a/drivers/mtd/spi/eon.c
+++ b/drivers/mtd/spi/eon.c
@@ -27,11 +27,6 @@ static const struct eon_spi_flash_params eon_spi_flash_table[] = {
 		.nr_sectors = 4096,
 		.name = "EN25Q128",
 	},
-	{
-		.idcode1 = 0x16,
-		.nr_sectors = 1024,
-		.name = "EN25Q32B",
-	},
 };
 
 struct spi_flash *spi_flash_probe_eon(struct spi_slave *spi, u8 *idcode)
-- 
1.7.8.4

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

* [U-Boot] [PATCH 4/5] sf: sst: inline duplicate write enable helper funcs
  2012-03-05  4:21 [U-Boot] [PATCH 1/5] sf: inline data constants Mike Frysinger
  2012-03-05  4:21 ` [U-Boot] [PATCH 2/5] sf: unify erase commands Mike Frysinger
  2012-03-05  4:21 ` [U-Boot] [PATCH 3/5] sf: eon: drop duplicate id Mike Frysinger
@ 2012-03-05  4:21 ` Mike Frysinger
  2012-03-05  4:21 ` [U-Boot] [PATCH 5/5] sf: unify status register writing (and thus block unlocking) Mike Frysinger
  3 siblings, 0 replies; 5+ messages in thread
From: Mike Frysinger @ 2012-03-05  4:21 UTC (permalink / raw)
  To: u-boot

The local sst enable/disable write funcs don't really add anything
over the common API, so just inline the common calls directly.

Signed-off-by: Mike Frysinger <vapier@gentoo.org>
---
 drivers/mtd/spi/sst.c |   26 ++++----------------------
 1 files changed, 4 insertions(+), 22 deletions(-)

diff --git a/drivers/mtd/spi/sst.c b/drivers/mtd/spi/sst.c
index dcc0bbe..04cc50a 100644
--- a/drivers/mtd/spi/sst.c
+++ b/drivers/mtd/spi/sst.c
@@ -94,24 +94,6 @@ static const struct sst_spi_flash_params sst_spi_flash_table[] = {
 };
 
 static int
-sst_enable_writing(struct spi_flash *flash)
-{
-	int ret = spi_flash_cmd_write_enable(flash);
-	if (ret)
-		debug("SF: Enabling Write failed\n");
-	return ret;
-}
-
-static int
-sst_disable_writing(struct spi_flash *flash)
-{
-	int ret = spi_flash_cmd_write_disable(flash);
-	if (ret)
-		debug("SF: Disabling Write failed\n");
-	return ret;
-}
-
-static int
 sst_byte_write(struct spi_flash *flash, u32 offset, const void *buf)
 {
 	int ret;
@@ -125,7 +107,7 @@ sst_byte_write(struct spi_flash *flash, u32 offset, const void *buf)
 	debug("BP[%02x]: 0x%p => cmd = { 0x%02x 0x%06x }\n",
 		spi_w8r8(flash->spi, CMD_READ_STATUS), buf, cmd[0], offset);
 
-	ret = sst_enable_writing(flash);
+	ret = spi_flash_cmd_write_enable(flash);
 	if (ret)
 		return ret;
 
@@ -158,7 +140,7 @@ sst_write_wp(struct spi_flash *flash, u32 offset, size_t len, const void *buf)
 	}
 	offset += actual;
 
-	ret = sst_enable_writing(flash);
+	ret = spi_flash_cmd_write_enable(flash);
 	if (ret)
 		goto done;
 
@@ -189,7 +171,7 @@ sst_write_wp(struct spi_flash *flash, u32 offset, size_t len, const void *buf)
 	}
 
 	if (!ret)
-		ret = sst_disable_writing(flash);
+		ret = spi_flash_cmd_write_disable(flash);
 
 	/* If there is a single trailing byte, write it out */
 	if (!ret && actual != len)
@@ -209,7 +191,7 @@ sst_unlock(struct spi_flash *flash)
 	int ret;
 	u8 cmd, status;
 
-	ret = sst_enable_writing(flash);
+	ret = spi_flash_cmd_write_enable(flash);
 	if (ret)
 		return ret;
 
-- 
1.7.8.4

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

* [U-Boot] [PATCH 5/5] sf: unify status register writing (and thus block unlocking)
  2012-03-05  4:21 [U-Boot] [PATCH 1/5] sf: inline data constants Mike Frysinger
                   ` (2 preceding siblings ...)
  2012-03-05  4:21 ` [U-Boot] [PATCH 4/5] sf: sst: inline duplicate write enable helper funcs Mike Frysinger
@ 2012-03-05  4:21 ` Mike Frysinger
  3 siblings, 0 replies; 5+ messages in thread
From: Mike Frysinger @ 2012-03-05  4:21 UTC (permalink / raw)
  To: u-boot

The only two drivers to write the status register do it in the same
way, so unify the implementations.  This also makes the block unlock
logic the same.

Signed-off-by: Mike Frysinger <vapier@gentoo.org>
---
 drivers/mtd/spi/macronix.c           |   41 +---------------------------------
 drivers/mtd/spi/spi_flash.c          |   27 ++++++++++++++++++++++
 drivers/mtd/spi/spi_flash_internal.h |    3 ++
 drivers/mtd/spi/sst.c                |   23 +------------------
 4 files changed, 32 insertions(+), 62 deletions(-)

diff --git a/drivers/mtd/spi/macronix.c b/drivers/mtd/spi/macronix.c
index 5268c66..c97a39d 100644
--- a/drivers/mtd/spi/macronix.c
+++ b/drivers/mtd/spi/macronix.c
@@ -79,45 +79,6 @@ static const struct macronix_spi_flash_params macronix_spi_flash_table[] = {
 	},
 };
 
-static int macronix_write_status(struct spi_flash *flash, u8 sr)
-{
-	u8 cmd;
-	int ret;
-
-	ret = spi_flash_cmd_write_enable(flash);
-	if (ret < 0) {
-		debug("SF: enabling write failed\n");
-		return ret;
-	}
-
-	cmd = CMD_WRITE_STATUS;
-	ret = spi_flash_cmd_write(flash->spi, &cmd, 1, &sr, 1);
-	if (ret) {
-		debug("SF: fail to write status register\n");
-		return ret;
-	}
-
-	ret = spi_flash_cmd_wait_ready(flash, SPI_FLASH_PROG_TIMEOUT);
-	if (ret < 0) {
-		debug("SF: write status register timed out\n");
-		return ret;
-	}
-
-	return 0;
-}
-
-static int macronix_unlock(struct spi_flash *flash)
-{
-	int ret;
-
-	/* Enable status register writing and clear BP# bits */
-	ret = macronix_write_status(flash, 0);
-	if (ret)
-		debug("SF: fail to disable write protection\n");
-
-	return ret;
-}
-
 struct spi_flash *spi_flash_probe_macronix(struct spi_slave *spi, u8 *idcode)
 {
 	const struct macronix_spi_flash_params *params;
@@ -153,7 +114,7 @@ struct spi_flash *spi_flash_probe_macronix(struct spi_slave *spi, u8 *idcode)
 	flash->size = flash->sector_size * params->nr_blocks;
 
 	/* Clear BP# bits for read-only flash */
-	macronix_unlock(flash);
+	spi_flash_cmd_write_status(flash, 0);
 
 	return flash;
 }
diff --git a/drivers/mtd/spi/spi_flash.c b/drivers/mtd/spi/spi_flash.c
index 4ab4e13..00aece9 100644
--- a/drivers/mtd/spi/spi_flash.c
+++ b/drivers/mtd/spi/spi_flash.c
@@ -242,6 +242,33 @@ int spi_flash_cmd_erase(struct spi_flash *flash, u32 offset, size_t len)
 	return ret;
 }
 
+int spi_flash_cmd_write_status(struct spi_flash *flash, u8 sr)
+{
+	u8 cmd;
+	int ret;
+
+	ret = spi_flash_cmd_write_enable(flash);
+	if (ret < 0) {
+		debug("SF: enabling write failed\n");
+		return ret;
+	}
+
+	cmd = CMD_WRITE_STATUS;
+	ret = spi_flash_cmd_write(flash->spi, &cmd, 1, &sr, 1);
+	if (ret) {
+		debug("SF: fail to write status register\n");
+		return ret;
+	}
+
+	ret = spi_flash_cmd_wait_ready(flash, SPI_FLASH_PROG_TIMEOUT);
+	if (ret < 0) {
+		debug("SF: write status register timed out\n");
+		return ret;
+	}
+
+	return 0;
+}
+
 /*
  * The following table holds all device probe functions
  *
diff --git a/drivers/mtd/spi/spi_flash_internal.h b/drivers/mtd/spi/spi_flash_internal.h
index 3c6bccf..141cfa8 100644
--- a/drivers/mtd/spi/spi_flash_internal.h
+++ b/drivers/mtd/spi/spi_flash_internal.h
@@ -74,6 +74,9 @@ static inline int spi_flash_cmd_write_disable(struct spi_flash *flash)
 	return spi_flash_cmd(flash->spi, CMD_WRITE_DISABLE, NULL, 0);
 }
 
+/* Program the status register. */
+int spi_flash_cmd_write_status(struct spi_flash *flash, u8 sr);
+
 /*
  * Same as spi_flash_cmd_read() except it also claims/releases the SPI
  * bus. Used as common part of the ->read() operation.
diff --git a/drivers/mtd/spi/sst.c b/drivers/mtd/spi/sst.c
index 04cc50a..ced4f24 100644
--- a/drivers/mtd/spi/sst.c
+++ b/drivers/mtd/spi/sst.c
@@ -185,27 +185,6 @@ sst_write_wp(struct spi_flash *flash, u32 offset, size_t len, const void *buf)
 	return ret;
 }
 
-static int
-sst_unlock(struct spi_flash *flash)
-{
-	int ret;
-	u8 cmd, status;
-
-	ret = spi_flash_cmd_write_enable(flash);
-	if (ret)
-		return ret;
-
-	cmd = CMD_WRITE_STATUS;
-	status = 0;
-	ret = spi_flash_cmd_write(flash->spi, &cmd, 1, &status, 1);
-	if (ret)
-		debug("SF: Unable to set status byte\n");
-
-	debug("SF: sst: status = %x\n", spi_w8r8(flash->spi, CMD_READ_STATUS));
-
-	return ret;
-}
-
 struct spi_flash *
 spi_flash_probe_sst(struct spi_slave *spi, u8 *idcode)
 {
@@ -245,7 +224,7 @@ spi_flash_probe_sst(struct spi_slave *spi, u8 *idcode)
 	stm->flash.size = stm->flash.sector_size * params->nr_sectors;
 
 	/* Flash powers up read-only, so clear BP# bits */
-	sst_unlock(&stm->flash);
+	spi_flash_cmd_write_status(&stm->flash, 0);
 
 	return &stm->flash;
 }
-- 
1.7.8.4

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

end of thread, other threads:[~2012-03-05  4:21 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-03-05  4:21 [U-Boot] [PATCH 1/5] sf: inline data constants Mike Frysinger
2012-03-05  4:21 ` [U-Boot] [PATCH 2/5] sf: unify erase commands Mike Frysinger
2012-03-05  4:21 ` [U-Boot] [PATCH 3/5] sf: eon: drop duplicate id Mike Frysinger
2012-03-05  4:21 ` [U-Boot] [PATCH 4/5] sf: sst: inline duplicate write enable helper funcs Mike Frysinger
2012-03-05  4:21 ` [U-Boot] [PATCH 5/5] sf: unify status register writing (and thus block unlocking) Mike Frysinger

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.