core.c revision ffce2e7e7060c949ccd703dacc9b3dd81b377373
1/*
2 *  linux/drivers/mmc/core/core.c
3 *
4 *  Copyright (C) 2003-2004 Russell King, All Rights Reserved.
5 *  SD support Copyright (C) 2004 Ian Molton, All Rights Reserved.
6 *  Copyright (C) 2005-2007 Pierre Ossman, All Rights Reserved.
7 *  MMCv4 support Copyright (C) 2006 Philip Langdale, All Rights Reserved.
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#include <linux/module.h>
14#include <linux/init.h>
15#include <linux/interrupt.h>
16#include <linux/completion.h>
17#include <linux/device.h>
18#include <linux/delay.h>
19#include <linux/pagemap.h>
20#include <linux/err.h>
21#include <asm/scatterlist.h>
22#include <linux/scatterlist.h>
23
24#include <linux/mmc/card.h>
25#include <linux/mmc/host.h>
26#include <linux/mmc/mmc.h>
27#include <linux/mmc/sd.h>
28
29#include "core.h"
30#include "bus.h"
31#include "host.h"
32
33#include "mmc_ops.h"
34#include "sd_ops.h"
35
36extern int mmc_attach_mmc(struct mmc_host *host, u32 ocr);
37extern int mmc_attach_sd(struct mmc_host *host, u32 ocr);
38
39static struct workqueue_struct *workqueue;
40
41/*
42 * Internal function. Schedule delayed work in the MMC work queue.
43 */
44static int mmc_schedule_delayed_work(struct delayed_work *work,
45				     unsigned long delay)
46{
47	return queue_delayed_work(workqueue, work, delay);
48}
49
50/*
51 * Internal function. Flush all scheduled work from the MMC work queue.
52 */
53static void mmc_flush_scheduled_work(void)
54{
55	flush_workqueue(workqueue);
56}
57
58/**
59 *	mmc_request_done - finish processing an MMC request
60 *	@host: MMC host which completed request
61 *	@mrq: MMC request which request
62 *
63 *	MMC drivers should call this function when they have completed
64 *	their processing of a request.
65 */
66void mmc_request_done(struct mmc_host *host, struct mmc_request *mrq)
67{
68	struct mmc_command *cmd = mrq->cmd;
69	int err = cmd->error;
70
71	pr_debug("%s: req done (CMD%u): %d/%d/%d: %08x %08x %08x %08x\n",
72		 mmc_hostname(host), cmd->opcode, err,
73		 mrq->data ? mrq->data->error : 0,
74		 mrq->stop ? mrq->stop->error : 0,
75		 cmd->resp[0], cmd->resp[1], cmd->resp[2], cmd->resp[3]);
76
77	if (err && cmd->retries) {
78		cmd->retries--;
79		cmd->error = 0;
80		host->ops->request(host, mrq);
81	} else if (mrq->done) {
82		mrq->done(mrq);
83	}
84}
85
86EXPORT_SYMBOL(mmc_request_done);
87
88/**
89 *	mmc_start_request - start a command on a host
90 *	@host: MMC host to start command on
91 *	@mrq: MMC request to start
92 *
93 *	Queue a command on the specified host.  We expect the
94 *	caller to be holding the host lock with interrupts disabled.
95 */
96void
97mmc_start_request(struct mmc_host *host, struct mmc_request *mrq)
98{
99#ifdef CONFIG_MMC_DEBUG
100	unsigned int i, sz;
101#endif
102
103	pr_debug("%s: starting CMD%u arg %08x flags %08x\n",
104		 mmc_hostname(host), mrq->cmd->opcode,
105		 mrq->cmd->arg, mrq->cmd->flags);
106
107	WARN_ON(!host->claimed);
108
109	mrq->cmd->error = 0;
110	mrq->cmd->mrq = mrq;
111	if (mrq->data) {
112		BUG_ON(mrq->data->blksz > host->max_blk_size);
113		BUG_ON(mrq->data->blocks > host->max_blk_count);
114		BUG_ON(mrq->data->blocks * mrq->data->blksz >
115			host->max_req_size);
116
117#ifdef CONFIG_MMC_DEBUG
118		sz = 0;
119		for (i = 0;i < mrq->data->sg_len;i++)
120			sz += mrq->data->sg[i].length;
121		BUG_ON(sz != mrq->data->blocks * mrq->data->blksz);
122#endif
123
124		mrq->cmd->data = mrq->data;
125		mrq->data->error = 0;
126		mrq->data->mrq = mrq;
127		if (mrq->stop) {
128			mrq->data->stop = mrq->stop;
129			mrq->stop->error = 0;
130			mrq->stop->mrq = mrq;
131		}
132	}
133	host->ops->request(host, mrq);
134}
135
136EXPORT_SYMBOL(mmc_start_request);
137
138static void mmc_wait_done(struct mmc_request *mrq)
139{
140	complete(mrq->done_data);
141}
142
143int mmc_wait_for_req(struct mmc_host *host, struct mmc_request *mrq)
144{
145	DECLARE_COMPLETION_ONSTACK(complete);
146
147	mrq->done_data = &complete;
148	mrq->done = mmc_wait_done;
149
150	mmc_start_request(host, mrq);
151
152	wait_for_completion(&complete);
153
154	return 0;
155}
156
157EXPORT_SYMBOL(mmc_wait_for_req);
158
159/**
160 *	mmc_wait_for_cmd - start a command and wait for completion
161 *	@host: MMC host to start command
162 *	@cmd: MMC command to start
163 *	@retries: maximum number of retries
164 *
165 *	Start a new MMC command for a host, and wait for the command
166 *	to complete.  Return any error that occurred while the command
167 *	was executing.  Do not attempt to parse the response.
168 */
169int mmc_wait_for_cmd(struct mmc_host *host, struct mmc_command *cmd, int retries)
170{
171	struct mmc_request mrq;
172
173	BUG_ON(!host->claimed);
174
175	memset(&mrq, 0, sizeof(struct mmc_request));
176
177	memset(cmd->resp, 0, sizeof(cmd->resp));
178	cmd->retries = retries;
179
180	mrq.cmd = cmd;
181	cmd->data = NULL;
182
183	mmc_wait_for_req(host, &mrq);
184
185	return cmd->error;
186}
187
188EXPORT_SYMBOL(mmc_wait_for_cmd);
189
190/**
191 *	mmc_set_data_timeout - set the timeout for a data command
192 *	@data: data phase for command
193 *	@card: the MMC card associated with the data transfer
194 *	@write: flag to differentiate reads from writes
195 */
196void mmc_set_data_timeout(struct mmc_data *data, const struct mmc_card *card,
197			  int write)
198{
199	unsigned int mult;
200
201	/*
202	 * SD cards use a 100 multiplier rather than 10
203	 */
204	mult = mmc_card_sd(card) ? 100 : 10;
205
206	/*
207	 * Scale up the multiplier (and therefore the timeout) by
208	 * the r2w factor for writes.
209	 */
210	if (write)
211		mult <<= card->csd.r2w_factor;
212
213	data->timeout_ns = card->csd.tacc_ns * mult;
214	data->timeout_clks = card->csd.tacc_clks * mult;
215
216	/*
217	 * SD cards also have an upper limit on the timeout.
218	 */
219	if (mmc_card_sd(card)) {
220		unsigned int timeout_us, limit_us;
221
222		timeout_us = data->timeout_ns / 1000;
223		timeout_us += data->timeout_clks * 1000 /
224			(card->host->ios.clock / 1000);
225
226		if (write)
227			limit_us = 250000;
228		else
229			limit_us = 100000;
230
231		/*
232		 * SDHC cards always use these fixed values.
233		 */
234		if (timeout_us > limit_us || mmc_card_blockaddr(card)) {
235			data->timeout_ns = limit_us * 1000;
236			data->timeout_clks = 0;
237		}
238	}
239}
240EXPORT_SYMBOL(mmc_set_data_timeout);
241
242/**
243 *	__mmc_claim_host - exclusively claim a host
244 *	@host: mmc host to claim
245 *	@card: mmc card to claim host for
246 *
247 *	Claim a host for a set of operations.  If a valid card
248 *	is passed and this wasn't the last card selected, select
249 *	the card before returning.
250 *
251 *	Note: you should use mmc_card_claim_host or mmc_claim_host.
252 */
253void mmc_claim_host(struct mmc_host *host)
254{
255	DECLARE_WAITQUEUE(wait, current);
256	unsigned long flags;
257
258	add_wait_queue(&host->wq, &wait);
259	spin_lock_irqsave(&host->lock, flags);
260	while (1) {
261		set_current_state(TASK_UNINTERRUPTIBLE);
262		if (!host->claimed)
263			break;
264		spin_unlock_irqrestore(&host->lock, flags);
265		schedule();
266		spin_lock_irqsave(&host->lock, flags);
267	}
268	set_current_state(TASK_RUNNING);
269	host->claimed = 1;
270	spin_unlock_irqrestore(&host->lock, flags);
271	remove_wait_queue(&host->wq, &wait);
272}
273
274EXPORT_SYMBOL(mmc_claim_host);
275
276/**
277 *	mmc_release_host - release a host
278 *	@host: mmc host to release
279 *
280 *	Release a MMC host, allowing others to claim the host
281 *	for their operations.
282 */
283void mmc_release_host(struct mmc_host *host)
284{
285	unsigned long flags;
286
287	BUG_ON(!host->claimed);
288
289	spin_lock_irqsave(&host->lock, flags);
290	host->claimed = 0;
291	spin_unlock_irqrestore(&host->lock, flags);
292
293	wake_up(&host->wq);
294}
295
296EXPORT_SYMBOL(mmc_release_host);
297
298/*
299 * Internal function that does the actual ios call to the host driver,
300 * optionally printing some debug output.
301 */
302static inline void mmc_set_ios(struct mmc_host *host)
303{
304	struct mmc_ios *ios = &host->ios;
305
306	pr_debug("%s: clock %uHz busmode %u powermode %u cs %u Vdd %u "
307		"width %u timing %u\n",
308		 mmc_hostname(host), ios->clock, ios->bus_mode,
309		 ios->power_mode, ios->chip_select, ios->vdd,
310		 ios->bus_width, ios->timing);
311
312	host->ops->set_ios(host, ios);
313}
314
315/*
316 * Control chip select pin on a host.
317 */
318void mmc_set_chip_select(struct mmc_host *host, int mode)
319{
320	host->ios.chip_select = mode;
321	mmc_set_ios(host);
322}
323
324/*
325 * Sets the host clock to the highest possible frequency that
326 * is below "hz".
327 */
328void mmc_set_clock(struct mmc_host *host, unsigned int hz)
329{
330	WARN_ON(hz < host->f_min);
331
332	if (hz > host->f_max)
333		hz = host->f_max;
334
335	host->ios.clock = hz;
336	mmc_set_ios(host);
337}
338
339/*
340 * Change the bus mode (open drain/push-pull) of a host.
341 */
342void mmc_set_bus_mode(struct mmc_host *host, unsigned int mode)
343{
344	host->ios.bus_mode = mode;
345	mmc_set_ios(host);
346}
347
348/*
349 * Change data bus width of a host.
350 */
351void mmc_set_bus_width(struct mmc_host *host, unsigned int width)
352{
353	host->ios.bus_width = width;
354	mmc_set_ios(host);
355}
356
357/*
358 * Mask off any voltages we don't support and select
359 * the lowest voltage
360 */
361u32 mmc_select_voltage(struct mmc_host *host, u32 ocr)
362{
363	int bit;
364
365	ocr &= host->ocr_avail;
366
367	bit = ffs(ocr);
368	if (bit) {
369		bit -= 1;
370
371		ocr &= 3 << bit;
372
373		host->ios.vdd = bit;
374		mmc_set_ios(host);
375	} else {
376		ocr = 0;
377	}
378
379	return ocr;
380}
381
382/*
383 * Select timing parameters for host.
384 */
385void mmc_set_timing(struct mmc_host *host, unsigned int timing)
386{
387	host->ios.timing = timing;
388	mmc_set_ios(host);
389}
390
391/*
392 * Apply power to the MMC stack.  This is a two-stage process.
393 * First, we enable power to the card without the clock running.
394 * We then wait a bit for the power to stabilise.  Finally,
395 * enable the bus drivers and clock to the card.
396 *
397 * We must _NOT_ enable the clock prior to power stablising.
398 *
399 * If a host does all the power sequencing itself, ignore the
400 * initial MMC_POWER_UP stage.
401 */
402static void mmc_power_up(struct mmc_host *host)
403{
404	int bit = fls(host->ocr_avail) - 1;
405
406	host->ios.vdd = bit;
407	host->ios.bus_mode = MMC_BUSMODE_OPENDRAIN;
408	host->ios.chip_select = MMC_CS_DONTCARE;
409	host->ios.power_mode = MMC_POWER_UP;
410	host->ios.bus_width = MMC_BUS_WIDTH_1;
411	host->ios.timing = MMC_TIMING_LEGACY;
412	mmc_set_ios(host);
413
414	mmc_delay(1);
415
416	host->ios.clock = host->f_min;
417	host->ios.power_mode = MMC_POWER_ON;
418	mmc_set_ios(host);
419
420	mmc_delay(2);
421}
422
423static void mmc_power_off(struct mmc_host *host)
424{
425	host->ios.clock = 0;
426	host->ios.vdd = 0;
427	host->ios.bus_mode = MMC_BUSMODE_OPENDRAIN;
428	host->ios.chip_select = MMC_CS_DONTCARE;
429	host->ios.power_mode = MMC_POWER_OFF;
430	host->ios.bus_width = MMC_BUS_WIDTH_1;
431	host->ios.timing = MMC_TIMING_LEGACY;
432	mmc_set_ios(host);
433}
434
435/*
436 * Assign a mmc bus handler to a host. Only one bus handler may control a
437 * host at any given time.
438 */
439void mmc_attach_bus(struct mmc_host *host, const struct mmc_bus_ops *ops)
440{
441	unsigned long flags;
442
443	BUG_ON(!host);
444	BUG_ON(!ops);
445
446	BUG_ON(!host->claimed);
447
448	spin_lock_irqsave(&host->lock, flags);
449
450	BUG_ON(host->bus_ops);
451	BUG_ON(host->bus_refs);
452
453	host->bus_ops = ops;
454	host->bus_refs = 1;
455	host->bus_dead = 0;
456
457	spin_unlock_irqrestore(&host->lock, flags);
458}
459
460/*
461 * Remove the current bus handler from a host. Assumes that there are
462 * no interesting cards left, so the bus is powered down.
463 */
464void mmc_detach_bus(struct mmc_host *host)
465{
466	unsigned long flags;
467
468	BUG_ON(!host);
469
470	BUG_ON(!host->claimed);
471	BUG_ON(!host->bus_ops);
472
473	spin_lock_irqsave(&host->lock, flags);
474
475	host->bus_dead = 1;
476
477	spin_unlock_irqrestore(&host->lock, flags);
478
479	mmc_power_off(host);
480
481	mmc_bus_put(host);
482}
483
484/*
485 * Cleanup when the last reference to the bus operator is dropped.
486 */
487void __mmc_release_bus(struct mmc_host *host)
488{
489	BUG_ON(!host);
490	BUG_ON(host->bus_refs);
491	BUG_ON(!host->bus_dead);
492
493	host->bus_ops = NULL;
494}
495
496/**
497 *	mmc_detect_change - process change of state on a MMC socket
498 *	@host: host which changed state.
499 *	@delay: optional delay to wait before detection (jiffies)
500 *
501 *	All we know is that card(s) have been inserted or removed
502 *	from the socket(s).  We don't know which socket or cards.
503 */
504void mmc_detect_change(struct mmc_host *host, unsigned long delay)
505{
506#ifdef CONFIG_MMC_DEBUG
507	unsigned long flags;
508	spin_lock_irqsave(&host->lock, flags);
509	BUG_ON(host->removed);
510	spin_unlock_irqrestore(&host->lock, flags);
511#endif
512
513	mmc_schedule_delayed_work(&host->detect, delay);
514}
515
516EXPORT_SYMBOL(mmc_detect_change);
517
518
519void mmc_rescan(struct work_struct *work)
520{
521	struct mmc_host *host =
522		container_of(work, struct mmc_host, detect.work);
523	u32 ocr;
524	int err;
525
526	mmc_bus_get(host);
527
528	if (host->bus_ops == NULL) {
529		/*
530		 * Only we can add a new handler, so it's safe to
531		 * release the lock here.
532		 */
533		mmc_bus_put(host);
534
535		mmc_claim_host(host);
536
537		mmc_power_up(host);
538		mmc_go_idle(host);
539
540		mmc_send_if_cond(host, host->ocr_avail);
541
542		err = mmc_send_app_op_cond(host, 0, &ocr);
543		if (err == MMC_ERR_NONE) {
544			if (mmc_attach_sd(host, ocr))
545				mmc_power_off(host);
546		} else {
547			/*
548			 * If we fail to detect any SD cards then try
549			 * searching for MMC cards.
550			 */
551			err = mmc_send_op_cond(host, 0, &ocr);
552			if (err == MMC_ERR_NONE) {
553				if (mmc_attach_mmc(host, ocr))
554					mmc_power_off(host);
555			} else {
556				mmc_power_off(host);
557				mmc_release_host(host);
558			}
559		}
560	} else {
561		if (host->bus_ops->detect && !host->bus_dead)
562			host->bus_ops->detect(host);
563
564		mmc_bus_put(host);
565	}
566}
567
568void mmc_start_host(struct mmc_host *host)
569{
570	mmc_power_off(host);
571	mmc_detect_change(host, 0);
572}
573
574void mmc_stop_host(struct mmc_host *host)
575{
576#ifdef CONFIG_MMC_DEBUG
577	unsigned long flags;
578	spin_lock_irqsave(&host->lock, flags);
579	host->removed = 1;
580	spin_unlock_irqrestore(&host->lock, flags);
581#endif
582
583	mmc_flush_scheduled_work();
584
585	mmc_bus_get(host);
586	if (host->bus_ops && !host->bus_dead) {
587		if (host->bus_ops->remove)
588			host->bus_ops->remove(host);
589
590		mmc_claim_host(host);
591		mmc_detach_bus(host);
592		mmc_release_host(host);
593	}
594	mmc_bus_put(host);
595
596	BUG_ON(host->card);
597
598	mmc_power_off(host);
599}
600
601#ifdef CONFIG_PM
602
603/**
604 *	mmc_suspend_host - suspend a host
605 *	@host: mmc host
606 *	@state: suspend mode (PM_SUSPEND_xxx)
607 */
608int mmc_suspend_host(struct mmc_host *host, pm_message_t state)
609{
610	mmc_flush_scheduled_work();
611
612	mmc_bus_get(host);
613	if (host->bus_ops && !host->bus_dead) {
614		if (host->bus_ops->suspend)
615			host->bus_ops->suspend(host);
616		if (!host->bus_ops->resume) {
617			if (host->bus_ops->remove)
618				host->bus_ops->remove(host);
619
620			mmc_claim_host(host);
621			mmc_detach_bus(host);
622			mmc_release_host(host);
623		}
624	}
625	mmc_bus_put(host);
626
627	mmc_power_off(host);
628
629	return 0;
630}
631
632EXPORT_SYMBOL(mmc_suspend_host);
633
634/**
635 *	mmc_resume_host - resume a previously suspended host
636 *	@host: mmc host
637 */
638int mmc_resume_host(struct mmc_host *host)
639{
640	mmc_bus_get(host);
641	if (host->bus_ops && !host->bus_dead) {
642		mmc_power_up(host);
643		BUG_ON(!host->bus_ops->resume);
644		host->bus_ops->resume(host);
645	}
646	mmc_bus_put(host);
647
648	/*
649	 * We add a slight delay here so that resume can progress
650	 * in parallel.
651	 */
652	mmc_detect_change(host, 1);
653
654	return 0;
655}
656
657EXPORT_SYMBOL(mmc_resume_host);
658
659#endif
660
661static int __init mmc_init(void)
662{
663	int ret;
664
665	workqueue = create_singlethread_workqueue("kmmcd");
666	if (!workqueue)
667		return -ENOMEM;
668
669	ret = mmc_register_bus();
670	if (ret == 0) {
671		ret = mmc_register_host_class();
672		if (ret)
673			mmc_unregister_bus();
674	}
675	return ret;
676}
677
678static void __exit mmc_exit(void)
679{
680	mmc_unregister_host_class();
681	mmc_unregister_bus();
682	destroy_workqueue(workqueue);
683}
684
685module_init(mmc_init);
686module_exit(mmc_exit);
687
688MODULE_LICENSE("GPL");
689