linux-mips
[Top] [All Lists]

RE: LOADADDR and low physical addresses?

To: "Jun Sun" <jsun@mvista.com>
Subject: RE: LOADADDR and low physical addresses?
From: "Matthew Dharm" <mdharm@momenco.com>
Date: Fri, 6 Sep 2002 14:13:08 -0700
Cc: "Linux-MIPS" <linux-mips@linux-mips.org>
Importance: Normal
In-reply-to: <20020906135324.D1382@mvista.com>
Original-recipient: rfc822;linux-mips@linux-mips.org
Sender: linux-mips-bounce@linux-mips.org
Yes, the having two devices at the same physical address might be a
problem, but one I _might_ be able to work around.  Not only do I have
a large bank of SDRAM, but I also have a small bank of on-chip SRAM.

So I'm thinking that the map will go (starting from 0) like this:
on-chip SRAM, control registers, main memory

And this is where I think the add_memory_region() magic might need to
happen.  Do I need to add the on-chip SRAM and control registers using
add_memory_region()?  Is it going to be okay to have a large and
mis-aligned bank of SDRAM?

Questions abound.  Needless to say, I'm going to have some choice
words with the chip designers over this...

Matt

--
Matthew D. Dharm                            Senior Software Designer
Momentum Computer Inc.                      1815 Aston Ave.  Suite 107
(760) 431-8663 X-115                        Carlsbad, CA 92008-7310
Momentum Works For You                      www.momenco.com

> -----Original Message-----
> From: Jun Sun [mailto:jsun@mvista.com]
> Sent: Friday, September 06, 2002 1:53 PM
> To: Matthew Dharm
> Cc: Linux-MIPS; jsun@mvista.com
> Subject: Re: LOADADDR and low physical addresses?
>
>
> On Fri, Sep 06, 2002 at 01:04:28PM -0700, Matthew Dharm wrote:
> > So, I've got an interesting problem... which has forced
> me to look at
> > the use of the LOADADDR variable in the Makefile, and try
> (quickly) to
> > brush up on my linker scripting...
> >
> > Basically I've got a processor with on-chip registers
> that need to be
> > located in the first 512MByte of _physical_ address.  To
> make things
> > difficult, they cannot be re-located once placed (configuration is
> > done by a hardware config stream at reset).  It's only 16KBytes of
> > address, but since I recall that linux on mips can't
> (well, probably
> > can't) handle discontiguous memory maps (we discussed this about a
> > year ago, I think), I was looking for a good place to put them.
> >
> > Now, I think my problems are solved if the LOADADDR
> variable works the
> > way I think it does -- that the kernel loads at that
> address, and only
> > uses memory from that point upwards.  So, if my LOADADDR is
> > 0x80100000, then the first 0x100000 won't get used.  Of
> course, the
> > exception vectors are there, but that doesn't take up
> that much space.
> > So there should be a chunk of address space I can use for other
> > things, like this register bank.
> >
> > Yes? No?  Is my understanding even close?
> >
>
> That is right.
>
> The only catch is that if you make LOADADDR very high (as
> in the case
> system ram starts at a high address), the kernel page
> table will be very high too.  It starts from phys address 0.
>
> Also if you map your control registers at near-zero phy
> address, don't you
> also have system RAM there too?  Normally it is not ok to have two
> devices decoded at the same phys address.
>
> > P.S. Of course, if this is right, then I need to figure out the
> > proper/best way to use the add_memory_region() function....
>
> Unless I misunderstand something here, I don't think you need
> to mess with add_memory_region().
>
> Jun
>


<Prev in Thread] Current Thread [Next in Thread>