* [PATCH v5 1/6] mtd: dataflash: Replace C99 types with their kernel counterparts
@ 2017-04-21 16:30 Andrey Smirnov
2017-04-21 16:30 ` [PATCH v5 2/6] mtd: dataflash: Improve coding style in jedec_probe() Andrey Smirnov
` (5 more replies)
0 siblings, 6 replies; 9+ messages in thread
From: Andrey Smirnov @ 2017-04-21 16:30 UTC (permalink / raw)
To: linux-mtd
Cc: Andrey Smirnov, cphealy, David Woodhouse, Brian Norris,
Boris Brezillon, Marek Vasut, Richard Weinberger, Cyrille Pitchen,
linux-kernel
No functional change intended.
Cc: cphealy@gmail.com
Cc: David Woodhouse <dwmw2@infradead.org>
Cc: Brian Norris <computersforpeace@gmail.com>
Cc: Boris Brezillon <boris.brezillon@free-electrons.com>
Cc: Marek Vasut <marek.vasut@gmail.com>
Cc: Richard Weinberger <richard@nod.at>
Cc: Cyrille Pitchen <cyrille.pitchen@atmel.com>
Cc: linux-kernel@vger.kernel.org
Acked-by: Marek Vasut <marek.vasut@gmail.com>
Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com>
---
No changes since [v3], [v4]
Changes since [v2]:
- Re-worded commit message
- Collected Acked-by from Marek
Not present in v1
[v2]: http://lkml.kernel.org/r/20170418142127.23301-1-andrew.smirnov@gmail.com
[v3]: http://lkml.kernel.org/r/20170419152305.17226-1-andrew.smirnov@gmail.com
[v4]: http://lkml.kernel.org/r/20170420162952.5181-1-andrew.smirnov@gmail.com
drivers/mtd/devices/mtd_dataflash.c | 40 ++++++++++++++++++-------------------
1 file changed, 20 insertions(+), 20 deletions(-)
diff --git a/drivers/mtd/devices/mtd_dataflash.c b/drivers/mtd/devices/mtd_dataflash.c
index f9e9bd1..a566231 100644
--- a/drivers/mtd/devices/mtd_dataflash.c
+++ b/drivers/mtd/devices/mtd_dataflash.c
@@ -84,7 +84,7 @@
struct dataflash {
- uint8_t command[4];
+ u8 command[4];
char name[24];
unsigned short page_offset; /* offset in flash address */
@@ -153,8 +153,8 @@ static int dataflash_erase(struct mtd_info *mtd, struct erase_info *instr)
struct spi_transfer x = { };
struct spi_message msg;
unsigned blocksize = priv->page_size << 3;
- uint8_t *command;
- uint32_t rem;
+ u8 *command;
+ u32 rem;
pr_debug("%s: erase addr=0x%llx len 0x%llx\n",
dev_name(&spi->dev), (long long)instr->addr,
@@ -187,8 +187,8 @@ static int dataflash_erase(struct mtd_info *mtd, struct erase_info *instr)
pageaddr = pageaddr << priv->page_offset;
command[0] = do_block ? OP_ERASE_BLOCK : OP_ERASE_PAGE;
- command[1] = (uint8_t)(pageaddr >> 16);
- command[2] = (uint8_t)(pageaddr >> 8);
+ command[1] = (u8)(pageaddr >> 16);
+ command[2] = (u8)(pageaddr >> 8);
command[3] = 0;
pr_debug("ERASE %s: (%x) %x %x %x [%i]\n",
@@ -239,7 +239,7 @@ static int dataflash_read(struct mtd_info *mtd, loff_t from, size_t len,
struct spi_transfer x[2] = { };
struct spi_message msg;
unsigned int addr;
- uint8_t *command;
+ u8 *command;
int status;
pr_debug("%s: read 0x%x..0x%x\n", dev_name(&priv->spi->dev),
@@ -271,9 +271,9 @@ static int dataflash_read(struct mtd_info *mtd, loff_t from, size_t len,
* fewer "don't care" bytes. Both buffers stay unchanged.
*/
command[0] = OP_READ_CONTINUOUS;
- command[1] = (uint8_t)(addr >> 16);
- command[2] = (uint8_t)(addr >> 8);
- command[3] = (uint8_t)(addr >> 0);
+ command[1] = (u8)(addr >> 16);
+ command[2] = (u8)(addr >> 8);
+ command[3] = (u8)(addr >> 0);
/* plus 4 "don't care" bytes */
status = spi_sync(priv->spi, &msg);
@@ -308,7 +308,7 @@ static int dataflash_write(struct mtd_info *mtd, loff_t to, size_t len,
size_t remaining = len;
u_char *writebuf = (u_char *) buf;
int status = -EINVAL;
- uint8_t *command;
+ u8 *command;
pr_debug("%s: write 0x%x..0x%x\n",
dev_name(&spi->dev), (unsigned)to, (unsigned)(to + len));
@@ -455,11 +455,11 @@ static int dataflash_get_otp_info(struct mtd_info *mtd, size_t len,
}
static ssize_t otp_read(struct spi_device *spi, unsigned base,
- uint8_t *buf, loff_t off, size_t len)
+ u8 *buf, loff_t off, size_t len)
{
struct spi_message m;
size_t l;
- uint8_t *scratch;
+ u8 *scratch;
struct spi_transfer t;
int status;
@@ -538,7 +538,7 @@ static int dataflash_write_user_otp(struct mtd_info *mtd,
{
struct spi_message m;
const size_t l = 4 + 64;
- uint8_t *scratch;
+ u8 *scratch;
struct spi_transfer t;
struct dataflash *priv = mtd->priv;
int status;
@@ -689,14 +689,14 @@ struct flash_info {
/* JEDEC id has a high byte of zero plus three data bytes:
* the manufacturer id, then a two byte device id.
*/
- uint32_t jedec_id;
+ u32 jedec_id;
/* The size listed here is what works with OP_ERASE_PAGE. */
unsigned nr_pages;
- uint16_t pagesize;
- uint16_t pageoffset;
+ u16 pagesize;
+ u16 pageoffset;
- uint16_t flags;
+ u16 flags;
#define SUP_POW2PS 0x0002 /* supports 2^N byte pages */
#define IS_POW2PS 0x0001 /* uses 2^N byte pages */
};
@@ -739,9 +739,9 @@ static struct flash_info dataflash_data[] = {
static struct flash_info *jedec_probe(struct spi_device *spi)
{
int tmp;
- uint8_t code = OP_READ_ID;
- uint8_t id[3];
- uint32_t jedec;
+ u8 code = OP_READ_ID;
+ u8 id[3];
+ u32 jedec;
struct flash_info *info;
int status;
--
2.9.3
^ permalink raw reply related [flat|nested] 9+ messages in thread* [PATCH v5 2/6] mtd: dataflash: Improve coding style in jedec_probe() 2017-04-21 16:30 [PATCH v5 1/6] mtd: dataflash: Replace C99 types with their kernel counterparts Andrey Smirnov @ 2017-04-21 16:30 ` Andrey Smirnov 2017-04-21 16:30 ` [PATCH v5 3/6] mtd: dataflash: Replace pr_debug, printk with dev_* functions Andrey Smirnov ` (4 subsequent siblings) 5 siblings, 0 replies; 9+ messages in thread From: Andrey Smirnov @ 2017-04-21 16:30 UTC (permalink / raw) To: linux-mtd Cc: Andrey Smirnov, cphealy, David Woodhouse, Brian Norris, Boris Brezillon, Richard Weinberger, Cyrille Pitchen, Marek Vasut, linux-kernel Change the following: - Replace indentation between type and name of local variable from tabs to spaces - Replace magic number 0x1F with CFI_MFR_ATMEL macro - Replace variable 'tmp' with 'ret' and 'i' where appropriate - Reformat multi-line comments and add newlines where appropriate No functional change intended. Cc: cphealy@gmail.com Cc: David Woodhouse <dwmw2@infradead.org> Cc: Brian Norris <computersforpeace@gmail.com> Cc: Boris Brezillon <boris.brezillon@free-electrons.com> Cc: Richard Weinberger <richard@nod.at> Cc: Cyrille Pitchen <cyrille.pitchen@atmel.com> Cc: Marek Vasut <marek.vasut@gmail.com> Cc: linux-kernel@vger.kernel.org Acked-by: Marek Vasut <marek.vasut@gmail.com> Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com> --- No changes since [v3], [v4] Changes since [v2]: - Re-worded commit message - Collected Acked-by from Marek Not present in v1 [v2] http://lkml.kernel.org/r/20170418142127.23301-2-andrew.smirnov@gmail.com [v3] http://lkml.kernel.org/r/20170419152305.17226-2-andrew.smirnov@gmail.com [v4] http://lkml.kernel.org/r/20170420162952.5181-2-andrew.smirnov@gmail.com drivers/mtd/devices/mtd_dataflash.c | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/drivers/mtd/devices/mtd_dataflash.c b/drivers/mtd/devices/mtd_dataflash.c index a566231..5b7a8c3 100644 --- a/drivers/mtd/devices/mtd_dataflash.c +++ b/drivers/mtd/devices/mtd_dataflash.c @@ -82,6 +82,7 @@ #define OP_WRITE_SECURITY_REVC 0x9A #define OP_WRITE_SECURITY 0x9B /* revision D */ +#define CFI_MFR_ATMEL 0x1F struct dataflash { u8 command[4]; @@ -738,14 +739,15 @@ static struct flash_info dataflash_data[] = { static struct flash_info *jedec_probe(struct spi_device *spi) { - int tmp; - u8 code = OP_READ_ID; - u8 id[3]; - u32 jedec; - struct flash_info *info; + int ret, i; + u8 code = OP_READ_ID; + u8 id[3]; + u32 jedec; + struct flash_info *info; int status; - /* JEDEC also defines an optional "extended device information" + /* + * JEDEC also defines an optional "extended device information" * string for after vendor-specific data, after the three bytes * we use here. Supporting some chips might require using it. * @@ -753,13 +755,14 @@ static struct flash_info *jedec_probe(struct spi_device *spi) * That's not an error; only rev C and newer chips handle it, and * only Atmel sells these chips. */ - tmp = spi_write_then_read(spi, &code, 1, id, 3); - if (tmp < 0) { + ret = spi_write_then_read(spi, &code, 1, id, 3); + if (ret < 0) { pr_debug("%s: error %d reading JEDEC ID\n", - dev_name(&spi->dev), tmp); - return ERR_PTR(tmp); + dev_name(&spi->dev), ret); + return ERR_PTR(ret); } - if (id[0] != 0x1f) + + if (id[0] != CFI_MFR_ATMEL) return NULL; jedec = id[0]; @@ -768,9 +771,9 @@ static struct flash_info *jedec_probe(struct spi_device *spi) jedec = jedec << 8; jedec |= id[2]; - for (tmp = 0, info = dataflash_data; - tmp < ARRAY_SIZE(dataflash_data); - tmp++, info++) { + for (i = 0, info = dataflash_data; + i < ARRAY_SIZE(dataflash_data); + i++, info++) { if (info->jedec_id == jedec) { pr_debug("%s: OTP, sector protect%s\n", dev_name(&spi->dev), -- 2.9.3 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH v5 3/6] mtd: dataflash: Replace pr_debug, printk with dev_* functions 2017-04-21 16:30 [PATCH v5 1/6] mtd: dataflash: Replace C99 types with their kernel counterparts Andrey Smirnov 2017-04-21 16:30 ` [PATCH v5 2/6] mtd: dataflash: Improve coding style in jedec_probe() Andrey Smirnov @ 2017-04-21 16:30 ` Andrey Smirnov 2017-04-21 16:30 ` [PATCH v5 4/6] mtd: dataflash: Get rid of loop counter in jedec_probe() Andrey Smirnov ` (3 subsequent siblings) 5 siblings, 0 replies; 9+ messages in thread From: Andrey Smirnov @ 2017-04-21 16:30 UTC (permalink / raw) To: linux-mtd Cc: Andrey Smirnov, cphealy, David Woodhouse, Brian Norris, Boris Brezillon, Marek Vasut, Richard Weinberger, Cyrille Pitchen, linux-kernel Lion's share of calls to pr_debug in this driver follow the pattern of pr_debug("%s <message>", dev_name(<dev>), <arguments>), which should be semantically identical to dev_dbg(<dev>, "<message>", <arguments>), so replace such occurencies to simplify the code. Convert the small minority of pr_debug that do not follow pattern from above to use dev_dbg as well, for the sake of consistency. Convert similar patter of printk(KERN_ERR, "%s: ...", dev_name(...), ...) to use dev_err instead. No functional change intended. Cc: cphealy@gmail.com Cc: David Woodhouse <dwmw2@infradead.org> Cc: Brian Norris <computersforpeace@gmail.com> Cc: Boris Brezillon <boris.brezillon@free-electrons.com> Cc: Marek Vasut <marek.vasut@gmail.com> Cc: Richard Weinberger <richard@nod.at> Cc: Cyrille Pitchen <cyrille.pitchen@atmel.com> Cc: linux-kernel@vger.kernel.org Reviewed-by: Marek Vasut <marek.vasut@gmail.com> Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com> --- No changes since [v4] Changes between since [v3]: - Collected Reviewd-by from Marek Not present in v2, v1 [v3] https://patchwork.ozlabs.org/patch/752332/ [v4] http://lkml.kernel.org/r/20170420162952.5181-3-andrew.smirnov@gmail.com drivers/mtd/devices/mtd_dataflash.c | 74 +++++++++++++++++-------------------- 1 file changed, 33 insertions(+), 41 deletions(-) diff --git a/drivers/mtd/devices/mtd_dataflash.c b/drivers/mtd/devices/mtd_dataflash.c index 5b7a8c3..ccd1e02 100644 --- a/drivers/mtd/devices/mtd_dataflash.c +++ b/drivers/mtd/devices/mtd_dataflash.c @@ -130,8 +130,7 @@ static int dataflash_waitready(struct spi_device *spi) for (;;) { status = dataflash_status(spi); if (status < 0) { - pr_debug("%s: status %d?\n", - dev_name(&spi->dev), status); + dev_dbg(&spi->dev, "status %d?\n", status); status = 0; } @@ -157,9 +156,8 @@ static int dataflash_erase(struct mtd_info *mtd, struct erase_info *instr) u8 *command; u32 rem; - pr_debug("%s: erase addr=0x%llx len 0x%llx\n", - dev_name(&spi->dev), (long long)instr->addr, - (long long)instr->len); + dev_dbg(&spi->dev, "erase addr=0x%llx len 0x%llx\n", + (long long)instr->addr, (long long)instr->len); div_u64_rem(instr->len, priv->page_size, &rem); if (rem) @@ -192,7 +190,7 @@ static int dataflash_erase(struct mtd_info *mtd, struct erase_info *instr) command[2] = (u8)(pageaddr >> 8); command[3] = 0; - pr_debug("ERASE %s: (%x) %x %x %x [%i]\n", + dev_dbg(&spi->dev, "ERASE %s: (%x) %x %x %x [%i]\n", do_block ? "block" : "page", command[0], command[1], command[2], command[3], pageaddr); @@ -201,8 +199,8 @@ static int dataflash_erase(struct mtd_info *mtd, struct erase_info *instr) (void) dataflash_waitready(spi); if (status < 0) { - printk(KERN_ERR "%s: erase %x, err %d\n", - dev_name(&spi->dev), pageaddr, status); + dev_err(&spi->dev, "erase %x, err %d\n", + pageaddr, status); /* REVISIT: can retry instr->retries times; or * giveup and instr->fail_addr = instr->addr; */ @@ -243,8 +241,8 @@ static int dataflash_read(struct mtd_info *mtd, loff_t from, size_t len, u8 *command; int status; - pr_debug("%s: read 0x%x..0x%x\n", dev_name(&priv->spi->dev), - (unsigned)from, (unsigned)(from + len)); + dev_dbg(&priv->spi->dev, "read 0x%x..0x%x\n", + (unsigned int)from, (unsigned int)(from + len)); /* Calculate flash page/byte address */ addr = (((unsigned)from / priv->page_size) << priv->page_offset) @@ -252,7 +250,7 @@ static int dataflash_read(struct mtd_info *mtd, loff_t from, size_t len, command = priv->command; - pr_debug("READ: (%x) %x %x %x\n", + dev_dbg(&priv->spi->dev, "READ: (%x) %x %x %x\n", command[0], command[1], command[2], command[3]); spi_message_init(&msg); @@ -284,8 +282,7 @@ static int dataflash_read(struct mtd_info *mtd, loff_t from, size_t len, *retlen = msg.actual_length - 8; status = 0; } else - pr_debug("%s: read %x..%x --> %d\n", - dev_name(&priv->spi->dev), + dev_dbg(&priv->spi->dev, "read %x..%x --> %d\n", (unsigned)from, (unsigned)(from + len), status); return status; @@ -311,8 +308,8 @@ static int dataflash_write(struct mtd_info *mtd, loff_t to, size_t len, int status = -EINVAL; u8 *command; - pr_debug("%s: write 0x%x..0x%x\n", - dev_name(&spi->dev), (unsigned)to, (unsigned)(to + len)); + dev_dbg(&spi->dev, "write 0x%x..0x%x\n", + (unsigned int)to, (unsigned int)(to + len)); spi_message_init(&msg); @@ -329,7 +326,7 @@ static int dataflash_write(struct mtd_info *mtd, loff_t to, size_t len, mutex_lock(&priv->lock); while (remaining > 0) { - pr_debug("write @ %i:%i len=%i\n", + dev_dbg(&spi->dev, "write @ %i:%i len=%i\n", pageaddr, offset, writelen); /* REVISIT: @@ -357,13 +354,13 @@ static int dataflash_write(struct mtd_info *mtd, loff_t to, size_t len, command[2] = (addr & 0x0000FF00) >> 8; command[3] = 0; - pr_debug("TRANSFER: (%x) %x %x %x\n", + dev_dbg(&spi->dev, "TRANSFER: (%x) %x %x %x\n", command[0], command[1], command[2], command[3]); status = spi_sync(spi, &msg); if (status < 0) - pr_debug("%s: xfer %u -> %d\n", - dev_name(&spi->dev), addr, status); + dev_dbg(&spi->dev, "xfer %u -> %d\n", + addr, status); (void) dataflash_waitready(priv->spi); } @@ -375,7 +372,7 @@ static int dataflash_write(struct mtd_info *mtd, loff_t to, size_t len, command[2] = (addr & 0x0000FF00) >> 8; command[3] = (addr & 0x000000FF); - pr_debug("PROGRAM: (%x) %x %x %x\n", + dev_dbg(&spi->dev, "PROGRAM: (%x) %x %x %x\n", command[0], command[1], command[2], command[3]); x[1].tx_buf = writebuf; @@ -384,8 +381,8 @@ static int dataflash_write(struct mtd_info *mtd, loff_t to, size_t len, status = spi_sync(spi, &msg); spi_transfer_del(x + 1); if (status < 0) - pr_debug("%s: pgm %u/%u -> %d\n", - dev_name(&spi->dev), addr, writelen, status); + dev_dbg(&spi->dev, "pgm %u/%u -> %d\n", + addr, writelen, status); (void) dataflash_waitready(priv->spi); @@ -399,20 +396,20 @@ static int dataflash_write(struct mtd_info *mtd, loff_t to, size_t len, command[2] = (addr & 0x0000FF00) >> 8; command[3] = 0; - pr_debug("COMPARE: (%x) %x %x %x\n", + dev_dbg(&spi->dev, "COMPARE: (%x) %x %x %x\n", command[0], command[1], command[2], command[3]); status = spi_sync(spi, &msg); if (status < 0) - pr_debug("%s: compare %u -> %d\n", - dev_name(&spi->dev), addr, status); + dev_dbg(&spi->dev, "compare %u -> %d\n", + addr, status); status = dataflash_waitready(priv->spi); /* Check result of the compare operation */ if (status & (1 << 6)) { - printk(KERN_ERR "%s: compare page %u, err %d\n", - dev_name(&spi->dev), pageaddr, status); + dev_err(&spi->dev, "compare page %u, err %d\n", + pageaddr, status); remaining = 0; status = -EIO; break; @@ -757,8 +754,7 @@ static struct flash_info *jedec_probe(struct spi_device *spi) */ ret = spi_write_then_read(spi, &code, 1, id, 3); if (ret < 0) { - pr_debug("%s: error %d reading JEDEC ID\n", - dev_name(&spi->dev), ret); + dev_dbg(&spi->dev, "error %d reading JEDEC ID\n", ret); return ERR_PTR(ret); } @@ -775,16 +771,14 @@ static struct flash_info *jedec_probe(struct spi_device *spi) i < ARRAY_SIZE(dataflash_data); i++, info++) { if (info->jedec_id == jedec) { - pr_debug("%s: OTP, sector protect%s\n", - dev_name(&spi->dev), - (info->flags & SUP_POW2PS) - ? ", binary pagesize" : "" - ); + dev_dbg(&spi->dev, "OTP, sector protect%s\n", + (info->flags & SUP_POW2PS) ? + ", binary pagesize" : ""); if (info->flags & SUP_POW2PS) { status = dataflash_status(spi); if (status < 0) { - pr_debug("%s: status error %d\n", - dev_name(&spi->dev), status); + dev_dbg(&spi->dev, "status error %d\n", + status); return ERR_PTR(status); } if (status & 0x1) { @@ -848,8 +842,7 @@ static int dataflash_probe(struct spi_device *spi) */ status = dataflash_status(spi); if (status <= 0 || status == 0xff) { - pr_debug("%s: status error %d\n", - dev_name(&spi->dev), status); + dev_dbg(&spi->dev, "status error %d\n", status); if (status == 0 || status == 0xff) status = -ENODEV; return status; @@ -890,8 +883,7 @@ static int dataflash_probe(struct spi_device *spi) } if (status < 0) - pr_debug("%s: add_dataflash --> %d\n", dev_name(&spi->dev), - status); + dev_dbg(&spi->dev, "add_dataflash --> %d\n", status); return status; } @@ -901,7 +893,7 @@ static int dataflash_remove(struct spi_device *spi) struct dataflash *flash = spi_get_drvdata(spi); int status; - pr_debug("%s: remove\n", dev_name(&spi->dev)); + dev_dbg(&spi->dev, "remove\n"); status = mtd_device_unregister(&flash->mtd); if (status == 0) -- 2.9.3 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH v5 4/6] mtd: dataflash: Get rid of loop counter in jedec_probe() 2017-04-21 16:30 [PATCH v5 1/6] mtd: dataflash: Replace C99 types with their kernel counterparts Andrey Smirnov 2017-04-21 16:30 ` [PATCH v5 2/6] mtd: dataflash: Improve coding style in jedec_probe() Andrey Smirnov 2017-04-21 16:30 ` [PATCH v5 3/6] mtd: dataflash: Replace pr_debug, printk with dev_* functions Andrey Smirnov @ 2017-04-21 16:30 ` Andrey Smirnov 2017-04-21 16:30 ` [PATCH v5 5/6] mtd: dataflash: Make use of "extened device information" Andrey Smirnov ` (2 subsequent siblings) 5 siblings, 0 replies; 9+ messages in thread From: Andrey Smirnov @ 2017-04-21 16:30 UTC (permalink / raw) To: linux-mtd Cc: Andrey Smirnov, cphealy, David Woodhouse, Brian Norris, Boris Brezillon, Marek Vasut, Richard Weinberger, Cyrille Pitchen, linux-kernel "For" loop in jedec_probe can be simplified to not need counter 'i'. Convert the code and get rid of the variable. Cc: cphealy@gmail.com Cc: David Woodhouse <dwmw2@infradead.org> Cc: Brian Norris <computersforpeace@gmail.com> Cc: Boris Brezillon <boris.brezillon@free-electrons.com> Cc: Marek Vasut <marek.vasut@gmail.com> Cc: Richard Weinberger <richard@nod.at> Cc: Cyrille Pitchen <cyrille.pitchen@atmel.com> Cc: linux-kernel@vger.kernel.org Reviewed-by: Marek Vasut <marek.vasut@gmail.com> Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com> --- No changes since [v4] Changes since [v3] - Collected Reviewed-by from Marek Not present in v2, v1 [v3] http://lkml.kernel.org/r/20170419152305.17226-4-andrew.smirnov@gmail.com [v4] http://lkml.kernel.org/r/20170420162952.5181-4-andrew.smirnov@gmail.com drivers/mtd/devices/mtd_dataflash.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/drivers/mtd/devices/mtd_dataflash.c b/drivers/mtd/devices/mtd_dataflash.c index ccd1e02..2d3e403 100644 --- a/drivers/mtd/devices/mtd_dataflash.c +++ b/drivers/mtd/devices/mtd_dataflash.c @@ -736,7 +736,7 @@ static struct flash_info dataflash_data[] = { static struct flash_info *jedec_probe(struct spi_device *spi) { - int ret, i; + int ret; u8 code = OP_READ_ID; u8 id[3]; u32 jedec; @@ -767,9 +767,9 @@ static struct flash_info *jedec_probe(struct spi_device *spi) jedec = jedec << 8; jedec |= id[2]; - for (i = 0, info = dataflash_data; - i < ARRAY_SIZE(dataflash_data); - i++, info++) { + for (info = dataflash_data; + info < dataflash_data + ARRAY_SIZE(dataflash_data); + info++) { if (info->jedec_id == jedec) { dev_dbg(&spi->dev, "OTP, sector protect%s\n", (info->flags & SUP_POW2PS) ? -- 2.9.3 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH v5 5/6] mtd: dataflash: Make use of "extened device information" 2017-04-21 16:30 [PATCH v5 1/6] mtd: dataflash: Replace C99 types with their kernel counterparts Andrey Smirnov ` (2 preceding siblings ...) 2017-04-21 16:30 ` [PATCH v5 4/6] mtd: dataflash: Get rid of loop counter in jedec_probe() Andrey Smirnov @ 2017-04-21 16:30 ` Andrey Smirnov 2017-04-21 17:19 ` Marek Vasut 2017-04-21 16:30 ` [PATCH v5 6/6] mtd: dataflash: Add flash_info for AT45DB641E Andrey Smirnov 2017-04-23 0:31 ` [PATCH v5 1/6] mtd: dataflash: Replace C99 types with their kernel counterparts Chris Healy 5 siblings, 1 reply; 9+ messages in thread From: Andrey Smirnov @ 2017-04-21 16:30 UTC (permalink / raw) To: linux-mtd Cc: Andrey Smirnov, cphealy, David Woodhouse, Brian Norris, Boris Brezillon, Marek Vasut, Richard Weinberger, Cyrille Pitchen, linux-kernel In anticipation of supporting chips that need it, extend the size of struct flash_info's 'jedec_id' field to make room 2 byte of extended device information as well as add code to fetch this data during jedec_probe(). Cc: cphealy@gmail.com Cc: David Woodhouse <dwmw2@infradead.org> Cc: Brian Norris <computersforpeace@gmail.com> Cc: Boris Brezillon <boris.brezillon@free-electrons.com> Cc: Marek Vasut <marek.vasut@gmail.com> Cc: Richard Weinberger <richard@nod.at> Cc: Cyrille Pitchen <cyrille.pitchen@atmel.com> Cc: linux-kernel@vger.kernel.org Acked-by: Marek Vasut <marek.vasut@gmail.com> Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com> --- Changes since [v4]: - Corrected value of SUP_EXTID from BIT(3) to 0x0004 - Collected Acked-by from Marek Changes since [v3]: - Convert patch to use SUP_EXTID flag and avoid patching dataflash_data table Changes since [v2]: - Make 'id' have same size as 'jedec' - Get rid of eid_mask variable in favour of using GENMASK in-place Changes since [v1]: - Formatting [v1] http://lkml.kernel.org/r/20170411161722.11164-1-andrew.smirnov@gmail.com [v2] http://lkml.kernel.org/r/20170418142127.23301-3-andrew.smirnov@gmail.com [v3] http://lkml.kernel.org/r/20170419152305.17226-5-andrew.smirnov@gmail.com [v4] http://lkml.kernel.org/r/20170420162952.5181-5-andrew.smirnov@gmail.com drivers/mtd/devices/mtd_dataflash.c | 88 ++++++++++++++++++++++++------------- 1 file changed, 57 insertions(+), 31 deletions(-) diff --git a/drivers/mtd/devices/mtd_dataflash.c b/drivers/mtd/devices/mtd_dataflash.c index 2d3e403..3f1a0fb 100644 --- a/drivers/mtd/devices/mtd_dataflash.c +++ b/drivers/mtd/devices/mtd_dataflash.c @@ -84,6 +84,9 @@ #define CFI_MFR_ATMEL 0x1F +#define DATAFLASH_SHIFT_EXTID 24 +#define DATAFLASH_SHIFT_ID 40 + struct dataflash { u8 command[4]; char name[24]; @@ -687,7 +690,7 @@ struct flash_info { /* JEDEC id has a high byte of zero plus three data bytes: * the manufacturer id, then a two byte device id. */ - u32 jedec_id; + u64 jedec_id; /* The size listed here is what works with OP_ERASE_PAGE. */ unsigned nr_pages; @@ -695,6 +698,7 @@ struct flash_info { u16 pageoffset; u16 flags; +#define SUP_EXTID 0x0004 /* supports extended ID data */ #define SUP_POW2PS 0x0002 /* supports 2^N byte pages */ #define IS_POW2PS 0x0001 /* uses 2^N byte pages */ }; @@ -734,42 +738,18 @@ static struct flash_info dataflash_data[] = { { "at45db642d", 0x1f2800, 8192, 1024, 10, SUP_POW2PS | IS_POW2PS}, }; -static struct flash_info *jedec_probe(struct spi_device *spi) +static struct flash_info *jedec_lookup(struct spi_device *spi, + u64 jedec, bool use_extid) { - int ret; - u8 code = OP_READ_ID; - u8 id[3]; - u32 jedec; struct flash_info *info; int status; - /* - * JEDEC also defines an optional "extended device information" - * string for after vendor-specific data, after the three bytes - * we use here. Supporting some chips might require using it. - * - * If the vendor ID isn't Atmel's (0x1f), assume this call failed. - * That's not an error; only rev C and newer chips handle it, and - * only Atmel sells these chips. - */ - ret = spi_write_then_read(spi, &code, 1, id, 3); - if (ret < 0) { - dev_dbg(&spi->dev, "error %d reading JEDEC ID\n", ret); - return ERR_PTR(ret); - } - - if (id[0] != CFI_MFR_ATMEL) - return NULL; - - jedec = id[0]; - jedec = jedec << 8; - jedec |= id[1]; - jedec = jedec << 8; - jedec |= id[2]; - for (info = dataflash_data; info < dataflash_data + ARRAY_SIZE(dataflash_data); info++) { + if (use_extid && !(info->flags & SUP_EXTID)) + continue; + if (info->jedec_id == jedec) { dev_dbg(&spi->dev, "OTP, sector protect%s\n", (info->flags & SUP_POW2PS) ? @@ -793,12 +773,58 @@ static struct flash_info *jedec_probe(struct spi_device *spi) } } + return ERR_PTR(-ENODEV); +} + +static struct flash_info *jedec_probe(struct spi_device *spi) +{ + int ret; + u8 code = OP_READ_ID; + u64 jedec; + u8 id[sizeof(jedec)] = {0}; + const unsigned int id_size = 5; + struct flash_info *info; + + /* + * JEDEC also defines an optional "extended device information" + * string for after vendor-specific data, after the three bytes + * we use here. Supporting some chips might require using it. + * + * If the vendor ID isn't Atmel's (0x1f), assume this call failed. + * That's not an error; only rev C and newer chips handle it, and + * only Atmel sells these chips. + */ + ret = spi_write_then_read(spi, &code, 1, id, id_size); + if (ret < 0) { + dev_dbg(&spi->dev, "error %d reading JEDEC ID\n", ret); + return ERR_PTR(ret); + } + + if (id[0] != CFI_MFR_ATMEL) + return NULL; + + jedec = be64_to_cpup((__be64 *)id); + + /* + * First, try to match device using extended device + * information + */ + info = jedec_lookup(spi, jedec >> DATAFLASH_SHIFT_EXTID, true); + if (!IS_ERR(info)) + return info; + /* + * If that fails, make another pass using regular ID + * information + */ + info = jedec_lookup(spi, jedec >> DATAFLASH_SHIFT_ID, false); + if (!IS_ERR(info)) + return info; /* * Treat other chips as errors ... we won't know the right page * size (it might be binary) even when we can tell which density * class is involved (legacy chip id scheme). */ - dev_warn(&spi->dev, "JEDEC id %06x not handled\n", jedec); + dev_warn(&spi->dev, "JEDEC id %016llx not handled\n", jedec); return ERR_PTR(-ENODEV); } -- 2.9.3 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH v5 5/6] mtd: dataflash: Make use of "extened device information" 2017-04-21 16:30 ` [PATCH v5 5/6] mtd: dataflash: Make use of "extened device information" Andrey Smirnov @ 2017-04-21 17:19 ` Marek Vasut 2017-05-11 17:03 ` Brian Norris 0 siblings, 1 reply; 9+ messages in thread From: Marek Vasut @ 2017-04-21 17:19 UTC (permalink / raw) To: Andrey Smirnov, linux-mtd Cc: cphealy, David Woodhouse, Brian Norris, Boris Brezillon, Richard Weinberger, Cyrille Pitchen, linux-kernel On 04/21/2017 06:30 PM, Andrey Smirnov wrote: > In anticipation of supporting chips that need it, extend the size of > struct flash_info's 'jedec_id' field to make room 2 byte of extended > device information as well as add code to fetch this data during > jedec_probe(). > > Cc: cphealy@gmail.com > Cc: David Woodhouse <dwmw2@infradead.org> > Cc: Brian Norris <computersforpeace@gmail.com> > Cc: Boris Brezillon <boris.brezillon@free-electrons.com> > Cc: Marek Vasut <marek.vasut@gmail.com> > Cc: Richard Weinberger <richard@nod.at> > Cc: Cyrille Pitchen <cyrille.pitchen@atmel.com> > Cc: linux-kernel@vger.kernel.org > Acked-by: Marek Vasut <marek.vasut@gmail.com> > Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com> > --- > > Changes since [v4]: > > - Corrected value of SUP_EXTID from BIT(3) to 0x0004 > > - Collected Acked-by from Marek Super, entire series is great, thanks ! -- Best regards, Marek Vasut ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v5 5/6] mtd: dataflash: Make use of "extened device information" 2017-04-21 17:19 ` Marek Vasut @ 2017-05-11 17:03 ` Brian Norris 0 siblings, 0 replies; 9+ messages in thread From: Brian Norris @ 2017-05-11 17:03 UTC (permalink / raw) To: Marek Vasut Cc: Andrey Smirnov, linux-mtd, cphealy, David Woodhouse, Boris Brezillon, Richard Weinberger, Cyrille Pitchen, linux-kernel On Fri, Apr 21, 2017 at 07:19:21PM +0200, Marek Vasut wrote: > On 04/21/2017 06:30 PM, Andrey Smirnov wrote: > > In anticipation of supporting chips that need it, extend the size of > > struct flash_info's 'jedec_id' field to make room 2 byte of extended > > device information as well as add code to fetch this data during > > jedec_probe(). > > > > Cc: cphealy@gmail.com > > Cc: David Woodhouse <dwmw2@infradead.org> > > Cc: Brian Norris <computersforpeace@gmail.com> > > Cc: Boris Brezillon <boris.brezillon@free-electrons.com> > > Cc: Marek Vasut <marek.vasut@gmail.com> > > Cc: Richard Weinberger <richard@nod.at> > > Cc: Cyrille Pitchen <cyrille.pitchen@atmel.com> > > Cc: linux-kernel@vger.kernel.org > > Acked-by: Marek Vasut <marek.vasut@gmail.com> > > Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com> > > --- > > > > Changes since [v4]: > > > > - Corrected value of SUP_EXTID from BIT(3) to 0x0004 > > > > - Collected Acked-by from Marek > > Super, entire series is great, thanks ! Applied to l2-mtd.git/next for 4.13 ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH v5 6/6] mtd: dataflash: Add flash_info for AT45DB641E 2017-04-21 16:30 [PATCH v5 1/6] mtd: dataflash: Replace C99 types with their kernel counterparts Andrey Smirnov ` (3 preceding siblings ...) 2017-04-21 16:30 ` [PATCH v5 5/6] mtd: dataflash: Make use of "extened device information" Andrey Smirnov @ 2017-04-21 16:30 ` Andrey Smirnov 2017-04-23 0:31 ` [PATCH v5 1/6] mtd: dataflash: Replace C99 types with their kernel counterparts Chris Healy 5 siblings, 0 replies; 9+ messages in thread From: Andrey Smirnov @ 2017-04-21 16:30 UTC (permalink / raw) To: linux-mtd Cc: Andrey Smirnov, cphealy, David Woodhouse, Brian Norris, Boris Brezillon, Marek Vasut, Richard Weinberger, Cyrille Pitchen, linux-kernel Cc: cphealy@gmail.com Cc: David Woodhouse <dwmw2@infradead.org> Cc: Brian Norris <computersforpeace@gmail.com> Cc: Boris Brezillon <boris.brezillon@free-electrons.com> Cc: Marek Vasut <marek.vasut@gmail.com> Cc: Richard Weinberger <richard@nod.at> Cc: Cyrille Pitchen <cyrille.pitchen@atmel.com> Cc: linux-kernel@vger.kernel.org Acked-by: Marek Vasut <marek.vasut@gmail.com> Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com> --- Changes since [v4]: - Collected Acked-by from Marek Changes since [v3]: - Update the patch ot use SUP_EXTID No changes between v3 to v1. [v3] http://lkml.kernel.org/r/20170419152305.17226-6-andrew.smirnov@gmail.com [v4] http://lkml.kernel.org/r/20170420162952.5181-6-andrew.smirnov@gmail.com drivers/mtd/devices/mtd_dataflash.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/mtd/devices/mtd_dataflash.c b/drivers/mtd/devices/mtd_dataflash.c index 3f1a0fb..5dc8bd0 100644 --- a/drivers/mtd/devices/mtd_dataflash.c +++ b/drivers/mtd/devices/mtd_dataflash.c @@ -736,6 +736,9 @@ static struct flash_info dataflash_data[] = { { "AT45DB642x", 0x1f2800, 8192, 1056, 11, SUP_POW2PS}, { "at45db642d", 0x1f2800, 8192, 1024, 10, SUP_POW2PS | IS_POW2PS}, + + { "AT45DB641E", 0x1f28000100, 32768, 264, 9, SUP_EXTID | SUP_POW2PS}, + { "at45db641e", 0x1f28000100, 32768, 256, 8, SUP_EXTID | SUP_POW2PS | IS_POW2PS}, }; static struct flash_info *jedec_lookup(struct spi_device *spi, -- 2.9.3 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH v5 1/6] mtd: dataflash: Replace C99 types with their kernel counterparts 2017-04-21 16:30 [PATCH v5 1/6] mtd: dataflash: Replace C99 types with their kernel counterparts Andrey Smirnov ` (4 preceding siblings ...) 2017-04-21 16:30 ` [PATCH v5 6/6] mtd: dataflash: Add flash_info for AT45DB641E Andrey Smirnov @ 2017-04-23 0:31 ` Chris Healy 5 siblings, 0 replies; 9+ messages in thread From: Chris Healy @ 2017-04-23 0:31 UTC (permalink / raw) To: Andrey Smirnov Cc: linux-mtd, David Woodhouse, Brian Norris, Boris Brezillon, Marek Vasut, Richard Weinberger, Cyrille Pitchen, linux-kernel > diff --git a/drivers/mtd/devices/mtd_dataflash.c b/drivers/mtd/devices/mtd_dataflash.c > index f9e9bd1..a566231 100644 > --- a/drivers/mtd/devices/mtd_dataflash.c > +++ b/drivers/mtd/devices/mtd_dataflash.c > @@ -84,7 +84,7 @@ > > On a Freescale i.MX51 SoC I tested this full patchset with both the AT45DB642D and AT45DB641E SPI NOR devices. Both were correctly identified: With AT45DB642D part: [ 2.560788] mtd_dataflash spi0.1: at45db642d (8192 KBytes) pagesize 1024 bytes (OTP) With AT45DB641E part: [ 2.572970] mtd_dataflash spi0.1: at45db641e (8192 KBytes) pagesize 256 bytes (OTP) Tested-by: Chris Healy <cphealy@gmail.com> ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2017-05-11 17:03 UTC | newest] Thread overview: 9+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2017-04-21 16:30 [PATCH v5 1/6] mtd: dataflash: Replace C99 types with their kernel counterparts Andrey Smirnov 2017-04-21 16:30 ` [PATCH v5 2/6] mtd: dataflash: Improve coding style in jedec_probe() Andrey Smirnov 2017-04-21 16:30 ` [PATCH v5 3/6] mtd: dataflash: Replace pr_debug, printk with dev_* functions Andrey Smirnov 2017-04-21 16:30 ` [PATCH v5 4/6] mtd: dataflash: Get rid of loop counter in jedec_probe() Andrey Smirnov 2017-04-21 16:30 ` [PATCH v5 5/6] mtd: dataflash: Make use of "extened device information" Andrey Smirnov 2017-04-21 17:19 ` Marek Vasut 2017-05-11 17:03 ` Brian Norris 2017-04-21 16:30 ` [PATCH v5 6/6] mtd: dataflash: Add flash_info for AT45DB641E Andrey Smirnov 2017-04-23 0:31 ` [PATCH v5 1/6] mtd: dataflash: Replace C99 types with their kernel counterparts Chris Healy
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.