162306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0
262306a36Sopenharmony_ci%YAML 1.2
362306a36Sopenharmony_ci---
462306a36Sopenharmony_ci$id: http://devicetree.org/schemas/mtd/mtd-physmap.yaml#
562306a36Sopenharmony_ci$schema: http://devicetree.org/meta-schemas/core.yaml#
662306a36Sopenharmony_ci
762306a36Sopenharmony_cititle: CFI or JEDEC memory-mapped NOR flash, MTD-RAM (NVRAM...)
862306a36Sopenharmony_ci
962306a36Sopenharmony_cimaintainers:
1062306a36Sopenharmony_ci  - Rob Herring <robh@kernel.org>
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_cidescription: |
1362306a36Sopenharmony_ci  Flash chips (Memory Technology Devices) are often used for solid state
1462306a36Sopenharmony_ci  file systems on embedded devices.
1562306a36Sopenharmony_ci
1662306a36Sopenharmony_ciallOf:
1762306a36Sopenharmony_ci  - $ref: mtd.yaml#
1862306a36Sopenharmony_ci  - $ref: /schemas/memory-controllers/mc-peripheral-props.yaml#
1962306a36Sopenharmony_ci
2062306a36Sopenharmony_ciproperties:
2162306a36Sopenharmony_ci  compatible:
2262306a36Sopenharmony_ci    oneOf:
2362306a36Sopenharmony_ci      - items:
2462306a36Sopenharmony_ci          - enum:
2562306a36Sopenharmony_ci              - amd,s29gl01gp
2662306a36Sopenharmony_ci              - amd,s29gl032a
2762306a36Sopenharmony_ci              - amd,s29gl256n
2862306a36Sopenharmony_ci              - amd,s29gl512n
2962306a36Sopenharmony_ci              - arm,versatile-flash
3062306a36Sopenharmony_ci              - arm,vexpress-flash
3162306a36Sopenharmony_ci              - cortina,gemini-flash
3262306a36Sopenharmony_ci              - cypress,hyperflash
3362306a36Sopenharmony_ci              - ge,imp3a-firmware-mirror
3462306a36Sopenharmony_ci              - ge,imp3a-paged-flash
3562306a36Sopenharmony_ci              - gef,ppc9a-firmware-mirror
3662306a36Sopenharmony_ci              - gef,ppc9a-paged-flash
3762306a36Sopenharmony_ci              - gef,sbc310-firmware-mirror
3862306a36Sopenharmony_ci              - gef,sbc310-paged-flash
3962306a36Sopenharmony_ci              - gef,sbc610-firmware-mirror
4062306a36Sopenharmony_ci              - gef,sbc610-paged-flash
4162306a36Sopenharmony_ci              - intel,28f128j3
4262306a36Sopenharmony_ci              - intel,dt28f160
4362306a36Sopenharmony_ci              - intel,ixp4xx-flash
4462306a36Sopenharmony_ci              - intel,JS28F128
4562306a36Sopenharmony_ci              - intel,JS28F640
4662306a36Sopenharmony_ci              - intel,PC28F640P30T85
4762306a36Sopenharmony_ci              - numonyx,js28f00a
4862306a36Sopenharmony_ci              - numonyx,js28f128
4962306a36Sopenharmony_ci              - sst,sst39vf320
5062306a36Sopenharmony_ci              - xlnx,xps-mch-emc-2.00.a
5162306a36Sopenharmony_ci          - enum:
5262306a36Sopenharmony_ci              - cfi-flash
5362306a36Sopenharmony_ci              - jedec-flash
5462306a36Sopenharmony_ci      - items:
5562306a36Sopenharmony_ci          - enum:
5662306a36Sopenharmony_ci              - cypress,cy7c1019dv33-10zsxi
5762306a36Sopenharmony_ci              - arm,vexpress-psram
5862306a36Sopenharmony_ci          - const: mtd-ram
5962306a36Sopenharmony_ci      - enum:
6062306a36Sopenharmony_ci          - cfi-flash
6162306a36Sopenharmony_ci          - jedec-flash
6262306a36Sopenharmony_ci          - mtd-ram
6362306a36Sopenharmony_ci          - mtd-rom
6462306a36Sopenharmony_ci
6562306a36Sopenharmony_ci  reg:
6662306a36Sopenharmony_ci    description: |
6762306a36Sopenharmony_ci      It's possible to (optionally) define multiple "reg" tuples so that
6862306a36Sopenharmony_ci      non-identical chips can be described in one node.
6962306a36Sopenharmony_ci    minItems: 1
7062306a36Sopenharmony_ci    maxItems: 8
7162306a36Sopenharmony_ci
7262306a36Sopenharmony_ci  bank-width:
7362306a36Sopenharmony_ci    description: Width (in bytes) of the bank.  Equal to the device width times
7462306a36Sopenharmony_ci      the number of interleaved chips.
7562306a36Sopenharmony_ci    $ref: /schemas/types.yaml#/definitions/uint32
7662306a36Sopenharmony_ci    enum: [ 1, 2, 4 ]
7762306a36Sopenharmony_ci
7862306a36Sopenharmony_ci  device-width:
7962306a36Sopenharmony_ci    description:
8062306a36Sopenharmony_ci      Width of a single mtd chip. If omitted, assumed to be equal to 'bank-width'.
8162306a36Sopenharmony_ci    $ref: /schemas/types.yaml#/definitions/uint32
8262306a36Sopenharmony_ci    enum: [ 1, 2 ]
8362306a36Sopenharmony_ci
8462306a36Sopenharmony_ci  no-unaligned-direct-access:
8562306a36Sopenharmony_ci    type: boolean
8662306a36Sopenharmony_ci    description: |
8762306a36Sopenharmony_ci      Disables the default direct mapping of the flash.
8862306a36Sopenharmony_ci
8962306a36Sopenharmony_ci      On some platforms (e.g. MPC5200) a direct 1:1 mapping may cause problems
9062306a36Sopenharmony_ci      with JFFS2 usage, as the local bus (LPB) doesn't support unaligned
9162306a36Sopenharmony_ci      accesses as implemented in the JFFS2 code via memcpy(). By defining
9262306a36Sopenharmony_ci      "no-unaligned-direct-access", the flash will not be exposed directly to
9362306a36Sopenharmony_ci      the MTD users (e.g. JFFS2) any more.
9462306a36Sopenharmony_ci
9562306a36Sopenharmony_ci  linux,mtd-name:
9662306a36Sopenharmony_ci    description:
9762306a36Sopenharmony_ci      Allows specifying the mtd name for retro capability with physmap-flash
9862306a36Sopenharmony_ci      drivers as boot loader pass the mtd partition via the old device name
9962306a36Sopenharmony_ci      physmap-flash.
10062306a36Sopenharmony_ci    $ref: /schemas/types.yaml#/definitions/string
10162306a36Sopenharmony_ci
10262306a36Sopenharmony_ci  use-advanced-sector-protection:
10362306a36Sopenharmony_ci    type: boolean
10462306a36Sopenharmony_ci    description: |
10562306a36Sopenharmony_ci      Enables support for the advanced sector protection (Spansion: PPB -
10662306a36Sopenharmony_ci      Persistent Protection Bits) locking.
10762306a36Sopenharmony_ci
10862306a36Sopenharmony_ci  erase-size:
10962306a36Sopenharmony_ci    description: The chip's physical erase block size in bytes.
11062306a36Sopenharmony_ci    $ref: /schemas/types.yaml#/definitions/uint32
11162306a36Sopenharmony_ci
11262306a36Sopenharmony_ci  addr-gpios:
11362306a36Sopenharmony_ci    description:
11462306a36Sopenharmony_ci      List of GPIO descriptors that will be used to address the MSBs address
11562306a36Sopenharmony_ci      lines. The order goes from LSB to MSB.
11662306a36Sopenharmony_ci    minItems: 1
11762306a36Sopenharmony_ci    maxItems: 8
11862306a36Sopenharmony_ci
11962306a36Sopenharmony_ci  '#address-cells':
12062306a36Sopenharmony_ci    const: 1
12162306a36Sopenharmony_ci
12262306a36Sopenharmony_ci  '#size-cells':
12362306a36Sopenharmony_ci    const: 1
12462306a36Sopenharmony_ci
12562306a36Sopenharmony_ci  big-endian: true
12662306a36Sopenharmony_ci  little-endian: true
12762306a36Sopenharmony_ci
12862306a36Sopenharmony_cirequired:
12962306a36Sopenharmony_ci  - compatible
13062306a36Sopenharmony_ci  - reg
13162306a36Sopenharmony_ci
13262306a36Sopenharmony_ciif:
13362306a36Sopenharmony_ci  properties:
13462306a36Sopenharmony_ci    compatible:
13562306a36Sopenharmony_ci      contains:
13662306a36Sopenharmony_ci        const: cortina,gemini-flash
13762306a36Sopenharmony_cithen:
13862306a36Sopenharmony_ci  properties:
13962306a36Sopenharmony_ci    syscon:
14062306a36Sopenharmony_ci      $ref: /schemas/types.yaml#/definitions/phandle
14162306a36Sopenharmony_ci      description:
14262306a36Sopenharmony_ci        Phandle to the syscon controller
14362306a36Sopenharmony_ci  required:
14462306a36Sopenharmony_ci    - syscon
14562306a36Sopenharmony_ci
14662306a36Sopenharmony_ci# FIXME: A parent bus may define timing properties
14762306a36Sopenharmony_ciadditionalProperties: true
14862306a36Sopenharmony_ci
14962306a36Sopenharmony_ciexamples:
15062306a36Sopenharmony_ci  - |
15162306a36Sopenharmony_ci
15262306a36Sopenharmony_ci    flash@ff000000 {
15362306a36Sopenharmony_ci        compatible = "cfi-flash";
15462306a36Sopenharmony_ci        reg = <0xff000000 0x01000000>;
15562306a36Sopenharmony_ci        bank-width = <4>;
15662306a36Sopenharmony_ci        device-width = <1>;
15762306a36Sopenharmony_ci
15862306a36Sopenharmony_ci        #address-cells = <1>;
15962306a36Sopenharmony_ci        #size-cells = <1>;
16062306a36Sopenharmony_ci        ranges = <0 0xff000000 0x01000000>;
16162306a36Sopenharmony_ci
16262306a36Sopenharmony_ci        fs@0 {
16362306a36Sopenharmony_ci            label = "fs";
16462306a36Sopenharmony_ci            reg = <0 0xf80000>;
16562306a36Sopenharmony_ci        };
16662306a36Sopenharmony_ci        firmware@f80000 {
16762306a36Sopenharmony_ci            label = "firmware";
16862306a36Sopenharmony_ci            reg = <0xf80000 0x80000>;
16962306a36Sopenharmony_ci            read-only;
17062306a36Sopenharmony_ci        };
17162306a36Sopenharmony_ci    };
17262306a36Sopenharmony_ci
17362306a36Sopenharmony_ci  - |
17462306a36Sopenharmony_ci    /* An example with multiple "reg" tuples */
17562306a36Sopenharmony_ci
17662306a36Sopenharmony_ci    flash@0 {
17762306a36Sopenharmony_ci        compatible = "intel,PC28F640P30T85", "cfi-flash";
17862306a36Sopenharmony_ci        reg = <0x00000000 0x02000000>,
17962306a36Sopenharmony_ci              <0x02000000 0x02000000>;
18062306a36Sopenharmony_ci        bank-width = <2>;
18162306a36Sopenharmony_ci
18262306a36Sopenharmony_ci        #address-cells = <1>;
18362306a36Sopenharmony_ci        #size-cells = <1>;
18462306a36Sopenharmony_ci        ranges = <0 0 0x04000000>;
18562306a36Sopenharmony_ci
18662306a36Sopenharmony_ci        partition@0 {
18762306a36Sopenharmony_ci            label = "test-part1";
18862306a36Sopenharmony_ci            reg = <0 0x04000000>;
18962306a36Sopenharmony_ci        };
19062306a36Sopenharmony_ci    };
19162306a36Sopenharmony_ci
19262306a36Sopenharmony_ci  - |
19362306a36Sopenharmony_ci    /* An example using SRAM */
19462306a36Sopenharmony_ci    bus {
19562306a36Sopenharmony_ci        #address-cells = <2>;
19662306a36Sopenharmony_ci        #size-cells = <1>;
19762306a36Sopenharmony_ci
19862306a36Sopenharmony_ci        sram@2,0 {
19962306a36Sopenharmony_ci            compatible = "mtd-ram";
20062306a36Sopenharmony_ci            reg = <2 0 0x00200000>;
20162306a36Sopenharmony_ci            bank-width = <2>;
20262306a36Sopenharmony_ci        };
20362306a36Sopenharmony_ci    };
20462306a36Sopenharmony_ci
20562306a36Sopenharmony_ci  - |
20662306a36Sopenharmony_ci    /* An example using addr-gpios */
20762306a36Sopenharmony_ci    #include <dt-bindings/gpio/gpio.h>
20862306a36Sopenharmony_ci
20962306a36Sopenharmony_ci    flash@20000000 {
21062306a36Sopenharmony_ci        compatible = "cfi-flash";
21162306a36Sopenharmony_ci        reg = <0x20000000 0x02000000>;
21262306a36Sopenharmony_ci        bank-width = <2>;
21362306a36Sopenharmony_ci        addr-gpios = <&gpio1 2 GPIO_ACTIVE_HIGH>;
21462306a36Sopenharmony_ci
21562306a36Sopenharmony_ci        #address-cells = <1>;
21662306a36Sopenharmony_ci        #size-cells = <1>;
21762306a36Sopenharmony_ci        ranges = <0 0x00000000 0x02000000>,
21862306a36Sopenharmony_ci                 <1 0x02000000 0x02000000>;
21962306a36Sopenharmony_ci
22062306a36Sopenharmony_ci        partition@0 {
22162306a36Sopenharmony_ci            label = "test-part1";
22262306a36Sopenharmony_ci            reg = <0 0x04000000>;
22362306a36Sopenharmony_ci        };
22462306a36Sopenharmony_ci    };
22562306a36Sopenharmony_ci...
226