Accessing flash directly from User Space [SOLVED]
Michael Buesch
mb at bu3sch.de
Sun Nov 1 03:42:54 EST 2009
On Saturday 31 October 2009 14:26:48 Joakim Tjernlund wrote:
> >
> > > On Friday 30 October 2009 16:08:55 Alessandro Rubini wrote:
> > > > > asm("eieio; sync");
> > > >
> > > > Hmm...
> > > > : : : "memory"
> > > >
> > > > And, doesn't ";" start a comment in assembly? (no, not on powerpc
> > > it seems)
> > >
> > > Yes, I think the barrier is wrong.
> > > Please try with
> > >
> > > #define mb() __asm__ __volatile__("eieio\n sync\n" : : :
> > > "memory")
> >
> > That definition worked great. I must have missed the : : : "memory" bit when
> > I was digging through code.
> >
> > Thanks, that gives me about a 2x speedup over the msync() calls.
>
> Exactly when should you use the barrier? At every access,
> every read or when changing from write to read?
Well, it depends on the device you are accessing. I'll give you a small pseudo example.
mmio[0] = address;
mmio[1] = data;
mb();
mmio[3] |= 0x01; /* This triggers an operation -> address=data */
/* probably also need an mb() here, if the following code
* depends on the operation to be triggered. */
--
Greetings, Michael.
More information about the Linuxppc-dev
mailing list