Thread (10 messages) flat view 10 messages, 8 authors, 2011-06-15

Re: Relocatable kernel for ppc44x

From: Tirumala Marri <hidden>
Date: 2011-06-15 16:07:36

On Wed, Jun 15, 2011 at 7:40 AM, Suzuki Poulose [off-list ref] wrote:
On 06/15/11 15:41, Benjamin Herrenschmidt wrote:
quoted
On Wed, 2011-06-15 at 11:43 +0530, Suzuki Poulose wrote:
quoted
On 06/14/11 17:34, Michal Simek wrote:
quoted
Hi,

have someone tried to support RELOCATABLE kernel on ppc44x?
As Josh, mentioned, I will be working on this. In fact I was trying a
couple of
patches towards this on PPC440x. But, I am stuck in debugging the hang
that I am
experiencing with the changes. I am setting up a RISCWatch processor
probe to
debug the same.

Here is some information that I wanted to share :

The PPC440X currently uses 256M TLB entries to pin the lowmem. When we go
for a
relocatable kernel we have to :

1) Restrict the kernel load address to be 256M aligned
Wait a minute ... :-)

There's a difference between having the kernel run from any address and
mapping the linear mapping not starting at 0.

Those are completely orthogonal.

I don't see why off hand you are changing the way the TLB is used.
I started off with PHYSICAL_START support and that kind of hogged me into
this approach :-).

The
quoted
only possible change needed is to make sure the initial bolted entry set
by the asm code properly covers the kernel in whatever it's "current"
location is. The rest is a matter of fixing up the relocations...
Could we do something like,

If kernel is loaded at X,

1. map : ((X-1) & ~256M) to PAGE_OFFSET and so on to cover the kernel in
256M
chunks.
2. Then process the relocations with (X % 256M)

Thanks

[marri] I had to deal with kernel relocation to non-zero physical address.
I  hacked
few places to make this work. In my case there were holes(mutliple of 250MB)
in
the low-memory region.  To handle these memory holes I manipulated "lmb"
structure.

 I had to depend on the bootloader making sure that it is running from
non-zero
physical address and during linux boot it checks for the current TLB where
it is
running from and creates the same new TLB in linux. And everything else
should
take care of it.

--marri
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help