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