123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211 |
- * 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>;
- ...
- };
- };
- };
|