Message ID | 20221110155513.819798-2-miquel.raynal@bootlin.com |
---|---|
State | Superseded |
Delegated to: | Ambarus Tudor |
Headers | show |
Series | mtd: spi-nor: read while write support | expand |
On 10/11/22 04:55PM, Miquel Raynal wrote: > 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 not functional change. I think the INFO() macros in general are a bit convoluted, but this at least makes them a bit better. Reviewed-by: Pratyush Yadav <pratyush@kernel.org> > > Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com> > --- > drivers/mtd/spi-nor/core.h | 43 ++++++++++++++++++-------------------- > 1 file changed, 20 insertions(+), 23 deletions(-) > > diff --git a/drivers/mtd/spi-nor/core.h b/drivers/mtd/spi-nor/core.h > index 85b0cf254e97..dc74c7be3e28 100644 > --- a/drivers/mtd/spi-nor/core.h > +++ b/drivers/mtd/spi-nor/core.h > @@ -527,33 +527,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), \ > -- > 2.34.1 > > > ______________________________________________________ > Linux MTD discussion mailing list > http://lists.infradead.org/mailman/listinfo/linux-mtd/
diff --git a/drivers/mtd/spi-nor/core.h b/drivers/mtd/spi-nor/core.h index 85b0cf254e97..dc74c7be3e28 100644 --- a/drivers/mtd/spi-nor/core.h +++ b/drivers/mtd/spi-nor/core.h @@ -527,33 +527,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), \
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 not functional change. Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com> --- drivers/mtd/spi-nor/core.h | 43 ++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 23 deletions(-)