From: Michael Walle <mwalle@kernel.org>
To: Tudor Ambarus <tudor.ambarus@linaro.org>
Cc: Pratyush Yadav <pratyush@kernel.org>,
Miquel Raynal <miquel.raynal@bootlin.com>,
Richard Weinberger <richard@nod.at>,
Vignesh Raghavendra <vigneshr@ti.com>,
linux-kernel@vger.kernel.org, linux-mtd@lists.infradead.org
Subject: Re: [PATCH v2 05/41] mtd: spi-nor: convert .n_sectors to .size
Date: Fri, 01 Sep 2023 13:00:45 +0200 [thread overview]
Message-ID: <d7985b397e19f66c0692369e20a4fba6@kernel.org> (raw)
In-Reply-To: <3df0728d-60d8-1cff-a0d9-f3de505dfa17@linaro.org>
Am 2023-08-24 10:25, schrieb Tudor Ambarus:
> On 8/22/23 08:09, Michael Walle wrote:
>> .n_sectors is rarely used. In fact it is only used in swp.c and to
>> calculate the flash size in the core. The use in swp.c might be
>> converted to use the (largest) flash erase size. For now, we just
>> locally calculate the sector size.
>>
>> Simplify the flash_info database and set the size of the flash
>> directly.
>> This also let us use the SZ_x macros.
>>
>> Signed-off-by: Michael Walle <mwalle@kernel.org>
>> ---
>> drivers/mtd/spi-nor/core.c | 2 +-
>> drivers/mtd/spi-nor/core.h | 8 ++++----
>> drivers/mtd/spi-nor/swp.c | 9 +++++----
>> drivers/mtd/spi-nor/xilinx.c | 4 ++--
>> 4 files changed, 12 insertions(+), 11 deletions(-)
>>
>> diff --git a/drivers/mtd/spi-nor/core.c b/drivers/mtd/spi-nor/core.c
>> index 286155002cdc..f4cc2eafcc5e 100644
>> --- a/drivers/mtd/spi-nor/core.c
>> +++ b/drivers/mtd/spi-nor/core.c
>> @@ -2999,7 +2999,7 @@ static void spi_nor_init_default_params(struct
>> spi_nor *nor)
>>
>> /* Set SPI NOR sizes. */
>> params->writesize = 1;
>> - params->size = (u64)info->sector_size * info->n_sectors;
>> + params->size = info->size;
>
> would be good to check the sanity of info->size to not be null and to
> be
> divisible by sector_size.
Have a look at the later patches, info->size can be zero, indicating
that we need to parse SFDP for this flash.
I could validate that the size is a multiple of sector_size, but
that one might also be zero. Of course you could solve this by
additional logic. But I treated that one as a misconfiguration
of the flash_info entry. It's nothing which can happen during
runtime. Anyway, I have no strong opinion on the "is multiple
of sector_size" check (for now, maybe there's something I didn't
thought of now).
>
>> params->bank_size = params->size;
>> params->page_size = info->page_size;
>>
>> diff --git a/drivers/mtd/spi-nor/core.h b/drivers/mtd/spi-nor/core.h
>> index dfc20a3296fb..12c35409493b 100644
>> --- a/drivers/mtd/spi-nor/core.h
>> +++ b/drivers/mtd/spi-nor/core.h
>> @@ -443,9 +443,9 @@ struct spi_nor_fixups {
>> * @id: the flash's ID bytes. The first three bytes are
>> the
>> * JEDIC ID. JEDEC ID zero means "no ID" (mostly
>> older chips).
>> * @id_len: the number of bytes of ID.
>> + * @size: the size of the flash in bytes.
>> * @sector_size: the size listed here is what works with
>> SPINOR_OP_SE, which
>> * isn't necessarily called a "sector" by the
>> vendor.
>> - * @n_sectors: the number of sectors.
>> * @n_banks: the number of banks.
>> * @page_size: the flash's page size.
>> * @addr_nbytes: number of address bytes to send.
>> @@ -505,8 +505,8 @@ struct flash_info {
>> char *name;
>> u8 id[SPI_NOR_MAX_ID_LEN];
>> u8 id_len;
>> + size_t size;
>> unsigned sector_size;
>> - u16 n_sectors;
>> u16 page_size;
>> u8 n_banks;
>> u8 addr_nbytes;
>> @@ -556,8 +556,8 @@ struct flash_info {
>> .id_len = 6
>>
>> #define SPI_NOR_GEOMETRY(_sector_size, _n_sectors, _n_banks) \
>> + .size = (_sector_size) * (_n_sectors), \
>> .sector_size = (_sector_size), \
>> - .n_sectors = (_n_sectors), \
>> .page_size = 256, \
>> .n_banks = (_n_banks)
>>
>> @@ -575,8 +575,8 @@ struct flash_info {
>> SPI_NOR_GEOMETRY((_sector_size), (_n_sectors), 1),
>>
>> #define CAT25_INFO(_sector_size, _n_sectors, _page_size,
>> _addr_nbytes) \
>> + .size = (_sector_size) * (_n_sectors), \
>> .sector_size = (_sector_size), \
>> - .n_sectors = (_n_sectors), \
>> .page_size = (_page_size), \
>> .n_banks = 1, \
>> .addr_nbytes = (_addr_nbytes), \
>> diff --git a/drivers/mtd/spi-nor/swp.c b/drivers/mtd/spi-nor/swp.c
>> index 5ab9d5324860..40bf52867095 100644
>> --- a/drivers/mtd/spi-nor/swp.c
>> +++ b/drivers/mtd/spi-nor/swp.c
>> @@ -34,17 +34,18 @@ static u8 spi_nor_get_sr_tb_mask(struct spi_nor
>> *nor)
>> static u64 spi_nor_get_min_prot_length_sr(struct spi_nor *nor)
>> {
>> unsigned int bp_slots, bp_slots_needed;
>> + unsigned int sector_size = nor->info->sector_size;
>> + u64 n_sectors = div_u64(nor->params->size, sector_size);
>
> if params(info)->size is zero here, we get into trouble.
Please note that this is not the info->size, params->size cannot
be zero. If info->size was zero, we have to parse SFDP which hopefully
will give us a sane size.
And regarding the sector_size, which could be zero here. I want to
replace that logic, so we don't rely on the flash_info sector size.
From a later patch:
/*
* sector_size will eventually be replaced with the max erase
size of
* the flash. For now, we need to have that ugly default.
*/
-michael
______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/
next prev parent reply other threads:[~2023-09-01 11:01 UTC|newest]
Thread overview: 78+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-08-22 7:09 [PATCH v2 00/41] mtd: spi-nor: clean the flash_info database up Michael Walle
2023-08-22 7:09 ` [PATCH v2 01/41] mtd: spi-nor: remove catalyst 'flashes' Michael Walle
2023-08-24 7:55 ` Tudor Ambarus
2023-08-24 8:33 ` Tudor Ambarus
2023-08-22 7:09 ` [PATCH v2 02/41] mtd: spi-nor: remove Fujitsu MB85RS1MT support Michael Walle
2023-08-24 7:56 ` Tudor Ambarus
2023-08-22 7:09 ` [PATCH v2 03/41] mtd: spi-nor: xilinx: use SPI_NOR_ID() in S3AN_INFO() Michael Walle
2023-08-24 7:59 ` Tudor Ambarus
2023-08-22 7:09 ` [PATCH v2 04/41] mtd: spi-nor: xilinx: remove addr_nbytes from S3AN_INFO() Michael Walle
2023-08-24 8:13 ` Tudor Ambarus
2023-08-22 7:09 ` [PATCH v2 05/41] mtd: spi-nor: convert .n_sectors to .size Michael Walle
2023-08-24 8:25 ` Tudor Ambarus
2023-09-01 11:00 ` Michael Walle [this message]
2023-08-22 7:09 ` [PATCH v2 06/41] mtd: spi-nor: default page_size to 256 bytes Michael Walle
2023-08-24 8:36 ` Tudor Ambarus
2023-09-01 11:03 ` Michael Walle
2023-08-22 7:09 ` [PATCH v2 07/41] mtd: spi-nor: store .n_banks in struct spi_nor_flash_parameter Michael Walle
2023-08-24 8:41 ` Tudor Ambarus
2023-08-22 7:09 ` [PATCH v2 08/41] mtd: spi-nor: default .n_banks to 1 Michael Walle
2023-08-24 8:42 ` Tudor Ambarus
2023-08-22 7:09 ` [PATCH v2 09/41] mtd: spi-nor: push 4k SE handling into spi_nor_select_uniform_erase() Michael Walle
2023-09-05 14:59 ` Tudor Ambarus
2023-08-22 7:09 ` [PATCH v2 10/41] mtd: spi-nor: make sector_size optional Michael Walle
2023-09-06 5:44 ` Tudor Ambarus
2023-09-06 6:52 ` Michael Walle
2023-08-22 7:09 ` [PATCH v2 11/41] mtd: spi-nor: drop .parse_sfdp Michael Walle
2023-09-06 6:01 ` Tudor Ambarus
2023-09-06 6:55 ` Michael Walle
2023-09-06 14:55 ` Tudor Ambarus
2023-09-07 6:55 ` Michael Walle
2023-08-22 7:09 ` [PATCH v2 12/41] mtd: spi-nor: introduce (temporary) INFO0() Michael Walle
2023-09-06 6:04 ` Tudor Ambarus
2023-09-06 7:04 ` Michael Walle
2023-08-22 7:09 ` [PATCH v2 13/41] mtd: spi-nor: move the .id and .id_len into an own structure Michael Walle
2023-09-06 6:12 ` Tudor Ambarus
2023-09-06 7:13 ` Michael Walle
2023-09-06 7:15 ` Tudor Ambarus
2023-08-22 7:09 ` [PATCH v2 14/41] mtd: spi-nor: rename .otp_org to .otp and make it a pointer Michael Walle
2023-09-06 7:25 ` Tudor Ambarus
2023-08-22 7:09 ` [PATCH v2 15/41] mtd: spi-nor: add SNOR_ID() and SNOR_OTP() Michael Walle
2023-09-06 7:28 ` Tudor Ambarus
2023-08-22 7:09 ` [PATCH v2 16/41] mtd: spi-nor: remove or move flash_info comments Michael Walle
2023-09-06 7:28 ` Tudor Ambarus
2023-08-22 7:09 ` [PATCH v2 17/41] mtd: spi-nor: atmel: convert flash_info to new format Michael Walle
2023-09-06 7:35 ` Tudor Ambarus
2023-09-06 7:38 ` Michael Walle
2023-09-07 8:13 ` Michael Walle
2023-09-07 9:45 ` Tudor Ambarus
2023-08-22 7:09 ` [PATCH v2 18/41] mtd: spi-nor: eon: " Michael Walle
2023-08-22 7:09 ` [PATCH v2 19/41] mtd: spi-nor: esmt: " Michael Walle
2023-08-22 7:09 ` [PATCH v2 20/41] mtd: spi-nor: everspin: " Michael Walle
2023-08-22 7:09 ` [PATCH v2 21/41] mtd: spi-nor: gigadevice: " Michael Walle
2023-08-22 7:09 ` [PATCH v2 22/41] mtd: spi-nor: intel: " Michael Walle
2023-08-22 7:09 ` [PATCH v2 23/41] mtd: spi-nor: issi: " Michael Walle
2023-08-22 7:09 ` [PATCH v2 24/41] mtd: spi-nor: macronix: " Michael Walle
2023-08-22 7:09 ` [PATCH v2 25/41] mtd: spi-nor: micron-st: " Michael Walle
2023-08-22 7:09 ` [PATCH v2 26/41] mtd: spi-nor: spansion: " Michael Walle
2023-08-22 7:09 ` [PATCH v2 27/41] mtd: spi-nor: sst: " Michael Walle
2023-08-22 7:09 ` [PATCH v2 28/41] mtd: spi-nor: winbond: " Michael Walle
2023-08-22 7:09 ` [PATCH v2 29/41] mtd: spi-nor: xilinx: use new macros in S3AN_INFO() Michael Walle
2023-08-22 7:09 ` [PATCH v2 30/41] mtd: spi-nor: xmc: convert flash_info to new format Michael Walle
2023-08-22 7:09 ` [PATCH v2 31/41] mtd: spi-nor: atmel: sort flash_info database Michael Walle
2023-08-22 7:09 ` [PATCH v2 32/41] mtd: spi-nor: eon: " Michael Walle
2023-08-22 7:09 ` [PATCH v2 33/41] mtd: spi-nor: gigadevice: " Michael Walle
2023-08-22 7:09 ` [PATCH v2 34/41] mtd: spi-nor: issi: " Michael Walle
2023-08-22 7:09 ` [PATCH v2 35/41] mtd: spi-nor: macronix: " Michael Walle
2023-08-22 7:09 ` [PATCH v2 36/41] mtd: spi-nor: micron-st: " Michael Walle
2023-08-22 7:09 ` [PATCH v2 37/41] mtd: spi-nor: spansion: " Michael Walle
2023-08-22 7:09 ` [PATCH v2 38/41] mtd: spi-nor: sst: " Michael Walle
2023-08-22 7:09 ` [PATCH v2 39/41] mtd: spi-nor: winbond: sort flash_info entries Michael Walle
2023-09-06 7:36 ` Tudor Ambarus
2023-09-07 8:14 ` Michael Walle
2023-09-07 9:42 ` Tudor Ambarus
2023-08-22 7:09 ` [PATCH v2 40/41] mtd: spi-nor: atmel: drop duplicate entry Michael Walle
2023-09-06 7:39 ` Tudor Ambarus
2023-08-22 7:09 ` [PATCH v2 41/41] mtd: spi-nor: core: get rid of the INFOx() macros Michael Walle
2023-09-06 7:40 ` Tudor Ambarus
2023-09-06 7:43 ` [PATCH v2 00/41] mtd: spi-nor: clean the flash_info database up Tudor Ambarus
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=d7985b397e19f66c0692369e20a4fba6@kernel.org \
--to=mwalle@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mtd@lists.infradead.org \
--cc=miquel.raynal@bootlin.com \
--cc=pratyush@kernel.org \
--cc=richard@nod.at \
--cc=tudor.ambarus@linaro.org \
--cc=vigneshr@ti.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.