aboutsummaryrefslogtreecommitdiffstats
path: root/Documentation/devicetree/bindings/mmc/cavium-mmc.txt
blob: 21ed6d4fedccbfe35d40dc9572d5a9fcceda6763 (plain)
1
2
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
* Cavium Octeon & ThunderX MMC controller

The highspeed MMC host controller on Caviums SoCs provides an interface
for MMC and SD types of memory cards.

Supported maximum speeds are the ones of the eMMC standard 4.41 as well
as the speed of SD standard 4.0. Only 3.3 Volt is supported.

Required properties:
 - compatible : should be one of:
   cavium,octeon-6130-mmc
   cavium,octeon-7890-mmc
   cavium,thunder-8190-mmc
   cavium,thunder-8390-mmc
   mmc-slot
 - reg : mmc controller base registers
 - clocks : phandle

Optional properties:
 - for cd, bus-width, vmmc-supply, vqmmc-supply, and additional generic
   mmc parameters please refer to mmc.txt within this directory
 - cavium,cmd-clk-skew : number of coprocessor clocks before sampling command
 - cavium,dat-clk-skew : number of coprocessor clocks before sampling data

Deprecated properties:
 - spi-max-frequency : use max-frequency instead
 - cavium,bus-max-width : use bus-width instead
 - power-gpios : use vmmc-supply instead
 - cavium,octeon-6130-mmc-slot : use mmc-slot instead

GPIO control via vmmc-supply & vqmmc-supply:
  Two types of regulator object can be specified as mmc properties,
  typically regulator-fixed controlled by GPIO pins.

  Octeon/OcteonTX chips commonly use GPIO8 as an MMC-reset pin.
  In systems which may boot from MMC, it starts as input, and is gently
  pulled up/down by board logic to indicate the active sense of the
  signal. Chip reset then drives the signal in the opposite direction
  to effect a reset of target devices.
  Device tree should model this with a vmmc-supply regulator, gated by
  GPIO8, so GPIO8 is driven in the non-reset direction when MMC devices
  are probed, and held there until rmmod/shutdown/suspend.
  This allows a warm reboot to reset the MMC devices.

  Octeon/OcteonTX MMC supports up to 3 mmc slots, but any
  level-shifting to accommodate different signal voltages is
  done by external hardware, under control of an optional
  vqmmc regulator object, typically controlled by GPIO.

  If any mmc-slots have a vqmmc-supply property, it is taken as a warning
  that we must switch carefully between slots (unless they have the same
  vqmmc object), tri-stating MMC signals to avoid any transient states
  as level-shifters are enabled/disabled.

  Even when so-called bi-directional level shifters are used,
  this technique should be employed when using different bus-widths
  on different slots, disabling level shifters to avoid presenting
  non-uniform impedance across DATA0-7 & CMD when non-selected
  4-wide slots are left enabled, while accessing 8-wide targets.

  Note that it's not possible to specify multiple regulators
  controlled by same GPIO pin, but with different active state.
  If one GPIO line is require to switch voltage/routing between
  different mmc-slots, specify a vqmmc-supply on one slot, but
  not the other. The regulator_disable call on leaving that slot
  will implicitly switch the state to support the unmarked slot.

  There's no need to list vqmmc-supply if all the mmc-slots on
  a board run at same voltage, and have same width.

Examples:
	mmc_1_4: mmc@1,4 {
		compatible = "cavium,thunder-8390-mmc";
		reg = <0x0c00 0 0 0 0>;	/* DEVFN = 0x0c (1:4) */
		#address-cells = <1>;
		#size-cells = <0>;
		clocks = <&sclk>;

		mmc-slot@0 {
			compatible = "mmc-slot";
			reg = <0>;
			vmmc-supply = <&mmc_supply_3v3>;
			vqmmc-supply = <&vqmmc_3v3>;
			max-frequency = <52000000>;
			bus-width = <4>;
			cap-sd-highspeed;
		};

		mmc-slot@1 {
			compatible = "mmc-slot";
			reg = <1>;
			vmmc-supply = <&mmc_supply_3v3>;
			vqmmc-supply = <&vqmmc_1v8>;
			max-frequency = <100000000>;
			bus-width = <8>;
			cap-mmc-highspeed;
			non-removable;
		};
	};