From owner-svn-src-head@freebsd.org Sat Aug 22 07:27:08 2015 Return-Path: Delivered-To: svn-src-head@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 AEDD29BE627; Sat, 22 Aug 2015 07:27:08 +0000 (UTC) (envelope-from jhibbits@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::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 97C19139D; Sat, 22 Aug 2015 07:27:08 +0000 (UTC) (envelope-from jhibbits@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7M7R8j3049955; Sat, 22 Aug 2015 07:27:08 GMT (envelope-from jhibbits@FreeBSD.org) Received: (from jhibbits@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7M7R79J049949; Sat, 22 Aug 2015 07:27:07 GMT (envelope-from jhibbits@FreeBSD.org) Message-Id: <201508220727.t7M7R79J049949@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: jhibbits set sender to jhibbits@FreeBSD.org using -f From: Justin Hibbits Date: Sat, 22 Aug 2015 07:27:07 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r287015 - in head/sys/powerpc: booke include powerpc X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 22 Aug 2015 07:27:08 -0000 Author: jhibbits Date: Sat Aug 22 07:27:06 2015 New Revision: 287015 URL: https://svnweb.freebsd.org/changeset/base/287015 Log: Follow up to r287014 Missed these files, from the original diff. Sponsored by: Alex Perez/Inertial Computing Differential Revision: https://reviews.freebsd.org/D3027 Modified: head/sys/powerpc/booke/trap_subr.S head/sys/powerpc/include/_types.h head/sys/powerpc/include/pte.h head/sys/powerpc/include/tlb.h head/sys/powerpc/powerpc/uma_machdep.c Modified: head/sys/powerpc/booke/trap_subr.S ============================================================================== --- head/sys/powerpc/booke/trap_subr.S Sat Aug 22 07:20:03 2015 (r287014) +++ head/sys/powerpc/booke/trap_subr.S Sat Aug 22 07:27:06 2015 (r287015) @@ -697,8 +697,10 @@ tlb_fill_entry: /* Setup MAS3 value in r23. */ lwz %r23, PTE_RPN(%r25) /* get pte->rpn */ + rlwinm %r22, %r23, 12, 0, 20 /* extract MAS3 portion of RPN */ - rlwimi %r23, %r21, 24, 26, 31 /* insert protection bits from pte */ + rlwimi %r22, %r21, 24, 26, 31 /* insert protection bits from pte */ + rlwinm %r23, %r23, 12, 28, 31 /* MAS7 portion of RPN */ /* Load MAS registers. */ mtspr SPR_MAS0, %r29 @@ -707,7 +709,9 @@ tlb_fill_entry: isync mtspr SPR_MAS2, %r27 isync - mtspr SPR_MAS3, %r23 + mtspr SPR_MAS3, %r22 + isync + mtspr SPR_MAS7, %r23 isync tlbwe Modified: head/sys/powerpc/include/_types.h ============================================================================== --- head/sys/powerpc/include/_types.h Sat Aug 22 07:20:03 2015 (r287014) +++ head/sys/powerpc/include/_types.h Sat Aug 22 07:27:06 2015 (r287015) @@ -128,7 +128,11 @@ typedef __uint64_t __vm_size_t; #else typedef __uint32_t __u_register_t; typedef __uint32_t __vm_offset_t; +#ifdef BOOKE +typedef __uint64_t __vm_paddr_t; +#else typedef __uint32_t __vm_paddr_t; +#endif typedef __uint32_t __vm_size_t; #endif typedef __int64_t __vm_ooffset_t; Modified: head/sys/powerpc/include/pte.h ============================================================================== --- head/sys/powerpc/include/pte.h Sat Aug 22 07:20:03 2015 (r287014) +++ head/sys/powerpc/include/pte.h Sat Aug 22 07:27:06 2015 (r287015) @@ -207,10 +207,13 @@ typedef struct lpte lpte_t; /* * Page Table Entry definitions and macros. + * + * RPN need only be 32-bit because Book-E has 36-bit addresses, and the smallest + * page size is 4k (12-bit mask), so RPN can really fit into 24 bits. */ #ifndef LOCORE struct pte { - vm_paddr_t rpn; + vm_offset_t rpn; uint32_t flags; }; typedef struct pte pte_t; @@ -266,7 +269,9 @@ typedef struct pte pte_t; #define PTE_REFERENCED 0x04000000 /* Referenced */ /* Macro argument must of pte_t type. */ -#define PTE_PA(pte) ((pte)->rpn & ~PTE_PA_MASK) +#define PTE_PA_SHIFT 12 +#define PTE_RPN_FROM_PA(pa) ((pa) >> PTE_PA_SHIFT) +#define PTE_PA(pte) ((vm_paddr_t)((pte)->rpn) << PTE_PA_SHIFT) #define PTE_ISVALID(pte) ((pte)->flags & PTE_VALID) #define PTE_ISWIRED(pte) ((pte)->flags & PTE_WIRED) #define PTE_ISMANAGED(pte) ((pte)->flags & PTE_MANAGED) Modified: head/sys/powerpc/include/tlb.h ============================================================================== --- head/sys/powerpc/include/tlb.h Sat Aug 22 07:20:03 2015 (r287014) +++ head/sys/powerpc/include/tlb.h Sat Aug 22 07:27:06 2015 (r287015) @@ -106,6 +106,8 @@ #define MAS6_SPID0_SHIFT 16 #define MAS6_SAS 0x00000001 +#define MAS7_RPN 0x0000000F + #define MAS1_GETTID(mas1) (((mas1) & MAS1_TID_MASK) >> MAS1_TID_SHIFT) #define MAS2_TLB0_ENTRY_IDX_MASK 0x0007f000 @@ -132,6 +134,7 @@ typedef struct tlb_entry { uint32_t mas1; uint32_t mas2; uint32_t mas3; + uint32_t mas7; } tlb_entry_t; void tlb0_print_tlbentries(void); Modified: head/sys/powerpc/powerpc/uma_machdep.c ============================================================================== --- head/sys/powerpc/powerpc/uma_machdep.c Sat Aug 22 07:20:03 2015 (r287014) +++ head/sys/powerpc/powerpc/uma_machdep.c Sat Aug 22 07:27:06 2015 (r287015) @@ -53,6 +53,7 @@ void * uma_small_alloc(uma_zone_t zone, vm_size_t bytes, u_int8_t *flags, int wait) { void *va; + vm_paddr_t pa; vm_page_t m; int pflags; @@ -69,7 +70,13 @@ uma_small_alloc(uma_zone_t zone, vm_size break; } - va = (void *) VM_PAGE_TO_PHYS(m); + pa = VM_PAGE_TO_PHYS(m); + + /* On book-e sizeof(void *) < sizeof(vm_paddr_t) */ + if ((vm_offset_t)pa != pa) + return (NULL); + + va = (void *)(vm_offset_t)pa; if (!hw_direct_map) pmap_kenter((vm_offset_t)va, VM_PAGE_TO_PHYS(m));