mtd: spi-nor: Create macros to define chip IDs and geometries
authorMiquel Raynal <miquel.raynal@bootlin.com>
Thu, 15 Dec 2022 08:12:33 +0000 (09:12 +0100)
committerTudor Ambarus <tudor.ambarus@linaro.org>
Thu, 26 Jan 2023 17:52:47 +0000 (19:52 +0200)
The INFO() macro defines an ID array and a couple of geometry
properties. Right now all its lines are duplicated twice because of the
INFO6() macro (for extended IDs) and soon as well we will need to add a
geometry parameter to include the number of banks.

In order to limit the code duplication, let's create a number of
intermediate macros which will facilitate defining high-level INFOX()
macros.

There is no functional change.

Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Reviewed-by: Pratyush Yadav <pratyush@kernel.org>
Link: https://lore.kernel.org/r/20221215081241.407098-2-miquel.raynal@bootlin.com
Signed-off-by: Tudor Ambarus <tudor.ambarus@linaro.org>
drivers/mtd/spi-nor/core.h

index f03b55c..f6d012e 100644 (file)
@@ -529,33 +529,30 @@ struct flash_info {
        const struct spi_nor_fixups *fixups;
 };
 
+#define SPI_NOR_ID_2ITEMS(_id) ((_id) >> 8) & 0xff, (_id) & 0xff
+#define SPI_NOR_ID_3ITEMS(_id) ((_id) >> 16) & 0xff, SPI_NOR_ID_2ITEMS(_id)
+
+#define SPI_NOR_ID(_jedec_id, _ext_id)                                 \
+       .id = { SPI_NOR_ID_3ITEMS(_jedec_id), SPI_NOR_ID_2ITEMS(_ext_id) }, \
+       .id_len = !(_jedec_id) ? 0 : (3 + ((_ext_id) ? 2 : 0))
+
+#define SPI_NOR_ID6(_jedec_id, _ext_id)                                        \
+       .id = { SPI_NOR_ID_3ITEMS(_jedec_id), SPI_NOR_ID_3ITEMS(_ext_id) }, \
+       .id_len = 6
+
+#define SPI_NOR_GEOMETRY(_sector_size, _n_sectors)                     \
+       .sector_size = (_sector_size),                                  \
+       .n_sectors = (_n_sectors),                                      \
+       .page_size = 256
+
 /* Used when the "_ext_id" is two bytes at most */
 #define INFO(_jedec_id, _ext_id, _sector_size, _n_sectors)             \
-               .id = {                                                 \
-                       ((_jedec_id) >> 16) & 0xff,                     \
-                       ((_jedec_id) >> 8) & 0xff,                      \
-                       (_jedec_id) & 0xff,                             \
-                       ((_ext_id) >> 8) & 0xff,                        \
-                       (_ext_id) & 0xff,                               \
-                       },                                              \
-               .id_len = (!(_jedec_id) ? 0 : (3 + ((_ext_id) ? 2 : 0))),       \
-               .sector_size = (_sector_size),                          \
-               .n_sectors = (_n_sectors),                              \
-               .page_size = 256,                                       \
+       SPI_NOR_ID((_jedec_id), (_ext_id)),                             \
+       SPI_NOR_GEOMETRY((_sector_size), (_n_sectors)),
 
 #define INFO6(_jedec_id, _ext_id, _sector_size, _n_sectors)            \
-               .id = {                                                 \
-                       ((_jedec_id) >> 16) & 0xff,                     \
-                       ((_jedec_id) >> 8) & 0xff,                      \
-                       (_jedec_id) & 0xff,                             \
-                       ((_ext_id) >> 16) & 0xff,                       \
-                       ((_ext_id) >> 8) & 0xff,                        \
-                       (_ext_id) & 0xff,                               \
-                       },                                              \
-               .id_len = 6,                                            \
-               .sector_size = (_sector_size),                          \
-               .n_sectors = (_n_sectors),                              \
-               .page_size = 256,                                       \
+       SPI_NOR_ID6((_jedec_id), (_ext_id)),                            \
+       SPI_NOR_GEOMETRY((_sector_size), (_n_sectors)),
 
 #define CAT25_INFO(_sector_size, _n_sectors, _page_size, _addr_nbytes) \
                .sector_size = (_sector_size),                          \