ARM: Fix for 'Memset above 4GB' Causing Huge Slow Down

Verified as follows:

  l. Write 'x' from 4 to 6GB.
  2. Verify 'x' is written
  3. let wipe_unused_memset clean 4 to 6GB
  4. Verify zero is written from 4 to 6GB

As added as a comment, using writeback runs about 4 times as fast as
writethrough (196 v.s. 925ms). Since dcache and memory are verified to be synced
(without explicit dcache clean instructions), we choose writeback.

TEST=Booted nyan_big.
BUG=chrome-os-partner:25587
BRANCH=None
Signed-off-by: Daisuke Nojiri <dnojiri@chromium.org>
Tested-by: Daisuke Nojiri <dnojiri@chromium.org>

Change-Id: Ie3f130b95fef1166a9be976ef0064f61362edcea
Reviewed-on: https://chromium-review.googlesource.com/189480
Reviewed-by: Julius Werner <jwerner@chromium.org>
Commit-Queue: Daisuke Nojiri <dnojiri@chromium.org>
Tested-by: Daisuke Nojiri <dnojiri@chromium.org>
diff --git a/src/arch/arm/physmem.c b/src/arch/arm/physmem.c
index 73f3358..d2bfae8 100644
--- a/src/arch/arm/physmem.c
+++ b/src/arch/arm/physmem.c
@@ -62,7 +62,8 @@
 	do {
 		void *buf;
 		int len = MIN(size, 2*MiB);
-		buf = lpae_map_phys_addr(start, DCACHE_WRITETHROUGH);
+		/* writeback is ~4 times as fast as writethrough on T124 */
+		buf = lpae_map_phys_addr(start / MiB, DCACHE_WRITEBACK);
 		memset(buf, c, len);
 		start += len;
 		size -= len;