xref: /freebsd/sys/contrib/device-tree/Bindings/mmc/nvidia,tegra20-sdhci.txt (revision c66ec88fed842fbaad62c30d510644ceb7bd2d71)
1*c66ec88fSEmmanuel Vadot* NVIDIA Tegra Secure Digital Host Controller
2*c66ec88fSEmmanuel Vadot
3*c66ec88fSEmmanuel VadotThis controller on Tegra family SoCs provides an interface for MMC, SD,
4*c66ec88fSEmmanuel Vadotand SDIO types of memory cards.
5*c66ec88fSEmmanuel Vadot
6*c66ec88fSEmmanuel VadotThis file documents differences between the core properties described
7*c66ec88fSEmmanuel Vadotby mmc.txt and the properties used by the sdhci-tegra driver.
8*c66ec88fSEmmanuel Vadot
9*c66ec88fSEmmanuel VadotRequired properties:
10*c66ec88fSEmmanuel Vadot- compatible : should be one of:
11*c66ec88fSEmmanuel Vadot  - "nvidia,tegra20-sdhci": for Tegra20
12*c66ec88fSEmmanuel Vadot  - "nvidia,tegra30-sdhci": for Tegra30
13*c66ec88fSEmmanuel Vadot  - "nvidia,tegra114-sdhci": for Tegra114
14*c66ec88fSEmmanuel Vadot  - "nvidia,tegra124-sdhci": for Tegra124 and Tegra132
15*c66ec88fSEmmanuel Vadot  - "nvidia,tegra210-sdhci": for Tegra210
16*c66ec88fSEmmanuel Vadot  - "nvidia,tegra186-sdhci": for Tegra186
17*c66ec88fSEmmanuel Vadot  - "nvidia,tegra194-sdhci": for Tegra194
18*c66ec88fSEmmanuel Vadot- clocks: For Tegra210, Tegra186 and Tegra194 must contain two entries.
19*c66ec88fSEmmanuel Vadot	  One for the module clock and one for the timeout clock.
20*c66ec88fSEmmanuel Vadot	  For all other Tegra devices, must contain a single entry for
21*c66ec88fSEmmanuel Vadot	  the module clock. See ../clocks/clock-bindings.txt for details.
22*c66ec88fSEmmanuel Vadot- clock-names: For Tegra210, Tegra186 and Tegra194 must contain the
23*c66ec88fSEmmanuel Vadot	       strings 'sdhci' and 'tmclk' to represent the module and
24*c66ec88fSEmmanuel Vadot	       the timeout clocks, respectively.
25*c66ec88fSEmmanuel Vadot	       For all other Tegra devices must contain the string 'sdhci'
26*c66ec88fSEmmanuel Vadot	       to represent the module clock.
27*c66ec88fSEmmanuel Vadot- resets : Must contain an entry for each entry in reset-names.
28*c66ec88fSEmmanuel Vadot  See ../reset/reset.txt for details.
29*c66ec88fSEmmanuel Vadot- reset-names : Must include the following entries:
30*c66ec88fSEmmanuel Vadot  - sdhci
31*c66ec88fSEmmanuel Vadot
32*c66ec88fSEmmanuel VadotOptional properties:
33*c66ec88fSEmmanuel Vadot- power-gpios : Specify GPIOs for power control
34*c66ec88fSEmmanuel Vadot
35*c66ec88fSEmmanuel VadotExample:
36*c66ec88fSEmmanuel Vadot
37*c66ec88fSEmmanuel Vadotsdhci@c8000200 {
38*c66ec88fSEmmanuel Vadot	compatible = "nvidia,tegra20-sdhci";
39*c66ec88fSEmmanuel Vadot	reg = <0xc8000200 0x200>;
40*c66ec88fSEmmanuel Vadot	interrupts = <47>;
41*c66ec88fSEmmanuel Vadot	clocks = <&tegra_car 14>;
42*c66ec88fSEmmanuel Vadot	resets = <&tegra_car 14>;
43*c66ec88fSEmmanuel Vadot	reset-names = "sdhci";
44*c66ec88fSEmmanuel Vadot	cd-gpios = <&gpio 69 0>; /* gpio PI5 */
45*c66ec88fSEmmanuel Vadot	wp-gpios = <&gpio 57 0>; /* gpio PH1 */
46*c66ec88fSEmmanuel Vadot	power-gpios = <&gpio 155 0>; /* gpio PT3 */
47*c66ec88fSEmmanuel Vadot	bus-width = <8>;
48*c66ec88fSEmmanuel Vadot};
49*c66ec88fSEmmanuel Vadot
50*c66ec88fSEmmanuel VadotOptional properties for Tegra210, Tegra186 and Tegra194:
51*c66ec88fSEmmanuel Vadot- pinctrl-names, pinctrl-0, pinctrl-1 : Specify pad voltage
52*c66ec88fSEmmanuel Vadot  configurations. Valid pinctrl-names are "sdmmc-3v3" and "sdmmc-1v8"
53*c66ec88fSEmmanuel Vadot  for controllers supporting multiple voltage levels. The order of names
54*c66ec88fSEmmanuel Vadot  should correspond to the pin configuration states in pinctrl-0 and
55*c66ec88fSEmmanuel Vadot  pinctrl-1.
56*c66ec88fSEmmanuel Vadot- pinctrl-names : "sdmmc-3v3-drv" and "sdmmc-1v8-drv" are applicable for
57*c66ec88fSEmmanuel Vadot  Tegra210 where pad config registers are in the pinmux register domain
58*c66ec88fSEmmanuel Vadot  for pull-up-strength and pull-down-strength values configuration when
59*c66ec88fSEmmanuel Vadot  using pads at 3V3 and 1V8 levels.
60*c66ec88fSEmmanuel Vadot- nvidia,only-1-8-v : The presence of this property indicates that the
61*c66ec88fSEmmanuel Vadot  controller operates at a 1.8 V fixed I/O voltage.
62*c66ec88fSEmmanuel Vadot- nvidia,pad-autocal-pull-up-offset-3v3,
63*c66ec88fSEmmanuel Vadot  nvidia,pad-autocal-pull-down-offset-3v3 : Specify drive strength
64*c66ec88fSEmmanuel Vadot  calibration offsets for 3.3 V signaling modes.
65*c66ec88fSEmmanuel Vadot- nvidia,pad-autocal-pull-up-offset-1v8,
66*c66ec88fSEmmanuel Vadot  nvidia,pad-autocal-pull-down-offset-1v8 : Specify drive strength
67*c66ec88fSEmmanuel Vadot  calibration offsets for 1.8 V signaling modes.
68*c66ec88fSEmmanuel Vadot- nvidia,pad-autocal-pull-up-offset-3v3-timeout,
69*c66ec88fSEmmanuel Vadot  nvidia,pad-autocal-pull-down-offset-3v3-timeout : Specify drive
70*c66ec88fSEmmanuel Vadot  strength used as a fallback in case the automatic calibration times
71*c66ec88fSEmmanuel Vadot  out on a 3.3 V signaling mode.
72*c66ec88fSEmmanuel Vadot- nvidia,pad-autocal-pull-up-offset-1v8-timeout,
73*c66ec88fSEmmanuel Vadot  nvidia,pad-autocal-pull-down-offset-1v8-timeout : Specify drive
74*c66ec88fSEmmanuel Vadot  strength used as a fallback in case the automatic calibration times
75*c66ec88fSEmmanuel Vadot  out on a 1.8 V signaling mode.
76*c66ec88fSEmmanuel Vadot- nvidia,pad-autocal-pull-up-offset-sdr104,
77*c66ec88fSEmmanuel Vadot  nvidia,pad-autocal-pull-down-offset-sdr104 : Specify drive strength
78*c66ec88fSEmmanuel Vadot  calibration offsets for SDR104 mode.
79*c66ec88fSEmmanuel Vadot- nvidia,pad-autocal-pull-up-offset-hs400,
80*c66ec88fSEmmanuel Vadot  nvidia,pad-autocal-pull-down-offset-hs400 : Specify drive strength
81*c66ec88fSEmmanuel Vadot  calibration offsets for HS400 mode.
82*c66ec88fSEmmanuel Vadot- nvidia,default-tap : Specify the default inbound sampling clock
83*c66ec88fSEmmanuel Vadot  trimmer value for non-tunable modes.
84*c66ec88fSEmmanuel Vadot- nvidia,default-trim : Specify the default outbound clock trimmer
85*c66ec88fSEmmanuel Vadot  value.
86*c66ec88fSEmmanuel Vadot- nvidia,dqs-trim : Specify DQS trim value for HS400 timing
87*c66ec88fSEmmanuel Vadot
88*c66ec88fSEmmanuel Vadot  Notes on the pad calibration pull up and pulldown offset values:
89*c66ec88fSEmmanuel Vadot    - The property values are drive codes which are programmed into the
90*c66ec88fSEmmanuel Vadot      PD_OFFSET and PU_OFFSET sections of the
91*c66ec88fSEmmanuel Vadot      SDHCI_TEGRA_AUTO_CAL_CONFIG register.
92*c66ec88fSEmmanuel Vadot    - A higher value corresponds to higher drive strength. Please refer
93*c66ec88fSEmmanuel Vadot      to the reference manual of the SoC for correct values.
94*c66ec88fSEmmanuel Vadot    - The SDR104 and HS400 timing specific values are used in
95*c66ec88fSEmmanuel Vadot      corresponding modes if specified.
96*c66ec88fSEmmanuel Vadot
97*c66ec88fSEmmanuel Vadot  Notes on tap and trim values:
98*c66ec88fSEmmanuel Vadot    - The values are used for compensating trace length differences
99*c66ec88fSEmmanuel Vadot      by adjusting the sampling point.
100*c66ec88fSEmmanuel Vadot    - The values are programmed to the Vendor Clock Control Register.
101*c66ec88fSEmmanuel Vadot      Please refer to the reference manual of the SoC for correct
102*c66ec88fSEmmanuel Vadot      values.
103*c66ec88fSEmmanuel Vadot    - The DQS trim values are only used on controllers which support
104*c66ec88fSEmmanuel Vadot      HS400 timing. Only SDMMC4 on Tegra210 and Tegra 186 supports
105*c66ec88fSEmmanuel Vadot      HS400.
106*c66ec88fSEmmanuel Vadot
107*c66ec88fSEmmanuel VadotExample:
108*c66ec88fSEmmanuel Vadotsdhci@700b0000 {
109*c66ec88fSEmmanuel Vadot	compatible = "nvidia,tegra124-sdhci";
110*c66ec88fSEmmanuel Vadot	reg = <0x0 0x700b0000 0x0 0x200>;
111*c66ec88fSEmmanuel Vadot	interrupts = <GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>;
112*c66ec88fSEmmanuel Vadot	clocks = <&tegra_car TEGRA210_CLK_SDMMC1>;
113*c66ec88fSEmmanuel Vadot	clock-names = "sdhci";
114*c66ec88fSEmmanuel Vadot	resets = <&tegra_car 14>;
115*c66ec88fSEmmanuel Vadot	reset-names = "sdhci";
116*c66ec88fSEmmanuel Vadot	pinctrl-names = "sdmmc-3v3", "sdmmc-1v8";
117*c66ec88fSEmmanuel Vadot	pinctrl-0 = <&sdmmc1_3v3>;
118*c66ec88fSEmmanuel Vadot	pinctrl-1 = <&sdmmc1_1v8>;
119*c66ec88fSEmmanuel Vadot	nvidia,pad-autocal-pull-up-offset-3v3 = <0x00>;
120*c66ec88fSEmmanuel Vadot	nvidia,pad-autocal-pull-down-offset-3v3 = <0x7d>;
121*c66ec88fSEmmanuel Vadot	nvidia,pad-autocal-pull-up-offset-1v8 = <0x7b>;
122*c66ec88fSEmmanuel Vadot	nvidia,pad-autocal-pull-down-offset-1v8 = <0x7b>;
123*c66ec88fSEmmanuel Vadot	status = "disabled";
124*c66ec88fSEmmanuel Vadot};
125*c66ec88fSEmmanuel Vadot
126*c66ec88fSEmmanuel Vadotsdhci@700b0000 {
127*c66ec88fSEmmanuel Vadot	compatible = "nvidia,tegra210-sdhci";
128*c66ec88fSEmmanuel Vadot	reg = <0x0 0x700b0000 0x0 0x200>;
129*c66ec88fSEmmanuel Vadot	interrupts = <GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>;
130*c66ec88fSEmmanuel Vadot	clocks = <&tegra_car TEGRA210_CLK_SDMMC1>,
131*c66ec88fSEmmanuel Vadot		 <&tegra_car TEGRA210_CLK_SDMMC_LEGACY>;
132*c66ec88fSEmmanuel Vadot	clock-names = "sdhci", "tmclk";
133*c66ec88fSEmmanuel Vadot	resets = <&tegra_car 14>;
134*c66ec88fSEmmanuel Vadot	reset-names = "sdhci";
135*c66ec88fSEmmanuel Vadot	pinctrl-names = "sdmmc-3v3", "sdmmc-1v8";
136*c66ec88fSEmmanuel Vadot	pinctrl-0 = <&sdmmc1_3v3>;
137*c66ec88fSEmmanuel Vadot	pinctrl-1 = <&sdmmc1_1v8>;
138*c66ec88fSEmmanuel Vadot	nvidia,pad-autocal-pull-up-offset-3v3 = <0x00>;
139*c66ec88fSEmmanuel Vadot	nvidia,pad-autocal-pull-down-offset-3v3 = <0x7d>;
140*c66ec88fSEmmanuel Vadot	nvidia,pad-autocal-pull-up-offset-1v8 = <0x7b>;
141*c66ec88fSEmmanuel Vadot	nvidia,pad-autocal-pull-down-offset-1v8 = <0x7b>;
142*c66ec88fSEmmanuel Vadot	status = "disabled";
143*c66ec88fSEmmanuel Vadot};
144