svn commit: r334230 - head/sys/powerpc/aim
Justin Hibbits
jhibbits at FreeBSD.org
Sat May 26 00:41:51 UTC 2018
Author: jhibbits
Date: Sat May 26 00:41:50 2018
New Revision: 334230
URL: https://svnweb.freebsd.org/changeset/base/334230
Log:
Only crop the VPN on POWER4 and derivatives for TLBIE operations
Summary:
PowerISA 2.03 and later require bits 14:65 in the RB register argument,
which is the full value of the vpn argument post-shift. Only POWER4, POWER4+,
and PPC970* need the upper 16 bits cropped.
With this change FreeBSD can boot to multi-user on POWER9.
Reviewed by: nwhitehorn
Differential Revision: https://reviews.freebsd.org/D15581
Modified:
head/sys/powerpc/aim/moea64_native.c
Modified: head/sys/powerpc/aim/moea64_native.c
==============================================================================
--- head/sys/powerpc/aim/moea64_native.c Fri May 25 23:18:06 2018 (r334229)
+++ head/sys/powerpc/aim/moea64_native.c Sat May 26 00:41:50 2018 (r334230)
@@ -133,6 +133,8 @@ __FBSDID("$FreeBSD$");
/* POWER9 only permits a 64k partition table size. */
#define PART_SIZE 0x10000
+static int moea64_crop_tlbie;
+
static __inline void
TLBIE(uint64_t vpn) {
#ifndef __powerpc64__
@@ -144,12 +146,14 @@ TLBIE(uint64_t vpn) {
static volatile u_int tlbie_lock = 0;
vpn <<= ADDR_PIDX_SHFT;
- vpn &= ~(0xffffULL << 48);
/* Hobo spinlock: we need stronger guarantees than mutexes provide */
while (!atomic_cmpset_int(&tlbie_lock, 0, 1));
isync(); /* Flush instruction queue once lock acquired */
+ if (moea64_crop_tlbie)
+ vpn &= ~(0xffffULL << 48);
+
#ifdef __powerpc64__
__asm __volatile("tlbie %0" :: "r"(vpn) : "memory");
__asm __volatile("eieio; tlbsync; ptesync" ::: "memory");
@@ -428,6 +432,15 @@ moea64_bootstrap_native(mmu_t mmup, vm_offset_t kernel
moea64_early_bootstrap(mmup, kernelstart, kernelend);
+ switch (mfpvr() >> 16) {
+ case IBMPOWER4:
+ case IBMPOWER4PLUS:
+ case IBM970:
+ case IBM970FX:
+ case IBM970GX:
+ case IBM970MP:
+ moea64_crop_tlbie = true;
+ }
/*
* Allocate PTEG table.
*/
More information about the svn-src-all
mailing list