1 * TI Highspeed MMC host controller for OMAP an 1 * TI Highspeed MMC host controller for OMAP and 66AK2G family. 2 2 3 The Highspeed MMC Host Controller on TI OMAP a 3 The Highspeed MMC Host Controller on TI OMAP and 66AK2G family 4 provides an interface for MMC, SD, and SDIO ty 4 provides an interface for MMC, SD, and SDIO types of memory cards. 5 5 6 This file documents differences between the co 6 This file documents differences between the core properties described 7 by mmc.txt and the properties used by the omap 7 by mmc.txt and the properties used by the omap_hsmmc driver. 8 8 9 Required properties: 9 Required properties: 10 -------------------- 10 -------------------- 11 - compatible: 11 - compatible: 12 Should be "ti,omap2-hsmmc", for OMAP2 control 12 Should be "ti,omap2-hsmmc", for OMAP2 controllers 13 Should be "ti,omap3-hsmmc", for OMAP3 control 13 Should be "ti,omap3-hsmmc", for OMAP3 controllers 14 Should be "ti,omap3-pre-es3-hsmmc" for OMAP3 14 Should be "ti,omap3-pre-es3-hsmmc" for OMAP3 controllers pre ES3.0 15 Should be "ti,omap4-hsmmc", for OMAP4 control 15 Should be "ti,omap4-hsmmc", for OMAP4 controllers 16 Should be "ti,am33xx-hsmmc", for AM335x contr 16 Should be "ti,am33xx-hsmmc", for AM335x controllers 17 Should be "ti,k2g-hsmmc", "ti,omap4-hsmmc" fo 17 Should be "ti,k2g-hsmmc", "ti,omap4-hsmmc" for 66AK2G controllers. 18 18 19 SoC specific required properties: 19 SoC specific required properties: 20 --------------------------------- 20 --------------------------------- 21 The following are mandatory properties for OMA 21 The following are mandatory properties for OMAPs, AM33xx and AM43xx SoCs only: 22 - ti,hwmods: Must be "mmc<n>", n is controller 22 - ti,hwmods: Must be "mmc<n>", n is controller instance starting 1. 23 23 24 The following are mandatory properties for 66A 24 The following are mandatory properties for 66AK2G SoCs only: 25 - power-domains:Should contain a phandle to a 25 - power-domains:Should contain a phandle to a PM domain provider node 26 and an args specifier containi 26 and an args specifier containing the MMC device id 27 value. This property is as per 27 value. This property is as per the binding, 28 Documentation/devicetree/bindi 28 Documentation/devicetree/bindings/soc/ti/sci-pm-domain.yaml 29 - clocks: Must contain an entry for each 29 - clocks: Must contain an entry for each entry in clock-names. Should 30 be defined as per the he appro 30 be defined as per the he appropriate clock bindings consumer 31 usage in Documentation/devicet 31 usage in Documentation/devicetree/bindings/clock/ti,sci-clk.yaml 32 - clock-names: Shall be "fck" for the functio 32 - clock-names: Shall be "fck" for the functional clock, 33 and "mmchsdb_fck" for the debo 33 and "mmchsdb_fck" for the debounce clock. 34 34 35 35 36 Optional properties: 36 Optional properties: 37 -------------------- 37 -------------------- 38 - ti,dual-volt: boolean, supports dual 38 - ti,dual-volt: boolean, supports dual voltage cards 39 - <supply-name>-supply: phandle to the regulat 39 - <supply-name>-supply: phandle to the regulator device tree node 40 "supply-name" exampl 40 "supply-name" examples are "vmmc", 41 "vmmc_aux"(deprecate 41 "vmmc_aux"(deprecated)/"vqmmc" etc 42 - ti,non-removable: non-removable slot (li 42 - ti,non-removable: non-removable slot (like eMMC) 43 - ti,needs-special-reset: Requires a spe 43 - ti,needs-special-reset: Requires a special softreset sequence 44 - ti,needs-special-hs-handling: HSMMC IP needs 44 - ti,needs-special-hs-handling: HSMMC IP needs special setting 45 for handling 45 for handling High Speed 46 - dmas: List of DMA specifiers 46 - dmas: List of DMA specifiers with the controller specific 47 format as described in 47 format as described in the generic DMA client 48 binding. A tx and rx s 48 binding. A tx and rx specifier is required. 49 - dma-names: List of DMA request na 49 - dma-names: List of DMA request names. These strings correspond 50 1:1 with the DMA speci 50 1:1 with the DMA specifiers listed in dmas. 51 The string naming is t 51 The string naming is to be "rx" and "tx" for 52 RX and TX DMA requests 52 RX and TX DMA requests, respectively. 53 53 54 Examples: 54 Examples: 55 55 56 [hwmod populated DMA resources] 56 [hwmod populated DMA resources] 57 57 58 mmc1: mmc@4809c000 { 58 mmc1: mmc@4809c000 { 59 compatible = "ti,omap4-hsmmc"; 59 compatible = "ti,omap4-hsmmc"; 60 reg = <0x4809c000 0x400>; 60 reg = <0x4809c000 0x400>; 61 ti,hwmods = "mmc1"; 61 ti,hwmods = "mmc1"; 62 ti,dual-volt; 62 ti,dual-volt; 63 bus-width = <4>; 63 bus-width = <4>; 64 vmmc-supply = <&vmmc>; /* phan 64 vmmc-supply = <&vmmc>; /* phandle to regulator node */ 65 ti,non-removable; 65 ti,non-removable; 66 }; 66 }; 67 67 68 [generic DMA request binding] 68 [generic DMA request binding] 69 69 70 mmc1: mmc@4809c000 { 70 mmc1: mmc@4809c000 { 71 compatible = "ti,omap4-hsmmc"; 71 compatible = "ti,omap4-hsmmc"; 72 reg = <0x4809c000 0x400>; 72 reg = <0x4809c000 0x400>; 73 ti,hwmods = "mmc1"; 73 ti,hwmods = "mmc1"; 74 ti,dual-volt; 74 ti,dual-volt; 75 bus-width = <4>; 75 bus-width = <4>; 76 vmmc-supply = <&vmmc>; /* phan 76 vmmc-supply = <&vmmc>; /* phandle to regulator node */ 77 ti,non-removable; 77 ti,non-removable; 78 dmas = <&edma 24 78 dmas = <&edma 24 79 &edma 25>; 79 &edma 25>; 80 dma-names = "tx", "rx"; 80 dma-names = "tx", "rx"; 81 }; 81 }; 82 82 83 [workaround for missing swakeup on am33xx] 83 [workaround for missing swakeup on am33xx] 84 84 85 This SOC is missing the swakeup line, it will 85 This SOC is missing the swakeup line, it will not detect SDIO irq 86 while in suspend. 86 while in suspend. 87 87 88 ------ 88 ------ 89 | PRCM | 89 | PRCM | 90 ------ 90 ------ 91 ^ | 91 ^ | 92 swakeup | | fclk 92 swakeup | | fclk 93 | v 93 | v 94 ------ ------- 94 ------ ------- ----- 95 | card | -- CIRQ --> | hsmmc | -- IRQ - 95 | card | -- CIRQ --> | hsmmc | -- IRQ --> | CPU | 96 ------ ------- 96 ------ ------- ----- 97 97 98 In suspend the fclk is off and the module is d 98 In suspend the fclk is off and the module is dysfunctional. Even register reads 99 will fail. A small logic in the host will requ 99 will fail. A small logic in the host will request fclk restore, when an 100 external event is detected. Once the clock is 100 external event is detected. Once the clock is restored, the host detects the 101 event normally. Since am33xx doesn't have this 101 event normally. Since am33xx doesn't have this line it never wakes from 102 suspend. 102 suspend. 103 103 104 The workaround is to reconfigure the dat1 line 104 The workaround is to reconfigure the dat1 line as a GPIO upon suspend. To make 105 this work, we need to set the named pinctrl st 105 this work, we need to set the named pinctrl states "default" and "idle". 106 Prepare idle to remux dat1 as a gpio, and defa 106 Prepare idle to remux dat1 as a gpio, and default to remux it back as sdio 107 dat1. The MMC driver will then toggle between 107 dat1. The MMC driver will then toggle between idle and default state during 108 runtime. 108 runtime. 109 109 110 In summary: 110 In summary: 111 1. select matching 'compatible' section, see e 111 1. select matching 'compatible' section, see example below. 112 2. specify pinctrl states "default" and "idle" 112 2. specify pinctrl states "default" and "idle", "sleep" is optional. 113 3. specify the gpio irq used for detecting sdi 113 3. specify the gpio irq used for detecting sdio irq in suspend 114 114 115 If configuration is incomplete, a warning mess 115 If configuration is incomplete, a warning message is emitted "falling back to 116 polling". Also check the "sdio irq mode" in /s 116 polling". Also check the "sdio irq mode" in /sys/kernel/debug/mmc0/regs. Mind 117 not every application needs SDIO irq, e.g. MMC 117 not every application needs SDIO irq, e.g. MMC cards. 118 118 119 mmc1: mmc@48060100 { 119 mmc1: mmc@48060100 { 120 compatible = "ti,am33xx-hsmmc" 120 compatible = "ti,am33xx-hsmmc"; 121 ... 121 ... 122 pinctrl-names = "default", "id 122 pinctrl-names = "default", "idle", "sleep" 123 pinctrl-0 = <&mmc1_pins>; 123 pinctrl-0 = <&mmc1_pins>; 124 pinctrl-1 = <&mmc1_idle>; 124 pinctrl-1 = <&mmc1_idle>; 125 pinctrl-2 = <&mmc1_sleep>; 125 pinctrl-2 = <&mmc1_sleep>; 126 ... 126 ... 127 interrupts-extended = <&intc 6 127 interrupts-extended = <&intc 64 &gpio2 28 IRQ_TYPE_LEVEL_LOW>; 128 }; 128 }; 129 129 130 mmc1_idle : pinmux_cirq_pin { 130 mmc1_idle : pinmux_cirq_pin { 131 pinctrl-single,pins = < 131 pinctrl-single,pins = < 132 0x0f8 0x3f /* GPI 132 0x0f8 0x3f /* GPIO2_28 */ 133 >; 133 >; 134 }; 134 };
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.