
-----Original Message----- From: u-boot-bounces@lists.denx.de [mailto:u-boot-bounces@lists.denx.de] On Behalf Of Wolfgang Denk Sent: Tuesday, June 29, 2010 7:56 AM To: Joakim Tjernlund Cc: u-boot@lists.denx.de Subject: Re: [U-Boot] [PATCH] MPC512x: workaround data corruption forunaligned local bus accesses
Dear Joakim Tjernlund,
In message <OFEB4E68BC.F6B8C9D0-ONC1257751.0045AE08-C1257751.0045DA56@tra nsmode.se> you wrote:
I could not come up with a better name... What is "align32wrap" supposed to mean?
mpc5200_memcpy_fromio() resp. mpc5200_memcpy_toio()?
No. It's not only MPC5200, but also MPC521x. It's not I/O in general, but only I/O from the Local Bus. And even then only unaliged read access.
But memcpy_for_unaligned_read_from_local_bus() was too long for me, and memcpy_furflb() too cryptic ;-)
Best regards,
Wolfgang Denk
I just posted a patch on the linuxppc-dev list that simply uses a slightly modified version of memcpy to always keep the source address aligned. I had conditionals in that one so it only used it for MPC512x or MPC52xx but you should be able to replace the regular memcpy with this version. This way you can avoid the wrappers and extra checks. It is a simple enough change in that case:
diff --git a/arch/powerpc/lib/ppcstring.S b/arch/powerpc/lib/ppcstring.S index 97023a0..4e17265 100644 --- a/arch/powerpc/lib/ppcstring.S +++ b/arch/powerpc/lib/ppcstring.S @@ -114,7 +114,7 @@ memcpy: addi r6,r3,-4 addi r4,r4,-4 beq 2f /* if less than 8 bytes to do */ - andi. r0,r6,3 /* get dest word aligned */ + andi. r0,r4,3 /* get src word aligned */ mtctr r7 bne 5f 1: lwz r7,4(r4) @@ -125,6 +125,8 @@ memcpy: andi. r5,r5,7 2: cmplwi 0,r5,4 blt 3f + andi. r0,r4,3 + bne 3f lwzu r0,4(r4) addi r5,r5,-4 stwu r0,4(r6)