omap_hsmmc.c 48 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968
  1. /*
  2. * (C) Copyright 2008
  3. * Texas Instruments, <www.ti.com>
  4. * Sukumar Ghorai <s-ghorai@ti.com>
  5. *
  6. * See file CREDITS for list of people who contributed to this
  7. * project.
  8. *
  9. * This program is free software; you can redistribute it and/or
  10. * modify it under the terms of the GNU General Public License as
  11. * published by the Free Software Foundation's version 2 of
  12. * the License.
  13. *
  14. * This program is distributed in the hope that it will be useful,
  15. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  16. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  17. * GNU General Public License for more details.
  18. *
  19. * You should have received a copy of the GNU General Public License
  20. * along with this program; if not, write to the Free Software
  21. * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
  22. * MA 02111-1307 USA
  23. */
  24. #include <config.h>
  25. #include <common.h>
  26. #include <malloc.h>
  27. #include <memalign.h>
  28. #include <mmc.h>
  29. #include <part.h>
  30. #include <i2c.h>
  31. #if defined(CONFIG_OMAP54XX) || defined(CONFIG_OMAP44XX)
  32. #include <palmas.h>
  33. #endif
  34. #include <asm/io.h>
  35. #include <asm/arch/mmc_host_def.h>
  36. #ifdef CONFIG_OMAP54XX
  37. #include <asm/arch/mux_dra7xx.h>
  38. #include <asm/arch/dra7xx_iodelay.h>
  39. #endif
  40. #if !defined(CONFIG_SOC_KEYSTONE)
  41. #include <asm/gpio.h>
  42. #include <asm/arch/sys_proto.h>
  43. #endif
  44. #ifdef CONFIG_MMC_OMAP36XX_PINS
  45. #include <asm/arch/mux.h>
  46. #endif
  47. #include <dm.h>
  48. #include <power/regulator.h>
  49. DECLARE_GLOBAL_DATA_PTR;
  50. /* simplify defines to OMAP_HSMMC_USE_GPIO */
  51. #if (defined(CONFIG_OMAP_GPIO) && !defined(CONFIG_SPL_BUILD)) || \
  52. (defined(CONFIG_SPL_BUILD) && defined(CONFIG_SPL_GPIO_SUPPORT))
  53. #define OMAP_HSMMC_USE_GPIO
  54. #else
  55. #undef OMAP_HSMMC_USE_GPIO
  56. #endif
  57. /* common definitions for all OMAPs */
  58. #define SYSCTL_SRC (1 << 25)
  59. #define SYSCTL_SRD (1 << 26)
  60. #ifdef CONFIG_IODELAY_RECALIBRATION
  61. struct omap_hsmmc_pinctrl_state {
  62. struct pad_conf_entry *padconf;
  63. int npads;
  64. struct iodelay_cfg_entry *iodelay;
  65. int niodelays;
  66. };
  67. #endif
  68. struct omap_hsmmc_data {
  69. struct hsmmc *base_addr;
  70. #if !CONFIG_IS_ENABLED(DM_MMC)
  71. struct mmc_config cfg;
  72. #endif
  73. uint bus_width;
  74. uint clock;
  75. ushort last_cmd;
  76. #ifdef OMAP_HSMMC_USE_GPIO
  77. #if CONFIG_IS_ENABLED(DM_MMC)
  78. struct gpio_desc cd_gpio; /* Change Detect GPIO */
  79. struct gpio_desc wp_gpio; /* Write Protect GPIO */
  80. bool cd_inverted;
  81. #else
  82. int cd_gpio;
  83. int wp_gpio;
  84. #endif
  85. #endif
  86. #if CONFIG_IS_ENABLED(DM_MMC)
  87. enum bus_mode mode;
  88. #endif
  89. u8 controller_flags;
  90. #ifdef CONFIG_MMC_OMAP_HS_ADMA
  91. struct omap_hsmmc_adma_desc *adma_desc_table;
  92. uint desc_slot;
  93. #endif
  94. const char *hw_rev;
  95. struct udevice *pbias_supply;
  96. uint signal_voltage;
  97. #ifdef CONFIG_IODELAY_RECALIBRATION
  98. struct omap_hsmmc_pinctrl_state *default_pinctrl_state;
  99. struct omap_hsmmc_pinctrl_state *hs_pinctrl_state;
  100. struct omap_hsmmc_pinctrl_state *hs200_1_8v_pinctrl_state;
  101. struct omap_hsmmc_pinctrl_state *ddr_1_8v_pinctrl_state;
  102. struct omap_hsmmc_pinctrl_state *sdr12_pinctrl_state;
  103. struct omap_hsmmc_pinctrl_state *sdr25_pinctrl_state;
  104. struct omap_hsmmc_pinctrl_state *ddr50_pinctrl_state;
  105. struct omap_hsmmc_pinctrl_state *sdr50_pinctrl_state;
  106. struct omap_hsmmc_pinctrl_state *sdr104_pinctrl_state;
  107. #endif
  108. };
  109. struct omap_mmc_of_data {
  110. u8 controller_flags;
  111. };
  112. #ifdef CONFIG_MMC_OMAP_HS_ADMA
  113. struct omap_hsmmc_adma_desc {
  114. u8 attr;
  115. u8 reserved;
  116. u16 len;
  117. u32 addr;
  118. };
  119. #define ADMA_MAX_LEN 63488
  120. /* Decriptor table defines */
  121. #define ADMA_DESC_ATTR_VALID BIT(0)
  122. #define ADMA_DESC_ATTR_END BIT(1)
  123. #define ADMA_DESC_ATTR_INT BIT(2)
  124. #define ADMA_DESC_ATTR_ACT1 BIT(4)
  125. #define ADMA_DESC_ATTR_ACT2 BIT(5)
  126. #define ADMA_DESC_TRANSFER_DATA ADMA_DESC_ATTR_ACT2
  127. #define ADMA_DESC_LINK_DESC (ADMA_DESC_ATTR_ACT1 | ADMA_DESC_ATTR_ACT2)
  128. #endif
  129. /* If we fail after 1 second wait, something is really bad */
  130. #define MAX_RETRY_MS 1000
  131. #define MMC_TIMEOUT_MS 20
  132. /* DMA transfers can take a long time if a lot a data is transferred.
  133. * The timeout must take in account the amount of data. Let's assume
  134. * that the time will never exceed 333 ms per MB (in other word we assume
  135. * that the bandwidth is always above 3MB/s).
  136. */
  137. #define DMA_TIMEOUT_PER_MB 333
  138. #define OMAP_HSMMC_SUPPORTS_DUAL_VOLT BIT(0)
  139. #define OMAP_HSMMC_NO_1_8_V BIT(1)
  140. #define OMAP_HSMMC_USE_ADMA BIT(2)
  141. #define OMAP_HSMMC_REQUIRE_IODELAY BIT(3)
  142. static int mmc_read_data(struct hsmmc *mmc_base, char *buf, unsigned int size);
  143. static int mmc_write_data(struct hsmmc *mmc_base, const char *buf,
  144. unsigned int siz);
  145. static void omap_hsmmc_start_clock(struct hsmmc *mmc_base);
  146. static void omap_hsmmc_stop_clock(struct hsmmc *mmc_base);
  147. static void mmc_reset_controller_fsm(struct hsmmc *mmc_base, u32 bit);
  148. static inline struct omap_hsmmc_data *omap_hsmmc_get_data(struct mmc *mmc)
  149. {
  150. #if CONFIG_IS_ENABLED(DM_MMC)
  151. return dev_get_priv(mmc->dev);
  152. #else
  153. return (struct omap_hsmmc_data *)mmc->priv;
  154. #endif
  155. }
  156. static inline struct mmc_config *omap_hsmmc_get_cfg(struct mmc *mmc)
  157. {
  158. #if CONFIG_IS_ENABLED(DM_MMC)
  159. struct omap_hsmmc_plat *plat = dev_get_platdata(mmc->dev);
  160. return &plat->cfg;
  161. #else
  162. return &((struct omap_hsmmc_data *)mmc->priv)->cfg;
  163. #endif
  164. }
  165. #if defined(OMAP_HSMMC_USE_GPIO) && !CONFIG_IS_ENABLED(DM_MMC)
  166. static int omap_mmc_setup_gpio_in(int gpio, const char *label)
  167. {
  168. int ret;
  169. #ifndef CONFIG_DM_GPIO
  170. if (!gpio_is_valid(gpio))
  171. return -1;
  172. #endif
  173. ret = gpio_request(gpio, label);
  174. if (ret)
  175. return ret;
  176. ret = gpio_direction_input(gpio);
  177. if (ret)
  178. return ret;
  179. return gpio;
  180. }
  181. #endif
  182. static unsigned char mmc_board_init(struct mmc *mmc)
  183. {
  184. #if defined(CONFIG_OMAP34XX)
  185. struct mmc_config *cfg = omap_hsmmc_get_cfg(mmc);
  186. t2_t *t2_base = (t2_t *)T2_BASE;
  187. struct prcm *prcm_base = (struct prcm *)PRCM_BASE;
  188. u32 pbias_lite;
  189. #ifdef CONFIG_MMC_OMAP36XX_PINS
  190. u32 wkup_ctrl = readl(OMAP34XX_CTRL_WKUP_CTRL);
  191. #endif
  192. pbias_lite = readl(&t2_base->pbias_lite);
  193. pbias_lite &= ~(PBIASLITEPWRDNZ1 | PBIASLITEPWRDNZ0);
  194. #ifdef CONFIG_TARGET_OMAP3_CAIRO
  195. /* for cairo board, we need to set up 1.8 Volt bias level on MMC1 */
  196. pbias_lite &= ~PBIASLITEVMODE0;
  197. #endif
  198. #ifdef CONFIG_TARGET_OMAP3_LOGIC
  199. /* For Logic PD board, 1.8V bias to go enable gpio127 for mmc_cd */
  200. pbias_lite &= ~PBIASLITEVMODE1;
  201. #endif
  202. #ifdef CONFIG_MMC_OMAP36XX_PINS
  203. if (get_cpu_family() == CPU_OMAP36XX) {
  204. /* Disable extended drain IO before changing PBIAS */
  205. wkup_ctrl &= ~OMAP34XX_CTRL_WKUP_CTRL_GPIO_IO_PWRDNZ;
  206. writel(wkup_ctrl, OMAP34XX_CTRL_WKUP_CTRL);
  207. }
  208. #endif
  209. writel(pbias_lite, &t2_base->pbias_lite);
  210. writel(pbias_lite | PBIASLITEPWRDNZ1 |
  211. PBIASSPEEDCTRL0 | PBIASLITEPWRDNZ0,
  212. &t2_base->pbias_lite);
  213. #ifdef CONFIG_MMC_OMAP36XX_PINS
  214. if (get_cpu_family() == CPU_OMAP36XX)
  215. /* Enable extended drain IO after changing PBIAS */
  216. writel(wkup_ctrl |
  217. OMAP34XX_CTRL_WKUP_CTRL_GPIO_IO_PWRDNZ,
  218. OMAP34XX_CTRL_WKUP_CTRL);
  219. #endif
  220. writel(readl(&t2_base->devconf0) | MMCSDIO1ADPCLKISEL,
  221. &t2_base->devconf0);
  222. writel(readl(&t2_base->devconf1) | MMCSDIO2ADPCLKISEL,
  223. &t2_base->devconf1);
  224. /* Change from default of 52MHz to 26MHz if necessary */
  225. if (!(cfg->host_caps & MMC_MODE_HS_52MHz))
  226. writel(readl(&t2_base->ctl_prog_io1) & ~CTLPROGIO1SPEEDCTRL,
  227. &t2_base->ctl_prog_io1);
  228. writel(readl(&prcm_base->fclken1_core) |
  229. EN_MMC1 | EN_MMC2 | EN_MMC3,
  230. &prcm_base->fclken1_core);
  231. writel(readl(&prcm_base->iclken1_core) |
  232. EN_MMC1 | EN_MMC2 | EN_MMC3,
  233. &prcm_base->iclken1_core);
  234. #endif
  235. #if (defined(CONFIG_OMAP54XX) || defined(CONFIG_OMAP44XX)) &&\
  236. !CONFIG_IS_ENABLED(DM_REGULATOR)
  237. /* PBIAS config needed for MMC1 only */
  238. if (mmc_get_blk_desc(mmc)->devnum == 0)
  239. vmmc_pbias_config(LDO_VOLT_3V0);
  240. #endif
  241. return 0;
  242. }
  243. void mmc_init_stream(struct hsmmc *mmc_base)
  244. {
  245. ulong start;
  246. writel(readl(&mmc_base->con) | INIT_INITSTREAM, &mmc_base->con);
  247. writel(MMC_CMD0, &mmc_base->cmd);
  248. start = get_timer(0);
  249. while (!(readl(&mmc_base->stat) & CC_MASK)) {
  250. if (get_timer(0) - start > MAX_RETRY_MS) {
  251. printf("%s: timedout waiting for cc!\n", __func__);
  252. return;
  253. }
  254. }
  255. writel(CC_MASK, &mmc_base->stat)
  256. ;
  257. writel(MMC_CMD0, &mmc_base->cmd)
  258. ;
  259. start = get_timer(0);
  260. while (!(readl(&mmc_base->stat) & CC_MASK)) {
  261. if (get_timer(0) - start > MAX_RETRY_MS) {
  262. printf("%s: timedout waiting for cc2!\n", __func__);
  263. return;
  264. }
  265. }
  266. writel(readl(&mmc_base->con) & ~INIT_INITSTREAM, &mmc_base->con);
  267. }
  268. #if CONFIG_IS_ENABLED(DM_MMC)
  269. #ifdef CONFIG_IODELAY_RECALIBRATION
  270. static void omap_hsmmc_io_recalibrate(struct mmc *mmc)
  271. {
  272. struct omap_hsmmc_data *priv = omap_hsmmc_get_data(mmc);
  273. struct omap_hsmmc_pinctrl_state *pinctrl_state;
  274. switch (priv->mode) {
  275. case MMC_HS_200:
  276. pinctrl_state = priv->hs200_1_8v_pinctrl_state;
  277. break;
  278. case UHS_SDR104:
  279. pinctrl_state = priv->sdr104_pinctrl_state;
  280. break;
  281. case UHS_SDR50:
  282. pinctrl_state = priv->sdr50_pinctrl_state;
  283. break;
  284. case UHS_DDR50:
  285. pinctrl_state = priv->ddr50_pinctrl_state;
  286. break;
  287. case UHS_SDR25:
  288. pinctrl_state = priv->sdr25_pinctrl_state;
  289. break;
  290. case UHS_SDR12:
  291. pinctrl_state = priv->sdr12_pinctrl_state;
  292. break;
  293. case SD_HS:
  294. case MMC_HS:
  295. case MMC_HS_52:
  296. pinctrl_state = priv->hs_pinctrl_state;
  297. break;
  298. case MMC_DDR_52:
  299. pinctrl_state = priv->ddr_1_8v_pinctrl_state;
  300. default:
  301. pinctrl_state = priv->default_pinctrl_state;
  302. break;
  303. }
  304. if (!pinctrl_state)
  305. pinctrl_state = priv->default_pinctrl_state;
  306. if (priv->controller_flags & OMAP_HSMMC_REQUIRE_IODELAY) {
  307. if (pinctrl_state->iodelay)
  308. late_recalibrate_iodelay(pinctrl_state->padconf,
  309. pinctrl_state->npads,
  310. pinctrl_state->iodelay,
  311. pinctrl_state->niodelays);
  312. else
  313. do_set_mux32((*ctrl)->control_padconf_core_base,
  314. pinctrl_state->padconf,
  315. pinctrl_state->npads);
  316. }
  317. }
  318. #endif
  319. static void omap_hsmmc_set_timing(struct mmc *mmc)
  320. {
  321. u32 val;
  322. struct hsmmc *mmc_base;
  323. struct omap_hsmmc_data *priv = omap_hsmmc_get_data(mmc);
  324. mmc_base = priv->base_addr;
  325. omap_hsmmc_stop_clock(mmc_base);
  326. val = readl(&mmc_base->ac12);
  327. val &= ~AC12_UHSMC_MASK;
  328. priv->mode = mmc->selected_mode;
  329. if (mmc_is_mode_ddr(priv->mode))
  330. writel(readl(&mmc_base->con) | DDR, &mmc_base->con);
  331. else
  332. writel(readl(&mmc_base->con) & ~DDR, &mmc_base->con);
  333. switch (priv->mode) {
  334. case MMC_HS_200:
  335. case UHS_SDR104:
  336. val |= AC12_UHSMC_SDR104;
  337. break;
  338. case UHS_SDR50:
  339. val |= AC12_UHSMC_SDR50;
  340. break;
  341. case MMC_DDR_52:
  342. case UHS_DDR50:
  343. val |= AC12_UHSMC_DDR50;
  344. break;
  345. case SD_HS:
  346. case MMC_HS_52:
  347. case UHS_SDR25:
  348. val |= AC12_UHSMC_SDR25;
  349. break;
  350. case MMC_LEGACY:
  351. case MMC_HS:
  352. case SD_LEGACY:
  353. case UHS_SDR12:
  354. val |= AC12_UHSMC_SDR12;
  355. break;
  356. default:
  357. val |= AC12_UHSMC_RES;
  358. break;
  359. }
  360. writel(val, &mmc_base->ac12);
  361. #ifdef CONFIG_IODELAY_RECALIBRATION
  362. omap_hsmmc_io_recalibrate(mmc);
  363. #endif
  364. omap_hsmmc_start_clock(mmc_base);
  365. }
  366. static void omap_hsmmc_conf_bus_power(struct mmc *mmc, uint signal_voltage)
  367. {
  368. struct hsmmc *mmc_base;
  369. struct omap_hsmmc_data *priv = omap_hsmmc_get_data(mmc);
  370. u32 hctl, ac12;
  371. mmc_base = priv->base_addr;
  372. hctl = readl(&mmc_base->hctl) & ~SDVS_MASK;
  373. ac12 = readl(&mmc_base->ac12) & ~AC12_V1V8_SIGEN;
  374. switch (signal_voltage) {
  375. case MMC_SIGNAL_VOLTAGE_330:
  376. hctl |= SDVS_3V0;
  377. break;
  378. case MMC_SIGNAL_VOLTAGE_180:
  379. hctl |= SDVS_1V8;
  380. ac12 |= AC12_V1V8_SIGEN;
  381. break;
  382. }
  383. writel(hctl, &mmc_base->hctl);
  384. writel(ac12, &mmc_base->ac12);
  385. }
  386. #if CONFIG_IS_ENABLED(MMC_UHS_SUPPORT)
  387. static int omap_hsmmc_wait_dat0(struct udevice *dev, int state, int timeout)
  388. {
  389. int ret = -ETIMEDOUT;
  390. u32 con;
  391. bool dat0_high;
  392. bool target_dat0_high = !!state;
  393. struct omap_hsmmc_data *priv = dev_get_priv(dev);
  394. struct hsmmc *mmc_base = priv->base_addr;
  395. con = readl(&mmc_base->con);
  396. writel(con | CON_CLKEXTFREE | CON_PADEN, &mmc_base->con);
  397. timeout = DIV_ROUND_UP(timeout, 10); /* check every 10 us. */
  398. while (timeout--) {
  399. dat0_high = !!(readl(&mmc_base->pstate) & PSTATE_DLEV_DAT0);
  400. if (dat0_high == target_dat0_high) {
  401. ret = 0;
  402. break;
  403. }
  404. udelay(10);
  405. }
  406. writel(con, &mmc_base->con);
  407. return ret;
  408. }
  409. #endif
  410. #if CONFIG_IS_ENABLED(MMC_IO_VOLTAGE)
  411. #if CONFIG_IS_ENABLED(DM_REGULATOR)
  412. static int omap_hsmmc_set_io_regulator(struct mmc *mmc, int mV)
  413. {
  414. int ret = 0;
  415. int uV = mV * 1000;
  416. struct omap_hsmmc_data *priv = omap_hsmmc_get_data(mmc);
  417. if (!mmc->vqmmc_supply)
  418. return 0;
  419. /* Disable PBIAS */
  420. ret = regulator_set_enable(priv->pbias_supply, false);
  421. if (ret && ret != -ENOSYS)
  422. return ret;
  423. /* Turn off IO voltage */
  424. ret = regulator_set_enable(mmc->vqmmc_supply, false);
  425. if (ret && ret != -ENOSYS)
  426. return ret;
  427. /* Program a new IO voltage value */
  428. ret = regulator_set_value(mmc->vqmmc_supply, uV);
  429. if (ret)
  430. return ret;
  431. /* Turn on IO voltage */
  432. ret = regulator_set_enable(mmc->vqmmc_supply, true);
  433. if (ret && ret != -ENOSYS)
  434. return ret;
  435. /* Program PBIAS voltage*/
  436. ret = regulator_set_value(priv->pbias_supply, uV);
  437. if (ret && ret != -ENOSYS)
  438. return ret;
  439. /* Enable PBIAS */
  440. ret = regulator_set_enable(priv->pbias_supply, true);
  441. if (ret && ret != -ENOSYS)
  442. return ret;
  443. return 0;
  444. }
  445. #endif
  446. static int omap_hsmmc_set_signal_voltage(struct mmc *mmc)
  447. {
  448. struct omap_hsmmc_data *priv = omap_hsmmc_get_data(mmc);
  449. struct hsmmc *mmc_base = priv->base_addr;
  450. int mv = mmc_voltage_to_mv(mmc->signal_voltage);
  451. u32 capa_mask;
  452. __maybe_unused u8 palmas_ldo_volt;
  453. u32 val;
  454. if (mv < 0)
  455. return -EINVAL;
  456. if (mmc->signal_voltage == MMC_SIGNAL_VOLTAGE_330) {
  457. /* Use 3.0V rather than 3.3V */
  458. mv = 3000;
  459. capa_mask = VS30_3V0SUP;
  460. palmas_ldo_volt = LDO_VOLT_3V0;
  461. } else if (mmc->signal_voltage == MMC_SIGNAL_VOLTAGE_180) {
  462. capa_mask = VS18_1V8SUP;
  463. palmas_ldo_volt = LDO_VOLT_1V8;
  464. } else {
  465. return -EOPNOTSUPP;
  466. }
  467. val = readl(&mmc_base->capa);
  468. if (!(val & capa_mask))
  469. return -EOPNOTSUPP;
  470. priv->signal_voltage = mmc->signal_voltage;
  471. omap_hsmmc_conf_bus_power(mmc, mmc->signal_voltage);
  472. #if CONFIG_IS_ENABLED(DM_REGULATOR)
  473. return omap_hsmmc_set_io_regulator(mmc, mv);
  474. #elif (defined(CONFIG_OMAP54XX) || defined(CONFIG_OMAP44XX)) && \
  475. defined(CONFIG_PALMAS_POWER)
  476. if (mmc_get_blk_desc(mmc)->devnum == 0)
  477. vmmc_pbias_config(palmas_ldo_volt);
  478. return 0;
  479. #else
  480. return 0;
  481. #endif
  482. }
  483. #endif
  484. static uint32_t omap_hsmmc_set_capabilities(struct mmc *mmc)
  485. {
  486. struct hsmmc *mmc_base;
  487. struct omap_hsmmc_data *priv = omap_hsmmc_get_data(mmc);
  488. u32 val;
  489. mmc_base = priv->base_addr;
  490. val = readl(&mmc_base->capa);
  491. if (priv->controller_flags & OMAP_HSMMC_SUPPORTS_DUAL_VOLT) {
  492. val |= (VS30_3V0SUP | VS18_1V8SUP);
  493. } else if (priv->controller_flags & OMAP_HSMMC_NO_1_8_V) {
  494. val |= VS30_3V0SUP;
  495. val &= ~VS18_1V8SUP;
  496. } else {
  497. val |= VS18_1V8SUP;
  498. val &= ~VS30_3V0SUP;
  499. }
  500. writel(val, &mmc_base->capa);
  501. return val;
  502. }
  503. #ifdef MMC_SUPPORTS_TUNING
  504. static void omap_hsmmc_disable_tuning(struct mmc *mmc)
  505. {
  506. struct hsmmc *mmc_base;
  507. struct omap_hsmmc_data *priv = omap_hsmmc_get_data(mmc);
  508. u32 val;
  509. mmc_base = priv->base_addr;
  510. val = readl(&mmc_base->ac12);
  511. val &= ~(AC12_SCLK_SEL);
  512. writel(val, &mmc_base->ac12);
  513. val = readl(&mmc_base->dll);
  514. val &= ~(DLL_FORCE_VALUE | DLL_SWT);
  515. writel(val, &mmc_base->dll);
  516. }
  517. static void omap_hsmmc_set_dll(struct mmc *mmc, int count)
  518. {
  519. int i;
  520. struct hsmmc *mmc_base;
  521. struct omap_hsmmc_data *priv = omap_hsmmc_get_data(mmc);
  522. u32 val;
  523. mmc_base = priv->base_addr;
  524. val = readl(&mmc_base->dll);
  525. val |= DLL_FORCE_VALUE;
  526. val &= ~(DLL_FORCE_SR_C_MASK << DLL_FORCE_SR_C_SHIFT);
  527. val |= (count << DLL_FORCE_SR_C_SHIFT);
  528. writel(val, &mmc_base->dll);
  529. val |= DLL_CALIB;
  530. writel(val, &mmc_base->dll);
  531. for (i = 0; i < 1000; i++) {
  532. if (readl(&mmc_base->dll) & DLL_CALIB)
  533. break;
  534. }
  535. val &= ~DLL_CALIB;
  536. writel(val, &mmc_base->dll);
  537. }
  538. static int omap_hsmmc_execute_tuning(struct udevice *dev, uint opcode)
  539. {
  540. struct omap_hsmmc_data *priv = dev_get_priv(dev);
  541. struct mmc_uclass_priv *upriv = dev_get_uclass_priv(dev);
  542. struct mmc *mmc = upriv->mmc;
  543. struct hsmmc *mmc_base;
  544. u32 val;
  545. u8 cur_match, prev_match = 0;
  546. int ret;
  547. u32 phase_delay = 0;
  548. u32 start_window = 0, max_window = 0;
  549. u32 length = 0, max_len = 0;
  550. mmc_base = priv->base_addr;
  551. val = readl(&mmc_base->capa2);
  552. /* clock tuning is not needed for upto 52MHz */
  553. if (!((mmc->selected_mode == MMC_HS_200) ||
  554. (mmc->selected_mode == UHS_SDR104) ||
  555. ((mmc->selected_mode == UHS_SDR50) && (val & CAPA2_TSDR50))))
  556. return 0;
  557. val = readl(&mmc_base->dll);
  558. val |= DLL_SWT;
  559. writel(val, &mmc_base->dll);
  560. while (phase_delay <= MAX_PHASE_DELAY) {
  561. omap_hsmmc_set_dll(mmc, phase_delay);
  562. cur_match = !mmc_send_tuning(mmc, opcode, NULL);
  563. if (cur_match) {
  564. if (prev_match) {
  565. length++;
  566. } else {
  567. start_window = phase_delay;
  568. length = 1;
  569. }
  570. }
  571. if (length > max_len) {
  572. max_window = start_window;
  573. max_len = length;
  574. }
  575. prev_match = cur_match;
  576. phase_delay += 4;
  577. }
  578. if (!max_len) {
  579. ret = -EIO;
  580. goto tuning_error;
  581. }
  582. val = readl(&mmc_base->ac12);
  583. if (!(val & AC12_SCLK_SEL)) {
  584. ret = -EIO;
  585. goto tuning_error;
  586. }
  587. phase_delay = max_window + 4 * ((3 * max_len) >> 2);
  588. omap_hsmmc_set_dll(mmc, phase_delay);
  589. mmc_reset_controller_fsm(mmc_base, SYSCTL_SRD);
  590. mmc_reset_controller_fsm(mmc_base, SYSCTL_SRC);
  591. return 0;
  592. tuning_error:
  593. omap_hsmmc_disable_tuning(mmc);
  594. mmc_reset_controller_fsm(mmc_base, SYSCTL_SRD);
  595. mmc_reset_controller_fsm(mmc_base, SYSCTL_SRC);
  596. return ret;
  597. }
  598. #endif
  599. static void omap_hsmmc_send_init_stream(struct udevice *dev)
  600. {
  601. struct omap_hsmmc_data *priv = dev_get_priv(dev);
  602. struct hsmmc *mmc_base = priv->base_addr;
  603. mmc_init_stream(mmc_base);
  604. }
  605. #endif
  606. static void mmc_enable_irq(struct mmc *mmc, struct mmc_cmd *cmd)
  607. {
  608. struct omap_hsmmc_data *priv = omap_hsmmc_get_data(mmc);
  609. struct hsmmc *mmc_base = priv->base_addr;
  610. u32 irq_mask = INT_EN_MASK;
  611. /*
  612. * TODO: Errata i802 indicates only DCRC interrupts can occur during
  613. * tuning procedure and DCRC should be disabled. But see occurences
  614. * of DEB, CIE, CEB, CCRC interupts during tuning procedure. These
  615. * interrupts occur along with BRR, so the data is actually in the
  616. * buffer. It has to be debugged why these interrutps occur
  617. */
  618. if (cmd && mmc_is_tuning_cmd(cmd->cmdidx))
  619. irq_mask &= ~(IE_DEB | IE_DCRC | IE_CIE | IE_CEB | IE_CCRC);
  620. writel(irq_mask, &mmc_base->ie);
  621. }
  622. static int omap_hsmmc_init_setup(struct mmc *mmc)
  623. {
  624. struct omap_hsmmc_data *priv = omap_hsmmc_get_data(mmc);
  625. struct hsmmc *mmc_base;
  626. unsigned int reg_val;
  627. unsigned int dsor;
  628. ulong start;
  629. mmc_base = priv->base_addr;
  630. mmc_board_init(mmc);
  631. writel(readl(&mmc_base->sysconfig) | MMC_SOFTRESET,
  632. &mmc_base->sysconfig);
  633. start = get_timer(0);
  634. while ((readl(&mmc_base->sysstatus) & RESETDONE) == 0) {
  635. if (get_timer(0) - start > MAX_RETRY_MS) {
  636. printf("%s: timedout waiting for cc2!\n", __func__);
  637. return -ETIMEDOUT;
  638. }
  639. }
  640. writel(readl(&mmc_base->sysctl) | SOFTRESETALL, &mmc_base->sysctl);
  641. start = get_timer(0);
  642. while ((readl(&mmc_base->sysctl) & SOFTRESETALL) != 0x0) {
  643. if (get_timer(0) - start > MAX_RETRY_MS) {
  644. printf("%s: timedout waiting for softresetall!\n",
  645. __func__);
  646. return -ETIMEDOUT;
  647. }
  648. }
  649. #ifdef CONFIG_MMC_OMAP_HS_ADMA
  650. reg_val = readl(&mmc_base->hl_hwinfo);
  651. if (reg_val & MADMA_EN)
  652. priv->controller_flags |= OMAP_HSMMC_USE_ADMA;
  653. #endif
  654. #if CONFIG_IS_ENABLED(DM_MMC)
  655. reg_val = omap_hsmmc_set_capabilities(mmc);
  656. omap_hsmmc_conf_bus_power(mmc, (reg_val & VS30_3V0SUP) ?
  657. MMC_SIGNAL_VOLTAGE_330 : MMC_SIGNAL_VOLTAGE_180);
  658. #else
  659. writel(DTW_1_BITMODE | SDBP_PWROFF | SDVS_3V0, &mmc_base->hctl);
  660. writel(readl(&mmc_base->capa) | VS30_3V0SUP | VS18_1V8SUP,
  661. &mmc_base->capa);
  662. #endif
  663. reg_val = readl(&mmc_base->con) & RESERVED_MASK;
  664. writel(CTPL_MMC_SD | reg_val | WPP_ACTIVEHIGH | CDP_ACTIVEHIGH |
  665. MIT_CTO | DW8_1_4BITMODE | MODE_FUNC | STR_BLOCK |
  666. HR_NOHOSTRESP | INIT_NOINIT | NOOPENDRAIN, &mmc_base->con);
  667. dsor = 240;
  668. mmc_reg_out(&mmc_base->sysctl, (ICE_MASK | DTO_MASK | CEN_MASK),
  669. (ICE_STOP | DTO_15THDTO));
  670. mmc_reg_out(&mmc_base->sysctl, ICE_MASK | CLKD_MASK,
  671. (dsor << CLKD_OFFSET) | ICE_OSCILLATE);
  672. start = get_timer(0);
  673. while ((readl(&mmc_base->sysctl) & ICS_MASK) == ICS_NOTREADY) {
  674. if (get_timer(0) - start > MAX_RETRY_MS) {
  675. printf("%s: timedout waiting for ics!\n", __func__);
  676. return -ETIMEDOUT;
  677. }
  678. }
  679. writel(readl(&mmc_base->sysctl) | CEN_ENABLE, &mmc_base->sysctl);
  680. writel(readl(&mmc_base->hctl) | SDBP_PWRON, &mmc_base->hctl);
  681. mmc_enable_irq(mmc, NULL);
  682. #if !CONFIG_IS_ENABLED(DM_MMC)
  683. mmc_init_stream(mmc_base);
  684. #endif
  685. return 0;
  686. }
  687. /*
  688. * MMC controller internal finite state machine reset
  689. *
  690. * Used to reset command or data internal state machines, using respectively
  691. * SRC or SRD bit of SYSCTL register
  692. */
  693. static void mmc_reset_controller_fsm(struct hsmmc *mmc_base, u32 bit)
  694. {
  695. ulong start;
  696. mmc_reg_out(&mmc_base->sysctl, bit, bit);
  697. /*
  698. * CMD(DAT) lines reset procedures are slightly different
  699. * for OMAP3 and OMAP4(AM335x,OMAP5,DRA7xx).
  700. * According to OMAP3 TRM:
  701. * Set SRC(SRD) bit in MMCHS_SYSCTL register to 0x1 and wait until it
  702. * returns to 0x0.
  703. * According to OMAP4(AM335x,OMAP5,DRA7xx) TRMs, CMD(DATA) lines reset
  704. * procedure steps must be as follows:
  705. * 1. Initiate CMD(DAT) line reset by writing 0x1 to SRC(SRD) bit in
  706. * MMCHS_SYSCTL register (SD_SYSCTL for AM335x).
  707. * 2. Poll the SRC(SRD) bit until it is set to 0x1.
  708. * 3. Wait until the SRC (SRD) bit returns to 0x0
  709. * (reset procedure is completed).
  710. */
  711. #if defined(CONFIG_OMAP44XX) || defined(CONFIG_OMAP54XX) || \
  712. defined(CONFIG_AM33XX) || defined(CONFIG_AM43XX)
  713. if (!(readl(&mmc_base->sysctl) & bit)) {
  714. start = get_timer(0);
  715. while (!(readl(&mmc_base->sysctl) & bit)) {
  716. if (get_timer(0) - start > MMC_TIMEOUT_MS)
  717. return;
  718. }
  719. }
  720. #endif
  721. start = get_timer(0);
  722. while ((readl(&mmc_base->sysctl) & bit) != 0) {
  723. if (get_timer(0) - start > MAX_RETRY_MS) {
  724. printf("%s: timedout waiting for sysctl %x to clear\n",
  725. __func__, bit);
  726. return;
  727. }
  728. }
  729. }
  730. #ifdef CONFIG_MMC_OMAP_HS_ADMA
  731. static void omap_hsmmc_adma_desc(struct mmc *mmc, char *buf, u16 len, bool end)
  732. {
  733. struct omap_hsmmc_data *priv = omap_hsmmc_get_data(mmc);
  734. struct omap_hsmmc_adma_desc *desc;
  735. u8 attr;
  736. desc = &priv->adma_desc_table[priv->desc_slot];
  737. attr = ADMA_DESC_ATTR_VALID | ADMA_DESC_TRANSFER_DATA;
  738. if (!end)
  739. priv->desc_slot++;
  740. else
  741. attr |= ADMA_DESC_ATTR_END;
  742. desc->len = len;
  743. desc->addr = (u32)buf;
  744. desc->reserved = 0;
  745. desc->attr = attr;
  746. }
  747. static void omap_hsmmc_prepare_adma_table(struct mmc *mmc,
  748. struct mmc_data *data)
  749. {
  750. uint total_len = data->blocksize * data->blocks;
  751. uint desc_count = DIV_ROUND_UP(total_len, ADMA_MAX_LEN);
  752. struct omap_hsmmc_data *priv = omap_hsmmc_get_data(mmc);
  753. int i = desc_count;
  754. char *buf;
  755. priv->desc_slot = 0;
  756. priv->adma_desc_table = (struct omap_hsmmc_adma_desc *)
  757. memalign(ARCH_DMA_MINALIGN, desc_count *
  758. sizeof(struct omap_hsmmc_adma_desc));
  759. if (data->flags & MMC_DATA_READ)
  760. buf = data->dest;
  761. else
  762. buf = (char *)data->src;
  763. while (--i) {
  764. omap_hsmmc_adma_desc(mmc, buf, ADMA_MAX_LEN, false);
  765. buf += ADMA_MAX_LEN;
  766. total_len -= ADMA_MAX_LEN;
  767. }
  768. omap_hsmmc_adma_desc(mmc, buf, total_len, true);
  769. flush_dcache_range((long)priv->adma_desc_table,
  770. (long)priv->adma_desc_table +
  771. ROUND(desc_count *
  772. sizeof(struct omap_hsmmc_adma_desc),
  773. ARCH_DMA_MINALIGN));
  774. }
  775. static void omap_hsmmc_prepare_data(struct mmc *mmc, struct mmc_data *data)
  776. {
  777. struct hsmmc *mmc_base;
  778. struct omap_hsmmc_data *priv = omap_hsmmc_get_data(mmc);
  779. u32 val;
  780. char *buf;
  781. mmc_base = priv->base_addr;
  782. omap_hsmmc_prepare_adma_table(mmc, data);
  783. if (data->flags & MMC_DATA_READ)
  784. buf = data->dest;
  785. else
  786. buf = (char *)data->src;
  787. val = readl(&mmc_base->hctl);
  788. val |= DMA_SELECT;
  789. writel(val, &mmc_base->hctl);
  790. val = readl(&mmc_base->con);
  791. val |= DMA_MASTER;
  792. writel(val, &mmc_base->con);
  793. writel((u32)priv->adma_desc_table, &mmc_base->admasal);
  794. flush_dcache_range((u32)buf,
  795. (u32)buf +
  796. ROUND(data->blocksize * data->blocks,
  797. ARCH_DMA_MINALIGN));
  798. }
  799. static void omap_hsmmc_dma_cleanup(struct mmc *mmc)
  800. {
  801. struct hsmmc *mmc_base;
  802. struct omap_hsmmc_data *priv = omap_hsmmc_get_data(mmc);
  803. u32 val;
  804. mmc_base = priv->base_addr;
  805. val = readl(&mmc_base->con);
  806. val &= ~DMA_MASTER;
  807. writel(val, &mmc_base->con);
  808. val = readl(&mmc_base->hctl);
  809. val &= ~DMA_SELECT;
  810. writel(val, &mmc_base->hctl);
  811. kfree(priv->adma_desc_table);
  812. }
  813. #else
  814. #define omap_hsmmc_adma_desc
  815. #define omap_hsmmc_prepare_adma_table
  816. #define omap_hsmmc_prepare_data
  817. #define omap_hsmmc_dma_cleanup
  818. #endif
  819. #if !CONFIG_IS_ENABLED(DM_MMC)
  820. static int omap_hsmmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
  821. struct mmc_data *data)
  822. {
  823. struct omap_hsmmc_data *priv = omap_hsmmc_get_data(mmc);
  824. #else
  825. static int omap_hsmmc_send_cmd(struct udevice *dev, struct mmc_cmd *cmd,
  826. struct mmc_data *data)
  827. {
  828. struct omap_hsmmc_data *priv = dev_get_priv(dev);
  829. struct mmc_uclass_priv *upriv = dev_get_uclass_priv(dev);
  830. struct mmc *mmc = upriv->mmc;
  831. #endif
  832. struct hsmmc *mmc_base;
  833. unsigned int flags, mmc_stat;
  834. ulong start;
  835. priv->last_cmd = cmd->cmdidx;
  836. mmc_base = priv->base_addr;
  837. if (cmd->cmdidx == MMC_CMD_STOP_TRANSMISSION)
  838. return 0;
  839. start = get_timer(0);
  840. while ((readl(&mmc_base->pstate) & (DATI_MASK | CMDI_MASK)) != 0) {
  841. if (get_timer(0) - start > MAX_RETRY_MS) {
  842. printf("%s: timedout waiting on cmd inhibit to clear\n",
  843. __func__);
  844. return -ETIMEDOUT;
  845. }
  846. }
  847. writel(0xFFFFFFFF, &mmc_base->stat);
  848. start = get_timer(0);
  849. while (readl(&mmc_base->stat)) {
  850. if (get_timer(0) - start > MAX_RETRY_MS) {
  851. printf("%s: timedout waiting for STAT (%x) to clear\n",
  852. __func__, readl(&mmc_base->stat));
  853. return -ETIMEDOUT;
  854. }
  855. }
  856. /*
  857. * CMDREG
  858. * CMDIDX[13:8] : Command index
  859. * DATAPRNT[5] : Data Present Select
  860. * ENCMDIDX[4] : Command Index Check Enable
  861. * ENCMDCRC[3] : Command CRC Check Enable
  862. * RSPTYP[1:0]
  863. * 00 = No Response
  864. * 01 = Length 136
  865. * 10 = Length 48
  866. * 11 = Length 48 Check busy after response
  867. */
  868. /* Delay added before checking the status of frq change
  869. * retry not supported by mmc.c(core file)
  870. */
  871. if (cmd->cmdidx == SD_CMD_APP_SEND_SCR)
  872. udelay(50000); /* wait 50 ms */
  873. if (!(cmd->resp_type & MMC_RSP_PRESENT))
  874. flags = 0;
  875. else if (cmd->resp_type & MMC_RSP_136)
  876. flags = RSP_TYPE_LGHT136 | CICE_NOCHECK;
  877. else if (cmd->resp_type & MMC_RSP_BUSY)
  878. flags = RSP_TYPE_LGHT48B;
  879. else
  880. flags = RSP_TYPE_LGHT48;
  881. /* enable default flags */
  882. flags = flags | (CMD_TYPE_NORMAL | CICE_NOCHECK | CCCE_NOCHECK |
  883. MSBS_SGLEBLK);
  884. flags &= ~(ACEN_ENABLE | BCE_ENABLE | DE_ENABLE);
  885. if (cmd->resp_type & MMC_RSP_CRC)
  886. flags |= CCCE_CHECK;
  887. if (cmd->resp_type & MMC_RSP_OPCODE)
  888. flags |= CICE_CHECK;
  889. if (data) {
  890. if ((cmd->cmdidx == MMC_CMD_READ_MULTIPLE_BLOCK) ||
  891. (cmd->cmdidx == MMC_CMD_WRITE_MULTIPLE_BLOCK)) {
  892. flags |= (MSBS_MULTIBLK | BCE_ENABLE | ACEN_ENABLE);
  893. data->blocksize = 512;
  894. writel(data->blocksize | (data->blocks << 16),
  895. &mmc_base->blk);
  896. } else
  897. writel(data->blocksize | NBLK_STPCNT, &mmc_base->blk);
  898. if (data->flags & MMC_DATA_READ)
  899. flags |= (DP_DATA | DDIR_READ);
  900. else
  901. flags |= (DP_DATA | DDIR_WRITE);
  902. #ifdef CONFIG_MMC_OMAP_HS_ADMA
  903. if ((priv->controller_flags & OMAP_HSMMC_USE_ADMA) &&
  904. !mmc_is_tuning_cmd(cmd->cmdidx)) {
  905. omap_hsmmc_prepare_data(mmc, data);
  906. flags |= DE_ENABLE;
  907. }
  908. #endif
  909. }
  910. mmc_enable_irq(mmc, cmd);
  911. writel(cmd->cmdarg, &mmc_base->arg);
  912. udelay(20); /* To fix "No status update" error on eMMC */
  913. writel((cmd->cmdidx << 24) | flags, &mmc_base->cmd);
  914. start = get_timer(0);
  915. do {
  916. mmc_stat = readl(&mmc_base->stat);
  917. if (get_timer(start) > MAX_RETRY_MS) {
  918. printf("%s : timeout: No status update\n", __func__);
  919. return -ETIMEDOUT;
  920. }
  921. } while (!mmc_stat);
  922. if ((mmc_stat & IE_CTO) != 0) {
  923. mmc_reset_controller_fsm(mmc_base, SYSCTL_SRC);
  924. return -ETIMEDOUT;
  925. } else if ((mmc_stat & ERRI_MASK) != 0)
  926. return -1;
  927. if (mmc_stat & CC_MASK) {
  928. writel(CC_MASK, &mmc_base->stat);
  929. if (cmd->resp_type & MMC_RSP_PRESENT) {
  930. if (cmd->resp_type & MMC_RSP_136) {
  931. /* response type 2 */
  932. cmd->response[3] = readl(&mmc_base->rsp10);
  933. cmd->response[2] = readl(&mmc_base->rsp32);
  934. cmd->response[1] = readl(&mmc_base->rsp54);
  935. cmd->response[0] = readl(&mmc_base->rsp76);
  936. } else
  937. /* response types 1, 1b, 3, 4, 5, 6 */
  938. cmd->response[0] = readl(&mmc_base->rsp10);
  939. }
  940. }
  941. #ifdef CONFIG_MMC_OMAP_HS_ADMA
  942. if ((priv->controller_flags & OMAP_HSMMC_USE_ADMA) && data &&
  943. !mmc_is_tuning_cmd(cmd->cmdidx)) {
  944. u32 sz_mb, timeout;
  945. if (mmc_stat & IE_ADMAE) {
  946. omap_hsmmc_dma_cleanup(mmc);
  947. return -EIO;
  948. }
  949. sz_mb = DIV_ROUND_UP(data->blocksize * data->blocks, 1 << 20);
  950. timeout = sz_mb * DMA_TIMEOUT_PER_MB;
  951. if (timeout < MAX_RETRY_MS)
  952. timeout = MAX_RETRY_MS;
  953. start = get_timer(0);
  954. do {
  955. mmc_stat = readl(&mmc_base->stat);
  956. if (mmc_stat & TC_MASK) {
  957. writel(readl(&mmc_base->stat) | TC_MASK,
  958. &mmc_base->stat);
  959. break;
  960. }
  961. if (get_timer(start) > timeout) {
  962. printf("%s : DMA timeout: No status update\n",
  963. __func__);
  964. return -ETIMEDOUT;
  965. }
  966. } while (1);
  967. omap_hsmmc_dma_cleanup(mmc);
  968. return 0;
  969. }
  970. #endif
  971. if (data && (data->flags & MMC_DATA_READ)) {
  972. mmc_read_data(mmc_base, data->dest,
  973. data->blocksize * data->blocks);
  974. } else if (data && (data->flags & MMC_DATA_WRITE)) {
  975. mmc_write_data(mmc_base, data->src,
  976. data->blocksize * data->blocks);
  977. }
  978. return 0;
  979. }
  980. static int mmc_read_data(struct hsmmc *mmc_base, char *buf, unsigned int size)
  981. {
  982. unsigned int *output_buf = (unsigned int *)buf;
  983. unsigned int mmc_stat;
  984. unsigned int count;
  985. /*
  986. * Start Polled Read
  987. */
  988. count = (size > MMCSD_SECTOR_SIZE) ? MMCSD_SECTOR_SIZE : size;
  989. count /= 4;
  990. while (size) {
  991. ulong start = get_timer(0);
  992. do {
  993. mmc_stat = readl(&mmc_base->stat);
  994. if (get_timer(0) - start > MAX_RETRY_MS) {
  995. printf("%s: timedout waiting for status!\n",
  996. __func__);
  997. return -ETIMEDOUT;
  998. }
  999. } while (mmc_stat == 0);
  1000. if ((mmc_stat & (IE_DTO | IE_DCRC | IE_DEB)) != 0)
  1001. mmc_reset_controller_fsm(mmc_base, SYSCTL_SRD);
  1002. if ((mmc_stat & ERRI_MASK) != 0)
  1003. return 1;
  1004. if (mmc_stat & BRR_MASK) {
  1005. unsigned int k;
  1006. writel(readl(&mmc_base->stat) | BRR_MASK,
  1007. &mmc_base->stat);
  1008. for (k = 0; k < count; k++) {
  1009. *output_buf = readl(&mmc_base->data);
  1010. output_buf++;
  1011. }
  1012. size -= (count*4);
  1013. }
  1014. if (mmc_stat & BWR_MASK)
  1015. writel(readl(&mmc_base->stat) | BWR_MASK,
  1016. &mmc_base->stat);
  1017. if (mmc_stat & TC_MASK) {
  1018. writel(readl(&mmc_base->stat) | TC_MASK,
  1019. &mmc_base->stat);
  1020. break;
  1021. }
  1022. }
  1023. return 0;
  1024. }
  1025. #if CONFIG_IS_ENABLED(MMC_WRITE)
  1026. static int mmc_write_data(struct hsmmc *mmc_base, const char *buf,
  1027. unsigned int size)
  1028. {
  1029. unsigned int *input_buf = (unsigned int *)buf;
  1030. unsigned int mmc_stat;
  1031. unsigned int count;
  1032. /*
  1033. * Start Polled Write
  1034. */
  1035. count = (size > MMCSD_SECTOR_SIZE) ? MMCSD_SECTOR_SIZE : size;
  1036. count /= 4;
  1037. while (size) {
  1038. ulong start = get_timer(0);
  1039. do {
  1040. mmc_stat = readl(&mmc_base->stat);
  1041. if (get_timer(0) - start > MAX_RETRY_MS) {
  1042. printf("%s: timedout waiting for status!\n",
  1043. __func__);
  1044. return -ETIMEDOUT;
  1045. }
  1046. } while (mmc_stat == 0);
  1047. if ((mmc_stat & (IE_DTO | IE_DCRC | IE_DEB)) != 0)
  1048. mmc_reset_controller_fsm(mmc_base, SYSCTL_SRD);
  1049. if ((mmc_stat & ERRI_MASK) != 0)
  1050. return 1;
  1051. if (mmc_stat & BWR_MASK) {
  1052. unsigned int k;
  1053. writel(readl(&mmc_base->stat) | BWR_MASK,
  1054. &mmc_base->stat);
  1055. for (k = 0; k < count; k++) {
  1056. writel(*input_buf, &mmc_base->data);
  1057. input_buf++;
  1058. }
  1059. size -= (count*4);
  1060. }
  1061. if (mmc_stat & BRR_MASK)
  1062. writel(readl(&mmc_base->stat) | BRR_MASK,
  1063. &mmc_base->stat);
  1064. if (mmc_stat & TC_MASK) {
  1065. writel(readl(&mmc_base->stat) | TC_MASK,
  1066. &mmc_base->stat);
  1067. break;
  1068. }
  1069. }
  1070. return 0;
  1071. }
  1072. #else
  1073. static int mmc_write_data(struct hsmmc *mmc_base, const char *buf,
  1074. unsigned int size)
  1075. {
  1076. return -ENOTSUPP;
  1077. }
  1078. #endif
  1079. static void omap_hsmmc_stop_clock(struct hsmmc *mmc_base)
  1080. {
  1081. writel(readl(&mmc_base->sysctl) & ~CEN_ENABLE, &mmc_base->sysctl);
  1082. }
  1083. static void omap_hsmmc_start_clock(struct hsmmc *mmc_base)
  1084. {
  1085. writel(readl(&mmc_base->sysctl) | CEN_ENABLE, &mmc_base->sysctl);
  1086. }
  1087. static void omap_hsmmc_set_clock(struct mmc *mmc)
  1088. {
  1089. struct omap_hsmmc_data *priv = omap_hsmmc_get_data(mmc);
  1090. struct hsmmc *mmc_base;
  1091. unsigned int dsor = 0;
  1092. ulong start;
  1093. mmc_base = priv->base_addr;
  1094. omap_hsmmc_stop_clock(mmc_base);
  1095. /* TODO: Is setting DTO required here? */
  1096. mmc_reg_out(&mmc_base->sysctl, (ICE_MASK | DTO_MASK),
  1097. (ICE_STOP | DTO_15THDTO));
  1098. if (mmc->clock != 0) {
  1099. dsor = DIV_ROUND_UP(MMC_CLOCK_REFERENCE * 1000000, mmc->clock);
  1100. if (dsor > CLKD_MAX)
  1101. dsor = CLKD_MAX;
  1102. } else {
  1103. dsor = CLKD_MAX;
  1104. }
  1105. mmc_reg_out(&mmc_base->sysctl, ICE_MASK | CLKD_MASK,
  1106. (dsor << CLKD_OFFSET) | ICE_OSCILLATE);
  1107. start = get_timer(0);
  1108. while ((readl(&mmc_base->sysctl) & ICS_MASK) == ICS_NOTREADY) {
  1109. if (get_timer(0) - start > MAX_RETRY_MS) {
  1110. printf("%s: timedout waiting for ics!\n", __func__);
  1111. return;
  1112. }
  1113. }
  1114. priv->clock = MMC_CLOCK_REFERENCE * 1000000 / dsor;
  1115. mmc->clock = priv->clock;
  1116. omap_hsmmc_start_clock(mmc_base);
  1117. }
  1118. static void omap_hsmmc_set_bus_width(struct mmc *mmc)
  1119. {
  1120. struct omap_hsmmc_data *priv = omap_hsmmc_get_data(mmc);
  1121. struct hsmmc *mmc_base;
  1122. mmc_base = priv->base_addr;
  1123. /* configue bus width */
  1124. switch (mmc->bus_width) {
  1125. case 8:
  1126. writel(readl(&mmc_base->con) | DTW_8_BITMODE,
  1127. &mmc_base->con);
  1128. break;
  1129. case 4:
  1130. writel(readl(&mmc_base->con) & ~DTW_8_BITMODE,
  1131. &mmc_base->con);
  1132. writel(readl(&mmc_base->hctl) | DTW_4_BITMODE,
  1133. &mmc_base->hctl);
  1134. break;
  1135. case 1:
  1136. default:
  1137. writel(readl(&mmc_base->con) & ~DTW_8_BITMODE,
  1138. &mmc_base->con);
  1139. writel(readl(&mmc_base->hctl) & ~DTW_4_BITMODE,
  1140. &mmc_base->hctl);
  1141. break;
  1142. }
  1143. priv->bus_width = mmc->bus_width;
  1144. }
  1145. #if !CONFIG_IS_ENABLED(DM_MMC)
  1146. static int omap_hsmmc_set_ios(struct mmc *mmc)
  1147. {
  1148. struct omap_hsmmc_data *priv = omap_hsmmc_get_data(mmc);
  1149. #else
  1150. static int omap_hsmmc_set_ios(struct udevice *dev)
  1151. {
  1152. struct omap_hsmmc_data *priv = dev_get_priv(dev);
  1153. struct mmc_uclass_priv *upriv = dev_get_uclass_priv(dev);
  1154. struct mmc *mmc = upriv->mmc;
  1155. #endif
  1156. struct hsmmc *mmc_base = priv->base_addr;
  1157. int ret = 0;
  1158. if (priv->bus_width != mmc->bus_width)
  1159. omap_hsmmc_set_bus_width(mmc);
  1160. if (priv->clock != mmc->clock)
  1161. omap_hsmmc_set_clock(mmc);
  1162. if (mmc->clk_disable)
  1163. omap_hsmmc_stop_clock(mmc_base);
  1164. else
  1165. omap_hsmmc_start_clock(mmc_base);
  1166. #if CONFIG_IS_ENABLED(DM_MMC)
  1167. if (priv->mode != mmc->selected_mode)
  1168. omap_hsmmc_set_timing(mmc);
  1169. #if CONFIG_IS_ENABLED(MMC_IO_VOLTAGE)
  1170. if (priv->signal_voltage != mmc->signal_voltage)
  1171. ret = omap_hsmmc_set_signal_voltage(mmc);
  1172. #endif
  1173. #endif
  1174. return ret;
  1175. }
  1176. #ifdef OMAP_HSMMC_USE_GPIO
  1177. #if CONFIG_IS_ENABLED(DM_MMC)
  1178. static int omap_hsmmc_getcd(struct udevice *dev)
  1179. {
  1180. struct omap_hsmmc_data *priv = dev_get_priv(dev);
  1181. int value = -1;
  1182. #if CONFIG_IS_ENABLED(DM_GPIO)
  1183. value = dm_gpio_get_value(&priv->cd_gpio);
  1184. #endif
  1185. /* if no CD return as 1 */
  1186. if (value < 0)
  1187. return 1;
  1188. if (priv->cd_inverted)
  1189. return !value;
  1190. return value;
  1191. }
  1192. static int omap_hsmmc_getwp(struct udevice *dev)
  1193. {
  1194. int value = 0;
  1195. #if CONFIG_IS_ENABLED(DM_GPIO)
  1196. struct omap_hsmmc_data *priv = dev_get_priv(dev);
  1197. value = dm_gpio_get_value(&priv->wp_gpio);
  1198. #endif
  1199. /* if no WP return as 0 */
  1200. if (value < 0)
  1201. return 0;
  1202. return value;
  1203. }
  1204. #else
  1205. static int omap_hsmmc_getcd(struct mmc *mmc)
  1206. {
  1207. struct omap_hsmmc_data *priv = omap_hsmmc_get_data(mmc);
  1208. int cd_gpio;
  1209. /* if no CD return as 1 */
  1210. cd_gpio = priv->cd_gpio;
  1211. if (cd_gpio < 0)
  1212. return 1;
  1213. /* NOTE: assumes card detect signal is active-low */
  1214. return !gpio_get_value(cd_gpio);
  1215. }
  1216. static int omap_hsmmc_getwp(struct mmc *mmc)
  1217. {
  1218. struct omap_hsmmc_data *priv = omap_hsmmc_get_data(mmc);
  1219. int wp_gpio;
  1220. /* if no WP return as 0 */
  1221. wp_gpio = priv->wp_gpio;
  1222. if (wp_gpio < 0)
  1223. return 0;
  1224. /* NOTE: assumes write protect signal is active-high */
  1225. return gpio_get_value(wp_gpio);
  1226. }
  1227. #endif
  1228. #endif
  1229. #if CONFIG_IS_ENABLED(DM_MMC)
  1230. static const struct dm_mmc_ops omap_hsmmc_ops = {
  1231. .send_cmd = omap_hsmmc_send_cmd,
  1232. .set_ios = omap_hsmmc_set_ios,
  1233. #ifdef OMAP_HSMMC_USE_GPIO
  1234. .get_cd = omap_hsmmc_getcd,
  1235. .get_wp = omap_hsmmc_getwp,
  1236. #endif
  1237. #ifdef MMC_SUPPORTS_TUNING
  1238. .execute_tuning = omap_hsmmc_execute_tuning,
  1239. #endif
  1240. .send_init_stream = omap_hsmmc_send_init_stream,
  1241. #if CONFIG_IS_ENABLED(MMC_UHS_SUPPORT)
  1242. .wait_dat0 = omap_hsmmc_wait_dat0,
  1243. #endif
  1244. };
  1245. #else
  1246. static const struct mmc_ops omap_hsmmc_ops = {
  1247. .send_cmd = omap_hsmmc_send_cmd,
  1248. .set_ios = omap_hsmmc_set_ios,
  1249. .init = omap_hsmmc_init_setup,
  1250. #ifdef OMAP_HSMMC_USE_GPIO
  1251. .getcd = omap_hsmmc_getcd,
  1252. .getwp = omap_hsmmc_getwp,
  1253. #endif
  1254. };
  1255. #endif
  1256. #if !CONFIG_IS_ENABLED(DM_MMC)
  1257. int omap_mmc_init(int dev_index, uint host_caps_mask, uint f_max, int cd_gpio,
  1258. int wp_gpio)
  1259. {
  1260. struct mmc *mmc;
  1261. struct omap_hsmmc_data *priv;
  1262. struct mmc_config *cfg;
  1263. uint host_caps_val;
  1264. priv = calloc(1, sizeof(*priv));
  1265. if (priv == NULL)
  1266. return -1;
  1267. host_caps_val = MMC_MODE_4BIT | MMC_MODE_HS_52MHz | MMC_MODE_HS;
  1268. switch (dev_index) {
  1269. case 0:
  1270. priv->base_addr = (struct hsmmc *)OMAP_HSMMC1_BASE;
  1271. break;
  1272. #ifdef OMAP_HSMMC2_BASE
  1273. case 1:
  1274. priv->base_addr = (struct hsmmc *)OMAP_HSMMC2_BASE;
  1275. #if (defined(CONFIG_OMAP44XX) || defined(CONFIG_OMAP54XX) || \
  1276. defined(CONFIG_DRA7XX) || defined(CONFIG_AM33XX) || \
  1277. defined(CONFIG_AM43XX) || defined(CONFIG_SOC_KEYSTONE)) && \
  1278. defined(CONFIG_HSMMC2_8BIT)
  1279. /* Enable 8-bit interface for eMMC on OMAP4/5 or DRA7XX */
  1280. host_caps_val |= MMC_MODE_8BIT;
  1281. #endif
  1282. break;
  1283. #endif
  1284. #ifdef OMAP_HSMMC3_BASE
  1285. case 2:
  1286. priv->base_addr = (struct hsmmc *)OMAP_HSMMC3_BASE;
  1287. #if defined(CONFIG_DRA7XX) && defined(CONFIG_HSMMC3_8BIT)
  1288. /* Enable 8-bit interface for eMMC on DRA7XX */
  1289. host_caps_val |= MMC_MODE_8BIT;
  1290. #endif
  1291. break;
  1292. #endif
  1293. default:
  1294. priv->base_addr = (struct hsmmc *)OMAP_HSMMC1_BASE;
  1295. return 1;
  1296. }
  1297. #ifdef OMAP_HSMMC_USE_GPIO
  1298. /* on error gpio values are set to -1, which is what we want */
  1299. priv->cd_gpio = omap_mmc_setup_gpio_in(cd_gpio, "mmc_cd");
  1300. priv->wp_gpio = omap_mmc_setup_gpio_in(wp_gpio, "mmc_wp");
  1301. #endif
  1302. cfg = &priv->cfg;
  1303. cfg->name = "OMAP SD/MMC";
  1304. cfg->ops = &omap_hsmmc_ops;
  1305. cfg->voltages = MMC_VDD_32_33 | MMC_VDD_33_34 | MMC_VDD_165_195;
  1306. cfg->host_caps = host_caps_val & ~host_caps_mask;
  1307. cfg->f_min = 400000;
  1308. if (f_max != 0)
  1309. cfg->f_max = f_max;
  1310. else {
  1311. if (cfg->host_caps & MMC_MODE_HS) {
  1312. if (cfg->host_caps & MMC_MODE_HS_52MHz)
  1313. cfg->f_max = 52000000;
  1314. else
  1315. cfg->f_max = 26000000;
  1316. } else
  1317. cfg->f_max = 20000000;
  1318. }
  1319. cfg->b_max = CONFIG_SYS_MMC_MAX_BLK_COUNT;
  1320. #if defined(CONFIG_OMAP34XX)
  1321. /*
  1322. * Silicon revs 2.1 and older do not support multiblock transfers.
  1323. */
  1324. if ((get_cpu_family() == CPU_OMAP34XX) && (get_cpu_rev() <= CPU_3XX_ES21))
  1325. cfg->b_max = 1;
  1326. #endif
  1327. mmc = mmc_create(cfg, priv);
  1328. if (mmc == NULL)
  1329. return -1;
  1330. return 0;
  1331. }
  1332. #else
  1333. #ifdef CONFIG_IODELAY_RECALIBRATION
  1334. static struct pad_conf_entry *
  1335. omap_hsmmc_get_pad_conf_entry(const fdt32_t *pinctrl, int count)
  1336. {
  1337. int index = 0;
  1338. struct pad_conf_entry *padconf;
  1339. padconf = (struct pad_conf_entry *)malloc(sizeof(*padconf) * count);
  1340. if (!padconf) {
  1341. debug("failed to allocate memory\n");
  1342. return 0;
  1343. }
  1344. while (index < count) {
  1345. padconf[index].offset = fdt32_to_cpu(pinctrl[2 * index]);
  1346. padconf[index].val = fdt32_to_cpu(pinctrl[2 * index + 1]);
  1347. index++;
  1348. }
  1349. return padconf;
  1350. }
  1351. static struct iodelay_cfg_entry *
  1352. omap_hsmmc_get_iodelay_cfg_entry(const fdt32_t *pinctrl, int count)
  1353. {
  1354. int index = 0;
  1355. struct iodelay_cfg_entry *iodelay;
  1356. iodelay = (struct iodelay_cfg_entry *)malloc(sizeof(*iodelay) * count);
  1357. if (!iodelay) {
  1358. debug("failed to allocate memory\n");
  1359. return 0;
  1360. }
  1361. while (index < count) {
  1362. iodelay[index].offset = fdt32_to_cpu(pinctrl[3 * index]);
  1363. iodelay[index].a_delay = fdt32_to_cpu(pinctrl[3 * index + 1]);
  1364. iodelay[index].g_delay = fdt32_to_cpu(pinctrl[3 * index + 2]);
  1365. index++;
  1366. }
  1367. return iodelay;
  1368. }
  1369. static const fdt32_t *omap_hsmmc_get_pinctrl_entry(u32 phandle,
  1370. const char *name, int *len)
  1371. {
  1372. const void *fdt = gd->fdt_blob;
  1373. int offset;
  1374. const fdt32_t *pinctrl;
  1375. offset = fdt_node_offset_by_phandle(fdt, phandle);
  1376. if (offset < 0) {
  1377. debug("failed to get pinctrl node %s.\n",
  1378. fdt_strerror(offset));
  1379. return 0;
  1380. }
  1381. pinctrl = fdt_getprop(fdt, offset, name, len);
  1382. if (!pinctrl) {
  1383. debug("failed to get property %s\n", name);
  1384. return 0;
  1385. }
  1386. return pinctrl;
  1387. }
  1388. static uint32_t omap_hsmmc_get_pad_conf_phandle(struct mmc *mmc,
  1389. char *prop_name)
  1390. {
  1391. const void *fdt = gd->fdt_blob;
  1392. const __be32 *phandle;
  1393. int node = dev_of_offset(mmc->dev);
  1394. phandle = fdt_getprop(fdt, node, prop_name, NULL);
  1395. if (!phandle) {
  1396. debug("failed to get property %s\n", prop_name);
  1397. return 0;
  1398. }
  1399. return fdt32_to_cpu(*phandle);
  1400. }
  1401. static uint32_t omap_hsmmc_get_iodelay_phandle(struct mmc *mmc,
  1402. char *prop_name)
  1403. {
  1404. const void *fdt = gd->fdt_blob;
  1405. const __be32 *phandle;
  1406. int len;
  1407. int count;
  1408. int node = dev_of_offset(mmc->dev);
  1409. phandle = fdt_getprop(fdt, node, prop_name, &len);
  1410. if (!phandle) {
  1411. debug("failed to get property %s\n", prop_name);
  1412. return 0;
  1413. }
  1414. /* No manual mode iodelay values if count < 2 */
  1415. count = len / sizeof(*phandle);
  1416. if (count < 2)
  1417. return 0;
  1418. return fdt32_to_cpu(*(phandle + 1));
  1419. }
  1420. static struct pad_conf_entry *
  1421. omap_hsmmc_get_pad_conf(struct mmc *mmc, char *prop_name, int *npads)
  1422. {
  1423. int len;
  1424. int count;
  1425. struct pad_conf_entry *padconf;
  1426. u32 phandle;
  1427. const fdt32_t *pinctrl;
  1428. phandle = omap_hsmmc_get_pad_conf_phandle(mmc, prop_name);
  1429. if (!phandle)
  1430. return ERR_PTR(-EINVAL);
  1431. pinctrl = omap_hsmmc_get_pinctrl_entry(phandle, "pinctrl-single,pins",
  1432. &len);
  1433. if (!pinctrl)
  1434. return ERR_PTR(-EINVAL);
  1435. count = (len / sizeof(*pinctrl)) / 2;
  1436. padconf = omap_hsmmc_get_pad_conf_entry(pinctrl, count);
  1437. if (!padconf)
  1438. return ERR_PTR(-EINVAL);
  1439. *npads = count;
  1440. return padconf;
  1441. }
  1442. static struct iodelay_cfg_entry *
  1443. omap_hsmmc_get_iodelay(struct mmc *mmc, char *prop_name, int *niodelay)
  1444. {
  1445. int len;
  1446. int count;
  1447. struct iodelay_cfg_entry *iodelay;
  1448. u32 phandle;
  1449. const fdt32_t *pinctrl;
  1450. phandle = omap_hsmmc_get_iodelay_phandle(mmc, prop_name);
  1451. /* Not all modes have manual mode iodelay values. So its not fatal */
  1452. if (!phandle)
  1453. return 0;
  1454. pinctrl = omap_hsmmc_get_pinctrl_entry(phandle, "pinctrl-pin-array",
  1455. &len);
  1456. if (!pinctrl)
  1457. return ERR_PTR(-EINVAL);
  1458. count = (len / sizeof(*pinctrl)) / 3;
  1459. iodelay = omap_hsmmc_get_iodelay_cfg_entry(pinctrl, count);
  1460. if (!iodelay)
  1461. return ERR_PTR(-EINVAL);
  1462. *niodelay = count;
  1463. return iodelay;
  1464. }
  1465. static struct omap_hsmmc_pinctrl_state *
  1466. omap_hsmmc_get_pinctrl_by_mode(struct mmc *mmc, char *mode)
  1467. {
  1468. int index;
  1469. int npads = 0;
  1470. int niodelays = 0;
  1471. const void *fdt = gd->fdt_blob;
  1472. int node = dev_of_offset(mmc->dev);
  1473. char prop_name[11];
  1474. struct omap_hsmmc_pinctrl_state *pinctrl_state;
  1475. pinctrl_state = (struct omap_hsmmc_pinctrl_state *)
  1476. malloc(sizeof(*pinctrl_state));
  1477. if (!pinctrl_state) {
  1478. debug("failed to allocate memory\n");
  1479. return 0;
  1480. }
  1481. index = fdt_stringlist_search(fdt, node, "pinctrl-names", mode);
  1482. if (index < 0) {
  1483. debug("fail to find %s mode %s\n", mode, fdt_strerror(index));
  1484. goto err_pinctrl_state;
  1485. }
  1486. sprintf(prop_name, "pinctrl-%d", index);
  1487. pinctrl_state->padconf = omap_hsmmc_get_pad_conf(mmc, prop_name,
  1488. &npads);
  1489. if (IS_ERR(pinctrl_state->padconf))
  1490. goto err_pinctrl_state;
  1491. pinctrl_state->npads = npads;
  1492. pinctrl_state->iodelay = omap_hsmmc_get_iodelay(mmc, prop_name,
  1493. &niodelays);
  1494. if (IS_ERR(pinctrl_state->iodelay))
  1495. goto err_padconf;
  1496. pinctrl_state->niodelays = niodelays;
  1497. return pinctrl_state;
  1498. err_padconf:
  1499. kfree(pinctrl_state->padconf);
  1500. err_pinctrl_state:
  1501. kfree(pinctrl_state);
  1502. return 0;
  1503. }
  1504. #define OMAP_HSMMC_SETUP_PINCTRL(capmask, mode, optional) \
  1505. do { \
  1506. struct omap_hsmmc_pinctrl_state *s = NULL; \
  1507. char str[20]; \
  1508. if (!(cfg->host_caps & capmask)) \
  1509. break; \
  1510. \
  1511. if (priv->hw_rev) { \
  1512. sprintf(str, "%s-%s", #mode, priv->hw_rev); \
  1513. s = omap_hsmmc_get_pinctrl_by_mode(mmc, str); \
  1514. } \
  1515. \
  1516. if (!s) \
  1517. s = omap_hsmmc_get_pinctrl_by_mode(mmc, #mode); \
  1518. \
  1519. if (!s && !optional) { \
  1520. debug("%s: no pinctrl for %s\n", \
  1521. mmc->dev->name, #mode); \
  1522. cfg->host_caps &= ~(capmask); \
  1523. } else { \
  1524. priv->mode##_pinctrl_state = s; \
  1525. } \
  1526. } while (0)
  1527. static int omap_hsmmc_get_pinctrl_state(struct mmc *mmc)
  1528. {
  1529. struct omap_hsmmc_data *priv = omap_hsmmc_get_data(mmc);
  1530. struct mmc_config *cfg = omap_hsmmc_get_cfg(mmc);
  1531. struct omap_hsmmc_pinctrl_state *default_pinctrl;
  1532. if (!(priv->controller_flags & OMAP_HSMMC_REQUIRE_IODELAY))
  1533. return 0;
  1534. default_pinctrl = omap_hsmmc_get_pinctrl_by_mode(mmc, "default");
  1535. if (!default_pinctrl) {
  1536. printf("no pinctrl state for default mode\n");
  1537. return -EINVAL;
  1538. }
  1539. priv->default_pinctrl_state = default_pinctrl;
  1540. OMAP_HSMMC_SETUP_PINCTRL(MMC_CAP(UHS_SDR104), sdr104, false);
  1541. OMAP_HSMMC_SETUP_PINCTRL(MMC_CAP(UHS_SDR50), sdr50, false);
  1542. OMAP_HSMMC_SETUP_PINCTRL(MMC_CAP(UHS_DDR50), ddr50, false);
  1543. OMAP_HSMMC_SETUP_PINCTRL(MMC_CAP(UHS_SDR25), sdr25, false);
  1544. OMAP_HSMMC_SETUP_PINCTRL(MMC_CAP(UHS_SDR12), sdr12, false);
  1545. OMAP_HSMMC_SETUP_PINCTRL(MMC_CAP(MMC_HS_200), hs200_1_8v, false);
  1546. OMAP_HSMMC_SETUP_PINCTRL(MMC_CAP(MMC_DDR_52), ddr_1_8v, false);
  1547. OMAP_HSMMC_SETUP_PINCTRL(MMC_MODE_HS, hs, true);
  1548. return 0;
  1549. }
  1550. #endif
  1551. #if CONFIG_IS_ENABLED(OF_CONTROL) && !CONFIG_IS_ENABLED(OF_PLATDATA)
  1552. #ifdef CONFIG_OMAP54XX
  1553. __weak const struct mmc_platform_fixups *platform_fixups_mmc(uint32_t addr)
  1554. {
  1555. return NULL;
  1556. }
  1557. #endif
  1558. static int omap_hsmmc_ofdata_to_platdata(struct udevice *dev)
  1559. {
  1560. struct omap_hsmmc_plat *plat = dev_get_platdata(dev);
  1561. struct omap_mmc_of_data *of_data = (void *)dev_get_driver_data(dev);
  1562. struct mmc_config *cfg = &plat->cfg;
  1563. #ifdef CONFIG_OMAP54XX
  1564. const struct mmc_platform_fixups *fixups;
  1565. #endif
  1566. const void *fdt = gd->fdt_blob;
  1567. int node = dev_of_offset(dev);
  1568. int ret;
  1569. plat->base_addr = map_physmem(devfdt_get_addr(dev),
  1570. sizeof(struct hsmmc *),
  1571. MAP_NOCACHE);
  1572. ret = mmc_of_parse(dev, cfg);
  1573. if (ret < 0)
  1574. return ret;
  1575. if (!cfg->f_max)
  1576. cfg->f_max = 52000000;
  1577. cfg->host_caps |= MMC_MODE_HS_52MHz | MMC_MODE_HS;
  1578. cfg->f_min = 400000;
  1579. cfg->voltages = MMC_VDD_32_33 | MMC_VDD_33_34 | MMC_VDD_165_195;
  1580. cfg->b_max = CONFIG_SYS_MMC_MAX_BLK_COUNT;
  1581. if (fdtdec_get_bool(fdt, node, "ti,dual-volt"))
  1582. plat->controller_flags |= OMAP_HSMMC_SUPPORTS_DUAL_VOLT;
  1583. if (fdtdec_get_bool(fdt, node, "no-1-8-v"))
  1584. plat->controller_flags |= OMAP_HSMMC_NO_1_8_V;
  1585. if (of_data)
  1586. plat->controller_flags |= of_data->controller_flags;
  1587. #ifdef CONFIG_OMAP54XX
  1588. fixups = platform_fixups_mmc(devfdt_get_addr(dev));
  1589. if (fixups) {
  1590. plat->hw_rev = fixups->hw_rev;
  1591. cfg->host_caps &= ~fixups->unsupported_caps;
  1592. cfg->f_max = fixups->max_freq;
  1593. }
  1594. #endif
  1595. #ifdef OMAP_HSMMC_USE_GPIO
  1596. plat->cd_inverted = fdtdec_get_bool(fdt, node, "cd-inverted");
  1597. #endif
  1598. return 0;
  1599. }
  1600. #endif
  1601. #ifdef CONFIG_BLK
  1602. static int omap_hsmmc_bind(struct udevice *dev)
  1603. {
  1604. struct omap_hsmmc_plat *plat = dev_get_platdata(dev);
  1605. plat->mmc = calloc(1, sizeof(struct mmc));
  1606. return mmc_bind(dev, plat->mmc, &plat->cfg);
  1607. }
  1608. #endif
  1609. static int omap_hsmmc_probe(struct udevice *dev)
  1610. {
  1611. struct omap_hsmmc_plat *plat = dev_get_platdata(dev);
  1612. struct mmc_uclass_priv *upriv = dev_get_uclass_priv(dev);
  1613. struct omap_hsmmc_data *priv = dev_get_priv(dev);
  1614. struct mmc_config *cfg = &plat->cfg;
  1615. struct mmc *mmc;
  1616. #ifdef CONFIG_IODELAY_RECALIBRATION
  1617. int ret;
  1618. #endif
  1619. cfg->name = "OMAP SD/MMC";
  1620. priv->base_addr = plat->base_addr;
  1621. priv->controller_flags = plat->controller_flags;
  1622. priv->hw_rev = plat->hw_rev;
  1623. #ifdef OMAP_HSMMC_USE_GPIO
  1624. priv->cd_inverted = plat->cd_inverted;
  1625. #endif
  1626. #ifdef CONFIG_BLK
  1627. mmc = plat->mmc;
  1628. #else
  1629. mmc = mmc_create(cfg, priv);
  1630. if (mmc == NULL)
  1631. return -1;
  1632. #endif
  1633. #if CONFIG_IS_ENABLED(DM_REGULATOR)
  1634. device_get_supply_regulator(dev, "pbias-supply",
  1635. &priv->pbias_supply);
  1636. #endif
  1637. #if defined(OMAP_HSMMC_USE_GPIO)
  1638. #if CONFIG_IS_ENABLED(OF_CONTROL) && CONFIG_IS_ENABLED(DM_GPIO)
  1639. gpio_request_by_name(dev, "cd-gpios", 0, &priv->cd_gpio, GPIOD_IS_IN);
  1640. gpio_request_by_name(dev, "wp-gpios", 0, &priv->wp_gpio, GPIOD_IS_IN);
  1641. #endif
  1642. #endif
  1643. mmc->dev = dev;
  1644. upriv->mmc = mmc;
  1645. #ifdef CONFIG_IODELAY_RECALIBRATION
  1646. ret = omap_hsmmc_get_pinctrl_state(mmc);
  1647. /*
  1648. * disable high speed modes for the platforms that require IO delay
  1649. * and for which we don't have this information
  1650. */
  1651. if ((ret < 0) &&
  1652. (priv->controller_flags & OMAP_HSMMC_REQUIRE_IODELAY)) {
  1653. priv->controller_flags &= ~OMAP_HSMMC_REQUIRE_IODELAY;
  1654. cfg->host_caps &= ~(MMC_CAP(MMC_HS_200) | MMC_CAP(MMC_DDR_52) |
  1655. UHS_CAPS);
  1656. }
  1657. #endif
  1658. return omap_hsmmc_init_setup(mmc);
  1659. }
  1660. #if CONFIG_IS_ENABLED(OF_CONTROL) && !CONFIG_IS_ENABLED(OF_PLATDATA)
  1661. static const struct omap_mmc_of_data dra7_mmc_of_data = {
  1662. .controller_flags = OMAP_HSMMC_REQUIRE_IODELAY,
  1663. };
  1664. static const struct udevice_id omap_hsmmc_ids[] = {
  1665. { .compatible = "ti,omap3-hsmmc" },
  1666. { .compatible = "ti,omap4-hsmmc" },
  1667. { .compatible = "ti,am33xx-hsmmc" },
  1668. { .compatible = "ti,dra7-hsmmc", .data = (ulong)&dra7_mmc_of_data },
  1669. { }
  1670. };
  1671. #endif
  1672. U_BOOT_DRIVER(omap_hsmmc) = {
  1673. .name = "omap_hsmmc",
  1674. .id = UCLASS_MMC,
  1675. #if CONFIG_IS_ENABLED(OF_CONTROL) && !CONFIG_IS_ENABLED(OF_PLATDATA)
  1676. .of_match = omap_hsmmc_ids,
  1677. .ofdata_to_platdata = omap_hsmmc_ofdata_to_platdata,
  1678. .platdata_auto_alloc_size = sizeof(struct omap_hsmmc_plat),
  1679. #endif
  1680. #ifdef CONFIG_BLK
  1681. .bind = omap_hsmmc_bind,
  1682. #endif
  1683. .ops = &omap_hsmmc_ops,
  1684. .probe = omap_hsmmc_probe,
  1685. .priv_auto_alloc_size = sizeof(struct omap_hsmmc_data),
  1686. .flags = DM_FLAG_PRE_RELOC,
  1687. };
  1688. #endif