Module Name: src Committed By: thorpej Date: Thu Mar 11 04:43:47 UTC 2021
Modified Files: src/sys/arch/powerpc/oea: pmap.c Log Message: Tidy up initialization of the kernel SRs just a bit. To generate a diff of this commit: cvs rdiff -u -r1.102 -r1.103 src/sys/arch/powerpc/oea/pmap.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/powerpc/oea/pmap.c diff -u src/sys/arch/powerpc/oea/pmap.c:1.102 src/sys/arch/powerpc/oea/pmap.c:1.103 --- src/sys/arch/powerpc/oea/pmap.c:1.102 Wed Mar 10 18:29:07 2021 +++ src/sys/arch/powerpc/oea/pmap.c Thu Mar 11 04:43:47 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.c,v 1.102 2021/03/10 18:29:07 thorpej Exp $ */ +/* $NetBSD: pmap.c,v 1.103 2021/03/11 04:43:47 thorpej Exp $ */ /*- * Copyright (c) 2001 The NetBSD Foundation, Inc. * All rights reserved. @@ -63,7 +63,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.102 2021/03/10 18:29:07 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.103 2021/03/11 04:43:47 thorpej Exp $"); #define PMAP_NOOPNAMES @@ -3378,17 +3378,10 @@ pmap_bootstrap1(paddr_t kernelstart, pad pmap_vsid_bitmap[0] |= 1; /* - * Initialize kernel pmap and hardware. + * Initialize kernel pmap. */ - -/* PMAP_OEA64_BRIDGE does support these instructions */ -#if defined (PMAP_OEA) || defined (PMAP_OEA64_BRIDGE) +#if defined(PMAP_OEA) || defined(PMAP_OEA64_BRIDGE) for (i = 0; i < 16; i++) { -#if defined(PPC_OEA601) - /* XXX wedges for segment register 0xf , so set later */ - if ((iosrtable[i] & SR601_T) && ((MFPVR() >> 16) == MPC601)) - continue; -#endif pmap_kernel()->pm_sr[i] = KERNELN_SEGMENT(i)|SR_PRKEY; } pmap_kernel()->pm_vsid = KERNEL_VSIDBITS; @@ -3398,13 +3391,16 @@ pmap_bootstrap1(paddr_t kernelstart, pad pmap_kernel()->pm_sr[KERNEL2_SR] = KERNEL2_SEGMENT|SR_SUKEY|SR_PRKEY; #endif #endif /* PMAP_OEA || PMAP_OEA64_BRIDGE */ -#if defined (PMAP_OEA) - for (i = 0; i < 16; i++) { - if (iosrtable[i] & SR601_T) { - pmap_kernel()->pm_sr[i] = iosrtable[i]; + +#if defined(PMAP_OEA) && defined(PPC_OEA601) + if ((MFPVR() >> 16) == MPC601)) { + for (i = 0; i < 16; i++) { + if (iosrtable[i] & SR601_T) { + pmap_kernel()->pm_sr[i] = iosrtable[i]; + } } } -#endif +#endif /* PMAP_OEA && PPC_OEA601 */ #ifdef ALTIVEC pmap_use_altivec = cpu_altivec; @@ -3500,9 +3496,9 @@ pmap_bootstrap1(paddr_t kernelstart, pad pmap_pte_create(&pt, pm, va, pa | PTE_M|PTE_BW); pmap_pte_insert(ptegidx, &pt); } -#endif +#endif /* PMAP_NEED_FULL_MAPKERNEL */ } -#endif +#endif /* PMAP_NEED_MAPKERNEL */ } /* @@ -3512,23 +3508,18 @@ pmap_bootstrap1(paddr_t kernelstart, pad void pmap_bootstrap2(void) { -/* PMAP_OEA64_BRIDGE does support these instructions */ -#if defined (PMAP_OEA) || defined (PMAP_OEA64_BRIDGE) +#if defined(PMAP_OEA) || defined(PMAP_OEA64_BRIDGE) for (int i = 0; i < 16; i++) { -#if defined(PPC_OEA601) - /* XXX wedges for segment register 0xf , so set later */ - if ((iosrtable[i] & SR601_T) && ((MFPVR() >> 16) == MPC601)) - continue; -#endif /* PPC_OEA601 */ __asm volatile("mtsrin %0,%1" :: "r"(pmap_kernel()->pm_sr[i]), "r"(i << ADDR_SR_SHFT)); } #endif /* PMAP_OEA || PMAP_OEA64_BRIDGE */ -#if defined (PMAP_OEA) + +#if defined(PMAP_OEA) __asm volatile("sync; mtsdr1 %0; isync" :: "r"((uintptr_t)pmap_pteg_table | (pmap_pteg_mask >> 10))); -#elif defined (PMAP_OEA64) || defined (PMAP_OEA64_BRIDGE) +#elif defined(PMAP_OEA64) || defined(PMAP_OEA64_BRIDGE) __asm __volatile("sync; mtsdr1 %0; isync" :: "r"((uintptr_t)pmap_pteg_table | (32 - __builtin_clz(pmap_pteg_mask >> 11)))); @@ -3536,7 +3527,7 @@ pmap_bootstrap2(void) tlbia(); #if defined(PMAPDEBUG) - if ( pmapdebug ) + if (pmapdebug) pmap_print_mmuregs(); #endif }