[PATCH] arch/powerpc/lib/copy_32.S: Use alternate memcpy for MPC512x and MPC52xx
Grant Likely
grant.likely at secretlab.ca
Fri Jul 9 01:22:03 EST 2010
On Thu, Jul 8, 2010 at 8:38 AM, Steve Deiters <SteveDeiters at basler.com> wrote:
>> -----Original Message-----
>> From: glikely at secretlab.ca [mailto:glikely at secretlab.ca] On
>> Behalf Of Grant Likely
>> Sent: Thursday, July 08, 2010 12:38 AM
>> To: Benjamin Herrenschmidt
>> Cc: Steve Deiters; linuxppc-dev at lists.ozlabs.org
>> Subject: Re: [PATCH] arch/powerpc/lib/copy_32.S: Use
>> alternate memcpy for MPC512x and MPC52xx
>>
>> On Wed, Jul 7, 2010 at 11:10 PM, Benjamin Herrenschmidt
>> <benh at kernel.crashing.org> wrote:
>> > On Tue, 2010-06-29 at 11:04 -0500, Steve Deiters wrote:
>> >> These processors will corrupt data if accessing the local bus with
>> >> unaligned addresses. This version fixes the typical case
>> of copying
>> >> from Flash on the local bus by keeping the source address always
>> >> aligned.
>> >
>> > Shouldn't this be solved by using memcpy_to/fromio ?
>>
>> Maybe. plain memcpy() access to anything localbus-attached
>> on the mpc5xxx is the wrong thing to do. memcpy_to/fromio
>> might do the right thing; but the caller must understand the
>> limitations of the localplus bus. The byte-wise alignment
>> that memcpy_to/fromio() does may not work (depending on
>> configuration).
>>
>> Steve, what code is doing a memcpy from flash?
>>
>> g.
>
> This was done in the JFFS2 code, in fs/jffs2/scan.c. At least in one
> function, in jffs2_scan_dirent_node it was using memcpy on a localbus
> mapped structure. I was getting JFFS2 filesystem corruption because of
> this. In fact I first tried changing this to memcpy_fromio and it fixed
> that particular problem. I was concerned though that other places I was
> not aware of might be using memcpy from the localbus in a similar manner
> so I decided to just tweak the memcpy routine.
[cc'ing David Woodhouse]
Sounds to me like the right thing to do is to fix the jffs2 code.
> Just out of curiousity, what configuration might cause a byte-wise
> alignment not to work?
Can't remember the register configuration, but I worked on one project
where this was the case. In hindsight, it was probably a
mis-configuration of the localbus CS for the particular device.
g.
--
Grant Likely, B.Sc., P.Eng.
Secret Lab Technologies Ltd.
More information about the Linuxppc-dev
mailing list