PERFORCE change 107239 for review
Warner Losh
imp at FreeBSD.org
Tue Oct 3 22:37:39 PDT 2006
http://perforce.freebsd.org/chv.cgi?CH=107239
Change 107239 by imp at imp_lighthouse on 2006/10/04 05:36:42
Don't need a stop command for the simple case of reading a single
block. This reduces the number of round trips (commands) by 16 for
a 8k transfer. We're down from 34 to 16, or a 53% savings.
Multi-block will be the next big win, where we can go all the way
down to 2 (start multi-block ... stop at the end).
Since we went from 200kB/s to 220kB/s when I doubled the transfer
speed, this tells me that 80% of the time isn't affected by the
transfer. I hope that the 53% savings will cut the 80% down to 40%
which should result in bootsting the speed to something like 400kB/s.
We'll see tomorrow if this actually is the case or not. This
is a 4 to 1 overhead still. And it is 10x slower than the max
transfer rate based solely on clock speed (3.75MB/s). This large
factor makes me think that some part of this analysis is flawed.
It can't be too fast to do the byte-swapping after the transfers
either.
4 bit bus will also help, once I've implemented it, but so long as
the non-data portion of the transfers dominates so much, it does
little good for the overall numbers. I might be able to get it up
to 500k/s by enabling 4-bit bus. This is still well short of
the 15MB/s that the clock rate suggests these cards top out
at. I'd imagine that multi-block would be a big win...
Affected files ...
.. //depot/projects/arm/src/sys/dev/mmc/mmcsd.c#9 edit
Differences ...
==== //depot/projects/arm/src/sys/dev/mmc/mmcsd.c#9 (text+ko) ====
@@ -173,7 +173,7 @@
memset(&stop, 0, sizeof(stop));
req.cmd = &cmd;
cmd.data = &data;
- req.stop = &stop;
+// req.stop = &stop;
if (bp->bio_cmd == BIO_READ)
cmd.opcode = MMC_READ_SINGLE_BLOCK;
else
@@ -189,9 +189,9 @@
data.flags = MMC_DATA_READ;
else
data.flags = MMC_DATA_WRITE;
- stop.opcode = MMC_STOP_TRANSMISSION;
- stop.arg = 0;
- stop.flags = MMC_RSP_R1B | MMC_CMD_AC;
+// stop.opcode = MMC_STOP_TRANSMISSION;
+// stop.arg = 0;
+// stop.flags = MMC_RSP_R1B | MMC_CMD_AC;
MMCBUS_WAIT_FOR_REQUEST(device_get_parent(dev), dev,
&req);
// XXX error handling
More information about the p4-projects
mailing list