AR# 69576

2017.2 Zynq UltraScale+ MPSoC: Linux UBIFS support for QSPI (Only in I/O mode)


In the 2017.2 release, Linux UBIFS is supported for Zynq UltraScale+ MPSoC QSPI.

This feature works only in I/O mode and NOT in DMA mode.


In order to use UBIFS on QSPI the "has-io-mode" property needs to added to the device tree node.

"has-io-mode" is a boolean property that describes the controller operating mode. If it exists, the controller will operate in I/O mode, Otherwise it will operate in DMA mode.

UBIFS does not support 4K erase sector for SPI NOR flash, and it requires15KB as minimum. 

you will need to unset CONFIG_MTD_SPI_NOR_USE_4K_SECTORS.

To help find the 4K erase sectors setting, the path in the kernel config is shown below.

This is an example of the QSPI device tree node.

spi@ff0f0000 {
    compatible = "xlnx,zynqmp-qspi-1.0";
    status = "okay";
    clock-names = "ref_clk", "pclk";
    interrupts = <0x0 0xf 0x4>;
    interrupt-parent = <0x4>;
    num-cs = <0x1>;
    reg = <0x0 0xff0f0000 0x0 0x1000 0x0 0xc0000000 0x0 0x8000000>;
    #address-cells = <0x1>;
    #size-cells = <0x0>;
    #stream-id-cells = <0x1>;
    iommus = <0x7 0x873>;
    power-domains = <0x16>;
    clocks = <0x3 0x35 0x3 0x1f>;
    is-dual = <0x1>;

    flash@0 {
        compatible = "micron,m25p80";
        spi-tx-bus-width = <0x1>;
        spi-rx-bus-width = <0x4>;
        reg = <0x0>;
        #address-cells = <0x1>;
        #size-cells = <0x1>;
        spi-max-frequency = <0x66ff300>;

        partition@0x00000000 {
            label = "boot";
            reg = <0x0 0x2000000>;

        partition@0x02000000 {
            label = "bootenv";
            reg = <0x2000000 0x800000>;

        partition@0x02800000 {
            label = "kernel";
            reg = <0x2800000 0x2000000>;
AR# 69576
Date 08/18/2017
Status Active
Type General Article
Boards & Kits