2021-10-07 15:08:28 +03:00
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id : http://devicetree.org/schemas/memory-controllers/ti,gpmc.yaml#
$schema : http://devicetree.org/meta-schemas/core.yaml#
2022-12-16 17:38:10 +01:00
title : Texas Instruments GPMC Memory Controller
2021-10-07 15:08:28 +03:00
maintainers :
- Tony Lindgren <tony@atomide.com>
- Roger Quadros <rogerq@kernel.org>
description :
The GPMC is a unified memory controller dedicated for interfacing
with external memory devices like
- Asynchronous SRAM-like memories and ASICs
- Asynchronous, synchronous, and page mode burst NOR flash
- NAND flash
- Pseudo-SRAM devices
properties :
compatible :
items :
- enum :
- ti,am3352-gpmc
2021-12-21 15:17:54 +02:00
- ti,am64-gpmc
2021-10-07 15:08:28 +03:00
- ti,omap2420-gpmc
- ti,omap2430-gpmc
- ti,omap3430-gpmc
- ti,omap4430-gpmc
reg :
2021-12-21 15:17:54 +02:00
minItems : 1
maxItems : 2
reg-names :
items :
- const : cfg
- const : data
2021-10-07 15:08:28 +03:00
interrupts :
maxItems : 1
clocks :
maxItems : 1
description : |
Functional clock. Used for bus timing calculations and
GPMC configuration.
clock-names :
items :
- const : fck
2021-12-21 15:17:54 +02:00
power-domains :
maxItems : 1
2021-10-07 15:08:28 +03:00
dmas :
items :
- description : DMA channel for GPMC NAND prefetch
dma-names :
items :
- const : rxtx
"#address-cells": true
"#size-cells": true
gpmc,num-cs :
description : maximum number of supported chip-select lines.
$ref : /schemas/types.yaml#/definitions/uint32
gpmc,num-waitpins :
description : maximum number of supported wait pins.
$ref : /schemas/types.yaml#/definitions/uint32
ranges :
minItems : 1
description : |
Must be set up to reflect the memory layout with four
integer values for each chip-select line in use,
<cs-number> 0 <physical address of mapping> <size>
items :
- description : NAND bank 0
- description : NOR/SRAM bank 0
- description : NOR/SRAM bank 1
'#interrupt-cells' :
const : 2
interrupt-controller :
description : |
2022-12-22 10:23:09 -08:00
The GPMC driver implements an interrupt controller for
2021-10-07 15:08:28 +03:00
the NAND events "fifoevent" and "termcount" plus the
rising/falling edges on the GPMC_WAIT pins.
The interrupt number mapping is as follows
0 - NAND_fifoevent
1 - NAND_termcount
2 - GPMC_WAIT0 pin edge
3 - GPMC_WAIT1 pin edge, and so on.
'#gpio-cells' :
const : 2
gpio-controller :
description : |
The GPMC driver implements a GPIO controller for the
GPMC WAIT pins that can be used as general purpose inputs.
0 maps to GPMC_WAIT0 pin.
ti,hwmods :
description :
Name of the HWMOD associated with GPMC. This is for legacy
omap2/3 platforms only.
$ref : /schemas/types.yaml#/definitions/string
deprecated : true
ti,no-idle-on-init :
description :
Prevent idling the module at init. This is for legacy omap2/3
platforms only.
type : boolean
deprecated : true
patternProperties :
"@[0-7],[a-f0-9]+$" :
type : object
description : |
The child device node represents the device connected to the GPMC
bus. The device can be a NAND chip, SRAM device, NOR device
or an ASIC.
2023-06-09 16:07:20 +02:00
$ref : ti,gpmc-child.yaml
2023-09-25 16:26:21 -05:00
additionalProperties : true
2021-10-07 15:08:28 +03:00
required :
- compatible
- reg
- gpmc,num-cs
- gpmc,num-waitpins
- "#address-cells"
- "#size-cells"
2021-12-21 15:17:54 +02:00
allOf :
- if :
properties :
compatible :
contains :
const : ti,am64-gpmc
then :
required :
- reg-names
- power-domains
2021-10-07 15:08:28 +03:00
additionalProperties : false
examples :
- |
#include <dt-bindings/interrupt-controller/arm-gic.h>
#include <dt-bindings/gpio/gpio.h>
gpmc : memory-controller@50000000 {
compatible = "ti,am3352-gpmc";
reg = <0x50000000 0x2000>;
interrupts = <100>;
clocks = <&l3s_clkctrl>;
clock-names = "fck";
dmas = <&edma 52 0>;
dma-names = "rxtx";
gpmc,num-cs = <8>;
gpmc,num-waitpins = <2>;
#address-cells = <2>;
#size-cells = <1>;
ranges = <0 0 0x08000000 0x10000000>; /* CS0 @addr 0x8000000, size 0x10000000 */
interrupt-controller;
#interrupt-cells = <2>;
gpio-controller;
#gpio-cells = <2>;
nand@0,0 {
compatible = "ti,omap2-nand";
reg = <0 0 4>;
interrupt-parent = <&gpmc>;
interrupts = <0 IRQ_TYPE_NONE>, /* fifoevent */
<1 IRQ_TYPE_NONE>; /* termcount */
ti,nand-xfer-type = "prefetch-dma";
ti,nand-ecc-opt = "bch16";
ti,elm-id = <&elm>;
rb-gpios = <&gpmc 0 GPIO_ACTIVE_HIGH>; /* gpmc_wait0 pin */
};
};