drivers: flash: add NXP S32 QSPI flash NOR driver
Add support for flash NOR memory devices on a NXP S32 QSPI bus. The driver uses a fixed LUT configuration assuming a default standard page size and erase types, and allows to select between multiple read/program instructions/modes. It is also possible to read the flash device characteristics from the device at run-time as long as the memory is JESD216 compatible, providing more flexibility. Signed-off-by: Manuel Argüelles <manuel.arguelles@nxp.com>
This commit is contained in:
parent
5dad944351
commit
6d0a876525
|
@ -106,6 +106,12 @@ zephyr_library_include_directories_ifdef(
|
|||
${ZEPHYR_BASE}/drivers/memc
|
||||
)
|
||||
|
||||
zephyr_library_sources_ifdef(CONFIG_FLASH_NXP_S32_QSPI_NOR flash_nxp_s32_qspi_nor.c)
|
||||
zephyr_library_include_directories_ifdef(
|
||||
CONFIG_FLASH_NXP_S32_QSPI_NOR
|
||||
${ZEPHYR_BASE}/drivers/memc
|
||||
)
|
||||
|
||||
zephyr_library_sources_ifdef(CONFIG_FLASH_SHELL flash_shell.c)
|
||||
zephyr_library_sources_ifdef(CONFIG_FLASH_JESD216 jesd216.c)
|
||||
zephyr_library_sources_ifdef(CONFIG_FLASH_INFINEON_CAT1 flash_ifx_cat1.c)
|
||||
|
|
|
@ -154,4 +154,6 @@ source "drivers/flash/Kconfig.ifx_cat1"
|
|||
|
||||
source "drivers/flash/Kconfig.numaker"
|
||||
|
||||
source "drivers/flash/Kconfig.nxp_s32"
|
||||
|
||||
endif # FLASH
|
||||
|
|
54
drivers/flash/Kconfig.nxp_s32
Normal file
54
drivers/flash/Kconfig.nxp_s32
Normal file
|
@ -0,0 +1,54 @@
|
|||
# Copyright 2023 NXP
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
config FLASH_NXP_S32_QSPI_NOR
|
||||
bool "NXP S32 QSPI NOR driver"
|
||||
default y
|
||||
depends on DT_HAS_NXP_S32_QSPI_NOR_ENABLED
|
||||
select MEMC
|
||||
select FLASH_HAS_PAGE_LAYOUT
|
||||
select FLASH_HAS_DRIVER_ENABLED
|
||||
select FLASH_JESD216
|
||||
help
|
||||
Enable the Flash driver for a NOR Serial Flash Memory device connected
|
||||
to an NXP S32 QSPI bus.
|
||||
|
||||
if FLASH_NXP_S32_QSPI_NOR
|
||||
|
||||
config FLASH_NXP_S32_QSPI_NOR_SFDP_RUNTIME
|
||||
bool "Read flash parameters at runtime"
|
||||
help
|
||||
Read flash device characteristics from the device at runtime.
|
||||
This option should provide functionality for all supported
|
||||
JESD216-compatible devices, with the following notes:
|
||||
- Quad Enable Requirements bitfield (DW15) must be present in the SFDP
|
||||
tables to configure Quad mode. Otherwise it defaults to Dual or
|
||||
Single mode as supported by the device.
|
||||
- Soft Reset bitfield (DW16) must be present in the SFDP tables to
|
||||
automatically reset the device at initialization time.
|
||||
- 0-X-X mode discovery not yet implemented by the HAL.
|
||||
|
||||
If not selected, the driver uses a fixed configuration assuming 256 By
|
||||
page size and 4 KiBy, 32 KiBy and 64 KiBy erase instructions. The
|
||||
device size and jedec-id properties must be set in devicetree node.
|
||||
|
||||
config FLASH_NXP_S32_QSPI_VERIFY_ERASE
|
||||
bool "Verify memory after erased"
|
||||
help
|
||||
Verify contents of memory after erased.
|
||||
|
||||
config FLASH_NXP_S32_QSPI_VERIFY_WRITE
|
||||
bool "Verify memory after written"
|
||||
help
|
||||
Verify contents of memory after written.
|
||||
|
||||
config FLASH_NXP_S32_QSPI_LAYOUT_PAGE_SIZE
|
||||
int "Page size to use for FLASH_LAYOUT feature"
|
||||
default 4096
|
||||
help
|
||||
When CONFIG_FLASH_PAGE_LAYOUT is used this driver will support that API.
|
||||
By default the page size corresponds to the sector size (4096) for a NOR
|
||||
flash memory. Other options may include the 32K-byte erase size (32768),
|
||||
the block size (65536), or any non-zero multiple of the sector size.
|
||||
|
||||
endif # FLASH_NXP_S32_QSPI_NOR
|
1106
drivers/flash/flash_nxp_s32_qspi_nor.c
Normal file
1106
drivers/flash/flash_nxp_s32_qspi_nor.c
Normal file
File diff suppressed because it is too large
Load diff
22
dts/bindings/mtd/nxp,s32-qspi-device.yaml
Normal file
22
dts/bindings/mtd/nxp,s32-qspi-device.yaml
Normal file
|
@ -0,0 +1,22 @@
|
|||
# Copyright 2023 NXP
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
description: |
|
||||
QSPI memory device supporting xSPI or Hyperbus.
|
||||
|
||||
compatible: "nxp,s32-qspi-device"
|
||||
|
||||
include: [base.yaml, "jedec,jesd216.yaml"]
|
||||
|
||||
on-bus: qspi
|
||||
|
||||
properties:
|
||||
reg:
|
||||
required: true
|
||||
|
||||
memory-alignment:
|
||||
type: int
|
||||
description: |
|
||||
Memory alignment in bytes, used to calculate padding when performing
|
||||
unaligned accesses.
|
||||
If not provided, 1 byte alignment will be selected.
|
38
dts/bindings/mtd/nxp,s32-qspi-nor.yaml
Normal file
38
dts/bindings/mtd/nxp,s32-qspi-nor.yaml
Normal file
|
@ -0,0 +1,38 @@
|
|||
# Copyright 2023 NXP
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
description: |
|
||||
QSPI NOR flash connected to the NXP S32 QSPI bus.
|
||||
|
||||
compatible: "nxp,s32-qspi-nor"
|
||||
|
||||
include: "nxp,s32-qspi-device.yaml"
|
||||
|
||||
properties:
|
||||
has-32k-erase:
|
||||
type: boolean
|
||||
description: |
|
||||
Set if the memory device supports 32 KiBy block erase operation.
|
||||
|
||||
readoc:
|
||||
type: string
|
||||
enum:
|
||||
- "1-1-1" # 0x0B
|
||||
- "1-1-2" # 0x3B
|
||||
- "1-2-2" # 0xBB
|
||||
- "1-1-4" # 0x6B
|
||||
- "1-4-4" # 0xEB
|
||||
description: |
|
||||
Specify the number of data lines and opcode used for reading.
|
||||
If not provided, 1-1-1 will be selected.
|
||||
|
||||
writeoc:
|
||||
type: string
|
||||
enum:
|
||||
- "1-1-1" # 0x02
|
||||
- "1-1-2" # 0xA2
|
||||
- "1-1-4" # 0x32
|
||||
- "1-4-4" # 0x38
|
||||
description: |
|
||||
Specify the number of data lines and opcode used for writing.
|
||||
If not provided, 1-1-1 will be selected.
|
Loading…
Reference in a new issue