fsl_esdhc.c 40 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613
  1. // SPDX-License-Identifier: GPL-2.0+
  2. /*
  3. * Copyright 2007, 2010-2011 Freescale Semiconductor, Inc
  4. * Andy Fleming
  5. *
  6. * Based vaguely on the pxa mmc code:
  7. * (C) Copyright 2003
  8. * Kyle Harris, Nexus Technologies, Inc. kharris@nexus-tech.net
  9. */
  10. #include <config.h>
  11. #include <common.h>
  12. #include <command.h>
  13. #include <clk.h>
  14. #include <errno.h>
  15. #include <hwconfig.h>
  16. #include <mmc.h>
  17. #include <part.h>
  18. #include <power/regulator.h>
  19. #include <malloc.h>
  20. #include <fsl_esdhc.h>
  21. #include <fdt_support.h>
  22. #include <asm/io.h>
  23. #include <dm.h>
  24. #include <asm-generic/gpio.h>
  25. #include <dm/pinctrl.h>
  26. DECLARE_GLOBAL_DATA_PTR;
  27. #define SDHCI_IRQ_EN_BITS (IRQSTATEN_CC | IRQSTATEN_TC | \
  28. IRQSTATEN_CINT | \
  29. IRQSTATEN_CTOE | IRQSTATEN_CCE | IRQSTATEN_CEBE | \
  30. IRQSTATEN_CIE | IRQSTATEN_DTOE | IRQSTATEN_DCE | \
  31. IRQSTATEN_DEBE | IRQSTATEN_BRR | IRQSTATEN_BWR | \
  32. IRQSTATEN_DINT)
  33. #define MAX_TUNING_LOOP 40
  34. struct fsl_esdhc {
  35. uint dsaddr; /* SDMA system address register */
  36. uint blkattr; /* Block attributes register */
  37. uint cmdarg; /* Command argument register */
  38. uint xfertyp; /* Transfer type register */
  39. uint cmdrsp0; /* Command response 0 register */
  40. uint cmdrsp1; /* Command response 1 register */
  41. uint cmdrsp2; /* Command response 2 register */
  42. uint cmdrsp3; /* Command response 3 register */
  43. uint datport; /* Buffer data port register */
  44. uint prsstat; /* Present state register */
  45. uint proctl; /* Protocol control register */
  46. uint sysctl; /* System Control Register */
  47. uint irqstat; /* Interrupt status register */
  48. uint irqstaten; /* Interrupt status enable register */
  49. uint irqsigen; /* Interrupt signal enable register */
  50. uint autoc12err; /* Auto CMD error status register */
  51. uint hostcapblt; /* Host controller capabilities register */
  52. uint wml; /* Watermark level register */
  53. uint mixctrl; /* For USDHC */
  54. char reserved1[4]; /* reserved */
  55. uint fevt; /* Force event register */
  56. uint admaes; /* ADMA error status register */
  57. uint adsaddr; /* ADMA system address register */
  58. char reserved2[4];
  59. uint dllctrl;
  60. uint dllstat;
  61. uint clktunectrlstatus;
  62. char reserved3[4];
  63. uint strobe_dllctrl;
  64. uint strobe_dllstat;
  65. char reserved4[72];
  66. uint vendorspec;
  67. uint mmcboot;
  68. uint vendorspec2;
  69. uint tuning_ctrl; /* on i.MX6/7/8 */
  70. char reserved5[44];
  71. uint hostver; /* Host controller version register */
  72. char reserved6[4]; /* reserved */
  73. uint dmaerraddr; /* DMA error address register */
  74. char reserved7[4]; /* reserved */
  75. uint dmaerrattr; /* DMA error attribute register */
  76. char reserved8[4]; /* reserved */
  77. uint hostcapblt2; /* Host controller capabilities register 2 */
  78. char reserved9[8]; /* reserved */
  79. uint tcr; /* Tuning control register */
  80. char reserved10[28]; /* reserved */
  81. uint sddirctl; /* SD direction control register */
  82. char reserved11[712];/* reserved */
  83. uint scr; /* eSDHC control register */
  84. };
  85. struct fsl_esdhc_plat {
  86. struct mmc_config cfg;
  87. struct mmc mmc;
  88. };
  89. struct esdhc_soc_data {
  90. u32 flags;
  91. u32 caps;
  92. };
  93. /**
  94. * struct fsl_esdhc_priv
  95. *
  96. * @esdhc_regs: registers of the sdhc controller
  97. * @sdhc_clk: Current clk of the sdhc controller
  98. * @bus_width: bus width, 1bit, 4bit or 8bit
  99. * @cfg: mmc config
  100. * @mmc: mmc
  101. * Following is used when Driver Model is enabled for MMC
  102. * @dev: pointer for the device
  103. * @non_removable: 0: removable; 1: non-removable
  104. * @wp_enable: 1: enable checking wp; 0: no check
  105. * @vs18_enable: 1: use 1.8V voltage; 0: use 3.3V
  106. * @flags: ESDHC_FLAG_xx in include/fsl_esdhc.h
  107. * @caps: controller capabilities
  108. * @tuning_step: tuning step setting in tuning_ctrl register
  109. * @start_tuning_tap: the start point for tuning in tuning_ctrl register
  110. * @strobe_dll_delay_target: settings in strobe_dllctrl
  111. * @signal_voltage: indicating the current voltage
  112. * @cd_gpio: gpio for card detection
  113. * @wp_gpio: gpio for write protection
  114. */
  115. struct fsl_esdhc_priv {
  116. struct fsl_esdhc *esdhc_regs;
  117. unsigned int sdhc_clk;
  118. struct clk per_clk;
  119. unsigned int clock;
  120. unsigned int mode;
  121. unsigned int bus_width;
  122. #if !CONFIG_IS_ENABLED(BLK)
  123. struct mmc *mmc;
  124. #endif
  125. struct udevice *dev;
  126. int non_removable;
  127. int wp_enable;
  128. int vs18_enable;
  129. u32 flags;
  130. u32 caps;
  131. u32 tuning_step;
  132. u32 tuning_start_tap;
  133. u32 strobe_dll_delay_target;
  134. u32 signal_voltage;
  135. #if IS_ENABLED(CONFIG_DM_REGULATOR)
  136. struct udevice *vqmmc_dev;
  137. struct udevice *vmmc_dev;
  138. #endif
  139. #ifdef CONFIG_DM_GPIO
  140. struct gpio_desc cd_gpio;
  141. struct gpio_desc wp_gpio;
  142. #endif
  143. };
  144. /* Return the XFERTYP flags for a given command and data packet */
  145. static uint esdhc_xfertyp(struct mmc_cmd *cmd, struct mmc_data *data)
  146. {
  147. uint xfertyp = 0;
  148. if (data) {
  149. xfertyp |= XFERTYP_DPSEL;
  150. #ifndef CONFIG_SYS_FSL_ESDHC_USE_PIO
  151. xfertyp |= XFERTYP_DMAEN;
  152. #endif
  153. if (data->blocks > 1) {
  154. xfertyp |= XFERTYP_MSBSEL;
  155. xfertyp |= XFERTYP_BCEN;
  156. #ifdef CONFIG_SYS_FSL_ERRATUM_ESDHC111
  157. xfertyp |= XFERTYP_AC12EN;
  158. #endif
  159. }
  160. if (data->flags & MMC_DATA_READ)
  161. xfertyp |= XFERTYP_DTDSEL;
  162. }
  163. if (cmd->resp_type & MMC_RSP_CRC)
  164. xfertyp |= XFERTYP_CCCEN;
  165. if (cmd->resp_type & MMC_RSP_OPCODE)
  166. xfertyp |= XFERTYP_CICEN;
  167. if (cmd->resp_type & MMC_RSP_136)
  168. xfertyp |= XFERTYP_RSPTYP_136;
  169. else if (cmd->resp_type & MMC_RSP_BUSY)
  170. xfertyp |= XFERTYP_RSPTYP_48_BUSY;
  171. else if (cmd->resp_type & MMC_RSP_PRESENT)
  172. xfertyp |= XFERTYP_RSPTYP_48;
  173. if (cmd->cmdidx == MMC_CMD_STOP_TRANSMISSION)
  174. xfertyp |= XFERTYP_CMDTYP_ABORT;
  175. return XFERTYP_CMD(cmd->cmdidx) | xfertyp;
  176. }
  177. #ifdef CONFIG_SYS_FSL_ESDHC_USE_PIO
  178. /*
  179. * PIO Read/Write Mode reduce the performace as DMA is not used in this mode.
  180. */
  181. static void esdhc_pio_read_write(struct fsl_esdhc_priv *priv,
  182. struct mmc_data *data)
  183. {
  184. struct fsl_esdhc *regs = priv->esdhc_regs;
  185. uint blocks;
  186. char *buffer;
  187. uint databuf;
  188. uint size;
  189. uint irqstat;
  190. ulong start;
  191. if (data->flags & MMC_DATA_READ) {
  192. blocks = data->blocks;
  193. buffer = data->dest;
  194. while (blocks) {
  195. start = get_timer(0);
  196. size = data->blocksize;
  197. irqstat = esdhc_read32(&regs->irqstat);
  198. while (!(esdhc_read32(&regs->prsstat) & PRSSTAT_BREN)) {
  199. if (get_timer(start) > PIO_TIMEOUT) {
  200. printf("\nData Read Failed in PIO Mode.");
  201. return;
  202. }
  203. }
  204. while (size && (!(irqstat & IRQSTAT_TC))) {
  205. udelay(100); /* Wait before last byte transfer complete */
  206. irqstat = esdhc_read32(&regs->irqstat);
  207. databuf = in_le32(&regs->datport);
  208. *((uint *)buffer) = databuf;
  209. buffer += 4;
  210. size -= 4;
  211. }
  212. blocks--;
  213. }
  214. } else {
  215. blocks = data->blocks;
  216. buffer = (char *)data->src;
  217. while (blocks) {
  218. start = get_timer(0);
  219. size = data->blocksize;
  220. irqstat = esdhc_read32(&regs->irqstat);
  221. while (!(esdhc_read32(&regs->prsstat) & PRSSTAT_BWEN)) {
  222. if (get_timer(start) > PIO_TIMEOUT) {
  223. printf("\nData Write Failed in PIO Mode.");
  224. return;
  225. }
  226. }
  227. while (size && (!(irqstat & IRQSTAT_TC))) {
  228. udelay(100); /* Wait before last byte transfer complete */
  229. databuf = *((uint *)buffer);
  230. buffer += 4;
  231. size -= 4;
  232. irqstat = esdhc_read32(&regs->irqstat);
  233. out_le32(&regs->datport, databuf);
  234. }
  235. blocks--;
  236. }
  237. }
  238. }
  239. #endif
  240. static int esdhc_setup_data(struct fsl_esdhc_priv *priv, struct mmc *mmc,
  241. struct mmc_data *data)
  242. {
  243. int timeout;
  244. struct fsl_esdhc *regs = priv->esdhc_regs;
  245. #if defined(CONFIG_FSL_LAYERSCAPE) || defined(CONFIG_S32V234) || \
  246. defined(CONFIG_IMX8) || defined(CONFIG_MX8M)
  247. dma_addr_t addr;
  248. #endif
  249. uint wml_value;
  250. wml_value = data->blocksize/4;
  251. if (data->flags & MMC_DATA_READ) {
  252. if (wml_value > WML_RD_WML_MAX)
  253. wml_value = WML_RD_WML_MAX_VAL;
  254. esdhc_clrsetbits32(&regs->wml, WML_RD_WML_MASK, wml_value);
  255. #ifndef CONFIG_SYS_FSL_ESDHC_USE_PIO
  256. #if defined(CONFIG_FSL_LAYERSCAPE) || defined(CONFIG_S32V234) || \
  257. defined(CONFIG_IMX8) || defined(CONFIG_MX8M)
  258. addr = virt_to_phys((void *)(data->dest));
  259. if (upper_32_bits(addr))
  260. printf("Error found for upper 32 bits\n");
  261. else
  262. esdhc_write32(&regs->dsaddr, lower_32_bits(addr));
  263. #else
  264. esdhc_write32(&regs->dsaddr, (u32)data->dest);
  265. #endif
  266. #endif
  267. } else {
  268. #ifndef CONFIG_SYS_FSL_ESDHC_USE_PIO
  269. flush_dcache_range((ulong)data->src,
  270. (ulong)data->src+data->blocks
  271. *data->blocksize);
  272. #endif
  273. if (wml_value > WML_WR_WML_MAX)
  274. wml_value = WML_WR_WML_MAX_VAL;
  275. if (priv->wp_enable) {
  276. if ((esdhc_read32(&regs->prsstat) &
  277. PRSSTAT_WPSPL) == 0) {
  278. printf("\nThe SD card is locked. Can not write to a locked card.\n\n");
  279. return -ETIMEDOUT;
  280. }
  281. }
  282. esdhc_clrsetbits32(&regs->wml, WML_WR_WML_MASK,
  283. wml_value << 16);
  284. #ifndef CONFIG_SYS_FSL_ESDHC_USE_PIO
  285. #if defined(CONFIG_FSL_LAYERSCAPE) || defined(CONFIG_S32V234) || \
  286. defined(CONFIG_IMX8) || defined(CONFIG_MX8M)
  287. addr = virt_to_phys((void *)(data->src));
  288. if (upper_32_bits(addr))
  289. printf("Error found for upper 32 bits\n");
  290. else
  291. esdhc_write32(&regs->dsaddr, lower_32_bits(addr));
  292. #else
  293. esdhc_write32(&regs->dsaddr, (u32)data->src);
  294. #endif
  295. #endif
  296. }
  297. esdhc_write32(&regs->blkattr, data->blocks << 16 | data->blocksize);
  298. /* Calculate the timeout period for data transactions */
  299. /*
  300. * 1)Timeout period = (2^(timeout+13)) SD Clock cycles
  301. * 2)Timeout period should be minimum 0.250sec as per SD Card spec
  302. * So, Number of SD Clock cycles for 0.25sec should be minimum
  303. * (SD Clock/sec * 0.25 sec) SD Clock cycles
  304. * = (mmc->clock * 1/4) SD Clock cycles
  305. * As 1) >= 2)
  306. * => (2^(timeout+13)) >= mmc->clock * 1/4
  307. * Taking log2 both the sides
  308. * => timeout + 13 >= log2(mmc->clock/4)
  309. * Rounding up to next power of 2
  310. * => timeout + 13 = log2(mmc->clock/4) + 1
  311. * => timeout + 13 = fls(mmc->clock/4)
  312. *
  313. * However, the MMC spec "It is strongly recommended for hosts to
  314. * implement more than 500ms timeout value even if the card
  315. * indicates the 250ms maximum busy length." Even the previous
  316. * value of 300ms is known to be insufficient for some cards.
  317. * So, we use
  318. * => timeout + 13 = fls(mmc->clock/2)
  319. */
  320. timeout = fls(mmc->clock/2);
  321. timeout -= 13;
  322. if (timeout > 14)
  323. timeout = 14;
  324. if (timeout < 0)
  325. timeout = 0;
  326. #ifdef CONFIG_SYS_FSL_ERRATUM_ESDHC_A001
  327. if ((timeout == 4) || (timeout == 8) || (timeout == 12))
  328. timeout++;
  329. #endif
  330. #ifdef ESDHCI_QUIRK_BROKEN_TIMEOUT_VALUE
  331. timeout = 0xE;
  332. #endif
  333. esdhc_clrsetbits32(&regs->sysctl, SYSCTL_TIMEOUT_MASK, timeout << 16);
  334. return 0;
  335. }
  336. static void check_and_invalidate_dcache_range
  337. (struct mmc_cmd *cmd,
  338. struct mmc_data *data) {
  339. unsigned start = 0;
  340. unsigned end = 0;
  341. unsigned size = roundup(ARCH_DMA_MINALIGN,
  342. data->blocks*data->blocksize);
  343. #if defined(CONFIG_FSL_LAYERSCAPE) || defined(CONFIG_S32V234) || \
  344. defined(CONFIG_IMX8) || defined(CONFIG_MX8M)
  345. dma_addr_t addr;
  346. addr = virt_to_phys((void *)(data->dest));
  347. if (upper_32_bits(addr))
  348. printf("Error found for upper 32 bits\n");
  349. else
  350. start = lower_32_bits(addr);
  351. #else
  352. start = (unsigned)data->dest;
  353. #endif
  354. end = start + size;
  355. invalidate_dcache_range(start, end);
  356. }
  357. /*
  358. * Sends a command out on the bus. Takes the mmc pointer,
  359. * a command pointer, and an optional data pointer.
  360. */
  361. static int esdhc_send_cmd_common(struct fsl_esdhc_priv *priv, struct mmc *mmc,
  362. struct mmc_cmd *cmd, struct mmc_data *data)
  363. {
  364. int err = 0;
  365. uint xfertyp;
  366. uint irqstat;
  367. u32 flags = IRQSTAT_CC | IRQSTAT_CTOE;
  368. struct fsl_esdhc *regs = priv->esdhc_regs;
  369. #ifdef CONFIG_SYS_FSL_ERRATUM_ESDHC111
  370. if (cmd->cmdidx == MMC_CMD_STOP_TRANSMISSION)
  371. return 0;
  372. #endif
  373. esdhc_write32(&regs->irqstat, -1);
  374. sync();
  375. /* Wait for the bus to be idle */
  376. while ((esdhc_read32(&regs->prsstat) & PRSSTAT_CICHB) ||
  377. (esdhc_read32(&regs->prsstat) & PRSSTAT_CIDHB))
  378. ;
  379. while (esdhc_read32(&regs->prsstat) & PRSSTAT_DLA)
  380. ;
  381. /* Wait at least 8 SD clock cycles before the next command */
  382. /*
  383. * Note: This is way more than 8 cycles, but 1ms seems to
  384. * resolve timing issues with some cards
  385. */
  386. udelay(1000);
  387. /* Set up for a data transfer if we have one */
  388. if (data) {
  389. err = esdhc_setup_data(priv, mmc, data);
  390. if(err)
  391. return err;
  392. if (data->flags & MMC_DATA_READ)
  393. check_and_invalidate_dcache_range(cmd, data);
  394. }
  395. /* Figure out the transfer arguments */
  396. xfertyp = esdhc_xfertyp(cmd, data);
  397. /* Mask all irqs */
  398. esdhc_write32(&regs->irqsigen, 0);
  399. /* Send the command */
  400. esdhc_write32(&regs->cmdarg, cmd->cmdarg);
  401. #if defined(CONFIG_FSL_USDHC)
  402. esdhc_write32(&regs->mixctrl,
  403. (esdhc_read32(&regs->mixctrl) & 0xFFFFFF80) | (xfertyp & 0x7F)
  404. | (mmc->ddr_mode ? XFERTYP_DDREN : 0));
  405. esdhc_write32(&regs->xfertyp, xfertyp & 0xFFFF0000);
  406. #else
  407. esdhc_write32(&regs->xfertyp, xfertyp);
  408. #endif
  409. if ((cmd->cmdidx == MMC_CMD_SEND_TUNING_BLOCK) ||
  410. (cmd->cmdidx == MMC_CMD_SEND_TUNING_BLOCK_HS200))
  411. flags = IRQSTAT_BRR;
  412. /* Wait for the command to complete */
  413. while (!(esdhc_read32(&regs->irqstat) & flags))
  414. ;
  415. irqstat = esdhc_read32(&regs->irqstat);
  416. if (irqstat & CMD_ERR) {
  417. err = -ECOMM;
  418. goto out;
  419. }
  420. if (irqstat & IRQSTAT_CTOE) {
  421. err = -ETIMEDOUT;
  422. goto out;
  423. }
  424. /* Switch voltage to 1.8V if CMD11 succeeded */
  425. if (cmd->cmdidx == SD_CMD_SWITCH_UHS18V) {
  426. esdhc_setbits32(&regs->vendorspec, ESDHC_VENDORSPEC_VSELECT);
  427. printf("Run CMD11 1.8V switch\n");
  428. /* Sleep for 5 ms - max time for card to switch to 1.8V */
  429. udelay(5000);
  430. }
  431. /* Workaround for ESDHC errata ENGcm03648 */
  432. if (!data && (cmd->resp_type & MMC_RSP_BUSY)) {
  433. int timeout = 6000;
  434. /* Poll on DATA0 line for cmd with busy signal for 600 ms */
  435. while (timeout > 0 && !(esdhc_read32(&regs->prsstat) &
  436. PRSSTAT_DAT0)) {
  437. udelay(100);
  438. timeout--;
  439. }
  440. if (timeout <= 0) {
  441. printf("Timeout waiting for DAT0 to go high!\n");
  442. err = -ETIMEDOUT;
  443. goto out;
  444. }
  445. }
  446. /* Copy the response to the response buffer */
  447. if (cmd->resp_type & MMC_RSP_136) {
  448. u32 cmdrsp3, cmdrsp2, cmdrsp1, cmdrsp0;
  449. cmdrsp3 = esdhc_read32(&regs->cmdrsp3);
  450. cmdrsp2 = esdhc_read32(&regs->cmdrsp2);
  451. cmdrsp1 = esdhc_read32(&regs->cmdrsp1);
  452. cmdrsp0 = esdhc_read32(&regs->cmdrsp0);
  453. cmd->response[0] = (cmdrsp3 << 8) | (cmdrsp2 >> 24);
  454. cmd->response[1] = (cmdrsp2 << 8) | (cmdrsp1 >> 24);
  455. cmd->response[2] = (cmdrsp1 << 8) | (cmdrsp0 >> 24);
  456. cmd->response[3] = (cmdrsp0 << 8);
  457. } else
  458. cmd->response[0] = esdhc_read32(&regs->cmdrsp0);
  459. /* Wait until all of the blocks are transferred */
  460. if (data) {
  461. #ifdef CONFIG_SYS_FSL_ESDHC_USE_PIO
  462. esdhc_pio_read_write(priv, data);
  463. #else
  464. flags = DATA_COMPLETE;
  465. if ((cmd->cmdidx == MMC_CMD_SEND_TUNING_BLOCK) ||
  466. (cmd->cmdidx == MMC_CMD_SEND_TUNING_BLOCK_HS200)) {
  467. flags = IRQSTAT_BRR;
  468. }
  469. do {
  470. irqstat = esdhc_read32(&regs->irqstat);
  471. if (irqstat & IRQSTAT_DTOE) {
  472. err = -ETIMEDOUT;
  473. goto out;
  474. }
  475. if (irqstat & DATA_ERR) {
  476. err = -ECOMM;
  477. goto out;
  478. }
  479. } while ((irqstat & flags) != flags);
  480. /*
  481. * Need invalidate the dcache here again to avoid any
  482. * cache-fill during the DMA operations such as the
  483. * speculative pre-fetching etc.
  484. */
  485. if (data->flags & MMC_DATA_READ)
  486. check_and_invalidate_dcache_range(cmd, data);
  487. #endif
  488. }
  489. out:
  490. /* Reset CMD and DATA portions on error */
  491. if (err) {
  492. esdhc_write32(&regs->sysctl, esdhc_read32(&regs->sysctl) |
  493. SYSCTL_RSTC);
  494. while (esdhc_read32(&regs->sysctl) & SYSCTL_RSTC)
  495. ;
  496. if (data) {
  497. esdhc_write32(&regs->sysctl,
  498. esdhc_read32(&regs->sysctl) |
  499. SYSCTL_RSTD);
  500. while ((esdhc_read32(&regs->sysctl) & SYSCTL_RSTD))
  501. ;
  502. }
  503. /* If this was CMD11, then notify that power cycle is needed */
  504. if (cmd->cmdidx == SD_CMD_SWITCH_UHS18V)
  505. printf("CMD11 to switch to 1.8V mode failed, card requires power cycle.\n");
  506. }
  507. esdhc_write32(&regs->irqstat, -1);
  508. return err;
  509. }
  510. static void set_sysctl(struct fsl_esdhc_priv *priv, struct mmc *mmc, uint clock)
  511. {
  512. struct fsl_esdhc *regs = priv->esdhc_regs;
  513. int div = 1;
  514. #ifdef ARCH_MXC
  515. #ifdef CONFIG_MX53
  516. /* For i.MX53 eSDHCv3, SYSCTL.SDCLKFS may not be set to 0. */
  517. int pre_div = (regs == (struct fsl_esdhc *)MMC_SDHC3_BASE_ADDR) ? 2 : 1;
  518. #else
  519. int pre_div = 1;
  520. #endif
  521. #else
  522. int pre_div = 2;
  523. #endif
  524. int ddr_pre_div = mmc->ddr_mode ? 2 : 1;
  525. int sdhc_clk = priv->sdhc_clk;
  526. uint clk;
  527. if (clock < mmc->cfg->f_min)
  528. clock = mmc->cfg->f_min;
  529. while (sdhc_clk / (16 * pre_div * ddr_pre_div) > clock && pre_div < 256)
  530. pre_div *= 2;
  531. while (sdhc_clk / (div * pre_div * ddr_pre_div) > clock && div < 16)
  532. div++;
  533. pre_div >>= 1;
  534. div -= 1;
  535. clk = (pre_div << 8) | (div << 4);
  536. #ifdef CONFIG_FSL_USDHC
  537. esdhc_clrbits32(&regs->vendorspec, VENDORSPEC_CKEN);
  538. #else
  539. esdhc_clrbits32(&regs->sysctl, SYSCTL_CKEN);
  540. #endif
  541. esdhc_clrsetbits32(&regs->sysctl, SYSCTL_CLOCK_MASK, clk);
  542. udelay(10000);
  543. #ifdef CONFIG_FSL_USDHC
  544. esdhc_setbits32(&regs->vendorspec, VENDORSPEC_PEREN | VENDORSPEC_CKEN);
  545. #else
  546. esdhc_setbits32(&regs->sysctl, SYSCTL_PEREN | SYSCTL_CKEN);
  547. #endif
  548. priv->clock = clock;
  549. }
  550. #ifdef CONFIG_FSL_ESDHC_USE_PERIPHERAL_CLK
  551. static void esdhc_clock_control(struct fsl_esdhc_priv *priv, bool enable)
  552. {
  553. struct fsl_esdhc *regs = priv->esdhc_regs;
  554. u32 value;
  555. u32 time_out;
  556. value = esdhc_read32(&regs->sysctl);
  557. if (enable)
  558. value |= SYSCTL_CKEN;
  559. else
  560. value &= ~SYSCTL_CKEN;
  561. esdhc_write32(&regs->sysctl, value);
  562. time_out = 20;
  563. value = PRSSTAT_SDSTB;
  564. while (!(esdhc_read32(&regs->prsstat) & value)) {
  565. if (time_out == 0) {
  566. printf("fsl_esdhc: Internal clock never stabilised.\n");
  567. break;
  568. }
  569. time_out--;
  570. mdelay(1);
  571. }
  572. }
  573. #endif
  574. #ifdef MMC_SUPPORTS_TUNING
  575. static int esdhc_change_pinstate(struct udevice *dev)
  576. {
  577. struct fsl_esdhc_priv *priv = dev_get_priv(dev);
  578. int ret;
  579. switch (priv->mode) {
  580. case UHS_SDR50:
  581. case UHS_DDR50:
  582. ret = pinctrl_select_state(dev, "state_100mhz");
  583. break;
  584. case UHS_SDR104:
  585. case MMC_HS_200:
  586. case MMC_HS_400:
  587. ret = pinctrl_select_state(dev, "state_200mhz");
  588. break;
  589. default:
  590. ret = pinctrl_select_state(dev, "default");
  591. break;
  592. }
  593. if (ret)
  594. printf("%s %d error\n", __func__, priv->mode);
  595. return ret;
  596. }
  597. static void esdhc_reset_tuning(struct mmc *mmc)
  598. {
  599. struct fsl_esdhc_priv *priv = dev_get_priv(mmc->dev);
  600. struct fsl_esdhc *regs = priv->esdhc_regs;
  601. if (priv->flags & ESDHC_FLAG_USDHC) {
  602. if (priv->flags & ESDHC_FLAG_STD_TUNING) {
  603. esdhc_clrbits32(&regs->autoc12err,
  604. MIX_CTRL_SMPCLK_SEL |
  605. MIX_CTRL_EXE_TUNE);
  606. }
  607. }
  608. }
  609. static void esdhc_set_strobe_dll(struct mmc *mmc)
  610. {
  611. struct fsl_esdhc_priv *priv = dev_get_priv(mmc->dev);
  612. struct fsl_esdhc *regs = priv->esdhc_regs;
  613. u32 val;
  614. if (priv->clock > ESDHC_STROBE_DLL_CLK_FREQ) {
  615. writel(ESDHC_STROBE_DLL_CTRL_RESET, &regs->strobe_dllctrl);
  616. /*
  617. * enable strobe dll ctrl and adjust the delay target
  618. * for the uSDHC loopback read clock
  619. */
  620. val = ESDHC_STROBE_DLL_CTRL_ENABLE |
  621. (priv->strobe_dll_delay_target <<
  622. ESDHC_STROBE_DLL_CTRL_SLV_DLY_TARGET_SHIFT);
  623. writel(val, &regs->strobe_dllctrl);
  624. /* wait 1us to make sure strobe dll status register stable */
  625. mdelay(1);
  626. val = readl(&regs->strobe_dllstat);
  627. if (!(val & ESDHC_STROBE_DLL_STS_REF_LOCK))
  628. pr_warn("HS400 strobe DLL status REF not lock!\n");
  629. if (!(val & ESDHC_STROBE_DLL_STS_SLV_LOCK))
  630. pr_warn("HS400 strobe DLL status SLV not lock!\n");
  631. }
  632. }
  633. static int esdhc_set_timing(struct mmc *mmc)
  634. {
  635. struct fsl_esdhc_priv *priv = dev_get_priv(mmc->dev);
  636. struct fsl_esdhc *regs = priv->esdhc_regs;
  637. u32 mixctrl;
  638. mixctrl = readl(&regs->mixctrl);
  639. mixctrl &= ~(MIX_CTRL_DDREN | MIX_CTRL_HS400_EN);
  640. switch (mmc->selected_mode) {
  641. case MMC_LEGACY:
  642. case SD_LEGACY:
  643. esdhc_reset_tuning(mmc);
  644. writel(mixctrl, &regs->mixctrl);
  645. break;
  646. case MMC_HS_400:
  647. mixctrl |= MIX_CTRL_DDREN | MIX_CTRL_HS400_EN;
  648. writel(mixctrl, &regs->mixctrl);
  649. esdhc_set_strobe_dll(mmc);
  650. break;
  651. case MMC_HS:
  652. case MMC_HS_52:
  653. case MMC_HS_200:
  654. case SD_HS:
  655. case UHS_SDR12:
  656. case UHS_SDR25:
  657. case UHS_SDR50:
  658. case UHS_SDR104:
  659. writel(mixctrl, &regs->mixctrl);
  660. break;
  661. case UHS_DDR50:
  662. case MMC_DDR_52:
  663. mixctrl |= MIX_CTRL_DDREN;
  664. writel(mixctrl, &regs->mixctrl);
  665. break;
  666. default:
  667. printf("Not supported %d\n", mmc->selected_mode);
  668. return -EINVAL;
  669. }
  670. priv->mode = mmc->selected_mode;
  671. return esdhc_change_pinstate(mmc->dev);
  672. }
  673. static int esdhc_set_voltage(struct mmc *mmc)
  674. {
  675. struct fsl_esdhc_priv *priv = dev_get_priv(mmc->dev);
  676. struct fsl_esdhc *regs = priv->esdhc_regs;
  677. int ret;
  678. priv->signal_voltage = mmc->signal_voltage;
  679. switch (mmc->signal_voltage) {
  680. case MMC_SIGNAL_VOLTAGE_330:
  681. if (priv->vs18_enable)
  682. return -EIO;
  683. #ifdef CONFIG_DM_REGULATOR
  684. if (!IS_ERR_OR_NULL(priv->vqmmc_dev)) {
  685. ret = regulator_set_value(priv->vqmmc_dev, 3300000);
  686. if (ret) {
  687. printf("Setting to 3.3V error");
  688. return -EIO;
  689. }
  690. /* Wait for 5ms */
  691. mdelay(5);
  692. }
  693. #endif
  694. esdhc_clrbits32(&regs->vendorspec, ESDHC_VENDORSPEC_VSELECT);
  695. if (!(esdhc_read32(&regs->vendorspec) &
  696. ESDHC_VENDORSPEC_VSELECT))
  697. return 0;
  698. return -EAGAIN;
  699. case MMC_SIGNAL_VOLTAGE_180:
  700. #ifdef CONFIG_DM_REGULATOR
  701. if (!IS_ERR_OR_NULL(priv->vqmmc_dev)) {
  702. ret = regulator_set_value(priv->vqmmc_dev, 1800000);
  703. if (ret) {
  704. printf("Setting to 1.8V error");
  705. return -EIO;
  706. }
  707. }
  708. #endif
  709. esdhc_setbits32(&regs->vendorspec, ESDHC_VENDORSPEC_VSELECT);
  710. if (esdhc_read32(&regs->vendorspec) & ESDHC_VENDORSPEC_VSELECT)
  711. return 0;
  712. return -EAGAIN;
  713. case MMC_SIGNAL_VOLTAGE_120:
  714. return -ENOTSUPP;
  715. default:
  716. return 0;
  717. }
  718. }
  719. static void esdhc_stop_tuning(struct mmc *mmc)
  720. {
  721. struct mmc_cmd cmd;
  722. cmd.cmdidx = MMC_CMD_STOP_TRANSMISSION;
  723. cmd.cmdarg = 0;
  724. cmd.resp_type = MMC_RSP_R1b;
  725. dm_mmc_send_cmd(mmc->dev, &cmd, NULL);
  726. }
  727. static int fsl_esdhc_execute_tuning(struct udevice *dev, uint32_t opcode)
  728. {
  729. struct fsl_esdhc_plat *plat = dev_get_platdata(dev);
  730. struct fsl_esdhc_priv *priv = dev_get_priv(dev);
  731. struct fsl_esdhc *regs = priv->esdhc_regs;
  732. struct mmc *mmc = &plat->mmc;
  733. u32 irqstaten = readl(&regs->irqstaten);
  734. u32 irqsigen = readl(&regs->irqsigen);
  735. int i, ret = -ETIMEDOUT;
  736. u32 val, mixctrl;
  737. /* clock tuning is not needed for upto 52MHz */
  738. if (mmc->clock <= 52000000)
  739. return 0;
  740. /* This is readw/writew SDHCI_HOST_CONTROL2 when tuning */
  741. if (priv->flags & ESDHC_FLAG_STD_TUNING) {
  742. val = readl(&regs->autoc12err);
  743. mixctrl = readl(&regs->mixctrl);
  744. val &= ~MIX_CTRL_SMPCLK_SEL;
  745. mixctrl &= ~(MIX_CTRL_FBCLK_SEL | MIX_CTRL_AUTO_TUNE_EN);
  746. val |= MIX_CTRL_EXE_TUNE;
  747. mixctrl |= MIX_CTRL_FBCLK_SEL | MIX_CTRL_AUTO_TUNE_EN;
  748. writel(val, &regs->autoc12err);
  749. writel(mixctrl, &regs->mixctrl);
  750. }
  751. /* sdhci_writew(host, SDHCI_TRNS_READ, SDHCI_TRANSFER_MODE); */
  752. mixctrl = readl(&regs->mixctrl);
  753. mixctrl = MIX_CTRL_DTDSEL_READ | (mixctrl & ~MIX_CTRL_SDHCI_MASK);
  754. writel(mixctrl, &regs->mixctrl);
  755. writel(IRQSTATEN_BRR, &regs->irqstaten);
  756. writel(IRQSTATEN_BRR, &regs->irqsigen);
  757. /*
  758. * Issue opcode repeatedly till Execute Tuning is set to 0 or the number
  759. * of loops reaches 40 times.
  760. */
  761. for (i = 0; i < MAX_TUNING_LOOP; i++) {
  762. u32 ctrl;
  763. if (opcode == MMC_CMD_SEND_TUNING_BLOCK_HS200) {
  764. if (mmc->bus_width == 8)
  765. writel(0x7080, &regs->blkattr);
  766. else if (mmc->bus_width == 4)
  767. writel(0x7040, &regs->blkattr);
  768. } else {
  769. writel(0x7040, &regs->blkattr);
  770. }
  771. /* sdhci_writew(host, SDHCI_TRNS_READ, SDHCI_TRANSFER_MODE) */
  772. val = readl(&regs->mixctrl);
  773. val = MIX_CTRL_DTDSEL_READ | (val & ~MIX_CTRL_SDHCI_MASK);
  774. writel(val, &regs->mixctrl);
  775. /* We are using STD tuning, no need to check return value */
  776. mmc_send_tuning(mmc, opcode, NULL);
  777. ctrl = readl(&regs->autoc12err);
  778. if ((!(ctrl & MIX_CTRL_EXE_TUNE)) &&
  779. (ctrl & MIX_CTRL_SMPCLK_SEL)) {
  780. /*
  781. * need to wait some time, make sure sd/mmc fininsh
  782. * send out tuning data, otherwise, the sd/mmc can't
  783. * response to any command when the card still out
  784. * put the tuning data.
  785. */
  786. mdelay(1);
  787. ret = 0;
  788. break;
  789. }
  790. /* Add 1ms delay for SD and eMMC */
  791. mdelay(1);
  792. }
  793. writel(irqstaten, &regs->irqstaten);
  794. writel(irqsigen, &regs->irqsigen);
  795. esdhc_stop_tuning(mmc);
  796. return ret;
  797. }
  798. #endif
  799. static int esdhc_set_ios_common(struct fsl_esdhc_priv *priv, struct mmc *mmc)
  800. {
  801. struct fsl_esdhc *regs = priv->esdhc_regs;
  802. int ret __maybe_unused;
  803. #ifdef CONFIG_FSL_ESDHC_USE_PERIPHERAL_CLK
  804. /* Select to use peripheral clock */
  805. esdhc_clock_control(priv, false);
  806. esdhc_setbits32(&regs->scr, ESDHCCTL_PCS);
  807. esdhc_clock_control(priv, true);
  808. #endif
  809. /* Set the clock speed */
  810. if (priv->clock != mmc->clock)
  811. set_sysctl(priv, mmc, mmc->clock);
  812. #ifdef MMC_SUPPORTS_TUNING
  813. if (mmc->clk_disable) {
  814. #ifdef CONFIG_FSL_USDHC
  815. esdhc_clrbits32(&regs->vendorspec, VENDORSPEC_CKEN);
  816. #else
  817. esdhc_clrbits32(&regs->sysctl, SYSCTL_CKEN);
  818. #endif
  819. } else {
  820. #ifdef CONFIG_FSL_USDHC
  821. esdhc_setbits32(&regs->vendorspec, VENDORSPEC_PEREN |
  822. VENDORSPEC_CKEN);
  823. #else
  824. esdhc_setbits32(&regs->sysctl, SYSCTL_PEREN | SYSCTL_CKEN);
  825. #endif
  826. }
  827. if (priv->mode != mmc->selected_mode) {
  828. ret = esdhc_set_timing(mmc);
  829. if (ret) {
  830. printf("esdhc_set_timing error %d\n", ret);
  831. return ret;
  832. }
  833. }
  834. if (priv->signal_voltage != mmc->signal_voltage) {
  835. ret = esdhc_set_voltage(mmc);
  836. if (ret) {
  837. printf("esdhc_set_voltage error %d\n", ret);
  838. return ret;
  839. }
  840. }
  841. #endif
  842. /* Set the bus width */
  843. esdhc_clrbits32(&regs->proctl, PROCTL_DTW_4 | PROCTL_DTW_8);
  844. if (mmc->bus_width == 4)
  845. esdhc_setbits32(&regs->proctl, PROCTL_DTW_4);
  846. else if (mmc->bus_width == 8)
  847. esdhc_setbits32(&regs->proctl, PROCTL_DTW_8);
  848. return 0;
  849. }
  850. static int esdhc_init_common(struct fsl_esdhc_priv *priv, struct mmc *mmc)
  851. {
  852. struct fsl_esdhc *regs = priv->esdhc_regs;
  853. ulong start;
  854. /* Reset the entire host controller */
  855. esdhc_setbits32(&regs->sysctl, SYSCTL_RSTA);
  856. /* Wait until the controller is available */
  857. start = get_timer(0);
  858. while ((esdhc_read32(&regs->sysctl) & SYSCTL_RSTA)) {
  859. if (get_timer(start) > 1000)
  860. return -ETIMEDOUT;
  861. }
  862. #if defined(CONFIG_FSL_USDHC)
  863. /* RSTA doesn't reset MMC_BOOT register, so manually reset it */
  864. esdhc_write32(&regs->mmcboot, 0x0);
  865. /* Reset MIX_CTRL and CLK_TUNE_CTRL_STATUS regs to 0 */
  866. esdhc_write32(&regs->mixctrl, 0x0);
  867. esdhc_write32(&regs->clktunectrlstatus, 0x0);
  868. /* Put VEND_SPEC to default value */
  869. if (priv->vs18_enable)
  870. esdhc_write32(&regs->vendorspec, (VENDORSPEC_INIT |
  871. ESDHC_VENDORSPEC_VSELECT));
  872. else
  873. esdhc_write32(&regs->vendorspec, VENDORSPEC_INIT);
  874. /* Disable DLL_CTRL delay line */
  875. esdhc_write32(&regs->dllctrl, 0x0);
  876. #endif
  877. #ifndef ARCH_MXC
  878. /* Enable cache snooping */
  879. esdhc_write32(&regs->scr, 0x00000040);
  880. #endif
  881. #ifndef CONFIG_FSL_USDHC
  882. esdhc_setbits32(&regs->sysctl, SYSCTL_HCKEN | SYSCTL_IPGEN);
  883. #else
  884. esdhc_setbits32(&regs->vendorspec, VENDORSPEC_HCKEN | VENDORSPEC_IPGEN);
  885. #endif
  886. /* Set the initial clock speed */
  887. mmc_set_clock(mmc, 400000, MMC_CLK_ENABLE);
  888. /* Disable the BRR and BWR bits in IRQSTAT */
  889. esdhc_clrbits32(&regs->irqstaten, IRQSTATEN_BRR | IRQSTATEN_BWR);
  890. /* Put the PROCTL reg back to the default */
  891. esdhc_write32(&regs->proctl, PROCTL_INIT);
  892. /* Set timout to the maximum value */
  893. esdhc_clrsetbits32(&regs->sysctl, SYSCTL_TIMEOUT_MASK, 14 << 16);
  894. return 0;
  895. }
  896. static int esdhc_getcd_common(struct fsl_esdhc_priv *priv)
  897. {
  898. struct fsl_esdhc *regs = priv->esdhc_regs;
  899. int timeout = 1000;
  900. #ifdef CONFIG_ESDHC_DETECT_QUIRK
  901. if (CONFIG_ESDHC_DETECT_QUIRK)
  902. return 1;
  903. #endif
  904. #if CONFIG_IS_ENABLED(DM_MMC)
  905. if (priv->non_removable)
  906. return 1;
  907. #ifdef CONFIG_DM_GPIO
  908. if (dm_gpio_is_valid(&priv->cd_gpio))
  909. return dm_gpio_get_value(&priv->cd_gpio);
  910. #endif
  911. #endif
  912. while (!(esdhc_read32(&regs->prsstat) & PRSSTAT_CINS) && --timeout)
  913. udelay(1000);
  914. return timeout > 0;
  915. }
  916. static int esdhc_reset(struct fsl_esdhc *regs)
  917. {
  918. ulong start;
  919. /* reset the controller */
  920. esdhc_setbits32(&regs->sysctl, SYSCTL_RSTA);
  921. /* hardware clears the bit when it is done */
  922. start = get_timer(0);
  923. while ((esdhc_read32(&regs->sysctl) & SYSCTL_RSTA)) {
  924. if (get_timer(start) > 100) {
  925. printf("MMC/SD: Reset never completed.\n");
  926. return -ETIMEDOUT;
  927. }
  928. }
  929. return 0;
  930. }
  931. #if !CONFIG_IS_ENABLED(DM_MMC)
  932. static int esdhc_getcd(struct mmc *mmc)
  933. {
  934. struct fsl_esdhc_priv *priv = mmc->priv;
  935. return esdhc_getcd_common(priv);
  936. }
  937. static int esdhc_init(struct mmc *mmc)
  938. {
  939. struct fsl_esdhc_priv *priv = mmc->priv;
  940. return esdhc_init_common(priv, mmc);
  941. }
  942. static int esdhc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
  943. struct mmc_data *data)
  944. {
  945. struct fsl_esdhc_priv *priv = mmc->priv;
  946. return esdhc_send_cmd_common(priv, mmc, cmd, data);
  947. }
  948. static int esdhc_set_ios(struct mmc *mmc)
  949. {
  950. struct fsl_esdhc_priv *priv = mmc->priv;
  951. return esdhc_set_ios_common(priv, mmc);
  952. }
  953. static const struct mmc_ops esdhc_ops = {
  954. .getcd = esdhc_getcd,
  955. .init = esdhc_init,
  956. .send_cmd = esdhc_send_cmd,
  957. .set_ios = esdhc_set_ios,
  958. };
  959. #endif
  960. static int fsl_esdhc_init(struct fsl_esdhc_priv *priv,
  961. struct fsl_esdhc_plat *plat)
  962. {
  963. struct mmc_config *cfg;
  964. struct fsl_esdhc *regs;
  965. u32 caps, voltage_caps;
  966. int ret;
  967. if (!priv)
  968. return -EINVAL;
  969. regs = priv->esdhc_regs;
  970. /* First reset the eSDHC controller */
  971. ret = esdhc_reset(regs);
  972. if (ret)
  973. return ret;
  974. #ifndef CONFIG_FSL_USDHC
  975. esdhc_setbits32(&regs->sysctl, SYSCTL_PEREN | SYSCTL_HCKEN
  976. | SYSCTL_IPGEN | SYSCTL_CKEN);
  977. /* Clearing tuning bits in case ROM has set it already */
  978. esdhc_write32(&regs->mixctrl, 0);
  979. esdhc_write32(&regs->autoc12err, 0);
  980. esdhc_write32(&regs->clktunectrlstatus, 0);
  981. #else
  982. esdhc_setbits32(&regs->vendorspec, VENDORSPEC_PEREN |
  983. VENDORSPEC_HCKEN | VENDORSPEC_IPGEN | VENDORSPEC_CKEN);
  984. #endif
  985. if (priv->vs18_enable)
  986. esdhc_setbits32(&regs->vendorspec, ESDHC_VENDORSPEC_VSELECT);
  987. writel(SDHCI_IRQ_EN_BITS, &regs->irqstaten);
  988. cfg = &plat->cfg;
  989. #ifndef CONFIG_DM_MMC
  990. memset(cfg, '\0', sizeof(*cfg));
  991. #endif
  992. voltage_caps = 0;
  993. caps = esdhc_read32(&regs->hostcapblt);
  994. #ifdef CONFIG_SYS_FSL_ERRATUM_ESDHC135
  995. caps = caps & ~(ESDHC_HOSTCAPBLT_SRS |
  996. ESDHC_HOSTCAPBLT_VS18 | ESDHC_HOSTCAPBLT_VS30);
  997. #endif
  998. /* T4240 host controller capabilities register should have VS33 bit */
  999. #ifdef CONFIG_SYS_FSL_MMC_HAS_CAPBLT_VS33
  1000. caps = caps | ESDHC_HOSTCAPBLT_VS33;
  1001. #endif
  1002. if (caps & ESDHC_HOSTCAPBLT_VS18)
  1003. voltage_caps |= MMC_VDD_165_195;
  1004. if (caps & ESDHC_HOSTCAPBLT_VS30)
  1005. voltage_caps |= MMC_VDD_29_30 | MMC_VDD_30_31;
  1006. if (caps & ESDHC_HOSTCAPBLT_VS33)
  1007. voltage_caps |= MMC_VDD_32_33 | MMC_VDD_33_34;
  1008. cfg->name = "FSL_SDHC";
  1009. #if !CONFIG_IS_ENABLED(DM_MMC)
  1010. cfg->ops = &esdhc_ops;
  1011. #endif
  1012. #ifdef CONFIG_SYS_SD_VOLTAGE
  1013. cfg->voltages = CONFIG_SYS_SD_VOLTAGE;
  1014. #else
  1015. cfg->voltages = MMC_VDD_32_33 | MMC_VDD_33_34;
  1016. #endif
  1017. if ((cfg->voltages & voltage_caps) == 0) {
  1018. printf("voltage not supported by controller\n");
  1019. return -1;
  1020. }
  1021. if (priv->bus_width == 8)
  1022. cfg->host_caps = MMC_MODE_4BIT | MMC_MODE_8BIT;
  1023. else if (priv->bus_width == 4)
  1024. cfg->host_caps = MMC_MODE_4BIT;
  1025. cfg->host_caps = MMC_MODE_4BIT | MMC_MODE_8BIT;
  1026. #ifdef CONFIG_SYS_FSL_ESDHC_HAS_DDR_MODE
  1027. cfg->host_caps |= MMC_MODE_DDR_52MHz;
  1028. #endif
  1029. if (priv->bus_width > 0) {
  1030. if (priv->bus_width < 8)
  1031. cfg->host_caps &= ~MMC_MODE_8BIT;
  1032. if (priv->bus_width < 4)
  1033. cfg->host_caps &= ~MMC_MODE_4BIT;
  1034. }
  1035. if (caps & ESDHC_HOSTCAPBLT_HSS)
  1036. cfg->host_caps |= MMC_MODE_HS_52MHz | MMC_MODE_HS;
  1037. #ifdef CONFIG_ESDHC_DETECT_8_BIT_QUIRK
  1038. if (CONFIG_ESDHC_DETECT_8_BIT_QUIRK)
  1039. cfg->host_caps &= ~MMC_MODE_8BIT;
  1040. #endif
  1041. cfg->host_caps |= priv->caps;
  1042. cfg->f_min = 400000;
  1043. cfg->f_max = min(priv->sdhc_clk, (u32)200000000);
  1044. cfg->b_max = CONFIG_SYS_MMC_MAX_BLK_COUNT;
  1045. writel(0, &regs->dllctrl);
  1046. if (priv->flags & ESDHC_FLAG_USDHC) {
  1047. if (priv->flags & ESDHC_FLAG_STD_TUNING) {
  1048. u32 val = readl(&regs->tuning_ctrl);
  1049. val |= ESDHC_STD_TUNING_EN;
  1050. val &= ~ESDHC_TUNING_START_TAP_MASK;
  1051. val |= priv->tuning_start_tap;
  1052. val &= ~ESDHC_TUNING_STEP_MASK;
  1053. val |= (priv->tuning_step) << ESDHC_TUNING_STEP_SHIFT;
  1054. writel(val, &regs->tuning_ctrl);
  1055. }
  1056. }
  1057. return 0;
  1058. }
  1059. #if !CONFIG_IS_ENABLED(DM_MMC)
  1060. static int fsl_esdhc_cfg_to_priv(struct fsl_esdhc_cfg *cfg,
  1061. struct fsl_esdhc_priv *priv)
  1062. {
  1063. if (!cfg || !priv)
  1064. return -EINVAL;
  1065. priv->esdhc_regs = (struct fsl_esdhc *)(unsigned long)(cfg->esdhc_base);
  1066. priv->bus_width = cfg->max_bus_width;
  1067. priv->sdhc_clk = cfg->sdhc_clk;
  1068. priv->wp_enable = cfg->wp_enable;
  1069. priv->vs18_enable = cfg->vs18_enable;
  1070. return 0;
  1071. };
  1072. int fsl_esdhc_initialize(bd_t *bis, struct fsl_esdhc_cfg *cfg)
  1073. {
  1074. struct fsl_esdhc_plat *plat;
  1075. struct fsl_esdhc_priv *priv;
  1076. struct mmc *mmc;
  1077. int ret;
  1078. if (!cfg)
  1079. return -EINVAL;
  1080. priv = calloc(sizeof(struct fsl_esdhc_priv), 1);
  1081. if (!priv)
  1082. return -ENOMEM;
  1083. plat = calloc(sizeof(struct fsl_esdhc_plat), 1);
  1084. if (!plat) {
  1085. free(priv);
  1086. return -ENOMEM;
  1087. }
  1088. ret = fsl_esdhc_cfg_to_priv(cfg, priv);
  1089. if (ret) {
  1090. debug("%s xlate failure\n", __func__);
  1091. free(plat);
  1092. free(priv);
  1093. return ret;
  1094. }
  1095. ret = fsl_esdhc_init(priv, plat);
  1096. if (ret) {
  1097. debug("%s init failure\n", __func__);
  1098. free(plat);
  1099. free(priv);
  1100. return ret;
  1101. }
  1102. mmc = mmc_create(&plat->cfg, priv);
  1103. if (!mmc)
  1104. return -EIO;
  1105. priv->mmc = mmc;
  1106. return 0;
  1107. }
  1108. int fsl_esdhc_mmc_init(bd_t *bis)
  1109. {
  1110. struct fsl_esdhc_cfg *cfg;
  1111. cfg = calloc(sizeof(struct fsl_esdhc_cfg), 1);
  1112. cfg->esdhc_base = CONFIG_SYS_FSL_ESDHC_ADDR;
  1113. cfg->sdhc_clk = gd->arch.sdhc_clk;
  1114. return fsl_esdhc_initialize(bis, cfg);
  1115. }
  1116. #endif
  1117. #ifdef CONFIG_FSL_ESDHC_ADAPTER_IDENT
  1118. void mmc_adapter_card_type_ident(void)
  1119. {
  1120. u8 card_id;
  1121. u8 value;
  1122. card_id = QIXIS_READ(present) & QIXIS_SDID_MASK;
  1123. gd->arch.sdhc_adapter = card_id;
  1124. switch (card_id) {
  1125. case QIXIS_ESDHC_ADAPTER_TYPE_EMMC45:
  1126. value = QIXIS_READ(brdcfg[5]);
  1127. value |= (QIXIS_DAT4 | QIXIS_DAT5_6_7);
  1128. QIXIS_WRITE(brdcfg[5], value);
  1129. break;
  1130. case QIXIS_ESDHC_ADAPTER_TYPE_SDMMC_LEGACY:
  1131. value = QIXIS_READ(pwr_ctl[1]);
  1132. value |= QIXIS_EVDD_BY_SDHC_VS;
  1133. QIXIS_WRITE(pwr_ctl[1], value);
  1134. break;
  1135. case QIXIS_ESDHC_ADAPTER_TYPE_EMMC44:
  1136. value = QIXIS_READ(brdcfg[5]);
  1137. value |= (QIXIS_SDCLKIN | QIXIS_SDCLKOUT);
  1138. QIXIS_WRITE(brdcfg[5], value);
  1139. break;
  1140. case QIXIS_ESDHC_ADAPTER_TYPE_RSV:
  1141. break;
  1142. case QIXIS_ESDHC_ADAPTER_TYPE_MMC:
  1143. break;
  1144. case QIXIS_ESDHC_ADAPTER_TYPE_SD:
  1145. break;
  1146. case QIXIS_ESDHC_NO_ADAPTER:
  1147. break;
  1148. default:
  1149. break;
  1150. }
  1151. }
  1152. #endif
  1153. #ifdef CONFIG_OF_LIBFDT
  1154. __weak int esdhc_status_fixup(void *blob, const char *compat)
  1155. {
  1156. #ifdef CONFIG_FSL_ESDHC_PIN_MUX
  1157. if (!hwconfig("esdhc")) {
  1158. do_fixup_by_compat(blob, compat, "status", "disabled",
  1159. sizeof("disabled"), 1);
  1160. return 1;
  1161. }
  1162. #endif
  1163. return 0;
  1164. }
  1165. void fdt_fixup_esdhc(void *blob, bd_t *bd)
  1166. {
  1167. const char *compat = "fsl,esdhc";
  1168. if (esdhc_status_fixup(blob, compat))
  1169. return;
  1170. #ifdef CONFIG_FSL_ESDHC_USE_PERIPHERAL_CLK
  1171. do_fixup_by_compat_u32(blob, compat, "peripheral-frequency",
  1172. gd->arch.sdhc_clk, 1);
  1173. #else
  1174. do_fixup_by_compat_u32(blob, compat, "clock-frequency",
  1175. gd->arch.sdhc_clk, 1);
  1176. #endif
  1177. #ifdef CONFIG_FSL_ESDHC_ADAPTER_IDENT
  1178. do_fixup_by_compat_u32(blob, compat, "adapter-type",
  1179. (u32)(gd->arch.sdhc_adapter), 1);
  1180. #endif
  1181. }
  1182. #endif
  1183. #if CONFIG_IS_ENABLED(DM_MMC)
  1184. #include <asm/arch/clock.h>
  1185. __weak void init_clk_usdhc(u32 index)
  1186. {
  1187. }
  1188. static int fsl_esdhc_probe(struct udevice *dev)
  1189. {
  1190. struct mmc_uclass_priv *upriv = dev_get_uclass_priv(dev);
  1191. struct fsl_esdhc_plat *plat = dev_get_platdata(dev);
  1192. struct fsl_esdhc_priv *priv = dev_get_priv(dev);
  1193. const void *fdt = gd->fdt_blob;
  1194. int node = dev_of_offset(dev);
  1195. struct esdhc_soc_data *data =
  1196. (struct esdhc_soc_data *)dev_get_driver_data(dev);
  1197. #ifdef CONFIG_DM_REGULATOR
  1198. struct udevice *vqmmc_dev;
  1199. #endif
  1200. fdt_addr_t addr;
  1201. unsigned int val;
  1202. struct mmc *mmc;
  1203. int ret;
  1204. addr = dev_read_addr(dev);
  1205. if (addr == FDT_ADDR_T_NONE)
  1206. return -EINVAL;
  1207. priv->esdhc_regs = (struct fsl_esdhc *)addr;
  1208. priv->dev = dev;
  1209. priv->mode = -1;
  1210. if (data) {
  1211. priv->flags = data->flags;
  1212. priv->caps = data->caps;
  1213. }
  1214. val = dev_read_u32_default(dev, "bus-width", -1);
  1215. if (val == 8)
  1216. priv->bus_width = 8;
  1217. else if (val == 4)
  1218. priv->bus_width = 4;
  1219. else
  1220. priv->bus_width = 1;
  1221. val = fdtdec_get_int(fdt, node, "fsl,tuning-step", 1);
  1222. priv->tuning_step = val;
  1223. val = fdtdec_get_int(fdt, node, "fsl,tuning-start-tap",
  1224. ESDHC_TUNING_START_TAP_DEFAULT);
  1225. priv->tuning_start_tap = val;
  1226. val = fdtdec_get_int(fdt, node, "fsl,strobe-dll-delay-target",
  1227. ESDHC_STROBE_DLL_CTRL_SLV_DLY_TARGET_DEFAULT);
  1228. priv->strobe_dll_delay_target = val;
  1229. if (dev_read_bool(dev, "non-removable")) {
  1230. priv->non_removable = 1;
  1231. } else {
  1232. priv->non_removable = 0;
  1233. #ifdef CONFIG_DM_GPIO
  1234. gpio_request_by_name(dev, "cd-gpios", 0, &priv->cd_gpio,
  1235. GPIOD_IS_IN);
  1236. #endif
  1237. }
  1238. priv->wp_enable = 1;
  1239. #ifdef CONFIG_DM_GPIO
  1240. ret = gpio_request_by_name(dev, "wp-gpios", 0, &priv->wp_gpio,
  1241. GPIOD_IS_IN);
  1242. if (ret)
  1243. priv->wp_enable = 0;
  1244. #endif
  1245. priv->vs18_enable = 0;
  1246. #ifdef CONFIG_DM_REGULATOR
  1247. /*
  1248. * If emmc I/O has a fixed voltage at 1.8V, this must be provided,
  1249. * otherwise, emmc will work abnormally.
  1250. */
  1251. ret = device_get_supply_regulator(dev, "vqmmc-supply", &vqmmc_dev);
  1252. if (ret) {
  1253. dev_dbg(dev, "no vqmmc-supply\n");
  1254. } else {
  1255. ret = regulator_set_enable(vqmmc_dev, true);
  1256. if (ret) {
  1257. dev_err(dev, "fail to enable vqmmc-supply\n");
  1258. return ret;
  1259. }
  1260. if (regulator_get_value(vqmmc_dev) == 1800000)
  1261. priv->vs18_enable = 1;
  1262. }
  1263. #endif
  1264. if (fdt_get_property(fdt, node, "no-1-8-v", NULL))
  1265. priv->caps &= ~(UHS_CAPS | MMC_MODE_HS200 | MMC_MODE_HS400);
  1266. /*
  1267. * TODO:
  1268. * Because lack of clk driver, if SDHC clk is not enabled,
  1269. * need to enable it first before this driver is invoked.
  1270. *
  1271. * we use MXC_ESDHC_CLK to get clk freq.
  1272. * If one would like to make this function work,
  1273. * the aliases should be provided in dts as this:
  1274. *
  1275. * aliases {
  1276. * mmc0 = &usdhc1;
  1277. * mmc1 = &usdhc2;
  1278. * mmc2 = &usdhc3;
  1279. * mmc3 = &usdhc4;
  1280. * };
  1281. * Then if your board only supports mmc2 and mmc3, but we can
  1282. * correctly get the seq as 2 and 3, then let mxc_get_clock
  1283. * work as expected.
  1284. */
  1285. init_clk_usdhc(dev->seq);
  1286. if (IS_ENABLED(CONFIG_CLK)) {
  1287. /* Assigned clock already set clock */
  1288. ret = clk_get_by_name(dev, "per", &priv->per_clk);
  1289. if (ret) {
  1290. printf("Failed to get per_clk\n");
  1291. return ret;
  1292. }
  1293. ret = clk_enable(&priv->per_clk);
  1294. if (ret) {
  1295. printf("Failed to enable per_clk\n");
  1296. return ret;
  1297. }
  1298. priv->sdhc_clk = clk_get_rate(&priv->per_clk);
  1299. } else {
  1300. priv->sdhc_clk = mxc_get_clock(MXC_ESDHC_CLK + dev->seq);
  1301. if (priv->sdhc_clk <= 0) {
  1302. dev_err(dev, "Unable to get clk for %s\n", dev->name);
  1303. return -EINVAL;
  1304. }
  1305. }
  1306. ret = fsl_esdhc_init(priv, plat);
  1307. if (ret) {
  1308. dev_err(dev, "fsl_esdhc_init failure\n");
  1309. return ret;
  1310. }
  1311. mmc = &plat->mmc;
  1312. mmc->cfg = &plat->cfg;
  1313. mmc->dev = dev;
  1314. upriv->mmc = mmc;
  1315. return esdhc_init_common(priv, mmc);
  1316. }
  1317. #if CONFIG_IS_ENABLED(DM_MMC)
  1318. static int fsl_esdhc_get_cd(struct udevice *dev)
  1319. {
  1320. struct fsl_esdhc_priv *priv = dev_get_priv(dev);
  1321. return true;
  1322. return esdhc_getcd_common(priv);
  1323. }
  1324. static int fsl_esdhc_send_cmd(struct udevice *dev, struct mmc_cmd *cmd,
  1325. struct mmc_data *data)
  1326. {
  1327. struct fsl_esdhc_plat *plat = dev_get_platdata(dev);
  1328. struct fsl_esdhc_priv *priv = dev_get_priv(dev);
  1329. return esdhc_send_cmd_common(priv, &plat->mmc, cmd, data);
  1330. }
  1331. static int fsl_esdhc_set_ios(struct udevice *dev)
  1332. {
  1333. struct fsl_esdhc_plat *plat = dev_get_platdata(dev);
  1334. struct fsl_esdhc_priv *priv = dev_get_priv(dev);
  1335. return esdhc_set_ios_common(priv, &plat->mmc);
  1336. }
  1337. static const struct dm_mmc_ops fsl_esdhc_ops = {
  1338. .get_cd = fsl_esdhc_get_cd,
  1339. .send_cmd = fsl_esdhc_send_cmd,
  1340. .set_ios = fsl_esdhc_set_ios,
  1341. #ifdef MMC_SUPPORTS_TUNING
  1342. .execute_tuning = fsl_esdhc_execute_tuning,
  1343. #endif
  1344. };
  1345. #endif
  1346. static struct esdhc_soc_data usdhc_imx7d_data = {
  1347. .flags = ESDHC_FLAG_USDHC | ESDHC_FLAG_STD_TUNING
  1348. | ESDHC_FLAG_HAVE_CAP1 | ESDHC_FLAG_HS200
  1349. | ESDHC_FLAG_HS400,
  1350. .caps = UHS_CAPS | MMC_MODE_HS200 | MMC_MODE_DDR_52MHz |
  1351. MMC_MODE_HS_52MHz | MMC_MODE_HS,
  1352. };
  1353. static const struct udevice_id fsl_esdhc_ids[] = {
  1354. { .compatible = "fsl,imx6ul-usdhc", },
  1355. { .compatible = "fsl,imx6sx-usdhc", },
  1356. { .compatible = "fsl,imx6sl-usdhc", },
  1357. { .compatible = "fsl,imx6q-usdhc", },
  1358. { .compatible = "fsl,imx7d-usdhc", .data = (ulong)&usdhc_imx7d_data,},
  1359. { .compatible = "fsl,imx7ulp-usdhc", },
  1360. { .compatible = "fsl,esdhc", },
  1361. { /* sentinel */ }
  1362. };
  1363. #if CONFIG_IS_ENABLED(BLK)
  1364. static int fsl_esdhc_bind(struct udevice *dev)
  1365. {
  1366. struct fsl_esdhc_plat *plat = dev_get_platdata(dev);
  1367. return mmc_bind(dev, &plat->mmc, &plat->cfg);
  1368. }
  1369. #endif
  1370. U_BOOT_DRIVER(fsl_esdhc) = {
  1371. .name = "fsl-esdhc-mmc",
  1372. .id = UCLASS_MMC,
  1373. .of_match = fsl_esdhc_ids,
  1374. .ops = &fsl_esdhc_ops,
  1375. #if CONFIG_IS_ENABLED(BLK)
  1376. .bind = fsl_esdhc_bind,
  1377. #endif
  1378. .probe = fsl_esdhc_probe,
  1379. .platdata_auto_alloc_size = sizeof(struct fsl_esdhc_plat),
  1380. .priv_auto_alloc_size = sizeof(struct fsl_esdhc_priv),
  1381. };
  1382. #endif