xref: /openbmc/u-boot/drivers/mmc/pxa_mmc_gen.c (revision ee52b188)
1 /*
2  * Copyright (C) 2010 Marek Vasut <marek.vasut@gmail.com>
3  *
4  * Loosely based on the old code and Linux's PXA MMC driver
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License as
8  * published by the Free Software Foundation; either version 2 of
9  * the License, or (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
19  * MA 02111-1307 USA
20  */
21 
22 #include <config.h>
23 #include <common.h>
24 #include <malloc.h>
25 
26 #include <mmc.h>
27 #include <asm/errno.h>
28 #include <asm/arch/hardware.h>
29 #include <asm/arch/regs-mmc.h>
30 #include <asm/io.h>
31 
32 /* PXAMMC Generic default config for various CPUs */
33 #if defined(CONFIG_CPU_PXA25X)
34 #define PXAMMC_FIFO_SIZE	1
35 #define PXAMMC_MIN_SPEED	312500
36 #define PXAMMC_MAX_SPEED	20000000
37 #define PXAMMC_HOST_CAPS	(0)
38 #elif defined(CONFIG_CPU_PXA27X)
39 #define PXAMMC_CRC_SKIP
40 #define PXAMMC_FIFO_SIZE	32
41 #define PXAMMC_MIN_SPEED	304000
42 #define PXAMMC_MAX_SPEED	19500000
43 #define PXAMMC_HOST_CAPS	(MMC_MODE_4BIT)
44 #elif defined(CONFIG_CPU_MONAHANS)
45 #define PXAMMC_FIFO_SIZE	32
46 #define PXAMMC_MIN_SPEED	304000
47 #define PXAMMC_MAX_SPEED	26000000
48 #define PXAMMC_HOST_CAPS	(MMC_MODE_4BIT | MMC_MODE_HS)
49 #else
50 #error "This CPU isn't supported by PXA MMC!"
51 #endif
52 
53 #define MMC_STAT_ERRORS							\
54 	(MMC_STAT_RES_CRC_ERROR | MMC_STAT_SPI_READ_ERROR_TOKEN |	\
55 	MMC_STAT_CRC_READ_ERROR | MMC_STAT_TIME_OUT_RESPONSE |		\
56 	MMC_STAT_READ_TIME_OUT | MMC_STAT_CRC_WRITE_ERROR)
57 
58 /* 1 millisecond (in wait cycles below it's 100 x 10uS waits) */
59 #define PXA_MMC_TIMEOUT	100
60 
61 struct pxa_mmc_priv {
62 	struct pxa_mmc_regs *regs;
63 };
64 
65 /* Wait for bit to be set */
66 static int pxa_mmc_wait(struct mmc *mmc, uint32_t mask)
67 {
68 	struct pxa_mmc_priv *priv = (struct pxa_mmc_priv *)mmc->priv;
69 	struct pxa_mmc_regs *regs = priv->regs;
70 	unsigned int timeout = PXA_MMC_TIMEOUT;
71 
72 	/* Wait for bit to be set */
73 	while (--timeout) {
74 		if (readl(&regs->stat) & mask)
75 			break;
76 		udelay(10);
77 	}
78 
79 	if (!timeout)
80 		return -ETIMEDOUT;
81 
82 	return 0;
83 }
84 
85 static int pxa_mmc_stop_clock(struct mmc *mmc)
86 {
87 	struct pxa_mmc_priv *priv = (struct pxa_mmc_priv *)mmc->priv;
88 	struct pxa_mmc_regs *regs = priv->regs;
89 	unsigned int timeout = PXA_MMC_TIMEOUT;
90 
91 	/* If the clock aren't running, exit */
92 	if (!(readl(&regs->stat) & MMC_STAT_CLK_EN))
93 		return 0;
94 
95 	/* Tell the controller to turn off the clock */
96 	writel(MMC_STRPCL_STOP_CLK, &regs->strpcl);
97 
98 	/* Wait until the clock are off */
99 	while (--timeout) {
100 		if (!(readl(&regs->stat) & MMC_STAT_CLK_EN))
101 			break;
102 		udelay(10);
103 	}
104 
105 	/* The clock refused to stop, scream and die a painful death */
106 	if (!timeout)
107 		return -ETIMEDOUT;
108 
109 	/* The clock stopped correctly */
110 	return 0;
111 }
112 
113 static int pxa_mmc_start_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
114 				uint32_t cmdat)
115 {
116 	struct pxa_mmc_priv *priv = (struct pxa_mmc_priv *)mmc->priv;
117 	struct pxa_mmc_regs *regs = priv->regs;
118 	int ret;
119 
120 	/* The card can send a "busy" response */
121 	if (cmd->resp_type & MMC_RSP_BUSY)
122 		cmdat |= MMC_CMDAT_BUSY;
123 
124 	/* Inform the controller about response type */
125 	switch (cmd->resp_type) {
126 	case MMC_RSP_R1:
127 	case MMC_RSP_R1b:
128 		cmdat |= MMC_CMDAT_R1;
129 		break;
130 	case MMC_RSP_R2:
131 		cmdat |= MMC_CMDAT_R2;
132 		break;
133 	case MMC_RSP_R3:
134 		cmdat |= MMC_CMDAT_R3;
135 		break;
136 	default:
137 		break;
138 	}
139 
140 	/* Load command and it's arguments into the controller */
141 	writel(cmd->cmdidx, &regs->cmd);
142 	writel(cmd->cmdarg >> 16, &regs->argh);
143 	writel(cmd->cmdarg & 0xffff, &regs->argl);
144 	writel(cmdat, &regs->cmdat);
145 
146 	/* Start the controller clock and wait until they are started */
147 	writel(MMC_STRPCL_START_CLK, &regs->strpcl);
148 
149 	ret = pxa_mmc_wait(mmc, MMC_STAT_CLK_EN);
150 	if (ret)
151 		return ret;
152 
153 	/* Correct and happy end */
154 	return 0;
155 }
156 
157 static int pxa_mmc_cmd_done(struct mmc *mmc, struct mmc_cmd *cmd)
158 {
159 	struct pxa_mmc_priv *priv = (struct pxa_mmc_priv *)mmc->priv;
160 	struct pxa_mmc_regs *regs = priv->regs;
161 	uint32_t a, b, c;
162 	int i;
163 	int stat;
164 
165 	/* Read the controller status */
166 	stat = readl(&regs->stat);
167 
168 	/*
169 	 * Linux says:
170 	 * Did I mention this is Sick.  We always need to
171 	 * discard the upper 8 bits of the first 16-bit word.
172 	 */
173 	a = readl(&regs->res) & 0xffff;
174 	for (i = 0; i < 4; i++) {
175 		b = readl(&regs->res) & 0xffff;
176 		c = readl(&regs->res) & 0xffff;
177 		cmd->response[i] = (a << 24) | (b << 8) | (c >> 8);
178 		a = c;
179 	}
180 
181 	/* The command response didn't arrive */
182 	if (stat & MMC_STAT_TIME_OUT_RESPONSE)
183 		return -ETIMEDOUT;
184 	else if (stat & MMC_STAT_RES_CRC_ERROR
185 			&& cmd->resp_type & MMC_RSP_CRC) {
186 #ifdef	PXAMMC_CRC_SKIP
187 		if (cmd->resp_type & MMC_RSP_136
188 				&& cmd->response[0] & (1 << 31))
189 			printf("Ignoring CRC, this may be dangerous!\n");
190 		else
191 #endif
192 		return -EILSEQ;
193 	}
194 
195 	/* The command response was successfully read */
196 	return 0;
197 }
198 
199 static int pxa_mmc_do_read_xfer(struct mmc *mmc, struct mmc_data *data)
200 {
201 	struct pxa_mmc_priv *priv = (struct pxa_mmc_priv *)mmc->priv;
202 	struct pxa_mmc_regs *regs = priv->regs;
203 	uint32_t len;
204 	uint32_t *buf = (uint32_t *)data->dest;
205 	int size;
206 	int ret;
207 
208 	len = data->blocks * data->blocksize;
209 
210 	while (len) {
211 		/* The controller has data ready */
212 		if (readl(&regs->i_reg) & MMC_I_REG_RXFIFO_RD_REQ) {
213 			size = min(len, PXAMMC_FIFO_SIZE);
214 			len -= size;
215 			size /= 4;
216 
217 			/* Read data into the buffer */
218 			while (size--)
219 				*buf++ = readl(&regs->rxfifo);
220 
221 		}
222 
223 		if (readl(&regs->stat) & MMC_STAT_ERRORS)
224 			return -EIO;
225 	}
226 
227 	/* Wait for the transmission-done interrupt */
228 	ret = pxa_mmc_wait(mmc, MMC_STAT_DATA_TRAN_DONE);
229 	if (ret)
230 		return ret;
231 
232 	return 0;
233 }
234 
235 static int pxa_mmc_do_write_xfer(struct mmc *mmc, struct mmc_data *data)
236 {
237 	struct pxa_mmc_priv *priv = (struct pxa_mmc_priv *)mmc->priv;
238 	struct pxa_mmc_regs *regs = priv->regs;
239 	uint32_t len;
240 	uint32_t *buf = (uint32_t *)data->src;
241 	int size;
242 	int ret;
243 
244 	len = data->blocks * data->blocksize;
245 
246 	while (len) {
247 		/* The controller is ready to receive data */
248 		if (readl(&regs->i_reg) & MMC_I_REG_TXFIFO_WR_REQ) {
249 			size = min(len, PXAMMC_FIFO_SIZE);
250 			len -= size;
251 			size /= 4;
252 
253 			while (size--)
254 				writel(*buf++, &regs->txfifo);
255 
256 			if (min(len, PXAMMC_FIFO_SIZE) < 32)
257 				writel(MMC_PRTBUF_BUF_PART_FULL, &regs->prtbuf);
258 		}
259 
260 		if (readl(&regs->stat) & MMC_STAT_ERRORS)
261 			return -EIO;
262 	}
263 
264 	/* Wait for the transmission-done interrupt */
265 	ret = pxa_mmc_wait(mmc, MMC_STAT_DATA_TRAN_DONE);
266 	if (ret)
267 		return ret;
268 
269 	/* Wait until the data are really written to the card */
270 	ret = pxa_mmc_wait(mmc, MMC_STAT_PRG_DONE);
271 	if (ret)
272 		return ret;
273 
274 	return 0;
275 }
276 
277 static int pxa_mmc_request(struct mmc *mmc, struct mmc_cmd *cmd,
278 				struct mmc_data *data)
279 {
280 	struct pxa_mmc_priv *priv = (struct pxa_mmc_priv *)mmc->priv;
281 	struct pxa_mmc_regs *regs = priv->regs;
282 	uint32_t cmdat = 0;
283 	int ret;
284 
285 	/* Stop the controller */
286 	ret = pxa_mmc_stop_clock(mmc);
287 	if (ret)
288 		return ret;
289 
290 	/* If we're doing data transfer, configure the controller accordingly */
291 	if (data) {
292 		writel(data->blocks, &regs->nob);
293 		writel(data->blocksize, &regs->blklen);
294 		/* This delay can be optimized, but stick with max value */
295 		writel(0xffff, &regs->rdto);
296 		cmdat |= MMC_CMDAT_DATA_EN;
297 		if (data->flags & MMC_DATA_WRITE)
298 			cmdat |= MMC_CMDAT_WRITE;
299 	}
300 
301 	/* Run in 4bit mode if the card can do it */
302 	if (mmc->bus_width == 4)
303 		cmdat |= MMC_CMDAT_SD_4DAT;
304 
305 	/* Execute the command */
306 	ret = pxa_mmc_start_cmd(mmc, cmd, cmdat);
307 	if (ret)
308 		return ret;
309 
310 	/* Wait until the command completes */
311 	ret = pxa_mmc_wait(mmc, MMC_STAT_END_CMD_RES);
312 	if (ret)
313 		return ret;
314 
315 	/* Read back the result */
316 	ret = pxa_mmc_cmd_done(mmc, cmd);
317 	if (ret)
318 		return ret;
319 
320 	/* In case there was a data transfer scheduled, do it */
321 	if (data) {
322 		if (data->flags & MMC_DATA_WRITE)
323 			pxa_mmc_do_write_xfer(mmc, data);
324 		else
325 			pxa_mmc_do_read_xfer(mmc, data);
326 	}
327 
328 	return 0;
329 }
330 
331 static void pxa_mmc_set_ios(struct mmc *mmc)
332 {
333 	struct pxa_mmc_priv *priv = (struct pxa_mmc_priv *)mmc->priv;
334 	struct pxa_mmc_regs *regs = priv->regs;
335 	uint32_t tmp;
336 	uint32_t pxa_mmc_clock;
337 
338 	if (!mmc->clock) {
339 		pxa_mmc_stop_clock(mmc);
340 		return;
341 	}
342 
343 	/* PXA3xx can do 26MHz with special settings. */
344 	if (mmc->clock == 26000000) {
345 		writel(0x7, &regs->clkrt);
346 		return;
347 	}
348 
349 	/* Set clock to the card the usual way. */
350 	pxa_mmc_clock = 0;
351 	tmp = mmc->f_max / mmc->clock;
352 	tmp += tmp % 2;
353 
354 	while (tmp > 1) {
355 		pxa_mmc_clock++;
356 		tmp >>= 1;
357 	}
358 
359 	writel(pxa_mmc_clock, &regs->clkrt);
360 }
361 
362 static int pxa_mmc_init(struct mmc *mmc)
363 {
364 	struct pxa_mmc_priv *priv = (struct pxa_mmc_priv *)mmc->priv;
365 	struct pxa_mmc_regs *regs = priv->regs;
366 
367 	/* Make sure the clock are stopped */
368 	pxa_mmc_stop_clock(mmc);
369 
370 	/* Turn off SPI mode */
371 	writel(0, &regs->spi);
372 
373 	/* Set up maximum timeout to wait for command response */
374 	writel(MMC_RES_TO_MAX_MASK, &regs->resto);
375 
376 	/* Mask all interrupts */
377 	writel(~(MMC_I_MASK_TXFIFO_WR_REQ | MMC_I_MASK_RXFIFO_RD_REQ),
378 		&regs->i_mask);
379 	return 0;
380 }
381 
382 int pxa_mmc_register(int card_index)
383 {
384 	struct mmc *mmc;
385 	struct pxa_mmc_priv *priv;
386 	uint32_t reg;
387 	int ret = -ENOMEM;
388 
389 	mmc = malloc(sizeof(struct mmc));
390 	if (!mmc)
391 		goto err0;
392 
393 	priv = malloc(sizeof(struct pxa_mmc_priv));
394 	if (!priv)
395 		goto err1;
396 
397 	switch (card_index) {
398 	case 0:
399 		priv->regs = (struct pxa_mmc_regs *)MMC0_BASE;
400 		break;
401 	case 1:
402 		priv->regs = (struct pxa_mmc_regs *)MMC1_BASE;
403 		break;
404 	default:
405 		printf("PXA MMC: Invalid MMC controller ID (card_index = %d)\n",
406 			card_index);
407 		goto err2;
408 	}
409 
410 	mmc->priv = priv;
411 
412 	sprintf(mmc->name, "PXA MMC");
413 	mmc->send_cmd	= pxa_mmc_request;
414 	mmc->set_ios	= pxa_mmc_set_ios;
415 	mmc->init	= pxa_mmc_init;
416 	mmc->getcd	= NULL;
417 
418 	mmc->voltages	= MMC_VDD_32_33 | MMC_VDD_33_34;
419 	mmc->f_max	= PXAMMC_MAX_SPEED;
420 	mmc->f_min	= PXAMMC_MIN_SPEED;
421 	mmc->host_caps	= PXAMMC_HOST_CAPS;
422 
423 	mmc->b_max = 0;
424 
425 #ifndef	CONFIG_CPU_MONAHANS	/* PXA2xx */
426 	reg = readl(CKEN);
427 	reg |= CKEN12_MMC;
428 	writel(reg, CKEN);
429 #else				/* PXA3xx */
430 	reg = readl(CKENA);
431 	reg |= CKENA_12_MMC0 | CKENA_13_MMC1;
432 	writel(reg, CKENA);
433 #endif
434 
435 	mmc_register(mmc);
436 
437 	return 0;
438 
439 err2:
440 	free(priv);
441 err1:
442 	free(mmc);
443 err0:
444 	return ret;
445 }
446