mmc.c revision 183763
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 183763 2008-10-11 13:05:13Z mav $");
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#include <sys/endian.h>
65
66#include <dev/mmc/mmcreg.h>
67#include <dev/mmc/mmcbrvar.h>
68#include <dev/mmc/mmcvar.h>
69#include "mmcbr_if.h"
70#include "mmcbus_if.h"
71
72struct mmc_softc {
73	device_t dev;
74	struct mtx sc_mtx;
75	struct intr_config_hook config_intrhook;
76	device_t owner;
77	uint32_t last_rca;
78};
79
80/*
81 * Per-card data
82 */
83struct mmc_ivars {
84	uint32_t raw_cid[4];	/* Raw bits of the CID */
85	uint32_t raw_csd[4];	/* Raw bits of the CSD */
86	uint32_t raw_scr[2];	/* Raw bits of the SCR */
87	uint8_t raw_ext_csd[512];	/* Raw bits of the EXT_CSD */
88	uint16_t rca;
89	enum mmc_card_mode mode;
90	struct mmc_cid cid;	/* cid decoded */
91	struct mmc_csd csd;	/* csd decoded */
92	struct mmc_scr scr;	/* scr decoded */
93	u_char read_only;	/* True when the device is read-only */
94	u_char bus_width;	/* Bus width to use */
95	u_char timing;		/* Bus timing support */
96	u_char high_cap;	/* High Capacity card (block addressed) */
97	uint32_t sec_count;	/* Card capacity in 512byte blocks */
98	uint32_t tran_speed;	/* Max speed in normal mode */
99	uint32_t hs_tran_speed;	/* Max speed in high speed mode */
100};
101
102#define CMD_RETRIES	3
103
104/* bus entry points */
105static int mmc_probe(device_t dev);
106static int mmc_attach(device_t dev);
107static int mmc_detach(device_t dev);
108
109#define MMC_LOCK(_sc)		mtx_lock(&(_sc)->sc_mtx)
110#define	MMC_UNLOCK(_sc)		mtx_unlock(&(_sc)->sc_mtx)
111#define MMC_LOCK_INIT(_sc)					\
112	mtx_init(&_sc->sc_mtx, device_get_nameunit(_sc->dev),	\
113	    "mmc", MTX_DEF)
114#define MMC_LOCK_DESTROY(_sc)	mtx_destroy(&_sc->sc_mtx);
115#define MMC_ASSERT_LOCKED(_sc)	mtx_assert(&_sc->sc_mtx, MA_OWNED);
116#define MMC_ASSERT_UNLOCKED(_sc) mtx_assert(&_sc->sc_mtx, MA_NOTOWNED);
117
118static int mmc_calculate_clock(struct mmc_softc *sc);
119static void mmc_delayed_attach(void *);
120static void mmc_power_down(struct mmc_softc *sc);
121static int mmc_wait_for_cmd(struct mmc_softc *sc, struct mmc_command *cmd,
122    int retries);
123static int mmc_wait_for_command(struct mmc_softc *sc, uint32_t opcode,
124    uint32_t arg, uint32_t flags, uint32_t *resp, int retries);
125static int mmc_select_card(struct mmc_softc *sc, uint16_t rca);
126static int mmc_set_card_bus_width(struct mmc_softc *sc, uint16_t rca, int width);
127static int mmc_app_send_scr(struct mmc_softc *sc, uint16_t rca, uint32_t *rawscr);
128static void mmc_app_decode_scr(uint32_t *raw_scr, struct mmc_scr *scr);
129static int mmc_send_ext_csd(struct mmc_softc *sc, uint8_t *rawextcsd);
130
131static void
132mmc_ms_delay(int ms)
133{
134	DELAY(1000 * ms);	/* XXX BAD */
135}
136
137static int
138mmc_probe(device_t dev)
139{
140
141	device_set_desc(dev, "MMC/SD bus");
142	return (0);
143}
144
145static int
146mmc_attach(device_t dev)
147{
148	struct mmc_softc *sc;
149
150	sc = device_get_softc(dev);
151	sc->dev = dev;
152	MMC_LOCK_INIT(sc);
153
154	/* We'll probe and attach our children later, but before / mount */
155	sc->config_intrhook.ich_func = mmc_delayed_attach;
156	sc->config_intrhook.ich_arg = sc;
157	if (config_intrhook_establish(&sc->config_intrhook) != 0)
158		device_printf(dev, "config_intrhook_establish failed\n");
159	return (0);
160}
161
162static int
163mmc_detach(device_t dev)
164{
165	struct mmc_softc *sc = device_get_softc(dev);
166	device_t *kids;
167	int i, nkid;
168
169	/* kill children [ph33r].  -sorbo */
170	if (device_get_children(sc->dev, &kids, &nkid) != 0)
171		return (0);
172	for (i = 0; i < nkid; i++) {
173		device_t kid = kids[i];
174		void *ivar = device_get_ivars(kid);
175
176		device_detach(kid);
177		device_delete_child(sc->dev, kid);
178		free(ivar, M_DEVBUF);
179	}
180	free(kids, M_TEMP);
181	mmc_power_down(sc);
182
183	MMC_LOCK_DESTROY(sc);
184
185	return (0);
186}
187
188static int
189mmc_acquire_bus(device_t busdev, device_t dev)
190{
191	struct mmc_softc *sc;
192	struct mmc_ivars *ivar;
193	int err;
194	int rca;
195
196	err = MMCBR_ACQUIRE_HOST(device_get_parent(busdev), busdev);
197	if (err)
198		return (err);
199	sc = device_get_softc(busdev);
200	MMC_LOCK(sc);
201	if (sc->owner)
202		panic("mmc: host bridge didn't seralize us.");
203	sc->owner = dev;
204	MMC_UNLOCK(sc);
205
206	if (busdev != dev) {
207		/*
208		 * Keep track of the last rca that we've selected.  If
209		 * we're asked to do it again, don't.  We never
210		 * unselect unless the bus code itself wants the mmc
211		 * bus, and constantly reselecting causes problems.
212		 */
213		rca = mmc_get_rca(dev);
214		if (sc->last_rca != rca) {
215			mmc_select_card(sc, rca);
216			sc->last_rca = rca;
217			/* Prepare bus width for the new card. */
218			ivar = device_get_ivars(dev);
219			if (bootverbose) {
220				device_printf(busdev,
221				    "setting bus width to %d bits\n",
222				    (ivar->bus_width == bus_width_4)?4:
223				    (ivar->bus_width == bus_width_8)?8:1);
224			}
225			mmc_set_card_bus_width(sc, rca, ivar->bus_width);
226			mmcbr_set_bus_width(busdev, ivar->bus_width);
227			mmcbr_update_ios(busdev);
228		}
229	} else {
230		/*
231		 * If there's a card selected, stand down.
232		 */
233		if (sc->last_rca != 0) {
234			mmc_select_card(sc, 0);
235			sc->last_rca = 0;
236		}
237	}
238
239	return (0);
240}
241
242static int
243mmc_release_bus(device_t busdev, device_t dev)
244{
245	struct mmc_softc *sc;
246	int err;
247
248	sc = device_get_softc(busdev);
249
250	MMC_LOCK(sc);
251	if (!sc->owner)
252		panic("mmc: releasing unowned bus.");
253	if (sc->owner != dev)
254		panic("mmc: you don't own the bus.  game over.");
255	MMC_UNLOCK(sc);
256	err = MMCBR_RELEASE_HOST(device_get_parent(busdev), busdev);
257	if (err)
258		return (err);
259	MMC_LOCK(sc);
260	sc->owner = NULL;
261	MMC_UNLOCK(sc);
262	return (0);
263}
264
265static void
266mmc_rescan_cards(struct mmc_softc *sc)
267{
268	/* XXX: Look at the children and see if they respond to status */
269}
270
271static uint32_t
272mmc_select_vdd(struct mmc_softc *sc, uint32_t ocr)
273{
274
275	return (ocr & MMC_OCR_VOLTAGE);
276}
277
278static int
279mmc_highest_voltage(uint32_t ocr)
280{
281	int i;
282
283	for (i = 30; i >= 0; i--)
284		if (ocr & (1 << i))
285			return (i);
286	return (-1);
287}
288
289static void
290mmc_wakeup(struct mmc_request *req)
291{
292	struct mmc_softc *sc;
293
294/*	printf("Wakeup for req %p done_data %p\n", req, req->done_data); */
295	sc = (struct mmc_softc *)req->done_data;
296	MMC_LOCK(sc);
297	req->flags |= MMC_REQ_DONE;
298	wakeup(req);
299	MMC_UNLOCK(sc);
300}
301
302static int
303mmc_wait_for_req(struct mmc_softc *sc, struct mmc_request *req)
304{
305	int err;
306
307	req->done = mmc_wakeup;
308	req->done_data = sc;
309/*	printf("Submitting request %p sc %p\n", req, sc); */
310	MMCBR_REQUEST(device_get_parent(sc->dev), sc->dev, req);
311	MMC_LOCK(sc);
312	do {
313		err = msleep(req, &sc->sc_mtx, PZERO | PCATCH, "mmcreq",
314		    hz / 10);
315	} while (!(req->flags & MMC_REQ_DONE) && err == EAGAIN);
316/*	printf("Request %p done with error %d\n", req, err); */
317	MMC_UNLOCK(sc);
318	return (err);
319}
320
321static int
322mmc_wait_for_request(device_t brdev, device_t reqdev, struct mmc_request *req)
323{
324	struct mmc_softc *sc = device_get_softc(brdev);
325
326	return (mmc_wait_for_req(sc, req));
327}
328
329static int
330mmc_wait_for_cmd(struct mmc_softc *sc, struct mmc_command *cmd, int retries)
331{
332	struct mmc_request mreq;
333
334	memset(&mreq, 0, sizeof(mreq));
335	memset(cmd->resp, 0, sizeof(cmd->resp));
336	cmd->retries = retries;
337	mreq.cmd = cmd;
338/*	printf("CMD: %x ARG %x\n", cmd->opcode, cmd->arg); */
339	mmc_wait_for_req(sc, &mreq);
340	return (cmd->error);
341}
342
343static int
344mmc_wait_for_app_cmd(struct mmc_softc *sc, uint32_t rca,
345    struct mmc_command *cmd, int retries)
346{
347	struct mmc_command appcmd;
348	int err = MMC_ERR_NONE, i;
349
350	for (i = 0; i <= retries; i++) {
351		appcmd.opcode = MMC_APP_CMD;
352		appcmd.arg = rca << 16;
353		appcmd.flags = MMC_RSP_R1 | MMC_CMD_AC;
354		appcmd.data = NULL;
355		mmc_wait_for_cmd(sc, &appcmd, 0);
356		err = appcmd.error;
357		if (err != MMC_ERR_NONE)
358			continue;
359		if (!(appcmd.resp[0] & R1_APP_CMD))
360			return MMC_ERR_FAILED;
361		mmc_wait_for_cmd(sc, cmd, 0);
362		err = cmd->error;
363		if (err == MMC_ERR_NONE)
364			break;
365	}
366	return (err);
367}
368
369static int
370mmc_wait_for_command(struct mmc_softc *sc, uint32_t opcode,
371    uint32_t arg, uint32_t flags, uint32_t *resp, int retries)
372{
373	struct mmc_command cmd;
374	int err;
375
376	memset(&cmd, 0, sizeof(cmd));
377	cmd.opcode = opcode;
378	cmd.arg = arg;
379	cmd.flags = flags;
380	cmd.data = NULL;
381	err = mmc_wait_for_cmd(sc, &cmd, retries);
382	if (err)
383		return (err);
384	if (cmd.error)
385		return (cmd.error);
386	if (resp) {
387		if (flags & MMC_RSP_136)
388			memcpy(resp, cmd.resp, 4 * sizeof(uint32_t));
389		else
390			*resp = cmd.resp[0];
391	}
392	return (0);
393}
394
395static void
396mmc_idle_cards(struct mmc_softc *sc)
397{
398	device_t dev;
399	struct mmc_command cmd;
400
401	dev = sc->dev;
402	mmcbr_set_chip_select(dev, cs_high);
403	mmcbr_update_ios(dev);
404	mmc_ms_delay(1);
405
406	memset(&cmd, 0, sizeof(cmd));
407	cmd.opcode = MMC_GO_IDLE_STATE;
408	cmd.arg = 0;
409	cmd.flags = MMC_RSP_NONE | MMC_CMD_BC;
410	cmd.data = NULL;
411	mmc_wait_for_cmd(sc, &cmd, 0);
412	mmc_ms_delay(1);
413
414	mmcbr_set_chip_select(dev, cs_dontcare);
415	mmcbr_update_ios(dev);
416	mmc_ms_delay(1);
417}
418
419static int
420mmc_send_app_op_cond(struct mmc_softc *sc, uint32_t ocr, uint32_t *rocr)
421{
422	struct mmc_command cmd;
423	int err = MMC_ERR_NONE, i;
424
425	memset(&cmd, 0, sizeof(cmd));
426	cmd.opcode = ACMD_SD_SEND_OP_COND;
427	cmd.arg = ocr;
428	cmd.flags = MMC_RSP_R3 | MMC_CMD_BCR;
429	cmd.data = NULL;
430
431	for (i = 0; i < 100; i++) {
432		err = mmc_wait_for_app_cmd(sc, 0, &cmd, CMD_RETRIES);
433		if (err != MMC_ERR_NONE)
434			break;
435		if ((cmd.resp[0] & MMC_OCR_CARD_BUSY) ||
436		    (ocr & MMC_OCR_VOLTAGE) == 0)
437			break;
438		err = MMC_ERR_TIMEOUT;
439		mmc_ms_delay(10);
440	}
441	if (rocr && err == MMC_ERR_NONE)
442		*rocr = cmd.resp[0];
443	return (err);
444}
445
446static int
447mmc_send_op_cond(struct mmc_softc *sc, uint32_t ocr, uint32_t *rocr)
448{
449	struct mmc_command cmd;
450	int err = MMC_ERR_NONE, i;
451
452	memset(&cmd, 0, sizeof(cmd));
453	cmd.opcode = MMC_SEND_OP_COND;
454	cmd.arg = ocr;
455	cmd.flags = MMC_RSP_R3 | MMC_CMD_BCR;
456	cmd.data = NULL;
457
458	for (i = 0; i < 100; i++) {
459		err = mmc_wait_for_cmd(sc, &cmd, CMD_RETRIES);
460		if (err != MMC_ERR_NONE)
461			break;
462		if ((cmd.resp[0] & MMC_OCR_CARD_BUSY) ||
463		    (ocr & MMC_OCR_VOLTAGE) == 0)
464			break;
465		err = MMC_ERR_TIMEOUT;
466		mmc_ms_delay(10);
467	}
468	if (rocr && err == MMC_ERR_NONE)
469		*rocr = cmd.resp[0];
470	return (err);
471}
472
473static int
474mmc_send_if_cond(struct mmc_softc *sc, uint8_t vhs)
475{
476	struct mmc_command cmd;
477	int err;
478
479	memset(&cmd, 0, sizeof(cmd));
480	cmd.opcode = SD_SEND_IF_COND;
481	cmd.arg = (vhs << 8) + 0xAA;
482	cmd.flags = MMC_RSP_R7 | MMC_CMD_BCR;
483	cmd.data = NULL;
484
485	err = mmc_wait_for_cmd(sc, &cmd, CMD_RETRIES);
486	return (err);
487}
488
489static void
490mmc_power_up(struct mmc_softc *sc)
491{
492	device_t dev;
493
494	dev = sc->dev;
495	mmcbr_set_vdd(dev, mmc_highest_voltage(mmcbr_get_host_ocr(dev)));
496	mmcbr_set_bus_mode(dev, opendrain);
497	mmcbr_set_chip_select(dev, cs_dontcare);
498	mmcbr_set_bus_width(dev, bus_width_1);
499	mmcbr_set_power_mode(dev, power_up);
500	mmcbr_set_clock(dev, 0);
501	mmcbr_update_ios(dev);
502	mmc_ms_delay(1);
503
504	mmcbr_set_clock(dev, mmcbr_get_f_min(sc->dev));
505	mmcbr_set_timing(dev, bus_timing_normal);
506	mmcbr_set_power_mode(dev, power_on);
507	mmcbr_update_ios(dev);
508	mmc_ms_delay(2);
509}
510
511static void
512mmc_power_down(struct mmc_softc *sc)
513{
514	device_t dev = sc->dev;
515
516	mmcbr_set_bus_mode(dev, opendrain);
517	mmcbr_set_chip_select(dev, cs_dontcare);
518	mmcbr_set_bus_width(dev, bus_width_1);
519	mmcbr_set_power_mode(dev, power_off);
520	mmcbr_set_clock(dev, 0);
521	mmcbr_set_timing(dev, bus_timing_normal);
522	mmcbr_update_ios(dev);
523}
524
525static int
526mmc_select_card(struct mmc_softc *sc, uint16_t rca)
527{
528	return (mmc_wait_for_command(sc, MMC_SELECT_CARD, ((uint32_t)rca) << 16,
529	    MMC_RSP_R1B | MMC_CMD_AC, NULL, CMD_RETRIES));
530}
531
532static int
533mmc_switch(struct mmc_softc *sc, uint8_t set, uint8_t index, uint8_t value)
534{
535	struct mmc_command cmd;
536	int err;
537
538	cmd.opcode = MMC_SWITCH_FUNC;
539	cmd.arg = (MMC_SWITCH_FUNC_WR << 24) |
540	    (index << 16) |
541	    (value << 8) |
542	    set;
543	cmd.flags = MMC_RSP_R1B | MMC_CMD_AC;
544	cmd.data = NULL;
545	err = mmc_wait_for_cmd(sc, &cmd, 0);
546	return (err);
547}
548
549static int
550mmc_sd_switch(struct mmc_softc *sc, uint8_t mode, uint8_t grp, uint8_t value, uint8_t *res)
551{
552	int err;
553	struct mmc_command cmd;
554	struct mmc_data data;
555
556	memset(&cmd, 0, sizeof(struct mmc_command));
557	memset(&data, 0, sizeof(struct mmc_data));
558
559	memset(res, 0, 64);
560	cmd.opcode = SD_SWITCH_FUNC;
561	cmd.flags = MMC_RSP_R1 | MMC_CMD_ADTC;
562	cmd.arg = mode << 31;
563	cmd.arg |= 0x00FFFFFF;
564	cmd.arg &= ~(0xF << (grp * 4));
565	cmd.arg |= value << (grp * 4);
566	cmd.data = &data;
567
568	data.data = res;
569	data.len = 64;
570	data.flags = MMC_DATA_READ;
571
572	err = mmc_wait_for_cmd(sc, &cmd, CMD_RETRIES);
573	return (err);
574}
575
576static int
577mmc_set_card_bus_width(struct mmc_softc *sc, uint16_t rca, int width)
578{
579	int err;
580
581	if (mmcbr_get_mode(sc->dev) == mode_sd) {
582		struct mmc_command cmd;
583
584		memset(&cmd, 0, sizeof(struct mmc_command));
585		cmd.opcode = ACMD_SET_BUS_WIDTH;
586		cmd.flags = MMC_RSP_R1 | MMC_CMD_AC;
587		switch (width) {
588		case bus_width_1:
589			cmd.arg = SD_BUS_WIDTH_1;
590			break;
591		case bus_width_4:
592			cmd.arg = SD_BUS_WIDTH_4;
593			break;
594		default:
595			return (MMC_ERR_INVALID);
596		}
597		err = mmc_wait_for_app_cmd(sc, rca, &cmd, CMD_RETRIES);
598	} else {
599		uint8_t	value;
600
601		switch (width) {
602		case bus_width_1:
603			value = EXT_CSD_BUS_WIDTH_1;
604			break;
605		case bus_width_4:
606			value = EXT_CSD_BUS_WIDTH_4;
607			break;
608		case bus_width_8:
609			value = EXT_CSD_BUS_WIDTH_8;
610			break;
611		default:
612			return (MMC_ERR_INVALID);
613		}
614		err = mmc_switch(sc, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_BUS_WIDTH, value);
615	}
616	return (err);
617}
618
619static int
620mmc_set_timing(struct mmc_softc *sc, int timing)
621{
622	int err;
623	uint8_t	value;
624
625	switch (timing) {
626	case bus_timing_normal:
627		value = 0;
628		break;
629	case bus_timing_hs:
630		value = 1;
631		break;
632	default:
633		return (MMC_ERR_INVALID);
634	}
635	if (mmcbr_get_mode(sc->dev) == mode_sd) {
636		u_char switch_res[64];
637
638		err = mmc_sd_switch(sc, 1, 0, value, switch_res);
639	} else {
640		err = mmc_switch(sc, EXT_CSD_CMD_SET_NORMAL,
641		    EXT_CSD_HS_TIMING, value);
642	}
643	return (err);
644}
645
646static int
647mmc_test_bus_width(struct mmc_softc *sc)
648{
649	struct mmc_command cmd;
650	struct mmc_data data;
651	int err;
652	uint8_t buf[8];
653	uint8_t	p8[8] =   { 0x55, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
654	uint8_t	p8ok[8] = { 0xAA, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
655	uint8_t	p4[4] =   { 0x5A, 0x00, 0x00, 0x00, };
656	uint8_t	p4ok[4] = { 0xA5, 0x00, 0x00, 0x00, };
657
658	if (mmcbr_get_caps(sc->dev) & MMC_CAP_8_BIT_DATA) {
659		mmcbr_set_bus_width(sc->dev, bus_width_8);
660		mmcbr_update_ios(sc->dev);
661
662		cmd.opcode = MMC_BUSTEST_W;
663		cmd.arg = 0;
664		cmd.flags = MMC_RSP_R1 | MMC_CMD_ADTC;
665		cmd.data = &data;
666
667		data.data = p8;
668		data.len = 8;
669		data.flags = MMC_DATA_WRITE;
670		mmc_wait_for_cmd(sc, &cmd, 0);
671
672		cmd.opcode = MMC_BUSTEST_R;
673		cmd.arg = 0;
674		cmd.flags = MMC_RSP_R1 | MMC_CMD_ADTC;
675		cmd.data = &data;
676
677		data.data = buf;
678		data.len = 8;
679		data.flags = MMC_DATA_READ;
680		err = mmc_wait_for_cmd(sc, &cmd, 0);
681
682		mmcbr_set_bus_width(sc->dev, bus_width_1);
683		mmcbr_update_ios(sc->dev);
684
685		if (err == MMC_ERR_NONE && memcmp(buf, p8ok, 8) == 0)
686			return (bus_width_8);
687	}
688
689	if (mmcbr_get_caps(sc->dev) & MMC_CAP_4_BIT_DATA) {
690		mmcbr_set_bus_width(sc->dev, bus_width_4);
691		mmcbr_update_ios(sc->dev);
692
693		cmd.opcode = MMC_BUSTEST_W;
694		cmd.arg = 0;
695		cmd.flags = MMC_RSP_R1 | MMC_CMD_ADTC;
696		cmd.data = &data;
697
698		data.data = p4;
699		data.len = 4;
700		data.flags = MMC_DATA_WRITE;
701		mmc_wait_for_cmd(sc, &cmd, 0);
702
703		cmd.opcode = MMC_BUSTEST_R;
704		cmd.arg = 0;
705		cmd.flags = MMC_RSP_R1 | MMC_CMD_ADTC;
706		cmd.data = &data;
707
708		data.data = buf;
709		data.len = 4;
710		data.flags = MMC_DATA_READ;
711		err = mmc_wait_for_cmd(sc, &cmd, 0);
712
713		mmcbr_set_bus_width(sc->dev, bus_width_1);
714		mmcbr_update_ios(sc->dev);
715
716		if (err == MMC_ERR_NONE && memcmp(buf, p4ok, 4) == 0)
717			return (bus_width_4);
718	}
719	return (bus_width_1);
720}
721
722static uint32_t
723mmc_get_bits(uint32_t *bits, int start, int size)
724{
725	const int bit_len = 128;
726	const int i = (bit_len / 32) - (start / 32) - 1;
727	const int shift = start & 31;
728	uint32_t retval = bits[i] >> shift;
729	if (size + shift > 32)
730		retval |= bits[i - 1] << (32 - shift);
731	return (retval & ((1 << size) - 1));
732}
733
734static void
735mmc_decode_cid_sd(uint32_t *raw_cid, struct mmc_cid *cid)
736{
737	int i;
738
739	/* There's no version info, so we take it on faith */
740	memset(cid, 0, sizeof(*cid));
741	cid->mid = mmc_get_bits(raw_cid, 120, 8);
742	cid->oid = mmc_get_bits(raw_cid, 104, 16);
743	for (i = 0; i < 5; i++)
744		cid->pnm[i] = mmc_get_bits(raw_cid, 96 - i * 8, 8);
745	cid->prv = mmc_get_bits(raw_cid, 56, 8);
746	cid->psn = mmc_get_bits(raw_cid, 24, 32);
747	cid->mdt_year = mmc_get_bits(raw_cid, 12, 8) + 2001;
748	cid->mdt_month = mmc_get_bits(raw_cid, 8, 4);
749}
750
751static void
752mmc_decode_cid_mmc(uint32_t *raw_cid, struct mmc_cid *cid)
753{
754	int i;
755
756	/* There's no version info, so we take it on faith */
757	memset(cid, 0, sizeof(*cid));
758	cid->mid = mmc_get_bits(raw_cid, 120, 8);
759	cid->oid = mmc_get_bits(raw_cid, 104, 8);
760	for (i = 0; i < 6; i++)
761		cid->pnm[i] = mmc_get_bits(raw_cid, 96 - i * 8, 8);
762	cid->prv = mmc_get_bits(raw_cid, 48, 8);
763	cid->psn = mmc_get_bits(raw_cid, 16, 32);
764	cid->mdt_month = mmc_get_bits(raw_cid, 12, 4);
765	cid->mdt_year = mmc_get_bits(raw_cid, 8, 4) + 1997;
766}
767
768static const int exp[8] = {
769	1, 10, 100, 1000, 10000, 100000, 1000000, 10000000
770};
771static const int mant[16] = {
772	10, 12, 13, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 70, 80
773};
774static const int cur_min[8] = {
775	500, 1000, 5000, 10000, 25000, 35000, 60000, 100000
776};
777static const int cur_max[8] = {
778	1000, 5000, 10000, 25000, 35000, 45000, 800000, 200000
779};
780
781static void
782mmc_decode_csd_sd(uint32_t *raw_csd, struct mmc_csd *csd)
783{
784	int v;
785	int m;
786	int e;
787
788	memset(csd, 0, sizeof(*csd));
789	csd->csd_structure = v = mmc_get_bits(raw_csd, 126, 2);
790	if (v == 0) {
791		m = mmc_get_bits(raw_csd, 115, 4);
792		e = mmc_get_bits(raw_csd, 112, 3);
793		csd->tacc = exp[e] * mant[m] + 9 / 10;
794		csd->nsac = mmc_get_bits(raw_csd, 104, 8) * 100;
795		m = mmc_get_bits(raw_csd, 99, 4);
796		e = mmc_get_bits(raw_csd, 96, 3);
797		csd->tran_speed = exp[e] * 10000 * mant[m];
798		csd->ccc = mmc_get_bits(raw_csd, 84, 12);
799		csd->read_bl_len = 1 << mmc_get_bits(raw_csd, 80, 4);
800		csd->read_bl_partial = mmc_get_bits(raw_csd, 79, 1);
801		csd->write_blk_misalign = mmc_get_bits(raw_csd, 78, 1);
802		csd->read_blk_misalign = mmc_get_bits(raw_csd, 77, 1);
803		csd->dsr_imp = mmc_get_bits(raw_csd, 76, 1);
804		csd->vdd_r_curr_min = cur_min[mmc_get_bits(raw_csd, 59, 3)];
805		csd->vdd_r_curr_max = cur_max[mmc_get_bits(raw_csd, 56, 3)];
806		csd->vdd_w_curr_min = cur_min[mmc_get_bits(raw_csd, 53, 3)];
807		csd->vdd_w_curr_max = cur_max[mmc_get_bits(raw_csd, 50, 3)];
808		m = mmc_get_bits(raw_csd, 62, 12);
809		e = mmc_get_bits(raw_csd, 47, 3);
810		csd->capacity = ((1 + m) << (e + 2)) * csd->read_bl_len;
811		csd->erase_blk_en = mmc_get_bits(raw_csd, 46, 1);
812		csd->sector_size = mmc_get_bits(raw_csd, 39, 7);
813		csd->wp_grp_size = mmc_get_bits(raw_csd, 32, 7);
814		csd->wp_grp_enable = mmc_get_bits(raw_csd, 31, 1);
815		csd->r2w_factor = 1 << mmc_get_bits(raw_csd, 26, 3);
816		csd->write_bl_len = 1 << mmc_get_bits(raw_csd, 22, 4);
817		csd->write_bl_partial = mmc_get_bits(raw_csd, 21, 1);
818	} else if (v == 1) {
819		m = mmc_get_bits(raw_csd, 115, 4);
820		e = mmc_get_bits(raw_csd, 112, 3);
821		csd->tacc = exp[e] * mant[m] + 9 / 10;
822		csd->nsac = mmc_get_bits(raw_csd, 104, 8) * 100;
823		m = mmc_get_bits(raw_csd, 99, 4);
824		e = mmc_get_bits(raw_csd, 96, 3);
825		csd->tran_speed = exp[e] * 10000 * mant[m];
826		csd->ccc = mmc_get_bits(raw_csd, 84, 12);
827		csd->read_bl_len = 1 << mmc_get_bits(raw_csd, 80, 4);
828		csd->read_bl_partial = mmc_get_bits(raw_csd, 79, 1);
829		csd->write_blk_misalign = mmc_get_bits(raw_csd, 78, 1);
830		csd->read_blk_misalign = mmc_get_bits(raw_csd, 77, 1);
831		csd->dsr_imp = mmc_get_bits(raw_csd, 76, 1);
832		csd->capacity = ((uint64_t)mmc_get_bits(raw_csd, 48, 22) + 1) *
833		    512 * 1024;
834		csd->erase_blk_en = mmc_get_bits(raw_csd, 46, 1);
835		csd->sector_size = mmc_get_bits(raw_csd, 39, 7);
836		csd->wp_grp_size = mmc_get_bits(raw_csd, 32, 7);
837		csd->wp_grp_enable = mmc_get_bits(raw_csd, 31, 1);
838		csd->r2w_factor = 1 << mmc_get_bits(raw_csd, 26, 3);
839		csd->write_bl_len = 1 << mmc_get_bits(raw_csd, 22, 4);
840		csd->write_bl_partial = mmc_get_bits(raw_csd, 21, 1);
841	} else
842		panic("unknown SD CSD version");
843}
844
845static void
846mmc_decode_csd_mmc(uint32_t *raw_csd, struct mmc_csd *csd)
847{
848	int m;
849	int e;
850
851	memset(csd, 0, sizeof(*csd));
852	csd->csd_structure = mmc_get_bits(raw_csd, 126, 2);
853	csd->spec_vers = mmc_get_bits(raw_csd, 122, 4);
854	m = mmc_get_bits(raw_csd, 115, 4);
855	e = mmc_get_bits(raw_csd, 112, 3);
856	csd->tacc = exp[e] * mant[m] + 9 / 10;
857	csd->nsac = mmc_get_bits(raw_csd, 104, 8) * 100;
858	m = mmc_get_bits(raw_csd, 99, 4);
859	e = mmc_get_bits(raw_csd, 96, 3);
860	csd->tran_speed = exp[e] * 10000 * mant[m];
861	csd->ccc = mmc_get_bits(raw_csd, 84, 12);
862	csd->read_bl_len = 1 << mmc_get_bits(raw_csd, 80, 4);
863	csd->read_bl_partial = mmc_get_bits(raw_csd, 79, 1);
864	csd->write_blk_misalign = mmc_get_bits(raw_csd, 78, 1);
865	csd->read_blk_misalign = mmc_get_bits(raw_csd, 77, 1);
866	csd->dsr_imp = mmc_get_bits(raw_csd, 76, 1);
867	csd->vdd_r_curr_min = cur_min[mmc_get_bits(raw_csd, 59, 3)];
868	csd->vdd_r_curr_max = cur_max[mmc_get_bits(raw_csd, 56, 3)];
869	csd->vdd_w_curr_min = cur_min[mmc_get_bits(raw_csd, 53, 3)];
870	csd->vdd_w_curr_max = cur_max[mmc_get_bits(raw_csd, 50, 3)];
871	m = mmc_get_bits(raw_csd, 62, 12);
872	e = mmc_get_bits(raw_csd, 47, 3);
873	csd->capacity = ((1 + m) << (e + 2)) * csd->read_bl_len;
874//	csd->erase_blk_en = mmc_get_bits(raw_csd, 46, 1);
875//	csd->sector_size = mmc_get_bits(raw_csd, 39, 7);
876	csd->wp_grp_size = mmc_get_bits(raw_csd, 32, 5);
877	csd->wp_grp_enable = mmc_get_bits(raw_csd, 31, 1);
878	csd->r2w_factor = 1 << mmc_get_bits(raw_csd, 26, 3);
879	csd->write_bl_len = 1 << mmc_get_bits(raw_csd, 22, 4);
880	csd->write_bl_partial = mmc_get_bits(raw_csd, 21, 1);
881}
882
883static void
884mmc_app_decode_scr(uint32_t *raw_scr, struct mmc_scr *scr)
885{
886	unsigned int scr_struct;
887	uint32_t tmp[4];
888
889	tmp[3] = raw_scr[1];
890	tmp[2] = raw_scr[0];
891
892	memset(scr, 0, sizeof(*scr));
893
894	scr_struct = mmc_get_bits(tmp, 60, 4);
895	if (scr_struct != 0) {
896		printf("Unrecognised SCR structure version %d\n",
897		    scr_struct);
898		return;
899	}
900	scr->sda_vsn = mmc_get_bits(tmp, 56, 4);
901	scr->bus_widths = mmc_get_bits(tmp, 48, 4);
902}
903
904static int
905mmc_all_send_cid(struct mmc_softc *sc, uint32_t *rawcid)
906{
907	struct mmc_command cmd;
908	int err;
909
910	cmd.opcode = MMC_ALL_SEND_CID;
911	cmd.arg = 0;
912	cmd.flags = MMC_RSP_R2 | MMC_CMD_BCR;
913	cmd.data = NULL;
914	err = mmc_wait_for_cmd(sc, &cmd, 0);
915	memcpy(rawcid, cmd.resp, 4 * sizeof(uint32_t));
916	return (err);
917}
918
919static int
920mmc_send_csd(struct mmc_softc *sc, uint16_t rca, uint32_t *rawcid)
921{
922	struct mmc_command cmd;
923	int err;
924
925	cmd.opcode = MMC_SEND_CSD;
926	cmd.arg = rca << 16;
927	cmd.flags = MMC_RSP_R2 | MMC_CMD_BCR;
928	cmd.data = NULL;
929	err = mmc_wait_for_cmd(sc, &cmd, 0);
930	memcpy(rawcid, cmd.resp, 4 * sizeof(uint32_t));
931	return (err);
932}
933
934static int
935mmc_app_send_scr(struct mmc_softc *sc, uint16_t rca, uint32_t *rawscr)
936{
937	int err;
938	struct mmc_command cmd;
939	struct mmc_data data;
940
941	memset(&cmd, 0, sizeof(struct mmc_command));
942	memset(&data, 0, sizeof(struct mmc_data));
943
944	memset(rawscr, 0, 8);
945	cmd.opcode = ACMD_SEND_SCR;
946	cmd.flags = MMC_RSP_R1 | MMC_CMD_ADTC;
947	cmd.arg = 0;
948	cmd.data = &data;
949
950	data.data = rawscr;
951	data.len = 8;
952	data.flags = MMC_DATA_READ;
953
954	err = mmc_wait_for_app_cmd(sc, rca, &cmd, CMD_RETRIES);
955	rawscr[0] = be32toh(rawscr[0]);
956	rawscr[1] = be32toh(rawscr[1]);
957	return (err);
958}
959
960static int
961mmc_send_ext_csd(struct mmc_softc *sc, uint8_t *rawextcsd)
962{
963	int err;
964	struct mmc_command cmd;
965	struct mmc_data data;
966
967	memset(&cmd, 0, sizeof(struct mmc_command));
968	memset(&data, 0, sizeof(struct mmc_data));
969
970	memset(rawextcsd, 0, 512);
971	cmd.opcode = MMC_SEND_EXT_CSD;
972	cmd.flags = MMC_RSP_R1 | MMC_CMD_ADTC;
973	cmd.arg = 0;
974	cmd.data = &data;
975
976	data.data = rawextcsd;
977	data.len = 512;
978	data.flags = MMC_DATA_READ;
979
980	err = mmc_wait_for_cmd(sc, &cmd, CMD_RETRIES);
981	return (err);
982}
983
984static int
985mmc_set_relative_addr(struct mmc_softc *sc, uint16_t resp)
986{
987	struct mmc_command cmd;
988	int err;
989
990	cmd.opcode = MMC_SET_RELATIVE_ADDR;
991	cmd.arg = resp << 16;
992	cmd.flags = MMC_RSP_R6 | MMC_CMD_BCR;
993	cmd.data = NULL;
994	err = mmc_wait_for_cmd(sc, &cmd, 0);
995	return (err);
996}
997
998static int
999mmc_send_relative_addr(struct mmc_softc *sc, uint32_t *resp)
1000{
1001	struct mmc_command cmd;
1002	int err;
1003
1004	cmd.opcode = SD_SEND_RELATIVE_ADDR;
1005	cmd.arg = 0;
1006	cmd.flags = MMC_RSP_R6 | MMC_CMD_BCR;
1007	cmd.data = NULL;
1008	err = mmc_wait_for_cmd(sc, &cmd, 0);
1009	*resp = cmd.resp[0];
1010	return (err);
1011}
1012
1013static void
1014mmc_discover_cards(struct mmc_softc *sc)
1015{
1016	struct mmc_ivars *ivar;
1017	int err;
1018	uint32_t resp, sec_count;
1019	device_t child;
1020	uint16_t rca = 2;
1021	u_char switch_res[64];
1022
1023	while (1) {
1024		ivar = malloc(sizeof(struct mmc_ivars), M_DEVBUF,
1025		    M_WAITOK | M_ZERO);
1026		if (!ivar)
1027			return;
1028		err = mmc_all_send_cid(sc, ivar->raw_cid);
1029		if (err == MMC_ERR_TIMEOUT)
1030			break;
1031		if (err != MMC_ERR_NONE) {
1032			device_printf(sc->dev, "Error reading CID %d\n", err);
1033			break;
1034		}
1035		if (mmcbr_get_ro(sc->dev))
1036			ivar->read_only = 1;
1037		ivar->bus_width = bus_width_1;
1038		ivar->mode = mmcbr_get_mode(sc->dev);
1039		if (ivar->mode == mode_sd) {
1040			mmc_decode_cid_sd(ivar->raw_cid, &ivar->cid);
1041			mmc_send_relative_addr(sc, &resp);
1042			ivar->rca = resp >> 16;
1043			/* Get card CSD. */
1044			mmc_send_csd(sc, ivar->rca, ivar->raw_csd);
1045			mmc_decode_csd_sd(ivar->raw_csd, &ivar->csd);
1046			ivar->sec_count = ivar->csd.capacity / MMC_SECTOR_SIZE;
1047			if (ivar->csd.csd_structure > 0)
1048				ivar->high_cap = 1;
1049			ivar->tran_speed = ivar->csd.tran_speed;
1050			/* Get card SCR. Card must be selected to fetch it. */
1051			mmc_select_card(sc, ivar->rca);
1052			mmc_app_send_scr(sc, ivar->rca, ivar->raw_scr);
1053			mmc_app_decode_scr(ivar->raw_scr, &ivar->scr);
1054			/* Get card switch capabilities. */
1055			if ((ivar->scr.sda_vsn >= 1) &&
1056			    (ivar->csd.ccc & (1<<10))) {
1057				mmc_sd_switch(sc, 0, 0, 0xF, switch_res);
1058				if (switch_res[13] & 2) {
1059					ivar->timing = bus_timing_hs;
1060					ivar->hs_tran_speed = 50000000;
1061				}
1062			}
1063			mmc_select_card(sc, 0);
1064			/* Find max supported bus width. */
1065			if ((mmcbr_get_caps(sc->dev) & MMC_CAP_4_BIT_DATA) &&
1066			    (ivar->scr.bus_widths & SD_SCR_BUS_WIDTH_4))
1067				ivar->bus_width = bus_width_4;
1068			/* Add device. */
1069			child = device_add_child(sc->dev, NULL, -1);
1070			device_set_ivars(child, ivar);
1071			return;
1072		}
1073		mmc_decode_cid_mmc(ivar->raw_cid, &ivar->cid);
1074		ivar->rca = rca++;
1075		mmc_set_relative_addr(sc, ivar->rca);
1076		/* Get card CSD. */
1077		mmc_send_csd(sc, ivar->rca, ivar->raw_csd);
1078		mmc_decode_csd_mmc(ivar->raw_csd, &ivar->csd);
1079		ivar->sec_count = ivar->csd.capacity / MMC_SECTOR_SIZE;
1080		ivar->tran_speed = ivar->csd.tran_speed;
1081		/* Only MMC >= 4.x cards support EXT_CSD. */
1082		if (ivar->csd.spec_vers >= 4) {
1083			/* Card must be selected to fetch EXT_CSD. */
1084			mmc_select_card(sc, ivar->rca);
1085			mmc_send_ext_csd(sc, ivar->raw_ext_csd);
1086			/* Handle extended capacity from EXT_CSD */
1087			sec_count = ivar->raw_ext_csd[EXT_CSD_SEC_CNT] +
1088			    (ivar->raw_ext_csd[EXT_CSD_SEC_CNT + 1] << 8) +
1089			    (ivar->raw_ext_csd[EXT_CSD_SEC_CNT + 2] << 16) +
1090			    (ivar->raw_ext_csd[EXT_CSD_SEC_CNT + 3] << 24);
1091			if (sec_count != 0) {
1092				ivar->sec_count = sec_count;
1093				ivar->high_cap = 1;
1094			}
1095			/* Get card speed in high speed mode. */
1096			ivar->timing = bus_timing_hs;
1097			if (ivar->raw_ext_csd[EXT_CSD_CARD_TYPE]
1098			    & EXT_CSD_CARD_TYPE_52)
1099				ivar->hs_tran_speed = 52000000;
1100			else if (ivar->raw_ext_csd[EXT_CSD_CARD_TYPE]
1101			    & EXT_CSD_CARD_TYPE_26)
1102				ivar->hs_tran_speed = 26000000;
1103			else
1104				ivar->hs_tran_speed = ivar->tran_speed;
1105			/* Find max supported bus width. */
1106			ivar->bus_width = mmc_test_bus_width(sc);
1107			mmc_select_card(sc, 0);
1108		} else {
1109			ivar->bus_width = bus_width_1;
1110			ivar->timing = bus_timing_normal;
1111		}
1112		/* Add device. */
1113		child = device_add_child(sc->dev, NULL, -1);
1114		device_set_ivars(child, ivar);
1115	}
1116	free(ivar, M_DEVBUF);
1117}
1118
1119static void
1120mmc_go_discovery(struct mmc_softc *sc)
1121{
1122	uint32_t ocr;
1123	device_t dev;
1124	int err;
1125
1126	dev = sc->dev;
1127	if (mmcbr_get_power_mode(dev) != power_on) {
1128		/*
1129		 * First, try SD modes
1130		 */
1131		mmcbr_set_mode(dev, mode_sd);
1132		mmc_power_up(sc);
1133		mmcbr_set_bus_mode(dev, pushpull);
1134		mmc_idle_cards(sc);
1135		err = mmc_send_if_cond(sc, 1);
1136		if (mmc_send_app_op_cond(sc, err?0:MMC_OCR_CCS, &ocr) !=
1137		    MMC_ERR_NONE) {
1138			/*
1139			 * Failed, try MMC
1140			 */
1141			mmcbr_set_mode(dev, mode_mmc);
1142			if (mmc_send_op_cond(sc, 0, &ocr) != MMC_ERR_NONE)
1143				return;	/* Failed both, punt! XXX powerdown? */
1144		}
1145		mmcbr_set_ocr(dev, mmc_select_vdd(sc, ocr));
1146		if (mmcbr_get_ocr(dev) != 0)
1147			mmc_idle_cards(sc);
1148	} else {
1149		mmcbr_set_bus_mode(dev, opendrain);
1150		mmcbr_set_clock(dev, mmcbr_get_f_min(dev));
1151		mmcbr_update_ios(dev);
1152		/* XXX recompute vdd based on new cards? */
1153	}
1154	/*
1155	 * Make sure that we have a mutually agreeable voltage to at least
1156	 * one card on the bus.
1157	 */
1158	if (mmcbr_get_ocr(dev) == 0)
1159		return;
1160	/*
1161	 * Reselect the cards after we've idled them above.
1162	 */
1163	if (mmcbr_get_mode(dev) == mode_sd) {
1164		err = mmc_send_if_cond(sc, 1);
1165		mmc_send_app_op_cond(sc,
1166		    (err?0:MMC_OCR_CCS)|mmcbr_get_ocr(dev), NULL);
1167	} else
1168		mmc_send_op_cond(sc, mmcbr_get_ocr(dev), NULL);
1169	mmc_discover_cards(sc);
1170
1171	mmcbr_set_bus_mode(dev, pushpull);
1172	mmcbr_update_ios(dev);
1173	mmc_calculate_clock(sc);
1174	bus_generic_attach(dev);
1175/*	mmc_update_children_sysctl(dev);*/
1176}
1177
1178static int
1179mmc_calculate_clock(struct mmc_softc *sc)
1180{
1181	int max_dtr, max_hs_dtr, max_timing;
1182	int nkid, i, f_min, f_max;
1183	device_t *kids;
1184	struct mmc_ivars *ivar;
1185
1186	f_min = mmcbr_get_f_min(sc->dev);
1187	f_max = mmcbr_get_f_max(sc->dev);
1188	max_dtr = max_hs_dtr = f_max;
1189	if ((mmcbr_get_caps(sc->dev) & MMC_CAP_HSPEED))
1190		max_timing = bus_timing_hs;
1191	else
1192		max_timing = bus_timing_normal;
1193	if (device_get_children(sc->dev, &kids, &nkid) != 0)
1194		panic("can't get children");
1195	for (i = 0; i < nkid; i++) {
1196		ivar = device_get_ivars(kids[i]);
1197		if (ivar->timing < max_timing)
1198			max_timing = ivar->timing;
1199		if (ivar->tran_speed < max_dtr)
1200			max_dtr = ivar->tran_speed;
1201		if (ivar->hs_tran_speed < max_dtr)
1202			max_hs_dtr = ivar->hs_tran_speed;
1203	}
1204	for (i = 0; i < nkid; i++) {
1205		ivar = device_get_ivars(kids[i]);
1206		if (ivar->timing == bus_timing_normal)
1207			continue;
1208		mmc_select_card(sc, ivar->rca);
1209		mmc_set_timing(sc, max_timing);
1210	}
1211	mmc_select_card(sc, 0);
1212	free(kids, M_TEMP);
1213	if (max_timing == bus_timing_hs)
1214		max_dtr = max_hs_dtr;
1215	if (bootverbose) {
1216		device_printf(sc->dev, "setting transfer rate to %d.%03dMHz%s\n",
1217		    max_dtr / 1000000, (max_dtr / 1000) % 1000,
1218		    (max_timing == bus_timing_hs)?" with high speed timing":"");
1219	}
1220	mmcbr_set_timing(sc->dev, max_timing);
1221	mmcbr_set_clock(sc->dev, max_dtr);
1222	mmcbr_update_ios(sc->dev);
1223	return max_dtr;
1224}
1225
1226static void
1227mmc_scan(struct mmc_softc *sc)
1228{
1229	device_t dev;
1230
1231	dev = sc->dev;
1232	mmc_acquire_bus(dev, dev);
1233
1234	if (mmcbr_get_power_mode(dev) == power_on)
1235		mmc_rescan_cards(sc);
1236	mmc_go_discovery(sc);
1237
1238	mmc_release_bus(dev, dev);
1239	/* XXX probe/attach/detach children? */
1240}
1241
1242static int
1243mmc_read_ivar(device_t bus, device_t child, int which, u_char *result)
1244{
1245	struct mmc_ivars *ivar = device_get_ivars(child);
1246
1247	switch (which) {
1248	default:
1249		return (EINVAL);
1250	case MMC_IVAR_DSR_IMP:
1251		*(int *)result = ivar->csd.dsr_imp;
1252		break;
1253	case MMC_IVAR_MEDIA_SIZE:
1254		*(off_t *)result = ivar->sec_count;
1255		break;
1256	case MMC_IVAR_RCA:
1257		*(int *)result = ivar->rca;
1258		break;
1259	case MMC_IVAR_SECTOR_SIZE:
1260		*(int *)result = MMC_SECTOR_SIZE;
1261		break;
1262	case MMC_IVAR_TRAN_SPEED:
1263		*(int *)result = mmcbr_get_clock(bus);
1264		break;
1265	case MMC_IVAR_READ_ONLY:
1266		*(int *)result = ivar->read_only;
1267		break;
1268	case MMC_IVAR_HIGH_CAP:
1269		*(int *)result = ivar->high_cap;
1270		break;
1271	case MMC_IVAR_CARD_TYPE:
1272		*(int *)result = ivar->mode;
1273		break;
1274	case MMC_IVAR_BUS_WIDTH:
1275		*(int *)result = ivar->bus_width;
1276		break;
1277	}
1278	return (0);
1279}
1280
1281static int
1282mmc_write_ivar(device_t bus, device_t child, int which, uintptr_t value)
1283{
1284	/*
1285	 * None are writable ATM
1286	 */
1287	return (EINVAL);
1288}
1289
1290
1291static void
1292mmc_delayed_attach(void *xsc)
1293{
1294	struct mmc_softc *sc = xsc;
1295
1296	mmc_scan(sc);
1297	config_intrhook_disestablish(&sc->config_intrhook);
1298}
1299
1300static device_method_t mmc_methods[] = {
1301	/* device_if */
1302	DEVMETHOD(device_probe, mmc_probe),
1303	DEVMETHOD(device_attach, mmc_attach),
1304	DEVMETHOD(device_detach, mmc_detach),
1305
1306	/* Bus interface */
1307	DEVMETHOD(bus_read_ivar, mmc_read_ivar),
1308	DEVMETHOD(bus_write_ivar, mmc_write_ivar),
1309
1310	/* MMC Bus interface */
1311	DEVMETHOD(mmcbus_wait_for_request, mmc_wait_for_request),
1312	DEVMETHOD(mmcbus_acquire_bus, mmc_acquire_bus),
1313	DEVMETHOD(mmcbus_release_bus, mmc_release_bus),
1314
1315	{0, 0},
1316};
1317
1318static driver_t mmc_driver = {
1319	"mmc",
1320	mmc_methods,
1321	sizeof(struct mmc_softc),
1322};
1323static devclass_t mmc_devclass;
1324
1325
1326DRIVER_MODULE(mmc, at91_mci, mmc_driver, mmc_devclass, 0, 0);
1327DRIVER_MODULE(mmc, sdhci, mmc_driver, mmc_devclass, 0, 0);
1328