mmap on 440gx
Matt Porter
mporter at kernel.crashing.org
Fri Jun 17 17:24:30 EST 2005
On Fri, Jun 17, 2005 at 01:42:07AM -0400, Ed Goforth wrote:
> On 6/17/05, Matt Porter <mporter at kernel.crashing.org> wrote:
> > On Thu, Jun 16, 2005 at 11:47:22PM -0400, Ed Goforth wrote:
> > > On 6/16/05, Matt Porter <mporter at kernel.crashing.org> wrote:
> > > > On Thu, Jun 16, 2005 at 05:33:44PM -0400, Ed Goforth wrote:
> > >
> > > Thanks for taking the time to reply.
> > >
> > > > > I've been struggling with implementing mmap on a 440gx-based custom
> > > > > board. I have been able to use ioremap(), but we really need a mmap()
> > > > > for our software. The kernel is 2.4.18 (TimeSys 4.0).
> > > >
> >
> >
> > > For what it's worth, __pa(0x5000_0000) returns 0x9000_0000.
> >
> > Sure, you just asked it to subtract KERNELBASE from a physical address.
> > Don't use __pa() in drivers. That's expected behavior. Why are
> > you doing that?
>
> Desperation.
Heh, I like that. :)
<snip>
> > Put some debug statements throughout fixup_bigphys_addr() to see
> > what's going on.
>
> My include/asm/mmu.h has it defined as:
> #ifndef CONFIG_440
> #include <asm-generic/mmu.h>
> #else
> typedef unsigned long long phys_addr_t;
> #define fixup_bigphys_addr(addr, size) (addr)
> #endif
>
> I see that in later 2.4 kernels and in mainline 2.6 it is implemented
> as an actual working routine. Perhaps that explains it all. The
> ioremap() in my tree implements the fixup code inline, which would
> explain why it works, right?
It sure does. That code is 100% wrong. Just merge in mainline 2.4
stuff and you should be golden.
-Matt
More information about the Linuxppc-embedded
mailing list