Re: Current kernel with http://gnats.netbsd.org/39965 and pmap patches

"T. Makinen" <[email protected]>
Newsgroups gmane.os.netbsd.ports.atari
Message-ID <[email protected]>
On Tue, Dec 30, 2008 at 6:53 PM, Izumi Tsutsui <[email protected]> wrote:
> Okay, with a quick glance, reloc operation for options RELOC_KERNEL
> is done after all necessary bootstrap STEs and PTEs are initialized,
> so we have to carefully use the following three types of addresses
> in the start_c() function:
>
> (1) physicall address before relocation
>  This should be used to fetch global variables in start_c()
>  before relocation (including page table addresses initialized
>  during bootstrap).
>
> (2) physicall address after relocation
>  This should be used for physical address pointers
>  which will be used after MMU is enabled.
>  (including PA values stored into STEs and PTEs)
>
> (3) kernel virtual address
>  This should be used for virtual address pointers
>  which will be used after MMU is enabled, and
>  for virtual address to calculate STE/PTE indexes during bootstrap.
>
> On the other hand, (1) and (3) have the same values
> (at least in kernel text/data/bss) and some variables
> used in start_c() have both meanings.
> It actually confuses readers...
>
> I've cleaned up various variables in atari_init.c (attached)
> (BTW that means it's no longer sync'ed with amiga ;-p).

That's good :) Amiga uses also independent variables for vstart and pstart;
I think that atari_init.c is now clearer.

> Summary of changes are:
>
> - use independent variables for (1) and (3) (pstart and vstart etc.)
>  even if they have the same values (since they have different meanings)
>
> - only global Sysseg_pa and Sysptmap_pa belong (2),
>  so initialize them as (1) first and
>  use explicit address reloc conversion for PTE and STE values,
>  then update these global variables as (2)
>  after all bootstrap initialization is complete
>
> - make mmu0[34]0_setup() (and cpu_init_kcorehdr()) take
>  Sysseg_pa (before relocation) as an arg, to avoid reference of
>  global Sysseg_pa (it could be changed at some point as noted above)
>
> - use properly variable types (st_entry_t, pt_entry_t etc) for readability
>  (XXX: we should also use paddr_t/vaddr_t/psize_t/vsize_t properly)
>
> - don't map Sysptmap and kernel page tables with PG_CI
>  but only do so for Sysseg on 040/060
>  (amiga pmap seems to have the same bug, though
>   those KVA ranges seem used only for debug printfs)
>
> - misc style nits
>
> ...I'm afraid I'd put various botches, though.
> (it's really hard to implement without real hardware ;-)
>
> I've also put new kernels with this change:
> http://www.ceres.dti.ne.jp/~tsutsui/netbsd/netbsd-ATARITT-HEAD-20081230.gz
> http://www.ceres.dti.ne.jp/~tsutsui/netbsd/netbsd-BOOT-HEAD-20081230.gz
> http://www.ceres.dti.ne.jp/~tsutsui/netbsd/netbsd-FALCON-HEAD-20081230.gz

Great work! I tested FALCON kernel and I can now boot with RELOC_KERNEL (and
with 68060 :). However I can't test RELOC_KERNEL with 68030 because 68060
accelerator has TT-RAM.

Thanks!

-Tuomo
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.