Date: Sat, 16 Feb 2019 12:49:28 -0800 From: Mark Millard <marklmi@yahoo.com> To: Justin Hibbits <chmeeedalf@gmail.com> Cc: Mark Millard via freebsd-ppc <freebsd-ppc@freebsd.org> Subject: Re: Some evidence about the PowerMac G5 multiprocessor boot hang ups with the modern VM_MAX_KERNEL_ADDRESS value [found yet more staging info] Message-ID: <A800DDED-B1A1-4ACF-87B5-AFEA683F48F2@yahoo.com> In-Reply-To: <518C5B96-75C4-4C24-BDEE-68A542242CA3@yahoo.com> References: <11680D15-D43D-4115-AF4F-5F6E4E0022C9@yahoo.com> <9FBCA729-CE80-44CD-8873-431853E55231@yahoo.com> <1F3411CF-3D28-43C0-BEF1-4672B5CC1543@yahoo.com> <20190215151710.35545a26@ralga.knownspace> <6445CE54-26AA-4E21-B17E-921D72D4081A@yahoo.com> <20190215160942.1b282f71@ralga.knownspace> <744610C7-90EB-42A0-8B08-AFA0F12E5994@yahoo.com> <20190215180421.61afcae3@ralga.knownspace> <C35575A8-6316-40CB-B6E7-B2FB7F438EA4@yahoo.com> <518C5B96-75C4-4C24-BDEE-68A542242CA3@yahoo.com>
next in thread | previous in thread | raw e-mail | index | archive | help
[I added to moea64_cpu_bootstrap_native to see more staging infomrtion.] On 2019-Feb-16, at 12:07, Mark Millard <marklmi at yahoo.com> wrote: > [I needed to allow more time after the 2 resets before > having CPU 0 look at the memory. It was reporting > older values instead of my added writes. The odd > non-zero value was from before the activity of interest.] > > I start with the new result found, then give supporting > material. > > I've now seen hangs with: > > *(unsigned long*)0xc0000000000000f0)=0x10 > > for CPU 3. So the following completed: > > void > cpudep_ap_early_bootstrap(void) > { > #ifndef __powerpc64__ > register_t reg; > #endif > > switch (mfpvr() >> 16) { > case IBM970: > case IBM970FX: > case IBM970MP: > /* Restore HID4 and HID5, which are necessary for the MMU */ > > #ifdef __powerpc64__ > mtspr(SPR_HID4, bsp_state[2]); powerpc_sync(); isync(); > mtspr(SPR_HID5, bsp_state[3]); powerpc_sync(); isync(); > #else > __asm __volatile("ld %0, 16(%2); sync; isync; \ > mtspr %1, %0; sync; isync;" > : "=r"(reg) : "K"(SPR_HID4), "b"(bsp_state)); > __asm __volatile("ld %0, 24(%2); sync; isync; \ > mtspr %1, %0; sync; isync;" > : "=r"(reg) : "K"(SPR_HID5), "b"(bsp_state)); > #endif > powerpc_sync(); > break; > case IBMPOWER8: > case IBMPOWER8E: > case IBMPOWER9: > #ifdef __powerpc64__ > if (mfmsr() & PSL_HV) { > isync(); > /* > * Direct interrupts to SRR instead of HSRR and > * reset LPCR otherwise > */ > mtspr(SPR_LPID, 0); > isync(); > > mtspr(SPR_LPCR, lpcr); > isync(); > } > #endif > break; > } > > __asm __volatile("mtsprg 0, %0" :: "r"(ap_pcpu)); > powerpc_sync(); > > *(unsigned long*)0xc0000000000000f0 = 0x10; // HACK!!! > powerpc_sync(); // HACK!!! > } > > but the following (and later) did not complete: > > void > pmap_cpu_bootstrap(int ap) > { > /* > * No KTR here because our console probably doesn't work yet > */ > > return (MMU_CPU_BOOTSTRAP(mmu_obj, ap)); > > *(unsigned long*)0xc0000000000000f0 = 0x20; // HACK!!! > powerpc_sync(); // HACK!!! > } > > > . . . The below additions lead to moea64_cpu_bootstrap_native lead to: *(unsigned long*)0xc0000000000000f0)=0x25 which indicates that moea64_cpu_bootstrap_native got to its end but pmap_cpu_bootstrap (the caller via MMU_CPU_BOOTSTRAP) did not record its: *(unsigned long*)0xc0000000000000f0 = 0x20; from after the call. moea64_cpu_bootstrap_native (and MMU_CPU_BOOTRAP) seems to have trouble returning to pmap_cpu_bootstrap. The below // HACK!!! lines are what I added: static void moea64_cpu_bootstrap_native(mmu_t mmup, int ap) { int i = 0; #ifdef __powerpc64__ struct slb *slb = PCPU_GET(aim.slb); register_t seg0; #endif /* * Initialize segment registers and MMU */ mtmsr(mfmsr() & ~PSL_DR & ~PSL_IR); *(unsigned long*)0xc0000000000000f0 = 0x21; // HACK!!! powerpc_sync(); // HACK!!! /* * Install kernel SLB entries */ #ifdef __powerpc64__ __asm __volatile ("slbia"); __asm __volatile ("slbmfee %0,%1; slbie %0;" : "=r"(seg0) : "r"(0)); *(unsigned long*)0xc0000000000000f0 = 0x22; // HACK!!! powerpc_sync(); // HACK!!! for (i = 0; i < n_slbs; i++) { if (!(slb[i].slbe & SLBE_VALID)) continue; __asm __volatile ("slbmte %0, %1" :: "r"(slb[i].slbv), "r"(slb[i].slbe)); } *(unsigned long*)0xc0000000000000f0 = 0x23; // HACK!!! powerpc_sync(); // HACK!!! #else for (i = 0; i < 16; i++) mtsrin(i << ADDR_SR_SHFT, kernel_pmap->pm_sr[i]); #endif /* * Install page table */ __asm __volatile ("ptesync; mtsdr1 %0; isync" :: "r"(((uintptr_t)moea64_pteg_table & ~DMAP_BASE_ADDRESS) | (uintptr_t)(flsl(moea64_pteg_mask >> 11)))); *(unsigned long*)0xc0000000000000f0 = 0x24; // HACK!!! powerpc_sync(); // HACK!!! tlbia(); *(unsigned long*)0xc0000000000000f0 = 0x25; // HACK!!! powerpc_sync(); // HACK!!! } === Mark Millard marklmi at yahoo.com ( dsl-only.net went away in early 2018-Mar)
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?A800DDED-B1A1-4ACF-87B5-AFEA683F48F2>