Mount root from SD card?

M. Warner Losh imp at bsdimp.com
Tue Jan 20 11:33:16 PST 2009


In message: <20090120.122312.1543793985.imp at bsdimp.com>
            "M. Warner Losh" <imp at bsdimp.com> writes:
: : IMHO it is incorrect to disable 4bit mode on that stage, it is too late 
: : there. It should be done at controller capabilities announcement stage. 
: : If you are not objecting, I would remove that wire4 variable.
: 
: I am objecting.  The code is there so that the rest of the driver does
: the right thing when doing 4-bit.  It needs to be a capability too.
: 
: However, before we go monkeying with this, we need to find the
: underlying bug.

I've got the following patch, untested, that I think does what I think
needs to be done.  Not sure about the return value from update_ios...

Index: at91_mci.c
===================================================================
--- at91_mci.c	(revision 187479)
+++ at91_mci.c	(working copy)
@@ -201,7 +201,10 @@
 	sc->host.f_min = 375000;
 	sc->host.f_max = 30000000;
 	sc->host.host_ocr = MMC_OCR_320_330 | MMC_OCR_330_340;
-	sc->host.caps = MMC_CAP_4_BIT_DATA;
+	if (sc->wire4)
+		sc->host.caps = MMC_CAP_4_BIT_DATA;
+	else
+		sc->host.caps = 0;
 	child = device_add_child(dev, "mmc", 0);
 	device_set_ivars(dev, &sc->host);
 	err = bus_generic_attach(dev);
@@ -295,6 +298,8 @@
 			clkdiv = (at91_master_clock / ios->clock) / 2;
 	}
 	if (ios->bus_width == bus_width_4 && sc->wire4)
+		return EINVAL;
+	if (ios->bus_width == bus_width_4)
 		WR4(sc, MCI_SDCR, RD4(sc, MCI_SDCR) | MCI_SDCR_SDCBUS);
 	else
 		WR4(sc, MCI_SDCR, RD4(sc, MCI_SDCR) & ~MCI_SDCR_SDCBUS);



Warner


More information about the freebsd-arm mailing list