mtd: spi-nor: Get rid of nor->page_size
authorTudor Ambarus <tudor.ambarus@microchip.com>
Fri, 29 Oct 2021 17:26:12 +0000 (20:26 +0300)
committerTudor Ambarus <tudor.ambarus@microchip.com>
Wed, 17 Nov 2021 12:41:26 +0000 (14:41 +0200)
nor->page_size duplicated what nor->params->page_size indicates
for no good reason. page_size is a flash parameter of fixed value
and it is better suited to be found in nor->params->page_size.

Signed-off-by: Tudor Ambarus <tudor.ambarus@microchip.com>
Reviewed-by: Pratyush Yadav <p.yadav@ti.com>
Reviewed-by: Michael Walle <michael@walle.cc>
Link: https://lore.kernel.org/r/20211029172633.886453-5-tudor.ambarus@microchip.com
drivers/mtd/spi-nor/core.c
drivers/mtd/spi-nor/xilinx.c
include/linux/mtd/spi-nor.h

index 277d1fde84c841beb3a782f5c1806711215fd049..3ec0959ffc20bb6f15130642afa5a46cebb1ea30 100644 (file)
@@ -1952,6 +1952,7 @@ static int spi_nor_write(struct mtd_info *mtd, loff_t to, size_t len,
        struct spi_nor *nor = mtd_to_spi_nor(mtd);
        size_t page_offset, page_remain, i;
        ssize_t ret;
+       u32 page_size = nor->params->page_size;
 
        dev_dbg(nor->dev, "to 0x%08x, len %zd\n", (u32)to, len);
 
@@ -1968,16 +1969,15 @@ static int spi_nor_write(struct mtd_info *mtd, loff_t to, size_t len,
                 * calculated with an AND operation. On the other cases we
                 * need to do a modulus operation (more expensive).
                 */
-               if (is_power_of_2(nor->page_size)) {
-                       page_offset = addr & (nor->page_size - 1);
+               if (is_power_of_2(page_size)) {
+                       page_offset = addr & (page_size - 1);
                } else {
                        uint64_t aux = addr;
 
-                       page_offset = do_div(aux, nor->page_size);
+                       page_offset = do_div(aux, page_size);
                }
                /* the size of data remaining on the first page */
-               page_remain = min_t(size_t,
-                                   nor->page_size - page_offset, len - i);
+               page_remain = min_t(size_t, page_size - page_offset, len - i);
 
                addr = spi_nor_convert_addr(nor, addr);
 
@@ -3094,7 +3094,7 @@ int spi_nor_scan(struct spi_nor *nor, const char *name,
         * We need the bounce buffer early to read/write registers when going
         * through the spi-mem layer (buffers have to be DMA-able).
         * For spi-mem drivers, we'll reallocate a new buffer if
-        * nor->page_size turns out to be greater than PAGE_SIZE (which
+        * nor->params->page_size turns out to be greater than PAGE_SIZE (which
         * shouldn't happen before long since NOR pages are usually less
         * than 1KB) after spi_nor_scan() returns.
         */
@@ -3170,8 +3170,7 @@ int spi_nor_scan(struct spi_nor *nor, const char *name,
                mtd->flags |= MTD_NO_ERASE;
 
        mtd->dev.parent = dev;
-       nor->page_size = nor->params->page_size;
-       mtd->writebufsize = nor->page_size;
+       mtd->writebufsize = nor->params->page_size;
 
        if (of_property_read_bool(np, "broken-flash-reset"))
                nor->flags |= SNOR_F_BROKEN_RESET;
@@ -3340,8 +3339,8 @@ static int spi_nor_probe(struct spi_mem *spimem)
         * and add this logic so that if anyone ever adds support for such
         * a NOR we don't end up with buffer overflows.
         */
-       if (nor->page_size > PAGE_SIZE) {
-               nor->bouncebuf_size = nor->page_size;
+       if (nor->params->page_size > PAGE_SIZE) {
+               nor->bouncebuf_size = nor->params->page_size;
                devm_kfree(nor->dev, nor->bouncebuf);
                nor->bouncebuf = devm_kmalloc(nor->dev,
                                              nor->bouncebuf_size,
index 1138bdbf41998ae07c50b9a481d587d4a92ae7ec..0658e47564bac01a8b8b49a86b1f21d5a874d73b 100644 (file)
@@ -28,11 +28,12 @@ static const struct flash_info xilinx_parts[] = {
  */
 static u32 s3an_convert_addr(struct spi_nor *nor, u32 addr)
 {
+       u32 page_size = nor->params->page_size;
        u32 offset, page;
 
-       offset = addr % nor->page_size;
-       page = addr / nor->page_size;
-       page <<= (nor->page_size > 512) ? 10 : 9;
+       offset = addr % page_size;
+       page = addr / page_size;
+       page <<= (page_size > 512) ? 10 : 9;
 
        return page | offset;
 }
@@ -40,6 +41,7 @@ static u32 s3an_convert_addr(struct spi_nor *nor, u32 addr)
 static int xilinx_nor_setup(struct spi_nor *nor,
                            const struct spi_nor_hwcaps *hwcaps)
 {
+       u32 page_size;
        int ret;
 
        ret = spi_nor_xread_sr(nor, nor->bouncebuf);
@@ -64,10 +66,11 @@ static int xilinx_nor_setup(struct spi_nor *nor,
         */
        if (nor->bouncebuf[0] & XSR_PAGESIZE) {
                /* Flash in Power of 2 mode */
-               nor->page_size = (nor->page_size == 264) ? 256 : 512;
-               nor->mtd.writebufsize = nor->page_size;
-               nor->mtd.size = 8 * nor->page_size * nor->info->n_sectors;
-               nor->mtd.erasesize = 8 * nor->page_size;
+               page_size = (nor->params->page_size == 264) ? 256 : 512;
+               nor->params->page_size = page_size;
+               nor->mtd.writebufsize = page_size;
+               nor->mtd.size = 8 * page_size * nor->info->n_sectors;
+               nor->mtd.erasesize = 8 * page_size;
        } else {
                /* Flash in Default addressing mode */
                nor->params->convert_addr = s3an_convert_addr;
index f67457748ed8485c3b24e2804f31611f0b3ce44b..fc90fce26e337a56a94a99fdb76840fe6d8e6d2e 100644 (file)
@@ -371,7 +371,6 @@ struct spi_nor_flash_parameter;
  * @bouncebuf_size:    size of the bounce buffer
  * @info:              SPI NOR part JEDEC MFR ID and other info
  * @manufacturer:      SPI NOR manufacturer
- * @page_size:         the page size of the SPI NOR
  * @addr_width:                number of address bytes
  * @erase_opcode:      the opcode for erasing a sector
  * @read_opcode:       the read opcode
@@ -401,7 +400,6 @@ struct spi_nor {
        size_t                  bouncebuf_size;
        const struct flash_info *info;
        const struct spi_nor_manufacturer *manufacturer;
-       u32                     page_size;
        u8                      addr_width;
        u8                      erase_opcode;
        u8                      read_opcode;