Since nobody else is replying I am giving it a shot. Hope it helps.
On Tue, Dec 21, 2004 at 09:53:07AM +0100, moreau francis wrote:
> Hi,
>
> Well, I'm still trying to port Linux on my "exotic"
> board...
> I hope you don't mind if I ask a couple of questions,
> which may be stupid for you but usefull at my level.
> If you think that linux-mips mailing list is not
> intended for these kind of questions, tell me !
>
> So here I am:
>
> I've mapped kernel code and kernel data in different
> memories in order to save precious SDRAM memory.
>
> Code 0xC0000000 0x30000000 16Mo FLASH
> Data 0xC1000000 0x20000000 8Mo SDRAM
>
> When running the kernel at the very begining, I
> encounter different issues:
>
> In "tlb_init" function, cp0 WIRED register is set to
> zero, therefore the call to "local_flush_tlb_all"
> flush all TLB entries which were mapping my kernel
> in the 3 first entries. Why is this necessary ?
Setting WIRED to zero is just part of kernel start-up initialization.
In 2.4 it is done before board setup routine, which allows board
to setup certain wired mapping.
In 2.6 it is done after board setup routine. You are screwed. :) I think
this needs to be fixed. A couple of boards should be broken because of this.
> In different part of the kernel it is assumed that the
> kernel start at physical addr 0. For instance in
> "init_bootmem" fonction, argument start is set to 0.
> Or the way to calculate a page frame index in mem_map
> array. Why this assumption ?
>
Because all other boards have phys memory starting from 0? It
simplies code for sure.
> Why does "mem_map" need to store page frames for
> kernel
> code ?
mem_map holds kernel page table. Kernel code is mapped there because
we start from 0 and we need to use the free memory _after_ kernel code
segment. (I don't think it is very useful for MIPS though, since MIPS uses
a flat 512MB block mapping for kernel virtual address.)
> Are these pages going be used when the Linux is
> running ?
Not much in MIPS case I suppose.
> I noticed CPHYSADDR macro. This macro only works if
> PAGE_OFFSET is equal to 0x80000000. Why does this
> macro exist ? Why not using __pa macro ?
Don't know much about this one.
BTW, once there was a board whose memory starts from 0x90000000. It had
similar problems as yours, but I think it ran in the end. Try to search
the mailing list.
Jun
|