litex_mmc.c 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652
  1. // SPDX-License-Identifier: GPL-2.0
  2. /*
  3. * LiteX LiteSDCard driver
  4. *
  5. * Copyright (C) 2019-2020 Antmicro <contact@antmicro.com>
  6. * Copyright (C) 2019-2020 Kamil Rakoczy <krakoczy@antmicro.com>
  7. * Copyright (C) 2019-2020 Maciej Dudek <mdudek@internships.antmicro.com>
  8. * Copyright (C) 2020 Paul Mackerras <paulus@ozlabs.org>
  9. * Copyright (C) 2020-2022 Gabriel Somlo <gsomlo@gmail.com>
  10. */
  11. #include <linux/bits.h>
  12. #include <linux/clk.h>
  13. #include <linux/delay.h>
  14. #include <linux/dma-mapping.h>
  15. #include <linux/interrupt.h>
  16. #include <linux/iopoll.h>
  17. #include <linux/litex.h>
  18. #include <linux/mod_devicetable.h>
  19. #include <linux/module.h>
  20. #include <linux/platform_device.h>
  21. #include <linux/mmc/host.h>
  22. #include <linux/mmc/mmc.h>
  23. #include <linux/mmc/sd.h>
  24. #define LITEX_PHY_CARDDETECT 0x00
  25. #define LITEX_PHY_CLOCKERDIV 0x04
  26. #define LITEX_PHY_INITIALIZE 0x08
  27. #define LITEX_PHY_WRITESTATUS 0x0C
  28. #define LITEX_CORE_CMDARG 0x00
  29. #define LITEX_CORE_CMDCMD 0x04
  30. #define LITEX_CORE_CMDSND 0x08
  31. #define LITEX_CORE_CMDRSP 0x0C
  32. #define LITEX_CORE_CMDEVT 0x1C
  33. #define LITEX_CORE_DATEVT 0x20
  34. #define LITEX_CORE_BLKLEN 0x24
  35. #define LITEX_CORE_BLKCNT 0x28
  36. #define LITEX_BLK2MEM_BASE 0x00
  37. #define LITEX_BLK2MEM_LEN 0x08
  38. #define LITEX_BLK2MEM_ENA 0x0C
  39. #define LITEX_BLK2MEM_DONE 0x10
  40. #define LITEX_BLK2MEM_LOOP 0x14
  41. #define LITEX_MEM2BLK_BASE 0x00
  42. #define LITEX_MEM2BLK_LEN 0x08
  43. #define LITEX_MEM2BLK_ENA 0x0C
  44. #define LITEX_MEM2BLK_DONE 0x10
  45. #define LITEX_MEM2BLK_LOOP 0x14
  46. #define LITEX_MEM2BLK 0x18
  47. #define LITEX_IRQ_STATUS 0x00
  48. #define LITEX_IRQ_PENDING 0x04
  49. #define LITEX_IRQ_ENABLE 0x08
  50. #define SD_CTL_DATA_XFER_NONE 0
  51. #define SD_CTL_DATA_XFER_READ 1
  52. #define SD_CTL_DATA_XFER_WRITE 2
  53. #define SD_CTL_RESP_NONE 0
  54. #define SD_CTL_RESP_SHORT 1
  55. #define SD_CTL_RESP_LONG 2
  56. #define SD_CTL_RESP_SHORT_BUSY 3
  57. #define SD_BIT_DONE BIT(0)
  58. #define SD_BIT_WR_ERR BIT(1)
  59. #define SD_BIT_TIMEOUT BIT(2)
  60. #define SD_BIT_CRC_ERR BIT(3)
  61. #define SD_SLEEP_US 5
  62. #define SD_TIMEOUT_US 20000
  63. #define SDIRQ_CARD_DETECT 1
  64. #define SDIRQ_SD_TO_MEM_DONE 2
  65. #define SDIRQ_MEM_TO_SD_DONE 4
  66. #define SDIRQ_CMD_DONE 8
  67. struct litex_mmc_host {
  68. struct mmc_host *mmc;
  69. void __iomem *sdphy;
  70. void __iomem *sdcore;
  71. void __iomem *sdreader;
  72. void __iomem *sdwriter;
  73. void __iomem *sdirq;
  74. void *buffer;
  75. size_t buf_size;
  76. dma_addr_t dma;
  77. struct completion cmd_done;
  78. int irq;
  79. unsigned int ref_clk;
  80. unsigned int sd_clk;
  81. u32 resp[4];
  82. u16 rca;
  83. bool is_bus_width_set;
  84. bool app_cmd;
  85. };
  86. static int litex_mmc_sdcard_wait_done(void __iomem *reg, struct device *dev)
  87. {
  88. u8 evt;
  89. int ret;
  90. ret = readx_poll_timeout(litex_read8, reg, evt, evt & SD_BIT_DONE,
  91. SD_SLEEP_US, SD_TIMEOUT_US);
  92. if (ret)
  93. return ret;
  94. if (evt == SD_BIT_DONE)
  95. return 0;
  96. if (evt & SD_BIT_WR_ERR)
  97. return -EIO;
  98. if (evt & SD_BIT_TIMEOUT)
  99. return -ETIMEDOUT;
  100. if (evt & SD_BIT_CRC_ERR)
  101. return -EILSEQ;
  102. dev_err(dev, "%s: unknown error (evt=%x)\n", __func__, evt);
  103. return -EINVAL;
  104. }
  105. static int litex_mmc_send_cmd(struct litex_mmc_host *host,
  106. u8 cmd, u32 arg, u8 response_len, u8 transfer)
  107. {
  108. struct device *dev = mmc_dev(host->mmc);
  109. void __iomem *reg;
  110. int ret;
  111. u8 evt;
  112. litex_write32(host->sdcore + LITEX_CORE_CMDARG, arg);
  113. litex_write32(host->sdcore + LITEX_CORE_CMDCMD,
  114. cmd << 8 | transfer << 5 | response_len);
  115. litex_write8(host->sdcore + LITEX_CORE_CMDSND, 1);
  116. /*
  117. * Wait for an interrupt if we have an interrupt and either there is
  118. * data to be transferred, or if the card can report busy via DAT0.
  119. */
  120. if (host->irq > 0 &&
  121. (transfer != SD_CTL_DATA_XFER_NONE ||
  122. response_len == SD_CTL_RESP_SHORT_BUSY)) {
  123. reinit_completion(&host->cmd_done);
  124. litex_write32(host->sdirq + LITEX_IRQ_ENABLE,
  125. SDIRQ_CMD_DONE | SDIRQ_CARD_DETECT);
  126. wait_for_completion(&host->cmd_done);
  127. }
  128. ret = litex_mmc_sdcard_wait_done(host->sdcore + LITEX_CORE_CMDEVT, dev);
  129. if (ret) {
  130. dev_err(dev, "Command (cmd %d) error, status %d\n", cmd, ret);
  131. return ret;
  132. }
  133. if (response_len != SD_CTL_RESP_NONE) {
  134. /*
  135. * NOTE: this matches the semantics of litex_read32()
  136. * regardless of underlying arch endianness!
  137. */
  138. memcpy_fromio(host->resp,
  139. host->sdcore + LITEX_CORE_CMDRSP, 0x10);
  140. }
  141. if (!host->app_cmd && cmd == SD_SEND_RELATIVE_ADDR)
  142. host->rca = (host->resp[3] >> 16);
  143. host->app_cmd = (cmd == MMC_APP_CMD);
  144. if (transfer == SD_CTL_DATA_XFER_NONE)
  145. return ret; /* OK from prior litex_mmc_sdcard_wait_done() */
  146. ret = litex_mmc_sdcard_wait_done(host->sdcore + LITEX_CORE_DATEVT, dev);
  147. if (ret) {
  148. dev_err(dev, "Data xfer (cmd %d) error, status %d\n", cmd, ret);
  149. return ret;
  150. }
  151. /* Wait for completion of (read or write) DMA transfer */
  152. reg = (transfer == SD_CTL_DATA_XFER_READ) ?
  153. host->sdreader + LITEX_BLK2MEM_DONE :
  154. host->sdwriter + LITEX_MEM2BLK_DONE;
  155. ret = readx_poll_timeout(litex_read8, reg, evt, evt & SD_BIT_DONE,
  156. SD_SLEEP_US, SD_TIMEOUT_US);
  157. if (ret)
  158. dev_err(dev, "DMA timeout (cmd %d)\n", cmd);
  159. return ret;
  160. }
  161. static int litex_mmc_send_app_cmd(struct litex_mmc_host *host)
  162. {
  163. return litex_mmc_send_cmd(host, MMC_APP_CMD, host->rca << 16,
  164. SD_CTL_RESP_SHORT, SD_CTL_DATA_XFER_NONE);
  165. }
  166. static int litex_mmc_send_set_bus_w_cmd(struct litex_mmc_host *host, u32 width)
  167. {
  168. return litex_mmc_send_cmd(host, SD_APP_SET_BUS_WIDTH, width,
  169. SD_CTL_RESP_SHORT, SD_CTL_DATA_XFER_NONE);
  170. }
  171. static int litex_mmc_set_bus_width(struct litex_mmc_host *host)
  172. {
  173. bool app_cmd_sent;
  174. int ret;
  175. if (host->is_bus_width_set)
  176. return 0;
  177. /* Ensure 'app_cmd' precedes 'app_set_bus_width_cmd' */
  178. app_cmd_sent = host->app_cmd; /* was preceding command app_cmd? */
  179. if (!app_cmd_sent) {
  180. ret = litex_mmc_send_app_cmd(host);
  181. if (ret)
  182. return ret;
  183. }
  184. /* LiteSDCard only supports 4-bit bus width */
  185. ret = litex_mmc_send_set_bus_w_cmd(host, MMC_BUS_WIDTH_4);
  186. if (ret)
  187. return ret;
  188. /* Re-send 'app_cmd' if necessary */
  189. if (app_cmd_sent) {
  190. ret = litex_mmc_send_app_cmd(host);
  191. if (ret)
  192. return ret;
  193. }
  194. host->is_bus_width_set = true;
  195. return 0;
  196. }
  197. static int litex_mmc_get_cd(struct mmc_host *mmc)
  198. {
  199. struct litex_mmc_host *host = mmc_priv(mmc);
  200. int ret;
  201. if (!mmc_card_is_removable(mmc))
  202. return 1;
  203. ret = !litex_read8(host->sdphy + LITEX_PHY_CARDDETECT);
  204. if (ret)
  205. return ret;
  206. /* Ensure bus width will be set (again) upon card (re)insertion */
  207. host->is_bus_width_set = false;
  208. return 0;
  209. }
  210. static irqreturn_t litex_mmc_interrupt(int irq, void *arg)
  211. {
  212. struct mmc_host *mmc = arg;
  213. struct litex_mmc_host *host = mmc_priv(mmc);
  214. u32 pending = litex_read32(host->sdirq + LITEX_IRQ_PENDING);
  215. irqreturn_t ret = IRQ_NONE;
  216. /* Check for card change interrupt */
  217. if (pending & SDIRQ_CARD_DETECT) {
  218. litex_write32(host->sdirq + LITEX_IRQ_PENDING,
  219. SDIRQ_CARD_DETECT);
  220. mmc_detect_change(mmc, msecs_to_jiffies(10));
  221. ret = IRQ_HANDLED;
  222. }
  223. /* Check for command completed */
  224. if (pending & SDIRQ_CMD_DONE) {
  225. /* Disable it so it doesn't keep interrupting */
  226. litex_write32(host->sdirq + LITEX_IRQ_ENABLE,
  227. SDIRQ_CARD_DETECT);
  228. complete(&host->cmd_done);
  229. ret = IRQ_HANDLED;
  230. }
  231. return ret;
  232. }
  233. static u32 litex_mmc_response_len(struct mmc_command *cmd)
  234. {
  235. if (cmd->flags & MMC_RSP_136)
  236. return SD_CTL_RESP_LONG;
  237. if (!(cmd->flags & MMC_RSP_PRESENT))
  238. return SD_CTL_RESP_NONE;
  239. if (cmd->flags & MMC_RSP_BUSY)
  240. return SD_CTL_RESP_SHORT_BUSY;
  241. return SD_CTL_RESP_SHORT;
  242. }
  243. static void litex_mmc_do_dma(struct litex_mmc_host *host, struct mmc_data *data,
  244. unsigned int *len, bool *direct, u8 *transfer)
  245. {
  246. struct device *dev = mmc_dev(host->mmc);
  247. dma_addr_t dma;
  248. int sg_count;
  249. /*
  250. * Try to DMA directly to/from the data buffer.
  251. * We can do that if the buffer can be mapped for DMA
  252. * in one contiguous chunk.
  253. */
  254. dma = host->dma;
  255. *len = data->blksz * data->blocks;
  256. sg_count = dma_map_sg(dev, data->sg, data->sg_len,
  257. mmc_get_dma_dir(data));
  258. if (sg_count == 1) {
  259. dma = sg_dma_address(data->sg);
  260. *len = sg_dma_len(data->sg);
  261. *direct = true;
  262. } else if (*len > host->buf_size)
  263. *len = host->buf_size;
  264. if (data->flags & MMC_DATA_READ) {
  265. litex_write8(host->sdreader + LITEX_BLK2MEM_ENA, 0);
  266. litex_write64(host->sdreader + LITEX_BLK2MEM_BASE, dma);
  267. litex_write32(host->sdreader + LITEX_BLK2MEM_LEN, *len);
  268. litex_write8(host->sdreader + LITEX_BLK2MEM_ENA, 1);
  269. *transfer = SD_CTL_DATA_XFER_READ;
  270. } else if (data->flags & MMC_DATA_WRITE) {
  271. if (!*direct)
  272. sg_copy_to_buffer(data->sg, data->sg_len,
  273. host->buffer, *len);
  274. litex_write8(host->sdwriter + LITEX_MEM2BLK_ENA, 0);
  275. litex_write64(host->sdwriter + LITEX_MEM2BLK_BASE, dma);
  276. litex_write32(host->sdwriter + LITEX_MEM2BLK_LEN, *len);
  277. litex_write8(host->sdwriter + LITEX_MEM2BLK_ENA, 1);
  278. *transfer = SD_CTL_DATA_XFER_WRITE;
  279. } else {
  280. dev_warn(dev, "Data present w/o read or write flag.\n");
  281. /* Continue: set cmd status, mark req done */
  282. }
  283. litex_write16(host->sdcore + LITEX_CORE_BLKLEN, data->blksz);
  284. litex_write32(host->sdcore + LITEX_CORE_BLKCNT, data->blocks);
  285. }
  286. static void litex_mmc_request(struct mmc_host *mmc, struct mmc_request *mrq)
  287. {
  288. struct litex_mmc_host *host = mmc_priv(mmc);
  289. struct device *dev = mmc_dev(mmc);
  290. struct mmc_command *cmd = mrq->cmd;
  291. struct mmc_command *sbc = mrq->sbc;
  292. struct mmc_data *data = mrq->data;
  293. struct mmc_command *stop = mrq->stop;
  294. unsigned int retries = cmd->retries;
  295. unsigned int len = 0;
  296. bool direct = false;
  297. u32 response_len = litex_mmc_response_len(cmd);
  298. u8 transfer = SD_CTL_DATA_XFER_NONE;
  299. /* First check that the card is still there */
  300. if (!litex_mmc_get_cd(mmc)) {
  301. cmd->error = -ENOMEDIUM;
  302. mmc_request_done(mmc, mrq);
  303. return;
  304. }
  305. /* Send set-block-count command if needed */
  306. if (sbc) {
  307. sbc->error = litex_mmc_send_cmd(host, sbc->opcode, sbc->arg,
  308. litex_mmc_response_len(sbc),
  309. SD_CTL_DATA_XFER_NONE);
  310. if (sbc->error) {
  311. host->is_bus_width_set = false;
  312. mmc_request_done(mmc, mrq);
  313. return;
  314. }
  315. }
  316. if (data) {
  317. /*
  318. * LiteSDCard only supports 4-bit bus width; therefore, we MUST
  319. * inject a SET_BUS_WIDTH (acmd6) before the very first data
  320. * transfer, earlier than when the mmc subsystem would normally
  321. * get around to it!
  322. */
  323. cmd->error = litex_mmc_set_bus_width(host);
  324. if (cmd->error) {
  325. dev_err(dev, "Can't set bus width!\n");
  326. mmc_request_done(mmc, mrq);
  327. return;
  328. }
  329. litex_mmc_do_dma(host, data, &len, &direct, &transfer);
  330. }
  331. do {
  332. cmd->error = litex_mmc_send_cmd(host, cmd->opcode, cmd->arg,
  333. response_len, transfer);
  334. } while (cmd->error && retries-- > 0);
  335. if (cmd->error) {
  336. /* Card may be gone; don't assume bus width is still set */
  337. host->is_bus_width_set = false;
  338. }
  339. if (response_len == SD_CTL_RESP_SHORT) {
  340. /* Pull short response fields from appropriate host registers */
  341. cmd->resp[0] = host->resp[3];
  342. cmd->resp[1] = host->resp[2] & 0xFF;
  343. } else if (response_len == SD_CTL_RESP_LONG) {
  344. cmd->resp[0] = host->resp[0];
  345. cmd->resp[1] = host->resp[1];
  346. cmd->resp[2] = host->resp[2];
  347. cmd->resp[3] = host->resp[3];
  348. }
  349. /* Send stop-transmission command if required */
  350. if (stop && (cmd->error || !sbc)) {
  351. stop->error = litex_mmc_send_cmd(host, stop->opcode, stop->arg,
  352. litex_mmc_response_len(stop),
  353. SD_CTL_DATA_XFER_NONE);
  354. if (stop->error)
  355. host->is_bus_width_set = false;
  356. }
  357. if (data) {
  358. dma_unmap_sg(dev, data->sg, data->sg_len,
  359. mmc_get_dma_dir(data));
  360. }
  361. if (!cmd->error && transfer != SD_CTL_DATA_XFER_NONE) {
  362. data->bytes_xfered = min(len, mmc->max_req_size);
  363. if (transfer == SD_CTL_DATA_XFER_READ && !direct) {
  364. sg_copy_from_buffer(data->sg, sg_nents(data->sg),
  365. host->buffer, data->bytes_xfered);
  366. }
  367. }
  368. mmc_request_done(mmc, mrq);
  369. }
  370. static void litex_mmc_setclk(struct litex_mmc_host *host, unsigned int freq)
  371. {
  372. struct device *dev = mmc_dev(host->mmc);
  373. u32 div;
  374. div = freq ? host->ref_clk / freq : 256U;
  375. div = roundup_pow_of_two(div);
  376. div = clamp(div, 2U, 256U);
  377. dev_dbg(dev, "sd_clk_freq=%d: set to %d via div=%d\n",
  378. freq, host->ref_clk / div, div);
  379. litex_write16(host->sdphy + LITEX_PHY_CLOCKERDIV, div);
  380. host->sd_clk = freq;
  381. }
  382. static void litex_mmc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
  383. {
  384. struct litex_mmc_host *host = mmc_priv(mmc);
  385. /*
  386. * NOTE: Ignore any ios->bus_width updates; they occur right after
  387. * the mmc core sends its own acmd6 bus-width change notification,
  388. * which is redundant since we snoop on the command flow and inject
  389. * an early acmd6 before the first data transfer command is sent!
  390. */
  391. /* Update sd_clk */
  392. if (ios->clock != host->sd_clk)
  393. litex_mmc_setclk(host, ios->clock);
  394. }
  395. static const struct mmc_host_ops litex_mmc_ops = {
  396. .get_cd = litex_mmc_get_cd,
  397. .request = litex_mmc_request,
  398. .set_ios = litex_mmc_set_ios,
  399. };
  400. static int litex_mmc_irq_init(struct platform_device *pdev,
  401. struct litex_mmc_host *host)
  402. {
  403. struct device *dev = mmc_dev(host->mmc);
  404. int ret;
  405. ret = platform_get_irq_optional(pdev, 0);
  406. if (ret < 0 && ret != -ENXIO)
  407. return ret;
  408. if (ret > 0)
  409. host->irq = ret;
  410. else {
  411. dev_warn(dev, "Failed to get IRQ, using polling\n");
  412. goto use_polling;
  413. }
  414. host->sdirq = devm_platform_ioremap_resource_byname(pdev, "irq");
  415. if (IS_ERR(host->sdirq))
  416. return PTR_ERR(host->sdirq);
  417. ret = devm_request_irq(dev, host->irq, litex_mmc_interrupt, 0,
  418. "litex-mmc", host->mmc);
  419. if (ret < 0) {
  420. dev_warn(dev, "IRQ request error %d, using polling\n", ret);
  421. goto use_polling;
  422. }
  423. /* Clear & enable card-change interrupts */
  424. litex_write32(host->sdirq + LITEX_IRQ_PENDING, SDIRQ_CARD_DETECT);
  425. litex_write32(host->sdirq + LITEX_IRQ_ENABLE, SDIRQ_CARD_DETECT);
  426. return 0;
  427. use_polling:
  428. host->mmc->caps |= MMC_CAP_NEEDS_POLL;
  429. host->irq = 0;
  430. return 0;
  431. }
  432. static int litex_mmc_probe(struct platform_device *pdev)
  433. {
  434. struct device *dev = &pdev->dev;
  435. struct litex_mmc_host *host;
  436. struct mmc_host *mmc;
  437. struct clk *clk;
  438. int ret;
  439. /*
  440. * NOTE: defaults to max_[req,seg]_size=PAGE_SIZE, max_blk_size=512,
  441. * and max_blk_count accordingly set to 8;
  442. * If for some reason we need to modify max_blk_count, we must also
  443. * re-calculate `max_[req,seg]_size = max_blk_size * max_blk_count;`
  444. */
  445. mmc = devm_mmc_alloc_host(dev, sizeof(*host));
  446. if (!mmc)
  447. return -ENOMEM;
  448. host = mmc_priv(mmc);
  449. host->mmc = mmc;
  450. /* Initialize clock source */
  451. clk = devm_clk_get(dev, NULL);
  452. if (IS_ERR(clk))
  453. return dev_err_probe(dev, PTR_ERR(clk), "can't get clock\n");
  454. host->ref_clk = clk_get_rate(clk);
  455. host->sd_clk = 0;
  456. /*
  457. * LiteSDCard only supports 4-bit bus width; therefore, we MUST inject
  458. * a SET_BUS_WIDTH (acmd6) before the very first data transfer, earlier
  459. * than when the mmc subsystem would normally get around to it!
  460. */
  461. host->is_bus_width_set = false;
  462. host->app_cmd = false;
  463. /* LiteSDCard can support 64-bit DMA addressing */
  464. ret = dma_set_mask_and_coherent(dev, DMA_BIT_MASK(64));
  465. if (ret)
  466. return ret;
  467. host->buf_size = mmc->max_req_size * 2;
  468. host->buffer = dmam_alloc_coherent(dev, host->buf_size,
  469. &host->dma, GFP_KERNEL);
  470. if (host->buffer == NULL)
  471. return -ENOMEM;
  472. host->sdphy = devm_platform_ioremap_resource_byname(pdev, "phy");
  473. if (IS_ERR(host->sdphy))
  474. return PTR_ERR(host->sdphy);
  475. host->sdcore = devm_platform_ioremap_resource_byname(pdev, "core");
  476. if (IS_ERR(host->sdcore))
  477. return PTR_ERR(host->sdcore);
  478. host->sdreader = devm_platform_ioremap_resource_byname(pdev, "reader");
  479. if (IS_ERR(host->sdreader))
  480. return PTR_ERR(host->sdreader);
  481. host->sdwriter = devm_platform_ioremap_resource_byname(pdev, "writer");
  482. if (IS_ERR(host->sdwriter))
  483. return PTR_ERR(host->sdwriter);
  484. /* Ensure DMA bus masters are disabled */
  485. litex_write8(host->sdreader + LITEX_BLK2MEM_ENA, 0);
  486. litex_write8(host->sdwriter + LITEX_MEM2BLK_ENA, 0);
  487. init_completion(&host->cmd_done);
  488. ret = litex_mmc_irq_init(pdev, host);
  489. if (ret)
  490. return ret;
  491. mmc->ops = &litex_mmc_ops;
  492. ret = mmc_regulator_get_supply(mmc);
  493. if (ret || mmc->ocr_avail == 0) {
  494. dev_warn(dev, "can't get voltage, defaulting to 3.3V\n");
  495. mmc->ocr_avail = MMC_VDD_32_33 | MMC_VDD_33_34;
  496. }
  497. /*
  498. * Set default sd_clk frequency range based on empirical observations
  499. * of LiteSDCard gateware behavior on typical SDCard media
  500. */
  501. mmc->f_min = 12.5e6;
  502. mmc->f_max = 50e6;
  503. ret = mmc_of_parse(mmc);
  504. if (ret)
  505. return ret;
  506. /* Force 4-bit bus_width (only width supported by hardware) */
  507. mmc->caps &= ~MMC_CAP_8_BIT_DATA;
  508. mmc->caps |= MMC_CAP_4_BIT_DATA;
  509. /* Set default capabilities */
  510. mmc->caps |= MMC_CAP_WAIT_WHILE_BUSY |
  511. MMC_CAP_DRIVER_TYPE_D |
  512. MMC_CAP_CMD23;
  513. mmc->caps2 |= MMC_CAP2_NO_WRITE_PROTECT |
  514. MMC_CAP2_NO_SDIO |
  515. MMC_CAP2_NO_MMC;
  516. platform_set_drvdata(pdev, host);
  517. ret = mmc_add_host(mmc);
  518. if (ret)
  519. return ret;
  520. dev_info(dev, "LiteX MMC controller initialized.\n");
  521. return 0;
  522. }
  523. static void litex_mmc_remove(struct platform_device *pdev)
  524. {
  525. struct litex_mmc_host *host = platform_get_drvdata(pdev);
  526. mmc_remove_host(host->mmc);
  527. }
  528. static const struct of_device_id litex_match[] = {
  529. { .compatible = "litex,mmc" },
  530. { }
  531. };
  532. MODULE_DEVICE_TABLE(of, litex_match);
  533. static struct platform_driver litex_mmc_driver = {
  534. .probe = litex_mmc_probe,
  535. .remove = litex_mmc_remove,
  536. .driver = {
  537. .name = "litex-mmc",
  538. .of_match_table = litex_match,
  539. .probe_type = PROBE_PREFER_ASYNCHRONOUS,
  540. },
  541. };
  542. module_platform_driver(litex_mmc_driver);
  543. MODULE_DESCRIPTION("LiteX SDCard driver");
  544. MODULE_AUTHOR("Antmicro <contact@antmicro.com>");
  545. MODULE_AUTHOR("Kamil Rakoczy <krakoczy@antmicro.com>");
  546. MODULE_AUTHOR("Maciej Dudek <mdudek@internships.antmicro.com>");
  547. MODULE_AUTHOR("Paul Mackerras <paulus@ozlabs.org>");
  548. MODULE_AUTHOR("Gabriel Somlo <gsomlo@gmail.com>");
  549. MODULE_LICENSE("GPL v2");