svn commit: r326221 - in projects/powernv: conf kern powerpc/aim powerpc/booke powerpc/ofw powerpc/powerpc
Nathan Whitehorn
nwhitehorn at FreeBSD.org
Sun Nov 26 04:19:55 UTC 2017
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 <dev/ofw/openfirm.h>
#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
More information about the svn-src-projects
mailing list