Skip site navigation (1)Skip section navigation (2)
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>