[PATCH] mtd: spi-nor: spansion: Add support for CY15V104QSN
Tudor Ambarus
tudor.ambarus at linaro.org
Thu Mar 20 01:46:32 PDT 2025
On 3/19/25 3:02 PM, LECOINTRE Philippe wrote:
> Classified as: {OPEN}
>
> Hello,
Hi,
Don't top post please, it's hard to follow the emails exchanged.
>
> Thank you for your feedback.
you're welcome!
>
> I encounter some issue attempting to use the at25 driver.
> I am not able to read the flash ID with at25 driver because the chipselect appear to be deselected between the RDID command and the read data. The RDID command is not taken into account and the chip only reply with 0xff.
> With at25 driver, it use a spi_message containing two spi_transfer, one spi_transfer for the command and one spi_transfer for the read data. For some reason, this end up in .transfer_one() in the spi_controller driver of my SoC.
What spi controller driver, is it upstreamed?
> With spi-nor driver, it use spi_mem_exec_op() which work well in my case.
> It appear at25 driver can currently be used with Cypress FM25 chip and from some of the datasheet of this family it seems that the chipselect need to be driven low during the entire RDID sequence.
> Am I missing something here ?
Splitting opcode, address, dummy and data per spi_transfers shall work,
spi_mem_exec_op() does it too when the controller does not define mem_ops.
It probably just a bug somewhere, raising CS up between the transfers
shall be fine.
>
> Currently, the at25 driver assume a lot of property from the ID data (manufacturer and size) which don't seems to be relevant with the CY15V104QSN model.
> This chip is similar to cy15b104q and cy15v104q currently supported by spi-nor driver.
> https://web.git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/drivers/mtd/spi-nor/spansion.c?id=8a2644d5f3608822925c9204a3d19a8e3025fd4a
having those flashes in SPI NOR was a mistake. We can't just drop them
as we'll break backward compatibility.
> Also, I don't have access to at25 spi eeprom to validate any deep modifications on this driver if we need to do so according to the thread you are pointing to.
>
> How can we handle this ?
You need to figure out why your flash doesn't work as expected and fix
it. Is your controller spimem capable? If yes, try dropping the ctrl
mem_ops and see if it behaves sane using SPI NOR and the controller
using spi transfers. If it doesn't behave sane, then there's probably a
problem into the controller driver.
Cheers,
ta
>
> Regards,
> Philippe
>
>
> {OPEN}
>
>> -----Original Message-----
>> From: Tudor Ambarus <tudor.ambarus at linaro.org>
>> Sent: Thursday, March 6, 2025 11:54 AM
>> To: LECOINTRE Philippe <philippe.lecointre at thalesgroup.com>; Pratyush
>> Yadav <pratyush at kernel.org>; Michael Walle <mwalle at kernel.org>; linux-
>> mtd at lists.infradead.org
>> Cc: LEJEUNE Sebastien <sebastien.lejeune at thalesgroup.com>; LENAIN
>> Simon <simon.lenain at thalesgroup.com>; RENAULT Xavier
>> <xavier.renault at thalesgroup.com>
>> Subject: Re: [PATCH] mtd: spi-nor: spansion: Add support for CY15V104QSN
>>
>>
>>
>> On 2/28/25 2:01 PM, LECOINTRE Philippe wrote:
>>> Infineon CY15V104QSN is 4Mbit serial SPI F-RAM device.
>>
>> Please consider moving this flash to the at25 EEPROM driver:
>> https://lore.kernel.org/linux-mtd/20240604074231.1874972-1-
>> mwalle at kernel.org/
>>
>> Cheers,
>> ta
>>>
>>> Signed-off-by: Philippe Lecointre <philippe.lecointre at thalesgroup.com>
>>> Acked-by: Simon Lenain <simon.lenain at thalesgroup.com>
>>> ---
>>> drivers/mtd/spi-nor/spansion.c | 6 ++++++
>>> 1 file changed, 6 insertions(+)
>>>
>>> diff --git a/drivers/mtd/spi-nor/spansion.c
>>> b/drivers/mtd/spi-nor/spansion.c index bf08dbf5e742..32f8892d7afe
>>> 100644
>>> --- a/drivers/mtd/spi-nor/spansion.c
>>> +++ b/drivers/mtd/spi-nor/spansion.c
>>> @@ -922,6 +922,12 @@ static const struct flash_info spansion_nor_parts[]
>> = {
>>> .size = SZ_512K,
>>> .sector_size = SZ_512K,
>>> .flags = SPI_NOR_NO_ERASE,
>>> + }, {
>>> + .id = SNOR_ID(0x50, 0x51, 0x80, 0x06, 0x00, 0x00),
>>> + .name = "cy15v104qsn",
>>> + .size = SZ_512K,
>>> + .sector_size = SZ_512K,
>>> + .flags = SPI_NOR_NO_ERASE,
>>> }, {
>>> .id = SNOR_ID(0x34, 0x2a, 0x1a, 0x0f, 0x03, 0x90),
>>> .name = "s25hl512t",
More information about the linux-mtd
mailing list