| .. SPDX-License-Identifier: GPL-2.0+ | |
| NVM XIP Block Storage Emulation Driver | |
| ====================================== | |
| Summary | |
| ------- | |
| Non-Volatile Memory devices with addressable memory (e.g: QSPI NOR flash) could | |
| be used for block storage needs (e.g: parsing a GPT layout in a raw QSPI NOR flash). | |
| The NVMXIP Uclass provides this functionality and can be used for any 64-bit platform. | |
| The NVMXIP Uclass provides the following drivers: | |
| nvmxip-blk block driver: | |
| A generic block driver allowing to read from the XIP flash. | |
| The driver belongs to UCLASS_BLK. | |
| The driver implemented by drivers/mtd/nvmxip/nvmxip.c | |
| nvmxip Uclass driver: | |
| When a device is described in the DT and associated with UCLASS_NVMXIP, | |
| the Uclass creates a block device and binds it with the nvmxip-blk. | |
| The Uclass driver implemented by drivers/mtd/nvmxip/nvmxip-uclass.c | |
| nvmxip_qspi driver : | |
| The driver probed with the DT and is the parent of the blk#<id> device. | |
| nvmxip_qspi can be reused by other platforms. If the platform | |
| has custom settings to apply before using the flash, then the platform | |
| can provide its own parent driver belonging to UCLASS_NVMXIP and reuse | |
| nvmxip-blk. The custom driver can be implemented like nvmxip_qspi in | |
| addition to the platform custom settings. | |
| The nvmxip_qspi driver belongs to UCLASS_NVMXIP. | |
| The driver implemented by drivers/mtd/nvmxip/nvmxip_qspi.c | |
| For example, if we have two NVMXIP devices described in the DT | |
| The devices hierarchy is as follows: | |
| :: | |
| => dm tree | |
| Class Index Probed Driver Name | |
| ----------------------------------------------------------- | |
| ... | |
| nvmxip 0 [ + ] nvmxip_qspi |-- nvmxip-qspi1@08000000 | |
| blk 3 [ + ] nvmxip-blk | `-- nvmxip-qspi1@08000000.blk#1 | |
| nvmxip 1 [ + ] nvmxip_qspi |-- nvmxip-qspi2@08200000 | |
| blk 4 [ + ] nvmxip-blk | `-- nvmxip-qspi2@08200000.blk#2 | |
| The implementation is generic and can be used by different platforms. | |
| Supported hardware | |
| ------------------ | |
| Any plaform supporting readq(). | |
| Configuration | |
| ------------- | |
| config NVMXIP | |
| This option allows the emulation of a block storage device | |
| on top of a direct access non volatile memory XIP flash devices. | |
| This support provides the read operation. | |
| This option provides the block storage driver nvmxip-blk which | |
| handles the read operation. This driver is HW agnostic and can support | |
| multiple flash devices at the same time. | |
| config NVMXIP_QSPI | |
| This option allows the emulation of a block storage device on top of a QSPI XIP flash. | |
| Any platform that needs to emulate one or multiple QSPI XIP flash devices can turn this | |
| option on to enable the functionality. NVMXIP config is selected automatically. | |
| Platforms that need to add custom treatments before accessing to the flash, can | |
| write their own driver (same as nvmxip_qspi in addition to the custom settings). | |
| Device Tree nodes | |
| ----------------- | |
| Multiple QSPI XIP flash devices can be used at the same time by describing them through DT | |
| nodes. | |
| Please refer to the documentation of the DT binding at: | |
| doc/device-tree-bindings/nvmxip/nvmxip_qspi.txt | |
| Contributors | |
| ------------ | |
| * Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com> |