1 // SPDX-License-Identifier: GPL-2.0 2 /* 3 * Copyright (C) 2013-2014 Renesas Electronics Europe Ltd. 4 * Author: Guennadi Liakhovetski <g.liakhovetski@gmx.de> 5 */ 6 7 #include <linux/clk.h> 8 #include <linux/delay.h> 9 #include <linux/device.h> 10 #include <linux/dma-mapping.h> 11 #include <linux/dmaengine.h> 12 #include <linux/highmem.h> 13 #include <linux/interrupt.h> 14 #include <linux/io.h> 15 #include <linux/log2.h> 16 #include <linux/mmc/host.h> 17 #include <linux/mmc/mmc.h> 18 #include <linux/mmc/sd.h> 19 #include <linux/mmc/sdio.h> 20 #include <linux/module.h> 21 #include <linux/pagemap.h> 22 #include <linux/pinctrl/consumer.h> 23 #include <linux/platform_device.h> 24 #include <linux/scatterlist.h> 25 #include <linux/string.h> 26 #include <linux/time.h> 27 #include <linux/virtio.h> 28 #include <linux/workqueue.h> 29 30 #define USDHI6_SD_CMD 0x0000 31 #define USDHI6_SD_PORT_SEL 0x0004 32 #define USDHI6_SD_ARG 0x0008 33 #define USDHI6_SD_STOP 0x0010 34 #define USDHI6_SD_SECCNT 0x0014 35 #define USDHI6_SD_RSP10 0x0018 36 #define USDHI6_SD_RSP32 0x0020 37 #define USDHI6_SD_RSP54 0x0028 38 #define USDHI6_SD_RSP76 0x0030 39 #define USDHI6_SD_INFO1 0x0038 40 #define USDHI6_SD_INFO2 0x003c 41 #define USDHI6_SD_INFO1_MASK 0x0040 42 #define USDHI6_SD_INFO2_MASK 0x0044 43 #define USDHI6_SD_CLK_CTRL 0x0048 44 #define USDHI6_SD_SIZE 0x004c 45 #define USDHI6_SD_OPTION 0x0050 46 #define USDHI6_SD_ERR_STS1 0x0058 47 #define USDHI6_SD_ERR_STS2 0x005c 48 #define USDHI6_SD_BUF0 0x0060 49 #define USDHI6_SDIO_MODE 0x0068 50 #define USDHI6_SDIO_INFO1 0x006c 51 #define USDHI6_SDIO_INFO1_MASK 0x0070 52 #define USDHI6_CC_EXT_MODE 0x01b0 53 #define USDHI6_SOFT_RST 0x01c0 54 #define USDHI6_VERSION 0x01c4 55 #define USDHI6_HOST_MODE 0x01c8 56 #define USDHI6_SDIF_MODE 0x01cc 57 58 #define USDHI6_SD_CMD_APP 0x0040 59 #define USDHI6_SD_CMD_MODE_RSP_AUTO 0x0000 60 #define USDHI6_SD_CMD_MODE_RSP_NONE 0x0300 61 #define USDHI6_SD_CMD_MODE_RSP_R1 0x0400 /* Also R5, R6, R7 */ 62 #define USDHI6_SD_CMD_MODE_RSP_R1B 0x0500 /* R1b */ 63 #define USDHI6_SD_CMD_MODE_RSP_R2 0x0600 64 #define USDHI6_SD_CMD_MODE_RSP_R3 0x0700 /* Also R4 */ 65 #define USDHI6_SD_CMD_DATA 0x0800 66 #define USDHI6_SD_CMD_READ 0x1000 67 #define USDHI6_SD_CMD_MULTI 0x2000 68 #define USDHI6_SD_CMD_CMD12_AUTO_OFF 0x4000 69 70 #define USDHI6_CC_EXT_MODE_SDRW BIT(1) 71 72 #define USDHI6_SD_INFO1_RSP_END BIT(0) 73 #define USDHI6_SD_INFO1_ACCESS_END BIT(2) 74 #define USDHI6_SD_INFO1_CARD_OUT BIT(3) 75 #define USDHI6_SD_INFO1_CARD_IN BIT(4) 76 #define USDHI6_SD_INFO1_CD BIT(5) 77 #define USDHI6_SD_INFO1_WP BIT(7) 78 #define USDHI6_SD_INFO1_D3_CARD_OUT BIT(8) 79 #define USDHI6_SD_INFO1_D3_CARD_IN BIT(9) 80 81 #define USDHI6_SD_INFO2_CMD_ERR BIT(0) 82 #define USDHI6_SD_INFO2_CRC_ERR BIT(1) 83 #define USDHI6_SD_INFO2_END_ERR BIT(2) 84 #define USDHI6_SD_INFO2_TOUT BIT(3) 85 #define USDHI6_SD_INFO2_IWA_ERR BIT(4) 86 #define USDHI6_SD_INFO2_IRA_ERR BIT(5) 87 #define USDHI6_SD_INFO2_RSP_TOUT BIT(6) 88 #define USDHI6_SD_INFO2_SDDAT0 BIT(7) 89 #define USDHI6_SD_INFO2_BRE BIT(8) 90 #define USDHI6_SD_INFO2_BWE BIT(9) 91 #define USDHI6_SD_INFO2_SCLKDIVEN BIT(13) 92 #define USDHI6_SD_INFO2_CBSY BIT(14) 93 #define USDHI6_SD_INFO2_ILA BIT(15) 94 95 #define USDHI6_SD_INFO1_CARD_INSERT (USDHI6_SD_INFO1_CARD_IN | USDHI6_SD_INFO1_D3_CARD_IN) 96 #define USDHI6_SD_INFO1_CARD_EJECT (USDHI6_SD_INFO1_CARD_OUT | USDHI6_SD_INFO1_D3_CARD_OUT) 97 #define USDHI6_SD_INFO1_CARD (USDHI6_SD_INFO1_CARD_INSERT | USDHI6_SD_INFO1_CARD_EJECT) 98 #define USDHI6_SD_INFO1_CARD_CD (USDHI6_SD_INFO1_CARD_IN | USDHI6_SD_INFO1_CARD_OUT) 99 100 #define USDHI6_SD_INFO2_ERR (USDHI6_SD_INFO2_CMD_ERR | \ 101 USDHI6_SD_INFO2_CRC_ERR | USDHI6_SD_INFO2_END_ERR | \ 102 USDHI6_SD_INFO2_TOUT | USDHI6_SD_INFO2_IWA_ERR | \ 103 USDHI6_SD_INFO2_IRA_ERR | USDHI6_SD_INFO2_RSP_TOUT | \ 104 USDHI6_SD_INFO2_ILA) 105 106 #define USDHI6_SD_INFO1_IRQ (USDHI6_SD_INFO1_RSP_END | USDHI6_SD_INFO1_ACCESS_END | \ 107 USDHI6_SD_INFO1_CARD) 108 109 #define USDHI6_SD_INFO2_IRQ (USDHI6_SD_INFO2_ERR | USDHI6_SD_INFO2_BRE | \ 110 USDHI6_SD_INFO2_BWE | 0x0800 | USDHI6_SD_INFO2_ILA) 111 112 #define USDHI6_SD_CLK_CTRL_SCLKEN BIT(8) 113 114 #define USDHI6_SD_STOP_STP BIT(0) 115 #define USDHI6_SD_STOP_SEC BIT(8) 116 117 #define USDHI6_SDIO_INFO1_IOIRQ BIT(0) 118 #define USDHI6_SDIO_INFO1_EXPUB52 BIT(14) 119 #define USDHI6_SDIO_INFO1_EXWT BIT(15) 120 121 #define USDHI6_SD_ERR_STS1_CRC_NO_ERROR BIT(13) 122 123 #define USDHI6_SOFT_RST_RESERVED (BIT(1) | BIT(2)) 124 #define USDHI6_SOFT_RST_RESET BIT(0) 125 126 #define USDHI6_SD_OPTION_TIMEOUT_SHIFT 4 127 #define USDHI6_SD_OPTION_TIMEOUT_MASK (0xf << USDHI6_SD_OPTION_TIMEOUT_SHIFT) 128 #define USDHI6_SD_OPTION_WIDTH_1 BIT(15) 129 130 #define USDHI6_SD_PORT_SEL_PORTS_SHIFT 8 131 132 #define USDHI6_SD_CLK_CTRL_DIV_MASK 0xff 133 134 #define USDHI6_SDIO_INFO1_IRQ (USDHI6_SDIO_INFO1_IOIRQ | 3 | \ 135 USDHI6_SDIO_INFO1_EXPUB52 | USDHI6_SDIO_INFO1_EXWT) 136 137 #define USDHI6_MIN_DMA 64 138 139 enum usdhi6_wait_for { 140 USDHI6_WAIT_FOR_REQUEST, 141 USDHI6_WAIT_FOR_CMD, 142 USDHI6_WAIT_FOR_MREAD, 143 USDHI6_WAIT_FOR_MWRITE, 144 USDHI6_WAIT_FOR_READ, 145 USDHI6_WAIT_FOR_WRITE, 146 USDHI6_WAIT_FOR_DATA_END, 147 USDHI6_WAIT_FOR_STOP, 148 USDHI6_WAIT_FOR_DMA, 149 }; 150 151 struct usdhi6_page { 152 struct page *page; 153 void *mapped; /* mapped page */ 154 }; 155 156 struct usdhi6_host { 157 struct mmc_host *mmc; 158 struct mmc_request *mrq; 159 void __iomem *base; 160 struct clk *clk; 161 162 /* SG memory handling */ 163 164 /* Common for multiple and single block requests */ 165 struct usdhi6_page pg; /* current page from an SG */ 166 void *blk_page; /* either a mapped page, or the bounce buffer */ 167 size_t offset; /* offset within a page, including sg->offset */ 168 169 /* Blocks, crossing a page boundary */ 170 size_t head_len; 171 struct usdhi6_page head_pg; 172 173 /* A bounce buffer for unaligned blocks or blocks, crossing a page boundary */ 174 struct scatterlist bounce_sg; 175 u8 bounce_buf[512]; 176 177 /* Multiple block requests only */ 178 struct scatterlist *sg; /* current SG segment */ 179 int page_idx; /* page index within an SG segment */ 180 181 enum usdhi6_wait_for wait; 182 u32 status_mask; 183 u32 status2_mask; 184 u32 sdio_mask; 185 u32 io_error; 186 u32 irq_status; 187 unsigned long imclk; 188 unsigned long rate; 189 bool app_cmd; 190 191 /* Timeout handling */ 192 struct delayed_work timeout_work; 193 unsigned long timeout; 194 195 /* DMA support */ 196 struct dma_chan *chan_rx; 197 struct dma_chan *chan_tx; 198 bool dma_active; 199 200 /* Pin control */ 201 struct pinctrl *pinctrl; 202 struct pinctrl_state *pins_default; 203 struct pinctrl_state *pins_uhs; 204 }; 205 206 /* I/O primitives */ 207 208 static void usdhi6_write(struct usdhi6_host *host, u32 reg, u32 data) 209 { 210 iowrite32(data, host->base + reg); 211 dev_vdbg(mmc_dev(host->mmc), "%s(0x%p + 0x%x) = 0x%x\n", __func__, 212 host->base, reg, data); 213 } 214 215 static void usdhi6_write16(struct usdhi6_host *host, u32 reg, u16 data) 216 { 217 iowrite16(data, host->base + reg); 218 dev_vdbg(mmc_dev(host->mmc), "%s(0x%p + 0x%x) = 0x%x\n", __func__, 219 host->base, reg, data); 220 } 221 222 static u32 usdhi6_read(struct usdhi6_host *host, u32 reg) 223 { 224 u32 data = ioread32(host->base + reg); 225 dev_vdbg(mmc_dev(host->mmc), "%s(0x%p + 0x%x) = 0x%x\n", __func__, 226 host->base, reg, data); 227 return data; 228 } 229 230 static u16 usdhi6_read16(struct usdhi6_host *host, u32 reg) 231 { 232 u16 data = ioread16(host->base + reg); 233 dev_vdbg(mmc_dev(host->mmc), "%s(0x%p + 0x%x) = 0x%x\n", __func__, 234 host->base, reg, data); 235 return data; 236 } 237 238 static void usdhi6_irq_enable(struct usdhi6_host *host, u32 info1, u32 info2) 239 { 240 host->status_mask = USDHI6_SD_INFO1_IRQ & ~info1; 241 host->status2_mask = USDHI6_SD_INFO2_IRQ & ~info2; 242 usdhi6_write(host, USDHI6_SD_INFO1_MASK, host->status_mask); 243 usdhi6_write(host, USDHI6_SD_INFO2_MASK, host->status2_mask); 244 } 245 246 static void usdhi6_wait_for_resp(struct usdhi6_host *host) 247 { 248 usdhi6_irq_enable(host, USDHI6_SD_INFO1_RSP_END | 249 USDHI6_SD_INFO1_ACCESS_END | USDHI6_SD_INFO1_CARD_CD, 250 USDHI6_SD_INFO2_ERR); 251 } 252 253 static void usdhi6_wait_for_brwe(struct usdhi6_host *host, bool read) 254 { 255 usdhi6_irq_enable(host, USDHI6_SD_INFO1_ACCESS_END | 256 USDHI6_SD_INFO1_CARD_CD, USDHI6_SD_INFO2_ERR | 257 (read ? USDHI6_SD_INFO2_BRE : USDHI6_SD_INFO2_BWE)); 258 } 259 260 static void usdhi6_only_cd(struct usdhi6_host *host) 261 { 262 /* Mask all except card hotplug */ 263 usdhi6_irq_enable(host, USDHI6_SD_INFO1_CARD_CD, 0); 264 } 265 266 static void usdhi6_mask_all(struct usdhi6_host *host) 267 { 268 usdhi6_irq_enable(host, 0, 0); 269 } 270 271 static int usdhi6_error_code(struct usdhi6_host *host) 272 { 273 u32 err; 274 275 usdhi6_write(host, USDHI6_SD_STOP, USDHI6_SD_STOP_STP); 276 277 if (host->io_error & 278 (USDHI6_SD_INFO2_RSP_TOUT | USDHI6_SD_INFO2_TOUT)) { 279 u32 rsp54 = usdhi6_read(host, USDHI6_SD_RSP54); 280 int opc = host->mrq ? host->mrq->cmd->opcode : -1; 281 282 err = usdhi6_read(host, USDHI6_SD_ERR_STS2); 283 /* Response timeout is often normal, don't spam the log */ 284 if (host->wait == USDHI6_WAIT_FOR_CMD) 285 dev_dbg(mmc_dev(host->mmc), 286 "T-out sts 0x%x, resp 0x%x, state %u, CMD%d\n", 287 err, rsp54, host->wait, opc); 288 else 289 dev_warn(mmc_dev(host->mmc), 290 "T-out sts 0x%x, resp 0x%x, state %u, CMD%d\n", 291 err, rsp54, host->wait, opc); 292 return -ETIMEDOUT; 293 } 294 295 err = usdhi6_read(host, USDHI6_SD_ERR_STS1); 296 if (err != USDHI6_SD_ERR_STS1_CRC_NO_ERROR) 297 dev_warn(mmc_dev(host->mmc), "Err sts 0x%x, state %u, CMD%d\n", 298 err, host->wait, host->mrq ? host->mrq->cmd->opcode : -1); 299 if (host->io_error & USDHI6_SD_INFO2_ILA) 300 return -EILSEQ; 301 302 return -EIO; 303 } 304 305 /* Scatter-Gather management */ 306 307 /* 308 * In PIO mode we have to map each page separately, using kmap(). That way 309 * adjacent pages are mapped to non-adjacent virtual addresses. That's why we 310 * have to use a bounce buffer for blocks, crossing page boundaries. Such blocks 311 * have been observed with an SDIO WiFi card (b43 driver). 312 */ 313 static void usdhi6_blk_bounce(struct usdhi6_host *host, 314 struct scatterlist *sg) 315 { 316 struct mmc_data *data = host->mrq->data; 317 size_t blk_head = host->head_len; 318 319 dev_dbg(mmc_dev(host->mmc), "%s(): CMD%u of %u SG: %ux%u @ 0x%x\n", 320 __func__, host->mrq->cmd->opcode, data->sg_len, 321 data->blksz, data->blocks, sg->offset); 322 323 host->head_pg.page = host->pg.page; 324 host->head_pg.mapped = host->pg.mapped; 325 host->pg.page = nth_page(host->pg.page, 1); 326 host->pg.mapped = kmap(host->pg.page); 327 328 host->blk_page = host->bounce_buf; 329 host->offset = 0; 330 331 if (data->flags & MMC_DATA_READ) 332 return; 333 334 memcpy(host->bounce_buf, host->head_pg.mapped + PAGE_SIZE - blk_head, 335 blk_head); 336 memcpy(host->bounce_buf + blk_head, host->pg.mapped, 337 data->blksz - blk_head); 338 } 339 340 /* Only called for multiple block IO */ 341 static void usdhi6_sg_prep(struct usdhi6_host *host) 342 { 343 struct mmc_request *mrq = host->mrq; 344 struct mmc_data *data = mrq->data; 345 346 usdhi6_write(host, USDHI6_SD_SECCNT, data->blocks); 347 348 host->sg = data->sg; 349 /* TODO: if we always map, this is redundant */ 350 host->offset = host->sg->offset; 351 } 352 353 /* Map the first page in an SG segment: common for multiple and single block IO */ 354 static void *usdhi6_sg_map(struct usdhi6_host *host) 355 { 356 struct mmc_data *data = host->mrq->data; 357 struct scatterlist *sg = data->sg_len > 1 ? host->sg : data->sg; 358 size_t head = PAGE_SIZE - sg->offset; 359 size_t blk_head = head % data->blksz; 360 361 WARN(host->pg.page, "%p not properly unmapped!\n", host->pg.page); 362 if (WARN(sg_dma_len(sg) % data->blksz, 363 "SG size %u isn't a multiple of block size %u\n", 364 sg_dma_len(sg), data->blksz)) 365 return NULL; 366 367 host->pg.page = sg_page(sg); 368 host->pg.mapped = kmap(host->pg.page); 369 host->offset = sg->offset; 370 371 /* 372 * Block size must be a power of 2 for multi-block transfers, 373 * therefore blk_head is equal for all pages in this SG 374 */ 375 host->head_len = blk_head; 376 377 if (head < data->blksz) 378 /* 379 * The first block in the SG crosses a page boundary. 380 * Max blksz = 512, so blocks can only span 2 pages 381 */ 382 usdhi6_blk_bounce(host, sg); 383 else 384 host->blk_page = host->pg.mapped; 385 386 dev_dbg(mmc_dev(host->mmc), "Mapped %p (%lx) at %p + %u for CMD%u @ 0x%p\n", 387 host->pg.page, page_to_pfn(host->pg.page), host->pg.mapped, 388 sg->offset, host->mrq->cmd->opcode, host->mrq); 389 390 return host->blk_page + host->offset; 391 } 392 393 /* Unmap the current page: common for multiple and single block IO */ 394 static void usdhi6_sg_unmap(struct usdhi6_host *host, bool force) 395 { 396 struct mmc_data *data = host->mrq->data; 397 struct page *page = host->head_pg.page; 398 399 if (page) { 400 /* Previous block was cross-page boundary */ 401 struct scatterlist *sg = data->sg_len > 1 ? 402 host->sg : data->sg; 403 size_t blk_head = host->head_len; 404 405 if (!data->error && data->flags & MMC_DATA_READ) { 406 memcpy(host->head_pg.mapped + PAGE_SIZE - blk_head, 407 host->bounce_buf, blk_head); 408 memcpy(host->pg.mapped, host->bounce_buf + blk_head, 409 data->blksz - blk_head); 410 } 411 412 flush_dcache_page(page); 413 kunmap(page); 414 415 host->head_pg.page = NULL; 416 417 if (!force && sg_dma_len(sg) + sg->offset > 418 (host->page_idx << PAGE_SHIFT) + data->blksz - blk_head) 419 /* More blocks in this SG, don't unmap the next page */ 420 return; 421 } 422 423 page = host->pg.page; 424 if (!page) 425 return; 426 427 flush_dcache_page(page); 428 kunmap(page); 429 430 host->pg.page = NULL; 431 } 432 433 /* Called from MMC_WRITE_MULTIPLE_BLOCK or MMC_READ_MULTIPLE_BLOCK */ 434 static void usdhi6_sg_advance(struct usdhi6_host *host) 435 { 436 struct mmc_data *data = host->mrq->data; 437 size_t done, total; 438 439 /* New offset: set at the end of the previous block */ 440 if (host->head_pg.page) { 441 /* Finished a cross-page block, jump to the new page */ 442 host->page_idx++; 443 host->offset = data->blksz - host->head_len; 444 host->blk_page = host->pg.mapped; 445 usdhi6_sg_unmap(host, false); 446 } else { 447 host->offset += data->blksz; 448 /* The completed block didn't cross a page boundary */ 449 if (host->offset == PAGE_SIZE) { 450 /* If required, we'll map the page below */ 451 host->offset = 0; 452 host->page_idx++; 453 } 454 } 455 456 /* 457 * Now host->blk_page + host->offset point at the end of our last block 458 * and host->page_idx is the index of the page, in which our new block 459 * is located, if any 460 */ 461 462 done = (host->page_idx << PAGE_SHIFT) + host->offset; 463 total = host->sg->offset + sg_dma_len(host->sg); 464 465 dev_dbg(mmc_dev(host->mmc), "%s(): %zu of %zu @ %zu\n", __func__, 466 done, total, host->offset); 467 468 if (done < total && host->offset) { 469 /* More blocks in this page */ 470 if (host->offset + data->blksz > PAGE_SIZE) 471 /* We approached at a block, that spans 2 pages */ 472 usdhi6_blk_bounce(host, host->sg); 473 474 return; 475 } 476 477 /* Finished current page or an SG segment */ 478 usdhi6_sg_unmap(host, false); 479 480 if (done == total) { 481 /* 482 * End of an SG segment or the complete SG: jump to the next 483 * segment, we'll map it later in usdhi6_blk_read() or 484 * usdhi6_blk_write() 485 */ 486 struct scatterlist *next = sg_next(host->sg); 487 488 host->page_idx = 0; 489 490 if (!next) 491 host->wait = USDHI6_WAIT_FOR_DATA_END; 492 host->sg = next; 493 494 if (WARN(next && sg_dma_len(next) % data->blksz, 495 "SG size %u isn't a multiple of block size %u\n", 496 sg_dma_len(next), data->blksz)) 497 data->error = -EINVAL; 498 499 return; 500 } 501 502 /* We cannot get here after crossing a page border */ 503 504 /* Next page in the same SG */ 505 host->pg.page = nth_page(sg_page(host->sg), host->page_idx); 506 host->pg.mapped = kmap(host->pg.page); 507 host->blk_page = host->pg.mapped; 508 509 dev_dbg(mmc_dev(host->mmc), "Mapped %p (%lx) at %p for CMD%u @ 0x%p\n", 510 host->pg.page, page_to_pfn(host->pg.page), host->pg.mapped, 511 host->mrq->cmd->opcode, host->mrq); 512 } 513 514 /* DMA handling */ 515 516 static void usdhi6_dma_release(struct usdhi6_host *host) 517 { 518 host->dma_active = false; 519 if (host->chan_tx) { 520 struct dma_chan *chan = host->chan_tx; 521 host->chan_tx = NULL; 522 dma_release_channel(chan); 523 } 524 if (host->chan_rx) { 525 struct dma_chan *chan = host->chan_rx; 526 host->chan_rx = NULL; 527 dma_release_channel(chan); 528 } 529 } 530 531 static void usdhi6_dma_stop_unmap(struct usdhi6_host *host) 532 { 533 struct mmc_data *data = host->mrq->data; 534 535 if (!host->dma_active) 536 return; 537 538 usdhi6_write(host, USDHI6_CC_EXT_MODE, 0); 539 host->dma_active = false; 540 541 if (data->flags & MMC_DATA_READ) 542 dma_unmap_sg(host->chan_rx->device->dev, data->sg, 543 data->sg_len, DMA_FROM_DEVICE); 544 else 545 dma_unmap_sg(host->chan_tx->device->dev, data->sg, 546 data->sg_len, DMA_TO_DEVICE); 547 } 548 549 static void usdhi6_dma_complete(void *arg) 550 { 551 struct usdhi6_host *host = arg; 552 struct mmc_request *mrq = host->mrq; 553 554 if (WARN(!mrq || !mrq->data, "%s: NULL data in DMA completion for %p!\n", 555 dev_name(mmc_dev(host->mmc)), mrq)) 556 return; 557 558 dev_dbg(mmc_dev(host->mmc), "%s(): CMD%u DMA completed\n", __func__, 559 mrq->cmd->opcode); 560 561 usdhi6_dma_stop_unmap(host); 562 usdhi6_wait_for_brwe(host, mrq->data->flags & MMC_DATA_READ); 563 } 564 565 static int usdhi6_dma_setup(struct usdhi6_host *host, struct dma_chan *chan, 566 enum dma_transfer_direction dir) 567 { 568 struct mmc_data *data = host->mrq->data; 569 struct scatterlist *sg = data->sg; 570 struct dma_async_tx_descriptor *desc = NULL; 571 dma_cookie_t cookie = -EINVAL; 572 enum dma_data_direction data_dir; 573 int ret; 574 575 switch (dir) { 576 case DMA_MEM_TO_DEV: 577 data_dir = DMA_TO_DEVICE; 578 break; 579 case DMA_DEV_TO_MEM: 580 data_dir = DMA_FROM_DEVICE; 581 break; 582 default: 583 return -EINVAL; 584 } 585 586 ret = dma_map_sg(chan->device->dev, sg, data->sg_len, data_dir); 587 if (ret > 0) { 588 host->dma_active = true; 589 desc = dmaengine_prep_slave_sg(chan, sg, ret, dir, 590 DMA_PREP_INTERRUPT | DMA_CTRL_ACK); 591 } 592 593 if (desc) { 594 desc->callback = usdhi6_dma_complete; 595 desc->callback_param = host; 596 cookie = dmaengine_submit(desc); 597 } 598 599 dev_dbg(mmc_dev(host->mmc), "%s(): mapped %d -> %d, cookie %d @ %p\n", 600 __func__, data->sg_len, ret, cookie, desc); 601 602 if (cookie < 0) { 603 /* DMA failed, fall back to PIO */ 604 if (ret >= 0) 605 ret = cookie; 606 usdhi6_dma_release(host); 607 dev_warn(mmc_dev(host->mmc), 608 "DMA failed: %d, falling back to PIO\n", ret); 609 } 610 611 return cookie; 612 } 613 614 static int usdhi6_dma_start(struct usdhi6_host *host) 615 { 616 if (!host->chan_rx || !host->chan_tx) 617 return -ENODEV; 618 619 if (host->mrq->data->flags & MMC_DATA_READ) 620 return usdhi6_dma_setup(host, host->chan_rx, DMA_DEV_TO_MEM); 621 622 return usdhi6_dma_setup(host, host->chan_tx, DMA_MEM_TO_DEV); 623 } 624 625 static void usdhi6_dma_kill(struct usdhi6_host *host) 626 { 627 struct mmc_data *data = host->mrq->data; 628 629 dev_dbg(mmc_dev(host->mmc), "%s(): SG of %u: %ux%u\n", 630 __func__, data->sg_len, data->blocks, data->blksz); 631 /* Abort DMA */ 632 if (data->flags & MMC_DATA_READ) 633 dmaengine_terminate_all(host->chan_rx); 634 else 635 dmaengine_terminate_all(host->chan_tx); 636 } 637 638 static void usdhi6_dma_check_error(struct usdhi6_host *host) 639 { 640 struct mmc_data *data = host->mrq->data; 641 642 dev_dbg(mmc_dev(host->mmc), "%s(): IO error %d, status 0x%x\n", 643 __func__, host->io_error, usdhi6_read(host, USDHI6_SD_INFO1)); 644 645 if (host->io_error) { 646 data->error = usdhi6_error_code(host); 647 data->bytes_xfered = 0; 648 usdhi6_dma_kill(host); 649 usdhi6_dma_release(host); 650 dev_warn(mmc_dev(host->mmc), 651 "DMA failed: %d, falling back to PIO\n", data->error); 652 return; 653 } 654 655 /* 656 * The datasheet tells us to check a response from the card, whereas 657 * responses only come after the command phase, not after the data 658 * phase. Let's check anyway. 659 */ 660 if (host->irq_status & USDHI6_SD_INFO1_RSP_END) 661 dev_warn(mmc_dev(host->mmc), "Unexpected response received!\n"); 662 } 663 664 static void usdhi6_dma_kick(struct usdhi6_host *host) 665 { 666 if (host->mrq->data->flags & MMC_DATA_READ) 667 dma_async_issue_pending(host->chan_rx); 668 else 669 dma_async_issue_pending(host->chan_tx); 670 } 671 672 static void usdhi6_dma_request(struct usdhi6_host *host, phys_addr_t start) 673 { 674 struct dma_slave_config cfg = { 675 .src_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES, 676 .dst_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES, 677 }; 678 int ret; 679 680 host->chan_tx = dma_request_slave_channel(mmc_dev(host->mmc), "tx"); 681 dev_dbg(mmc_dev(host->mmc), "%s: TX: got channel %p\n", __func__, 682 host->chan_tx); 683 684 if (!host->chan_tx) 685 return; 686 687 cfg.direction = DMA_MEM_TO_DEV; 688 cfg.dst_addr = start + USDHI6_SD_BUF0; 689 cfg.dst_maxburst = 128; /* 128 words * 4 bytes = 512 bytes */ 690 cfg.src_addr = 0; 691 ret = dmaengine_slave_config(host->chan_tx, &cfg); 692 if (ret < 0) 693 goto e_release_tx; 694 695 host->chan_rx = dma_request_slave_channel(mmc_dev(host->mmc), "rx"); 696 dev_dbg(mmc_dev(host->mmc), "%s: RX: got channel %p\n", __func__, 697 host->chan_rx); 698 699 if (!host->chan_rx) 700 goto e_release_tx; 701 702 cfg.direction = DMA_DEV_TO_MEM; 703 cfg.src_addr = cfg.dst_addr; 704 cfg.src_maxburst = 128; /* 128 words * 4 bytes = 512 bytes */ 705 cfg.dst_addr = 0; 706 ret = dmaengine_slave_config(host->chan_rx, &cfg); 707 if (ret < 0) 708 goto e_release_rx; 709 710 return; 711 712 e_release_rx: 713 dma_release_channel(host->chan_rx); 714 host->chan_rx = NULL; 715 e_release_tx: 716 dma_release_channel(host->chan_tx); 717 host->chan_tx = NULL; 718 } 719 720 /* API helpers */ 721 722 static void usdhi6_clk_set(struct usdhi6_host *host, struct mmc_ios *ios) 723 { 724 unsigned long rate = ios->clock; 725 u32 val; 726 unsigned int i; 727 728 for (i = 1000; i; i--) { 729 if (usdhi6_read(host, USDHI6_SD_INFO2) & USDHI6_SD_INFO2_SCLKDIVEN) 730 break; 731 usleep_range(10, 100); 732 } 733 734 if (!i) { 735 dev_err(mmc_dev(host->mmc), "SD bus busy, clock set aborted\n"); 736 return; 737 } 738 739 val = usdhi6_read(host, USDHI6_SD_CLK_CTRL) & ~USDHI6_SD_CLK_CTRL_DIV_MASK; 740 741 if (rate) { 742 unsigned long new_rate; 743 744 if (host->imclk <= rate) { 745 if (ios->timing != MMC_TIMING_UHS_DDR50) { 746 /* Cannot have 1-to-1 clock in DDR mode */ 747 new_rate = host->imclk; 748 val |= 0xff; 749 } else { 750 new_rate = host->imclk / 2; 751 } 752 } else { 753 unsigned long div = 754 roundup_pow_of_two(DIV_ROUND_UP(host->imclk, rate)); 755 val |= div >> 2; 756 new_rate = host->imclk / div; 757 } 758 759 if (host->rate == new_rate) 760 return; 761 762 host->rate = new_rate; 763 764 dev_dbg(mmc_dev(host->mmc), "target %lu, div %u, set %lu\n", 765 rate, (val & 0xff) << 2, new_rate); 766 } 767 768 /* 769 * if old or new rate is equal to input rate, have to switch the clock 770 * off before changing and on after 771 */ 772 if (host->imclk == rate || host->imclk == host->rate || !rate) 773 usdhi6_write(host, USDHI6_SD_CLK_CTRL, 774 val & ~USDHI6_SD_CLK_CTRL_SCLKEN); 775 776 if (!rate) { 777 host->rate = 0; 778 return; 779 } 780 781 usdhi6_write(host, USDHI6_SD_CLK_CTRL, val); 782 783 if (host->imclk == rate || host->imclk == host->rate || 784 !(val & USDHI6_SD_CLK_CTRL_SCLKEN)) 785 usdhi6_write(host, USDHI6_SD_CLK_CTRL, 786 val | USDHI6_SD_CLK_CTRL_SCLKEN); 787 } 788 789 static void usdhi6_set_power(struct usdhi6_host *host, struct mmc_ios *ios) 790 { 791 struct mmc_host *mmc = host->mmc; 792 793 if (!IS_ERR(mmc->supply.vmmc)) 794 /* Errors ignored... */ 795 mmc_regulator_set_ocr(mmc, mmc->supply.vmmc, 796 ios->power_mode ? ios->vdd : 0); 797 } 798 799 static int usdhi6_reset(struct usdhi6_host *host) 800 { 801 int i; 802 803 usdhi6_write(host, USDHI6_SOFT_RST, USDHI6_SOFT_RST_RESERVED); 804 cpu_relax(); 805 usdhi6_write(host, USDHI6_SOFT_RST, USDHI6_SOFT_RST_RESERVED | USDHI6_SOFT_RST_RESET); 806 for (i = 1000; i; i--) 807 if (usdhi6_read(host, USDHI6_SOFT_RST) & USDHI6_SOFT_RST_RESET) 808 break; 809 810 return i ? 0 : -ETIMEDOUT; 811 } 812 813 static void usdhi6_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) 814 { 815 struct usdhi6_host *host = mmc_priv(mmc); 816 u32 option, mode; 817 int ret; 818 819 dev_dbg(mmc_dev(mmc), "%uHz, OCR: %u, power %u, bus-width %u, timing %u\n", 820 ios->clock, ios->vdd, ios->power_mode, ios->bus_width, ios->timing); 821 822 switch (ios->power_mode) { 823 case MMC_POWER_OFF: 824 usdhi6_set_power(host, ios); 825 usdhi6_only_cd(host); 826 break; 827 case MMC_POWER_UP: 828 /* 829 * We only also touch USDHI6_SD_OPTION from .request(), which 830 * cannot race with MMC_POWER_UP 831 */ 832 ret = usdhi6_reset(host); 833 if (ret < 0) { 834 dev_err(mmc_dev(mmc), "Cannot reset the interface!\n"); 835 } else { 836 usdhi6_set_power(host, ios); 837 usdhi6_only_cd(host); 838 } 839 break; 840 case MMC_POWER_ON: 841 option = usdhi6_read(host, USDHI6_SD_OPTION); 842 /* 843 * The eMMC standard only allows 4 or 8 bits in the DDR mode, 844 * the same probably holds for SD cards. We check here anyway, 845 * since the datasheet explicitly requires 4 bits for DDR. 846 */ 847 if (ios->bus_width == MMC_BUS_WIDTH_1) { 848 if (ios->timing == MMC_TIMING_UHS_DDR50) 849 dev_err(mmc_dev(mmc), 850 "4 bits are required for DDR\n"); 851 option |= USDHI6_SD_OPTION_WIDTH_1; 852 mode = 0; 853 } else { 854 option &= ~USDHI6_SD_OPTION_WIDTH_1; 855 mode = ios->timing == MMC_TIMING_UHS_DDR50; 856 } 857 usdhi6_write(host, USDHI6_SD_OPTION, option); 858 usdhi6_write(host, USDHI6_SDIF_MODE, mode); 859 break; 860 } 861 862 if (host->rate != ios->clock) 863 usdhi6_clk_set(host, ios); 864 } 865 866 /* This is data timeout. Response timeout is fixed to 640 clock cycles */ 867 static void usdhi6_timeout_set(struct usdhi6_host *host) 868 { 869 struct mmc_request *mrq = host->mrq; 870 u32 val; 871 unsigned long ticks; 872 873 if (!mrq->data) 874 ticks = host->rate / 1000 * mrq->cmd->busy_timeout; 875 else 876 ticks = host->rate / 1000000 * (mrq->data->timeout_ns / 1000) + 877 mrq->data->timeout_clks; 878 879 if (!ticks || ticks > 1 << 27) 880 /* Max timeout */ 881 val = 14; 882 else if (ticks < 1 << 13) 883 /* Min timeout */ 884 val = 0; 885 else 886 val = order_base_2(ticks) - 13; 887 888 dev_dbg(mmc_dev(host->mmc), "Set %s timeout %lu ticks @ %lu Hz\n", 889 mrq->data ? "data" : "cmd", ticks, host->rate); 890 891 /* Timeout Counter mask: 0xf0 */ 892 usdhi6_write(host, USDHI6_SD_OPTION, (val << USDHI6_SD_OPTION_TIMEOUT_SHIFT) | 893 (usdhi6_read(host, USDHI6_SD_OPTION) & ~USDHI6_SD_OPTION_TIMEOUT_MASK)); 894 } 895 896 static void usdhi6_request_done(struct usdhi6_host *host) 897 { 898 struct mmc_request *mrq = host->mrq; 899 struct mmc_data *data = mrq->data; 900 901 if (WARN(host->pg.page || host->head_pg.page, 902 "Page %p or %p not unmapped: wait %u, CMD%d(%c) @ +0x%zx %ux%u in SG%u!\n", 903 host->pg.page, host->head_pg.page, host->wait, mrq->cmd->opcode, 904 data ? (data->flags & MMC_DATA_READ ? 'R' : 'W') : '-', 905 data ? host->offset : 0, data ? data->blocks : 0, 906 data ? data->blksz : 0, data ? data->sg_len : 0)) 907 usdhi6_sg_unmap(host, true); 908 909 if (mrq->cmd->error || 910 (data && data->error) || 911 (mrq->stop && mrq->stop->error)) 912 dev_dbg(mmc_dev(host->mmc), "%s(CMD%d: %ux%u): err %d %d %d\n", 913 __func__, mrq->cmd->opcode, data ? data->blocks : 0, 914 data ? data->blksz : 0, 915 mrq->cmd->error, 916 data ? data->error : 1, 917 mrq->stop ? mrq->stop->error : 1); 918 919 /* Disable DMA */ 920 usdhi6_write(host, USDHI6_CC_EXT_MODE, 0); 921 host->wait = USDHI6_WAIT_FOR_REQUEST; 922 host->mrq = NULL; 923 924 mmc_request_done(host->mmc, mrq); 925 } 926 927 static int usdhi6_cmd_flags(struct usdhi6_host *host) 928 { 929 struct mmc_request *mrq = host->mrq; 930 struct mmc_command *cmd = mrq->cmd; 931 u16 opc = cmd->opcode; 932 933 if (host->app_cmd) { 934 host->app_cmd = false; 935 opc |= USDHI6_SD_CMD_APP; 936 } 937 938 if (mrq->data) { 939 opc |= USDHI6_SD_CMD_DATA; 940 941 if (mrq->data->flags & MMC_DATA_READ) 942 opc |= USDHI6_SD_CMD_READ; 943 944 if (cmd->opcode == MMC_READ_MULTIPLE_BLOCK || 945 cmd->opcode == MMC_WRITE_MULTIPLE_BLOCK || 946 (cmd->opcode == SD_IO_RW_EXTENDED && 947 mrq->data->blocks > 1)) { 948 opc |= USDHI6_SD_CMD_MULTI; 949 if (!mrq->stop) 950 opc |= USDHI6_SD_CMD_CMD12_AUTO_OFF; 951 } 952 953 switch (mmc_resp_type(cmd)) { 954 case MMC_RSP_NONE: 955 opc |= USDHI6_SD_CMD_MODE_RSP_NONE; 956 break; 957 case MMC_RSP_R1: 958 opc |= USDHI6_SD_CMD_MODE_RSP_R1; 959 break; 960 case MMC_RSP_R1B: 961 opc |= USDHI6_SD_CMD_MODE_RSP_R1B; 962 break; 963 case MMC_RSP_R2: 964 opc |= USDHI6_SD_CMD_MODE_RSP_R2; 965 break; 966 case MMC_RSP_R3: 967 opc |= USDHI6_SD_CMD_MODE_RSP_R3; 968 break; 969 default: 970 dev_warn(mmc_dev(host->mmc), 971 "Unknown response type %d\n", 972 mmc_resp_type(cmd)); 973 return -EINVAL; 974 } 975 } 976 977 return opc; 978 } 979 980 static int usdhi6_rq_start(struct usdhi6_host *host) 981 { 982 struct mmc_request *mrq = host->mrq; 983 struct mmc_command *cmd = mrq->cmd; 984 struct mmc_data *data = mrq->data; 985 int opc = usdhi6_cmd_flags(host); 986 int i; 987 988 if (opc < 0) 989 return opc; 990 991 for (i = 1000; i; i--) { 992 if (!(usdhi6_read(host, USDHI6_SD_INFO2) & USDHI6_SD_INFO2_CBSY)) 993 break; 994 usleep_range(10, 100); 995 } 996 997 if (!i) { 998 dev_dbg(mmc_dev(host->mmc), "Command active, request aborted\n"); 999 return -EAGAIN; 1000 } 1001 1002 if (data) { 1003 bool use_dma; 1004 int ret = 0; 1005 1006 host->page_idx = 0; 1007 1008 if (cmd->opcode == SD_IO_RW_EXTENDED && data->blocks > 1) { 1009 switch (data->blksz) { 1010 case 512: 1011 break; 1012 case 32: 1013 case 64: 1014 case 128: 1015 case 256: 1016 if (mrq->stop) 1017 ret = -EINVAL; 1018 break; 1019 default: 1020 ret = -EINVAL; 1021 } 1022 } else if ((cmd->opcode == MMC_READ_MULTIPLE_BLOCK || 1023 cmd->opcode == MMC_WRITE_MULTIPLE_BLOCK) && 1024 data->blksz != 512) { 1025 ret = -EINVAL; 1026 } 1027 1028 if (ret < 0) { 1029 dev_warn(mmc_dev(host->mmc), "%s(): %u blocks of %u bytes\n", 1030 __func__, data->blocks, data->blksz); 1031 return -EINVAL; 1032 } 1033 1034 if (cmd->opcode == MMC_READ_MULTIPLE_BLOCK || 1035 cmd->opcode == MMC_WRITE_MULTIPLE_BLOCK || 1036 (cmd->opcode == SD_IO_RW_EXTENDED && 1037 data->blocks > 1)) 1038 usdhi6_sg_prep(host); 1039 1040 usdhi6_write(host, USDHI6_SD_SIZE, data->blksz); 1041 1042 if ((data->blksz >= USDHI6_MIN_DMA || 1043 data->blocks > 1) && 1044 (data->blksz % 4 || 1045 data->sg->offset % 4)) 1046 dev_dbg(mmc_dev(host->mmc), 1047 "Bad SG of %u: %ux%u @ %u\n", data->sg_len, 1048 data->blksz, data->blocks, data->sg->offset); 1049 1050 /* Enable DMA for USDHI6_MIN_DMA bytes or more */ 1051 use_dma = data->blksz >= USDHI6_MIN_DMA && 1052 !(data->blksz % 4) && 1053 usdhi6_dma_start(host) >= DMA_MIN_COOKIE; 1054 1055 if (use_dma) 1056 usdhi6_write(host, USDHI6_CC_EXT_MODE, USDHI6_CC_EXT_MODE_SDRW); 1057 1058 dev_dbg(mmc_dev(host->mmc), 1059 "%s(): request opcode %u, %u blocks of %u bytes in %u segments, %s %s @+0x%x%s\n", 1060 __func__, cmd->opcode, data->blocks, data->blksz, 1061 data->sg_len, use_dma ? "DMA" : "PIO", 1062 data->flags & MMC_DATA_READ ? "read" : "write", 1063 data->sg->offset, mrq->stop ? " + stop" : ""); 1064 } else { 1065 dev_dbg(mmc_dev(host->mmc), "%s(): request opcode %u\n", 1066 __func__, cmd->opcode); 1067 } 1068 1069 /* We have to get a command completion interrupt with DMA too */ 1070 usdhi6_wait_for_resp(host); 1071 1072 host->wait = USDHI6_WAIT_FOR_CMD; 1073 schedule_delayed_work(&host->timeout_work, host->timeout); 1074 1075 /* SEC bit is required to enable block counting by the core */ 1076 usdhi6_write(host, USDHI6_SD_STOP, 1077 data && data->blocks > 1 ? USDHI6_SD_STOP_SEC : 0); 1078 usdhi6_write(host, USDHI6_SD_ARG, cmd->arg); 1079 1080 /* Kick command execution */ 1081 usdhi6_write(host, USDHI6_SD_CMD, opc); 1082 1083 return 0; 1084 } 1085 1086 static void usdhi6_request(struct mmc_host *mmc, struct mmc_request *mrq) 1087 { 1088 struct usdhi6_host *host = mmc_priv(mmc); 1089 int ret; 1090 1091 cancel_delayed_work_sync(&host->timeout_work); 1092 1093 host->mrq = mrq; 1094 host->sg = NULL; 1095 1096 usdhi6_timeout_set(host); 1097 ret = usdhi6_rq_start(host); 1098 if (ret < 0) { 1099 mrq->cmd->error = ret; 1100 usdhi6_request_done(host); 1101 } 1102 } 1103 1104 static int usdhi6_get_cd(struct mmc_host *mmc) 1105 { 1106 struct usdhi6_host *host = mmc_priv(mmc); 1107 /* Read is atomic, no need to lock */ 1108 u32 status = usdhi6_read(host, USDHI6_SD_INFO1) & USDHI6_SD_INFO1_CD; 1109 1110 /* 1111 * level status.CD CD_ACTIVE_HIGH card present 1112 * 1 0 0 0 1113 * 1 0 1 1 1114 * 0 1 0 1 1115 * 0 1 1 0 1116 */ 1117 return !status ^ !(mmc->caps2 & MMC_CAP2_CD_ACTIVE_HIGH); 1118 } 1119 1120 static int usdhi6_get_ro(struct mmc_host *mmc) 1121 { 1122 struct usdhi6_host *host = mmc_priv(mmc); 1123 /* No locking as above */ 1124 u32 status = usdhi6_read(host, USDHI6_SD_INFO1) & USDHI6_SD_INFO1_WP; 1125 1126 /* 1127 * level status.WP RO_ACTIVE_HIGH card read-only 1128 * 1 0 0 0 1129 * 1 0 1 1 1130 * 0 1 0 1 1131 * 0 1 1 0 1132 */ 1133 return !status ^ !(mmc->caps2 & MMC_CAP2_RO_ACTIVE_HIGH); 1134 } 1135 1136 static void usdhi6_enable_sdio_irq(struct mmc_host *mmc, int enable) 1137 { 1138 struct usdhi6_host *host = mmc_priv(mmc); 1139 1140 dev_dbg(mmc_dev(mmc), "%s(): %sable\n", __func__, enable ? "en" : "dis"); 1141 1142 if (enable) { 1143 host->sdio_mask = USDHI6_SDIO_INFO1_IRQ & ~USDHI6_SDIO_INFO1_IOIRQ; 1144 usdhi6_write(host, USDHI6_SDIO_INFO1_MASK, host->sdio_mask); 1145 usdhi6_write(host, USDHI6_SDIO_MODE, 1); 1146 } else { 1147 usdhi6_write(host, USDHI6_SDIO_MODE, 0); 1148 usdhi6_write(host, USDHI6_SDIO_INFO1_MASK, USDHI6_SDIO_INFO1_IRQ); 1149 host->sdio_mask = USDHI6_SDIO_INFO1_IRQ; 1150 } 1151 } 1152 1153 static int usdhi6_set_pinstates(struct usdhi6_host *host, int voltage) 1154 { 1155 if (IS_ERR(host->pins_uhs)) 1156 return 0; 1157 1158 switch (voltage) { 1159 case MMC_SIGNAL_VOLTAGE_180: 1160 case MMC_SIGNAL_VOLTAGE_120: 1161 return pinctrl_select_state(host->pinctrl, 1162 host->pins_uhs); 1163 1164 default: 1165 return pinctrl_select_state(host->pinctrl, 1166 host->pins_default); 1167 } 1168 } 1169 1170 static int usdhi6_sig_volt_switch(struct mmc_host *mmc, struct mmc_ios *ios) 1171 { 1172 int ret; 1173 1174 ret = mmc_regulator_set_vqmmc(mmc, ios); 1175 if (ret < 0) 1176 return ret; 1177 1178 ret = usdhi6_set_pinstates(mmc_priv(mmc), ios->signal_voltage); 1179 if (ret) 1180 dev_warn_once(mmc_dev(mmc), 1181 "Failed to set pinstate err=%d\n", ret); 1182 return ret; 1183 } 1184 1185 static const struct mmc_host_ops usdhi6_ops = { 1186 .request = usdhi6_request, 1187 .set_ios = usdhi6_set_ios, 1188 .get_cd = usdhi6_get_cd, 1189 .get_ro = usdhi6_get_ro, 1190 .enable_sdio_irq = usdhi6_enable_sdio_irq, 1191 .start_signal_voltage_switch = usdhi6_sig_volt_switch, 1192 }; 1193 1194 /* State machine handlers */ 1195 1196 static void usdhi6_resp_cmd12(struct usdhi6_host *host) 1197 { 1198 struct mmc_command *cmd = host->mrq->stop; 1199 cmd->resp[0] = usdhi6_read(host, USDHI6_SD_RSP10); 1200 } 1201 1202 static void usdhi6_resp_read(struct usdhi6_host *host) 1203 { 1204 struct mmc_command *cmd = host->mrq->cmd; 1205 u32 *rsp = cmd->resp, tmp = 0; 1206 int i; 1207 1208 /* 1209 * RSP10 39-8 1210 * RSP32 71-40 1211 * RSP54 103-72 1212 * RSP76 127-104 1213 * R2-type response: 1214 * resp[0] = r[127..96] 1215 * resp[1] = r[95..64] 1216 * resp[2] = r[63..32] 1217 * resp[3] = r[31..0] 1218 * Other responses: 1219 * resp[0] = r[39..8] 1220 */ 1221 1222 if (mmc_resp_type(cmd) == MMC_RSP_NONE) 1223 return; 1224 1225 if (!(host->irq_status & USDHI6_SD_INFO1_RSP_END)) { 1226 dev_err(mmc_dev(host->mmc), 1227 "CMD%d: response expected but is missing!\n", cmd->opcode); 1228 return; 1229 } 1230 1231 if (mmc_resp_type(cmd) & MMC_RSP_136) 1232 for (i = 0; i < 4; i++) { 1233 if (i) 1234 rsp[3 - i] = tmp >> 24; 1235 tmp = usdhi6_read(host, USDHI6_SD_RSP10 + i * 8); 1236 rsp[3 - i] |= tmp << 8; 1237 } 1238 else if (cmd->opcode == MMC_READ_MULTIPLE_BLOCK || 1239 cmd->opcode == MMC_WRITE_MULTIPLE_BLOCK) 1240 /* Read RSP54 to avoid conflict with auto CMD12 */ 1241 rsp[0] = usdhi6_read(host, USDHI6_SD_RSP54); 1242 else 1243 rsp[0] = usdhi6_read(host, USDHI6_SD_RSP10); 1244 1245 dev_dbg(mmc_dev(host->mmc), "Response 0x%x\n", rsp[0]); 1246 } 1247 1248 static int usdhi6_blk_read(struct usdhi6_host *host) 1249 { 1250 struct mmc_data *data = host->mrq->data; 1251 u32 *p; 1252 int i, rest; 1253 1254 if (host->io_error) { 1255 data->error = usdhi6_error_code(host); 1256 goto error; 1257 } 1258 1259 if (host->pg.page) { 1260 p = host->blk_page + host->offset; 1261 } else { 1262 p = usdhi6_sg_map(host); 1263 if (!p) { 1264 data->error = -ENOMEM; 1265 goto error; 1266 } 1267 } 1268 1269 for (i = 0; i < data->blksz / 4; i++, p++) 1270 *p = usdhi6_read(host, USDHI6_SD_BUF0); 1271 1272 rest = data->blksz % 4; 1273 for (i = 0; i < (rest + 1) / 2; i++) { 1274 u16 d = usdhi6_read16(host, USDHI6_SD_BUF0); 1275 ((u8 *)p)[2 * i] = ((u8 *)&d)[0]; 1276 if (rest > 1 && !i) 1277 ((u8 *)p)[2 * i + 1] = ((u8 *)&d)[1]; 1278 } 1279 1280 return 0; 1281 1282 error: 1283 dev_dbg(mmc_dev(host->mmc), "%s(): %d\n", __func__, data->error); 1284 host->wait = USDHI6_WAIT_FOR_REQUEST; 1285 return data->error; 1286 } 1287 1288 static int usdhi6_blk_write(struct usdhi6_host *host) 1289 { 1290 struct mmc_data *data = host->mrq->data; 1291 u32 *p; 1292 int i, rest; 1293 1294 if (host->io_error) { 1295 data->error = usdhi6_error_code(host); 1296 goto error; 1297 } 1298 1299 if (host->pg.page) { 1300 p = host->blk_page + host->offset; 1301 } else { 1302 p = usdhi6_sg_map(host); 1303 if (!p) { 1304 data->error = -ENOMEM; 1305 goto error; 1306 } 1307 } 1308 1309 for (i = 0; i < data->blksz / 4; i++, p++) 1310 usdhi6_write(host, USDHI6_SD_BUF0, *p); 1311 1312 rest = data->blksz % 4; 1313 for (i = 0; i < (rest + 1) / 2; i++) { 1314 u16 d; 1315 ((u8 *)&d)[0] = ((u8 *)p)[2 * i]; 1316 if (rest > 1 && !i) 1317 ((u8 *)&d)[1] = ((u8 *)p)[2 * i + 1]; 1318 else 1319 ((u8 *)&d)[1] = 0; 1320 usdhi6_write16(host, USDHI6_SD_BUF0, d); 1321 } 1322 1323 return 0; 1324 1325 error: 1326 dev_dbg(mmc_dev(host->mmc), "%s(): %d\n", __func__, data->error); 1327 host->wait = USDHI6_WAIT_FOR_REQUEST; 1328 return data->error; 1329 } 1330 1331 static int usdhi6_stop_cmd(struct usdhi6_host *host) 1332 { 1333 struct mmc_request *mrq = host->mrq; 1334 1335 switch (mrq->cmd->opcode) { 1336 case MMC_READ_MULTIPLE_BLOCK: 1337 case MMC_WRITE_MULTIPLE_BLOCK: 1338 if (mrq->stop->opcode == MMC_STOP_TRANSMISSION) { 1339 host->wait = USDHI6_WAIT_FOR_STOP; 1340 return 0; 1341 } 1342 /* fall through - Unsupported STOP command. */ 1343 default: 1344 dev_err(mmc_dev(host->mmc), 1345 "unsupported stop CMD%d for CMD%d\n", 1346 mrq->stop->opcode, mrq->cmd->opcode); 1347 mrq->stop->error = -EOPNOTSUPP; 1348 } 1349 1350 return -EOPNOTSUPP; 1351 } 1352 1353 static bool usdhi6_end_cmd(struct usdhi6_host *host) 1354 { 1355 struct mmc_request *mrq = host->mrq; 1356 struct mmc_command *cmd = mrq->cmd; 1357 1358 if (host->io_error) { 1359 cmd->error = usdhi6_error_code(host); 1360 return false; 1361 } 1362 1363 usdhi6_resp_read(host); 1364 1365 if (!mrq->data) 1366 return false; 1367 1368 if (host->dma_active) { 1369 usdhi6_dma_kick(host); 1370 if (!mrq->stop) 1371 host->wait = USDHI6_WAIT_FOR_DMA; 1372 else if (usdhi6_stop_cmd(host) < 0) 1373 return false; 1374 } else if (mrq->data->flags & MMC_DATA_READ) { 1375 if (cmd->opcode == MMC_READ_MULTIPLE_BLOCK || 1376 (cmd->opcode == SD_IO_RW_EXTENDED && 1377 mrq->data->blocks > 1)) 1378 host->wait = USDHI6_WAIT_FOR_MREAD; 1379 else 1380 host->wait = USDHI6_WAIT_FOR_READ; 1381 } else { 1382 if (cmd->opcode == MMC_WRITE_MULTIPLE_BLOCK || 1383 (cmd->opcode == SD_IO_RW_EXTENDED && 1384 mrq->data->blocks > 1)) 1385 host->wait = USDHI6_WAIT_FOR_MWRITE; 1386 else 1387 host->wait = USDHI6_WAIT_FOR_WRITE; 1388 } 1389 1390 return true; 1391 } 1392 1393 static bool usdhi6_read_block(struct usdhi6_host *host) 1394 { 1395 /* ACCESS_END IRQ is already unmasked */ 1396 int ret = usdhi6_blk_read(host); 1397 1398 /* 1399 * Have to force unmapping both pages: the single block could have been 1400 * cross-page, in which case for single-block IO host->page_idx == 0. 1401 * So, if we don't force, the second page won't be unmapped. 1402 */ 1403 usdhi6_sg_unmap(host, true); 1404 1405 if (ret < 0) 1406 return false; 1407 1408 host->wait = USDHI6_WAIT_FOR_DATA_END; 1409 return true; 1410 } 1411 1412 static bool usdhi6_mread_block(struct usdhi6_host *host) 1413 { 1414 int ret = usdhi6_blk_read(host); 1415 1416 if (ret < 0) 1417 return false; 1418 1419 usdhi6_sg_advance(host); 1420 1421 return !host->mrq->data->error && 1422 (host->wait != USDHI6_WAIT_FOR_DATA_END || !host->mrq->stop); 1423 } 1424 1425 static bool usdhi6_write_block(struct usdhi6_host *host) 1426 { 1427 int ret = usdhi6_blk_write(host); 1428 1429 /* See comment in usdhi6_read_block() */ 1430 usdhi6_sg_unmap(host, true); 1431 1432 if (ret < 0) 1433 return false; 1434 1435 host->wait = USDHI6_WAIT_FOR_DATA_END; 1436 return true; 1437 } 1438 1439 static bool usdhi6_mwrite_block(struct usdhi6_host *host) 1440 { 1441 int ret = usdhi6_blk_write(host); 1442 1443 if (ret < 0) 1444 return false; 1445 1446 usdhi6_sg_advance(host); 1447 1448 return !host->mrq->data->error && 1449 (host->wait != USDHI6_WAIT_FOR_DATA_END || !host->mrq->stop); 1450 } 1451 1452 /* Interrupt & timeout handlers */ 1453 1454 static irqreturn_t usdhi6_sd_bh(int irq, void *dev_id) 1455 { 1456 struct usdhi6_host *host = dev_id; 1457 struct mmc_request *mrq; 1458 struct mmc_command *cmd; 1459 struct mmc_data *data; 1460 bool io_wait = false; 1461 1462 cancel_delayed_work_sync(&host->timeout_work); 1463 1464 mrq = host->mrq; 1465 if (!mrq) 1466 return IRQ_HANDLED; 1467 1468 cmd = mrq->cmd; 1469 data = mrq->data; 1470 1471 switch (host->wait) { 1472 case USDHI6_WAIT_FOR_REQUEST: 1473 /* We're too late, the timeout has already kicked in */ 1474 return IRQ_HANDLED; 1475 case USDHI6_WAIT_FOR_CMD: 1476 /* Wait for data? */ 1477 io_wait = usdhi6_end_cmd(host); 1478 break; 1479 case USDHI6_WAIT_FOR_MREAD: 1480 /* Wait for more data? */ 1481 io_wait = usdhi6_mread_block(host); 1482 break; 1483 case USDHI6_WAIT_FOR_READ: 1484 /* Wait for data end? */ 1485 io_wait = usdhi6_read_block(host); 1486 break; 1487 case USDHI6_WAIT_FOR_MWRITE: 1488 /* Wait data to write? */ 1489 io_wait = usdhi6_mwrite_block(host); 1490 break; 1491 case USDHI6_WAIT_FOR_WRITE: 1492 /* Wait for data end? */ 1493 io_wait = usdhi6_write_block(host); 1494 break; 1495 case USDHI6_WAIT_FOR_DMA: 1496 usdhi6_dma_check_error(host); 1497 break; 1498 case USDHI6_WAIT_FOR_STOP: 1499 usdhi6_write(host, USDHI6_SD_STOP, 0); 1500 if (host->io_error) { 1501 int ret = usdhi6_error_code(host); 1502 if (mrq->stop) 1503 mrq->stop->error = ret; 1504 else 1505 mrq->data->error = ret; 1506 dev_warn(mmc_dev(host->mmc), "%s(): %d\n", __func__, ret); 1507 break; 1508 } 1509 usdhi6_resp_cmd12(host); 1510 mrq->stop->error = 0; 1511 break; 1512 case USDHI6_WAIT_FOR_DATA_END: 1513 if (host->io_error) { 1514 mrq->data->error = usdhi6_error_code(host); 1515 dev_warn(mmc_dev(host->mmc), "%s(): %d\n", __func__, 1516 mrq->data->error); 1517 } 1518 break; 1519 default: 1520 cmd->error = -EFAULT; 1521 dev_err(mmc_dev(host->mmc), "Invalid state %u\n", host->wait); 1522 usdhi6_request_done(host); 1523 return IRQ_HANDLED; 1524 } 1525 1526 if (io_wait) { 1527 schedule_delayed_work(&host->timeout_work, host->timeout); 1528 /* Wait for more data or ACCESS_END */ 1529 if (!host->dma_active) 1530 usdhi6_wait_for_brwe(host, mrq->data->flags & MMC_DATA_READ); 1531 return IRQ_HANDLED; 1532 } 1533 1534 if (!cmd->error) { 1535 if (data) { 1536 if (!data->error) { 1537 if (host->wait != USDHI6_WAIT_FOR_STOP && 1538 host->mrq->stop && 1539 !host->mrq->stop->error && 1540 !usdhi6_stop_cmd(host)) { 1541 /* Sending STOP */ 1542 usdhi6_wait_for_resp(host); 1543 1544 schedule_delayed_work(&host->timeout_work, 1545 host->timeout); 1546 1547 return IRQ_HANDLED; 1548 } 1549 1550 data->bytes_xfered = data->blocks * data->blksz; 1551 } else { 1552 /* Data error: might need to unmap the last page */ 1553 dev_warn(mmc_dev(host->mmc), "%s(): data error %d\n", 1554 __func__, data->error); 1555 usdhi6_sg_unmap(host, true); 1556 } 1557 } else if (cmd->opcode == MMC_APP_CMD) { 1558 host->app_cmd = true; 1559 } 1560 } 1561 1562 usdhi6_request_done(host); 1563 1564 return IRQ_HANDLED; 1565 } 1566 1567 static irqreturn_t usdhi6_sd(int irq, void *dev_id) 1568 { 1569 struct usdhi6_host *host = dev_id; 1570 u16 status, status2, error; 1571 1572 status = usdhi6_read(host, USDHI6_SD_INFO1) & ~host->status_mask & 1573 ~USDHI6_SD_INFO1_CARD; 1574 status2 = usdhi6_read(host, USDHI6_SD_INFO2) & ~host->status2_mask; 1575 1576 usdhi6_only_cd(host); 1577 1578 dev_dbg(mmc_dev(host->mmc), 1579 "IRQ status = 0x%08x, status2 = 0x%08x\n", status, status2); 1580 1581 if (!status && !status2) 1582 return IRQ_NONE; 1583 1584 error = status2 & USDHI6_SD_INFO2_ERR; 1585 1586 /* Ack / clear interrupts */ 1587 if (USDHI6_SD_INFO1_IRQ & status) 1588 usdhi6_write(host, USDHI6_SD_INFO1, 1589 0xffff & ~(USDHI6_SD_INFO1_IRQ & status)); 1590 1591 if (USDHI6_SD_INFO2_IRQ & status2) { 1592 if (error) 1593 /* In error cases BWE and BRE aren't cleared automatically */ 1594 status2 |= USDHI6_SD_INFO2_BWE | USDHI6_SD_INFO2_BRE; 1595 1596 usdhi6_write(host, USDHI6_SD_INFO2, 1597 0xffff & ~(USDHI6_SD_INFO2_IRQ & status2)); 1598 } 1599 1600 host->io_error = error; 1601 host->irq_status = status; 1602 1603 if (error) { 1604 /* Don't pollute the log with unsupported command timeouts */ 1605 if (host->wait != USDHI6_WAIT_FOR_CMD || 1606 error != USDHI6_SD_INFO2_RSP_TOUT) 1607 dev_warn(mmc_dev(host->mmc), 1608 "%s(): INFO2 error bits 0x%08x\n", 1609 __func__, error); 1610 else 1611 dev_dbg(mmc_dev(host->mmc), 1612 "%s(): INFO2 error bits 0x%08x\n", 1613 __func__, error); 1614 } 1615 1616 return IRQ_WAKE_THREAD; 1617 } 1618 1619 static irqreturn_t usdhi6_sdio(int irq, void *dev_id) 1620 { 1621 struct usdhi6_host *host = dev_id; 1622 u32 status = usdhi6_read(host, USDHI6_SDIO_INFO1) & ~host->sdio_mask; 1623 1624 dev_dbg(mmc_dev(host->mmc), "%s(): status 0x%x\n", __func__, status); 1625 1626 if (!status) 1627 return IRQ_NONE; 1628 1629 usdhi6_write(host, USDHI6_SDIO_INFO1, ~status); 1630 1631 mmc_signal_sdio_irq(host->mmc); 1632 1633 return IRQ_HANDLED; 1634 } 1635 1636 static irqreturn_t usdhi6_cd(int irq, void *dev_id) 1637 { 1638 struct usdhi6_host *host = dev_id; 1639 struct mmc_host *mmc = host->mmc; 1640 u16 status; 1641 1642 /* We're only interested in hotplug events here */ 1643 status = usdhi6_read(host, USDHI6_SD_INFO1) & ~host->status_mask & 1644 USDHI6_SD_INFO1_CARD; 1645 1646 if (!status) 1647 return IRQ_NONE; 1648 1649 /* Ack */ 1650 usdhi6_write(host, USDHI6_SD_INFO1, ~status); 1651 1652 if (!work_pending(&mmc->detect.work) && 1653 (((status & USDHI6_SD_INFO1_CARD_INSERT) && 1654 !mmc->card) || 1655 ((status & USDHI6_SD_INFO1_CARD_EJECT) && 1656 mmc->card))) 1657 mmc_detect_change(mmc, msecs_to_jiffies(100)); 1658 1659 return IRQ_HANDLED; 1660 } 1661 1662 /* 1663 * Actually this should not be needed, if the built-in timeout works reliably in 1664 * the both PIO cases and DMA never fails. But if DMA does fail, a timeout 1665 * handler might be the only way to catch the error. 1666 */ 1667 static void usdhi6_timeout_work(struct work_struct *work) 1668 { 1669 struct delayed_work *d = to_delayed_work(work); 1670 struct usdhi6_host *host = container_of(d, struct usdhi6_host, timeout_work); 1671 struct mmc_request *mrq = host->mrq; 1672 struct mmc_data *data = mrq ? mrq->data : NULL; 1673 struct scatterlist *sg; 1674 1675 dev_warn(mmc_dev(host->mmc), 1676 "%s timeout wait %u CMD%d: IRQ 0x%08x:0x%08x, last IRQ 0x%08x\n", 1677 host->dma_active ? "DMA" : "PIO", 1678 host->wait, mrq ? mrq->cmd->opcode : -1, 1679 usdhi6_read(host, USDHI6_SD_INFO1), 1680 usdhi6_read(host, USDHI6_SD_INFO2), host->irq_status); 1681 1682 if (host->dma_active) { 1683 usdhi6_dma_kill(host); 1684 usdhi6_dma_stop_unmap(host); 1685 } 1686 1687 switch (host->wait) { 1688 default: 1689 dev_err(mmc_dev(host->mmc), "Invalid state %u\n", host->wait); 1690 /* fall through - mrq can be NULL, but is impossible. */ 1691 case USDHI6_WAIT_FOR_CMD: 1692 usdhi6_error_code(host); 1693 if (mrq) 1694 mrq->cmd->error = -ETIMEDOUT; 1695 break; 1696 case USDHI6_WAIT_FOR_STOP: 1697 usdhi6_error_code(host); 1698 mrq->stop->error = -ETIMEDOUT; 1699 break; 1700 case USDHI6_WAIT_FOR_DMA: 1701 case USDHI6_WAIT_FOR_MREAD: 1702 case USDHI6_WAIT_FOR_MWRITE: 1703 case USDHI6_WAIT_FOR_READ: 1704 case USDHI6_WAIT_FOR_WRITE: 1705 sg = host->sg ?: data->sg; 1706 dev_dbg(mmc_dev(host->mmc), 1707 "%c: page #%u @ +0x%zx %ux%u in SG%u. Current SG %u bytes @ %u\n", 1708 data->flags & MMC_DATA_READ ? 'R' : 'W', host->page_idx, 1709 host->offset, data->blocks, data->blksz, data->sg_len, 1710 sg_dma_len(sg), sg->offset); 1711 usdhi6_sg_unmap(host, true); 1712 /* fall through - page unmapped in USDHI6_WAIT_FOR_DATA_END. */ 1713 case USDHI6_WAIT_FOR_DATA_END: 1714 usdhi6_error_code(host); 1715 data->error = -ETIMEDOUT; 1716 } 1717 1718 if (mrq) 1719 usdhi6_request_done(host); 1720 } 1721 1722 /* Probe / release */ 1723 1724 static const struct of_device_id usdhi6_of_match[] = { 1725 {.compatible = "renesas,usdhi6rol0"}, 1726 {} 1727 }; 1728 MODULE_DEVICE_TABLE(of, usdhi6_of_match); 1729 1730 static int usdhi6_probe(struct platform_device *pdev) 1731 { 1732 struct device *dev = &pdev->dev; 1733 struct mmc_host *mmc; 1734 struct usdhi6_host *host; 1735 struct resource *res; 1736 int irq_cd, irq_sd, irq_sdio; 1737 u32 version; 1738 int ret; 1739 1740 if (!dev->of_node) 1741 return -ENODEV; 1742 1743 irq_cd = platform_get_irq_byname(pdev, "card detect"); 1744 irq_sd = platform_get_irq_byname(pdev, "data"); 1745 irq_sdio = platform_get_irq_byname(pdev, "SDIO"); 1746 if (irq_sd < 0 || irq_sdio < 0) 1747 return -ENODEV; 1748 1749 mmc = mmc_alloc_host(sizeof(struct usdhi6_host), dev); 1750 if (!mmc) 1751 return -ENOMEM; 1752 1753 ret = mmc_regulator_get_supply(mmc); 1754 if (ret) 1755 goto e_free_mmc; 1756 1757 ret = mmc_of_parse(mmc); 1758 if (ret < 0) 1759 goto e_free_mmc; 1760 1761 host = mmc_priv(mmc); 1762 host->mmc = mmc; 1763 host->wait = USDHI6_WAIT_FOR_REQUEST; 1764 host->timeout = msecs_to_jiffies(4000); 1765 1766 host->pinctrl = devm_pinctrl_get(&pdev->dev); 1767 if (IS_ERR(host->pinctrl)) { 1768 ret = PTR_ERR(host->pinctrl); 1769 goto e_free_mmc; 1770 } 1771 1772 host->pins_uhs = pinctrl_lookup_state(host->pinctrl, "state_uhs"); 1773 if (!IS_ERR(host->pins_uhs)) { 1774 host->pins_default = pinctrl_lookup_state(host->pinctrl, 1775 PINCTRL_STATE_DEFAULT); 1776 1777 if (IS_ERR(host->pins_default)) { 1778 dev_err(dev, 1779 "UHS pinctrl requires a default pin state.\n"); 1780 ret = PTR_ERR(host->pins_default); 1781 goto e_free_mmc; 1782 } 1783 } 1784 1785 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 1786 host->base = devm_ioremap_resource(dev, res); 1787 if (IS_ERR(host->base)) { 1788 ret = PTR_ERR(host->base); 1789 goto e_free_mmc; 1790 } 1791 1792 host->clk = devm_clk_get(dev, NULL); 1793 if (IS_ERR(host->clk)) { 1794 ret = PTR_ERR(host->clk); 1795 goto e_free_mmc; 1796 } 1797 1798 host->imclk = clk_get_rate(host->clk); 1799 1800 ret = clk_prepare_enable(host->clk); 1801 if (ret < 0) 1802 goto e_free_mmc; 1803 1804 version = usdhi6_read(host, USDHI6_VERSION); 1805 if ((version & 0xfff) != 0xa0d) { 1806 dev_err(dev, "Version not recognized %x\n", version); 1807 goto e_clk_off; 1808 } 1809 1810 dev_info(dev, "A USDHI6ROL0 SD host detected with %d ports\n", 1811 usdhi6_read(host, USDHI6_SD_PORT_SEL) >> USDHI6_SD_PORT_SEL_PORTS_SHIFT); 1812 1813 usdhi6_mask_all(host); 1814 1815 if (irq_cd >= 0) { 1816 ret = devm_request_irq(dev, irq_cd, usdhi6_cd, 0, 1817 dev_name(dev), host); 1818 if (ret < 0) 1819 goto e_clk_off; 1820 } else { 1821 mmc->caps |= MMC_CAP_NEEDS_POLL; 1822 } 1823 1824 ret = devm_request_threaded_irq(dev, irq_sd, usdhi6_sd, usdhi6_sd_bh, 0, 1825 dev_name(dev), host); 1826 if (ret < 0) 1827 goto e_clk_off; 1828 1829 ret = devm_request_irq(dev, irq_sdio, usdhi6_sdio, 0, 1830 dev_name(dev), host); 1831 if (ret < 0) 1832 goto e_clk_off; 1833 1834 INIT_DELAYED_WORK(&host->timeout_work, usdhi6_timeout_work); 1835 1836 usdhi6_dma_request(host, res->start); 1837 1838 mmc->ops = &usdhi6_ops; 1839 mmc->caps |= MMC_CAP_SD_HIGHSPEED | MMC_CAP_MMC_HIGHSPEED | 1840 MMC_CAP_SDIO_IRQ; 1841 /* Set .max_segs to some random number. Feel free to adjust. */ 1842 mmc->max_segs = 32; 1843 mmc->max_blk_size = 512; 1844 mmc->max_req_size = PAGE_SIZE * mmc->max_segs; 1845 mmc->max_blk_count = mmc->max_req_size / mmc->max_blk_size; 1846 /* 1847 * Setting .max_seg_size to 1 page would simplify our page-mapping code, 1848 * But OTOH, having large segments makes DMA more efficient. We could 1849 * check, whether we managed to get DMA and fall back to 1 page 1850 * segments, but if we do manage to obtain DMA and then it fails at 1851 * run-time and we fall back to PIO, we will continue getting large 1852 * segments. So, we wouldn't be able to get rid of the code anyway. 1853 */ 1854 mmc->max_seg_size = mmc->max_req_size; 1855 if (!mmc->f_max) 1856 mmc->f_max = host->imclk; 1857 mmc->f_min = host->imclk / 512; 1858 1859 platform_set_drvdata(pdev, host); 1860 1861 ret = mmc_add_host(mmc); 1862 if (ret < 0) 1863 goto e_clk_off; 1864 1865 return 0; 1866 1867 e_clk_off: 1868 clk_disable_unprepare(host->clk); 1869 e_free_mmc: 1870 mmc_free_host(mmc); 1871 1872 return ret; 1873 } 1874 1875 static int usdhi6_remove(struct platform_device *pdev) 1876 { 1877 struct usdhi6_host *host = platform_get_drvdata(pdev); 1878 1879 mmc_remove_host(host->mmc); 1880 1881 usdhi6_mask_all(host); 1882 cancel_delayed_work_sync(&host->timeout_work); 1883 usdhi6_dma_release(host); 1884 clk_disable_unprepare(host->clk); 1885 mmc_free_host(host->mmc); 1886 1887 return 0; 1888 } 1889 1890 static struct platform_driver usdhi6_driver = { 1891 .probe = usdhi6_probe, 1892 .remove = usdhi6_remove, 1893 .driver = { 1894 .name = "usdhi6rol0", 1895 .of_match_table = usdhi6_of_match, 1896 }, 1897 }; 1898 1899 module_platform_driver(usdhi6_driver); 1900 1901 MODULE_DESCRIPTION("Renesas usdhi6rol0 SD/SDIO host driver"); 1902 MODULE_LICENSE("GPL v2"); 1903 MODULE_ALIAS("platform:usdhi6rol0"); 1904 MODULE_AUTHOR("Guennadi Liakhovetski <g.liakhovetski@gmx.de>"); 1905