[U-Boot] [PATCH v10 00/27] dm: Generic MTD Subsystem, with SPI-NOR interface

Siva Durga Prasad Paladugu
2018-01-23T09:00:16Z

Hi Jagan,

> -----Original Message-----
> From: U-Boot [mailto:u-boot-bounces at lists.denx.de] On Behalf Of Jagan
> Teki
> Sent: Thursday, December 28, 2017 11:42 AM
> To: u-boot at lists.denx.de
> Cc: Tom Rini <trini@konsulko.com>
> Subject: [U-Boot] [PATCH v10 00/27] dm: Generic MTD Subsystem, with
> SPI-NOR interface
>
> Compared to previous series’s [1], [2], [3] and [4] this patch set redefined
> most of the implementation suitable to fit into existing driver-model.
>
> MTD is generic subsystem for underlying flash devices like nand, parallel
> nor, spinor, dataflash etc. So to drive this theory with driver model(with an
> example of block layer) mtd is common device interaction for most of
> memory technology flashes like nand, parallel nor, spinor, dataflash etc,
> these are treated as interface types wrt u-boot driver model.
>
> Once the respective interface driver bind happen, the uclass driver will pass
> an 'interface type' to mtd layer to create device for it, for example once
> spinor ULASS_SPI_NOR driver bind happen, the uclass driver of spinor will
> pass MTD_IF_TYPE_SPI_NOR interface type to create mtd device for spinor
> devices.
>
> SPI-NOR:
> =======
> Some of the SPI device drivers at drivers/spi not a real spi controllers,
> Unlike normal/generic SPI controllers they operates only with SPI-NOR flash
> devices. these were technically termed as SPI-NOR controllers, Ex:
> drivers/spi/fsl_qspi.c
>
> The problem with these were resides at drivers/spi is entire SPI layer
> becomes SPI-NOR flash oriented which is absolutely a wrong indication
> where SPI layer getting effected more with flash operations - So this SPI-
> NOR core will resolve this issue by separating all SPI-NOR flash operations
> from spi layer and creats a generic layer called SPI-NOR core which can be
> used to interact SPI-NOR to SPI driver interface layer and the SPI-NOR
> controller driver.

Sorry for very late response. What's your approach on a controller that supports both
flash with some flash specific functionalities(Like different flash connection topologies)
and legacy spi devices.

Thanks,
Siva
>
> =======================================
> cmd/spinor.c
> =======================================
> mtd-uclass.c
> =======================================
> spi-nor-uclass.c
> =======================================
> spi-nor.c
> =======================================
> m25p80.c zynq_qspinor.c
> =======================================
> spi-uclass.c
> =======================================
> zynq_qspi.c
> =======================================
> #####SPI NOR chip######
> =======================================
>
> Changes for v10:
> - Update Simon's R-B tag
> - Add mtd dm test case
> - implemented entire code wrt MTD, with interface type
>
> code size:
> ==========
> before:
> $ arm-linux-gnueabi-size u-boot
> text data bss dec hex filename
> 473712 15152 222568 711432 adb08 u-
> boot
> $ du -hs u-boot-dtb.img
> 488K u-boot-dtb.img
>
> after:
> $ arm-linux-gnueabi-size u-boot
> text data bss dec hex filename
> 470124 14352 222584 707060 ac9f4 u-
> boot
> $ du -hs u-boot-dtb.img
> 484K u-boot-dtb.img
>
> approximately 4KiB but DM_SPI_FLASH still there which can be removed
> once support added in SPL
>
> test log:
> ========
> Zynq> spinor
> spinor - SPI-NOR Sub-system
>
> Usage:
> spinor list - show list of spinor devices
> spinor info - show current spinor device info
> spinor dev [devnum] - show or set current spinor device
> spinor erase offset len - erase 'len' bytes from 'offset'
> spinor write addr to len - write 'len' bytes to 'to' from 'addr'
> spinor read addr from len - read 'len' bytes from 'from' to 'addr'
> spinor protect lock/unlock sector len - protect/unprotect 'len' bytes starting
> at address 'sector'
> Zynq> spinor list
> flash at 0: 0
> spi-nor at e000d000: 1
> Zynq> spinor dev 0
> switch to dev #0, OK
> spinor0 is current device
> Zynq> spinor info
> bus: flash at 0: 0
> device: s25fl128s_64k
> page size: 256 B
> erase size: 64 KiB
> size: 16 MiB
> Zynq> spinor erase 0xE00000 0x100000
> SPI-NOR: 1048576 bytes @ 0xe00000 Erased: OK
> Zynq> mw.b 0x100 0xcc 0x100000
> Zynq> spinor write 0x100 0xE00000 0x100000
> device 0 offset 0xe00000, size 0x100000
> SPI-NOR: 1048576 bytes @ 0xe00000 Written: OK
> Zynq> spinor read 0x3000000 0xE00000 0x100000
> device 0 offset 0xe00000, size 0x100000
> SPI-NOR: 1048576 bytes @ 0xe00000 Read: OK
> Zynq> cmp.b 0x3000000 0x100 0x100000
> Total of 1048576 byte(s) were the same
> Zynq> spinor dev 1
> switch to dev #1, OK
> spinor1 is current device
> Zynq> spinor info
> bus: spi-nor at e000d000: 1
> device: s25fl128s_64k
> page size: 256 B
> erase size: 64 KiB
> size: 16 MiB
> Zynq> spinor erase 0xE00000 0x100000
> SPI-NOR: 1048576 bytes @ 0xe00000 Erased: OK
> Zynq> mw.b 0x100 0xbb 0x100000
> Zynq> spinor write 0x100 0xE00000 0x100000
> device 0 offset 0xe00000, size 0x100000
> SPI-NOR: 1048576 bytes @ 0xe00000 Written: OK
> Zynq> spinor read 0x3000000 0xE00000 0x100000
> device 0 offset 0xe00000, size 0x100000
> SPI-NOR: 1048576 bytes @ 0xe00000 Read: OK
> Zynq> cmp.b 0x3000000 0x100 0x100000
> Total of 1048576 byte(s) were the same
>
> WIP:
> ===
> - to support non-dm code
> - to support spinor SPL
>
> Repo:
> ====
> $ git clone git://git.denx.de/u-boot-spi.git $ cd u-boot-spi $ git checkout -b
> mtd-spinor-working origin/mtd-spinor-working
>
> [1] https://lists.denx.de/pipermail/u-boot/2016-October/271459.html
> [2] http://lists.denx.de/pipermail/u-boot/2016-March/249286.html
> [3] http://lists.denx.de/pipermail/u-boot/2016-February/245418.html
> [4] [PATCH RFC v8 00/16] SPI-NOR/MTD addition
>
> Jagan Teki (27):
> mtd: Add mtd core ops
> mtd: add mtd device create operations
> mtd: add SPI-NOR core support
> mtd: spi-nor: sync/modify sst write operations
> mtd: spi-nor: sync/modify lock operations
> mtd: spi-nor: Kconfig: Add MTD_SPI_NOR entry
> mtd: spi-nor: Kconfig: Add MTD_SPI_NOR_USE_4K_SECTORS
> mtd: spi-nor: Kconfig: Add SPI_NOR_MISC entry
> mtd: spi-nor: Kconfig: Add SPI_NOR_MACRONIX entry
> mtd: spi-nor: Kconfig: Add SPI_NOR_SPANSION entry
> mtd: spi-nor: Kconfig: Add SPI_NOR_STMICRO entry
> mtd: spi-nor: Kconfig: Add SPI_NOR_SST entry
> mtd: spi-nor: Kconfig: Add SPI_NOR_WINBOND entry
> mtd-uclass: use platdata_auto_alloc
> spi: Add spi_write_then_read
> mtd: spi-nor: Add m25p80 driver
> mtd: spi-nor: Kconfig: Add MTD_M25P80 entry
> mtd: spi-nor: Add zynq qspinor driver
> mtd: spi-nor: zynq_qspi: Kconfig: Add MTD_ZYNQ
> mtd: spi-nor: Add 4-byte addresswidth support
> cmd: add spinor cmd support
> cmd: spinor: sync/update protect command
> board_r: initialize spi_nor
> env: add spi-nor environment
> arm: dts: zynq: Add zynq-qspinor node
> dm: zynq: microzed: enable MTD/SPI-NOR framework
> test: dm: add tests for mtd devices
>
> Makefile | 1 +
> arch/arm/dts/zynq-7000.dtsi | 12 +
> arch/arm/dts/zynq-microzed.dts | 12 +-
> cmd/Kconfig | 5 +
> cmd/Makefile | 1 +
> cmd/nvedit.c | 1 +
> cmd/spinor.c | 326 ++++++++++++
> common/board_r.c | 13 +
> configs/sandbox_defconfig | 8 +-
> configs/zynq_microzed_defconfig | 17 +-
> drivers/mtd/Kconfig | 2 +
> drivers/mtd/Makefile | 7 +-
> drivers/mtd/mtd-uclass.c | 203 +++++++-
> drivers/mtd/spi-nor/Kconfig | 89 ++++
> drivers/mtd/spi-nor/Makefile | 15 +
> drivers/mtd/spi-nor/m25p80.c | 251 ++++++++++
> drivers/mtd/spi-nor/spi-nor-ids.c | 184 +++++++
> drivers/mtd/spi-nor/spi-nor-uclass.c | 160 ++++++
> drivers/mtd/spi-nor/spi-nor.c | 940
> +++++++++++++++++++++++++++++++++++
> drivers/mtd/spi-nor/zynq_qspinor.c | 622 +++++++++++++++++++++++
> drivers/spi/spi-uclass.c | 24 +
> env/Kconfig | 27 +
> env/Makefile | 1 +
> env/env.c | 2 +
> env/spinor.c | 113 +++++
> include/dm/uclass-id.h | 1 +
> include/environment.h | 1 +
> include/linux/mtd/mtd.h | 14 +
> include/linux/mtd/spi-nor.h | 223 +++++++++
> include/mtd.h | 176 +++++++
> include/spi.h | 20 +
> test/dm/Makefile | 1 +
> test/dm/mtd.c | 33 ++
> 33 files changed, 3493 insertions(+), 12 deletions(-) create mode 100644
> cmd/spinor.c create mode 100644 drivers/mtd/spi-nor/Kconfig create
> mode 100644 drivers/mtd/spi-nor/Makefile create mode 100644
> drivers/mtd/spi-nor/m25p80.c create mode 100644 drivers/mtd/spi-
> nor/spi-nor-ids.c create mode 100644 drivers/mtd/spi-nor/spi-nor-uclass.c
> create mode 100644 drivers/mtd/spi-nor/spi-nor.c create mode 100644
> drivers/mtd/spi-nor/zynq_qspinor.c
> create mode 100644 env/spinor.c
> create mode 100644 include/linux/mtd/spi-nor.h create mode 100644
> test/dm/mtd.c
>
> --
> 2.7.4
>
> _______________________________________________
> U-Boot mailing list
> U-Boot at lists.denx.de
> https://lists.denx.de/listinfo/u-boot