xref: /openbmc/linux/drivers/mmc/host/pxamci.c (revision b96fc2f3)
1 /*
2  *  linux/drivers/mmc/host/pxa.c - PXA MMCI driver
3  *
4  *  Copyright (C) 2003 Russell King, All Rights Reserved.
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License version 2 as
8  * published by the Free Software Foundation.
9  *
10  *  This hardware is really sick:
11  *   - No way to clear interrupts.
12  *   - Have to turn off the clock whenever we touch the device.
13  *   - Doesn't tell you how many data blocks were transferred.
14  *  Yuck!
15  *
16  *	1 and 3 byte data transfers not supported
17  *	max block length up to 1023
18  */
19 #include <linux/module.h>
20 #include <linux/init.h>
21 #include <linux/ioport.h>
22 #include <linux/platform_device.h>
23 #include <linux/delay.h>
24 #include <linux/interrupt.h>
25 #include <linux/dmaengine.h>
26 #include <linux/dma-mapping.h>
27 #include <linux/dma/pxa-dma.h>
28 #include <linux/clk.h>
29 #include <linux/err.h>
30 #include <linux/mmc/host.h>
31 #include <linux/mmc/slot-gpio.h>
32 #include <linux/io.h>
33 #include <linux/regulator/consumer.h>
34 #include <linux/gpio.h>
35 #include <linux/gfp.h>
36 #include <linux/of.h>
37 #include <linux/of_gpio.h>
38 #include <linux/of_device.h>
39 
40 #include <asm/sizes.h>
41 
42 #include <mach/hardware.h>
43 #include <linux/platform_data/mmc-pxamci.h>
44 
45 #include "pxamci.h"
46 
47 #define DRIVER_NAME	"pxa2xx-mci"
48 
49 #define NR_SG	1
50 #define CLKRT_OFF	(~0)
51 
52 #define mmc_has_26MHz()		(cpu_is_pxa300() || cpu_is_pxa310() \
53 				|| cpu_is_pxa935())
54 
55 struct pxamci_host {
56 	struct mmc_host		*mmc;
57 	spinlock_t		lock;
58 	struct resource		*res;
59 	void __iomem		*base;
60 	struct clk		*clk;
61 	unsigned long		clkrate;
62 	int			irq;
63 	unsigned int		clkrt;
64 	unsigned int		cmdat;
65 	unsigned int		imask;
66 	unsigned int		power_mode;
67 	struct pxamci_platform_data *pdata;
68 
69 	struct mmc_request	*mrq;
70 	struct mmc_command	*cmd;
71 	struct mmc_data		*data;
72 
73 	struct dma_chan		*dma_chan_rx;
74 	struct dma_chan		*dma_chan_tx;
75 	dma_cookie_t		dma_cookie;
76 	dma_addr_t		sg_dma;
77 	unsigned int		dma_len;
78 
79 	unsigned int		dma_dir;
80 	unsigned int		dma_drcmrrx;
81 	unsigned int		dma_drcmrtx;
82 
83 	struct regulator	*vcc;
84 };
85 
86 static inline void pxamci_init_ocr(struct pxamci_host *host)
87 {
88 #ifdef CONFIG_REGULATOR
89 	host->vcc = regulator_get_optional(mmc_dev(host->mmc), "vmmc");
90 
91 	if (IS_ERR(host->vcc))
92 		host->vcc = NULL;
93 	else {
94 		host->mmc->ocr_avail = mmc_regulator_get_ocrmask(host->vcc);
95 		if (host->pdata && host->pdata->ocr_mask)
96 			dev_warn(mmc_dev(host->mmc),
97 				"ocr_mask/setpower will not be used\n");
98 	}
99 #endif
100 	if (host->vcc == NULL) {
101 		/* fall-back to platform data */
102 		host->mmc->ocr_avail = host->pdata ?
103 			host->pdata->ocr_mask :
104 			MMC_VDD_32_33 | MMC_VDD_33_34;
105 	}
106 }
107 
108 static inline int pxamci_set_power(struct pxamci_host *host,
109 				    unsigned char power_mode,
110 				    unsigned int vdd)
111 {
112 	int on;
113 
114 	if (host->vcc) {
115 		int ret;
116 
117 		if (power_mode == MMC_POWER_UP) {
118 			ret = mmc_regulator_set_ocr(host->mmc, host->vcc, vdd);
119 			if (ret)
120 				return ret;
121 		} else if (power_mode == MMC_POWER_OFF) {
122 			ret = mmc_regulator_set_ocr(host->mmc, host->vcc, 0);
123 			if (ret)
124 				return ret;
125 		}
126 	}
127 	if (!host->vcc && host->pdata &&
128 	    gpio_is_valid(host->pdata->gpio_power)) {
129 		on = ((1 << vdd) & host->pdata->ocr_mask);
130 		gpio_set_value(host->pdata->gpio_power,
131 			       !!on ^ host->pdata->gpio_power_invert);
132 	}
133 	if (!host->vcc && host->pdata && host->pdata->setpower)
134 		return host->pdata->setpower(mmc_dev(host->mmc), vdd);
135 
136 	return 0;
137 }
138 
139 static void pxamci_stop_clock(struct pxamci_host *host)
140 {
141 	if (readl(host->base + MMC_STAT) & STAT_CLK_EN) {
142 		unsigned long timeout = 10000;
143 		unsigned int v;
144 
145 		writel(STOP_CLOCK, host->base + MMC_STRPCL);
146 
147 		do {
148 			v = readl(host->base + MMC_STAT);
149 			if (!(v & STAT_CLK_EN))
150 				break;
151 			udelay(1);
152 		} while (timeout--);
153 
154 		if (v & STAT_CLK_EN)
155 			dev_err(mmc_dev(host->mmc), "unable to stop clock\n");
156 	}
157 }
158 
159 static void pxamci_enable_irq(struct pxamci_host *host, unsigned int mask)
160 {
161 	unsigned long flags;
162 
163 	spin_lock_irqsave(&host->lock, flags);
164 	host->imask &= ~mask;
165 	writel(host->imask, host->base + MMC_I_MASK);
166 	spin_unlock_irqrestore(&host->lock, flags);
167 }
168 
169 static void pxamci_disable_irq(struct pxamci_host *host, unsigned int mask)
170 {
171 	unsigned long flags;
172 
173 	spin_lock_irqsave(&host->lock, flags);
174 	host->imask |= mask;
175 	writel(host->imask, host->base + MMC_I_MASK);
176 	spin_unlock_irqrestore(&host->lock, flags);
177 }
178 
179 static void pxamci_dma_irq(void *param);
180 
181 static void pxamci_setup_data(struct pxamci_host *host, struct mmc_data *data)
182 {
183 	struct dma_async_tx_descriptor *tx;
184 	enum dma_data_direction direction;
185 	struct dma_slave_config	config;
186 	struct dma_chan *chan;
187 	unsigned int nob = data->blocks;
188 	unsigned long long clks;
189 	unsigned int timeout;
190 	int ret;
191 
192 	host->data = data;
193 
194 	if (data->flags & MMC_DATA_STREAM)
195 		nob = 0xffff;
196 
197 	writel(nob, host->base + MMC_NOB);
198 	writel(data->blksz, host->base + MMC_BLKLEN);
199 
200 	clks = (unsigned long long)data->timeout_ns * host->clkrate;
201 	do_div(clks, 1000000000UL);
202 	timeout = (unsigned int)clks + (data->timeout_clks << host->clkrt);
203 	writel((timeout + 255) / 256, host->base + MMC_RDTO);
204 
205 	memset(&config, 0, sizeof(config));
206 	config.src_addr_width = DMA_SLAVE_BUSWIDTH_1_BYTE;
207 	config.dst_addr_width = DMA_SLAVE_BUSWIDTH_1_BYTE;
208 	config.src_addr = host->res->start + MMC_RXFIFO;
209 	config.dst_addr = host->res->start + MMC_TXFIFO;
210 	config.src_maxburst = 32;
211 	config.dst_maxburst = 32;
212 
213 	if (data->flags & MMC_DATA_READ) {
214 		host->dma_dir = DMA_FROM_DEVICE;
215 		direction = DMA_DEV_TO_MEM;
216 		chan = host->dma_chan_rx;
217 	} else {
218 		host->dma_dir = DMA_TO_DEVICE;
219 		direction = DMA_MEM_TO_DEV;
220 		chan = host->dma_chan_tx;
221 	}
222 
223 	config.direction = direction;
224 
225 	ret = dmaengine_slave_config(chan, &config);
226 	if (ret < 0) {
227 		dev_err(mmc_dev(host->mmc), "dma slave config failed\n");
228 		return;
229 	}
230 
231 	host->dma_len = dma_map_sg(chan->device->dev, data->sg, data->sg_len,
232 				   host->dma_dir);
233 
234 	tx = dmaengine_prep_slave_sg(chan, data->sg, host->dma_len, direction,
235 				     DMA_PREP_INTERRUPT);
236 	if (!tx) {
237 		dev_err(mmc_dev(host->mmc), "prep_slave_sg() failed\n");
238 		return;
239 	}
240 
241 	if (!(data->flags & MMC_DATA_READ)) {
242 		tx->callback = pxamci_dma_irq;
243 		tx->callback_param = host;
244 	}
245 
246 	host->dma_cookie = dmaengine_submit(tx);
247 
248 	/*
249 	 * workaround for erratum #91:
250 	 * only start DMA now if we are doing a read,
251 	 * otherwise we wait until CMD/RESP has finished
252 	 * before starting DMA.
253 	 */
254 	if (!cpu_is_pxa27x() || data->flags & MMC_DATA_READ)
255 		dma_async_issue_pending(chan);
256 }
257 
258 static void pxamci_start_cmd(struct pxamci_host *host, struct mmc_command *cmd, unsigned int cmdat)
259 {
260 	WARN_ON(host->cmd != NULL);
261 	host->cmd = cmd;
262 
263 	if (cmd->flags & MMC_RSP_BUSY)
264 		cmdat |= CMDAT_BUSY;
265 
266 #define RSP_TYPE(x)	((x) & ~(MMC_RSP_BUSY|MMC_RSP_OPCODE))
267 	switch (RSP_TYPE(mmc_resp_type(cmd))) {
268 	case RSP_TYPE(MMC_RSP_R1): /* r1, r1b, r6, r7 */
269 		cmdat |= CMDAT_RESP_SHORT;
270 		break;
271 	case RSP_TYPE(MMC_RSP_R3):
272 		cmdat |= CMDAT_RESP_R3;
273 		break;
274 	case RSP_TYPE(MMC_RSP_R2):
275 		cmdat |= CMDAT_RESP_R2;
276 		break;
277 	default:
278 		break;
279 	}
280 
281 	writel(cmd->opcode, host->base + MMC_CMD);
282 	writel(cmd->arg >> 16, host->base + MMC_ARGH);
283 	writel(cmd->arg & 0xffff, host->base + MMC_ARGL);
284 	writel(cmdat, host->base + MMC_CMDAT);
285 	writel(host->clkrt, host->base + MMC_CLKRT);
286 
287 	writel(START_CLOCK, host->base + MMC_STRPCL);
288 
289 	pxamci_enable_irq(host, END_CMD_RES);
290 }
291 
292 static void pxamci_finish_request(struct pxamci_host *host, struct mmc_request *mrq)
293 {
294 	host->mrq = NULL;
295 	host->cmd = NULL;
296 	host->data = NULL;
297 	mmc_request_done(host->mmc, mrq);
298 }
299 
300 static int pxamci_cmd_done(struct pxamci_host *host, unsigned int stat)
301 {
302 	struct mmc_command *cmd = host->cmd;
303 	int i;
304 	u32 v;
305 
306 	if (!cmd)
307 		return 0;
308 
309 	host->cmd = NULL;
310 
311 	/*
312 	 * Did I mention this is Sick.  We always need to
313 	 * discard the upper 8 bits of the first 16-bit word.
314 	 */
315 	v = readl(host->base + MMC_RES) & 0xffff;
316 	for (i = 0; i < 4; i++) {
317 		u32 w1 = readl(host->base + MMC_RES) & 0xffff;
318 		u32 w2 = readl(host->base + MMC_RES) & 0xffff;
319 		cmd->resp[i] = v << 24 | w1 << 8 | w2 >> 8;
320 		v = w2;
321 	}
322 
323 	if (stat & STAT_TIME_OUT_RESPONSE) {
324 		cmd->error = -ETIMEDOUT;
325 	} else if (stat & STAT_RES_CRC_ERR && cmd->flags & MMC_RSP_CRC) {
326 		/*
327 		 * workaround for erratum #42:
328 		 * Intel PXA27x Family Processor Specification Update Rev 001
329 		 * A bogus CRC error can appear if the msb of a 136 bit
330 		 * response is a one.
331 		 */
332 		if (cpu_is_pxa27x() &&
333 		    (cmd->flags & MMC_RSP_136 && cmd->resp[0] & 0x80000000))
334 			pr_debug("ignoring CRC from command %d - *risky*\n", cmd->opcode);
335 		else
336 			cmd->error = -EILSEQ;
337 	}
338 
339 	pxamci_disable_irq(host, END_CMD_RES);
340 	if (host->data && !cmd->error) {
341 		pxamci_enable_irq(host, DATA_TRAN_DONE);
342 		/*
343 		 * workaround for erratum #91, if doing write
344 		 * enable DMA late
345 		 */
346 		if (cpu_is_pxa27x() && host->data->flags & MMC_DATA_WRITE)
347 			dma_async_issue_pending(host->dma_chan_tx);
348 	} else {
349 		pxamci_finish_request(host, host->mrq);
350 	}
351 
352 	return 1;
353 }
354 
355 static int pxamci_data_done(struct pxamci_host *host, unsigned int stat)
356 {
357 	struct mmc_data *data = host->data;
358 	struct dma_chan *chan;
359 
360 	if (!data)
361 		return 0;
362 
363 	if (data->flags & MMC_DATA_READ)
364 		chan = host->dma_chan_rx;
365 	else
366 		chan = host->dma_chan_tx;
367 	dma_unmap_sg(chan->device->dev,
368 		     data->sg, data->sg_len, host->dma_dir);
369 
370 	if (stat & STAT_READ_TIME_OUT)
371 		data->error = -ETIMEDOUT;
372 	else if (stat & (STAT_CRC_READ_ERROR|STAT_CRC_WRITE_ERROR))
373 		data->error = -EILSEQ;
374 
375 	/*
376 	 * There appears to be a hardware design bug here.  There seems to
377 	 * be no way to find out how much data was transferred to the card.
378 	 * This means that if there was an error on any block, we mark all
379 	 * data blocks as being in error.
380 	 */
381 	if (!data->error)
382 		data->bytes_xfered = data->blocks * data->blksz;
383 	else
384 		data->bytes_xfered = 0;
385 
386 	pxamci_disable_irq(host, DATA_TRAN_DONE);
387 
388 	host->data = NULL;
389 	if (host->mrq->stop) {
390 		pxamci_stop_clock(host);
391 		pxamci_start_cmd(host, host->mrq->stop, host->cmdat);
392 	} else {
393 		pxamci_finish_request(host, host->mrq);
394 	}
395 
396 	return 1;
397 }
398 
399 static irqreturn_t pxamci_irq(int irq, void *devid)
400 {
401 	struct pxamci_host *host = devid;
402 	unsigned int ireg;
403 	int handled = 0;
404 
405 	ireg = readl(host->base + MMC_I_REG) & ~readl(host->base + MMC_I_MASK);
406 
407 	if (ireg) {
408 		unsigned stat = readl(host->base + MMC_STAT);
409 
410 		pr_debug("PXAMCI: irq %08x stat %08x\n", ireg, stat);
411 
412 		if (ireg & END_CMD_RES)
413 			handled |= pxamci_cmd_done(host, stat);
414 		if (ireg & DATA_TRAN_DONE)
415 			handled |= pxamci_data_done(host, stat);
416 		if (ireg & SDIO_INT) {
417 			mmc_signal_sdio_irq(host->mmc);
418 			handled = 1;
419 		}
420 	}
421 
422 	return IRQ_RETVAL(handled);
423 }
424 
425 static void pxamci_request(struct mmc_host *mmc, struct mmc_request *mrq)
426 {
427 	struct pxamci_host *host = mmc_priv(mmc);
428 	unsigned int cmdat;
429 
430 	WARN_ON(host->mrq != NULL);
431 
432 	host->mrq = mrq;
433 
434 	pxamci_stop_clock(host);
435 
436 	cmdat = host->cmdat;
437 	host->cmdat &= ~CMDAT_INIT;
438 
439 	if (mrq->data) {
440 		pxamci_setup_data(host, mrq->data);
441 
442 		cmdat &= ~CMDAT_BUSY;
443 		cmdat |= CMDAT_DATAEN | CMDAT_DMAEN;
444 		if (mrq->data->flags & MMC_DATA_WRITE)
445 			cmdat |= CMDAT_WRITE;
446 
447 		if (mrq->data->flags & MMC_DATA_STREAM)
448 			cmdat |= CMDAT_STREAM;
449 	}
450 
451 	pxamci_start_cmd(host, mrq->cmd, cmdat);
452 }
453 
454 static int pxamci_get_ro(struct mmc_host *mmc)
455 {
456 	struct pxamci_host *host = mmc_priv(mmc);
457 
458 	if (host->pdata && gpio_is_valid(host->pdata->gpio_card_ro))
459 		return mmc_gpio_get_ro(mmc);
460 	if (host->pdata && host->pdata->get_ro)
461 		return !!host->pdata->get_ro(mmc_dev(mmc));
462 	/*
463 	 * Board doesn't support read only detection; let the mmc core
464 	 * decide what to do.
465 	 */
466 	return -ENOSYS;
467 }
468 
469 static void pxamci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
470 {
471 	struct pxamci_host *host = mmc_priv(mmc);
472 
473 	if (ios->clock) {
474 		unsigned long rate = host->clkrate;
475 		unsigned int clk = rate / ios->clock;
476 
477 		if (host->clkrt == CLKRT_OFF)
478 			clk_prepare_enable(host->clk);
479 
480 		if (ios->clock == 26000000) {
481 			/* to support 26MHz */
482 			host->clkrt = 7;
483 		} else {
484 			/* to handle (19.5MHz, 26MHz) */
485 			if (!clk)
486 				clk = 1;
487 
488 			/*
489 			 * clk might result in a lower divisor than we
490 			 * desire.  check for that condition and adjust
491 			 * as appropriate.
492 			 */
493 			if (rate / clk > ios->clock)
494 				clk <<= 1;
495 			host->clkrt = fls(clk) - 1;
496 		}
497 
498 		/*
499 		 * we write clkrt on the next command
500 		 */
501 	} else {
502 		pxamci_stop_clock(host);
503 		if (host->clkrt != CLKRT_OFF) {
504 			host->clkrt = CLKRT_OFF;
505 			clk_disable_unprepare(host->clk);
506 		}
507 	}
508 
509 	if (host->power_mode != ios->power_mode) {
510 		int ret;
511 
512 		host->power_mode = ios->power_mode;
513 
514 		ret = pxamci_set_power(host, ios->power_mode, ios->vdd);
515 		if (ret) {
516 			dev_err(mmc_dev(mmc), "unable to set power\n");
517 			/*
518 			 * The .set_ios() function in the mmc_host_ops
519 			 * struct return void, and failing to set the
520 			 * power should be rare so we print an error and
521 			 * return here.
522 			 */
523 			return;
524 		}
525 
526 		if (ios->power_mode == MMC_POWER_ON)
527 			host->cmdat |= CMDAT_INIT;
528 	}
529 
530 	if (ios->bus_width == MMC_BUS_WIDTH_4)
531 		host->cmdat |= CMDAT_SD_4DAT;
532 	else
533 		host->cmdat &= ~CMDAT_SD_4DAT;
534 
535 	dev_dbg(mmc_dev(mmc), "PXAMCI: clkrt = %x cmdat = %x\n",
536 		host->clkrt, host->cmdat);
537 }
538 
539 static void pxamci_enable_sdio_irq(struct mmc_host *host, int enable)
540 {
541 	struct pxamci_host *pxa_host = mmc_priv(host);
542 
543 	if (enable)
544 		pxamci_enable_irq(pxa_host, SDIO_INT);
545 	else
546 		pxamci_disable_irq(pxa_host, SDIO_INT);
547 }
548 
549 static const struct mmc_host_ops pxamci_ops = {
550 	.request		= pxamci_request,
551 	.get_cd			= mmc_gpio_get_cd,
552 	.get_ro			= pxamci_get_ro,
553 	.set_ios		= pxamci_set_ios,
554 	.enable_sdio_irq	= pxamci_enable_sdio_irq,
555 };
556 
557 static void pxamci_dma_irq(void *param)
558 {
559 	struct pxamci_host *host = param;
560 	struct dma_tx_state state;
561 	enum dma_status status;
562 	struct dma_chan *chan;
563 	unsigned long flags;
564 
565 	spin_lock_irqsave(&host->lock, flags);
566 
567 	if (!host->data)
568 		goto out_unlock;
569 
570 	if (host->data->flags & MMC_DATA_READ)
571 		chan = host->dma_chan_rx;
572 	else
573 		chan = host->dma_chan_tx;
574 
575 	status = dmaengine_tx_status(chan, host->dma_cookie, &state);
576 
577 	if (likely(status == DMA_COMPLETE)) {
578 		writel(BUF_PART_FULL, host->base + MMC_PRTBUF);
579 	} else {
580 		pr_err("%s: DMA error on %s channel\n", mmc_hostname(host->mmc),
581 			host->data->flags & MMC_DATA_READ ? "rx" : "tx");
582 		host->data->error = -EIO;
583 		pxamci_data_done(host, 0);
584 	}
585 
586 out_unlock:
587 	spin_unlock_irqrestore(&host->lock, flags);
588 }
589 
590 static irqreturn_t pxamci_detect_irq(int irq, void *devid)
591 {
592 	struct pxamci_host *host = mmc_priv(devid);
593 
594 	mmc_detect_change(devid, msecs_to_jiffies(host->pdata->detect_delay_ms));
595 	return IRQ_HANDLED;
596 }
597 
598 #ifdef CONFIG_OF
599 static const struct of_device_id pxa_mmc_dt_ids[] = {
600         { .compatible = "marvell,pxa-mmc" },
601         { }
602 };
603 
604 MODULE_DEVICE_TABLE(of, pxa_mmc_dt_ids);
605 
606 static int pxamci_of_init(struct platform_device *pdev)
607 {
608         struct device_node *np = pdev->dev.of_node;
609         struct pxamci_platform_data *pdata;
610         u32 tmp;
611 
612         if (!np)
613                 return 0;
614 
615         pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL);
616         if (!pdata)
617                 return -ENOMEM;
618 
619 	pdata->gpio_card_detect =
620 		of_get_named_gpio(np, "cd-gpios", 0);
621 	pdata->gpio_card_ro =
622 		of_get_named_gpio(np, "wp-gpios", 0);
623 
624 	/* pxa-mmc specific */
625 	pdata->gpio_power =
626 		of_get_named_gpio(np, "pxa-mmc,gpio-power", 0);
627 
628 	if (of_property_read_u32(np, "pxa-mmc,detect-delay-ms", &tmp) == 0)
629 		pdata->detect_delay_ms = tmp;
630 
631         pdev->dev.platform_data = pdata;
632 
633         return 0;
634 }
635 #else
636 static int pxamci_of_init(struct platform_device *pdev)
637 {
638         return 0;
639 }
640 #endif
641 
642 static int pxamci_probe(struct platform_device *pdev)
643 {
644 	struct mmc_host *mmc;
645 	struct pxamci_host *host = NULL;
646 	struct resource *r, *dmarx, *dmatx;
647 	struct pxad_param param_rx, param_tx;
648 	int ret, irq, gpio_cd = -1, gpio_ro = -1, gpio_power = -1;
649 	dma_cap_mask_t mask;
650 
651 	ret = pxamci_of_init(pdev);
652 	if (ret)
653 		return ret;
654 
655 	r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
656 	irq = platform_get_irq(pdev, 0);
657 	if (!r || irq < 0)
658 		return -ENXIO;
659 
660 	r = request_mem_region(r->start, SZ_4K, DRIVER_NAME);
661 	if (!r)
662 		return -EBUSY;
663 
664 	mmc = mmc_alloc_host(sizeof(struct pxamci_host), &pdev->dev);
665 	if (!mmc) {
666 		ret = -ENOMEM;
667 		goto out;
668 	}
669 
670 	mmc->ops = &pxamci_ops;
671 
672 	/*
673 	 * We can do SG-DMA, but we don't because we never know how much
674 	 * data we successfully wrote to the card.
675 	 */
676 	mmc->max_segs = NR_SG;
677 
678 	/*
679 	 * Our hardware DMA can handle a maximum of one page per SG entry.
680 	 */
681 	mmc->max_seg_size = PAGE_SIZE;
682 
683 	/*
684 	 * Block length register is only 10 bits before PXA27x.
685 	 */
686 	mmc->max_blk_size = cpu_is_pxa25x() ? 1023 : 2048;
687 
688 	/*
689 	 * Block count register is 16 bits.
690 	 */
691 	mmc->max_blk_count = 65535;
692 
693 	host = mmc_priv(mmc);
694 	host->mmc = mmc;
695 	host->pdata = pdev->dev.platform_data;
696 	host->clkrt = CLKRT_OFF;
697 
698 	host->clk = clk_get(&pdev->dev, NULL);
699 	if (IS_ERR(host->clk)) {
700 		ret = PTR_ERR(host->clk);
701 		host->clk = NULL;
702 		goto out;
703 	}
704 
705 	host->clkrate = clk_get_rate(host->clk);
706 
707 	/*
708 	 * Calculate minimum clock rate, rounding up.
709 	 */
710 	mmc->f_min = (host->clkrate + 63) / 64;
711 	mmc->f_max = (mmc_has_26MHz()) ? 26000000 : host->clkrate;
712 
713 	pxamci_init_ocr(host);
714 
715 	mmc->caps = 0;
716 	host->cmdat = 0;
717 	if (!cpu_is_pxa25x()) {
718 		mmc->caps |= MMC_CAP_4_BIT_DATA | MMC_CAP_SDIO_IRQ;
719 		host->cmdat |= CMDAT_SDIO_INT_EN;
720 		if (mmc_has_26MHz())
721 			mmc->caps |= MMC_CAP_MMC_HIGHSPEED |
722 				     MMC_CAP_SD_HIGHSPEED;
723 	}
724 
725 	spin_lock_init(&host->lock);
726 	host->res = r;
727 	host->irq = irq;
728 	host->imask = MMC_I_MASK_ALL;
729 
730 	host->base = ioremap(r->start, SZ_4K);
731 	if (!host->base) {
732 		ret = -ENOMEM;
733 		goto out;
734 	}
735 
736 	/*
737 	 * Ensure that the host controller is shut down, and setup
738 	 * with our defaults.
739 	 */
740 	pxamci_stop_clock(host);
741 	writel(0, host->base + MMC_SPI);
742 	writel(64, host->base + MMC_RESTO);
743 	writel(host->imask, host->base + MMC_I_MASK);
744 
745 	ret = request_irq(host->irq, pxamci_irq, 0, DRIVER_NAME, host);
746 	if (ret)
747 		goto out;
748 
749 	platform_set_drvdata(pdev, mmc);
750 
751 	if (!pdev->dev.of_node) {
752 		dmarx = platform_get_resource(pdev, IORESOURCE_DMA, 0);
753 		dmatx = platform_get_resource(pdev, IORESOURCE_DMA, 1);
754 		if (!dmarx || !dmatx) {
755 			ret = -ENXIO;
756 			goto out;
757 		}
758 		param_rx.prio = PXAD_PRIO_LOWEST;
759 		param_rx.drcmr = dmarx->start;
760 		param_tx.prio = PXAD_PRIO_LOWEST;
761 		param_tx.drcmr = dmatx->start;
762 	}
763 
764 	dma_cap_zero(mask);
765 	dma_cap_set(DMA_SLAVE, mask);
766 
767 	host->dma_chan_rx =
768 		dma_request_slave_channel_compat(mask, pxad_filter_fn,
769 						 &param_rx, &pdev->dev, "rx");
770 	if (host->dma_chan_rx == NULL) {
771 		dev_err(&pdev->dev, "unable to request rx dma channel\n");
772 		ret = -ENODEV;
773 		goto out;
774 	}
775 
776 	host->dma_chan_tx =
777 		dma_request_slave_channel_compat(mask, pxad_filter_fn,
778 						 &param_tx,  &pdev->dev, "tx");
779 	if (host->dma_chan_tx == NULL) {
780 		dev_err(&pdev->dev, "unable to request tx dma channel\n");
781 		ret = -ENODEV;
782 		goto out;
783 	}
784 
785 	if (host->pdata) {
786 		gpio_cd = host->pdata->gpio_card_detect;
787 		gpio_ro = host->pdata->gpio_card_ro;
788 		gpio_power = host->pdata->gpio_power;
789 	}
790 	if (gpio_is_valid(gpio_power)) {
791 		ret = devm_gpio_request(&pdev->dev, gpio_power,
792 					"mmc card power");
793 		if (ret) {
794 			dev_err(&pdev->dev, "Failed requesting gpio_power %d\n",
795 				gpio_power);
796 			goto out;
797 		}
798 		gpio_direction_output(gpio_power,
799 				      host->pdata->gpio_power_invert);
800 	}
801 	if (gpio_is_valid(gpio_ro))
802 		ret = mmc_gpio_request_ro(mmc, gpio_ro);
803 	if (ret) {
804 		dev_err(&pdev->dev, "Failed requesting gpio_ro %d\n", gpio_ro);
805 		goto out;
806 	} else {
807 		mmc->caps |= host->pdata->gpio_card_ro_invert ?
808 			MMC_CAP2_RO_ACTIVE_HIGH : 0;
809 	}
810 
811 	if (gpio_is_valid(gpio_cd))
812 		ret = mmc_gpio_request_cd(mmc, gpio_cd, 0);
813 	if (ret) {
814 		dev_err(&pdev->dev, "Failed requesting gpio_cd %d\n", gpio_cd);
815 		goto out;
816 	}
817 
818 	if (host->pdata && host->pdata->init)
819 		host->pdata->init(&pdev->dev, pxamci_detect_irq, mmc);
820 
821 	if (gpio_is_valid(gpio_power) && host->pdata->setpower)
822 		dev_warn(&pdev->dev, "gpio_power and setpower() both defined\n");
823 	if (gpio_is_valid(gpio_ro) && host->pdata->get_ro)
824 		dev_warn(&pdev->dev, "gpio_ro and get_ro() both defined\n");
825 
826 	mmc_add_host(mmc);
827 
828 	return 0;
829 
830 out:
831 	if (host) {
832 		if (host->dma_chan_rx)
833 			dma_release_channel(host->dma_chan_rx);
834 		if (host->dma_chan_tx)
835 			dma_release_channel(host->dma_chan_tx);
836 		if (host->base)
837 			iounmap(host->base);
838 		if (host->clk)
839 			clk_put(host->clk);
840 	}
841 	if (mmc)
842 		mmc_free_host(mmc);
843 	release_resource(r);
844 	return ret;
845 }
846 
847 static int pxamci_remove(struct platform_device *pdev)
848 {
849 	struct mmc_host *mmc = platform_get_drvdata(pdev);
850 	int gpio_cd = -1, gpio_ro = -1, gpio_power = -1;
851 
852 	if (mmc) {
853 		struct pxamci_host *host = mmc_priv(mmc);
854 
855 		mmc_remove_host(mmc);
856 
857 		if (host->pdata) {
858 			gpio_cd = host->pdata->gpio_card_detect;
859 			gpio_ro = host->pdata->gpio_card_ro;
860 			gpio_power = host->pdata->gpio_power;
861 		}
862 		if (host->vcc)
863 			regulator_put(host->vcc);
864 
865 		if (host->pdata && host->pdata->exit)
866 			host->pdata->exit(&pdev->dev, mmc);
867 
868 		pxamci_stop_clock(host);
869 		writel(TXFIFO_WR_REQ|RXFIFO_RD_REQ|CLK_IS_OFF|STOP_CMD|
870 		       END_CMD_RES|PRG_DONE|DATA_TRAN_DONE,
871 		       host->base + MMC_I_MASK);
872 
873 		free_irq(host->irq, host);
874 		dmaengine_terminate_all(host->dma_chan_rx);
875 		dmaengine_terminate_all(host->dma_chan_tx);
876 		dma_release_channel(host->dma_chan_rx);
877 		dma_release_channel(host->dma_chan_tx);
878 		iounmap(host->base);
879 
880 		clk_put(host->clk);
881 
882 		release_resource(host->res);
883 
884 		mmc_free_host(mmc);
885 	}
886 	return 0;
887 }
888 
889 static struct platform_driver pxamci_driver = {
890 	.probe		= pxamci_probe,
891 	.remove		= pxamci_remove,
892 	.driver		= {
893 		.name	= DRIVER_NAME,
894 		.of_match_table = of_match_ptr(pxa_mmc_dt_ids),
895 	},
896 };
897 
898 module_platform_driver(pxamci_driver);
899 
900 MODULE_DESCRIPTION("PXA Multimedia Card Interface Driver");
901 MODULE_LICENSE("GPL");
902 MODULE_ALIAS("platform:pxa2xx-mci");
903