| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
 100
 101
 102
 103
 104
 105
 106
 107
 108
 109
 110
 111
 112
 113
 114
 115
 116
 117
 118
 119
 120
 121
 122
 123
 124
 125
 126
 127
 128
 129
 130
 131
 132
 133
 134
 135
 136
 137
 138
 139
 140
 141
 142
 143
 144
 145
 146
 147
 148
 149
 150
 151
 152
 153
 154
 155
 156
 157
 158
 159
 160
 161
 162
 163
 164
 165
 166
 167
 168
 169
 170
 171
 172
 173
 174
 175
 176
 177
 178
 179
 180
 181
 182
 183
 184
 185
 186
 187
 188
 189
 190
 191
 192
 193
 194
 195
 196
 197
 198
 199
 200
 201
 202
 203
 204
 205
 206
 207
 208
 209
 210
 
 | * 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>;
			...
		};
	};
};
 |