xref: /linux/Documentation/devicetree/bindings/memory-controllers/fsl/fsl,ifc.yaml (revision 985ede63a045eabf3f9dbd7b52a10ae6f2272cb2)
1*985ede63SLi Yang# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2*985ede63SLi Yang%YAML 1.2
3*985ede63SLi Yang---
4*985ede63SLi Yang$id: http://devicetree.org/schemas/memory-controllers/fsl/fsl,ifc.yaml#
5*985ede63SLi Yang$schema: http://devicetree.org/meta-schemas/core.yaml#
6*985ede63SLi Yang
7*985ede63SLi Yangtitle: FSL/NXP Integrated Flash Controller
8*985ede63SLi Yang
9*985ede63SLi Yangmaintainers:
10*985ede63SLi Yang  - Li Yang <leoyang.li@nxp.com>
11*985ede63SLi Yang
12*985ede63SLi Yangdescription: |
13*985ede63SLi Yang  NXP's integrated flash controller (IFC) is an advanced version of the
14*985ede63SLi Yang  enhanced local bus controller which includes similar programming and signal
15*985ede63SLi Yang  interfaces with an extended feature set. The IFC provides access to multiple
16*985ede63SLi Yang  external memory types, such as NAND flash (SLC and MLC), NOR flash, EPROM,
17*985ede63SLi Yang  SRAM and other memories where address and data are shared on a bus.
18*985ede63SLi Yang
19*985ede63SLi Yangproperties:
20*985ede63SLi Yang  $nodename:
21*985ede63SLi Yang    pattern: "^memory-controller@[0-9a-f]+$"
22*985ede63SLi Yang
23*985ede63SLi Yang  compatible:
24*985ede63SLi Yang    const: fsl,ifc
25*985ede63SLi Yang
26*985ede63SLi Yang  "#address-cells":
27*985ede63SLi Yang    enum: [2, 3]
28*985ede63SLi Yang    description: |
29*985ede63SLi Yang      Should be either two or three.  The first cell is the chipselect
30*985ede63SLi Yang      number, and the remaining cells are the offset into the chipselect.
31*985ede63SLi Yang
32*985ede63SLi Yang  "#size-cells":
33*985ede63SLi Yang    enum: [1, 2]
34*985ede63SLi Yang    description: |
35*985ede63SLi Yang      Either one or two, depending on how large each chipselect can be.
36*985ede63SLi Yang
37*985ede63SLi Yang  reg:
38*985ede63SLi Yang    maxItems: 1
39*985ede63SLi Yang
40*985ede63SLi Yang  interrupts:
41*985ede63SLi Yang    minItems: 1
42*985ede63SLi Yang    maxItems: 2
43*985ede63SLi Yang    description: |
44*985ede63SLi Yang      IFC may have one or two interrupts.  If two interrupt specifiers are
45*985ede63SLi Yang      present, the first is the "common" interrupt (CM_EVTER_STAT), and the
46*985ede63SLi Yang      second is the NAND interrupt (NAND_EVTER_STAT).  If there is only one,
47*985ede63SLi Yang      that interrupt reports both types of event.
48*985ede63SLi Yang
49*985ede63SLi Yang  little-endian:
50*985ede63SLi Yang    type: boolean
51*985ede63SLi Yang    description: |
52*985ede63SLi Yang      If this property is absent, the big-endian mode will be in use as default
53*985ede63SLi Yang      for registers.
54*985ede63SLi Yang
55*985ede63SLi Yang  ranges:
56*985ede63SLi Yang    description: |
57*985ede63SLi Yang      Each range corresponds to a single chipselect, and covers the entire
58*985ede63SLi Yang      access window as configured.
59*985ede63SLi Yang
60*985ede63SLi YangpatternProperties:
61*985ede63SLi Yang  "^.*@[a-f0-9]+(,[a-f0-9]+)+$":
62*985ede63SLi Yang    type: object
63*985ede63SLi Yang    description: |
64*985ede63SLi Yang      Child device nodes describe the devices connected to IFC such as NOR (e.g.
65*985ede63SLi Yang      cfi-flash) and NAND (fsl,ifc-nand). There might be board specific devices
66*985ede63SLi Yang      like FPGAs, CPLDs, etc.
67*985ede63SLi Yang
68*985ede63SLi Yang    required:
69*985ede63SLi Yang      - compatible
70*985ede63SLi Yang      - reg
71*985ede63SLi Yang
72*985ede63SLi Yangrequired:
73*985ede63SLi Yang  - compatible
74*985ede63SLi Yang  - reg
75*985ede63SLi Yang  - interrupts
76*985ede63SLi Yang
77*985ede63SLi YangadditionalProperties: false
78*985ede63SLi Yang
79*985ede63SLi Yangexamples:
80*985ede63SLi Yang  - |
81*985ede63SLi Yang    soc {
82*985ede63SLi Yang        #address-cells = <2>;
83*985ede63SLi Yang        #size-cells = <2>;
84*985ede63SLi Yang
85*985ede63SLi Yang        memory-controller@ffe1e000 {
86*985ede63SLi Yang            compatible = "fsl,ifc";
87*985ede63SLi Yang            #address-cells = <2>;
88*985ede63SLi Yang            #size-cells = <1>;
89*985ede63SLi Yang            reg = <0x0 0xffe1e000 0 0x2000>;
90*985ede63SLi Yang            interrupts = <16 2 19 2>;
91*985ede63SLi Yang            little-endian;
92*985ede63SLi Yang
93*985ede63SLi Yang            /* NOR, NAND Flashes and CPLD on board */
94*985ede63SLi Yang            ranges = <0x0 0x0 0x0 0xee000000 0x02000000>,
95*985ede63SLi Yang                     <0x1 0x0 0x0 0xffa00000 0x00010000>,
96*985ede63SLi Yang                     <0x3 0x0 0x0 0xffb00000 0x00020000>;
97*985ede63SLi Yang
98*985ede63SLi Yang            flash@0,0 {
99*985ede63SLi Yang                #address-cells = <1>;
100*985ede63SLi Yang                #size-cells = <1>;
101*985ede63SLi Yang                compatible = "cfi-flash";
102*985ede63SLi Yang                reg = <0x0 0x0 0x2000000>;
103*985ede63SLi Yang                bank-width = <2>;
104*985ede63SLi Yang                device-width = <1>;
105*985ede63SLi Yang
106*985ede63SLi Yang                partition@0 {
107*985ede63SLi Yang                    /* 32MB for user data */
108*985ede63SLi Yang                    reg = <0x0 0x02000000>;
109*985ede63SLi Yang                    label = "NOR Data";
110*985ede63SLi Yang                };
111*985ede63SLi Yang            };
112*985ede63SLi Yang        };
113*985ede63SLi Yang    };
114