* [PATCH v4 1/6] mtd: dataflash: Replace C99 types with their kernel counterparts @ 2017-04-20 16:29 Andrey Smirnov 2017-04-20 16:29 ` [PATCH v4 2/6] mtd: dataflash: Improve coding style in jedec_probe() Andrey Smirnov ` (4 more replies) 0 siblings, 5 replies; 8+ messages in thread From: Andrey Smirnov @ 2017-04-20 16:29 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] 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 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] 8+ messages in thread
* [PATCH v4 2/6] mtd: dataflash: Improve coding style in jedec_probe() 2017-04-20 16:29 [PATCH v4 1/6] mtd: dataflash: Replace C99 types with their kernel counterparts Andrey Smirnov @ 2017-04-20 16:29 ` Andrey Smirnov 2017-04-20 16:29 ` [PATCH v4 3/6] mtd: dataflash: Replace pr_debug, printk with dev_* functions Andrey Smirnov ` (3 subsequent siblings) 4 siblings, 0 replies; 8+ messages in thread From: Andrey Smirnov @ 2017-04-20 16:29 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] 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 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] 8+ messages in thread
* [PATCH v4 3/6] mtd: dataflash: Replace pr_debug, printk with dev_* functions 2017-04-20 16:29 [PATCH v4 1/6] mtd: dataflash: Replace C99 types with their kernel counterparts Andrey Smirnov 2017-04-20 16:29 ` [PATCH v4 2/6] mtd: dataflash: Improve coding style in jedec_probe() Andrey Smirnov @ 2017-04-20 16:29 ` Andrey Smirnov 2017-04-20 16:29 ` [PATCH v4 4/6] mtd: dataflash: Get rid of loop counter in jedec_probe() Andrey Smirnov ` (2 subsequent siblings) 4 siblings, 0 replies; 8+ messages in thread From: Andrey Smirnov @ 2017-04-20 16:29 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> --- Changes between since [v3]: - Collected Reviewd-by from Marek Not present in v2, v1 [v3] https://patchwork.ozlabs.org/patch/752332/ 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] 8+ messages in thread
* [PATCH v4 4/6] mtd: dataflash: Get rid of loop counter in jedec_probe() 2017-04-20 16:29 [PATCH v4 1/6] mtd: dataflash: Replace C99 types with their kernel counterparts Andrey Smirnov 2017-04-20 16:29 ` [PATCH v4 2/6] mtd: dataflash: Improve coding style in jedec_probe() Andrey Smirnov 2017-04-20 16:29 ` [PATCH v4 3/6] mtd: dataflash: Replace pr_debug, printk with dev_* functions Andrey Smirnov @ 2017-04-20 16:29 ` Andrey Smirnov 2017-04-20 16:29 ` [PATCH v4 5/6] mtd: dataflash: Make use of "extened device information" Andrey Smirnov 2017-04-20 16:29 ` [PATCH v4 6/6] mtd: dataflash: Add flash_info for AT45DB641E Andrey Smirnov 4 siblings, 0 replies; 8+ messages in thread From: Andrey Smirnov @ 2017-04-20 16:29 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> --- 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 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] 8+ messages in thread
* [PATCH v4 5/6] mtd: dataflash: Make use of "extened device information" 2017-04-20 16:29 [PATCH v4 1/6] mtd: dataflash: Replace C99 types with their kernel counterparts Andrey Smirnov ` (2 preceding siblings ...) 2017-04-20 16:29 ` [PATCH v4 4/6] mtd: dataflash: Get rid of loop counter in jedec_probe() Andrey Smirnov @ 2017-04-20 16:29 ` Andrey Smirnov 2017-04-20 17:27 ` Marek Vasut 2017-04-20 16:29 ` [PATCH v4 6/6] mtd: dataflash: Add flash_info for AT45DB641E Andrey Smirnov 4 siblings, 1 reply; 8+ messages in thread From: Andrey Smirnov @ 2017-04-20 16:29 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 Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com> --- 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 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..9342cc47 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 BIT(3) #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] 8+ messages in thread
* Re: [PATCH v4 5/6] mtd: dataflash: Make use of "extened device information" 2017-04-20 16:29 ` [PATCH v4 5/6] mtd: dataflash: Make use of "extened device information" Andrey Smirnov @ 2017-04-20 17:27 ` Marek Vasut 0 siblings, 0 replies; 8+ messages in thread From: Marek Vasut @ 2017-04-20 17:27 UTC (permalink / raw) To: Andrey Smirnov, linux-mtd Cc: cphealy, David Woodhouse, Brian Norris, Boris Brezillon, Richard Weinberger, Cyrille Pitchen, linux-kernel On 04/20/2017 06:29 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 > Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com> > --- > > 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 > > 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..9342cc47 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 BIT(3) Two nits, can we keep things consistent please ? In this case, 0x0004 . Also, you wanted to use BIT(2)=0x4 here, not BIT(3)=0x8 . Other than that, Acked-by: Marek Vasut <marek.vasut@gmail.com> > #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); > } > > -- Best regards, Marek Vasut ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH v4 6/6] mtd: dataflash: Add flash_info for AT45DB641E 2017-04-20 16:29 [PATCH v4 1/6] mtd: dataflash: Replace C99 types with their kernel counterparts Andrey Smirnov ` (3 preceding siblings ...) 2017-04-20 16:29 ` [PATCH v4 5/6] mtd: dataflash: Make use of "extened device information" Andrey Smirnov @ 2017-04-20 16:29 ` Andrey Smirnov 2017-04-20 17:28 ` Marek Vasut 4 siblings, 1 reply; 8+ messages in thread From: Andrey Smirnov @ 2017-04-20 16:29 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 Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com> --- 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 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 9342cc47..7e6cdfe 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] 8+ messages in thread
* Re: [PATCH v4 6/6] mtd: dataflash: Add flash_info for AT45DB641E 2017-04-20 16:29 ` [PATCH v4 6/6] mtd: dataflash: Add flash_info for AT45DB641E Andrey Smirnov @ 2017-04-20 17:28 ` Marek Vasut 0 siblings, 0 replies; 8+ messages in thread From: Marek Vasut @ 2017-04-20 17:28 UTC (permalink / raw) To: Andrey Smirnov, linux-mtd Cc: cphealy, David Woodhouse, Brian Norris, Boris Brezillon, Richard Weinberger, Cyrille Pitchen, linux-kernel On 04/20/2017 06:29 PM, Andrey Smirnov wrote: > 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 > Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com> Acked-by: Marek Vasut <marek.vasut@gmail.com> > --- > > 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 > > > 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 9342cc47..7e6cdfe 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, > -- Best regards, Marek Vasut ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2017-04-20 17:28 UTC | newest] Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2017-04-20 16:29 [PATCH v4 1/6] mtd: dataflash: Replace C99 types with their kernel counterparts Andrey Smirnov 2017-04-20 16:29 ` [PATCH v4 2/6] mtd: dataflash: Improve coding style in jedec_probe() Andrey Smirnov 2017-04-20 16:29 ` [PATCH v4 3/6] mtd: dataflash: Replace pr_debug, printk with dev_* functions Andrey Smirnov 2017-04-20 16:29 ` [PATCH v4 4/6] mtd: dataflash: Get rid of loop counter in jedec_probe() Andrey Smirnov 2017-04-20 16:29 ` [PATCH v4 5/6] mtd: dataflash: Make use of "extened device information" Andrey Smirnov 2017-04-20 17:27 ` Marek Vasut 2017-04-20 16:29 ` [PATCH v4 6/6] mtd: dataflash: Add flash_info for AT45DB641E Andrey Smirnov 2017-04-20 17:28 ` Marek Vasut
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).