Thread (65 messages) 65 messages, 4 authors, 2025-08-29

Re: [PATCH v3 00/14] spi: airoha: driver fixes & improvements

From: Mikhail Kshevetskiy <hidden>
Date: 2025-08-21 11:13:21
Also in: linux-spi, lkml

On 21.08.2025 09:58, Lorenzo Bianconi wrote:
quoted
This patch series greatly improve airoha snfi driver and fix a
number of serious bug.

Fixed bugs:
 * Fix reading/writing of flashes with more than one plane per lun
 * Fix inability to read/write oob area
 * Fill the buffer with 0xff before writing
 * Fix reading of flashes supporting continuous reading mode
 * Fix error paths

Improvements:
 * Add support of dual/quad wires spi modes in exec_op().
 * Support of dualio/quadio flash reading commands
 * Remove dirty hack that reads flash page settings from SNFI registers
   during driver startup

Unfortunately I am unable to test the driver with linux at the moment,
so only the following testing was done:
It seems to me this is quite an important rework of the driver. I would prefer
to have some test results for this series. Are you able to run mtd_test kernel
module for testing?
I'll try to build latest openwrt with this patches  and mtd_test kernel
module and try it on one of our boards.

Actually patches can be divided on to parts:
* fixes of current driver (patches 1-10)
* change of behavior to avoid reading flash page settings from SNFI
registers during driver startup (patches 11-14)

The changes are based on the code we are using for more than 3 years. I
adapt it to latest linux/u-boot code.

Up to now the only known issue appears on en7523 chips only. Here a
corresponding patch description (not added to this series)
====================================================== spi: airoha:
en7523: workaround flash damaging if UART_TXD was short to GND We found
that some serial console may pull TX line to GROUND during board boot
time. Airoha uses TX line as one of it's BOOT pins. This will lead to
booting in RESERVED boot mode. It was found that some flashes operates
incorrectly in RESERVED mode. Micron and Skyhigh flashes are definitely
affected by the issue, Winbond flashes are NOT affected. Details:
-------- DMA reading of odd pages on affected flashes operates
incorrectly. Page reading offset (start of the page) on hardware level
is replaced by 0x10. Thus results in incorrect data reading. Usage of
UBI make things even worse. Any attempt to access UBI leads to ubi
damaging. As result OS loading becomes impossible. Non-DMA reading is
OK. =======================================================

Regards,
Mikhail

Regards,
Lorenzo
quoted
 * Driver compiles without error.
 * All changes were tested with corresponding u-boot driver. U-Boot
   SpiNAND driver was modified as well to match linux-6.17-rc2 with
   additional fixes for continuous mode.

Changes v2:
 * minor fix
 * add comments to code

Changes v3:
 * add patch to prevent continuous reading

Mikhail Kshevetskiy (14):
  spi: airoha: return an error for continuous mode dirmap creation cases
  spi: airoha: remove unnecessary restriction length
  spi: airoha: add support of dual/quad wires spi modes
  spi: airoha: remove unnecessary switch to non-dma mode
  spi: airoha: unify dirmap read/write code
  spi: airoha: switch back to non-dma mode in the case of error
  spi: airoha: fix reading/writing of flashes with more than one plane
    per lun
  spi: airoha: support of dualio/quadio flash reading commands
  spi: airoha: allow reading/writing of oob area
  spi: airoha: buffer must be 0xff-ed before writing
  spi: airoha: avoid setting of page/oob sizes in REG_SPI_NFI_PAGEFMT
  spi: airoha: reduce the number of modification of REG_SPI_NFI_CNFG and
    REG_SPI_NFI_SECCUS_SIZE registers
  spi: airoha: set custom sector size equal to flash page size
  spi: airoha: avoid reading flash page settings from SNFI registers
    during driver startup

 drivers/spi/spi-airoha-snfi.c | 508 +++++++++++++++++-----------------
 1 file changed, 260 insertions(+), 248 deletions(-)

-- 
2.50.1
  
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help