s3cmci: fix continual accesses to host->pio_ptr
authorben@fluff.org.uk <ben@fluff.org.uk>
Tue, 14 Oct 2008 23:17:18 +0000 (00:17 +0100)
committerPierre Ossman <drzeus@drzeus.cx>
Wed, 15 Oct 2008 16:05:48 +0000 (18:05 +0200)
commit18280fff663b8ba57e349a81b999604bc1106926
tree4b81883aacc8de3f4febb6aae51b03e81c1b3156
parent088a78af978d0c8e339071a9b2bca1f4cb368f30
s3cmci: fix continual accesses to host->pio_ptr

The s3cmci driver uses the host->pio_ptr field to
point to the current position into the buffer for data
transfer. During the transfers it does the following:

while (fifo_words--)
*(host->pio_ptr++) = readl(from_ptr);

This is inefficent, as host->pio_ptr is not used in any
other part of the transfer but the compiler emits code
which does the following:

while (fifo_words--) {
u32 *ptr = host->pio_ptr;
*ptr = readl(from_ptr);
ptr++;
host->pio_ptr = ptr;
}

This is obviously a waste of a load and store each time
around the loop, which could be up to 16 times depending
on how much needs to be transfered.

Move the ptr accesses to outside the while loop so that
we do not end up reloading/re-writing the pointer.

Note, this seems to make the code 16 bytes larger.

Signed-off-by: Ben Dooks <ben-linux@fluff.org>
Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
drivers/mmc/host/s3cmci.c