mmc.c revision 183542
1/*-
2 * Copyright (c) 2006 Bernd Walter.  All rights reserved.
3 * Copyright (c) 2006 M. Warner Losh.  All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 *    notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 *    notice, this list of conditions and the following disclaimer in the
12 *    documentation and/or other materials provided with the distribution.
13 *
14 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
15 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
16 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
17 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
18 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
19 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
20 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
21 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
23 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24 *
25 * Portions of this software may have been developed with reference to
26 * the SD Simplified Specification.  The following disclaimer may apply:
27 *
28 * The following conditions apply to the release of the simplified
29 * specification ("Simplified Specification") by the SD Card Association and
30 * the SD Group. The Simplified Specification is a subset of the complete SD
31 * Specification which is owned by the SD Card Association and the SD
32 * Group. This Simplified Specification is provided on a non-confidential
33 * basis subject to the disclaimers below. Any implementation of the
34 * Simplified Specification may require a license from the SD Card
35 * Association, SD Group, SD-3C LLC or other third parties.
36 *
37 * Disclaimers:
38 *
39 * The information contained in the Simplified Specification is presented only
40 * as a standard specification for SD Cards and SD Host/Ancillary products and
41 * is provided "AS-IS" without any representations or warranties of any
42 * kind. No responsibility is assumed by the SD Group, SD-3C LLC or the SD
43 * Card Association for any damages, any infringements of patents or other
44 * right of the SD Group, SD-3C LLC, the SD Card Association or any third
45 * parties, which may result from its use. No license is granted by
46 * implication, estoppel or otherwise under any patent or other rights of the
47 * SD Group, SD-3C LLC, the SD Card Association or any third party. Nothing
48 * herein shall be construed as an obligation by the SD Group, the SD-3C LLC
49 * or the SD Card Association to disclose or distribute any technical
50 * information, know-how or other confidential information to any third party.
51 */
52
53#include <sys/cdefs.h>
54__FBSDID("$FreeBSD: head/sys/dev/mmc/mmc.c 183542 2008-10-02 07:06:59Z imp $");
55
56#include <sys/param.h>
57#include <sys/systm.h>
58#include <sys/kernel.h>
59#include <sys/malloc.h>
60#include <sys/lock.h>
61#include <sys/module.h>
62#include <sys/mutex.h>
63#include <sys/bus.h>
64
65#include <dev/mmc/mmcreg.h>
66#include <dev/mmc/mmcbrvar.h>
67#include <dev/mmc/mmcvar.h>
68#include "mmcbr_if.h"
69#include "mmcbus_if.h"
70
71struct mmc_softc {
72	device_t dev;
73	struct mtx sc_mtx;
74	struct intr_config_hook config_intrhook;
75	device_t owner;
76	uint32_t last_rca;
77};
78
79/*
80 * Per-card data
81 */
82struct mmc_ivars {
83	uint32_t raw_cid[4];	/* Raw bits of the CID */
84	uint32_t raw_csd[4];	/* Raw bits of the CSD */
85	uint16_t rca;
86	enum mmc_card_mode mode;
87	struct mmc_cid cid;	/* cid decoded */
88	struct mmc_csd csd;	/* csd decoded */
89	u_char read_only;	/* True when the device is read-only */
90};
91
92#define CMD_RETRIES	3
93
94/* bus entry points */
95static int mmc_probe(device_t dev);
96static int mmc_attach(device_t dev);
97static int mmc_detach(device_t dev);
98
99#define MMC_LOCK(_sc)		mtx_lock(&(_sc)->sc_mtx)
100#define	MMC_UNLOCK(_sc)		mtx_unlock(&(_sc)->sc_mtx)
101#define MMC_LOCK_INIT(_sc)					\
102	mtx_init(&_sc->sc_mtx, device_get_nameunit(_sc->dev),	\
103	    "mmc", MTX_DEF)
104#define MMC_LOCK_DESTROY(_sc)	mtx_destroy(&_sc->sc_mtx);
105#define MMC_ASSERT_LOCKED(_sc)	mtx_assert(&_sc->sc_mtx, MA_OWNED);
106#define MMC_ASSERT_UNLOCKED(_sc) mtx_assert(&_sc->sc_mtx, MA_NOTOWNED);
107
108static void mmc_delayed_attach(void *);
109static void mmc_power_down(struct mmc_softc *sc);
110static int mmc_wait_for_cmd(struct mmc_softc *sc, struct mmc_command *cmd,
111    int retries);
112static int mmc_wait_for_command(struct mmc_softc *sc, uint32_t opcode,
113    uint32_t arg, uint32_t flags, uint32_t *resp, int retries);
114
115static void
116mmc_ms_delay(int ms)
117{
118	DELAY(1000 * ms);	/* XXX BAD */
119}
120
121static int
122mmc_probe(device_t dev)
123{
124
125	device_set_desc(dev, "MMC/SD bus");
126	return (0);
127}
128
129static int
130mmc_attach(device_t dev)
131{
132	struct mmc_softc *sc;
133
134	sc = device_get_softc(dev);
135	sc->dev = dev;
136	MMC_LOCK_INIT(sc);
137
138	/* We'll probe and attach our children later, but before / mount */
139	sc->config_intrhook.ich_func = mmc_delayed_attach;
140	sc->config_intrhook.ich_arg = sc;
141	if (config_intrhook_establish(&sc->config_intrhook) != 0)
142		device_printf(dev, "config_intrhook_establish failed\n");
143	return (0);
144}
145
146static int
147mmc_detach(device_t dev)
148{
149	struct mmc_softc *sc = device_get_softc(dev);
150	device_t *kids;
151	int i, nkid;
152
153	/* kill children [ph33r].  -sorbo */
154	if (device_get_children(sc->dev, &kids, &nkid) != 0)
155		return (0);
156	for (i = 0; i < nkid; i++) {
157		device_t kid = kids[i];
158		void *ivar = device_get_ivars(kid);
159
160		device_detach(kid);
161		device_delete_child(sc->dev, kid);
162		free(ivar, M_DEVBUF);
163	}
164	free(kids, M_TEMP);
165	mmc_power_down(sc);
166
167	MMC_LOCK_DESTROY(sc);
168
169	return (0);
170}
171
172static int
173mmc_acquire_bus(device_t busdev, device_t dev)
174{
175	struct mmc_softc *sc;
176	int err;
177	int rca;
178
179	err = MMCBR_ACQUIRE_HOST(device_get_parent(busdev), busdev);
180	if (err)
181		return (err);
182	sc = device_get_softc(busdev);
183	MMC_LOCK(sc);
184	if (sc->owner)
185		panic("mmc: host bridge didn't seralize us.");
186	sc->owner = dev;
187	MMC_UNLOCK(sc);
188
189	if (busdev != dev) {
190		/*
191		 * Keep track of the last rca that we've selected.  If
192		 * we're asked to do it again, don't.  We never
193		 * unselect unless the bus code itself wants the mmc
194		 * bus, and constantly reselecting causes problems.
195		 */
196		rca = mmc_get_rca(dev);
197		if (sc->last_rca != rca) {
198			mmc_wait_for_command(sc, MMC_SELECT_CARD, rca << 16,
199			    MMC_RSP_R1 | MMC_CMD_AC, NULL, CMD_RETRIES);
200			sc->last_rca = rca;
201		}
202		/* XXX should set bus width here? */
203	} else {
204		/*
205		 * If there's a card selected, stand down.
206		 */
207		if (sc->last_rca != 0) {
208			mmc_wait_for_command(sc, MMC_SELECT_CARD, 0,
209			    MMC_RSP_R1 | MMC_CMD_AC, NULL, CMD_RETRIES);
210			sc->last_rca = 0;
211		}
212		/* XXX should set bus width here? */
213	}
214
215	return (0);
216}
217
218static int
219mmc_release_bus(device_t busdev, device_t dev)
220{
221	struct mmc_softc *sc;
222	int err;
223
224	sc = device_get_softc(busdev);
225
226	MMC_LOCK(sc);
227	if (!sc->owner)
228		panic("mmc: releasing unowned bus.");
229	if (sc->owner != dev)
230		panic("mmc: you don't own the bus.  game over.");
231	MMC_UNLOCK(sc);
232	err = MMCBR_RELEASE_HOST(device_get_parent(busdev), busdev);
233	if (err)
234		return (err);
235	MMC_LOCK(sc);
236	sc->owner = NULL;
237	MMC_UNLOCK(sc);
238	return (0);
239}
240
241static void
242mmc_rescan_cards(struct mmc_softc *sc)
243{
244	/* XXX: Look at the children and see if they respond to status */
245}
246
247static uint32_t
248mmc_select_vdd(struct mmc_softc *sc, uint32_t ocr)
249{
250
251	return (ocr & MMC_OCR_VOLTAGE);
252}
253
254static int
255mmc_highest_voltage(uint32_t ocr)
256{
257	int i;
258
259	for (i = 30; i >= 0; i--)
260		if (ocr & (1 << i))
261			return (i);
262	return (-1);
263}
264
265static void
266mmc_wakeup(struct mmc_request *req)
267{
268	struct mmc_softc *sc;
269
270/*	printf("Wakeup for req %p done_data %p\n", req, req->done_data); */
271	sc = (struct mmc_softc *)req->done_data;
272	MMC_LOCK(sc);
273	req->flags |= MMC_REQ_DONE;
274	wakeup(req);
275	MMC_UNLOCK(sc);
276}
277
278static int
279mmc_wait_for_req(struct mmc_softc *sc, struct mmc_request *req)
280{
281	int err;
282
283	req->done = mmc_wakeup;
284	req->done_data = sc;
285/*	printf("Submitting request %p sc %p\n", req, sc); */
286	MMCBR_REQUEST(device_get_parent(sc->dev), sc->dev, req);
287	MMC_LOCK(sc);
288	do {
289		err = msleep(req, &sc->sc_mtx, PZERO | PCATCH, "mmcreq",
290		    hz / 10);
291	} while (!(req->flags & MMC_REQ_DONE) && err == EAGAIN);
292/*	printf("Request %p done with error %d\n", req, err); */
293	MMC_UNLOCK(sc);
294	return (err);
295}
296
297static int
298mmc_wait_for_request(device_t brdev, device_t reqdev, struct mmc_request *req)
299{
300	struct mmc_softc *sc = device_get_softc(brdev);
301
302	return (mmc_wait_for_req(sc, req));
303}
304
305static int
306mmc_wait_for_cmd(struct mmc_softc *sc, struct mmc_command *cmd, int retries)
307{
308	struct mmc_request mreq;
309
310	memset(&mreq, 0, sizeof(mreq));
311	memset(cmd->resp, 0, sizeof(cmd->resp));
312	cmd->retries = retries;
313	mreq.cmd = cmd;
314/*	printf("CMD: %x ARG %x\n", cmd->opcode, cmd->arg); */
315	mmc_wait_for_req(sc, &mreq);
316	return (cmd->error);
317}
318
319static int
320mmc_wait_for_app_cmd(struct mmc_softc *sc, uint32_t rca,
321    struct mmc_command *cmd, int retries)
322{
323	struct mmc_command appcmd;
324	int err = MMC_ERR_NONE, i;
325
326	for (i = 0; i <= retries; i++) {
327		appcmd.opcode = MMC_APP_CMD;
328		appcmd.arg = rca << 16;
329		appcmd.flags = MMC_RSP_R1 | MMC_CMD_AC;
330		appcmd.data = NULL;
331		mmc_wait_for_cmd(sc, &appcmd, 0);
332		err = appcmd.error;
333		if (err != MMC_ERR_NONE)
334			continue;
335		if (!(appcmd.resp[0] & R1_APP_CMD))
336			return MMC_ERR_FAILED;
337		mmc_wait_for_cmd(sc, cmd, 0);
338		err = cmd->error;
339		if (err == MMC_ERR_NONE)
340			break;
341	}
342	return (err);
343}
344
345static int
346mmc_wait_for_command(struct mmc_softc *sc, uint32_t opcode,
347    uint32_t arg, uint32_t flags, uint32_t *resp, int retries)
348{
349	struct mmc_command cmd;
350	int err;
351
352	memset(&cmd, 0, sizeof(cmd));
353	cmd.opcode = opcode;
354	cmd.arg = arg;
355	cmd.flags = flags;
356	cmd.data = NULL;
357	err = mmc_wait_for_cmd(sc, &cmd, retries);
358	if (err)
359		return (err);
360	if (cmd.error)
361		return (cmd.error);
362	if (resp) {
363		if (flags & MMC_RSP_136)
364			memcpy(resp, cmd.resp, 4 * sizeof(uint32_t));
365		else
366			*resp = cmd.resp[0];
367	}
368	return (0);
369}
370
371static void
372mmc_idle_cards(struct mmc_softc *sc)
373{
374	device_t dev;
375	struct mmc_command cmd;
376
377	dev = sc->dev;
378	mmcbr_set_chip_select(dev, cs_high);
379	mmcbr_update_ios(dev);
380	mmc_ms_delay(1);
381
382	memset(&cmd, 0, sizeof(cmd));
383	cmd.opcode = MMC_GO_IDLE_STATE;
384	cmd.arg = 0;
385	cmd.flags = MMC_RSP_NONE | MMC_CMD_BC;
386	cmd.data = NULL;
387	mmc_wait_for_cmd(sc, &cmd, 0);
388	mmc_ms_delay(1);
389
390	mmcbr_set_chip_select(dev, cs_dontcare);
391	mmcbr_update_ios(dev);
392	mmc_ms_delay(1);
393}
394
395static int
396mmc_send_app_op_cond(struct mmc_softc *sc, uint32_t ocr, uint32_t *rocr)
397{
398	struct mmc_command cmd;
399	int err = MMC_ERR_NONE, i;
400
401	memset(&cmd, 0, sizeof(cmd));
402	cmd.opcode = ACMD_SD_SEND_OP_COND;
403	cmd.arg = ocr;
404	cmd.flags = MMC_RSP_R3 | MMC_CMD_BCR;
405	cmd.data = NULL;
406
407	for (i = 0; i < 100; i++) {
408		err = mmc_wait_for_app_cmd(sc, 0, &cmd, CMD_RETRIES);
409		if (err != MMC_ERR_NONE)
410			break;
411		if ((cmd.resp[0] & MMC_OCR_CARD_BUSY) || ocr == 0)
412			break;
413		err = MMC_ERR_TIMEOUT;
414		mmc_ms_delay(10);
415	}
416	if (rocr && err == MMC_ERR_NONE)
417		*rocr = cmd.resp[0];
418	return (err);
419}
420
421static int
422mmc_send_op_cond(struct mmc_softc *sc, uint32_t ocr, uint32_t *rocr)
423{
424	struct mmc_command cmd;
425	int err = MMC_ERR_NONE, i;
426
427	memset(&cmd, 0, sizeof(cmd));
428	cmd.opcode = MMC_SEND_OP_COND;
429	cmd.arg = ocr;
430	cmd.flags = MMC_RSP_R3 | MMC_CMD_BCR;
431	cmd.data = NULL;
432
433	for (i = 0; i < 100; i++) {
434		err = mmc_wait_for_cmd(sc, &cmd, CMD_RETRIES);
435		if (err != MMC_ERR_NONE)
436			break;
437		if ((cmd.resp[0] & MMC_OCR_CARD_BUSY) || ocr == 0)
438			break;
439		err = MMC_ERR_TIMEOUT;
440		mmc_ms_delay(10);
441	}
442	if (rocr && err == MMC_ERR_NONE)
443		*rocr = cmd.resp[0];
444	return (err);
445}
446
447static void
448mmc_power_up(struct mmc_softc *sc)
449{
450	device_t dev;
451
452	dev = sc->dev;
453	mmcbr_set_vdd(dev, mmc_highest_voltage(mmcbr_get_host_ocr(dev)));
454	mmcbr_set_bus_mode(dev, opendrain);
455	mmcbr_set_chip_select(dev, cs_dontcare);
456	mmcbr_set_bus_width(dev, bus_width_1);
457	mmcbr_set_power_mode(dev, power_up);
458	mmcbr_set_clock(dev, 0);
459	mmcbr_update_ios(dev);
460	mmc_ms_delay(1);
461
462	mmcbr_set_clock(dev, mmcbr_get_f_min(sc->dev));
463	mmcbr_set_power_mode(dev, power_on);
464	mmcbr_update_ios(dev);
465	mmc_ms_delay(2);
466}
467
468static void
469mmc_power_down(struct mmc_softc *sc)
470{
471	device_t dev = sc->dev;
472
473	mmcbr_set_bus_mode(dev, opendrain);
474	mmcbr_set_chip_select(dev, cs_dontcare);
475	mmcbr_set_bus_width(dev, bus_width_1);
476	mmcbr_set_power_mode(dev, power_off);
477	mmcbr_set_clock(dev, 0);
478	mmcbr_update_ios(dev);
479}
480
481static uint32_t
482mmc_get_bits(uint32_t *bits, int start, int size)
483{
484	const int i = 3 - (start / 32);
485	const int shift = start & 31;
486	uint32_t retval = bits[i] >> shift;
487	if (size + shift > 32)
488		retval |= bits[i - 1] << (32 - shift);
489	return (retval & ((1 << size) - 1));
490}
491
492static void
493mmc_decode_cid(int is_sd, uint32_t *raw_cid, struct mmc_cid *cid)
494{
495	int i;
496
497	memset(cid, 0, sizeof(*cid));
498	if (is_sd) {
499		/* There's no version info, so we take it on faith */
500		cid->mid = mmc_get_bits(raw_cid, 120, 8);
501		cid->oid = mmc_get_bits(raw_cid, 104, 16);
502		for (i = 0; i < 5; i++)
503			cid->pnm[i] = mmc_get_bits(raw_cid, 96 - i * 8, 8);
504		cid->prv = mmc_get_bits(raw_cid, 56, 8);
505		cid->psn = mmc_get_bits(raw_cid, 24, 32);
506		cid->mdt_year = mmc_get_bits(raw_cid, 12, 8) + 2001;
507		cid->mdt_month = mmc_get_bits(raw_cid, 8, 4);
508	} else {
509		/* XXX write me */
510		panic("write mmc cid decoder");
511	}
512}
513
514static const int exp[8] = {
515	1, 10, 100, 1000, 10000, 100000, 1000000, 10000000
516};
517static const int mant[16] = {
518	10, 12, 13, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 70, 80
519};
520static const int cur_min[8] = {
521	500, 1000, 5000, 10000, 25000, 35000, 60000, 100000
522};
523static const int cur_max[8] = {
524	1000, 5000, 10000, 25000, 35000, 45000, 800000, 200000
525};
526
527static void
528mmc_decode_csd(int is_sd, uint32_t *raw_csd, struct mmc_csd *csd)
529{
530	int v;
531	int m;
532	int e;
533
534	memset(csd, 0, sizeof(*csd));
535	if (is_sd) {
536		csd->csd_structure = v = mmc_get_bits(raw_csd, 126, 2);
537		if (v == 0) {
538			m = mmc_get_bits(raw_csd, 115, 4);
539			e = mmc_get_bits(raw_csd, 112, 3);
540			csd->tacc = exp[e] * mant[m] + 9 / 10;
541			csd->nsac = mmc_get_bits(raw_csd, 104, 8) * 100;
542			m = mmc_get_bits(raw_csd, 99, 4);
543			e = mmc_get_bits(raw_csd, 96, 3);
544			csd->tran_speed = exp[e] * 10000 * mant[m];
545			csd->ccc = mmc_get_bits(raw_csd, 84, 12);
546			csd->read_bl_len = 1 << mmc_get_bits(raw_csd, 80, 4);
547			csd->read_bl_partial = mmc_get_bits(raw_csd, 79, 1);
548			csd->write_blk_misalign = mmc_get_bits(raw_csd, 78, 1);
549			csd->read_blk_misalign = mmc_get_bits(raw_csd, 77, 1);
550			csd->dsr_imp = mmc_get_bits(raw_csd, 76, 1);
551			csd->vdd_r_curr_min = cur_min[mmc_get_bits(raw_csd, 59, 3)];
552			csd->vdd_r_curr_max = cur_max[mmc_get_bits(raw_csd, 56, 3)];
553			csd->vdd_w_curr_min = cur_min[mmc_get_bits(raw_csd, 53, 3)];
554			csd->vdd_w_curr_max = cur_max[mmc_get_bits(raw_csd, 50, 3)];
555			m = mmc_get_bits(raw_csd, 62, 12);
556			e = mmc_get_bits(raw_csd, 47, 3);
557			csd->capacity = ((1 + m) << (e + 2)) * csd->read_bl_len;
558			csd->erase_blk_en = mmc_get_bits(raw_csd, 46, 1);
559			csd->sector_size = mmc_get_bits(raw_csd, 39, 7);
560			csd->wp_grp_size = mmc_get_bits(raw_csd, 32, 7);
561			csd->wp_grp_enable = mmc_get_bits(raw_csd, 31, 1);
562			csd->r2w_factor = 1 << mmc_get_bits(raw_csd, 26, 3);
563			csd->write_bl_len = 1 << mmc_get_bits(raw_csd, 22, 4);
564			csd->write_bl_partial = mmc_get_bits(raw_csd, 21, 1);
565		} else if (v == 1) {
566			panic("Write SDHC CSD parser");
567		} else
568			panic("unknown SD CSD version");
569	} else {
570		panic("Write a MMC CSD parser");
571	}
572}
573
574static int
575mmc_all_send_cid(struct mmc_softc *sc, uint32_t *rawcid)
576{
577	struct mmc_command cmd;
578	int err;
579
580	cmd.opcode = MMC_ALL_SEND_CID;
581	cmd.arg = 0;
582	cmd.flags = MMC_RSP_R2 | MMC_CMD_BCR;
583	cmd.data = NULL;
584	err = mmc_wait_for_cmd(sc, &cmd, 0);
585	memcpy(rawcid, cmd.resp, 4 * sizeof(uint32_t));
586	return (err);
587}
588
589static int
590mmc_send_csd(struct mmc_softc *sc, uint16_t rca, uint32_t *rawcid)
591{
592	struct mmc_command cmd;
593	int err;
594
595	cmd.opcode = MMC_SEND_CSD;
596	cmd.arg = rca << 16;
597	cmd.flags = MMC_RSP_R2 | MMC_CMD_BCR;
598	cmd.data = NULL;
599	err = mmc_wait_for_cmd(sc, &cmd, 0);
600	memcpy(rawcid, cmd.resp, 4 * sizeof(uint32_t));
601	return (err);
602}
603
604static int
605mmc_send_relative_addr(struct mmc_softc *sc, uint32_t *resp)
606{
607	struct mmc_command cmd;
608	int err;
609
610	cmd.opcode = SD_SEND_RELATIVE_ADDR;
611	cmd.arg = 0;
612	cmd.flags = MMC_RSP_R6 | MMC_CMD_BCR;
613	cmd.data = NULL;
614	err = mmc_wait_for_cmd(sc, &cmd, 0);
615	*resp = cmd.resp[0];
616	return (err);
617}
618
619static void
620mmc_discover_cards(struct mmc_softc *sc)
621{
622	struct mmc_ivars *ivar;
623	int err;
624	uint32_t resp;
625	device_t child;
626
627	while (1) {
628		ivar = malloc(sizeof(struct mmc_ivars), M_DEVBUF,
629		    M_WAITOK | M_ZERO);
630		if (!ivar)
631			return;
632		err = mmc_all_send_cid(sc, ivar->raw_cid);
633		if (err == MMC_ERR_TIMEOUT)
634			break;
635		if (err != MMC_ERR_NONE) {
636			device_printf(sc->dev, "Error reading CID %d\n", err);
637			break;
638		}
639		if (mmcbr_get_mode(sc->dev) == mode_sd) {
640			ivar->mode = mode_sd;
641			mmc_decode_cid(1, ivar->raw_cid, &ivar->cid);
642			mmc_send_relative_addr(sc, &resp);
643			ivar->rca = resp >> 16;
644			if (mmcbr_get_ro(sc->dev))
645				ivar->read_only = 1;
646			mmc_send_csd(sc, ivar->rca, ivar->raw_csd);
647			mmc_decode_csd(1, ivar->raw_csd, &ivar->csd);
648			printf("SD CARD: %lld bytes\n", (long long)
649			    ivar->csd.capacity);
650			child = device_add_child(sc->dev, NULL, -1);
651			device_set_ivars(child, ivar);
652			return;
653		}
654		panic("Write MMC card code here");
655	}
656	free(ivar, M_DEVBUF);
657}
658
659static void
660mmc_go_discovery(struct mmc_softc *sc)
661{
662	uint32_t ocr;
663	device_t dev;
664
665	dev = sc->dev;
666	if (mmcbr_get_power_mode(dev) != power_on) {
667		/*
668		 * First, try SD modes
669		 */
670		mmcbr_set_mode(dev, mode_sd);
671		mmc_power_up(sc);
672		mmcbr_set_bus_mode(dev, pushpull);
673		mmc_idle_cards(sc);
674		if (mmc_send_app_op_cond(sc, 0, &ocr) != MMC_ERR_NONE) {
675			/*
676			 * Failed, try MMC
677			 */
678			mmcbr_set_mode(dev, mode_mmc);
679			if (mmc_send_op_cond(sc, 0, &ocr) != MMC_ERR_NONE)
680				return;	/* Failed both, punt! XXX powerdown? */
681		}
682		mmcbr_set_ocr(dev, mmc_select_vdd(sc, ocr));
683		if (mmcbr_get_ocr(dev) != 0)
684			mmc_idle_cards(sc);
685	} else {
686		mmcbr_set_bus_mode(dev, opendrain);
687		mmcbr_set_clock(dev, mmcbr_get_f_min(dev));
688		mmcbr_update_ios(dev);
689		/* XXX recompute vdd based on new cards? */
690	}
691	/*
692	 * Make sure that we have a mutually agreeable voltage to at least
693	 * one card on the bus.
694	 */
695	if (mmcbr_get_ocr(dev) == 0)
696		return;
697	/*
698	 * Reselect the cards after we've idled them above.
699	 */
700	if (mmcbr_get_mode(dev) == mode_sd)
701		mmc_send_app_op_cond(sc, mmcbr_get_ocr(dev), NULL);
702	else
703		mmc_send_op_cond(sc, mmcbr_get_ocr(dev), NULL);
704	mmc_discover_cards(sc);
705
706	mmcbr_set_bus_mode(dev, pushpull);
707	mmcbr_update_ios(dev);
708	bus_generic_attach(dev);
709/*	mmc_update_children_sysctl(dev);*/
710}
711
712static int
713mmc_calculate_clock(struct mmc_softc *sc)
714{
715	int max_dtr = 0;
716	int nkid, i, f_min, f_max;
717	device_t *kids;
718
719	f_min = mmcbr_get_f_min(sc->dev);
720	f_max = mmcbr_get_f_max(sc->dev);
721	max_dtr = f_max;
722	if (device_get_children(sc->dev, &kids, &nkid) != 0)
723		panic("can't get children");
724	for (i = 0; i < nkid; i++)
725		if (mmc_get_tran_speed(kids[i]) < max_dtr)
726			max_dtr = mmc_get_tran_speed(kids[i]);
727	free(kids, M_TEMP);
728	device_printf(sc->dev, "setting transfer rate to %d.%03dMHz\n",
729	    max_dtr / 1000000, (max_dtr / 1000) % 1000);
730	return (max_dtr);
731}
732
733static void
734mmc_scan(struct mmc_softc *sc)
735{
736	device_t dev;
737
738	dev = sc->dev;
739	mmc_acquire_bus(dev, dev);
740
741	if (mmcbr_get_power_mode(dev) == power_on)
742		mmc_rescan_cards(sc);
743	mmc_go_discovery(sc);
744	mmcbr_set_clock(dev, mmc_calculate_clock(sc));
745	mmcbr_update_ios(dev);
746
747	mmc_release_bus(dev, dev);
748	/* XXX probe/attach/detach children? */
749}
750
751static int
752mmc_read_ivar(device_t bus, device_t child, int which, u_char *result)
753{
754	struct mmc_ivars *ivar = device_get_ivars(child);
755
756	switch (which) {
757	default:
758		return (EINVAL);
759	case MMC_IVAR_DSR_IMP:
760		*(int *)result = ivar->csd.dsr_imp;
761		break;
762	case MMC_IVAR_MEDIA_SIZE:
763		*(off_t *)result = ivar->csd.capacity / MMC_SECTOR_SIZE;
764		break;
765	case MMC_IVAR_RCA:
766		*(int *)result = ivar->rca;
767		break;
768	case MMC_IVAR_SECTOR_SIZE:
769		*(int *)result = MMC_SECTOR_SIZE;
770		break;
771	case MMC_IVAR_TRAN_SPEED:
772		*(int *)result = ivar->csd.tran_speed;
773		break;
774	case MMC_IVAR_READ_ONLY:
775		*(int *)result = ivar->read_only;
776		break;
777	}
778	return (0);
779}
780
781static int
782mmc_write_ivar(device_t bus, device_t child, int which, uintptr_t value)
783{
784	/*
785	 * None are writable ATM
786	 */
787	return (EINVAL);
788}
789
790
791static void
792mmc_delayed_attach(void *xsc)
793{
794	struct mmc_softc *sc = xsc;
795
796	mmc_scan(sc);
797	config_intrhook_disestablish(&sc->config_intrhook);
798}
799
800static device_method_t mmc_methods[] = {
801	/* device_if */
802	DEVMETHOD(device_probe, mmc_probe),
803	DEVMETHOD(device_attach, mmc_attach),
804	DEVMETHOD(device_detach, mmc_detach),
805
806	/* Bus interface */
807	DEVMETHOD(bus_read_ivar, mmc_read_ivar),
808	DEVMETHOD(bus_write_ivar, mmc_write_ivar),
809
810	/* MMC Bus interface */
811	DEVMETHOD(mmcbus_wait_for_request, mmc_wait_for_request),
812	DEVMETHOD(mmcbus_acquire_bus, mmc_acquire_bus),
813	DEVMETHOD(mmcbus_release_bus, mmc_release_bus),
814
815	{0, 0},
816};
817
818static driver_t mmc_driver = {
819	"mmc",
820	mmc_methods,
821	sizeof(struct mmc_softc),
822};
823static devclass_t mmc_devclass;
824
825
826DRIVER_MODULE(mmc, at91_mci, mmc_driver, mmc_devclass, 0, 0);
827DRIVER_MODULE(mmc, sdh, mmc_driver, mmc_devclass, 0, 0);
828