xref: /linux/Documentation/devicetree/bindings/memory-controllers/ti,gpmc.yaml (revision c346eb1c3dd9f02f72653288045464fa6a5c4f88)
1*c346eb1cSRoger Quadros# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2*c346eb1cSRoger Quadros%YAML 1.2
3*c346eb1cSRoger Quadros---
4*c346eb1cSRoger Quadros$id: http://devicetree.org/schemas/memory-controllers/ti,gpmc.yaml#
5*c346eb1cSRoger Quadros$schema: http://devicetree.org/meta-schemas/core.yaml#
6*c346eb1cSRoger Quadros
7*c346eb1cSRoger Quadrostitle: Texas Instruments GPMC Memory Controller device-tree bindings
8*c346eb1cSRoger Quadros
9*c346eb1cSRoger Quadrosmaintainers:
10*c346eb1cSRoger Quadros  - Tony Lindgren <tony@atomide.com>
11*c346eb1cSRoger Quadros  - Roger Quadros <rogerq@kernel.org>
12*c346eb1cSRoger Quadros
13*c346eb1cSRoger Quadrosdescription:
14*c346eb1cSRoger Quadros  The GPMC is a unified memory controller dedicated for interfacing
15*c346eb1cSRoger Quadros  with external memory devices like
16*c346eb1cSRoger Quadros  - Asynchronous SRAM-like memories and ASICs
17*c346eb1cSRoger Quadros  - Asynchronous, synchronous, and page mode burst NOR flash
18*c346eb1cSRoger Quadros  - NAND flash
19*c346eb1cSRoger Quadros  - Pseudo-SRAM devices
20*c346eb1cSRoger Quadros
21*c346eb1cSRoger Quadrosproperties:
22*c346eb1cSRoger Quadros  compatible:
23*c346eb1cSRoger Quadros    items:
24*c346eb1cSRoger Quadros      - enum:
25*c346eb1cSRoger Quadros          - ti,am3352-gpmc
26*c346eb1cSRoger Quadros          - ti,omap2420-gpmc
27*c346eb1cSRoger Quadros          - ti,omap2430-gpmc
28*c346eb1cSRoger Quadros          - ti,omap3430-gpmc
29*c346eb1cSRoger Quadros          - ti,omap4430-gpmc
30*c346eb1cSRoger Quadros
31*c346eb1cSRoger Quadros  reg:
32*c346eb1cSRoger Quadros    maxItems: 1
33*c346eb1cSRoger Quadros
34*c346eb1cSRoger Quadros  interrupts:
35*c346eb1cSRoger Quadros    maxItems: 1
36*c346eb1cSRoger Quadros
37*c346eb1cSRoger Quadros  clocks:
38*c346eb1cSRoger Quadros    maxItems: 1
39*c346eb1cSRoger Quadros    description: |
40*c346eb1cSRoger Quadros      Functional clock. Used for bus timing calculations and
41*c346eb1cSRoger Quadros      GPMC configuration.
42*c346eb1cSRoger Quadros
43*c346eb1cSRoger Quadros  clock-names:
44*c346eb1cSRoger Quadros    items:
45*c346eb1cSRoger Quadros      - const: fck
46*c346eb1cSRoger Quadros
47*c346eb1cSRoger Quadros  dmas:
48*c346eb1cSRoger Quadros    items:
49*c346eb1cSRoger Quadros      - description: DMA channel for GPMC NAND prefetch
50*c346eb1cSRoger Quadros
51*c346eb1cSRoger Quadros  dma-names:
52*c346eb1cSRoger Quadros    items:
53*c346eb1cSRoger Quadros      - const: rxtx
54*c346eb1cSRoger Quadros
55*c346eb1cSRoger Quadros  "#address-cells": true
56*c346eb1cSRoger Quadros
57*c346eb1cSRoger Quadros  "#size-cells": true
58*c346eb1cSRoger Quadros
59*c346eb1cSRoger Quadros  gpmc,num-cs:
60*c346eb1cSRoger Quadros    description: maximum number of supported chip-select lines.
61*c346eb1cSRoger Quadros    $ref: /schemas/types.yaml#/definitions/uint32
62*c346eb1cSRoger Quadros
63*c346eb1cSRoger Quadros  gpmc,num-waitpins:
64*c346eb1cSRoger Quadros    description: maximum number of supported wait pins.
65*c346eb1cSRoger Quadros    $ref: /schemas/types.yaml#/definitions/uint32
66*c346eb1cSRoger Quadros
67*c346eb1cSRoger Quadros  ranges:
68*c346eb1cSRoger Quadros    minItems: 1
69*c346eb1cSRoger Quadros    description: |
70*c346eb1cSRoger Quadros      Must be set up to reflect the memory layout with four
71*c346eb1cSRoger Quadros      integer values for each chip-select line in use,
72*c346eb1cSRoger Quadros      <cs-number> 0 <physical address of mapping> <size>
73*c346eb1cSRoger Quadros    items:
74*c346eb1cSRoger Quadros      - description: NAND bank 0
75*c346eb1cSRoger Quadros      - description: NOR/SRAM bank 0
76*c346eb1cSRoger Quadros      - description: NOR/SRAM bank 1
77*c346eb1cSRoger Quadros
78*c346eb1cSRoger Quadros  '#interrupt-cells':
79*c346eb1cSRoger Quadros    const: 2
80*c346eb1cSRoger Quadros
81*c346eb1cSRoger Quadros  interrupt-controller:
82*c346eb1cSRoger Quadros    description: |
83*c346eb1cSRoger Quadros      The GPMC driver implements and interrupt controller for
84*c346eb1cSRoger Quadros      the NAND events "fifoevent" and "termcount" plus the
85*c346eb1cSRoger Quadros      rising/falling edges on the GPMC_WAIT pins.
86*c346eb1cSRoger Quadros      The interrupt number mapping is as follows
87*c346eb1cSRoger Quadros      0 - NAND_fifoevent
88*c346eb1cSRoger Quadros      1 - NAND_termcount
89*c346eb1cSRoger Quadros      2 - GPMC_WAIT0 pin edge
90*c346eb1cSRoger Quadros      3 - GPMC_WAIT1 pin edge, and so on.
91*c346eb1cSRoger Quadros
92*c346eb1cSRoger Quadros  '#gpio-cells':
93*c346eb1cSRoger Quadros    const: 2
94*c346eb1cSRoger Quadros
95*c346eb1cSRoger Quadros  gpio-controller:
96*c346eb1cSRoger Quadros    description: |
97*c346eb1cSRoger Quadros      The GPMC driver implements a GPIO controller for the
98*c346eb1cSRoger Quadros      GPMC WAIT pins that can be used as general purpose inputs.
99*c346eb1cSRoger Quadros      0 maps to GPMC_WAIT0 pin.
100*c346eb1cSRoger Quadros
101*c346eb1cSRoger Quadros  ti,hwmods:
102*c346eb1cSRoger Quadros    description:
103*c346eb1cSRoger Quadros      Name of the HWMOD associated with GPMC. This is for legacy
104*c346eb1cSRoger Quadros      omap2/3 platforms only.
105*c346eb1cSRoger Quadros    $ref: /schemas/types.yaml#/definitions/string
106*c346eb1cSRoger Quadros    deprecated: true
107*c346eb1cSRoger Quadros
108*c346eb1cSRoger Quadros  ti,no-idle-on-init:
109*c346eb1cSRoger Quadros    description:
110*c346eb1cSRoger Quadros      Prevent idling the module at init. This is for legacy omap2/3
111*c346eb1cSRoger Quadros      platforms only.
112*c346eb1cSRoger Quadros    type: boolean
113*c346eb1cSRoger Quadros    deprecated: true
114*c346eb1cSRoger Quadros
115*c346eb1cSRoger QuadrospatternProperties:
116*c346eb1cSRoger Quadros  "@[0-7],[a-f0-9]+$":
117*c346eb1cSRoger Quadros    type: object
118*c346eb1cSRoger Quadros    description: |
119*c346eb1cSRoger Quadros      The child device node represents the device connected to the GPMC
120*c346eb1cSRoger Quadros      bus. The device can be a NAND chip, SRAM device, NOR device
121*c346eb1cSRoger Quadros      or an ASIC.
122*c346eb1cSRoger Quadros
123*c346eb1cSRoger Quadros    allOf:
124*c346eb1cSRoger Quadros      - $ref: "ti,gpmc-child.yaml"
125*c346eb1cSRoger Quadros
126*c346eb1cSRoger Quadros    unevaluatedProperties: false
127*c346eb1cSRoger Quadros
128*c346eb1cSRoger Quadrosrequired:
129*c346eb1cSRoger Quadros  - compatible
130*c346eb1cSRoger Quadros  - reg
131*c346eb1cSRoger Quadros  - gpmc,num-cs
132*c346eb1cSRoger Quadros  - gpmc,num-waitpins
133*c346eb1cSRoger Quadros  - "#address-cells"
134*c346eb1cSRoger Quadros  - "#size-cells"
135*c346eb1cSRoger Quadros
136*c346eb1cSRoger QuadrosadditionalProperties: false
137*c346eb1cSRoger Quadros
138*c346eb1cSRoger Quadrosexamples:
139*c346eb1cSRoger Quadros  - |
140*c346eb1cSRoger Quadros    #include <dt-bindings/interrupt-controller/arm-gic.h>
141*c346eb1cSRoger Quadros    #include <dt-bindings/gpio/gpio.h>
142*c346eb1cSRoger Quadros
143*c346eb1cSRoger Quadros    gpmc: memory-controller@50000000 {
144*c346eb1cSRoger Quadros      compatible = "ti,am3352-gpmc";
145*c346eb1cSRoger Quadros      reg = <0x50000000 0x2000>;
146*c346eb1cSRoger Quadros      interrupts = <100>;
147*c346eb1cSRoger Quadros      clocks = <&l3s_clkctrl>;
148*c346eb1cSRoger Quadros      clock-names = "fck";
149*c346eb1cSRoger Quadros      dmas = <&edma 52 0>;
150*c346eb1cSRoger Quadros      dma-names = "rxtx";
151*c346eb1cSRoger Quadros      gpmc,num-cs = <8>;
152*c346eb1cSRoger Quadros      gpmc,num-waitpins = <2>;
153*c346eb1cSRoger Quadros      #address-cells = <2>;
154*c346eb1cSRoger Quadros      #size-cells = <1>;
155*c346eb1cSRoger Quadros      ranges = <0 0 0x08000000 0x10000000>; /* CS0 @addr 0x8000000, size 0x10000000 */
156*c346eb1cSRoger Quadros      interrupt-controller;
157*c346eb1cSRoger Quadros      #interrupt-cells = <2>;
158*c346eb1cSRoger Quadros      gpio-controller;
159*c346eb1cSRoger Quadros      #gpio-cells = <2>;
160*c346eb1cSRoger Quadros
161*c346eb1cSRoger Quadros      nand@0,0 {
162*c346eb1cSRoger Quadros        compatible = "ti,omap2-nand";
163*c346eb1cSRoger Quadros        reg = <0 0 4>;
164*c346eb1cSRoger Quadros        interrupt-parent = <&gpmc>;
165*c346eb1cSRoger Quadros        interrupts = <0 IRQ_TYPE_NONE>, /* fifoevent */
166*c346eb1cSRoger Quadros                     <1 IRQ_TYPE_NONE>; /* termcount */
167*c346eb1cSRoger Quadros        ti,nand-xfer-type = "prefetch-dma";
168*c346eb1cSRoger Quadros        ti,nand-ecc-opt = "bch16";
169*c346eb1cSRoger Quadros        ti,elm-id = <&elm>;
170*c346eb1cSRoger Quadros        rb-gpios = <&gpmc 0 GPIO_ACTIVE_HIGH>; /* gpmc_wait0 pin */
171*c346eb1cSRoger Quadros      };
172*c346eb1cSRoger Quadros    };
173