211 lines
6.5 KiB
Plaintext
211 lines
6.5 KiB
Plaintext
|
* Device tree bindings for Texas instruments AEMIF controller
|
||
|
|
||
|
The Async External Memory Interface (EMIF16/AEMIF) controller is intended to
|
||
|
provide a glue-less interface to a variety of asynchronous memory devices like
|
||
|
ASRA M, NOR and NAND memory. A total of 256M bytes of any of these memories
|
||
|
can be accessed at any given time via four chip selects with 64M byte access
|
||
|
per chip select. Synchronous memories such as DDR1 SD RAM, SDR SDRAM
|
||
|
and Mobile SDR are not supported.
|
||
|
|
||
|
Documentation:
|
||
|
Davinci DM646x - http://www.ti.com/lit/ug/sprueq7c/sprueq7c.pdf
|
||
|
OMAP-L138 (DA850) - http://www.ti.com/lit/ug/spruh77a/spruh77a.pdf
|
||
|
Kestone - http://www.ti.com/lit/ug/sprugz3a/sprugz3a.pdf
|
||
|
|
||
|
Required properties:
|
||
|
|
||
|
- compatible: "ti,davinci-aemif"
|
||
|
"ti,keystone-aemif"
|
||
|
"ti,da850-aemif"
|
||
|
|
||
|
- reg: contains offset/length value for AEMIF control registers
|
||
|
space.
|
||
|
|
||
|
- #address-cells: Must be 2. The partition number has to be encoded in the
|
||
|
first address cell and it may accept values 0..N-1
|
||
|
(N - total number of partitions). It's recommended to
|
||
|
assign N-1 number for the control partition. The second
|
||
|
cell is the offset into the partition.
|
||
|
|
||
|
- #size-cells: Must be set to 1.
|
||
|
|
||
|
- ranges: Contains memory regions. There are two types of
|
||
|
ranges/partitions:
|
||
|
- CS-specific partition/range. If continuous, must be
|
||
|
set up to reflect the memory layout for 4 chipselects,
|
||
|
if not then additional range/partition can be added and
|
||
|
child device can select the proper one.
|
||
|
- control partition which is common for all CS
|
||
|
interfaces.
|
||
|
|
||
|
- clocks: the clock feeding the controller clock. Required only
|
||
|
if clock tree data present in device tree.
|
||
|
See clock-bindings.txt
|
||
|
|
||
|
- clock-names: clock name. It has to be "aemif". Required only if clock
|
||
|
tree data present in device tree, in another case don't
|
||
|
use it.
|
||
|
See clock-bindings.txt
|
||
|
|
||
|
- clock-ranges: Empty property indicating that child nodes can inherit
|
||
|
named clocks. Required only if clock tree data present
|
||
|
in device tree.
|
||
|
See clock-bindings.txt
|
||
|
|
||
|
|
||
|
Child chip-select (cs) nodes contain the memory devices nodes connected to
|
||
|
such as NOR (e.g. cfi-flash) and NAND (ti,davinci-nand, see davinci-nand.txt).
|
||
|
There might be board specific devices like FPGAs.
|
||
|
|
||
|
Required child cs node properties:
|
||
|
|
||
|
- #address-cells: Must be 2.
|
||
|
|
||
|
- #size-cells: Must be 1.
|
||
|
|
||
|
- ranges: Empty property indicating that child nodes can inherit
|
||
|
memory layout.
|
||
|
|
||
|
- clock-ranges: Empty property indicating that child nodes can inherit
|
||
|
named clocks. Required only if clock tree data present
|
||
|
in device tree.
|
||
|
|
||
|
- ti,cs-chipselect: number of chipselect. Indicates on the aemif driver
|
||
|
which chipselect is used for accessing the memory. For
|
||
|
compatibles "ti,davinci-aemif" and "ti,keystone-aemif"
|
||
|
it can be in range [0-3]. For compatible
|
||
|
"ti,da850-aemif" range is [2-5].
|
||
|
|
||
|
Optional child cs node properties:
|
||
|
|
||
|
- ti,cs-bus-width: width of the asynchronous device's data bus
|
||
|
8 or 16 if not preset 8
|
||
|
|
||
|
- ti,cs-select-strobe-mode: enable/disable select strobe mode
|
||
|
In select strobe mode chip select behaves as
|
||
|
the strobe and is active only during the strobe
|
||
|
period. If present then enable.
|
||
|
|
||
|
- ti,cs-extended-wait-mode: enable/disable extended wait mode
|
||
|
if set, the controller monitors the EMIFWAIT pin
|
||
|
mapped to that chip select to determine if the
|
||
|
device wants to extend the strobe period. If
|
||
|
present then enable.
|
||
|
|
||
|
- ti,cs-min-turnaround-ns: minimum turn around time, ns
|
||
|
Time between the end of one asynchronous memory
|
||
|
access and the start of another asynchronous
|
||
|
memory access. This delay is not incurred
|
||
|
between a read followed by read or a write
|
||
|
followed by a write to same chip select.
|
||
|
|
||
|
- ti,cs-read-setup-ns: read setup width, ns
|
||
|
Time between the beginning of a memory cycle
|
||
|
and the activation of read strobe.
|
||
|
Minimum value is 1 (0 treated as 1).
|
||
|
|
||
|
- ti,cs-read-strobe-ns: read strobe width, ns
|
||
|
Time between the activation and deactivation of
|
||
|
the read strobe.
|
||
|
Minimum value is 1 (0 treated as 1).
|
||
|
|
||
|
- ti,cs-read-hold-ns: read hold width, ns
|
||
|
Time between the deactivation of the read
|
||
|
strobe and the end of the cycle (which may be
|
||
|
either an address change or the deactivation of
|
||
|
the chip select signal.
|
||
|
Minimum value is 1 (0 treated as 1).
|
||
|
|
||
|
- ti,cs-write-setup-ns: write setup width, ns
|
||
|
Time between the beginning of a memory cycle
|
||
|
and the activation of write strobe.
|
||
|
Minimum value is 1 (0 treated as 1).
|
||
|
|
||
|
- ti,cs-write-strobe-ns: write strobe width, ns
|
||
|
Time between the activation and deactivation of
|
||
|
the write strobe.
|
||
|
Minimum value is 1 (0 treated as 1).
|
||
|
|
||
|
- ti,cs-write-hold-ns: write hold width, ns
|
||
|
Time between the deactivation of the write
|
||
|
strobe and the end of the cycle (which may be
|
||
|
either an address change or the deactivation of
|
||
|
the chip select signal.
|
||
|
Minimum value is 1 (0 treated as 1).
|
||
|
|
||
|
If any of the above parameters are absent, current parameter value will be taken
|
||
|
from the corresponding HW reg.
|
||
|
|
||
|
Example for aemif, davinci nand and nor flash chip select shown below.
|
||
|
|
||
|
memory-controller@21000a00 {
|
||
|
compatible = "ti,davinci-aemif";
|
||
|
#address-cells = <2>;
|
||
|
#size-cells = <1>;
|
||
|
clocks = <&clkaemif 0>;
|
||
|
clock-names = "aemif";
|
||
|
clock-ranges;
|
||
|
reg = <0x21000A00 0x00000100>;
|
||
|
ranges = <0 0 0x70000000 0x10000000
|
||
|
1 0 0x21000A00 0x00000100>;
|
||
|
/*
|
||
|
* Partition0: CS-specific memory range which is
|
||
|
* implemented as continuous physical memory region
|
||
|
* Partition1: control memory range
|
||
|
*/
|
||
|
|
||
|
nand:cs2 {
|
||
|
#address-cells = <2>;
|
||
|
#size-cells = <1>;
|
||
|
clock-ranges;
|
||
|
ranges;
|
||
|
|
||
|
ti,cs-chipselect = <2>;
|
||
|
/* all timings in nanoseconds */
|
||
|
ti,cs-min-turnaround-ns = <0>;
|
||
|
ti,cs-read-hold-ns = <7>;
|
||
|
ti,cs-read-strobe-ns = <42>;
|
||
|
ti,cs-read-setup-ns = <14>;
|
||
|
ti,cs-write-hold-ns = <7>;
|
||
|
ti,cs-write-strobe-ns = <42>;
|
||
|
ti,cs-write-setup-ns = <14>;
|
||
|
|
||
|
nand@0,0x8000000 {
|
||
|
compatible = "ti,davinci-nand";
|
||
|
reg = <0 0x8000000 0x4000000
|
||
|
1 0x0000000 0x0000100>;
|
||
|
/*
|
||
|
* Partition0, offset 0x8000000, size 0x4000000
|
||
|
* Partition1, offset 0x0000000, size 0x0000100
|
||
|
*/
|
||
|
|
||
|
.. see davinci-nand.txt
|
||
|
};
|
||
|
};
|
||
|
|
||
|
nor:cs0 {
|
||
|
#address-cells = <2>;
|
||
|
#size-cells = <1>;
|
||
|
clock-ranges;
|
||
|
ranges;
|
||
|
|
||
|
ti,cs-chipselect = <0>;
|
||
|
/* all timings in nanoseconds */
|
||
|
ti,cs-min-turnaround-ns = <0>;
|
||
|
ti,cs-read-hold-ns = <8>;
|
||
|
ti,cs-read-strobe-ns = <40>;
|
||
|
ti,cs-read-setup-ns = <14>;
|
||
|
ti,cs-write-hold-ns = <7>;
|
||
|
ti,cs-write-strobe-ns = <40>;
|
||
|
ti,cs-write-setup-ns = <14>;
|
||
|
ti,cs-bus-width = <16>;
|
||
|
|
||
|
flash@0,0x0000000 {
|
||
|
compatible = "cfi-flash";
|
||
|
reg = <0 0x0000000 0x4000000>;
|
||
|
|
||
|
...
|
||
|
};
|
||
|
};
|
||
|
};
|