Mount root from SD card?(solved!)

M. Warner Losh imp at bsdimp.com
Thu Jan 22 08:30:03 PST 2009


In message: <497896F3.9030908 at bulinfo.net>
            Krassimir Slavchev <krassi at bulinfo.net> writes:
: Index: at91_mci.c
: ===================================================================
: --- at91_mci.c	(revision 187590)
: +++ at91_mci.c	(working copy)
: @@ -199,7 +199,7 @@
:  		goto out;
:  	}
:  	sc->host.f_min = 375000;
: -	sc->host.f_max = at91_master_clock / 2;	/* Typically 30MHz */
: +	sc->host.f_max = AT91C_MASTER_CLOCK / 2;	/* Typically 30MHz */
:  	sc->host.host_ocr = MMC_OCR_320_330 | MMC_OCR_330_340;
:  	if (sc->wire4)
:  		sc->host.caps = MMC_CAP_4_BIT_DATA;

This change is wrong.

: @@ -399,8 +399,8 @@
:  	WR4(sc, MCI_ARGR, cmd->arg);
:  	if (cmdr & MCI_CMDR_TRCMD_START) {
:  		if (cmdr & MCI_CMDR_TRDIR) {
: +			WR4(sc, MCI_CMDR, cmdr);
:  			WR4(sc, PDC_PTCR, PDC_PTCR_RXTEN);
: -			WR4(sc, MCI_CMDR, cmdr);

This change is also wrong.  It won't work.  Also, why test the
direction at all if we're just going to do the same thing in both legs
of the branch?  When I was developing the code, I originally had the
'send a command and then enable PDC' logic.  It didn't work for the
read case, so now we enable the reader and then send the command.  We
do this based on the logic that it is OK to have the PDC enabled when
there's no data transfer going, but if we send the command, then take
an interrupt before we can enable the PDC, we'd lose data.  And that
seemed to happen a lot.

There's lots of races in programming this chip :(

:  		} else {
:  			WR4(sc, MCI_CMDR, cmdr);
:  			WR4(sc, PDC_PTCR, PDC_PTCR_TXTEN);


Warner


More information about the freebsd-arm mailing list