Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v3.2-rc4 1169 lines 31 kB view raw
1/* 2 * linux/drivers/mmc/host/imxmmc.c - Motorola i.MX MMCI driver 3 * 4 * Copyright (C) 2004 Sascha Hauer, Pengutronix <sascha@saschahauer.de> 5 * Copyright (C) 2006 Pavel Pisa, PiKRON <ppisa@pikron.com> 6 * 7 * derived from pxamci.c by Russell King 8 * 9 * This program is free software; you can redistribute it and/or modify 10 * it under the terms of the GNU General Public License version 2 as 11 * published by the Free Software Foundation. 12 * 13 */ 14 15#include <linux/module.h> 16#include <linux/init.h> 17#include <linux/ioport.h> 18#include <linux/platform_device.h> 19#include <linux/interrupt.h> 20#include <linux/blkdev.h> 21#include <linux/dma-mapping.h> 22#include <linux/mmc/host.h> 23#include <linux/mmc/card.h> 24#include <linux/delay.h> 25#include <linux/clk.h> 26#include <linux/io.h> 27 28#include <asm/dma.h> 29#include <asm/irq.h> 30#include <asm/sizes.h> 31#include <mach/mmc.h> 32#include <mach/imx-dma.h> 33 34#include "imxmmc.h" 35 36#define DRIVER_NAME "imx-mmc" 37 38#define IMXMCI_INT_MASK_DEFAULT (INT_MASK_BUF_READY | INT_MASK_DATA_TRAN | \ 39 INT_MASK_WRITE_OP_DONE | INT_MASK_END_CMD_RES | \ 40 INT_MASK_AUTO_CARD_DETECT | INT_MASK_DAT0_EN | INT_MASK_SDIO) 41 42struct imxmci_host { 43 struct mmc_host *mmc; 44 spinlock_t lock; 45 struct resource *res; 46 void __iomem *base; 47 int irq; 48 imx_dmach_t dma; 49 volatile unsigned int imask; 50 unsigned int power_mode; 51 unsigned int present; 52 struct imxmmc_platform_data *pdata; 53 54 struct mmc_request *req; 55 struct mmc_command *cmd; 56 struct mmc_data *data; 57 58 struct timer_list timer; 59 struct tasklet_struct tasklet; 60 unsigned int status_reg; 61 unsigned long pending_events; 62 /* Next two fields are there for CPU driven transfers to overcome SDHC deficiencies */ 63 u16 *data_ptr; 64 unsigned int data_cnt; 65 atomic_t stuck_timeout; 66 67 unsigned int dma_nents; 68 unsigned int dma_size; 69 unsigned int dma_dir; 70 int dma_allocated; 71 72 unsigned char actual_bus_width; 73 74 int prev_cmd_code; 75 76 struct clk *clk; 77}; 78 79#define IMXMCI_PEND_IRQ_b 0 80#define IMXMCI_PEND_DMA_END_b 1 81#define IMXMCI_PEND_DMA_ERR_b 2 82#define IMXMCI_PEND_WAIT_RESP_b 3 83#define IMXMCI_PEND_DMA_DATA_b 4 84#define IMXMCI_PEND_CPU_DATA_b 5 85#define IMXMCI_PEND_CARD_XCHG_b 6 86#define IMXMCI_PEND_SET_INIT_b 7 87#define IMXMCI_PEND_STARTED_b 8 88 89#define IMXMCI_PEND_IRQ_m (1 << IMXMCI_PEND_IRQ_b) 90#define IMXMCI_PEND_DMA_END_m (1 << IMXMCI_PEND_DMA_END_b) 91#define IMXMCI_PEND_DMA_ERR_m (1 << IMXMCI_PEND_DMA_ERR_b) 92#define IMXMCI_PEND_WAIT_RESP_m (1 << IMXMCI_PEND_WAIT_RESP_b) 93#define IMXMCI_PEND_DMA_DATA_m (1 << IMXMCI_PEND_DMA_DATA_b) 94#define IMXMCI_PEND_CPU_DATA_m (1 << IMXMCI_PEND_CPU_DATA_b) 95#define IMXMCI_PEND_CARD_XCHG_m (1 << IMXMCI_PEND_CARD_XCHG_b) 96#define IMXMCI_PEND_SET_INIT_m (1 << IMXMCI_PEND_SET_INIT_b) 97#define IMXMCI_PEND_STARTED_m (1 << IMXMCI_PEND_STARTED_b) 98 99static void imxmci_stop_clock(struct imxmci_host *host) 100{ 101 int i = 0; 102 u16 reg; 103 104 reg = readw(host->base + MMC_REG_STR_STP_CLK); 105 writew(reg & ~STR_STP_CLK_START_CLK, host->base + MMC_REG_STR_STP_CLK); 106 while (i < 0x1000) { 107 if (!(i & 0x7f)) { 108 reg = readw(host->base + MMC_REG_STR_STP_CLK); 109 writew(reg | STR_STP_CLK_STOP_CLK, 110 host->base + MMC_REG_STR_STP_CLK); 111 } 112 113 reg = readw(host->base + MMC_REG_STATUS); 114 if (!(reg & STATUS_CARD_BUS_CLK_RUN)) { 115 /* Check twice before cut */ 116 reg = readw(host->base + MMC_REG_STATUS); 117 if (!(reg & STATUS_CARD_BUS_CLK_RUN)) 118 return; 119 } 120 121 i++; 122 } 123 dev_dbg(mmc_dev(host->mmc), "imxmci_stop_clock blocked, no luck\n"); 124} 125 126static int imxmci_start_clock(struct imxmci_host *host) 127{ 128 unsigned int trials = 0; 129 unsigned int delay_limit = 128; 130 unsigned long flags; 131 u16 reg; 132 133 reg = readw(host->base + MMC_REG_STR_STP_CLK); 134 writew(reg & ~STR_STP_CLK_STOP_CLK, host->base + MMC_REG_STR_STP_CLK); 135 136 clear_bit(IMXMCI_PEND_STARTED_b, &host->pending_events); 137 138 /* 139 * Command start of the clock, this usually succeeds in less 140 * then 6 delay loops, but during card detection (low clockrate) 141 * it takes up to 5000 delay loops and sometimes fails for the first time 142 */ 143 reg = readw(host->base + MMC_REG_STR_STP_CLK); 144 writew(reg | STR_STP_CLK_START_CLK, host->base + MMC_REG_STR_STP_CLK); 145 146 do { 147 unsigned int delay = delay_limit; 148 149 while (delay--) { 150 reg = readw(host->base + MMC_REG_STATUS); 151 if (reg & STATUS_CARD_BUS_CLK_RUN) { 152 /* Check twice before cut */ 153 reg = readw(host->base + MMC_REG_STATUS); 154 if (reg & STATUS_CARD_BUS_CLK_RUN) 155 return 0; 156 } 157 158 if (test_bit(IMXMCI_PEND_STARTED_b, &host->pending_events)) 159 return 0; 160 } 161 162 local_irq_save(flags); 163 /* 164 * Ensure, that request is not doubled under all possible circumstances. 165 * It is possible, that cock running state is missed, because some other 166 * IRQ or schedule delays this function execution and the clocks has 167 * been already stopped by other means (response processing, SDHC HW) 168 */ 169 if (!test_bit(IMXMCI_PEND_STARTED_b, &host->pending_events)) { 170 reg = readw(host->base + MMC_REG_STR_STP_CLK); 171 writew(reg | STR_STP_CLK_START_CLK, 172 host->base + MMC_REG_STR_STP_CLK); 173 } 174 local_irq_restore(flags); 175 176 } while (++trials < 256); 177 178 dev_err(mmc_dev(host->mmc), "imxmci_start_clock blocked, no luck\n"); 179 180 return -1; 181} 182 183static void imxmci_softreset(struct imxmci_host *host) 184{ 185 int i; 186 187 /* reset sequence */ 188 writew(0x08, host->base + MMC_REG_STR_STP_CLK); 189 writew(0x0D, host->base + MMC_REG_STR_STP_CLK); 190 191 for (i = 0; i < 8; i++) 192 writew(0x05, host->base + MMC_REG_STR_STP_CLK); 193 194 writew(0xff, host->base + MMC_REG_RES_TO); 195 writew(512, host->base + MMC_REG_BLK_LEN); 196 writew(1, host->base + MMC_REG_NOB); 197} 198 199static int imxmci_busy_wait_for_status(struct imxmci_host *host, 200 unsigned int *pstat, unsigned int stat_mask, 201 int timeout, const char *where) 202{ 203 int loops = 0; 204 205 while (!(*pstat & stat_mask)) { 206 loops += 2; 207 if (loops >= timeout) { 208 dev_dbg(mmc_dev(host->mmc), "busy wait timeout in %s, STATUS = 0x%x (0x%x)\n", 209 where, *pstat, stat_mask); 210 return -1; 211 } 212 udelay(2); 213 *pstat |= readw(host->base + MMC_REG_STATUS); 214 } 215 if (!loops) 216 return 0; 217 218 /* The busy-wait is expected there for clock <8MHz due to SDHC hardware flaws */ 219 if (!(stat_mask & STATUS_END_CMD_RESP) || (host->mmc->ios.clock >= 8000000)) 220 dev_info(mmc_dev(host->mmc), "busy wait for %d usec in %s, STATUS = 0x%x (0x%x)\n", 221 loops, where, *pstat, stat_mask); 222 return loops; 223} 224 225static void imxmci_setup_data(struct imxmci_host *host, struct mmc_data *data) 226{ 227 unsigned int nob = data->blocks; 228 unsigned int blksz = data->blksz; 229 unsigned int datasz = nob * blksz; 230 int i; 231 232 if (data->flags & MMC_DATA_STREAM) 233 nob = 0xffff; 234 235 host->data = data; 236 data->bytes_xfered = 0; 237 238 writew(nob, host->base + MMC_REG_NOB); 239 writew(blksz, host->base + MMC_REG_BLK_LEN); 240 241 /* 242 * DMA cannot be used for small block sizes, we have to use CPU driven transfers otherwise. 243 * We are in big troubles for non-512 byte transfers according to note in the paragraph 244 * 20.6.7 of User Manual anyway, but we need to be able to transfer SCR at least. 245 * The situation is even more complex in reality. The SDHC in not able to handle wll 246 * partial FIFO fills and reads. The length has to be rounded up to burst size multiple. 247 * This is required for SCR read at least. 248 */ 249 if (datasz < 512) { 250 host->dma_size = datasz; 251 if (data->flags & MMC_DATA_READ) { 252 host->dma_dir = DMA_FROM_DEVICE; 253 254 /* Hack to enable read SCR */ 255 writew(1, host->base + MMC_REG_NOB); 256 writew(512, host->base + MMC_REG_BLK_LEN); 257 } else { 258 host->dma_dir = DMA_TO_DEVICE; 259 } 260 261 /* Convert back to virtual address */ 262 host->data_ptr = (u16 *)sg_virt(data->sg); 263 host->data_cnt = 0; 264 265 clear_bit(IMXMCI_PEND_DMA_DATA_b, &host->pending_events); 266 set_bit(IMXMCI_PEND_CPU_DATA_b, &host->pending_events); 267 268 return; 269 } 270 271 if (data->flags & MMC_DATA_READ) { 272 host->dma_dir = DMA_FROM_DEVICE; 273 host->dma_nents = dma_map_sg(mmc_dev(host->mmc), data->sg, 274 data->sg_len, host->dma_dir); 275 276 imx_dma_setup_sg(host->dma, data->sg, data->sg_len, datasz, 277 host->res->start + MMC_REG_BUFFER_ACCESS, 278 DMA_MODE_READ); 279 280 /*imx_dma_setup_mem2dev_ccr(host->dma, DMA_MODE_READ, IMX_DMA_WIDTH_16, CCR_REN);*/ 281 CCR(host->dma) = CCR_DMOD_LINEAR | CCR_DSIZ_32 | CCR_SMOD_FIFO | CCR_SSIZ_16 | CCR_REN; 282 } else { 283 host->dma_dir = DMA_TO_DEVICE; 284 285 host->dma_nents = dma_map_sg(mmc_dev(host->mmc), data->sg, 286 data->sg_len, host->dma_dir); 287 288 imx_dma_setup_sg(host->dma, data->sg, data->sg_len, datasz, 289 host->res->start + MMC_REG_BUFFER_ACCESS, 290 DMA_MODE_WRITE); 291 292 /*imx_dma_setup_mem2dev_ccr(host->dma, DMA_MODE_WRITE, IMX_DMA_WIDTH_16, CCR_REN);*/ 293 CCR(host->dma) = CCR_SMOD_LINEAR | CCR_SSIZ_32 | CCR_DMOD_FIFO | CCR_DSIZ_16 | CCR_REN; 294 } 295 296#if 1 /* This code is there only for consistency checking and can be disabled in future */ 297 host->dma_size = 0; 298 for (i = 0; i < host->dma_nents; i++) 299 host->dma_size += data->sg[i].length; 300 301 if (datasz > host->dma_size) { 302 dev_err(mmc_dev(host->mmc), "imxmci_setup_data datasz 0x%x > 0x%x dm_size\n", 303 datasz, host->dma_size); 304 } 305#endif 306 307 host->dma_size = datasz; 308 309 wmb(); 310 311 set_bit(IMXMCI_PEND_DMA_DATA_b, &host->pending_events); 312 clear_bit(IMXMCI_PEND_CPU_DATA_b, &host->pending_events); 313 314 /* start DMA engine for read, write is delayed after initial response */ 315 if (host->dma_dir == DMA_FROM_DEVICE) 316 imx_dma_enable(host->dma); 317} 318 319static void imxmci_start_cmd(struct imxmci_host *host, struct mmc_command *cmd, unsigned int cmdat) 320{ 321 unsigned long flags; 322 u32 imask; 323 324 WARN_ON(host->cmd != NULL); 325 host->cmd = cmd; 326 327 /* Ensure, that clock are stopped else command programming and start fails */ 328 imxmci_stop_clock(host); 329 330 if (cmd->flags & MMC_RSP_BUSY) 331 cmdat |= CMD_DAT_CONT_BUSY; 332 333 switch (mmc_resp_type(cmd)) { 334 case MMC_RSP_R1: /* short CRC, OPCODE */ 335 case MMC_RSP_R1B:/* short CRC, OPCODE, BUSY */ 336 cmdat |= CMD_DAT_CONT_RESPONSE_FORMAT_R1; 337 break; 338 case MMC_RSP_R2: /* long 136 bit + CRC */ 339 cmdat |= CMD_DAT_CONT_RESPONSE_FORMAT_R2; 340 break; 341 case MMC_RSP_R3: /* short */ 342 cmdat |= CMD_DAT_CONT_RESPONSE_FORMAT_R3; 343 break; 344 default: 345 break; 346 } 347 348 if (test_and_clear_bit(IMXMCI_PEND_SET_INIT_b, &host->pending_events)) 349 cmdat |= CMD_DAT_CONT_INIT; /* This command needs init */ 350 351 if (host->actual_bus_width == MMC_BUS_WIDTH_4) 352 cmdat |= CMD_DAT_CONT_BUS_WIDTH_4; 353 354 writew(cmd->opcode, host->base + MMC_REG_CMD); 355 writew(cmd->arg >> 16, host->base + MMC_REG_ARGH); 356 writew(cmd->arg & 0xffff, host->base + MMC_REG_ARGL); 357 writew(cmdat, host->base + MMC_REG_CMD_DAT_CONT); 358 359 atomic_set(&host->stuck_timeout, 0); 360 set_bit(IMXMCI_PEND_WAIT_RESP_b, &host->pending_events); 361 362 363 imask = IMXMCI_INT_MASK_DEFAULT; 364 imask &= ~INT_MASK_END_CMD_RES; 365 if (cmdat & CMD_DAT_CONT_DATA_ENABLE) { 366 /* imask &= ~INT_MASK_BUF_READY; */ 367 imask &= ~INT_MASK_DATA_TRAN; 368 if (cmdat & CMD_DAT_CONT_WRITE) 369 imask &= ~INT_MASK_WRITE_OP_DONE; 370 if (test_bit(IMXMCI_PEND_CPU_DATA_b, &host->pending_events)) 371 imask &= ~INT_MASK_BUF_READY; 372 } 373 374 spin_lock_irqsave(&host->lock, flags); 375 host->imask = imask; 376 writew(host->imask, host->base + MMC_REG_INT_MASK); 377 spin_unlock_irqrestore(&host->lock, flags); 378 379 dev_dbg(mmc_dev(host->mmc), "CMD%02d (0x%02x) mask set to 0x%04x\n", 380 cmd->opcode, cmd->opcode, imask); 381 382 imxmci_start_clock(host); 383} 384 385static void imxmci_finish_request(struct imxmci_host *host, struct mmc_request *req) 386{ 387 unsigned long flags; 388 389 spin_lock_irqsave(&host->lock, flags); 390 391 host->pending_events &= ~(IMXMCI_PEND_WAIT_RESP_m | IMXMCI_PEND_DMA_END_m | 392 IMXMCI_PEND_DMA_DATA_m | IMXMCI_PEND_CPU_DATA_m); 393 394 host->imask = IMXMCI_INT_MASK_DEFAULT; 395 writew(host->imask, host->base + MMC_REG_INT_MASK); 396 397 spin_unlock_irqrestore(&host->lock, flags); 398 399 if (req && req->cmd) 400 host->prev_cmd_code = req->cmd->opcode; 401 402 host->req = NULL; 403 host->cmd = NULL; 404 host->data = NULL; 405 mmc_request_done(host->mmc, req); 406} 407 408static int imxmci_finish_data(struct imxmci_host *host, unsigned int stat) 409{ 410 struct mmc_data *data = host->data; 411 int data_error; 412 413 if (test_and_clear_bit(IMXMCI_PEND_DMA_DATA_b, &host->pending_events)) { 414 imx_dma_disable(host->dma); 415 dma_unmap_sg(mmc_dev(host->mmc), data->sg, host->dma_nents, 416 host->dma_dir); 417 } 418 419 if (stat & STATUS_ERR_MASK) { 420 dev_dbg(mmc_dev(host->mmc), "request failed. status: 0x%08x\n", stat); 421 if (stat & (STATUS_CRC_READ_ERR | STATUS_CRC_WRITE_ERR)) 422 data->error = -EILSEQ; 423 else if (stat & STATUS_TIME_OUT_READ) 424 data->error = -ETIMEDOUT; 425 else 426 data->error = -EIO; 427 } else { 428 data->bytes_xfered = host->dma_size; 429 } 430 431 data_error = data->error; 432 433 host->data = NULL; 434 435 return data_error; 436} 437 438static int imxmci_cmd_done(struct imxmci_host *host, unsigned int stat) 439{ 440 struct mmc_command *cmd = host->cmd; 441 int i; 442 u32 a, b, c; 443 struct mmc_data *data = host->data; 444 445 if (!cmd) 446 return 0; 447 448 host->cmd = NULL; 449 450 if (stat & STATUS_TIME_OUT_RESP) { 451 dev_dbg(mmc_dev(host->mmc), "CMD TIMEOUT\n"); 452 cmd->error = -ETIMEDOUT; 453 } else if (stat & STATUS_RESP_CRC_ERR && cmd->flags & MMC_RSP_CRC) { 454 dev_dbg(mmc_dev(host->mmc), "cmd crc error\n"); 455 cmd->error = -EILSEQ; 456 } 457 458 if (cmd->flags & MMC_RSP_PRESENT) { 459 if (cmd->flags & MMC_RSP_136) { 460 for (i = 0; i < 4; i++) { 461 a = readw(host->base + MMC_REG_RES_FIFO); 462 b = readw(host->base + MMC_REG_RES_FIFO); 463 cmd->resp[i] = a << 16 | b; 464 } 465 } else { 466 a = readw(host->base + MMC_REG_RES_FIFO); 467 b = readw(host->base + MMC_REG_RES_FIFO); 468 c = readw(host->base + MMC_REG_RES_FIFO); 469 cmd->resp[0] = a << 24 | b << 8 | c >> 8; 470 } 471 } 472 473 dev_dbg(mmc_dev(host->mmc), "RESP 0x%08x, 0x%08x, 0x%08x, 0x%08x, error %d\n", 474 cmd->resp[0], cmd->resp[1], cmd->resp[2], cmd->resp[3], cmd->error); 475 476 if (data && !cmd->error && !(stat & STATUS_ERR_MASK)) { 477 if (host->req->data->flags & MMC_DATA_WRITE) { 478 479 /* Wait for FIFO to be empty before starting DMA write */ 480 481 stat = readw(host->base + MMC_REG_STATUS); 482 if (imxmci_busy_wait_for_status(host, &stat, 483 STATUS_APPL_BUFF_FE, 484 40, "imxmci_cmd_done DMA WR") < 0) { 485 cmd->error = -EIO; 486 imxmci_finish_data(host, stat); 487 if (host->req) 488 imxmci_finish_request(host, host->req); 489 dev_warn(mmc_dev(host->mmc), "STATUS = 0x%04x\n", 490 stat); 491 return 0; 492 } 493 494 if (test_bit(IMXMCI_PEND_DMA_DATA_b, &host->pending_events)) 495 imx_dma_enable(host->dma); 496 } 497 } else { 498 struct mmc_request *req; 499 imxmci_stop_clock(host); 500 req = host->req; 501 502 if (data) 503 imxmci_finish_data(host, stat); 504 505 if (req) 506 imxmci_finish_request(host, req); 507 else 508 dev_warn(mmc_dev(host->mmc), "imxmci_cmd_done: no request to finish\n"); 509 } 510 511 return 1; 512} 513 514static int imxmci_data_done(struct imxmci_host *host, unsigned int stat) 515{ 516 struct mmc_data *data = host->data; 517 int data_error; 518 519 if (!data) 520 return 0; 521 522 data_error = imxmci_finish_data(host, stat); 523 524 if (host->req->stop) { 525 imxmci_stop_clock(host); 526 imxmci_start_cmd(host, host->req->stop, 0); 527 } else { 528 struct mmc_request *req; 529 req = host->req; 530 if (req) 531 imxmci_finish_request(host, req); 532 else 533 dev_warn(mmc_dev(host->mmc), "imxmci_data_done: no request to finish\n"); 534 } 535 536 return 1; 537} 538 539static int imxmci_cpu_driven_data(struct imxmci_host *host, unsigned int *pstat) 540{ 541 int i; 542 int burst_len; 543 int trans_done = 0; 544 unsigned int stat = *pstat; 545 546 if (host->actual_bus_width != MMC_BUS_WIDTH_4) 547 burst_len = 16; 548 else 549 burst_len = 64; 550 551 /* This is unfortunately required */ 552 dev_dbg(mmc_dev(host->mmc), "imxmci_cpu_driven_data running STATUS = 0x%x\n", 553 stat); 554 555 udelay(20); /* required for clocks < 8MHz*/ 556 557 if (host->dma_dir == DMA_FROM_DEVICE) { 558 imxmci_busy_wait_for_status(host, &stat, 559 STATUS_APPL_BUFF_FF | STATUS_DATA_TRANS_DONE | 560 STATUS_TIME_OUT_READ, 561 50, "imxmci_cpu_driven_data read"); 562 563 while ((stat & (STATUS_APPL_BUFF_FF | STATUS_DATA_TRANS_DONE)) && 564 !(stat & STATUS_TIME_OUT_READ) && 565 (host->data_cnt < 512)) { 566 567 udelay(20); /* required for clocks < 8MHz*/ 568 569 for (i = burst_len; i >= 2 ; i -= 2) { 570 u16 data; 571 data = readw(host->base + MMC_REG_BUFFER_ACCESS); 572 udelay(10); /* required for clocks < 8MHz*/ 573 if (host->data_cnt+2 <= host->dma_size) { 574 *(host->data_ptr++) = data; 575 } else { 576 if (host->data_cnt < host->dma_size) 577 *(u8 *)(host->data_ptr) = data; 578 } 579 host->data_cnt += 2; 580 } 581 582 stat = readw(host->base + MMC_REG_STATUS); 583 584 dev_dbg(mmc_dev(host->mmc), "imxmci_cpu_driven_data read %d burst %d STATUS = 0x%x\n", 585 host->data_cnt, burst_len, stat); 586 } 587 588 if ((stat & STATUS_DATA_TRANS_DONE) && (host->data_cnt >= 512)) 589 trans_done = 1; 590 591 if (host->dma_size & 0x1ff) 592 stat &= ~STATUS_CRC_READ_ERR; 593 594 if (stat & STATUS_TIME_OUT_READ) { 595 dev_dbg(mmc_dev(host->mmc), "imxmci_cpu_driven_data read timeout STATUS = 0x%x\n", 596 stat); 597 trans_done = -1; 598 } 599 600 } else { 601 imxmci_busy_wait_for_status(host, &stat, 602 STATUS_APPL_BUFF_FE, 603 20, "imxmci_cpu_driven_data write"); 604 605 while ((stat & STATUS_APPL_BUFF_FE) && 606 (host->data_cnt < host->dma_size)) { 607 if (burst_len >= host->dma_size - host->data_cnt) { 608 burst_len = host->dma_size - host->data_cnt; 609 host->data_cnt = host->dma_size; 610 trans_done = 1; 611 } else { 612 host->data_cnt += burst_len; 613 } 614 615 for (i = burst_len; i > 0 ; i -= 2) 616 writew(*(host->data_ptr++), host->base + MMC_REG_BUFFER_ACCESS); 617 618 stat = readw(host->base + MMC_REG_STATUS); 619 620 dev_dbg(mmc_dev(host->mmc), "imxmci_cpu_driven_data write burst %d STATUS = 0x%x\n", 621 burst_len, stat); 622 } 623 } 624 625 *pstat = stat; 626 627 return trans_done; 628} 629 630static void imxmci_dma_irq(int dma, void *devid) 631{ 632 struct imxmci_host *host = devid; 633 u32 stat = readw(host->base + MMC_REG_STATUS); 634 635 atomic_set(&host->stuck_timeout, 0); 636 host->status_reg = stat; 637 set_bit(IMXMCI_PEND_DMA_END_b, &host->pending_events); 638 tasklet_schedule(&host->tasklet); 639} 640 641static irqreturn_t imxmci_irq(int irq, void *devid) 642{ 643 struct imxmci_host *host = devid; 644 u32 stat = readw(host->base + MMC_REG_STATUS); 645 int handled = 1; 646 647 writew(host->imask | INT_MASK_SDIO | INT_MASK_AUTO_CARD_DETECT, 648 host->base + MMC_REG_INT_MASK); 649 650 atomic_set(&host->stuck_timeout, 0); 651 host->status_reg = stat; 652 set_bit(IMXMCI_PEND_IRQ_b, &host->pending_events); 653 set_bit(IMXMCI_PEND_STARTED_b, &host->pending_events); 654 tasklet_schedule(&host->tasklet); 655 656 return IRQ_RETVAL(handled); 657} 658 659static void imxmci_tasklet_fnc(unsigned long data) 660{ 661 struct imxmci_host *host = (struct imxmci_host *)data; 662 u32 stat; 663 unsigned int data_dir_mask = 0; /* STATUS_WR_CRC_ERROR_CODE_MASK */ 664 int timeout = 0; 665 666 if (atomic_read(&host->stuck_timeout) > 4) { 667 char *what; 668 timeout = 1; 669 stat = readw(host->base + MMC_REG_STATUS); 670 host->status_reg = stat; 671 if (test_bit(IMXMCI_PEND_WAIT_RESP_b, &host->pending_events)) 672 if (test_bit(IMXMCI_PEND_DMA_DATA_b, &host->pending_events)) 673 what = "RESP+DMA"; 674 else 675 what = "RESP"; 676 else 677 if (test_bit(IMXMCI_PEND_DMA_DATA_b, &host->pending_events)) 678 if (test_bit(IMXMCI_PEND_DMA_END_b, &host->pending_events)) 679 what = "DATA"; 680 else 681 what = "DMA"; 682 else 683 what = "???"; 684 685 dev_err(mmc_dev(host->mmc), 686 "%s TIMEOUT, hardware stucked STATUS = 0x%04x IMASK = 0x%04x\n", 687 what, stat, 688 readw(host->base + MMC_REG_INT_MASK)); 689 dev_err(mmc_dev(host->mmc), 690 "CMD_DAT_CONT = 0x%04x, MMC_BLK_LEN = 0x%04x, MMC_NOB = 0x%04x, DMA_CCR = 0x%08x\n", 691 readw(host->base + MMC_REG_CMD_DAT_CONT), 692 readw(host->base + MMC_REG_BLK_LEN), 693 readw(host->base + MMC_REG_NOB), 694 CCR(host->dma)); 695 dev_err(mmc_dev(host->mmc), "CMD%d, prevCMD%d, bus %d-bit, dma_size = 0x%x\n", 696 host->cmd ? host->cmd->opcode : 0, 697 host->prev_cmd_code, 698 1 << host->actual_bus_width, host->dma_size); 699 } 700 701 if (!host->present || timeout) 702 host->status_reg = STATUS_TIME_OUT_RESP | STATUS_TIME_OUT_READ | 703 STATUS_CRC_READ_ERR | STATUS_CRC_WRITE_ERR; 704 705 if (test_bit(IMXMCI_PEND_IRQ_b, &host->pending_events) || timeout) { 706 clear_bit(IMXMCI_PEND_IRQ_b, &host->pending_events); 707 708 stat = readw(host->base + MMC_REG_STATUS); 709 /* 710 * This is not required in theory, but there is chance to miss some flag 711 * which clears automatically by mask write, FreeScale original code keeps 712 * stat from IRQ time so do I 713 */ 714 stat |= host->status_reg; 715 716 if (test_bit(IMXMCI_PEND_CPU_DATA_b, &host->pending_events)) 717 stat &= ~STATUS_CRC_READ_ERR; 718 719 if (test_bit(IMXMCI_PEND_WAIT_RESP_b, &host->pending_events)) { 720 imxmci_busy_wait_for_status(host, &stat, 721 STATUS_END_CMD_RESP | STATUS_ERR_MASK, 722 20, "imxmci_tasklet_fnc resp (ERRATUM #4)"); 723 } 724 725 if (stat & (STATUS_END_CMD_RESP | STATUS_ERR_MASK)) { 726 if (test_and_clear_bit(IMXMCI_PEND_WAIT_RESP_b, &host->pending_events)) 727 imxmci_cmd_done(host, stat); 728 if (host->data && (stat & STATUS_ERR_MASK)) 729 imxmci_data_done(host, stat); 730 } 731 732 if (test_bit(IMXMCI_PEND_CPU_DATA_b, &host->pending_events)) { 733 stat |= readw(host->base + MMC_REG_STATUS); 734 if (imxmci_cpu_driven_data(host, &stat)) { 735 if (test_and_clear_bit(IMXMCI_PEND_WAIT_RESP_b, &host->pending_events)) 736 imxmci_cmd_done(host, stat); 737 atomic_clear_mask(IMXMCI_PEND_IRQ_m|IMXMCI_PEND_CPU_DATA_m, 738 &host->pending_events); 739 imxmci_data_done(host, stat); 740 } 741 } 742 } 743 744 if (test_bit(IMXMCI_PEND_DMA_END_b, &host->pending_events) && 745 !test_bit(IMXMCI_PEND_WAIT_RESP_b, &host->pending_events)) { 746 747 stat = readw(host->base + MMC_REG_STATUS); 748 /* Same as above */ 749 stat |= host->status_reg; 750 751 if (host->dma_dir == DMA_TO_DEVICE) 752 data_dir_mask = STATUS_WRITE_OP_DONE; 753 else 754 data_dir_mask = STATUS_DATA_TRANS_DONE; 755 756 if (stat & data_dir_mask) { 757 clear_bit(IMXMCI_PEND_DMA_END_b, &host->pending_events); 758 imxmci_data_done(host, stat); 759 } 760 } 761 762 if (test_and_clear_bit(IMXMCI_PEND_CARD_XCHG_b, &host->pending_events)) { 763 764 if (host->cmd) 765 imxmci_cmd_done(host, STATUS_TIME_OUT_RESP); 766 767 if (host->data) 768 imxmci_data_done(host, STATUS_TIME_OUT_READ | 769 STATUS_CRC_READ_ERR | STATUS_CRC_WRITE_ERR); 770 771 if (host->req) 772 imxmci_finish_request(host, host->req); 773 774 mmc_detect_change(host->mmc, msecs_to_jiffies(100)); 775 776 } 777} 778 779static void imxmci_request(struct mmc_host *mmc, struct mmc_request *req) 780{ 781 struct imxmci_host *host = mmc_priv(mmc); 782 unsigned int cmdat; 783 784 WARN_ON(host->req != NULL); 785 786 host->req = req; 787 788 cmdat = 0; 789 790 if (req->data) { 791 imxmci_setup_data(host, req->data); 792 793 cmdat |= CMD_DAT_CONT_DATA_ENABLE; 794 795 if (req->data->flags & MMC_DATA_WRITE) 796 cmdat |= CMD_DAT_CONT_WRITE; 797 798 if (req->data->flags & MMC_DATA_STREAM) 799 cmdat |= CMD_DAT_CONT_STREAM_BLOCK; 800 } 801 802 imxmci_start_cmd(host, req->cmd, cmdat); 803} 804 805#define CLK_RATE 19200000 806 807static void imxmci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) 808{ 809 struct imxmci_host *host = mmc_priv(mmc); 810 int prescaler; 811 812 if (ios->bus_width == MMC_BUS_WIDTH_4) { 813 host->actual_bus_width = MMC_BUS_WIDTH_4; 814 imx_gpio_mode(PB11_PF_SD_DAT3); 815 BLR(host->dma) = 0; /* burst 64 byte read/write */ 816 } else { 817 host->actual_bus_width = MMC_BUS_WIDTH_1; 818 imx_gpio_mode(GPIO_PORTB | GPIO_IN | GPIO_PUEN | 11); 819 BLR(host->dma) = 16; /* burst 16 byte read/write */ 820 } 821 822 if (host->power_mode != ios->power_mode) { 823 switch (ios->power_mode) { 824 case MMC_POWER_OFF: 825 break; 826 case MMC_POWER_UP: 827 set_bit(IMXMCI_PEND_SET_INIT_b, &host->pending_events); 828 break; 829 case MMC_POWER_ON: 830 break; 831 } 832 host->power_mode = ios->power_mode; 833 } 834 835 if (ios->clock) { 836 unsigned int clk; 837 u16 reg; 838 839 /* The prescaler is 5 for PERCLK2 equal to 96MHz 840 * then 96MHz / 5 = 19.2 MHz 841 */ 842 clk = clk_get_rate(host->clk); 843 prescaler = (clk + (CLK_RATE * 7) / 8) / CLK_RATE; 844 switch (prescaler) { 845 case 0: 846 case 1: prescaler = 0; 847 break; 848 case 2: prescaler = 1; 849 break; 850 case 3: prescaler = 2; 851 break; 852 case 4: prescaler = 4; 853 break; 854 default: 855 case 5: prescaler = 5; 856 break; 857 } 858 859 dev_dbg(mmc_dev(host->mmc), "PERCLK2 %d MHz -> prescaler %d\n", 860 clk, prescaler); 861 862 for (clk = 0; clk < 8; clk++) { 863 int x; 864 x = CLK_RATE / (1 << clk); 865 if (x <= ios->clock) 866 break; 867 } 868 869 /* enable controller */ 870 reg = readw(host->base + MMC_REG_STR_STP_CLK); 871 writew(reg | STR_STP_CLK_ENABLE, 872 host->base + MMC_REG_STR_STP_CLK); 873 874 imxmci_stop_clock(host); 875 writew((prescaler << 3) | clk, host->base + MMC_REG_CLK_RATE); 876 /* 877 * Under my understanding, clock should not be started there, because it would 878 * initiate SDHC sequencer and send last or random command into card 879 */ 880 /* imxmci_start_clock(host); */ 881 882 dev_dbg(mmc_dev(host->mmc), 883 "MMC_CLK_RATE: 0x%08x\n", 884 readw(host->base + MMC_REG_CLK_RATE)); 885 } else { 886 imxmci_stop_clock(host); 887 } 888} 889 890static int imxmci_get_ro(struct mmc_host *mmc) 891{ 892 struct imxmci_host *host = mmc_priv(mmc); 893 894 if (host->pdata && host->pdata->get_ro) 895 return !!host->pdata->get_ro(mmc_dev(mmc)); 896 /* 897 * Board doesn't support read only detection; let the mmc core 898 * decide what to do. 899 */ 900 return -ENOSYS; 901} 902 903 904static const struct mmc_host_ops imxmci_ops = { 905 .request = imxmci_request, 906 .set_ios = imxmci_set_ios, 907 .get_ro = imxmci_get_ro, 908}; 909 910static void imxmci_check_status(unsigned long data) 911{ 912 struct imxmci_host *host = (struct imxmci_host *)data; 913 914 if (host->pdata && host->pdata->card_present && 915 host->pdata->card_present(mmc_dev(host->mmc)) != host->present) { 916 host->present ^= 1; 917 dev_info(mmc_dev(host->mmc), "card %s\n", 918 host->present ? "inserted" : "removed"); 919 920 set_bit(IMXMCI_PEND_CARD_XCHG_b, &host->pending_events); 921 tasklet_schedule(&host->tasklet); 922 } 923 924 if (test_bit(IMXMCI_PEND_WAIT_RESP_b, &host->pending_events) || 925 test_bit(IMXMCI_PEND_DMA_DATA_b, &host->pending_events)) { 926 atomic_inc(&host->stuck_timeout); 927 if (atomic_read(&host->stuck_timeout) > 4) 928 tasklet_schedule(&host->tasklet); 929 } else { 930 atomic_set(&host->stuck_timeout, 0); 931 932 } 933 934 mod_timer(&host->timer, jiffies + (HZ>>1)); 935} 936 937static int __init imxmci_probe(struct platform_device *pdev) 938{ 939 struct mmc_host *mmc; 940 struct imxmci_host *host = NULL; 941 struct resource *r; 942 int ret = 0, irq; 943 u16 rev_no; 944 945 pr_info("i.MX mmc driver\n"); 946 947 r = platform_get_resource(pdev, IORESOURCE_MEM, 0); 948 irq = platform_get_irq(pdev, 0); 949 if (!r || irq < 0) 950 return -ENXIO; 951 952 r = request_mem_region(r->start, resource_size(r), pdev->name); 953 if (!r) 954 return -EBUSY; 955 956 mmc = mmc_alloc_host(sizeof(struct imxmci_host), &pdev->dev); 957 if (!mmc) { 958 ret = -ENOMEM; 959 goto out; 960 } 961 962 mmc->ops = &imxmci_ops; 963 mmc->f_min = 150000; 964 mmc->f_max = CLK_RATE/2; 965 mmc->ocr_avail = MMC_VDD_32_33; 966 mmc->caps = MMC_CAP_4_BIT_DATA; 967 968 /* MMC core transfer sizes tunable parameters */ 969 mmc->max_segs = 64; 970 mmc->max_seg_size = 64*512; /* default PAGE_CACHE_SIZE */ 971 mmc->max_req_size = 64*512; /* default PAGE_CACHE_SIZE */ 972 mmc->max_blk_size = 2048; 973 mmc->max_blk_count = 65535; 974 975 host = mmc_priv(mmc); 976 host->base = ioremap(r->start, resource_size(r)); 977 if (!host->base) { 978 ret = -ENOMEM; 979 goto out; 980 } 981 982 host->mmc = mmc; 983 host->dma_allocated = 0; 984 host->pdata = pdev->dev.platform_data; 985 if (!host->pdata) 986 dev_warn(&pdev->dev, "No platform data provided!\n"); 987 988 spin_lock_init(&host->lock); 989 host->res = r; 990 host->irq = irq; 991 992 host->clk = clk_get(&pdev->dev, "perclk2"); 993 if (IS_ERR(host->clk)) { 994 ret = PTR_ERR(host->clk); 995 goto out; 996 } 997 clk_enable(host->clk); 998 999 imx_gpio_mode(PB8_PF_SD_DAT0); 1000 imx_gpio_mode(PB9_PF_SD_DAT1); 1001 imx_gpio_mode(PB10_PF_SD_DAT2); 1002 /* Configured as GPIO with pull-up to ensure right MCC card mode */ 1003 /* Switched to PB11_PF_SD_DAT3 if 4 bit bus is configured */ 1004 imx_gpio_mode(GPIO_PORTB | GPIO_IN | GPIO_PUEN | 11); 1005 /* imx_gpio_mode(PB11_PF_SD_DAT3); */ 1006 imx_gpio_mode(PB12_PF_SD_CLK); 1007 imx_gpio_mode(PB13_PF_SD_CMD); 1008 1009 imxmci_softreset(host); 1010 1011 rev_no = readw(host->base + MMC_REG_REV_NO); 1012 if (rev_no != 0x390) { 1013 dev_err(mmc_dev(host->mmc), "wrong rev.no. 0x%08x. aborting.\n", 1014 readw(host->base + MMC_REG_REV_NO)); 1015 goto out; 1016 } 1017 1018 /* recommended in data sheet */ 1019 writew(0x2db4, host->base + MMC_REG_READ_TO); 1020 1021 host->imask = IMXMCI_INT_MASK_DEFAULT; 1022 writew(host->imask, host->base + MMC_REG_INT_MASK); 1023 1024 host->dma = imx_dma_request_by_prio(DRIVER_NAME, DMA_PRIO_LOW); 1025 if(host->dma < 0) { 1026 dev_err(mmc_dev(host->mmc), "imx_dma_request_by_prio failed\n"); 1027 ret = -EBUSY; 1028 goto out; 1029 } 1030 host->dma_allocated = 1; 1031 imx_dma_setup_handlers(host->dma, imxmci_dma_irq, NULL, host); 1032 RSSR(host->dma) = DMA_REQ_SDHC; 1033 1034 tasklet_init(&host->tasklet, imxmci_tasklet_fnc, (unsigned long)host); 1035 host->status_reg=0; 1036 host->pending_events=0; 1037 1038 ret = request_irq(host->irq, imxmci_irq, 0, DRIVER_NAME, host); 1039 if (ret) 1040 goto out; 1041 1042 if (host->pdata && host->pdata->card_present) 1043 host->present = host->pdata->card_present(mmc_dev(mmc)); 1044 else /* if there is no way to detect assume that card is present */ 1045 host->present = 1; 1046 1047 init_timer(&host->timer); 1048 host->timer.data = (unsigned long)host; 1049 host->timer.function = imxmci_check_status; 1050 add_timer(&host->timer); 1051 mod_timer(&host->timer, jiffies + (HZ >> 1)); 1052 1053 platform_set_drvdata(pdev, mmc); 1054 1055 mmc_add_host(mmc); 1056 1057 return 0; 1058 1059out: 1060 if (host) { 1061 if (host->dma_allocated) { 1062 imx_dma_free(host->dma); 1063 host->dma_allocated = 0; 1064 } 1065 if (host->clk) { 1066 clk_disable(host->clk); 1067 clk_put(host->clk); 1068 } 1069 if (host->base) 1070 iounmap(host->base); 1071 } 1072 if (mmc) 1073 mmc_free_host(mmc); 1074 release_mem_region(r->start, resource_size(r)); 1075 return ret; 1076} 1077 1078static int __exit imxmci_remove(struct platform_device *pdev) 1079{ 1080 struct mmc_host *mmc = platform_get_drvdata(pdev); 1081 1082 platform_set_drvdata(pdev, NULL); 1083 1084 if (mmc) { 1085 struct imxmci_host *host = mmc_priv(mmc); 1086 1087 tasklet_disable(&host->tasklet); 1088 1089 del_timer_sync(&host->timer); 1090 mmc_remove_host(mmc); 1091 1092 free_irq(host->irq, host); 1093 iounmap(host->base); 1094 if (host->dma_allocated) { 1095 imx_dma_free(host->dma); 1096 host->dma_allocated = 0; 1097 } 1098 1099 tasklet_kill(&host->tasklet); 1100 1101 clk_disable(host->clk); 1102 clk_put(host->clk); 1103 1104 release_mem_region(host->res->start, resource_size(host->res)); 1105 1106 mmc_free_host(mmc); 1107 } 1108 return 0; 1109} 1110 1111#ifdef CONFIG_PM 1112static int imxmci_suspend(struct platform_device *dev, pm_message_t state) 1113{ 1114 struct mmc_host *mmc = platform_get_drvdata(dev); 1115 int ret = 0; 1116 1117 if (mmc) 1118 ret = mmc_suspend_host(mmc); 1119 1120 return ret; 1121} 1122 1123static int imxmci_resume(struct platform_device *dev) 1124{ 1125 struct mmc_host *mmc = platform_get_drvdata(dev); 1126 struct imxmci_host *host; 1127 int ret = 0; 1128 1129 if (mmc) { 1130 host = mmc_priv(mmc); 1131 if (host) 1132 set_bit(IMXMCI_PEND_SET_INIT_b, &host->pending_events); 1133 ret = mmc_resume_host(mmc); 1134 } 1135 1136 return ret; 1137} 1138#else 1139#define imxmci_suspend NULL 1140#define imxmci_resume NULL 1141#endif /* CONFIG_PM */ 1142 1143static struct platform_driver imxmci_driver = { 1144 .remove = __exit_p(imxmci_remove), 1145 .suspend = imxmci_suspend, 1146 .resume = imxmci_resume, 1147 .driver = { 1148 .name = DRIVER_NAME, 1149 .owner = THIS_MODULE, 1150 } 1151}; 1152 1153static int __init imxmci_init(void) 1154{ 1155 return platform_driver_probe(&imxmci_driver, imxmci_probe); 1156} 1157 1158static void __exit imxmci_exit(void) 1159{ 1160 platform_driver_unregister(&imxmci_driver); 1161} 1162 1163module_init(imxmci_init); 1164module_exit(imxmci_exit); 1165 1166MODULE_DESCRIPTION("i.MX Multimedia Card Interface Driver"); 1167MODULE_AUTHOR("Sascha Hauer, Pengutronix"); 1168MODULE_LICENSE("GPL"); 1169MODULE_ALIAS("platform:imx-mmc");