PERFORCE change 106918 for review
Warner Losh
imp at FreeBSD.org
Fri Sep 29 15:31:07 PDT 2006
http://perforce.freebsd.org/chv.cgi?CH=106918
Change 106918 by imp at imp_lighthouse on 2006/09/29 22:30:13
After sending CMD55, make sure we get a R1_APP_CMD bit set in
the reply (not cleared).
set bus mode push-pull for sd detection (linux doesn't do this,
but the boot blocks do and work)
Re-add ocr check
Debugging changes
Affected files ...
.. //depot/projects/arm/src/sys/dev/mmc/mmc.c#10 edit
Differences ...
==== //depot/projects/arm/src/sys/dev/mmc/mmc.c#10 (text+ko) ====
@@ -183,6 +183,7 @@
cmd->retries = retries;
cmd->data = NULL;
mreq.cmd = cmd;
+ printf("CMD: %x ARG %x\n", cmd->opcode, cmd->arg);
mmc_wait_for_req(sc, &mreq);
return (cmd->error);
}
@@ -202,7 +203,7 @@
err = appcmd.error;
if (err != MMC_ERR_NONE)
continue;
- if (appcmd.resp[0] & R1_APP_CMD)
+ if (!(appcmd.resp[0] & R1_APP_CMD))
return MMC_ERR_FAILED;
mmc_wait_for_cmd(sc, cmd, 0);
err = cmd->error;
@@ -247,9 +248,8 @@
cmd.arg = ocr;
cmd.flags = MMC_RSP_R3 | MMC_CMD_BCR;
- for (i = 0; i < 100; i++) {
+ for (i = 0; i < 10; i++) {
err = mmc_wait_for_app_cmd(sc, 0, &cmd, CMD_RETRIES);
- printf("err is %x busy is %x\n", err, cmd.resp[0]);
if (err != MMC_ERR_NONE)
break;
if ((cmd.resp[0] & MMC_OCR_CARD_BUSY) || ocr == 0)
@@ -259,7 +259,6 @@
}
if (rocr && err == MMC_ERR_NONE)
*rocr = cmd.resp[0];
- printf("app op sayz %x\n", cmd.resp[0]);
return err;
}
@@ -309,6 +308,7 @@
mmc_ms_delay(2);
}
+#if 0
static void
mmc_decode_cid(int is_sd, uint32_t *raw_cid, struct mmc_cid *cid)
{
@@ -354,6 +354,7 @@
panic("Write a MMC CSD parser");
}
}
+#endif
static void
mmc_discover_cards(struct mmc_softc *sc)
@@ -404,6 +405,7 @@
// First, try SD modes
mmcbr_set_mode(dev, mode_sd);
mmc_power_up(sc);
+ mmcbr_set_bus_mode(dev, pushpull);
mmc_idle_cards(sc);
if (mmc_send_app_op_cond(sc, 0, &ocr) != MMC_ERR_NONE) {
// Failed, try MMC
@@ -426,8 +428,8 @@
* one card on the bus.
*/
printf("Oink %x!\n", mmcbr_get_ocr(dev));
-// if (mmcbr_get_ocr(dev) == 0)
-// return;
+ if (mmcbr_get_ocr(dev) == 0)
+ return;
/* XXX Linux re-sends op_cond command here */
mmc_discover_cards(sc);
More information about the p4-projects
mailing list