Re: Current kernel with http://gnats.netbsd.org/39965 and pmap patches
Izumi Tsutsui <[email protected]>
| Newsgroups | gmane.os.netbsd.ports.atari |
|---|---|
| Message-ID | <[email protected]> |
[email protected] wrote: > Thanks! I missed that one. I applied patch (but corrected place for minus sign > for VM_MAX_KERNEL_ADDRESS just like in amiga/include/vmparam.h :)) > > Installer panics just like before with 030 cpu, but it works with 060 cpu, so it > seems there's something funny happening with 030 that we need to sort out. I don't understand what XXX calculations in amiga_init.c do and how they map PA of Sysmap (Sysptmap_pa) into VM_MAX_KERNEL_ADDRESS in mmu040_setup() case... (it's a bit different from other m68k ports) But in mmu030_setup(), I don't think we can use the same way to map Sysptmap_pa at the end of KVA with other m68k ports which have 4KB page (i.e. PS/TIA/TIB == 12/10/10) because amiga and atari have 8KB page (PS/TIA/TIB == 13/8/11) and hardware segment table and software Sysptmap have different size. (but I could be wrong since I'm not an m68k guru ;-) --- --- atari/atari_init.c.0 2008-12-17 19:12:51.000000000 +0900 +++ atari/atari_init.c 2008-12-17 23:47:19.000000000 +0900 @@ -918,7 +918,7 @@ u_int sysptmap_pa; /* System page table */ u_int kbase; { - st_entry_t sg_proto, *sg; + st_entry_t sg_proto, *sg, *esg; pt_entry_t pg_proto, *pg, *epg; /* @@ -938,14 +938,20 @@ } /* - * invalidate the remainder of the tables + * Invalidate the remainder of the tables. */ - /* XXX PAGE_SIZE dependent constant: 256 or 1024 */ - epg = (u_int *)(sysptmap_pa + (256 - 1) * sizeof(st_entry_t)); - while(pg < epg) { +#define TIA_SIZE 256 + esg = (u_int *)(sysptmap_pa + (TIA_SIZE - 1) * sizeof(st_entry_t)); + while (sg < esg) *sg++ = SG_NV; + + epg = (u_int *)(sysptmap_pa + (NPTEPG - 1) * sizeof(st_entry_t)); + while (pg < epg) *pg++ = PG_NV; - } + + /* + * Initialize the last one to point Sysptmap. + */ *sg = sysptmap_pa | SG_RW | SG_V; *pg = sysptmap_pa | PG_RW | PG_CI | PG_V; } --- Izumi Tsutsui