From owner-svn-src-projects@FreeBSD.ORG Sun Nov 6 19:05:42 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 98BF2106566B; Sun, 6 Nov 2011 19:05:42 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 88DE08FC12; Sun, 6 Nov 2011 19:05:42 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id pA6J5g5g037401; Sun, 6 Nov 2011 19:05:42 GMT (envelope-from nwhitehorn@svn.freebsd.org) Received: (from nwhitehorn@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id pA6J5g5N037399; Sun, 6 Nov 2011 19:05:42 GMT (envelope-from nwhitehorn@svn.freebsd.org) Message-Id: <201111061905.pA6J5g5N037399@svn.freebsd.org> From: Nathan Whitehorn Date: Sun, 6 Nov 2011 19:05:42 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r227263 - projects/pseries/powerpc/pseries X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 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, 06 Nov 2011 19:05:42 -0000 Author: nwhitehorn Date: Sun Nov 6 19:05:42 2011 New Revision: 227263 URL: http://svn.freebsd.org/changeset/base/227263 Log: Register a per-CPU virtual processor area with the hypervisor telling it not to do things behind our back. Modified: projects/pseries/powerpc/pseries/platform_chrp.c Modified: projects/pseries/powerpc/pseries/platform_chrp.c ============================================================================== --- projects/pseries/powerpc/pseries/platform_chrp.c Sun Nov 6 19:03:07 2011 (r227262) +++ projects/pseries/powerpc/pseries/platform_chrp.c Sun Nov 6 19:05:42 2011 (r227263) @@ -57,6 +57,10 @@ __FBSDID("$FreeBSD$"); extern void *ap_pcpu; #endif +#ifdef __powerpc64__ +static uint8_t splpar_vpa[640] __aligned(64); +#endif + static vm_offset_t realmaxaddr = VM_MAX_ADDRESS; static int chrp_probe(platform_t); @@ -131,8 +135,19 @@ chrp_attach(platform_t plat) pmap_mmu_install("mmu_phyp", BUS_PROBE_SPECIFIC); cpu_idle_hook = phyp_cpu_idle; - /* Set interrupt priority */ - phyp_hcall(H_CPPR, 0xff); + /* Set up important VPA fields */ + bzero(splpar_vpa, sizeof(splpar_vpa)); + splpar_vpa[4] = (uint8_t)((sizeof(splpar_vpa) >> 8) & 0xff); + splpar_vpa[5] = (uint8_t)(sizeof(splpar_vpa) & 0xff); + splpar_vpa[0xba] = 1; /* Maintain FPRs */ + splpar_vpa[0xbb] = 1; /* Maintain PMCs */ + splpar_vpa[0xfc] = 0xff; /* Maintain full SLB */ + splpar_vpa[0xfd] = 0xff; + splpar_vpa[0xff] = 1; /* Maintain Altivec */ + mb(); + + /* Set up hypervisor CPU stuff */ + chrp_smp_ap_init(plat); } #endif @@ -382,6 +397,9 @@ chrp_smp_ap_init(platform_t platform) if (!(mfmsr() & PSL_HV)) { /* Set interrupt priority */ phyp_hcall(H_CPPR, 0xff); + + /* Register VPA */ + phyp_hcall(H_REGISTER_VPA, 1UL, PCPU_GET(cpuid), splpar_vpa); } } #endif