From owner-svn-src-projects@freebsd.org Sun Nov 26 04:19:55 2017 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 514BFDFC8E9 for ; Sun, 26 Nov 2017 04:19:55 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 2B51C7CDF3; Sun, 26 Nov 2017 04:19:55 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id vAQ4Js6X015800; Sun, 26 Nov 2017 04:19:54 GMT (envelope-from nwhitehorn@FreeBSD.org) Received: (from nwhitehorn@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id vAQ4JrVx015791; Sun, 26 Nov 2017 04:19:53 GMT (envelope-from nwhitehorn@FreeBSD.org) Message-Id: <201711260419.vAQ4JrVx015791@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: nwhitehorn set sender to nwhitehorn@FreeBSD.org using -f From: Nathan Whitehorn Date: Sun, 26 Nov 2017 04:19:53 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r326221 - in projects/powernv: conf kern powerpc/aim powerpc/booke powerpc/ofw powerpc/powerpc X-SVN-Group: projects X-SVN-Commit-Author: nwhitehorn X-SVN-Commit-Paths: in projects/powernv: conf kern powerpc/aim powerpc/booke powerpc/ofw powerpc/powerpc X-SVN-Commit-Revision: 326221 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.25 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 26 Nov 2017 04:19:55 -0000 Author: nwhitehorn Date: Sun Nov 26 04:19:53 2017 New Revision: 326221 URL: https://svnweb.freebsd.org/changeset/base/326221 Log: IFC @ r326220 Modified: projects/powernv/conf/kern.mk projects/powernv/kern/subr_pcpu.c projects/powernv/powerpc/aim/aim_machdep.c projects/powernv/powerpc/aim/locore32.S projects/powernv/powerpc/aim/locore64.S projects/powernv/powerpc/aim/mp_cpudep.c projects/powernv/powerpc/booke/booke_machdep.c projects/powernv/powerpc/ofw/ofw_machdep.c projects/powernv/powerpc/powerpc/machdep.c Directory Properties: projects/powernv/ (props changed) Modified: projects/powernv/conf/kern.mk ============================================================================== --- projects/powernv/conf/kern.mk Sun Nov 26 03:53:20 2017 (r326220) +++ projects/powernv/conf/kern.mk Sun Nov 26 04:19:53 2017 (r326221) @@ -181,6 +181,7 @@ CFLAGS.gcc+= -mabi=elfv2 .else CFLAGS.gcc+= -mcall-aixdesc .endif +CFLAGS.clang+= -mabi=elfv2 .endif # Modified: projects/powernv/kern/subr_pcpu.c ============================================================================== --- projects/powernv/kern/subr_pcpu.c Sun Nov 26 03:53:20 2017 (r326220) +++ projects/powernv/kern/subr_pcpu.c Sun Nov 26 04:19:53 2017 (r326221) @@ -280,7 +280,7 @@ struct pcpu * pcpu_find(u_int cpuid) { KASSERT(cpuid_to_pcpu[cpuid] != NULL, - ("Getting unitialized PCPU %d", cpuid)); + ("Getting uninitialized PCPU %d", cpuid)); return (cpuid_to_pcpu[cpuid]); } Modified: projects/powernv/powerpc/aim/aim_machdep.c ============================================================================== --- projects/powernv/powerpc/aim/aim_machdep.c Sun Nov 26 03:53:20 2017 (r326220) +++ projects/powernv/powerpc/aim/aim_machdep.c Sun Nov 26 04:19:53 2017 (r326221) @@ -130,7 +130,7 @@ __FBSDID("$FreeBSD$"); #include #ifdef __powerpc64__ -extern int n_slbs; +#include "mmu_oea64.h" #endif #ifndef __powerpc64__ Modified: projects/powernv/powerpc/aim/locore32.S ============================================================================== --- projects/powernv/powerpc/aim/locore32.S Sun Nov 26 03:53:20 2017 (r326220) +++ projects/powernv/powerpc/aim/locore32.S Sun Nov 26 04:19:53 2017 (r326221) @@ -79,13 +79,14 @@ __start: /* Set up temporary stack pointer */ lwz %r1,8(%r30) add %r1,%r1,%r30 - addi %r1,%r1,(8+TMPSTKSZ-32) + addi %r1,%r1,(8+TMPSTKSZ-40) /* Relocate self */ stw %r3,16(%r1) stw %r4,20(%r1) stw %r5,24(%r1) stw %r6,28(%r1) + stw %r7,32(%r1) lwz %r3,0(%r30) /* _DYNAMIC in %r3 */ add %r3,%r3,%r30 @@ -99,6 +100,7 @@ __start: lwz %r4,20(%r1) lwz %r5,24(%r1) lwz %r6,28(%r1) + lwz %r7,32(%r1) /* MD setup */ bl powerpc_init Modified: projects/powernv/powerpc/aim/locore64.S ============================================================================== --- projects/powernv/powerpc/aim/locore64.S Sun Nov 26 03:53:20 2017 (r326220) +++ projects/powernv/powerpc/aim/locore64.S Sun Nov 26 04:19:53 2017 (r326221) @@ -73,6 +73,7 @@ btext: * r4: ignored * r5: OF client interface pointer (or zero) * r6: Loader metadata pointer (or zero) + * r7: Magic cookie (0xfb5d104d) to indicate that r6 has loader metadata */ .text ASENTRY_NOPROF(__start) @@ -108,6 +109,8 @@ ASENTRY_NOPROF(__start) std %r4,56(%r1) std %r5,64(%r1) std %r6,72(%r1) + std %r7,80(%r1) + bl 1f .llong _DYNAMIC-. 1: mflr %r3 @@ -120,6 +123,7 @@ ASENTRY_NOPROF(__start) ld %r4,56(%r1) ld %r5,64(%r1) ld %r6,72(%r1) + ld %r7,80(%r1) /* Begin CPU init */ mr %r4,%r2 /* Replace ignored r4 with tocbase for trap handlers */ Modified: projects/powernv/powerpc/aim/mp_cpudep.c ============================================================================== --- projects/powernv/powerpc/aim/mp_cpudep.c Sun Nov 26 03:53:20 2017 (r326220) +++ projects/powernv/powerpc/aim/mp_cpudep.c Sun Nov 26 04:19:53 2017 (r326221) @@ -378,8 +378,10 @@ cpudep_ap_setup() case IBMPOWER7PLUS: case IBMPOWER8: case IBMPOWER8E: +#ifdef __powerpc64__ if (mfmsr() & PSL_HV) mtspr(SPR_LPCR, mfspr(SPR_LPCR) | LPCR_LPES); +#endif break; default: #ifdef __powerpc64__ Modified: projects/powernv/powerpc/booke/booke_machdep.c ============================================================================== --- projects/powernv/powerpc/booke/booke_machdep.c Sun Nov 26 03:53:20 2017 (r326220) +++ projects/powernv/powerpc/booke/booke_machdep.c Sun Nov 26 04:19:53 2017 (r326221) @@ -200,7 +200,8 @@ extern void *int_performance_counter; ("Handler " #handler " too far from interrupt vector base")); \ mtspr(ivor, (uintptr_t)(&handler) & 0xffffUL); -uintptr_t powerpc_init(vm_offset_t fdt, vm_offset_t, vm_offset_t, void *mdp); +uintptr_t powerpc_init(vm_offset_t fdt, vm_offset_t, vm_offset_t, void *mdp, + vm_offset_t mdp_cookie); void booke_cpu_init(void); void @@ -346,7 +347,11 @@ booke_init(u_long arg1, u_long arg2) break; } - ret = powerpc_init(dtbp, 0, 0, mdp); + /* + * Last element is a magic cookie that indicates that the metadata + * pointer is meaningful. + */ + ret = powerpc_init(dtbp, 0, 0, mdp, (mdp == NULL) ? 0 : 0xfb5d104d); /* Enable caches */ booke_enable_l1_cache(); Modified: projects/powernv/powerpc/ofw/ofw_machdep.c ============================================================================== --- projects/powernv/powerpc/ofw/ofw_machdep.c Sun Nov 26 03:53:20 2017 (r326220) +++ projects/powernv/powerpc/ofw/ofw_machdep.c Sun Nov 26 04:19:53 2017 (r326221) @@ -243,7 +243,7 @@ excise_fdt_reserved(struct mem_region *avail, int asz) ("Exceeded number of FDT reservations")); /* Add a virtual entry for the FDT itself */ if (fdt != NULL) { - fdtmap[j].address = (uint64_t)fdt & ~PAGE_MASK; + fdtmap[j].address = (vm_offset_t)fdt & ~PAGE_MASK; fdtmap[j].size = round_page(fdt_totalsize(fdt)); fdtmapsize += sizeof(fdtmap[0]); } @@ -530,11 +530,16 @@ openfirmware(void *args) return (-1); #ifdef SMP - rv_args.args = args; - rv_args.in_progress = 1; - smp_rendezvous(smp_no_rendezvous_barrier, ofw_rendezvous_dispatch, - smp_no_rendezvous_barrier, &rv_args); - result = rv_args.retval; + if (cold) { + result = openfirmware_core(args); + } else { + rv_args.args = args; + rv_args.in_progress = 1; + smp_rendezvous(smp_no_rendezvous_barrier, + ofw_rendezvous_dispatch, smp_no_rendezvous_barrier, + &rv_args); + result = rv_args.retval; + } #else result = openfirmware_core(args); #endif Modified: projects/powernv/powerpc/powerpc/machdep.c ============================================================================== --- projects/powernv/powerpc/powerpc/machdep.c Sun Nov 26 03:53:20 2017 (r326220) +++ projects/powernv/powerpc/powerpc/machdep.c Sun Nov 26 04:19:53 2017 (r326221) @@ -154,7 +154,8 @@ SYSINIT(cpu, SI_SUB_CPU, SI_ORDER_FIRST, cpu_startup, SYSCTL_INT(_machdep, CPU_CACHELINE, cacheline_size, CTLFLAG_RD, &cacheline_size, 0, ""); -uintptr_t powerpc_init(vm_offset_t, vm_offset_t, vm_offset_t, void *); +uintptr_t powerpc_init(vm_offset_t, vm_offset_t, vm_offset_t, void *, + vm_offset_t); long Maxmem = 0; long realmem = 0; @@ -232,13 +233,14 @@ void aim_cpu_init(vm_offset_t toc); void booke_cpu_init(void); uintptr_t -powerpc_init(vm_offset_t fdt, vm_offset_t toc, vm_offset_t ofentry, void *mdp) +powerpc_init(vm_offset_t fdt, vm_offset_t toc, vm_offset_t ofentry, void *mdp, + vm_offset_t mdp_cookie) { struct pcpu *pc; struct cpuref bsp; vm_offset_t startkernel, endkernel; void *kmdp; - char *env; + char *env; bool ofw_bootargs = false; #ifdef DDB vm_offset_t ksym_start; @@ -251,8 +253,11 @@ powerpc_init(vm_offset_t fdt, vm_offset_t toc, vm_offs startkernel = __startkernel; endkernel = __endkernel; - /* Check for ePAPR loader, which puts a magic value into r6 */ - if (mdp == (void *)0x65504150) + /* + * If the metadata pointer cookie is not set to the magic value, + * the number in mdp should be treated as nonsense. + */ + if (mdp_cookie != 0xfb5d104d) mdp = NULL; #ifdef AIM @@ -321,13 +326,11 @@ powerpc_init(vm_offset_t fdt, vm_offset_t toc, vm_offs /* * Init mutexes, which we use heavily in PMAP */ - mutex_init(); /* * Install the OF client interface */ - OF_bootstrap(); if (ofw_bootargs) @@ -338,19 +341,6 @@ powerpc_init(vm_offset_t fdt, vm_offset_t toc, vm_offs */ cninit(); - /* - * Complain if there is no metadata. - */ - if (mdp == NULL || kmdp == NULL) { - printf("powerpc_init: no loader metadata.\n"); - } - - /* - * Init KDB - */ - - kdb_init(); - #ifdef AIM aim_cpu_init(toc); #else /* BOOKE */ @@ -367,7 +357,8 @@ powerpc_init(vm_offset_t fdt, vm_offset_t toc, vm_offs platform_probe_and_attach(); /* - * Set up per-cpu data. + * Set up per-cpu data for the BSP now that the platform can tell + * us which that is. */ if (platform_smp_get_bsp(&bsp) != 0) bsp.cr_cpuid = 0; @@ -379,6 +370,11 @@ powerpc_init(vm_offset_t fdt, vm_offset_t toc, vm_offs pc->pc_hwref = bsp.cr_hwref; pc->pc_pir = mfspr(SPR_PIR); __asm __volatile("mtsprg 0, %0" :: "r"(pc)); + + /* + * Init KDB + */ + kdb_init(); /* * Bring up MMU