CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: rin Date: Sat Mar 6 08:34:58 UTC 2021 Modified Files: src/sys/arch/powerpc/powerpc: locore_subr.S Log Message: For ibm4xx and booke, restore saved PSL_EE bit as done for oea, instead of forcibly enabling interrupts. To generate a diff of this commit: cvs rdiff -u -r1.64 -r1.65 src/sys/arch/powerpc/powerpc/locore_subr.S Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/locore_subr.S diff -u src/sys/arch/powerpc/powerpc/locore_subr.S:1.64 src/sys/arch/powerpc/powerpc/locore_subr.S:1.65 --- src/sys/arch/powerpc/powerpc/locore_subr.S:1.64 Sat Mar 6 08:08:19 2021 +++ src/sys/arch/powerpc/powerpc/locore_subr.S Sat Mar 6 08:34:58 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: locore_subr.S,v 1.64 2021/03/06 08:08:19 rin Exp $ */ +/* $NetBSD: locore_subr.S,v 1.65 2021/03/06 08:34:58 rin Exp $ */ /* * Copyright (c) 2001 Wasabi Systems, Inc. @@ -401,7 +401,7 @@ _ENTRY(softint_fast_dispatch) addi %r1, %r5, USPACE - FRAMELEN - CALLFRAMELEN #if defined(PPC_IBM4XX) || defined(PPC_BOOKE) - wrteei 1 /* interrupts are okay again */ + wrtee %r29 /* interrupts are okay again */ #else /* PPC_OEA */ mtmsr %r29 #endif
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: rin Date: Sat Mar 6 08:32:17 UTC 2021 Modified Files: src/sys/arch/powerpc/powerpc: powerpc_machdep.c Log Message: Convert to KASSERTMSG(9) to display wrong IPL. To generate a diff of this commit: cvs rdiff -u -r1.81 -r1.82 src/sys/arch/powerpc/powerpc/powerpc_machdep.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/powerpc_machdep.c diff -u src/sys/arch/powerpc/powerpc/powerpc_machdep.c:1.81 src/sys/arch/powerpc/powerpc/powerpc_machdep.c:1.82 --- src/sys/arch/powerpc/powerpc/powerpc_machdep.c:1.81 Sat Mar 6 08:08:19 2021 +++ src/sys/arch/powerpc/powerpc/powerpc_machdep.c Sat Mar 6 08:32:17 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: powerpc_machdep.c,v 1.81 2021/03/06 08:08:19 rin Exp $ */ +/* $NetBSD: powerpc_machdep.c,v 1.82 2021/03/06 08:32:17 rin Exp $ */ /* * Copyright (C) 1995, 1996 Wolfgang Solfrank. @@ -32,7 +32,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: powerpc_machdep.c,v 1.81 2021/03/06 08:08:19 rin Exp $"); +__KERNEL_RCSID(0, "$NetBSD: powerpc_machdep.c,v 1.82 2021/03/06 08:32:17 rin Exp $"); #ifdef _KERNEL_OPT #include "opt_altivec.h" @@ -381,7 +381,8 @@ void cpu_idle(void) { KASSERT(mfmsr() & PSL_EE); - KASSERT(curcpu()->ci_cpl == IPL_NONE); + KASSERTMSG(curcpu()->ci_cpl == IPL_NONE, + "ci_cpl = %d", curcpu()->ci_cpl); (*curcpu()->ci_idlespin)(); }
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: thorpej Date: Sat Feb 20 01:57:54 UTC 2021 Modified Files: src/sys/arch/powerpc/powerpc: ofw_machdep.c Log Message: Query real-mode? at startup and cache the result. To generate a diff of this commit: cvs rdiff -u -r1.28 -r1.29 src/sys/arch/powerpc/powerpc/ofw_machdep.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/ofw_machdep.c diff -u src/sys/arch/powerpc/powerpc/ofw_machdep.c:1.28 src/sys/arch/powerpc/powerpc/ofw_machdep.c:1.29 --- src/sys/arch/powerpc/powerpc/ofw_machdep.c:1.28 Fri Feb 19 05:21:39 2021 +++ src/sys/arch/powerpc/powerpc/ofw_machdep.c Sat Feb 20 01:57:54 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: ofw_machdep.c,v 1.28 2021/02/19 05:21:39 thorpej Exp $ */ +/* $NetBSD: ofw_machdep.c,v 1.29 2021/02/20 01:57:54 thorpej Exp $ */ /*- * Copyright (c) 2007, 2021 The NetBSD Foundation, Inc. @@ -61,7 +61,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: ofw_machdep.c,v 1.28 2021/02/19 05:21:39 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ofw_machdep.c,v 1.29 2021/02/20 01:57:54 thorpej Exp $"); #include #include @@ -91,6 +91,8 @@ __KERNEL_RCSID(0, "$NetBSD: ofw_machdep. int ofw_root; int ofw_chosen; +bool ofw_real_mode; + /* * Bootstrap console support functions. */ @@ -411,6 +413,21 @@ ofw_bootstrap_get_translations(void) } } +static bool +ofw_option_truefalse(const char *prop, int proplen) +{ + /* These are all supposed to be strings. */ + switch (prop[0]) { + case 'y': + case 'Y': + case 't': + case 'T': + case '1': + return true; + } + return false; +} + /* * Called from ofwinit() very early in bootstrap. We are still * running on the stack provided by OpenFirmware and in the same @@ -421,6 +438,9 @@ ofw_bootstrap_get_translations(void) void ofw_bootstrap(void) { + char prop[32]; + int handle, proplen; + /* Stash the handles for "/" and "/chosen" for convenience later. */ ofw_root = OF_finddevice("/"); ofw_chosen = OF_finddevice("/chosen"); @@ -428,6 +448,19 @@ ofw_bootstrap(void) /* Initialize the early bootstrap console. */ ofw_bootstrap_console(); + /* Check to see if we're running in real-mode. */ + handle = OF_finddevice("/options"); + if (handle != -1) { + proplen = OF_getprop(handle, "real-mode?", prop, sizeof(prop)); + if (proplen > 0) { + ofw_real_mode = ofw_option_truefalse(prop, proplen); + } else { + ofw_real_mode = false; + } + } + aprint_normal("OpenFirmware running in %s-mode\n", + ofw_real_mode ? "real" : "virtual"); + /* Get #address-cells and #size-cells to fething memory info. */ if (OF_getprop(ofw_root, "#address-cells", _address_cells, sizeof(ofw_address_cells)) <= 0)
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: thorpej Date: Fri Feb 5 00:06:12 UTC 2021 Modified Files: src/sys/arch/powerpc/powerpc: openfirm.c Log Message: s/bootspec/bstr/g to avoid shadowing a global. To generate a diff of this commit: cvs rdiff -u -r1.31 -r1.32 src/sys/arch/powerpc/powerpc/openfirm.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/openfirm.c diff -u src/sys/arch/powerpc/powerpc/openfirm.c:1.31 src/sys/arch/powerpc/powerpc/openfirm.c:1.32 --- src/sys/arch/powerpc/powerpc/openfirm.c:1.31 Mon Jul 6 09:34:18 2020 +++ src/sys/arch/powerpc/powerpc/openfirm.c Fri Feb 5 00:06:11 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: openfirm.c,v 1.31 2020/07/06 09:34:18 rin Exp $ */ +/* $NetBSD: openfirm.c,v 1.32 2021/02/05 00:06:11 thorpej Exp $ */ /* * Copyright (C) 1995, 1996 Wolfgang Solfrank. @@ -32,7 +32,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: openfirm.c,v 1.31 2020/07/06 09:34:18 rin Exp $"); +__KERNEL_RCSID(0, "$NetBSD: openfirm.c,v 1.32 2021/02/05 00:06:11 thorpej Exp $"); #ifdef _KERNEL_OPT #include "opt_multiprocessor.h" @@ -603,7 +603,7 @@ OF_start_cpu(int phandle, u_int pc, int #endif void -OF_boot(const char *bootspec) +OF_boot(const char *bstr) { static struct { const char *name; @@ -617,10 +617,10 @@ OF_boot(const char *bootspec) }; int l; - if ((l = strlen(bootspec)) >= PAGE_SIZE) + if ((l = strlen(bstr)) >= PAGE_SIZE) panic("OF_boot"); ofw_stack(); - ofbcopy(bootspec, OF_buf, l + 1); + ofbcopy(bstr, OF_buf, l + 1); args.bootspec = OF_buf; openfirmware(); panic("OF_boot didn't");
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: thorpej Date: Wed Jan 27 03:17:24 UTC 2021 Modified Files: src/sys/arch/powerpc/powerpc: ofw_machdep.c Log Message: There is not much point in of_compatible() returning -1 for "no match" and >= 0 for "match". Just make it return 0 for "no match" and >0 for "match" so it can be treated like a boolean expression. To generate a diff of this commit: cvs rdiff -u -r1.25 -r1.26 src/sys/arch/powerpc/powerpc/ofw_machdep.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/ofw_machdep.c diff -u src/sys/arch/powerpc/powerpc/ofw_machdep.c:1.25 src/sys/arch/powerpc/powerpc/ofw_machdep.c:1.26 --- src/sys/arch/powerpc/powerpc/ofw_machdep.c:1.25 Fri Feb 28 05:44:39 2014 +++ src/sys/arch/powerpc/powerpc/ofw_machdep.c Wed Jan 27 03:17:24 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: ofw_machdep.c,v 1.25 2014/02/28 05:44:39 matt Exp $ */ +/* $NetBSD: ofw_machdep.c,v 1.26 2021/01/27 03:17:24 thorpej Exp $ */ /* * Copyright (C) 1996 Wolfgang Solfrank. @@ -32,7 +32,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: ofw_machdep.c,v 1.25 2014/02/28 05:44:39 matt Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ofw_machdep.c,v 1.26 2021/01/27 03:17:24 thorpej Exp $"); #include #include @@ -151,7 +151,7 @@ mem_regions(struct mem_region **memp, st * according to comments in FreeBSD all Apple OF has 32bit values in * "available", no matter what the cell sizes are */ - if (of_compatible(hroot, macrisc) != -1) { + if (of_compatible(hroot, macrisc)) { DPRINTF("this appears to be a mac...\n"); acells = 1; scells = 1;
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: martin Date: Thu Oct 15 18:57:16 UTC 2020 Modified Files: src/sys/arch/powerpc/powerpc: process_machdep.c Log Message: Add missing 'error' declaration To generate a diff of this commit: cvs rdiff -u -r1.40 -r1.41 src/sys/arch/powerpc/powerpc/process_machdep.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/process_machdep.c diff -u src/sys/arch/powerpc/powerpc/process_machdep.c:1.40 src/sys/arch/powerpc/powerpc/process_machdep.c:1.41 --- src/sys/arch/powerpc/powerpc/process_machdep.c:1.40 Thu Oct 15 17:37:36 2020 +++ src/sys/arch/powerpc/powerpc/process_machdep.c Thu Oct 15 18:57:16 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: process_machdep.c,v 1.40 2020/10/15 17:37:36 mgorny Exp $ */ +/* $NetBSD: process_machdep.c,v 1.41 2020/10/15 18:57:16 martin Exp $ */ /* * Copyright (C) 1995, 1996 Wolfgang Solfrank. @@ -32,7 +32,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: process_machdep.c,v 1.40 2020/10/15 17:37:36 mgorny Exp $"); +__KERNEL_RCSID(0, "$NetBSD: process_machdep.c,v 1.41 2020/10/15 18:57:16 martin Exp $"); #ifdef _KERNEL_OPT #include "opt_altivec.h" @@ -193,7 +193,7 @@ ptrace_machdep_dorequest(struct lwp *l, { struct uio uio; struct iovec iov; - int write = 0; + int write = 0, error; switch (req) { case PT_SETVECREGS:
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: rin Date: Wed Jul 15 07:58:26 UTC 2020 Modified Files: src/sys/arch/powerpc/powerpc: trap.c Log Message: Rename emulated_opcode() to emulate_privileged() for clarity. No functional changes. To generate a diff of this commit: cvs rdiff -u -r1.161 -r1.162 src/sys/arch/powerpc/powerpc/trap.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/trap.c diff -u src/sys/arch/powerpc/powerpc/trap.c:1.161 src/sys/arch/powerpc/powerpc/trap.c:1.162 --- src/sys/arch/powerpc/powerpc/trap.c:1.161 Mon Jul 6 11:24:57 2020 +++ src/sys/arch/powerpc/powerpc/trap.c Wed Jul 15 07:58:26 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: trap.c,v 1.161 2020/07/06 11:24:57 rin Exp $ */ +/* $NetBSD: trap.c,v 1.162 2020/07/15 07:58:26 rin Exp $ */ /* * Copyright (C) 1995, 1996 Wolfgang Solfrank. @@ -35,7 +35,7 @@ #define __UCAS_PRIVATE #include -__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.161 2020/07/06 11:24:57 rin Exp $"); +__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.162 2020/07/15 07:58:26 rin Exp $"); #ifdef _KERNEL_OPT #include "opt_altivec.h" @@ -69,7 +69,7 @@ __KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.1 #include #include -static int emulated_opcode(struct lwp *, struct trapframe *); +static int emulate_privileged(struct lwp *, struct trapframe *); static int fix_unaligned(struct lwp *, struct trapframe *); static inline vaddr_t setusr(vaddr_t, size_t *); static inline void unsetusr(void); @@ -435,7 +435,7 @@ vm_signal: ksi.ksi_signo = SIGFPE; ksi.ksi_code = fpu_get_fault_code(); } else if (tf->tf_srr1 & 0x4) { -if (emulated_opcode(l, tf)) { +if (emulate_privileged(l, tf)) { tf->tf_srr0 += 4; break; } @@ -1076,8 +1076,8 @@ fix_unaligned(struct lwp *l, struct trap return -1; } -int -emulated_opcode(struct lwp *l, struct trapframe *tf) +static int +emulate_privileged(struct lwp *l, struct trapframe *tf) { uint32_t opcode;
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: rin Date: Sun Jul 12 21:18:01 UTC 2020 Modified Files: src/sys/arch/powerpc/powerpc: trap_subr.S Log Message: No need to work around for IBM405 Errata 77; ibm4xx does not use this file. To generate a diff of this commit: cvs rdiff -u -r1.83 -r1.84 src/sys/arch/powerpc/powerpc/trap_subr.S Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/trap_subr.S diff -u src/sys/arch/powerpc/powerpc/trap_subr.S:1.83 src/sys/arch/powerpc/powerpc/trap_subr.S:1.84 --- src/sys/arch/powerpc/powerpc/trap_subr.S:1.83 Mon Jul 6 11:09:15 2020 +++ src/sys/arch/powerpc/powerpc/trap_subr.S Sun Jul 12 21:18:01 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: trap_subr.S,v 1.83 2020/07/06 11:09:15 rin Exp $ */ +/* $NetBSD: trap_subr.S,v 1.84 2020/07/12 21:18:01 rin Exp $ */ /* * Copyright (C) 1995, 1996 Wolfgang Solfrank. @@ -321,7 +321,6 @@ dsitrap_fix_dbat7: ldreg %r30,(CI_DISISAVE+CPUSAVE_R30)(%r1) /* restore r30 */ ldreg %r31,(CI_DISISAVE+CPUSAVE_R31)(%r1) /* restore r31 */ mfsprg1 %r1 - IBM405_ERRATA77_SYNC RFI/* return to trapped code */ 1: #endif /* !PPC_MPC8XX */ @@ -394,7 +393,6 @@ _C_LABEL(dsi601trap): ldreg %r30,(CI_DISISAVE+CPUSAVE_R30)(%r1) /* restore r30 */ ldreg %r31,(CI_DISISAVE+CPUSAVE_R31)(%r1) /* restore r31 */ mfsprg1 %r1 - IBM405_ERRATA77_SYNC RFI/* return to trapped code */ 1: mflr %r28 /* save LR */ @@ -511,7 +509,6 @@ _C_LABEL(tlbimiss): srwi %r1,%r1,8 /* get byte 7 of pte */ tlbli %r0 /* load the itlb */ stb %r1,6(%r2) /* update page table */ - IBM405_ERRATA77_SYNC RFI 3: /* not found in pteg */ @@ -571,7 +568,6 @@ _C_LABEL(tlbdlmiss): srwi %r1,%r1,8 /* get byte 7 of pte */ tlbld %r0 /* load the dtlb */ stb %r1,6(%r2) /* update page table */ - IBM405_ERRATA77_SYNC RFI 3: /* not found in pteg */ @@ -628,7 +624,6 @@ _C_LABEL(tlbdsmiss): mtcrf 0x80,%r3 /* and restore */ mtspr SPR_RPA,%r1 /* set the pte */ tlbld %r0 /* load the dtlb */ - IBM405_ERRATA77_SYNC RFI 3: /* not found in pteg */ @@ -1002,7 +997,6 @@ trapleave: FRAME_RESTORE_CALLEE intrleave: FRAME_LEAVE(CI_TEMPSAVE) - IBM405_ERRATA77_SYNC RFI /* @@ -1226,7 +1220,6 @@ ddbtrap: beq trapagain FRAME_RESTORE_CALLEE FRAME_LEAVE(CI_DDBSAVE) - IBM405_ERRATA77_SYNC RFI #endif /* DDB || KGDB */
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: rin Date: Mon Jul 6 11:24:57 UTC 2020 Modified Files: src/sys/arch/powerpc/powerpc: trap.c Log Message: Stop using DDBX which is defined nowhere. To generate a diff of this commit: cvs rdiff -u -r1.160 -r1.161 src/sys/arch/powerpc/powerpc/trap.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/trap.c diff -u src/sys/arch/powerpc/powerpc/trap.c:1.160 src/sys/arch/powerpc/powerpc/trap.c:1.161 --- src/sys/arch/powerpc/powerpc/trap.c:1.160 Mon Jul 6 11:23:59 2020 +++ src/sys/arch/powerpc/powerpc/trap.c Mon Jul 6 11:24:57 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: trap.c,v 1.160 2020/07/06 11:23:59 rin Exp $ */ +/* $NetBSD: trap.c,v 1.161 2020/07/06 11:24:57 rin Exp $ */ /* * Copyright (C) 1995, 1996 Wolfgang Solfrank. @@ -35,7 +35,7 @@ #define __UCAS_PRIVATE #include -__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.160 2020/07/06 11:23:59 rin Exp $"); +__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.161 2020/07/06 11:24:57 rin Exp $"); #ifdef _KERNEL_OPT #include "opt_altivec.h" @@ -486,7 +486,7 @@ vm_signal: default: printf("trap type %x at %lx\n", type, tf->tf_srr0); brain_damage2: -#ifdef DDBX +#if defined(DDB) && 0 /* XXX */ if (kdb_trap(type, tf)) return; #endif
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: rin Date: Mon Jul 6 11:23:59 UTC 2020 Modified Files: src/sys/arch/powerpc/powerpc: trap.c Log Message: This file is not used for ibm4xx. To generate a diff of this commit: cvs rdiff -u -r1.159 -r1.160 src/sys/arch/powerpc/powerpc/trap.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/trap.c diff -u src/sys/arch/powerpc/powerpc/trap.c:1.159 src/sys/arch/powerpc/powerpc/trap.c:1.160 --- src/sys/arch/powerpc/powerpc/trap.c:1.159 Mon Jul 6 11:08:21 2020 +++ src/sys/arch/powerpc/powerpc/trap.c Mon Jul 6 11:23:59 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: trap.c,v 1.159 2020/07/06 11:08:21 rin Exp $ */ +/* $NetBSD: trap.c,v 1.160 2020/07/06 11:23:59 rin Exp $ */ /* * Copyright (C) 1995, 1996 Wolfgang Solfrank. @@ -35,7 +35,7 @@ #define __UCAS_PRIVATE #include -__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.159 2020/07/06 11:08:21 rin Exp $"); +__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.160 2020/07/06 11:23:59 rin Exp $"); #ifdef _KERNEL_OPT #include "opt_altivec.h" @@ -160,7 +160,7 @@ trap(struct trapframe *tf) trunc_page(va), false)) { return; } -#if defined(DIAGNOSTIC) && !defined(PPC_OEA64) && !defined (PPC_IBM4XX) +#if defined(DIAGNOSTIC) && !defined(PPC_OEA64) } else if ((va >> ADDR_SR_SHFT) == USER_SR) { printf("trap: kernel %s DSI trap @ %#lx by %#lx" " (DSISR %#x): USER_SR unset\n",
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: rin Date: Mon Jul 6 11:09:15 UTC 2020 Modified Files: src/sys/arch/powerpc/powerpc: trap_subr.S Log Message: Include required opt_*.h for sure. To generate a diff of this commit: cvs rdiff -u -r1.82 -r1.83 src/sys/arch/powerpc/powerpc/trap_subr.S Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/trap_subr.S diff -u src/sys/arch/powerpc/powerpc/trap_subr.S:1.82 src/sys/arch/powerpc/powerpc/trap_subr.S:1.83 --- src/sys/arch/powerpc/powerpc/trap_subr.S:1.82 Mon Jul 6 09:34:18 2020 +++ src/sys/arch/powerpc/powerpc/trap_subr.S Mon Jul 6 11:09:15 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: trap_subr.S,v 1.82 2020/07/06 09:34:18 rin Exp $ */ +/* $NetBSD: trap_subr.S,v 1.83 2020/07/06 11:09:15 rin Exp $ */ /* * Copyright (C) 1995, 1996 Wolfgang Solfrank. @@ -40,6 +40,9 @@ #ifdef _KERNEL_OPT #include "opt_altivec.h" +#include "opt_ddb.h" +#include "opt_kgdb.h" +#include "opt_ppcarch.h" #endif /* LINTSTUB: include */
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: rin Date: Mon Jul 6 11:08:22 UTC 2020 Modified Files: src/sys/arch/powerpc/powerpc: trap.c Log Message: - Drop unused opt_multiprocessor.h. - Include missing opt_ppcarch.h. To generate a diff of this commit: cvs rdiff -u -r1.158 -r1.159 src/sys/arch/powerpc/powerpc/trap.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/trap.c diff -u src/sys/arch/powerpc/powerpc/trap.c:1.158 src/sys/arch/powerpc/powerpc/trap.c:1.159 --- src/sys/arch/powerpc/powerpc/trap.c:1.158 Mon Jul 6 09:34:18 2020 +++ src/sys/arch/powerpc/powerpc/trap.c Mon Jul 6 11:08:21 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: trap.c,v 1.158 2020/07/06 09:34:18 rin Exp $ */ +/* $NetBSD: trap.c,v 1.159 2020/07/06 11:08:21 rin Exp $ */ /* * Copyright (C) 1995, 1996 Wolfgang Solfrank. @@ -35,12 +35,12 @@ #define __UCAS_PRIVATE #include -__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.158 2020/07/06 09:34:18 rin Exp $"); +__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.159 2020/07/06 11:08:21 rin Exp $"); #ifdef _KERNEL_OPT #include "opt_altivec.h" #include "opt_ddb.h" -#include "opt_multiprocessor.h" +#include "opt_ppcarch.h" #endif #include
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: rin Date: Mon Jul 6 11:07:39 UTC 2020 Modified Files: src/sys/arch/powerpc/powerpc: syscall.c Log Message: Drop unused opt_altivec.h and opt_multiprocessor.h. To generate a diff of this commit: cvs rdiff -u -r1.56 -r1.57 src/sys/arch/powerpc/powerpc/syscall.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/syscall.c diff -u src/sys/arch/powerpc/powerpc/syscall.c:1.56 src/sys/arch/powerpc/powerpc/syscall.c:1.57 --- src/sys/arch/powerpc/powerpc/syscall.c:1.56 Mon Jul 6 09:34:18 2020 +++ src/sys/arch/powerpc/powerpc/syscall.c Mon Jul 6 11:07:39 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: syscall.c,v 1.56 2020/07/06 09:34:18 rin Exp $ */ +/* $NetBSD: syscall.c,v 1.57 2020/07/06 11:07:39 rin Exp $ */ /* * Copyright (C) 2002 Matt Thomas @@ -35,11 +35,6 @@ /* DO NOT INCLUDE opt_compat_XXX.h */ /* If needed, they will be included by file that includes this one */ -#ifdef _KERNEL_OPT -#include "opt_altivec.h" -#include "opt_multiprocessor.h" -#endif - #include #include #include @@ -64,7 +59,7 @@ #define EMULNAME(x) (x) #define EMULNAMEU(x) (x) -__KERNEL_RCSID(0, "$NetBSD: syscall.c,v 1.56 2020/07/06 09:34:18 rin Exp $"); +__KERNEL_RCSID(0, "$NetBSD: syscall.c,v 1.57 2020/07/06 11:07:39 rin Exp $"); void md_child_return(struct lwp *l)
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: rin Date: Mon Jul 6 11:06:52 UTC 2020 Modified Files: src/sys/arch/powerpc/powerpc: locore_subr.S Log Message: Drop unused opt_lockdebug.h. To generate a diff of this commit: cvs rdiff -u -r1.62 -r1.63 src/sys/arch/powerpc/powerpc/locore_subr.S Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/locore_subr.S diff -u src/sys/arch/powerpc/powerpc/locore_subr.S:1.62 src/sys/arch/powerpc/powerpc/locore_subr.S:1.63 --- src/sys/arch/powerpc/powerpc/locore_subr.S:1.62 Mon Jul 6 09:34:18 2020 +++ src/sys/arch/powerpc/powerpc/locore_subr.S Mon Jul 6 11:06:52 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: locore_subr.S,v 1.62 2020/07/06 09:34:18 rin Exp $ */ +/* $NetBSD: locore_subr.S,v 1.63 2020/07/06 11:06:52 rin Exp $ */ /* * Copyright (c) 2001 Wasabi Systems, Inc. @@ -75,7 +75,6 @@ #ifdef _KERNEL_OPT #include "opt_ddb.h" -#include "opt_lockdebug.h" #include "opt_modular.h" #include "opt_multiprocessor.h" #include "opt_ppcarch.h"
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: rin Date: Mon Jul 6 11:05:54 UTC 2020 Modified Files: src/sys/arch/powerpc/powerpc: kgdb_machdep.c Log Message: - Drop unused opt_ddb.h. - Include missing opt_ppcarch.h. To generate a diff of this commit: cvs rdiff -u -r1.23 -r1.24 src/sys/arch/powerpc/powerpc/kgdb_machdep.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/kgdb_machdep.c diff -u src/sys/arch/powerpc/powerpc/kgdb_machdep.c:1.23 src/sys/arch/powerpc/powerpc/kgdb_machdep.c:1.24 --- src/sys/arch/powerpc/powerpc/kgdb_machdep.c:1.23 Mon Jul 6 09:34:18 2020 +++ src/sys/arch/powerpc/powerpc/kgdb_machdep.c Mon Jul 6 11:05:54 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: kgdb_machdep.c,v 1.23 2020/07/06 09:34:18 rin Exp $ */ +/* $NetBSD: kgdb_machdep.c,v 1.24 2020/07/06 11:05:54 rin Exp $ */ /* * Copyright 2001 Wasabi Systems, Inc. @@ -36,10 +36,10 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: kgdb_machdep.c,v 1.23 2020/07/06 09:34:18 rin Exp $"); +__KERNEL_RCSID(0, "$NetBSD: kgdb_machdep.c,v 1.24 2020/07/06 11:05:54 rin Exp $"); #ifdef _KERNEL_OPT -#include "opt_ddb.h" +#include "opt_ppcarch.h" #endif /*
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: rin Date: Mon Jul 6 11:05:05 UTC 2020 Modified Files: src/sys/arch/powerpc/powerpc: core_machdep.c Log Message: Drop unused opt_ppcarch.h. To generate a diff of this commit: cvs rdiff -u -r1.10 -r1.11 src/sys/arch/powerpc/powerpc/core_machdep.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/core_machdep.c diff -u src/sys/arch/powerpc/powerpc/core_machdep.c:1.10 src/sys/arch/powerpc/powerpc/core_machdep.c:1.11 --- src/sys/arch/powerpc/powerpc/core_machdep.c:1.10 Wed Nov 20 19:37:52 2019 +++ src/sys/arch/powerpc/powerpc/core_machdep.c Mon Jul 6 11:05:05 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: core_machdep.c,v 1.10 2019/11/20 19:37:52 pgoyette Exp $ */ +/* $NetBSD: core_machdep.c,v 1.11 2020/07/06 11:05:05 rin Exp $ */ /* * Copyright (C) 1995, 1996 Wolfgang Solfrank. @@ -32,11 +32,10 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: core_machdep.c,v 1.10 2019/11/20 19:37:52 pgoyette Exp $"); +__KERNEL_RCSID(0, "$NetBSD: core_machdep.c,v 1.11 2020/07/06 11:05:05 rin Exp $"); #ifdef _KERNEL_OPT #include "opt_altivec.h" -#include "opt_ppcarch.h" #endif #include
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: rin Date: Mon Jul 6 08:30:10 UTC 2020 Modified Files: src/sys/arch/powerpc/powerpc: db_trace.c Log Message: db_stack_trace_print(): For ibm4xx, show fault address in dear register also for EXC_DTMISS. To generate a diff of this commit: cvs rdiff -u -r1.58 -r1.59 src/sys/arch/powerpc/powerpc/db_trace.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/db_trace.c diff -u src/sys/arch/powerpc/powerpc/db_trace.c:1.58 src/sys/arch/powerpc/powerpc/db_trace.c:1.59 --- src/sys/arch/powerpc/powerpc/db_trace.c:1.58 Wed Feb 28 20:11:09 2018 +++ src/sys/arch/powerpc/powerpc/db_trace.c Mon Jul 6 08:30:10 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: db_trace.c,v 1.58 2018/02/28 20:11:09 mrg Exp $ */ +/* $NetBSD: db_trace.c,v 1.59 2020/07/06 08:30:10 rin Exp $ */ /* $OpenBSD: db_trace.c,v 1.3 1997/03/21 02:10:48 niklas Exp $ */ /* @@ -28,7 +28,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: db_trace.c,v 1.58 2018/02/28 20:11:09 mrg Exp $"); +__KERNEL_RCSID(0, "$NetBSD: db_trace.c,v 1.59 2020/07/06 08:30:10 rin Exp $"); #include "opt_ppcarch.h" @@ -213,7 +213,9 @@ db_stack_trace_print(db_expr_t addr, boo tf->tf_dar); #endif #ifdef PPC_IBM4XX -(*pr)("DSI %s trap @ %#x by ", +trapstr = "DSI"; +dsi: +(*pr)("%s %s trap @ %#x by ", trapstr, tf->tf_esr & ESR_DST ? "write" : "read", tf->tf_dear); #endif @@ -241,7 +243,11 @@ db_stack_trace_print(db_expr_t addr, boo case EXC_PERF: trapstr = "PERF"; break; case EXC_SMI: trapstr = "SMI"; break; case EXC_RST: trapstr = "RST"; break; - case EXC_DTMISS: trapstr = "DTMISS"; break; + case EXC_DTMISS: trapstr = "DTMISS"; +#ifdef PPC_IBM4XX +goto dsi; +#endif +break; case EXC_ITMISS: trapstr = "ITMISS"; break; case EXC_FIT: trapstr = "FIT"; break; case EXC_PIT: trapstr = "PIT"; break; @@ -278,7 +284,8 @@ db_stack_trace_print(db_expr_t addr, boo #endif /* PPC_OEA601 */ #endif /* PPC_OEA */ #ifdef PPC_IBM4XX - if (tf->tf_exc == EXC_DSI) + if (tf->tf_exc == EXC_DSI || + tf->tf_exc == EXC_DTMISS) (*pr)(" dear=%#x", tf->tf_dear); (*pr)(" esr=%#x pid=%#x", tf->tf_esr, tf->tf_pid); #endif
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: rin Date: Mon Jul 6 08:10:57 UTC 2020 Modified Files: src/sys/arch/powerpc/powerpc: intr_stubs.c Log Message: Make this compile without __HAVE_FAST_SOFTINTS for debug. To generate a diff of this commit: cvs rdiff -u -r1.5 -r1.6 src/sys/arch/powerpc/powerpc/intr_stubs.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/intr_stubs.c diff -u src/sys/arch/powerpc/powerpc/intr_stubs.c:1.5 src/sys/arch/powerpc/powerpc/intr_stubs.c:1.6 --- src/sys/arch/powerpc/powerpc/intr_stubs.c:1.5 Wed Oct 19 00:08:42 2016 +++ src/sys/arch/powerpc/powerpc/intr_stubs.c Mon Jul 6 08:10:57 2020 @@ -38,7 +38,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: intr_stubs.c,v 1.5 2016/10/19 00:08:42 nonaka Exp $"); +__KERNEL_RCSID(0, "$NetBSD: intr_stubs.c,v 1.6 2020/07/06 08:10:57 rin Exp $"); #include #include @@ -137,6 +137,7 @@ splx(int ipl) return (*powerpc_intrsw->intrsw_splx)(ipl); } +#ifdef __HAVE_FAST_SOFTINTS void softint_init_md(struct lwp *, u_int, uintptr_t *) __stub; void @@ -152,6 +153,7 @@ softint_trigger(uintptr_t machdep) { (*powerpc_intrsw->intrsw_softint_trigger)(machdep); } +#endif void intr_cpu_attach(struct cpu_info *) __stub;
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: rin Date: Tue Feb 25 00:42:12 UTC 2020 Modified Files: src/sys/arch/powerpc/powerpc: locore_subr.S trap.c Log Message: Comment out do_ucas_32(), only user of which, _ucas_32(), is commented out since powerpc/trap.c rev 1.156: http://cvsweb.netbsd.org/bsdweb.cgi/src/sys/arch/powerpc/powerpc/trap.c#rev1.156 To generate a diff of this commit: cvs rdiff -u -r1.59 -r1.60 src/sys/arch/powerpc/powerpc/locore_subr.S cvs rdiff -u -r1.156 -r1.157 src/sys/arch/powerpc/powerpc/trap.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/locore_subr.S diff -u src/sys/arch/powerpc/powerpc/locore_subr.S:1.59 src/sys/arch/powerpc/powerpc/locore_subr.S:1.60 --- src/sys/arch/powerpc/powerpc/locore_subr.S:1.59 Wed Jan 8 20:59:19 2020 +++ src/sys/arch/powerpc/powerpc/locore_subr.S Tue Feb 25 00:42:12 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: locore_subr.S,v 1.59 2020/01/08 20:59:19 skrll Exp $ */ +/* $NetBSD: locore_subr.S,v 1.60 2020/02/25 00:42:12 rin Exp $ */ /* * Copyright (c) 2001 Wasabi Systems, Inc. @@ -570,6 +570,7 @@ ENTRY(cpu_spinstart) #endif /*MULTIPROCESSOR + OEA*/ +#if 0 /* XXX CPU configuration spaghetti */ /* * int do_ucas_32(uint32_t *uptr, uint32_t old, uint32_t new, uint32_t *ret); */ @@ -585,3 +586,4 @@ ENTRY(do_ucas_32) li %r3,0 stw %r10,0(%r6) blr +#endif Index: src/sys/arch/powerpc/powerpc/trap.c diff -u src/sys/arch/powerpc/powerpc/trap.c:1.156 src/sys/arch/powerpc/powerpc/trap.c:1.157 --- src/sys/arch/powerpc/powerpc/trap.c:1.156 Sun Apr 7 05:25:56 2019 +++ src/sys/arch/powerpc/powerpc/trap.c Tue Feb 25 00:42:12 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: trap.c,v 1.156 2019/04/07 05:25:56 thorpej Exp $ */ +/* $NetBSD: trap.c,v 1.157 2020/02/25 00:42:12 rin Exp $ */ /* * Copyright (C) 1995, 1996 Wolfgang Solfrank. @@ -32,7 +32,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.156 2019/04/07 05:25:56 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.157 2020/02/25 00:42:12 rin Exp $"); #include "opt_altivec.h" #include "opt_ddb.h" @@ -72,8 +72,6 @@ static int fix_unaligned(struct lwp *, s static inline vaddr_t setusr(vaddr_t, size_t *); static inline void unsetusr(void); -extern int do_ucas_32(volatile int32_t *, int32_t, int32_t, int32_t *); - void trap(struct trapframe *); /* Called from locore / trap_subr */ /* Why are these not defined in a header? */ int badaddr(void *, size_t); @@ -686,6 +684,7 @@ kcopy(const void *src, void *dst, size_t int _ucas_32(volatile uint32_t *uptr, uint32_t old, uint32_t new, uint32_t *ret) { + extern int do_ucas_32(volatile int32_t *, int32_t, int32_t, int32_t *); vaddr_t uva = (vaddr_t)uptr; vaddr_t p; struct faultbuf env;
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: rin Date: Mon Feb 24 11:49:17 UTC 2020 Modified Files: src/sys/arch/powerpc/powerpc: vm_machdep.c Log Message: Oops, revert previous; fix build for PPC_OEA64 || PPC_OEA64_BRIDGE. oea and booke seem to work without direct-mapped and physically contiguous u-area. To generate a diff of this commit: cvs rdiff -u -r1.101 -r1.102 src/sys/arch/powerpc/powerpc/vm_machdep.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/vm_machdep.c diff -u src/sys/arch/powerpc/powerpc/vm_machdep.c:1.101 src/sys/arch/powerpc/powerpc/vm_machdep.c:1.102 --- src/sys/arch/powerpc/powerpc/vm_machdep.c:1.101 Fri Feb 21 13:38:05 2020 +++ src/sys/arch/powerpc/powerpc/vm_machdep.c Mon Feb 24 11:49:17 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: vm_machdep.c,v 1.101 2020/02/21 13:38:05 rin Exp $ */ +/* $NetBSD: vm_machdep.c,v 1.102 2020/02/24 11:49:17 rin Exp $ */ /* * Copyright (C) 1995, 1996 Wolfgang Solfrank. @@ -32,7 +32,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: vm_machdep.c,v 1.101 2020/02/21 13:38:05 rin Exp $"); +__KERNEL_RCSID(0, "$NetBSD: vm_machdep.c,v 1.102 2020/02/24 11:49:17 rin Exp $"); #include "opt_altivec.h" #include "opt_multiprocessor.h" @@ -310,11 +310,6 @@ vunmapbuf(struct buf *bp, vsize_t len) bp->b_saveaddr = 0; } -#if UPAGES > 1 && \ -(!defined(__HAVE_CPU_UAREA_ROUTINES) || !defined(PMAP_MAP_POOLPAGE)) -#error "We need physically contiguous pages for u-area." -#endif - #ifdef __HAVE_CPU_UAREA_ROUTINES void * cpu_uarea_alloc(bool system)
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: rin Date: Fri Feb 21 13:38:05 UTC 2020 Modified Files: src/sys/arch/powerpc/powerpc: vm_machdep.c Log Message: When UPAGES > 1, both __HAVE_CPU_UAREA_ROUTINES and PMAP_MAP_POOLPAGE must be defined in order to allocate physically contiguous memory for u-area. To generate a diff of this commit: cvs rdiff -u -r1.100 -r1.101 src/sys/arch/powerpc/powerpc/vm_machdep.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/vm_machdep.c diff -u src/sys/arch/powerpc/powerpc/vm_machdep.c:1.100 src/sys/arch/powerpc/powerpc/vm_machdep.c:1.101 --- src/sys/arch/powerpc/powerpc/vm_machdep.c:1.100 Mon Jul 6 05:25:29 2015 +++ src/sys/arch/powerpc/powerpc/vm_machdep.c Fri Feb 21 13:38:05 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: vm_machdep.c,v 1.100 2015/07/06 05:25:29 matt Exp $ */ +/* $NetBSD: vm_machdep.c,v 1.101 2020/02/21 13:38:05 rin Exp $ */ /* * Copyright (C) 1995, 1996 Wolfgang Solfrank. @@ -32,7 +32,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: vm_machdep.c,v 1.100 2015/07/06 05:25:29 matt Exp $"); +__KERNEL_RCSID(0, "$NetBSD: vm_machdep.c,v 1.101 2020/02/21 13:38:05 rin Exp $"); #include "opt_altivec.h" #include "opt_multiprocessor.h" @@ -310,6 +310,11 @@ vunmapbuf(struct buf *bp, vsize_t len) bp->b_saveaddr = 0; } +#if UPAGES > 1 && \ +(!defined(__HAVE_CPU_UAREA_ROUTINES) || !defined(PMAP_MAP_POOLPAGE)) +#error "We need physically contiguous pages for u-area." +#endif + #ifdef __HAVE_CPU_UAREA_ROUTINES void * cpu_uarea_alloc(bool system)
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: rin Date: Thu Feb 20 06:12:47 UTC 2020 Modified Files: src/sys/arch/powerpc/powerpc: fpu.c powerpc_machdep.c Log Message: Provide no-op's as pcu_ops_md_defs[PCU_FPU] even if !PPC_HAVE_FPU. This is required by subr_pcu.c rev 1.21 and later: http://cvsweb.netbsd.org/bsdweb.cgi/src/sys/kern/subr_pcu.c#rev1.21 Otherwise, panic occurs when FP instruction is emulated on machines without FPU. Note that PowerPC UISA as well as SVR4 ABI require FP instructions, and emulation is enabled unconditionally on machines without FPU. To generate a diff of this commit: cvs rdiff -u -r1.38 -r1.39 src/sys/arch/powerpc/powerpc/fpu.c cvs rdiff -u -r1.76 -r1.77 src/sys/arch/powerpc/powerpc/powerpc_machdep.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/fpu.c diff -u src/sys/arch/powerpc/powerpc/fpu.c:1.38 src/sys/arch/powerpc/powerpc/fpu.c:1.39 --- src/sys/arch/powerpc/powerpc/fpu.c:1.38 Thu Mar 16 16:13:20 2017 +++ src/sys/arch/powerpc/powerpc/fpu.c Thu Feb 20 06:12:47 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: fpu.c,v 1.38 2017/03/16 16:13:20 chs Exp $ */ +/* $NetBSD: fpu.c,v 1.39 2020/02/20 06:12:47 rin Exp $ */ /* * Copyright (C) 1996 Wolfgang Solfrank. @@ -32,7 +32,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: fpu.c,v 1.38 2017/03/16 16:13:20 chs Exp $"); +__KERNEL_RCSID(0, "$NetBSD: fpu.c,v 1.39 2020/02/20 06:12:47 rin Exp $"); #include "opt_multiprocessor.h" @@ -47,19 +47,15 @@ __KERNEL_RCSID(0, "$NetBSD: fpu.c,v 1.38 #include #include -#ifdef PPC_HAVE_FPU static void fpu_state_load(lwp_t *, u_int); static void fpu_state_save(lwp_t *); static void fpu_state_release(lwp_t *); -#endif const pcu_ops_t fpu_ops = { .pcu_id = PCU_FPU, -#ifdef PPC_HAVE_FPU .pcu_state_load = fpu_state_load, .pcu_state_save = fpu_state_save, .pcu_state_release = fpu_state_release, -#endif }; bool @@ -74,10 +70,10 @@ fpu_mark_used(lwp_t *l) pcu_discard(_ops, l, true); } -#ifdef PPC_HAVE_FPU void fpu_state_load(lwp_t *l, u_int flags) { +#ifdef PPC_HAVE_FPU struct pcb * const pcb = lwp_getpcb(l); if ((flags & PCU_VALID) == 0) { @@ -98,6 +94,7 @@ fpu_state_load(lwp_t *l, u_int flags) curcpu()->ci_ev_fpusw.ev_count++; l->l_md.md_utf->tf_srr1 |= PSL_FP|(pcb->pcb_flags & (PCB_FE0|PCB_FE1)); +#endif } /* @@ -106,6 +103,7 @@ fpu_state_load(lwp_t *l, u_int flags) void fpu_state_save(lwp_t *l) { +#ifdef PPC_HAVE_FPU struct pcb * const pcb = lwp_getpcb(l); const register_t msr = mfmsr(); @@ -117,14 +115,18 @@ fpu_state_save(lwp_t *l) mtmsr(msr); __asm volatile ("isync"); +#endif } void fpu_state_release(lwp_t *l) { +#ifdef PPC_HAVE_FPU l->l_md.md_utf->tf_srr1 &= ~PSL_FP; +#endif } +#ifdef PPC_HAVE_FPU #define STICKYBITS (FPSCR_VX|FPSCR_OX|FPSCR_UX|FPSCR_ZX|FPSCR_XX) #define STICKYSHIFT 25 #define MASKBITS (FPSCR_VE|FPSCR_OE|FPSCR_UE|FPSCR_ZE|FPSCR_XE) Index: src/sys/arch/powerpc/powerpc/powerpc_machdep.c diff -u src/sys/arch/powerpc/powerpc/powerpc_machdep.c:1.76 src/sys/arch/powerpc/powerpc/powerpc_machdep.c:1.77 --- src/sys/arch/powerpc/powerpc/powerpc_machdep.c:1.76 Mon Feb 17 21:49:27 2020 +++ src/sys/arch/powerpc/powerpc/powerpc_machdep.c Thu Feb 20 06:12:47 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: powerpc_machdep.c,v 1.76 2020/02/17 21:49:27 ad Exp $ */ +/* $NetBSD: powerpc_machdep.c,v 1.77 2020/02/20 06:12:47 rin Exp $ */ /* * Copyright (C) 1995, 1996 Wolfgang Solfrank. @@ -32,7 +32,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: powerpc_machdep.c,v 1.76 2020/02/17 21:49:27 ad Exp $"); +__KERNEL_RCSID(0, "$NetBSD: powerpc_machdep.c,v 1.77 2020/02/20 06:12:47 rin Exp $"); #include "opt_altivec.h" #include "opt_ddb.h" @@ -89,9 +89,7 @@ extern int powersave; char *booted_kernel; const pcu_ops_t * const pcu_ops_md_defs[PCU_UNIT_COUNT] = { -#if defined(PPC_HAVE_FPU) [PCU_FPU] = _ops, -#endif #if defined(ALTIVEC) || defined(PPC_HAVE_SPE) [PCU_VEC] = _ops, #endif
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: ad Date: Mon Feb 17 21:49:27 UTC 2020 Modified Files: src/sys/arch/powerpc/powerpc: powerpc_machdep.c Log Message: cpu_ast(): no need to call userret(), as the caller does it for us. From rin@. To generate a diff of this commit: cvs rdiff -u -r1.75 -r1.76 src/sys/arch/powerpc/powerpc/powerpc_machdep.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/powerpc_machdep.c diff -u src/sys/arch/powerpc/powerpc/powerpc_machdep.c:1.75 src/sys/arch/powerpc/powerpc/powerpc_machdep.c:1.76 --- src/sys/arch/powerpc/powerpc/powerpc_machdep.c:1.75 Thu Dec 5 20:55:24 2019 +++ src/sys/arch/powerpc/powerpc/powerpc_machdep.c Mon Feb 17 21:49:27 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: powerpc_machdep.c,v 1.75 2019/12/05 20:55:24 ad Exp $ */ +/* $NetBSD: powerpc_machdep.c,v 1.76 2020/02/17 21:49:27 ad Exp $ */ /* * Copyright (C) 1995, 1996 Wolfgang Solfrank. @@ -32,7 +32,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: powerpc_machdep.c,v 1.75 2019/12/05 20:55:24 ad Exp $"); +__KERNEL_RCSID(0, "$NetBSD: powerpc_machdep.c,v 1.76 2020/02/17 21:49:27 ad Exp $"); #include "opt_altivec.h" #include "opt_ddb.h" @@ -373,9 +373,6 @@ void cpu_ast(struct lwp *l, struct cpu_info *ci) { l->l_md.md_astpending = 0; /* we are about to do it */ - __insn_barrier(); - userret(l, l->l_md.md_utf); - if (l->l_pflag & LP_OWEUPC) { l->l_pflag &= ~LP_OWEUPC; ADDUPROF(l);
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: thorpej Date: Tue Jan 21 04:30:14 UTC 2020 Modified Files: src/sys/arch/powerpc/powerpc: lock_stubs.S Log Message: Update for changes to -- owner field is now bits 5-N. To generate a diff of this commit: cvs rdiff -u -r1.10 -r1.11 src/sys/arch/powerpc/powerpc/lock_stubs.S Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/lock_stubs.S diff -u src/sys/arch/powerpc/powerpc/lock_stubs.S:1.10 src/sys/arch/powerpc/powerpc/lock_stubs.S:1.11 --- src/sys/arch/powerpc/powerpc/lock_stubs.S:1.10 Fri Feb 28 05:38:15 2014 +++ src/sys/arch/powerpc/powerpc/lock_stubs.S Tue Jan 21 04:30:14 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: lock_stubs.S,v 1.10 2014/02/28 05:38:15 matt Exp $ */ +/* $NetBSD: lock_stubs.S,v 1.11 2020/01/21 04:30:14 thorpej Exp $ */ /*- * Copyright (c) 2007 The NetBSD Foundation, Inc. @@ -101,8 +101,8 @@ ENTRY(mutex_exit) /* * void rw_enter(krwlock_t *krw, krw_t op); */ -#if RW_READ_INCR != 16 -#error RW_READ_INCR != 16, clrrXi need fixing +#if RW_READ_INCR != 32 +#error RW_READ_INCR != 32, clrrXi need fixing #endif #if RW_OWNER != 0 #error RW_OWNER != 0, ldptr should be ldptru @@ -115,7 +115,7 @@ ENTRY(rw_enter) bne- 1f ldptr %r9,RW_OWNER(%r3) - clrrptri %r9,%r9,4 /* clear low 4 bits */ + clrrptri %r9,%r9,5 /* clear low 5 bits */ addi %r7,%r9,RW_READ_INCR b 2f 1: @@ -140,7 +140,7 @@ ENTRY(rw_tryenter) bne- 1f ldptr %r9,RW_OWNER(%r3) - clrrptri %r9,%r9,4 /* clear low 4 bits */ + clrrptri %r9,%r9,5 /* clear low 5 bits */ addi %r7,%r9,RW_READ_INCR b 2f @@ -169,7 +169,7 @@ ENTRY(rw_exit) andi. %r0,%r9,RW_WRITE_LOCKED bne- 1f - clrrptri. %r9,%r9,4 /* clear low 4 bits */ + clrrptri. %r9,%r9,5 /* clear low 5 bits */ beq- 3f /* if 0, no reader, go slow */ addi %r7,%r9,-RW_READ_INCR
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: ad Date: Thu Dec 5 20:55:24 UTC 2019 Modified Files: src/sys/arch/powerpc/powerpc: powerpc_machdep.c Log Message: Need to call userret() from cpu_ast(). To generate a diff of this commit: cvs rdiff -u -r1.74 -r1.75 src/sys/arch/powerpc/powerpc/powerpc_machdep.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/powerpc_machdep.c diff -u src/sys/arch/powerpc/powerpc/powerpc_machdep.c:1.74 src/sys/arch/powerpc/powerpc/powerpc_machdep.c:1.75 --- src/sys/arch/powerpc/powerpc/powerpc_machdep.c:1.74 Sat Nov 23 19:40:36 2019 +++ src/sys/arch/powerpc/powerpc/powerpc_machdep.c Thu Dec 5 20:55:24 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: powerpc_machdep.c,v 1.74 2019/11/23 19:40:36 ad Exp $ */ +/* $NetBSD: powerpc_machdep.c,v 1.75 2019/12/05 20:55:24 ad Exp $ */ /* * Copyright (C) 1995, 1996 Wolfgang Solfrank. @@ -32,7 +32,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: powerpc_machdep.c,v 1.74 2019/11/23 19:40:36 ad Exp $"); +__KERNEL_RCSID(0, "$NetBSD: powerpc_machdep.c,v 1.75 2019/12/05 20:55:24 ad Exp $"); #include "opt_altivec.h" #include "opt_ddb.h" @@ -373,6 +373,8 @@ void cpu_ast(struct lwp *l, struct cpu_info *ci) { l->l_md.md_astpending = 0; /* we are about to do it */ + __insn_barrier(); + userret(l, l->l_md.md_utf); if (l->l_pflag & LP_OWEUPC) { l->l_pflag &= ~LP_OWEUPC; @@ -400,7 +402,7 @@ cpu_need_resched(struct cpu_info *ci, st cpu_send_ipi(cpu_index(ci), IPI_AST); #endif } else { - l->l_md.md_astpending = 1; /* force call to ast() */ + l->l_md.md_astpending = 1; /* force call to cpu_ast() */ } }
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: christos Date: Mon Dec 31 18:47:46 UTC 2018 Modified Files: src/sys/arch/powerpc/powerpc: ofwreal.S Log Message: use 0 instead of %r0 for dcbst and icbi otherwise binutils-2.31.1 bitch. To generate a diff of this commit: cvs rdiff -u -r1.13 -r1.14 src/sys/arch/powerpc/powerpc/ofwreal.S Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/ofwreal.S diff -u src/sys/arch/powerpc/powerpc/ofwreal.S:1.13 src/sys/arch/powerpc/powerpc/ofwreal.S:1.14 --- src/sys/arch/powerpc/powerpc/ofwreal.S:1.13 Sun Jun 5 12:52:26 2011 +++ src/sys/arch/powerpc/powerpc/ofwreal.S Mon Dec 31 13:47:46 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: ofwreal.S,v 1.13 2011/06/05 16:52:26 matt Exp $ */ +/* $NetBSD: ofwreal.S,v 1.14 2018/12/31 18:47:46 christos Exp $ */ /* * Copyright (C) 1996 Wolfgang Solfrank. @@ -230,15 +230,15 @@ copy: stw %r8,20(%r4) stw %r9,24(%r4) stw %r10,28(%r4) - dcbst %r0,%r4 - icbi %r0,%r4 + dcbst 0,%r4 + icbi 0,%r4 add %r3,%r3,%r6 add %r4,%r4,%r6 subf. %r5,%r6,%r5 bgt 1b - dcbst %r0,%r4 - icbi %r0,%r4 + dcbst 0,%r4 + icbi 0,%r4 sync isync
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: uwe Date: Fri Jun 15 22:07:14 UTC 2018 Modified Files: src/sys/arch/powerpc/powerpc: trap.c Log Message: In mtmsr emulation ignore PSL_VEC we set in mfmsr emulation just above, as it freaks out PSL_USEROK_P(). This is also congruent with how we handle PSL_FP. PR port-macppc/53360 To generate a diff of this commit: cvs rdiff -u -r1.153 -r1.154 src/sys/arch/powerpc/powerpc/trap.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/trap.c diff -u src/sys/arch/powerpc/powerpc/trap.c:1.153 src/sys/arch/powerpc/powerpc/trap.c:1.154 --- src/sys/arch/powerpc/powerpc/trap.c:1.153 Thu Mar 16 16:13:20 2017 +++ src/sys/arch/powerpc/powerpc/trap.c Fri Jun 15 22:07:14 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: trap.c,v 1.153 2017/03/16 16:13:20 chs Exp $ */ +/* $NetBSD: trap.c,v 1.154 2018/06/15 22:07:14 uwe Exp $ */ /* * Copyright (C) 1995, 1996 Wolfgang Solfrank. @@ -32,7 +32,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.153 2017/03/16 16:13:20 chs Exp $"); +__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.154 2018/06/15 22:07:14 uwe Exp $"); #include "opt_altivec.h" #include "opt_ddb.h" @@ -1062,6 +1062,9 @@ emulated_opcode(struct lwp *l, struct tr * user code isn't allowed to change it. */ msr &= ~PSL_FP; +#ifdef ALTIVEC + msr &= ~PSL_VEC; +#endif /* * Don't let the user muck with bits he's not allowed to.
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: macallan Date: Fri May 11 22:23:33 UTC 2018 Modified Files: src/sys/arch/powerpc/powerpc: pmap_subr.c Log Message: disable the MULTIPROCESSOR case in pmap_syncicache() because: - __syncicache() wants a virtual address, not a pa - this crashes on G5 SMP - the rest of the function does the same as __syncicache() except it turns the MMU off first so physical addresses work with this, my PCIe G5 boots SMP To generate a diff of this commit: cvs rdiff -u -r1.27 -r1.28 src/sys/arch/powerpc/powerpc/pmap_subr.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/pmap_subr.c diff -u src/sys/arch/powerpc/powerpc/pmap_subr.c:1.27 src/sys/arch/powerpc/powerpc/pmap_subr.c:1.28 --- src/sys/arch/powerpc/powerpc/pmap_subr.c:1.27 Wed Feb 1 09:54:03 2012 +++ src/sys/arch/powerpc/powerpc/pmap_subr.c Fri May 11 22:23:33 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap_subr.c,v 1.27 2012/02/01 09:54:03 matt Exp $ */ +/* $NetBSD: pmap_subr.c,v 1.28 2018/05/11 22:23:33 macallan Exp $ */ /*- * Copyright (c) 2001 The NetBSD Foundation, Inc. * All rights reserved. @@ -29,7 +29,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: pmap_subr.c,v 1.27 2012/02/01 09:54:03 matt Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap_subr.c,v 1.28 2018/05/11 22:23:33 macallan Exp $"); #include "opt_multiprocessor.h" #include "opt_altivec.h" @@ -425,7 +425,14 @@ pmap_copy_page(paddr_t src, paddr_t dst) void pmap_syncicache(paddr_t pa, psize_t len) { -#ifdef MULTIPROCESSOR + +/* + * XXX + * disabling the MULTIPROCESSOR case because: + * - _syncicache() takes a virtual addresses + * - this causes crashes on G5 + */ +#ifdef MULTIPROCESSOR__ __syncicache((void *)pa, len); #else const size_t linewidth = curcpu()->ci_ci.icache_line_size;
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: macallan Date: Fri May 4 17:13:08 UTC 2018 Modified Files: src/sys/arch/powerpc/powerpc: locore_subr.S Log Message: when spinning up secondary CPUs, put them in bridge mode if the primary cpu is To generate a diff of this commit: cvs rdiff -u -r1.55 -r1.56 src/sys/arch/powerpc/powerpc/locore_subr.S Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/locore_subr.S diff -u src/sys/arch/powerpc/powerpc/locore_subr.S:1.55 src/sys/arch/powerpc/powerpc/locore_subr.S:1.56 --- src/sys/arch/powerpc/powerpc/locore_subr.S:1.55 Tue Feb 28 17:35:29 2017 +++ src/sys/arch/powerpc/powerpc/locore_subr.S Fri May 4 17:13:08 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: locore_subr.S,v 1.55 2017/02/28 17:35:29 chs Exp $ */ +/* $NetBSD: locore_subr.S,v 1.56 2018/05/04 17:13:08 macallan Exp $ */ /* * Copyright (c) 2001 Wasabi Systems, Inc. @@ -526,6 +526,18 @@ _ENTRY(cpu_lwp_bootstrap) ENTRY(cpu_spinup_trampoline) li %r0,0 mtmsr %r0 + + lis %r5,oeacpufeat@ha + lwz %r5,oeacpufeat@l(%r5) + andi. %r5,%r5,OEACPU_64_BRIDGE + beq 6f + sync + slbia + sync + isync + clrldi %r0,%r0,32 + mtmsrd %r0 +6: isync lis %r4,_C_LABEL(cpu_hatch_stack)@ha
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: phx Date: Wed May 2 08:24:40 UTC 2018 Modified Files: src/sys/arch/powerpc/powerpc: trap_subr.S Log Message: Fixed non-critical typo in tlbdsmiss: %r8 -> 8. To generate a diff of this commit: cvs rdiff -u -r1.78 -r1.79 src/sys/arch/powerpc/powerpc/trap_subr.S Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/trap_subr.S diff -u src/sys/arch/powerpc/powerpc/trap_subr.S:1.78 src/sys/arch/powerpc/powerpc/trap_subr.S:1.79 --- src/sys/arch/powerpc/powerpc/trap_subr.S:1.78 Tue Jul 29 16:19:45 2014 +++ src/sys/arch/powerpc/powerpc/trap_subr.S Wed May 2 08:24:40 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: trap_subr.S,v 1.78 2014/07/29 16:19:45 joerg Exp $ */ +/* $NetBSD: trap_subr.S,v 1.79 2018/05/02 08:24:40 phx Exp $ */ /* * Copyright (C) 1995, 1996 Wolfgang Solfrank. @@ -598,7 +598,7 @@ _C_LABEL(tlbdlmsize) = .-_C_LABEL(tlbdlm .globl _C_LABEL(tlbdsmiss),_C_LABEL(tlbdsmsize) _C_LABEL(tlbdsmiss): mfspr %r2,SPR_HASH1 /* get first pointer */ - li %r1,%r8 + li %r1,8 mfctr %r0 /* save counter */ mfspr %r3,SPR_DCMP /* get first compare value */ addi %r2,%r2,-8 /* predec pointer */
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: mrg Date: Wed Feb 28 20:11:09 UTC 2018 Modified Files: src/sys/arch/powerpc/powerpc: db_trace.c Log Message: switch an assert in backtrace to an error return. To generate a diff of this commit: cvs rdiff -u -r1.57 -r1.58 src/sys/arch/powerpc/powerpc/db_trace.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/db_trace.c diff -u src/sys/arch/powerpc/powerpc/db_trace.c:1.57 src/sys/arch/powerpc/powerpc/db_trace.c:1.58 --- src/sys/arch/powerpc/powerpc/db_trace.c:1.57 Tue Dec 13 11:03:52 2011 +++ src/sys/arch/powerpc/powerpc/db_trace.c Wed Feb 28 20:11:09 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: db_trace.c,v 1.57 2011/12/13 11:03:52 kiyohara Exp $ */ +/* $NetBSD: db_trace.c,v 1.58 2018/02/28 20:11:09 mrg Exp $ */ /* $OpenBSD: db_trace.c,v 1.3 1997/03/21 02:10:48 niklas Exp $ */ /* @@ -28,7 +28,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: db_trace.c,v 1.57 2011/12/13 11:03:52 kiyohara Exp $"); +__KERNEL_RCSID(0, "$NetBSD: db_trace.c,v 1.58 2018/02/28 20:11:09 mrg Exp $"); #include "opt_ppcarch.h" @@ -161,7 +161,10 @@ db_stack_trace_print(db_expr_t addr, boo return; } l = LIST_FIRST(>p_lwps); -KASSERT(l != NULL); +if (l == NULL) { + (*pr)("trace: no LWP?\n"); + return; +} } (*pr)("lid %d ", l->l_lid); pcb = lwp_getpcb(l);
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: chs Date: Thu Mar 9 00:15:06 UTC 2017 Modified Files: src/sys/arch/powerpc/powerpc: trap.c Log Message: set signo and code correctly for signals triggered by uvm_fault() errors. To generate a diff of this commit: cvs rdiff -u -r1.151 -r1.152 src/sys/arch/powerpc/powerpc/trap.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/trap.c diff -u src/sys/arch/powerpc/powerpc/trap.c:1.151 src/sys/arch/powerpc/powerpc/trap.c:1.152 --- src/sys/arch/powerpc/powerpc/trap.c:1.151 Mon Feb 27 06:54:00 2017 +++ src/sys/arch/powerpc/powerpc/trap.c Thu Mar 9 00:15:06 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: trap.c,v 1.151 2017/02/27 06:54:00 chs Exp $ */ +/* $NetBSD: trap.c,v 1.152 2017/03/09 00:15:06 chs Exp $ */ /* * Copyright (C) 1995, 1996 Wolfgang Solfrank. @@ -32,7 +32,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.151 2017/02/27 06:54:00 chs Exp $"); +__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.152 2017/03/09 00:15:06 chs Exp $"); #include "opt_altivec.h" #include "opt_ddb.h" @@ -262,18 +262,28 @@ trap(struct trapframe *tf) tf->tf_dar, tf->tf_srr0, tf->tf_dsisr, rv); } KSI_INIT_TRAP(); - ksi.ksi_signo = SIGSEGV; ksi.ksi_trap = EXC_DSI; ksi.ksi_addr = (void *)tf->tf_dar; - ksi.ksi_code = - (tf->tf_dsisr & DSISR_PROTECT ? SEGV_ACCERR : SEGV_MAPERR); - if (rv == ENOMEM) { - printf("UVM: pid %d.%d (%s), uid %d killed: " - "out of swap\n", - p->p_pid, l->l_lid, p->p_comm, - l->l_cred ? - kauth_cred_geteuid(l->l_cred) : -1); +vm_signal: + switch (rv) { + case EINVAL: + ksi.ksi_signo = SIGBUS; + ksi.ksi_code = BUS_ADRERR; + break; + case EACCES: + ksi.ksi_signo = SIGSEGV; + ksi.ksi_code = SEGV_ACCERR; + break; + case ENOMEM: ksi.ksi_signo = SIGKILL; + printf("UVM: pid %d.%d (%s), uid %d killed: " + "out of swap\n", p->p_pid, l->l_lid, p->p_comm, + l->l_cred ? kauth_cred_geteuid(l->l_cred) : -1); + break; + default: + ksi.ksi_signo = SIGSEGV; + ksi.ksi_code = SEGV_MAPERR; + break; } (*p->p_emul->e_trapsignal)(l, ); break; @@ -323,12 +333,9 @@ trap(struct trapframe *tf) tf->tf_srr0, tf->tf_srr1); } KSI_INIT_TRAP(); - ksi.ksi_signo = SIGSEGV; ksi.ksi_trap = EXC_ISI; ksi.ksi_addr = (void *)tf->tf_srr0; - ksi.ksi_code = (rv == EACCES ? SEGV_ACCERR : SEGV_MAPERR); - (*p->p_emul->e_trapsignal)(l, ); - break; + goto vm_signal; case EXC_FPU|EXC_USER: ci->ci_ev_fpu.ev_count++;
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: chs Date: Thu Mar 9 00:14:03 UTC 2017 Modified Files: src/sys/arch/powerpc/powerpc: fpu.c Log Message: use kpreempt_disable() rather than splsoftclock() to disable preemption. To generate a diff of this commit: cvs rdiff -u -r1.36 -r1.37 src/sys/arch/powerpc/powerpc/fpu.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/fpu.c diff -u src/sys/arch/powerpc/powerpc/fpu.c:1.36 src/sys/arch/powerpc/powerpc/fpu.c:1.37 --- src/sys/arch/powerpc/powerpc/fpu.c:1.36 Mon Jul 6 01:55:50 2015 +++ src/sys/arch/powerpc/powerpc/fpu.c Thu Mar 9 00:14:03 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: fpu.c,v 1.36 2015/07/06 01:55:50 matt Exp $ */ +/* $NetBSD: fpu.c,v 1.37 2017/03/09 00:14:03 chs Exp $ */ /* * Copyright (C) 1996 Wolfgang Solfrank. @@ -32,7 +32,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: fpu.c,v 1.36 2015/07/06 01:55:50 matt Exp $"); +__KERNEL_RCSID(0, "$NetBSD: fpu.c,v 1.37 2017/03/09 00:14:03 chs Exp $"); #include "opt_multiprocessor.h" @@ -139,9 +139,10 @@ fpu_get_fault_code(void) uint32_t fpscr, ofpscr; int code; - int s = splsoftclock(); /* disable preemption */ + kpreempt_disable(); struct cpu_info * const ci = curcpu(); + /* * If we got preempted, we may be running on a different CPU. So we * need to check for that. @@ -180,7 +181,7 @@ fpu_get_fault_code(void) ((uint32_t *)>pcb_fpu.fpscr)[_QUAD_LOWWORD] &= ~MASKBITS; } - splx(s); /* allow preemption */ + kpreempt_enable(); /* * Now determine the fault type. First we test to see if any of sticky
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: chs Date: Sun Mar 5 16:09:26 UTC 2017 Modified Files: src/sys/arch/powerpc/powerpc: sig_machdep.c Log Message: in cpu_setmcontext(), do not update the TLS register (r2) as part of _UC_CPU. if _UC_TLSBASE is set, use lwp_setprivate() to update both r2 and the common field in struct lwp. To generate a diff of this commit: cvs rdiff -u -r1.44 -r1.45 src/sys/arch/powerpc/powerpc/sig_machdep.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/sig_machdep.c diff -u src/sys/arch/powerpc/powerpc/sig_machdep.c:1.44 src/sys/arch/powerpc/powerpc/sig_machdep.c:1.45 --- src/sys/arch/powerpc/powerpc/sig_machdep.c:1.44 Sun Dec 14 23:49:17 2014 +++ src/sys/arch/powerpc/powerpc/sig_machdep.c Sun Mar 5 16:09:26 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: sig_machdep.c,v 1.44 2014/12/14 23:49:17 chs Exp $ */ +/* $NetBSD: sig_machdep.c,v 1.45 2017/03/05 16:09:26 chs Exp $ */ /* * Copyright (C) 1995, 1996 Wolfgang Solfrank. @@ -32,7 +32,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: sig_machdep.c,v 1.44 2014/12/14 23:49:17 chs Exp $"); +__KERNEL_RCSID(0, "$NetBSD: sig_machdep.c,v 1.45 2017/03/05 16:09:26 chs Exp $"); #include "opt_ppcarch.h" #include "opt_altivec.h" @@ -216,10 +216,17 @@ cpu_setmcontext(struct lwp *l, const mco pcb->pcb_flags |= gr[_REG_MSR] & (PCB_FE0|PCB_FE1); #endif + /* + * R2 is the TLS register so avoid updating it here. + */ + + __greg_t save_r2 = tf->tf_fixreg[_REG_R2]; (void)memcpy(>tf_fixreg, gr, 32 * sizeof (gr[0])); + tf->tf_fixreg[_REG_R2] = save_r2; tf->tf_cr = gr[_REG_CR]; tf->tf_lr = gr[_REG_LR]; tf->tf_srr0 = gr[_REG_PC]; + /* * Accept all user-settable bits without complaint; * userland should not need to know the machine-specific @@ -233,6 +240,9 @@ cpu_setmcontext(struct lwp *l, const mco #endif } + if (flags & _UC_TLSBASE) + lwp_setprivate(l, (void *)(uintptr_t)gr[_REG_R2]); + #ifdef PPC_HAVE_FPU /* Restore FPU context, if any. */ if (flags & _UC_FPU)
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: chs Date: Tue Feb 28 17:35:29 UTC 2017 Modified Files: src/sys/arch/powerpc/powerpc: locore_subr.S Log Message: in cpu_switchto() and the fast-softint context switch code, put back the stwcx. instruction to clear the reservation. we used to have this in the old cpu_switch() until it was if-0'd in 2003 and removed completely in 2007. this fixes hangs I've seen where a softint thread is blocked waiting for a mutex that is not held. this should also fix PR 44387. To generate a diff of this commit: cvs rdiff -u -r1.54 -r1.55 src/sys/arch/powerpc/powerpc/locore_subr.S Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/locore_subr.S diff -u src/sys/arch/powerpc/powerpc/locore_subr.S:1.54 src/sys/arch/powerpc/powerpc/locore_subr.S:1.55 --- src/sys/arch/powerpc/powerpc/locore_subr.S:1.54 Wed Jul 30 23:27:55 2014 +++ src/sys/arch/powerpc/powerpc/locore_subr.S Tue Feb 28 17:35:29 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: locore_subr.S,v 1.54 2014/07/30 23:27:55 matt Exp $ */ +/* $NetBSD: locore_subr.S,v 1.55 2017/02/28 17:35:29 chs Exp $ */ /* * Copyright (c) 2001 Wasabi Systems, Inc. @@ -288,6 +288,7 @@ switchto_restore: */ ldreg %r31,CFRAME_R31(%r1) /* restore saved registers */ ldreg %r30,CFRAME_R30(%r1) + stwcx. %r1,0,%r1 /* clear reservation */ #if 1 addi %r1,%r1,CALLFRAMELEN #else @@ -328,6 +329,7 @@ _ENTRY(softint_cleanup) mtmsr %r0 isync #endif + stwcx. %r1,0,%r1 /* clear reservation */ addi %r1, %r1, CALLFRAMELEN ldreg %r0, CFRAME_LR(%r1) mtlr %r0 @@ -478,6 +480,7 @@ _ENTRY(softint_fast_dispatch) ldreg %r29,SFRAME_R29(%r1) /* R29 */ ldreg %r31,SFRAMELEN+CFRAME_R31(%r1) /* restore saved registers */ ldreg %r30,SFRAMELEN+CFRAME_R30(%r1) + stwcx. %r1,0,%r1 /* clear reservation */ addi %r1,%r1,SFRAMELEN+2*CALLFRAMELEN /* remove switch & callframes */ #endif ldreg %r0,CFRAME_LR(%r1)
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: matt Date: Mon Jul 6 05:03:56 UTC 2015 Modified Files: src/sys/arch/powerpc/powerpc: vm_machdep.c Log Message: Clear PSL_FP/PSL_VEC so the lwp won't think it owns them. To generate a diff of this commit: cvs rdiff -u -r1.98 -r1.99 src/sys/arch/powerpc/powerpc/vm_machdep.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/vm_machdep.c diff -u src/sys/arch/powerpc/powerpc/vm_machdep.c:1.98 src/sys/arch/powerpc/powerpc/vm_machdep.c:1.99 --- src/sys/arch/powerpc/powerpc/vm_machdep.c:1.98 Sat Oct 20 14:42:15 2012 +++ src/sys/arch/powerpc/powerpc/vm_machdep.c Mon Jul 6 05:03:56 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: vm_machdep.c,v 1.98 2012/10/20 14:42:15 kiyohara Exp $ */ +/* $NetBSD: vm_machdep.c,v 1.99 2015/07/06 05:03:56 matt Exp $ */ /* * Copyright (C) 1995, 1996 Wolfgang Solfrank. @@ -32,7 +32,7 @@ */ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: vm_machdep.c,v 1.98 2012/10/20 14:42:15 kiyohara Exp $); +__KERNEL_RCSID(0, $NetBSD: vm_machdep.c,v 1.99 2015/07/06 05:03:56 matt Exp $); #include opt_altivec.h #include opt_multiprocessor.h @@ -107,6 +107,8 @@ cpu_lwp_fork(struct lwp *l1, struct lwp * Setup the trap frame for the new process */ *l2-l_md.md_utf = *l1-l_md.md_utf; + l2-l_md.md_utf-tf_srr1 = ~(PSL_FP|PSL_VEC); + l2-l_md.md_flags = ~PSL_VEC; /* * If specified, give the child a different stack. Make sure to
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: matt Date: Mon Jul 6 05:25:29 UTC 2015 Modified Files: src/sys/arch/powerpc/powerpc: vm_machdep.c Log Message: Back out last change. Clearing PSL_FP/PSL_VEC is handled by child_return. To generate a diff of this commit: cvs rdiff -u -r1.99 -r1.100 src/sys/arch/powerpc/powerpc/vm_machdep.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/vm_machdep.c diff -u src/sys/arch/powerpc/powerpc/vm_machdep.c:1.99 src/sys/arch/powerpc/powerpc/vm_machdep.c:1.100 --- src/sys/arch/powerpc/powerpc/vm_machdep.c:1.99 Mon Jul 6 05:03:56 2015 +++ src/sys/arch/powerpc/powerpc/vm_machdep.c Mon Jul 6 05:25:29 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: vm_machdep.c,v 1.99 2015/07/06 05:03:56 matt Exp $ */ +/* $NetBSD: vm_machdep.c,v 1.100 2015/07/06 05:25:29 matt Exp $ */ /* * Copyright (C) 1995, 1996 Wolfgang Solfrank. @@ -32,7 +32,7 @@ */ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: vm_machdep.c,v 1.99 2015/07/06 05:03:56 matt Exp $); +__KERNEL_RCSID(0, $NetBSD: vm_machdep.c,v 1.100 2015/07/06 05:25:29 matt Exp $); #include opt_altivec.h #include opt_multiprocessor.h @@ -107,8 +107,6 @@ cpu_lwp_fork(struct lwp *l1, struct lwp * Setup the trap frame for the new process */ *l2-l_md.md_utf = *l1-l_md.md_utf; - l2-l_md.md_utf-tf_srr1 = ~(PSL_FP|PSL_VEC); - l2-l_md.md_flags = ~PSL_VEC; /* * If specified, give the child a different stack. Make sure to
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: matt Date: Mon Jul 6 01:55:50 UTC 2015 Modified Files: src/sys/arch/powerpc/powerpc: fpu.c Log Message: Don't reload the FPU register if this is just a re-enable. To generate a diff of this commit: cvs rdiff -u -r1.35 -r1.36 src/sys/arch/powerpc/powerpc/fpu.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/fpu.c diff -u src/sys/arch/powerpc/powerpc/fpu.c:1.35 src/sys/arch/powerpc/powerpc/fpu.c:1.36 --- src/sys/arch/powerpc/powerpc/fpu.c:1.35 Fri May 16 00:48:41 2014 +++ src/sys/arch/powerpc/powerpc/fpu.c Mon Jul 6 01:55:50 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: fpu.c,v 1.35 2014/05/16 00:48:41 rmind Exp $ */ +/* $NetBSD: fpu.c,v 1.36 2015/07/06 01:55:50 matt Exp $ */ /* * Copyright (C) 1996 Wolfgang Solfrank. @@ -32,7 +32,7 @@ */ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: fpu.c,v 1.35 2014/05/16 00:48:41 rmind Exp $); +__KERNEL_RCSID(0, $NetBSD: fpu.c,v 1.36 2015/07/06 01:55:50 matt Exp $); #include opt_multiprocessor.h @@ -84,15 +84,17 @@ fpu_state_load(lwp_t *l, u_int flags) memset(pcb-pcb_fpu, 0, sizeof(pcb-pcb_fpu)); } - const register_t msr = mfmsr(); -mtmsr((msr ~PSL_EE) | PSL_FP); - __asm volatile (isync); + if ((flags PCU_REENABLE) == 0) { + const register_t msr = mfmsr(); + mtmsr((msr ~PSL_EE) | PSL_FP); + __asm volatile (isync); - fpu_load_from_fpreg(pcb-pcb_fpu); - __asm volatile (sync); + fpu_load_from_fpreg(pcb-pcb_fpu); + __asm volatile (sync); - mtmsr(msr); - __asm volatile (isync); + mtmsr(msr); + __asm volatile (isync); + } curcpu()-ci_ev_fpusw.ev_count++; l-l_md.md_utf-tf_srr1 |= PSL_FP|(pcb-pcb_flags (PCB_FE0|PCB_FE1));
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: joerg Date: Thu Aug 7 09:08:09 UTC 2014 Modified Files: src/sys/arch/powerpc/powerpc: openfirm.c Log Message: Panic after openfirm, it is not supposed to return. To generate a diff of this commit: cvs rdiff -u -r1.24 -r1.25 src/sys/arch/powerpc/powerpc/openfirm.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/openfirm.c diff -u src/sys/arch/powerpc/powerpc/openfirm.c:1.24 src/sys/arch/powerpc/powerpc/openfirm.c:1.25 --- src/sys/arch/powerpc/powerpc/openfirm.c:1.24 Fri Feb 28 05:45:26 2014 +++ src/sys/arch/powerpc/powerpc/openfirm.c Thu Aug 7 09:08:09 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: openfirm.c,v 1.24 2014/02/28 05:45:26 matt Exp $ */ +/* $NetBSD: openfirm.c,v 1.25 2014/08/07 09:08:09 joerg Exp $ */ /* * Copyright (C) 1995, 1996 Wolfgang Solfrank. @@ -34,7 +34,7 @@ #include opt_multiprocessor.h #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: openfirm.c,v 1.24 2014/02/28 05:45:26 matt Exp $); +__KERNEL_RCSID(0, $NetBSD: openfirm.c,v 1.25 2014/08/07 09:08:09 joerg Exp $); #include sys/param.h #include sys/systm.h @@ -615,8 +615,8 @@ OF_boot(const char *bootspec) ofw_stack(); ofbcopy(bootspec, OF_buf, l + 1); args.bootspec = OF_buf; - if (openfirmware(args) == -1) - panic(OF_boot didn't); + openfirmware(args); + panic(OF_boot didn't); } void
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: joerg Date: Sat Aug 2 15:58:04 UTC 2014 Modified Files: src/sys/arch/powerpc/powerpc: fixup.c Log Message: Fix !DIAGNOSTIC build. To generate a diff of this commit: cvs rdiff -u -r1.9 -r1.10 src/sys/arch/powerpc/powerpc/fixup.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/fixup.c diff -u src/sys/arch/powerpc/powerpc/fixup.c:1.9 src/sys/arch/powerpc/powerpc/fixup.c:1.10 --- src/sys/arch/powerpc/powerpc/fixup.c:1.9 Fri Aug 1 21:57:22 2014 +++ src/sys/arch/powerpc/powerpc/fixup.c Sat Aug 2 15:58:04 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: fixup.c,v 1.9 2014/08/01 21:57:22 matt Exp $ */ +/* $NetBSD: fixup.c,v 1.10 2014/08/02 15:58:04 joerg Exp $ */ /*- * Copyright (c) 2010, 2011 The NetBSD Foundation, Inc. * All rights reserved. @@ -36,7 +36,7 @@ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: fixup.c,v 1.9 2014/08/01 21:57:22 matt Exp $); +__KERNEL_RCSID(0, $NetBSD: fixup.c,v 1.10 2014/08/02 15:58:04 joerg Exp $); #include sys/param.h #include sys/types.h @@ -121,10 +121,8 @@ powerpc_fixup_stubs(uint32_t *start, uin switch (i.i_any.i_opcd) { case OPC_integer_31: { const u_int rs = i.i_x.i_rs; -#ifdef DIAGNOSTIC const u_int ra = i.i_x.i_ra; const u_int rb = i.i_x.i_rb; -#endif switch (i.i_x.i_xo) { case OPC31_MFSPR: { #ifdef DIAGNOSTIC
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: matt Date: Fri Aug 1 21:57:22 UTC 2014 Modified Files: src/sys/arch/powerpc/powerpc: fixup.c Log Message: Deal with the code LLVM generates for stubs. To generate a diff of this commit: cvs rdiff -u -r1.8 -r1.9 src/sys/arch/powerpc/powerpc/fixup.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/fixup.c diff -u src/sys/arch/powerpc/powerpc/fixup.c:1.8 src/sys/arch/powerpc/powerpc/fixup.c:1.9 --- src/sys/arch/powerpc/powerpc/fixup.c:1.8 Mon Mar 3 15:36:36 2014 +++ src/sys/arch/powerpc/powerpc/fixup.c Fri Aug 1 21:57:22 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: fixup.c,v 1.8 2014/03/03 15:36:36 macallan Exp $ */ +/* $NetBSD: fixup.c,v 1.9 2014/08/01 21:57:22 matt Exp $ */ /*- * Copyright (c) 2010, 2011 The NetBSD Foundation, Inc. * All rights reserved. @@ -36,7 +36,7 @@ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: fixup.c,v 1.8 2014/03/03 15:36:36 macallan Exp $); +__KERNEL_RCSID(0, $NetBSD: fixup.c,v 1.9 2014/08/01 21:57:22 matt Exp $); #include sys/param.h #include sys/types.h @@ -144,6 +144,15 @@ powerpc_fixup_stubs(uint32_t *start, uin ctr = fixreg[rs]; break; } +case OPC31_OR: { +#ifdef DIAGNOSTIC + KASSERT(valid_mask (1 rs)); + KASSERT(valid_mask (1 rb)); +#endif + fixreg[ra] = fixreg[rs] | fixreg[rb]; + valid_mask |= 1 ra; + break; +} default: panic(%s: %p: unexpected insn 0x%08x, __func__, stub, i.i_int); @@ -176,7 +185,7 @@ powerpc_fixup_stubs(uint32_t *start, uin break; } case OPC_STW: { -KASSERT(i.i_d.i_rs == r_lr i.i_d.i_ra == 1); +KASSERT((i.i_d.i_rs == r_lr || i.i_d.i_rs == 31) i.i_d.i_ra == 1); break; } case OPC_STWU: { @@ -195,6 +204,11 @@ powerpc_fixup_stubs(uint32_t *start, uin fixup.jfi_real = fixup_addr2offset(ctr); break; } + case OPC_RLWINM: { +// LLVM emits these for bool operands. +// Ignore them. +break; + } default: { panic(%s: %p: unexpected insn 0x%08x, __func__, stub, i.i_int);
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: matt Date: Wed Jul 30 23:27:55 UTC 2014 Modified Files: src/sys/arch/powerpc/powerpc: locore_subr.S Log Message: Fix diagnostic trap to be correct. PSL_EE@l would be sign-extended and this could never match the result of the andi. before it. To generate a diff of this commit: cvs rdiff -u -r1.53 -r1.54 src/sys/arch/powerpc/powerpc/locore_subr.S Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/locore_subr.S diff -u src/sys/arch/powerpc/powerpc/locore_subr.S:1.53 src/sys/arch/powerpc/powerpc/locore_subr.S:1.54 --- src/sys/arch/powerpc/powerpc/locore_subr.S:1.53 Wed Jul 30 23:15:23 2014 +++ src/sys/arch/powerpc/powerpc/locore_subr.S Wed Jul 30 23:27:55 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: locore_subr.S,v 1.53 2014/07/30 23:15:23 joerg Exp $ */ +/* $NetBSD: locore_subr.S,v 1.54 2014/07/30 23:27:55 matt Exp $ */ /* * Copyright (c) 2001 Wasabi Systems, Inc. @@ -304,7 +304,7 @@ ENTRY_NOPROFILE(emptyidlespin) twnei %r4,IPL_NONE mfmsr %r5 andi. %r5,%r5,PSL_EE@l - tweqi %r5,PSL_EE@l + tweqi %r5,0 #endif blr/* CPUINIT needs a raw blr */
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: joerg Date: Tue Jul 29 16:19:45 UTC 2014 Modified Files: src/sys/arch/powerpc/powerpc: pio_subr.S trap_subr.S Log Message: cmpl wants four operands, so use the shorter cmplw instead. To generate a diff of this commit: cvs rdiff -u -r1.15 -r1.16 src/sys/arch/powerpc/powerpc/pio_subr.S cvs rdiff -u -r1.77 -r1.78 src/sys/arch/powerpc/powerpc/trap_subr.S Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/pio_subr.S diff -u src/sys/arch/powerpc/powerpc/pio_subr.S:1.15 src/sys/arch/powerpc/powerpc/pio_subr.S:1.16 --- src/sys/arch/powerpc/powerpc/pio_subr.S:1.15 Fri Feb 28 05:39:49 2014 +++ src/sys/arch/powerpc/powerpc/pio_subr.S Tue Jul 29 16:19:45 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: pio_subr.S,v 1.15 2014/02/28 05:39:49 matt Exp $ */ +/* $NetBSD: pio_subr.S,v 1.16 2014/07/29 16:19:45 joerg Exp $ */ /* * Copyright (c) 2003 Matt Thomas @@ -331,7 +331,7 @@ ENTRY(outs8) addi %r4,%r4,-1 /* pre-decrement */ 1: lbzu %r0,1(%r4) /* load and increment */ stb %r0,0(%r3) /* store */ - cmpl 0,%r4,%r5 /* at the end? */ + cmplw %r4,%r5 /* at the end? */ bne+ 1b /* nope, do another pass */ eieio /* memory barrier (reorder protection) */ DBGSYNC /* force exceptions */ @@ -357,7 +357,7 @@ ENTRY(outs16) addi %r4,%r4,-2 /* pre-decrement */ 1: lhzu %r0,2(%r4) /* load and increment */ sth %r0,0(%r3) /* store */ - cmpl 0,%r4,%r5 /* at the end? */ + cmplw %r4,%r5 /* at the end? */ bne+ 1b /* nope, do another pass */ eieio /* memory barrier (reorder protection) */ DBGSYNC /* force exceptions */ @@ -383,7 +383,7 @@ ENTRY(outs32) addi %r4,%r4,-4 /* pre-decrement */ 1: lwzu %r0,4(%r4) /* load and increment */ stw %r0,0(%r3) /* store */ - cmpl 0,%r4,%r5 /* at the end? */ + cmplw %r4,%r5 /* at the end? */ bne+ 1b /* nope, do another pass */ eieio /* memory barrier (reorder protection) */ DBGSYNC /* force exceptions */ @@ -409,7 +409,7 @@ ENTRY(outs64) addi %r4,%r4,-4 /* pre-decrement */ 1: ldu %r0,4(%r4) /* load and increment */ std %r0,0(%r3) /* store */ - cmpl 0,%r4,%r5 /* at the end? */ + cmplw %r4,%r5 /* at the end? */ bne+ 1b /* nope, do another pass */ eieio /* memory barrier (reorder protection) */ DBGSYNC /* force exceptions */ @@ -440,7 +440,7 @@ ENTRY(outs16rb) addi %r4,%r4,-2 /* pre-decrement */ 1: lwzu %r0,2(%r4) /* load and increment */ sthbrx %r0,0,%r3 /* store (byte-reversed) */ - cmpl 0,%r4,%r5 /* at the end? */ + cmplw %r4,%r5 /* at the end? */ bne+ 1b /* nope, do another pass */ eieio /* memory barrier (reorder protection) */ DBGSYNC /* force exceptions */ @@ -466,7 +466,7 @@ ENTRY(outs32rb) addi %r4,%r4,-4 /* pre-decrement */ 1: lwzu %r0,4(%r4) /* load and increment */ stwbrx %r0,0,%r3 /* store (byte-reversed) */ - cmpl 0,%r4,%r5 /* at the end? */ + cmplw %r4,%r5 /* at the end? */ bne+ 1b /* nope, do another pass */ eieio /* memory barrier (reorder protection) */ DBGSYNC /* force exceptions */ @@ -497,7 +497,7 @@ ENTRY(ins8) addi %r4,%r4,-1 /* pre-decrement */ 1: lbz %r0,0(%r3) /* load value */ stbu %r0,1(%r4) /* store and increment */ - cmpl 0,%r4,%r5 /* at the end? */ + cmplw %r4,%r5 /* at the end? */ bne+ 1b /* nope, do another pass */ eieio /* memory barrier (reorder protection) */ DBGSYNC /* force exceptions */ @@ -523,7 +523,7 @@ ENTRY(ins16) addi %r4,%r4,-2 /* pre-decrement */ 1: lhz %r0,0(%r3) /* load value */ sthu %r0,2(%r4) /* store and increment */ - cmpl 0,%r4,%r5 /* at the end? */ + cmplw %r4,%r5 /* at the end? */ bne+ 1b /* nope, do another pass */ eieio /* memory barrier (reorder protection) */ DBGSYNC /* force exceptions */ @@ -549,7 +549,7 @@ ENTRY(ins32) addi %r4,%r4,-4 /* pre-decrement */ 1: lwz %r0,0(%r3) /* load value */ stwu %r0,4(%r4) /* store and increment */ - cmpl 0,%r4,%r5 /* at the end? */ + cmplw %r4,%r5 /* at the end? */ bne+ 1b /* nope, do another pass */ eieio /* memory barrier (reorder protection) */ DBGSYNC /* force exceptions */ @@ -580,7 +580,7 @@ ENTRY(ins16rb) addi %r4,%r4,-2 /* pre-decrement */ 1: lhbrx %r0,0,%r3 /* load value (byte reversed) */ sthu %r0,2(%r4) /* store and increment */ - cmpl 0,%r4,%r5 /* at the end? */ + cmplw %r4,%r5 /* at the end? */ bne+ 1b /* nope, do another pass */ eieio /* memory barrier (reorder protection) */ DBGSYNC /* force exceptions */ @@ -605,7 +605,7 @@ ENTRY(ins32rb) addi %r4,%r4,-4 /* pre-decrement */ 1: lwbrx %r0,0,%r3 /* load value (byte reversed) */ stwu %r0,4(%r4) /* store and increment */ - cmpl 0,%r4,%r5 /* at the end? */ + cmplw %r4,%r5 /* at the end? */ bne+ 1b /* nope, do another pass */ eieio /* memory barrier (reorder protection) */ DBGSYNC /* force exceptions */ @@ -637,7 +637,7 @@ ENTRY(bswr1) sub %r3,%r3,%r8 1: lbzu %r0,1(%r6) /* load and increment */
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: joerg Date: Tue Jul 29 19:15:47 UTC 2014 Modified Files: src/sys/arch/powerpc/powerpc: locore_subr.S Log Message: Official PPC ISA documentation has no SP register, so use R1 directly. To generate a diff of this commit: cvs rdiff -u -r1.50 -r1.51 src/sys/arch/powerpc/powerpc/locore_subr.S Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/locore_subr.S diff -u src/sys/arch/powerpc/powerpc/locore_subr.S:1.50 src/sys/arch/powerpc/powerpc/locore_subr.S:1.51 --- src/sys/arch/powerpc/powerpc/locore_subr.S:1.50 Fri Aug 23 06:22:32 2013 +++ src/sys/arch/powerpc/powerpc/locore_subr.S Tue Jul 29 19:15:47 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: locore_subr.S,v 1.50 2013/08/23 06:22:32 matt Exp $ */ +/* $NetBSD: locore_subr.S,v 1.51 2014/07/29 19:15:47 joerg Exp $ */ /* * Copyright (c) 2001 Wasabi Systems, Inc. @@ -344,9 +344,9 @@ _ENTRY(softint_fast_dispatch) */ mflr %r0 streg %r0, CFRAME_LR(%r1) - stptru %sp, -CALLFRAMELEN(%sp) + stptru %r1, -CALLFRAMELEN(%r1) mfmsr %r0 - streg %r0, CFRAME_R31(%sp) + streg %r0, CFRAME_R31(%r1) /* * We need a 2nd callframe from which cpu_switchto will consume @@ -355,9 +355,9 @@ _ENTRY(softint_fast_dispatch) lis %r8, _C_LABEL(softint_cleanup)@ha addi %r8, %r8, _C_LABEL(softint_cleanup)@l streg %r8, CFRAME_LR(%r1) - stptru %sp, -CALLFRAMELEN(%sp) - streg %r30, CFRAME_R30(%sp) - streg %r31, CFRAME_R31(%sp) + stptru %r1, -CALLFRAMELEN(%r1) + streg %r30, CFRAME_R30(%r1) + streg %r31, CFRAME_R31(%r1) GET_CPUINFO(%r7) mr %r30, %r13 /* curlwp is now in r13 */
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: martin Date: Sun Apr 6 14:47:46 UTC 2014 Modified Files: src/sys/arch/powerpc/powerpc: procfs_machdep.c Log Message: Make it compilable To generate a diff of this commit: cvs rdiff -u -r1.8 -r1.9 src/sys/arch/powerpc/powerpc/procfs_machdep.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/procfs_machdep.c diff -u src/sys/arch/powerpc/powerpc/procfs_machdep.c:1.8 src/sys/arch/powerpc/powerpc/procfs_machdep.c:1.9 --- src/sys/arch/powerpc/powerpc/procfs_machdep.c:1.8 Sat Apr 5 18:44:32 2014 +++ src/sys/arch/powerpc/powerpc/procfs_machdep.c Sun Apr 6 14:47:46 2014 @@ -1,7 +1,7 @@ -/* $NetBSD: procfs_machdep.c,v 1.8 2014/04/05 18:44:32 christos Exp $ */ +/* $NetBSD: procfs_machdep.c,v 1.9 2014/04/06 14:47:46 martin Exp $ */ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: procfs_machdep.c,v 1.8 2014/04/05 18:44:32 christos Exp $); +__KERNEL_RCSID(0, $NetBSD: procfs_machdep.c,v 1.9 2014/04/06 14:47:46 martin Exp $); #include sys/param.h #include sys/systm.h @@ -22,7 +22,7 @@ __KERNEL_RCSID(0, $NetBSD: procfs_machd int procfs_getcpuinfstr(char *buf, size_t *len) { - *size_t = 0; + *len = 0; return 0; }
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: christos Date: Mon Mar 24 19:14:31 UTC 2014 Modified Files: src/sys/arch/powerpc/powerpc: powerpc_machdep.c Log Message: remove dup cpu_model sysctl; use the mi version in hw. To generate a diff of this commit: cvs rdiff -u -r1.68 -r1.69 src/sys/arch/powerpc/powerpc/powerpc_machdep.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/powerpc_machdep.c diff -u src/sys/arch/powerpc/powerpc/powerpc_machdep.c:1.68 src/sys/arch/powerpc/powerpc/powerpc_machdep.c:1.69 --- src/sys/arch/powerpc/powerpc/powerpc_machdep.c:1.68 Thu Mar 6 14:44:32 2014 +++ src/sys/arch/powerpc/powerpc/powerpc_machdep.c Mon Mar 24 15:14:31 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: powerpc_machdep.c,v 1.68 2014/03/06 19:44:32 matt Exp $ */ +/* $NetBSD: powerpc_machdep.c,v 1.69 2014/03/24 19:14:31 christos Exp $ */ /* * Copyright (C) 1995, 1996 Wolfgang Solfrank. @@ -32,7 +32,7 @@ */ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: powerpc_machdep.c,v 1.68 2014/03/06 19:44:32 matt Exp $); +__KERNEL_RCSID(0, $NetBSD: powerpc_machdep.c,v 1.69 2014/03/24 19:14:31 christos Exp $); #include opt_altivec.h #include opt_modular.h @@ -269,11 +269,6 @@ SYSCTL_SETUP(sysctl_machdep_setup, sysc #endif sysctl_createv(clog, 0, NULL, NULL, CTLFLAG_PERMANENT, - CTLTYPE_STRING, model, NULL, - NULL, 0, cpu_model, 0, - CTL_MACHDEP, CPU_MODEL, CTL_EOL); - sysctl_createv(clog, 0, NULL, NULL, - CTLFLAG_PERMANENT, CTLTYPE_STRING, booted_device, NULL, sysctl_machdep_booted_device, 0, NULL, 0, CTL_MACHDEP, CPU_BOOTED_DEVICE, CTL_EOL);
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: macallan Date: Tue Mar 18 14:34:31 UTC 2014 Modified Files: src/sys/arch/powerpc/powerpc: clock.c Log Message: split 601 and generic PowerPC timecounter code a bit more To generate a diff of this commit: cvs rdiff -u -r1.14 -r1.15 src/sys/arch/powerpc/powerpc/clock.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/clock.c diff -u src/sys/arch/powerpc/powerpc/clock.c:1.14 src/sys/arch/powerpc/powerpc/clock.c:1.15 --- src/sys/arch/powerpc/powerpc/clock.c:1.14 Mon Mar 3 15:36:36 2014 +++ src/sys/arch/powerpc/powerpc/clock.c Tue Mar 18 14:34:31 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: clock.c,v 1.14 2014/03/03 15:36:36 macallan Exp $ */ +/* $NetBSD: clock.c,v 1.15 2014/03/18 14:34:31 macallan Exp $ */ /* $OpenBSD: clock.c,v 1.3 1997/10/13 13:42:53 pefo Exp $ */ /* @@ -33,7 +33,7 @@ */ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: clock.c,v 1.14 2014/03/03 15:36:36 macallan Exp $); +__KERNEL_RCSID(0, $NetBSD: clock.c,v 1.15 2014/03/18 14:34:31 macallan Exp $); #include sys/param.h #include sys/kernel.h @@ -58,21 +58,33 @@ __KERNEL_RCSID(0, $NetBSD: clock.c,v 1. void decr_intr(struct clockframe *); void init_powerpc_tc(void); static u_int get_powerpc_timecount(struct timecounter *); +#ifdef PPC_OEA601 +static u_int get_601_timecount(struct timecounter *); +#endif uint32_t ticks_per_sec; uint32_t ns_per_tick; uint32_t ticks_per_intr = 0; +#ifdef PPC_OEA601 +static struct timecounter powerpc_601_timecounter = { + get_601_timecount, /* get_timecount */ + 0, /* no poll_pps */ + 0x7fff, /* counter_mask */ + 0, /* frequency */ + rtc, /* name */ + 100, /* quality */ + NULL, /* tc_priv */ + NULL /* tc_next */ +}; +#endif + static struct timecounter powerpc_timecounter = { get_powerpc_timecount, /* get_timecount */ 0, /* no poll_pps */ 0x7fff, /* counter_mask */ 0, /* frequency */ -#if PPC_OEA601 - rtc, /* name */ -#else mftb, /* name */ -#endif 100, /* quality */ NULL, /* tc_priv */ NULL /* tc_next */ @@ -122,7 +134,7 @@ void decr_intr(struct clockframe *cfp) { struct cpu_info * const ci = curcpu(); - int msr; + const register_t msr = mfmsr(); int pri; u_long tb; long ticks; @@ -163,13 +175,8 @@ decr_intr(struct clockframe *cfp) __asm volatile (mftb %0 : =r(tb)); ci-ci_lasttb = tb + ticks - ticks_per_intr; - - /* - * Reenable interrupts - */ - __asm volatile (mfmsr %0; ori %0, %0, %1; mtmsr %0 - : =r(msr) : K(PSL_EE)); - + ci-ci_idepth++; + mtmsr(msr | PSL_EE); /* * Do standard timer interrupt stuff. * Do softclock stuff only on the last iteration. @@ -177,8 +184,12 @@ decr_intr(struct clockframe *cfp) while (--nticks 0) hardclock(cfp); hardclock(cfp); + mtmsr(msr); + ci-ci_idepth--; } + mtmsr(msr | PSL_EE); splx(pri); + mtmsr(msr); } /* @@ -241,21 +252,42 @@ get_powerpc_timecount(struct timecounter __asm volatile (mfmsr %0; andi. %1,%0,%2; mtmsr %1 : =r(msr), =r(scratch) : K((u_short)~PSL_EE)); + + tb = (u_int)(mftb() 0x7fff); + mtmsr(msr); + + return tb; +} + #ifdef PPC_OEA601 - if ((mfpvr() 16) == MPC601) - tb = rtc_nanosecs(); - else -#endif - __asm volatile (mftb %0 : =r(tb)); +static u_int +get_601_timecount(struct timecounter *tc) +{ + u_long tb; + int msr, scratch; + + __asm volatile (mfmsr %0; andi. %1,%0,%2; mtmsr %1 + : =r(msr), =r(scratch) : K((u_short)~PSL_EE)); + + tb = rtc_nanosecs(); mtmsr(msr); return tb; } +#endif void init_powerpc_tc(void) { - /* from machdep initialization */ - powerpc_timecounter.tc_frequency = ticks_per_sec; - tc_init(powerpc_timecounter); + struct timecounter *tc; + +#ifdef PPC_OEA601 + if ((mfpvr() 16) == MPC601) { + tc = powerpc_601_timecounter; + } else +#endif + tc = powerpc_timecounter; + + tc-tc_frequency = ticks_per_sec; + tc_init(tc); }
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: macallan Date: Tue Mar 18 20:11:08 UTC 2014 Modified Files: src/sys/arch/powerpc/powerpc: clock.c Log Message: Can we use c99 field initializers here instead of comments?!? Yes, yes we can. To generate a diff of this commit: cvs rdiff -u -r1.15 -r1.16 src/sys/arch/powerpc/powerpc/clock.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/clock.c diff -u src/sys/arch/powerpc/powerpc/clock.c:1.15 src/sys/arch/powerpc/powerpc/clock.c:1.16 --- src/sys/arch/powerpc/powerpc/clock.c:1.15 Tue Mar 18 14:34:31 2014 +++ src/sys/arch/powerpc/powerpc/clock.c Tue Mar 18 20:11:08 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: clock.c,v 1.15 2014/03/18 14:34:31 macallan Exp $ */ +/* $NetBSD: clock.c,v 1.16 2014/03/18 20:11:08 macallan Exp $ */ /* $OpenBSD: clock.c,v 1.3 1997/10/13 13:42:53 pefo Exp $ */ /* @@ -33,7 +33,7 @@ */ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: clock.c,v 1.15 2014/03/18 14:34:31 macallan Exp $); +__KERNEL_RCSID(0, $NetBSD: clock.c,v 1.16 2014/03/18 20:11:08 macallan Exp $); #include sys/param.h #include sys/kernel.h @@ -68,26 +68,26 @@ uint32_t ticks_per_intr = 0; #ifdef PPC_OEA601 static struct timecounter powerpc_601_timecounter = { - get_601_timecount, /* get_timecount */ - 0, /* no poll_pps */ - 0x7fff, /* counter_mask */ - 0, /* frequency */ - rtc, /* name */ - 100, /* quality */ - NULL, /* tc_priv */ - NULL /* tc_next */ + .tc_get_timecount = get_601_timecount, + .tc_poll_pps = 0, + .tc_counter_mask = 0x7fff, + .tc_frequency = 0, + .tc_name = rtc, + .tc_quality = 100, + .tc_priv = NULL, + .tc_next = NULL }; #endif static struct timecounter powerpc_timecounter = { - get_powerpc_timecount, /* get_timecount */ - 0, /* no poll_pps */ - 0x7fff, /* counter_mask */ - 0, /* frequency */ - mftb, /* name */ - 100, /* quality */ - NULL, /* tc_priv */ - NULL /* tc_next */ + .tc_get_timecount = get_powerpc_timecount, + .tc_poll_pps = 0, + .tc_counter_mask = 0x7fff, + .tc_frequency = 0, + .tc_name = mftb, + .tc_quality = 100, + .tc_priv = NULL, + .tc_next = NULL }; /*
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: matt Date: Thu Mar 6 09:22:52 UTC 2014 Modified Files: src/sys/arch/powerpc/powerpc: kobj_machdep.c Log Message: Adapt to new elf_machdep.h Add limited ELF64 support. To generate a diff of this commit: cvs rdiff -u -r1.5 -r1.6 src/sys/arch/powerpc/powerpc/kobj_machdep.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/kobj_machdep.c diff -u src/sys/arch/powerpc/powerpc/kobj_machdep.c:1.5 src/sys/arch/powerpc/powerpc/kobj_machdep.c:1.6 --- src/sys/arch/powerpc/powerpc/kobj_machdep.c:1.5 Wed Jun 8 17:19:20 2011 +++ src/sys/arch/powerpc/powerpc/kobj_machdep.c Thu Mar 6 09:22:52 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: kobj_machdep.c,v 1.5 2011/06/08 17:19:20 matt Exp $ */ +/* $NetBSD: kobj_machdep.c,v 1.6 2014/03/06 09:22:52 matt Exp $ */ /*- * Copyright (c) 2008 The NetBSD Foundation, Inc. @@ -52,7 +52,7 @@ */ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: kobj_machdep.c,v 1.5 2011/06/08 17:19:20 matt Exp $); +__KERNEL_RCSID(0, $NetBSD: kobj_machdep.c,v 1.6 2014/03/06 09:22:52 matt Exp $); #define ELFSIZE ARCH_ELFSIZE @@ -66,6 +66,9 @@ int kobj_reloc(kobj_t ko, uintptr_t relocbase, const void *data, bool isrela, bool local) { +#ifdef _LP64 + Elf64_Half *wwhere; +#endif Elf_Addr *where; Elf32_Half *hwhere; Elf_Addr addr; @@ -80,12 +83,15 @@ kobj_reloc(kobj_t ko, uintptr_t relocbas rela = (const Elf_Rela *)data; where = (Elf_Addr *) (relocbase + rela-r_offset); hwhere = (Elf32_Half *) (relocbase + rela-r_offset); +#ifdef _LP64 + wwhere = (Elf64_Half *) (relocbase + rela-r_offset); +#endif addend = rela-r_addend; rtype = ELF_R_TYPE(rela-r_info); symidx = ELF_R_SYM(rela-r_info); switch (rtype) { - case R_PPC_NONE: + case R_PPC_NONE: break; case R_PPC_RELATIVE: /* word32 B + A */ @@ -100,12 +106,15 @@ kobj_reloc(kobj_t ko, uintptr_t relocbas addend -= relocbase + rela-r_offset; /* A -= P */ /* FALLTHROUGH */ - case R_PPC_32: /* word32 S + A */ - case R_PPC_16: /* half16* S + A */ - case R_PPC_16_LO: /* half16 #lo(S + A) */ - case R_PPC_16_HA: /* half16 #ha(S + A) */ - case R_PPC_16_HI: /* half16 #hi(S + A) */ - addr = kobj_sym_lookup(ko, symidx); +#ifdef _LP64 + case R_PPC_ADDR64: /* doubleword64 S + A */ +#endif + case R_PPC_ADDR32: /* word32 S + A */ + case R_PPC_ADDR16: /* half16* S + A */ + case R_PPC_ADDR16_LO: /* half16 #lo(S + A) */ + case R_PPC_ADDR16_HA: /* half16 #ha(S + A) */ + case R_PPC_ADDR16_HI: /* half16 #hi(S + A) */ + addr = kobj_sym_lookup(ko, symidx); if (addr == 0) return -1; @@ -123,34 +132,38 @@ kobj_reloc(kobj_t ko, uintptr_t relocbas break; default: - printf(kobj_reloc: unexpected relocation type %u\n, rtype); + printf(kobj_reloc: unexpected relocation type %u\n, rtype); return -1; } switch (rtype) { - case R_PPC_RELATIVE: /* word32 B + A */ case R_PPC_REL32: /* word32 S + A - P */ - case R_PPC_32: /* word32 S + A */ +#ifdef _LP64 + *wwhere = addend; + break; +#endif + case R_PPC_RELATIVE: /* doubleword64/word32 B + A */ + case R_PPC_ADDR32: /* doubleword64/word32 S + A */ *where = addend; break; case R_PPC_REL16: /* half16* (S + A - P) */ - case R_PPC_16: /* half16* S + A */ + case R_PPC_ADDR16: /* half16* S + A */ if ((int16_t) addend != addend) return -1; /* FALLTHROUGH */ case R_PPC_REL16_LO: /* half16 #lo(S + A - P) */ - case R_PPC_16_LO: /* half16 #lo(S + A) */ + case R_PPC_ADDR16_LO: /* half16 #lo(S + A) */ *hwhere = addend 0x; break; case R_PPC_REL16_HA: /* half16 #ha(S + A - P) */ - case R_PPC_16_HA: /* half16 #ha(S + A) */ + case R_PPC_ADDR16_HA: /* half16 #ha(S + A) */ addend += 0x8000; /* FALLTHROUGH */ case R_PPC_REL16_HI: /* half16 #hi(S + A - P) */ - case R_PPC_16_HI: /* half16 #hi(S + A) */ + case R_PPC_ADDR16_HI: /* half16 #hi(S + A) */ *hwhere = (addend 16) 0x; break; }
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: matt Date: Thu Mar 6 19:44:32 UTC 2014 Modified Files: src/sys/arch/powerpc/powerpc: powerpc_machdep.c Log Message: Fix PPC64 setregs To generate a diff of this commit: cvs rdiff -u -r1.67 -r1.68 src/sys/arch/powerpc/powerpc/powerpc_machdep.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/powerpc_machdep.c diff -u src/sys/arch/powerpc/powerpc/powerpc_machdep.c:1.67 src/sys/arch/powerpc/powerpc/powerpc_machdep.c:1.68 --- src/sys/arch/powerpc/powerpc/powerpc_machdep.c:1.67 Fri Feb 28 05:43:49 2014 +++ src/sys/arch/powerpc/powerpc/powerpc_machdep.c Thu Mar 6 19:44:32 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: powerpc_machdep.c,v 1.67 2014/02/28 05:43:49 matt Exp $ */ +/* $NetBSD: powerpc_machdep.c,v 1.68 2014/03/06 19:44:32 matt Exp $ */ /* * Copyright (C) 1995, 1996 Wolfgang Solfrank. @@ -32,7 +32,7 @@ */ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: powerpc_machdep.c,v 1.67 2014/02/28 05:43:49 matt Exp $); +__KERNEL_RCSID(0, $NetBSD: powerpc_machdep.c,v 1.68 2014/03/06 19:44:32 matt Exp $); #include opt_altivec.h #include opt_modular.h @@ -97,13 +97,13 @@ struct cpuset_info cpuset_info; * Set set up registers on exec. */ void -setregs(struct lwp *l, struct exec_package *pack, vaddr_t stack) +setregs(struct lwp *l, struct exec_package *epp, vaddr_t stack) { struct proc * const p = l-l_proc; struct trapframe * const tf = l-l_md.md_utf; struct pcb * const pcb = lwp_getpcb(l); struct ps_strings arginfo; - vaddr_t func = pack-ep_entry; + vaddr_t func = epp-ep_entry; memset(tf, 0, sizeof *tf); tf-tf_fixreg[1] = -roundup(-stack + 8, 16); @@ -133,20 +133,18 @@ setregs(struct lwp *l, struct exec_packa tf-tf_fixreg[5] = (register_t)arginfo.ps_envstr; tf-tf_fixreg[6] = 0; /* auxillary vector */ tf-tf_fixreg[7] = 0; /* termination vector */ - tf-tf_fixreg[8] = p-p_psstrp; /* NetBSD extension */ + tf-tf_fixreg[8] = p-p_psstrp; /* NetBSD extension */ #ifdef _LP64 - if (l-l_proc-p_emul == emul_netbsd) { - /* - * For native ELF64, entry point to the function - * descriptor which contains the real function address - * and its TOC base address. - */ - uintptr_t fdesc[3] = { [0] = func, [1] = 0, [2] = 0 }; - copyin((void *)func, fdesc, sizeof(fdesc)); - tf-tf_fixreg[2] = fdesc[1]; - func = fdesc[0]; - } + /* + * For native ELF64, entry point to the function + * descriptor which contains the real function address + * and its TOC base address. + */ + uintptr_t fdesc[3] = { [0] = func, [1] = 0, [2] = 0 }; + copyin((void *)func, fdesc, sizeof(fdesc)); + tf-tf_fixreg[2] = fdesc[1] + epp-ep_entryoffset; + func = fdesc[0] + epp-ep_entryoffset; #endif tf-tf_srr0 = func; tf-tf_srr1 = PSL_MBO | PSL_USERSET;
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: matt Date: Fri Feb 28 05:37:52 UTC 2014 Modified Files: src/sys/arch/powerpc/powerpc: netbsd32_sigcode.S Log Message: Use the right file. To generate a diff of this commit: cvs rdiff -u -r1.1 -r1.2 src/sys/arch/powerpc/powerpc/netbsd32_sigcode.S Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/netbsd32_sigcode.S diff -u src/sys/arch/powerpc/powerpc/netbsd32_sigcode.S:1.1 src/sys/arch/powerpc/powerpc/netbsd32_sigcode.S:1.2 --- src/sys/arch/powerpc/powerpc/netbsd32_sigcode.S:1.1 Sun Jan 19 00:00:11 2003 +++ src/sys/arch/powerpc/powerpc/netbsd32_sigcode.S Fri Feb 28 05:37:51 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: netbsd32_sigcode.S,v 1.1 2003/01/19 00:00:11 matt Exp $ */ +/* $NetBSD: netbsd32_sigcode.S,v 1.2 2014/02/28 05:37:51 matt Exp $ */ /* * Copyright (C) 1995, 1996 Wolfgang Solfrank. @@ -31,13 +31,11 @@ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#include sys/syscall.h #include compat/netbsd32/netbsd32_syscall.h -#define SIGCODE_NAME netbsd32_sigcode -#define ESIGCODE_NAME netbsd32_esigcode -#define SIGRETURN_NAME netbsd32_SYS_netbsd32___sigreturn14 -#define EXIT_NAME netbsd32_SYS_netbsd32_exit -#define SIGCALLFRAMESIZE 16 +#define SIGCODE_NAME netbsd32_sigcode +#define ESIGCODE_NAME netbsd32_esigcode +#define SIGRETURN_NAME NETBSD32_SYS_compat_16_netbsd32___sigreturn14 +#define EXIT_NAME NETBSD32_SYS_netbsd32_exit -#include sigcode.S +#include powerpc/powerpc/sigcode.S
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: matt Date: Fri Feb 28 05:38:15 UTC 2014 Modified Files: src/sys/arch/powerpc/powerpc: lock_stubs.S Log Message: Make 64-bit clean To generate a diff of this commit: cvs rdiff -u -r1.9 -r1.10 src/sys/arch/powerpc/powerpc/lock_stubs.S Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/lock_stubs.S diff -u src/sys/arch/powerpc/powerpc/lock_stubs.S:1.9 src/sys/arch/powerpc/powerpc/lock_stubs.S:1.10 --- src/sys/arch/powerpc/powerpc/lock_stubs.S:1.9 Sun Sep 23 06:05:32 2012 +++ src/sys/arch/powerpc/powerpc/lock_stubs.S Fri Feb 28 05:38:15 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: lock_stubs.S,v 1.9 2012/09/23 06:05:32 mrg Exp $ */ +/* $NetBSD: lock_stubs.S,v 1.10 2014/02/28 05:38:15 matt Exp $ */ /*- * Copyright (c) 2007 The NetBSD Foundation, Inc. @@ -53,7 +53,7 @@ ENTRY(_lock_cas) 1: lptrarx %r10,0,%r3 - cmpw %r10,%r4 + cmpptr %r10,%r4 bne- 2f stptrcx. %r5,0,%r3 bne- 1b @@ -71,7 +71,7 @@ ENTRY(_lock_cas) ENTRY(mutex_enter) 1: lptrarx %r10,0,%r3 - cmpwi %r10,0 + cmpptri %r10,0 bne- 2f stptrcx. %r13,0,%r3 bne- 1b @@ -88,7 +88,7 @@ ENTRY(mutex_exit) li %r7,0 1: lptrarx %r10,0,%r3 - cmpw %r10,%r13 + cmpptr %r10,%r13 bne- 2f stptrcx. %r7,0,%r3 bne- 1b @@ -123,7 +123,7 @@ ENTRY(rw_enter) ori %r7,%r13,RW_WRITE_LOCKED 2: lptrarx %r10,0,%r3 - cmpw %r10,%r9 + cmpptr %r10,%r9 bne- 3f stptrcx. %r7,0,%r3 bne- 2b @@ -148,7 +148,7 @@ ENTRY(rw_tryenter) ori %r7,%r13,RW_WRITE_LOCKED 2: lptrarx %r10,0,%r3 - cmpw %r10,%r9 + cmpptr %r10,%r9 bne- 3f stptrcx. %r7,0,%r3 bne- 2b @@ -179,7 +179,7 @@ ENTRY(rw_exit) ori %r9,%r13,RW_WRITE_LOCKED 2: lptrarx %r10,0,%r3 - cmpw %r10,%r9 + cmpptr %r10,%r9 bne- 3f stptrcx. %r7,0,%r3 bne- 2b
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: matt Date: Fri Feb 28 05:38:53 UTC 2014 Modified Files: src/sys/arch/powerpc/powerpc: fixup.c Log Message: Use register_t instead of int for register values. To generate a diff of this commit: cvs rdiff -u -r1.6 -r1.7 src/sys/arch/powerpc/powerpc/fixup.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/fixup.c diff -u src/sys/arch/powerpc/powerpc/fixup.c:1.6 src/sys/arch/powerpc/powerpc/fixup.c:1.7 --- src/sys/arch/powerpc/powerpc/fixup.c:1.6 Thu Nov 7 15:26:36 2013 +++ src/sys/arch/powerpc/powerpc/fixup.c Fri Feb 28 05:38:53 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: fixup.c,v 1.6 2013/11/07 15:26:36 nisimura Exp $ */ +/* $NetBSD: fixup.c,v 1.7 2014/02/28 05:38:53 matt Exp $ */ /*- * Copyright (c) 2010, 2011 The NetBSD Foundation, Inc. * All rights reserved. @@ -36,7 +36,7 @@ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: fixup.c,v 1.6 2013/11/07 15:26:36 nisimura Exp $); +__KERNEL_RCSID(0, $NetBSD: fixup.c,v 1.7 2014/02/28 05:38:53 matt Exp $); #include sys/param.h #include sys/types.h @@ -146,7 +146,7 @@ powerpc_fixup_stubs(uint32_t *start, uin case OPC_ADDIS: { const u_int rs = i.i_d.i_rs; const u_int ra = i.i_d.i_ra; -int d = i.i_d.i_d ((i.i_d.i_opcd 1) * 16); +register_t d = i.i_d.i_d ((i.i_d.i_opcd 1) * 16); if (ra) { KASSERT(valid_mask (1 ra)); d += fixreg[ra]; @@ -158,7 +158,7 @@ powerpc_fixup_stubs(uint32_t *start, uin case OPC_LWZ: { const u_int rs = i.i_d.i_rs; const u_int ra = i.i_d.i_ra; -int addr = i.i_d.i_d; +register_t addr = i.i_d.i_d; if (ra) { KASSERT(valid_mask (1 ra)); addr += fixreg[ra];
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: matt Date: Fri Feb 28 05:39:49 UTC 2014 Modified Files: src/sys/arch/powerpc/powerpc: pio_subr.S Log Message: Fix the 64-bit case To generate a diff of this commit: cvs rdiff -u -r1.14 -r1.15 src/sys/arch/powerpc/powerpc/pio_subr.S Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/pio_subr.S diff -u src/sys/arch/powerpc/powerpc/pio_subr.S:1.14 src/sys/arch/powerpc/powerpc/pio_subr.S:1.15 --- src/sys/arch/powerpc/powerpc/pio_subr.S:1.14 Fri Jul 1 18:59:19 2011 +++ src/sys/arch/powerpc/powerpc/pio_subr.S Fri Feb 28 05:39:49 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: pio_subr.S,v 1.14 2011/07/01 18:59:19 dyoung Exp $ */ +/* $NetBSD: pio_subr.S,v 1.15 2014/02/28 05:39:49 matt Exp $ */ /* * Copyright (c) 2003 Matt Thomas @@ -400,14 +400,14 @@ ENTRY(bswm8) add %r3,%r4,%r5 /* add offset to handle place in argument 0 */ mr %r4,%r6 /* move addr to argument 1 register */ mr %r5,%r7 /* move count to argument 2 register */ -ENTRY(outs32) +ENTRY(outs64) cmpdi %r5,0 /* len == 0? */ beqlr- /* return if len == 0 */ addi %r5,%r5,-1 /* len -= 1 */ sldi %r5,%r5,2 /* len *= 4 */ add %r5,%r5,%r4 /* len += src */ addi %r4,%r4,-4 /* pre-decrement */ -1: ldzu %r0,4(%r4) /* load and increment */ +1: ldu %r0,4(%r4) /* load and increment */ std %r0,0(%r3) /* store */ cmpl 0,%r4,%r5 /* at the end? */ bne+ 1b /* nope, do another pass */
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: matt Date: Fri Feb 28 05:41:21 UTC 2014 Modified Files: src/sys/arch/powerpc/powerpc: rtas.c Log Message: Use uintptr_t for ras_entry To generate a diff of this commit: cvs rdiff -u -r1.13 -r1.14 src/sys/arch/powerpc/powerpc/rtas.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/rtas.c diff -u src/sys/arch/powerpc/powerpc/rtas.c:1.13 src/sys/arch/powerpc/powerpc/rtas.c:1.14 --- src/sys/arch/powerpc/powerpc/rtas.c:1.13 Sun Jul 17 20:54:46 2011 +++ src/sys/arch/powerpc/powerpc/rtas.c Fri Feb 28 05:41:21 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: rtas.c,v 1.13 2011/07/17 20:54:46 joerg Exp $ */ +/* $NetBSD: rtas.c,v 1.14 2014/02/28 05:41:21 matt Exp $ */ /* * CHRP RTAS support routines @@ -9,7 +9,7 @@ */ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: rtas.c,v 1.13 2011/07/17 20:54:46 joerg Exp $); +__KERNEL_RCSID(0, $NetBSD: rtas.c,v 1.14 2014/02/28 05:41:21 matt Exp $); #include sys/param.h #include sys/systm.h @@ -101,7 +101,7 @@ rtas_attach(device_t parent, device_t se int ph = ca-ca_node; int ih; int rtas_size; - int rtas_entry; + uintptr_t rtas_entry; struct pglist pglist; char buf[4]; int i; @@ -157,8 +157,8 @@ rtas_attach(device_t parent, device_t se rtas0_softc = sc; - printf(: version %d, entry @pa 0x%x\n, sc-ra_version, - (unsigned) rtas_entry); + printf(: version %d, entry @pa 0x%PRIxPTR\n, sc-ra_version, + rtas_entry); /* * Initialise TODR support
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: matt Date: Fri Feb 28 05:41:59 UTC 2014 Modified Files: src/sys/arch/powerpc/powerpc: sigcode.S Log Message: Remove _LP64 since it's only used on 32-bit To generate a diff of this commit: cvs rdiff -u -r1.7 -r1.8 src/sys/arch/powerpc/powerpc/sigcode.S Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/sigcode.S diff -u src/sys/arch/powerpc/powerpc/sigcode.S:1.7 src/sys/arch/powerpc/powerpc/sigcode.S:1.8 --- src/sys/arch/powerpc/powerpc/sigcode.S:1.7 Mon Jan 17 08:23:56 2011 +++ src/sys/arch/powerpc/powerpc/sigcode.S Fri Feb 28 05:41:59 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: sigcode.S,v 1.7 2011/01/17 08:23:56 matt Exp $ */ +/* $NetBSD: sigcode.S,v 1.8 2014/02/28 05:41:59 matt Exp $ */ /* * Copyright (C) 1995, 1996 Wolfgang Solfrank. @@ -33,9 +33,9 @@ #include machine/asm.h #include machine/signal.h -#include sys/syscall.h #ifndef SIGCODE_NAME +#include sys/syscall.h #define SIGCODE_NAME sigcode #define ESIGCODE_NAME esigcode #define SIGRETURN_NAME SYS_compat_16___sigreturn14 @@ -45,12 +45,8 @@ #define SIGNAL_FRAMESIZE 0 #endif #ifndef SIGCALLFRAMESIZE -#ifdef _LP64 -#define SIGCALLFRAMESIZE 32 -#else #define SIGCALLFRAMESIZE 16 #endif -#endif /* * The following code gets copied to the top of the user stack on process
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: matt Date: Fri Feb 28 05:43:49 UTC 2014 Modified Files: src/sys/arch/powerpc/powerpc: powerpc_machdep.c Log Message: If execing a LP64 image, we need to read the function descriptor to get the entry point and the TOC base. (Do we need to fixup the TOC base?) To generate a diff of this commit: cvs rdiff -u -r1.66 -r1.67 src/sys/arch/powerpc/powerpc/powerpc_machdep.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/powerpc_machdep.c diff -u src/sys/arch/powerpc/powerpc/powerpc_machdep.c:1.66 src/sys/arch/powerpc/powerpc/powerpc_machdep.c:1.67 --- src/sys/arch/powerpc/powerpc/powerpc_machdep.c:1.66 Fri Nov 8 04:32:58 2013 +++ src/sys/arch/powerpc/powerpc/powerpc_machdep.c Fri Feb 28 05:43:49 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: powerpc_machdep.c,v 1.66 2013/11/08 04:32:58 nisimura Exp $ */ +/* $NetBSD: powerpc_machdep.c,v 1.67 2014/02/28 05:43:49 matt Exp $ */ /* * Copyright (C) 1995, 1996 Wolfgang Solfrank. @@ -32,7 +32,7 @@ */ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: powerpc_machdep.c,v 1.66 2013/11/08 04:32:58 nisimura Exp $); +__KERNEL_RCSID(0, $NetBSD: powerpc_machdep.c,v 1.67 2014/02/28 05:43:49 matt Exp $); #include opt_altivec.h #include opt_modular.h @@ -103,6 +103,7 @@ setregs(struct lwp *l, struct exec_packa struct trapframe * const tf = l-l_md.md_utf; struct pcb * const pcb = lwp_getpcb(l); struct ps_strings arginfo; + vaddr_t func = pack-ep_entry; memset(tf, 0, sizeof *tf); tf-tf_fixreg[1] = -roundup(-stack + 8, 16); @@ -134,7 +135,20 @@ setregs(struct lwp *l, struct exec_packa tf-tf_fixreg[7] = 0; /* termination vector */ tf-tf_fixreg[8] = p-p_psstrp; /* NetBSD extension */ - tf-tf_srr0 = pack-ep_entry; +#ifdef _LP64 + if (l-l_proc-p_emul == emul_netbsd) { + /* + * For native ELF64, entry point to the function + * descriptor which contains the real function address + * and its TOC base address. + */ + uintptr_t fdesc[3] = { [0] = func, [1] = 0, [2] = 0 }; + copyin((void *)func, fdesc, sizeof(fdesc)); + tf-tf_fixreg[2] = fdesc[1]; + func = fdesc[0]; + } +#endif + tf-tf_srr0 = func; tf-tf_srr1 = PSL_MBO | PSL_USERSET; #ifdef ALTIVEC tf-tf_vrsave = 0;
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: matt Date: Fri Feb 28 05:44:39 UTC 2014 Modified Files: src/sys/arch/powerpc/powerpc: ofw_machdep.c Log Message: Use PRIx64 To generate a diff of this commit: cvs rdiff -u -r1.24 -r1.25 src/sys/arch/powerpc/powerpc/ofw_machdep.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/ofw_machdep.c diff -u src/sys/arch/powerpc/powerpc/ofw_machdep.c:1.24 src/sys/arch/powerpc/powerpc/ofw_machdep.c:1.25 --- src/sys/arch/powerpc/powerpc/ofw_machdep.c:1.24 Wed Jun 12 15:11:08 2013 +++ src/sys/arch/powerpc/powerpc/ofw_machdep.c Fri Feb 28 05:44:39 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: ofw_machdep.c,v 1.24 2013/06/12 15:11:08 kiyohara Exp $ */ +/* $NetBSD: ofw_machdep.c,v 1.25 2014/02/28 05:44:39 matt Exp $ */ /* * Copyright (C) 1996 Wolfgang Solfrank. @@ -32,7 +32,7 @@ */ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: ofw_machdep.c,v 1.24 2013/06/12 15:11:08 kiyohara Exp $); +__KERNEL_RCSID(0, $NetBSD: ofw_machdep.c,v 1.25 2014/02/28 05:44:39 matt Exp $); #include sys/param.h #include sys/buf.h @@ -131,7 +131,7 @@ mem_regions(struct mem_region **memp, st #endif OFmem[memcnt].start = addr; OFmem[memcnt].size = size; - aprint_normal(mem region %d start=%llx size=%llx\n, + aprint_normal(mem region %d start=%PRIx64 size=%PRIx64\n, memcnt, addr, size); memcnt++; } @@ -194,7 +194,7 @@ mem_regions(struct mem_region **memp, st #endif OFavail[cnt].start = addr; OFavail[cnt].size = size; - aprint_normal(avail region %d start=%llx size=%llx\n, + aprint_normal(avail region %d start=%#PRIx64 size=%#PRIx64\n, cnt, addr, size); cnt++; }
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: matt Date: Fri Feb 28 05:45:26 UTC 2014 Modified Files: src/sys/arch/powerpc/powerpc: openfirm.c Log Message: Use uintptr_t to convert pointers. To generate a diff of this commit: cvs rdiff -u -r1.23 -r1.24 src/sys/arch/powerpc/powerpc/openfirm.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/openfirm.c diff -u src/sys/arch/powerpc/powerpc/openfirm.c:1.23 src/sys/arch/powerpc/powerpc/openfirm.c:1.24 --- src/sys/arch/powerpc/powerpc/openfirm.c:1.23 Fri Jan 17 09:09:40 2014 +++ src/sys/arch/powerpc/powerpc/openfirm.c Fri Feb 28 05:45:26 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: openfirm.c,v 1.23 2014/01/17 09:09:40 mrg Exp $ */ +/* $NetBSD: openfirm.c,v 1.24 2014/02/28 05:45:26 matt Exp $ */ /* * Copyright (C) 1995, 1996 Wolfgang Solfrank. @@ -34,7 +34,7 @@ #include opt_multiprocessor.h #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: openfirm.c,v 1.23 2014/01/17 09:09:40 mrg Exp $); +__KERNEL_RCSID(0, $NetBSD: openfirm.c,v 1.24 2014/02/28 05:45:26 matt Exp $); #include sys/param.h #include sys/systm.h @@ -699,13 +699,13 @@ OF_interpret(const char *cmd, int nargs, return -1; ofbcopy(cmd, OF_buf, len + 1); i = 0; - args.slots[i] = (uint32_t)OF_buf; + args.slots[i] = (uintptr_t)OF_buf; args.nargs = nargs + 1; args.nreturns = nreturns + 1; va_start(ap, nreturns); i++; while (i args.nargs) { - args.slots[i] = (uint32_t)va_arg(ap, uint32_t *); + args.slots[i] = (uintptr_t)va_arg(ap, uint32_t *); i++; }
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: mrg Date: Fri Jan 17 09:09:40 UTC 2014 Modified Files: src/sys/arch/powerpc/powerpc: openfirm.c Log Message: convert a failure to call OF for a reboot call into a panic() instead of a hard hang. To generate a diff of this commit: cvs rdiff -u -r1.22 -r1.23 src/sys/arch/powerpc/powerpc/openfirm.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/openfirm.c diff -u src/sys/arch/powerpc/powerpc/openfirm.c:1.22 src/sys/arch/powerpc/powerpc/openfirm.c:1.23 --- src/sys/arch/powerpc/powerpc/openfirm.c:1.22 Sun May 12 13:50:11 2013 +++ src/sys/arch/powerpc/powerpc/openfirm.c Fri Jan 17 09:09:40 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: openfirm.c,v 1.22 2013/05/12 13:50:11 macallan Exp $ */ +/* $NetBSD: openfirm.c,v 1.23 2014/01/17 09:09:40 mrg Exp $ */ /* * Copyright (C) 1995, 1996 Wolfgang Solfrank. @@ -34,7 +34,7 @@ #include opt_multiprocessor.h #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: openfirm.c,v 1.22 2013/05/12 13:50:11 macallan Exp $); +__KERNEL_RCSID(0, $NetBSD: openfirm.c,v 1.23 2014/01/17 09:09:40 mrg Exp $); #include sys/param.h #include sys/systm.h @@ -615,8 +615,8 @@ OF_boot(const char *bootspec) ofw_stack(); ofbcopy(bootspec, OF_buf, l + 1); args.bootspec = OF_buf; - openfirmware(args); - while (1); /* just in case */ + if (openfirmware(args) == -1) + panic(OF_boot didn't); } void
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: nisimura Date: Thu Nov 7 15:26:36 UTC 2013 Modified Files: src/sys/arch/powerpc/powerpc: fixup.c Log Message: move DIAGNOSTIC only variable inside #ifdef To generate a diff of this commit: cvs rdiff -u -r1.5 -r1.6 src/sys/arch/powerpc/powerpc/fixup.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/fixup.c diff -u src/sys/arch/powerpc/powerpc/fixup.c:1.5 src/sys/arch/powerpc/powerpc/fixup.c:1.6 --- src/sys/arch/powerpc/powerpc/fixup.c:1.5 Fri Jul 1 23:47:09 2011 +++ src/sys/arch/powerpc/powerpc/fixup.c Thu Nov 7 15:26:36 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: fixup.c,v 1.5 2011/07/01 23:47:09 matt Exp $ */ +/* $NetBSD: fixup.c,v 1.6 2013/11/07 15:26:36 nisimura Exp $ */ /*- * Copyright (c) 2010, 2011 The NetBSD Foundation, Inc. * All rights reserved. @@ -36,7 +36,7 @@ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: fixup.c,v 1.5 2011/07/01 23:47:09 matt Exp $); +__KERNEL_RCSID(0, $NetBSD: fixup.c,v 1.6 2013/11/07 15:26:36 nisimura Exp $); #include sys/param.h #include sys/types.h @@ -104,7 +104,9 @@ powerpc_fixup_stubs(uint32_t *start, uin register_t fixreg[32]; register_t ctr = 0; uint32_t valid_mask = (1 1); +#ifdef DIAGNOSTIC int r_lr = -1; +#endif for (; stub stub_end fixup.jfi_real == 0; stub++) { const union instr i = { .i_int = *stub }; @@ -120,9 +122,9 @@ powerpc_fixup_stubs(uint32_t *start, uin #ifdef DIAGNOSTIC const u_int spr = (rb 5) | ra; KASSERT(spr == SPR_LR); + r_lr = rs; #endif valid_mask |= (1 rs); - r_lr = rs; break; } case OPC31_MTSPR: {
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: nisimura Date: Fri Nov 8 04:32:58 UTC 2013 Modified Files: src/sys/arch/powerpc/powerpc: powerpc_machdep.c Log Message: use __diagused for KASSERT only variable. To generate a diff of this commit: cvs rdiff -u -r1.65 -r1.66 src/sys/arch/powerpc/powerpc/powerpc_machdep.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/powerpc_machdep.c diff -u src/sys/arch/powerpc/powerpc/powerpc_machdep.c:1.65 src/sys/arch/powerpc/powerpc/powerpc_machdep.c:1.66 --- src/sys/arch/powerpc/powerpc/powerpc_machdep.c:1.65 Fri Jul 19 06:43:20 2013 +++ src/sys/arch/powerpc/powerpc/powerpc_machdep.c Fri Nov 8 04:32:58 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: powerpc_machdep.c,v 1.65 2013/07/19 06:43:20 matt Exp $ */ +/* $NetBSD: powerpc_machdep.c,v 1.66 2013/11/08 04:32:58 nisimura Exp $ */ /* * Copyright (C) 1995, 1996 Wolfgang Solfrank. @@ -32,7 +32,7 @@ */ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: powerpc_machdep.c,v 1.65 2013/07/19 06:43:20 matt Exp $); +__KERNEL_RCSID(0, $NetBSD: powerpc_machdep.c,v 1.66 2013/11/08 04:32:58 nisimura Exp $); #include opt_altivec.h #include opt_modular.h @@ -319,7 +319,7 @@ startlwp(void *arg) ucontext_t * const uc = arg; lwp_t * const l = curlwp; struct trapframe * const tf = l-l_md.md_utf; - int error; + int error __diagused; error = cpu_setmcontext(l, uc-uc_mcontext, uc-uc_flags); KASSERT(error == 0);
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: matt Date: Fri Aug 30 21:29:29 UTC 2013 Modified Files: src/sys/arch/powerpc/powerpc: genassym.cf Log Message: Add CACHE_INFO_DCACHE_LINE_SIZE to assym.h To generate a diff of this commit: cvs rdiff -u -r1.9 -r1.10 src/sys/arch/powerpc/powerpc/genassym.cf Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/genassym.cf diff -u src/sys/arch/powerpc/powerpc/genassym.cf:1.9 src/sys/arch/powerpc/powerpc/genassym.cf:1.10 --- src/sys/arch/powerpc/powerpc/genassym.cf:1.9 Wed Aug 1 20:35:52 2012 +++ src/sys/arch/powerpc/powerpc/genassym.cf Fri Aug 30 21:29:29 2013 @@ -1,4 +1,4 @@ -# $NetBSD: genassym.cf,v 1.9 2012/08/01 20:35:52 matt Exp $ +# $NetBSD: genassym.cf,v 1.10 2013/08/30 21:29:29 matt Exp $ #- # Copyright (c) 2010, 2011 The NetBSD Foundation, Inc. @@ -171,6 +171,7 @@ define CI_IDLELWP offsetof(struct cpu_in define CI_MTX_COUNT offsetof(struct cpu_info, ci_mtx_count) define CI_MTX_OLDSPL offsetof(struct cpu_info, ci_mtx_oldspl) define CPU_CI offsetof(struct cpu_info, ci_ci) +define CACHE_INFO_DCACHE_LINE_SIZE offsetof(struct cache_info, dcache_line_size) define FB_PC offsetof(struct faultbuf, fb_pc) define FB_MSR offsetof(struct faultbuf, fb_msr)
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: matt Date: Fri Aug 23 06:22:32 UTC 2013 Modified Files: src/sys/arch/powerpc/powerpc: locore_subr.S Log Message: Simplify since we know curlwp is in %r13 To generate a diff of this commit: cvs rdiff -u -r1.49 -r1.50 src/sys/arch/powerpc/powerpc/locore_subr.S Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/locore_subr.S diff -u src/sys/arch/powerpc/powerpc/locore_subr.S:1.49 src/sys/arch/powerpc/powerpc/locore_subr.S:1.50 --- src/sys/arch/powerpc/powerpc/locore_subr.S:1.49 Wed Aug 1 20:35:52 2012 +++ src/sys/arch/powerpc/powerpc/locore_subr.S Fri Aug 23 06:22:32 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: locore_subr.S,v 1.49 2012/08/01 20:35:52 matt Exp $ */ +/* $NetBSD: locore_subr.S,v 1.50 2013/08/23 06:22:32 matt Exp $ */ /* * Copyright (c) 2001 Wasabi Systems, Inc. @@ -360,11 +360,7 @@ _ENTRY(softint_fast_dispatch) streg %r31, CFRAME_R31(%sp) GET_CPUINFO(%r7) -#ifdef PPC_BOOKE - mfsprg2 %r30 -#else - ldptr %r30, CI_CURLWP(%r7) -#endif /* PPC_BOOKE */ + mr %r30, %r13 /* curlwp is now in r13 */ #if defined (PPC_OEA) || defined (PPC_OEA64_BRIDGE) mfsr %r10,USER_SR /* save USER_SR for copyin/copyout */
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: matt Date: Fri Aug 23 06:24:21 UTC 2013 Modified Files: src/sys/arch/powerpc/powerpc: trap_subr.S Log Message: Avoid a few instructions since we know CURLWP is in %r13 To generate a diff of this commit: cvs rdiff -u -r1.76 -r1.77 src/sys/arch/powerpc/powerpc/trap_subr.S Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/trap_subr.S diff -u src/sys/arch/powerpc/powerpc/trap_subr.S:1.76 src/sys/arch/powerpc/powerpc/trap_subr.S:1.77 --- src/sys/arch/powerpc/powerpc/trap_subr.S:1.76 Thu Apr 11 17:13:15 2013 +++ src/sys/arch/powerpc/powerpc/trap_subr.S Fri Aug 23 06:24:21 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: trap_subr.S,v 1.76 2013/04/11 17:13:15 macallan Exp $ */ +/* $NetBSD: trap_subr.S,v 1.77 2013/08/23 06:24:21 matt Exp $ */ /* * Copyright (C) 1995, 1996 Wolfgang Solfrank. @@ -1068,13 +1068,7 @@ s_sctrap: isync addi %r3,%r1,FRAME_TF /* Call the appropriate syscall handler: */ -#if 0 - GET_CPUINFO(%r4) - ldptr %r4,CI_CURLWP(%r4) - ldptr %r4,L_PROC(%r4) -#else ldptr %r4,L_PROC(%r13) -#endif ldptr %r4,P_MD_SYSCALL(%r4) mtctr %r4 bctrl
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: matt Date: Fri Jul 19 06:43:21 UTC 2013 Modified Files: src/sys/arch/powerpc/powerpc: powerpc_machdep.c Log Message: cpuset_info is no longer volatile To generate a diff of this commit: cvs rdiff -u -r1.64 -r1.65 src/sys/arch/powerpc/powerpc/powerpc_machdep.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/powerpc_machdep.c diff -u src/sys/arch/powerpc/powerpc/powerpc_machdep.c:1.64 src/sys/arch/powerpc/powerpc/powerpc_machdep.c:1.65 --- src/sys/arch/powerpc/powerpc/powerpc_machdep.c:1.64 Fri Mar 16 07:41:55 2012 +++ src/sys/arch/powerpc/powerpc/powerpc_machdep.c Fri Jul 19 06:43:20 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: powerpc_machdep.c,v 1.64 2012/03/16 07:41:55 matt Exp $ */ +/* $NetBSD: powerpc_machdep.c,v 1.65 2013/07/19 06:43:20 matt Exp $ */ /* * Copyright (C) 1995, 1996 Wolfgang Solfrank. @@ -32,7 +32,7 @@ */ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: powerpc_machdep.c,v 1.64 2012/03/16 07:41:55 matt Exp $); +__KERNEL_RCSID(0, $NetBSD: powerpc_machdep.c,v 1.65 2013/07/19 06:43:20 matt Exp $); #include opt_altivec.h #include opt_modular.h @@ -90,7 +90,7 @@ const pcu_ops_t * const pcu_ops_md_defs[ }; #ifdef MULTIPROCESSOR -volatile struct cpuset_info cpuset_info; +struct cpuset_info cpuset_info; #endif /*
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: matt Date: Tue Jul 9 20:33:03 UTC 2013 Modified Files: src/sys/arch/powerpc/powerpc: bus_space.c Log Message: Fix typo (pa instead of va). To generate a diff of this commit: cvs rdiff -u -r1.35 -r1.36 src/sys/arch/powerpc/powerpc/bus_space.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/bus_space.c diff -u src/sys/arch/powerpc/powerpc/bus_space.c:1.35 src/sys/arch/powerpc/powerpc/bus_space.c:1.36 --- src/sys/arch/powerpc/powerpc/bus_space.c:1.35 Thu Apr 11 18:20:33 2013 +++ src/sys/arch/powerpc/powerpc/bus_space.c Tue Jul 9 20:33:03 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: bus_space.c,v 1.35 2013/04/11 18:20:33 macallan Exp $ */ +/* $NetBSD: bus_space.c,v 1.36 2013/07/09 20:33:03 matt Exp $ */ /*- * Copyright (c) 1996, 1997, 1998 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ */ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: bus_space.c,v 1.35 2013/04/11 18:20:33 macallan Exp $); +__KERNEL_RCSID(0, $NetBSD: bus_space.c,v 1.36 2013/07/09 20:33:03 matt Exp $); #define _POWERPC_BUS_SPACE_PRIVATE @@ -639,8 +639,8 @@ memio_unmap(bus_space_tag_t t, bus_space #ifdef PPC_OEA601 if ((mfpvr() 16) == MPC601) { register_t sr = iosrtable[va ADDR_SR_SHFT]; - if (SR601_VALID_P(sr) ((pa ADDR_SR_SHFT) == - ((pa + size - 1) ADDR_SR_SHFT))) { + if (SR601_VALID_P(sr) ((va ADDR_SR_SHFT) == + ((va + size - 1) ADDR_SR_SHFT))) { pa = va; va = 0; } else {
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: joerg Date: Thu Jul 4 22:59:58 UTC 2013 Modified Files: src/sys/arch/powerpc/powerpc: db_interface.c Log Message: One const is good enough. To generate a diff of this commit: cvs rdiff -u -r1.51 -r1.52 src/sys/arch/powerpc/powerpc/db_interface.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/db_interface.c diff -u src/sys/arch/powerpc/powerpc/db_interface.c:1.51 src/sys/arch/powerpc/powerpc/db_interface.c:1.52 --- src/sys/arch/powerpc/powerpc/db_interface.c:1.51 Wed Aug 1 21:30:24 2012 +++ src/sys/arch/powerpc/powerpc/db_interface.c Thu Jul 4 22:59:58 2013 @@ -1,8 +1,8 @@ -/* $NetBSD: db_interface.c,v 1.51 2012/08/01 21:30:24 matt Exp $ */ +/* $NetBSD: db_interface.c,v 1.52 2013/07/04 22:59:58 joerg Exp $ */ /* $OpenBSD: db_interface.c,v 1.2 1996/12/28 06:21:50 rahnds Exp $ */ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: db_interface.c,v 1.51 2012/08/01 21:30:24 matt Exp $); +__KERNEL_RCSID(0, $NetBSD: db_interface.c,v 1.52 2013/07/04 22:59:58 joerg Exp $); #define USERACC @@ -254,7 +254,7 @@ kdb_trap(int type, void *v) static void print_battranslation(struct bat *bat, unsigned int blidx) { - static const char const batsizes[][6] = { + static const char batsizes[][6] = { 128KB, 256KB, 512KB,
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: joerg Date: Thu Jul 4 23:00:23 UTC 2013 Modified Files: src/sys/arch/powerpc/powerpc: db_disasm.c Log Message: Don't use non-literal strings as format string. To generate a diff of this commit: cvs rdiff -u -r1.27 -r1.28 src/sys/arch/powerpc/powerpc/db_disasm.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/db_disasm.c diff -u src/sys/arch/powerpc/powerpc/db_disasm.c:1.27 src/sys/arch/powerpc/powerpc/db_disasm.c:1.28 --- src/sys/arch/powerpc/powerpc/db_disasm.c:1.27 Fri Mar 23 15:46:44 2012 +++ src/sys/arch/powerpc/powerpc/db_disasm.c Thu Jul 4 23:00:23 2013 @@ -1,8 +1,8 @@ -/* $NetBSD: db_disasm.c,v 1.27 2012/03/23 15:46:44 matt Exp $ */ +/* $NetBSD: db_disasm.c,v 1.28 2013/07/04 23:00:23 joerg Exp $ */ /* $OpenBSD: db_disasm.c,v 1.2 1996/12/28 06:21:48 rahnds Exp $ */ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: db_disasm.c,v 1.27 2012/03/23 15:46:44 matt Exp $); +__KERNEL_RCSID(0, $NetBSD: db_disasm.c,v 1.28 2013/07/04 23:00:23 joerg Exp $); #include sys/param.h #include sys/proc.h @@ -628,7 +628,7 @@ disasm_fields(const struct opcode *popco pstr += len; \ } while(0) #define APP_PSTR(fmt, arg) ADD_LEN(snprintf(pstr, slen, (fmt), (arg))) -#define APP_PSTRS(fmt) ADD_LEN(snprintf(pstr, slen, (fmt))) +#define APP_PSTRS(fmt) ADD_LEN(snprintf(pstr, slen, %s, (fmt))) pstr = disasm_str;
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: kiyohara Date: Wed Jun 12 15:11:08 UTC 2013 Modified Files: src/sys/arch/powerpc/powerpc: ofw_machdep.c Log Message: Fix lost avail memory over 256M. To generate a diff of this commit: cvs rdiff -u -r1.23 -r1.24 src/sys/arch/powerpc/powerpc/ofw_machdep.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/ofw_machdep.c diff -u src/sys/arch/powerpc/powerpc/ofw_machdep.c:1.23 src/sys/arch/powerpc/powerpc/ofw_machdep.c:1.24 --- src/sys/arch/powerpc/powerpc/ofw_machdep.c:1.23 Sun May 12 13:42:39 2013 +++ src/sys/arch/powerpc/powerpc/ofw_machdep.c Wed Jun 12 15:11:08 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: ofw_machdep.c,v 1.23 2013/05/12 13:42:39 macallan Exp $ */ +/* $NetBSD: ofw_machdep.c,v 1.24 2013/06/12 15:11:08 kiyohara Exp $ */ /* * Copyright (C) 1996 Wolfgang Solfrank. @@ -32,7 +32,7 @@ */ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: ofw_machdep.c,v 1.23 2013/05/12 13:42:39 macallan Exp $); +__KERNEL_RCSID(0, $NetBSD: ofw_machdep.c,v 1.24 2013/06/12 15:11:08 kiyohara Exp $); #include sys/param.h #include sys/buf.h @@ -70,7 +70,7 @@ void mem_regions(struct mem_region **memp, struct mem_region **availp) { const char *macrisc[] = {MacRISC, MacRISC2, MacRISC4, NULL}; - int hroot, hmem, i, cnt, regcnt, acells, scells; + int hroot, hmem, i, cnt, memcnt, regcnt, acells, scells; int numregs; uint32_t regs[OFMEM_REGIONS * 4]; /* 2 values + 2 for 64bit */ @@ -103,7 +103,7 @@ mem_regions(struct mem_region **memp, st /* move the data into OFmem */ memset(OFmem, 0, sizeof(OFmem)); - for (i = 0, cnt = 0; i numregs; i++) { + for (i = 0, memcnt = 0; i numregs; i++) { uint64_t addr, size; if (acells 1) @@ -129,11 +129,11 @@ mem_regions(struct mem_region **memp, st continue; } #endif - OFmem[cnt].start = addr; - OFmem[cnt].size = size; + OFmem[memcnt].start = addr; + OFmem[memcnt].size = size; aprint_normal(mem region %d start=%llx size=%llx\n, - cnt, addr, size); - cnt++; + memcnt, addr, size); + memcnt++; } DPRINTF(available\n); @@ -208,13 +208,13 @@ mem_regions(struct mem_region **memp, st #define AVAIL_THRESH (0x1000-1) if (((OFavail[cnt-1].start + OFavail[cnt-1].size + AVAIL_THRESH) ~AVAIL_THRESH) - (OFmem[regcnt-1].start + OFmem[regcnt-1].size)) { + (OFmem[memcnt-1].start + OFmem[memcnt-1].size)) { OFavail[cnt].start = (OFavail[cnt-1].start + OFavail[cnt-1].size + AVAIL_THRESH) ~AVAIL_THRESH; OFavail[cnt].size = - OFmem[regcnt-1].size - OFavail[cnt].start; + OFmem[memcnt-1].size - OFavail[cnt].start; aprint_normal(WARNING: add memory segment %lx - %lx, \nWARNING: which was not recognized by the Firmware.\n,
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: macallan Date: Sun May 12 13:50:11 UTC 2013 Modified Files: src/sys/arch/powerpc/powerpc: openfirm.c Log Message: add OF_quiesce() to shut down OF background tasks, needed on G5 from Phileas Fogg To generate a diff of this commit: cvs rdiff -u -r1.21 -r1.22 src/sys/arch/powerpc/powerpc/openfirm.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/openfirm.c diff -u src/sys/arch/powerpc/powerpc/openfirm.c:1.21 src/sys/arch/powerpc/powerpc/openfirm.c:1.22 --- src/sys/arch/powerpc/powerpc/openfirm.c:1.21 Sun Jul 17 20:54:46 2011 +++ src/sys/arch/powerpc/powerpc/openfirm.c Sun May 12 13:50:11 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: openfirm.c,v 1.21 2011/07/17 20:54:46 joerg Exp $ */ +/* $NetBSD: openfirm.c,v 1.22 2013/05/12 13:50:11 macallan Exp $ */ /* * Copyright (C) 1995, 1996 Wolfgang Solfrank. @@ -34,7 +34,7 @@ #include opt_multiprocessor.h #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: openfirm.c,v 1.21 2011/07/17 20:54:46 joerg Exp $); +__KERNEL_RCSID(0, $NetBSD: openfirm.c,v 1.22 2013/05/12 13:50:11 macallan Exp $); #include sys/param.h #include sys/systm.h @@ -722,6 +722,23 @@ OF_interpret(const char *cmd, int nargs, return status; } +void +OF_quiesce(void) +{ + static struct { + const char *name; + int nargs; + int nreturns; + } args = { + quiesce, + 0, + 0, + }; + + ofw_stack(); + openfirmware(args); +} + /* * This version of bcopy doesn't work for overlapping regions! */
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: macallan Date: Sun May 12 13:42:39 UTC 2013 Modified Files: src/sys/arch/powerpc/powerpc: ofw_machdep.c Log Message: cleanup mem_regions: - use different variables for / and /memory nodes - remove redundant OF_finddevice(/) - assume 32bit addresses/sizes in available on Apple hardware To generate a diff of this commit: cvs rdiff -u -r1.22 -r1.23 src/sys/arch/powerpc/powerpc/ofw_machdep.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/ofw_machdep.c diff -u src/sys/arch/powerpc/powerpc/ofw_machdep.c:1.22 src/sys/arch/powerpc/powerpc/ofw_machdep.c:1.23 --- src/sys/arch/powerpc/powerpc/ofw_machdep.c:1.22 Thu Apr 11 19:55:10 2013 +++ src/sys/arch/powerpc/powerpc/ofw_machdep.c Sun May 12 13:42:39 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: ofw_machdep.c,v 1.22 2013/04/11 19:55:10 macallan Exp $ */ +/* $NetBSD: ofw_machdep.c,v 1.23 2013/05/12 13:42:39 macallan Exp $ */ /* * Copyright (C) 1996 Wolfgang Solfrank. @@ -32,7 +32,7 @@ */ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: ofw_machdep.c,v 1.22 2013/04/11 19:55:10 macallan Exp $); +__KERNEL_RCSID(0, $NetBSD: ofw_machdep.c,v 1.23 2013/05/12 13:42:39 macallan Exp $); #include sys/param.h #include sys/buf.h @@ -69,31 +69,29 @@ static struct mem_region OFmem[OFMEM_REG void mem_regions(struct mem_region **memp, struct mem_region **availp) { - int phandle, i, cnt, regcnt, acells, scells; + const char *macrisc[] = {MacRISC, MacRISC2, MacRISC4, NULL}; + int hroot, hmem, i, cnt, regcnt, acells, scells; int numregs; uint32_t regs[OFMEM_REGIONS * 4]; /* 2 values + 2 for 64bit */ DPRINTF(calling mem_regions\n); /* determine acell size */ - if ((phandle = OF_finddevice(/)) == -1) + if ((hroot = OF_finddevice(/)) == -1) goto error; - cnt = OF_getprop(phandle, #address-cells, acells, sizeof(int)); + cnt = OF_getprop(hroot, #address-cells, acells, sizeof(int)); if (cnt = 0) acells = 1; /* determine scell size */ - if ((phandle = OF_finddevice(/)) == -1) - goto error; - cnt = OF_getprop(phandle, #size-cells, scells, sizeof(int)); + cnt = OF_getprop(hroot, #size-cells, scells, sizeof(int)); if (cnt = 0) scells = 1; /* Get memory */ - if ((phandle = OF_finddevice(/memory)) == -1) - goto error; - memset(regs, 0, sizeof(regs)); - regcnt = OF_getprop(phandle, reg, regs, + if ((hmem = OF_finddevice(/memory)) == -1) + goto error; + regcnt = OF_getprop(hmem, reg, regs, sizeof(regs[0]) * OFMEM_REGIONS * 4); if (regcnt = 0) goto error; @@ -142,7 +140,7 @@ mem_regions(struct mem_region **memp, st /* now do the same thing again, for the available counts */ memset(regs, 0, sizeof(regs)); - regcnt = OF_getprop(phandle, available, regs, + regcnt = OF_getprop(hmem, available, regs, sizeof(regs[0]) * OFMEM_REGIONS * 4); if (regcnt = 0) goto error; @@ -150,15 +148,15 @@ mem_regions(struct mem_region **memp, st DPRINTF(%08x %08x %08x %08x\n, regs[0], regs[1], regs[2], regs[3]); /* - * some(?) G5s have messed up 'available' properties which don't obey - * #address-cells. Try to detect this here. - * XXX this needs a better test + * according to comments in FreeBSD all Apple OF has 32bit values in + * available, no matter what the cell sizes are */ - if (((regcnt 2) % (acells + scells)) != 0) { - aprint_normal(messed up 'available' property detected\n); + if (of_compatible(hroot, macrisc) != -1) { + DPRINTF(this appears to be a mac...\n); acells = 1; + scells = 1; } - + /* how many mem regions did we get? */ numregs = regcnt / (sizeof(uint32_t) * (acells + scells)); DPRINTF(regcnt=%d num=%d acell=%d scell=%d\n, @@ -189,7 +187,7 @@ mem_regions(struct mem_region **memp, st #ifndef _LP64 if (addr 0x || size 0x || (addr + size) 0x) { - aprint_error(Base addr of %llx or size of %llx too + aprint_verbose(Base addr of %llx or size of %llx too large for 32 bit OS. Skipping., addr, size); continue; }
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: macallan Date: Thu Apr 25 00:11:35 UTC 2013 Modified Files: src/sys/arch/powerpc/powerpc: clock.c Log Message: make delay() work with _ARCH_PPC64 To generate a diff of this commit: cvs rdiff -u -r1.12 -r1.13 src/sys/arch/powerpc/powerpc/clock.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/clock.c diff -u src/sys/arch/powerpc/powerpc/clock.c:1.12 src/sys/arch/powerpc/powerpc/clock.c:1.13 --- src/sys/arch/powerpc/powerpc/clock.c:1.12 Mon Jun 20 05:50:39 2011 +++ src/sys/arch/powerpc/powerpc/clock.c Thu Apr 25 00:11:35 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: clock.c,v 1.12 2011/06/20 05:50:39 matt Exp $ */ +/* $NetBSD: clock.c,v 1.13 2013/04/25 00:11:35 macallan Exp $ */ /* $OpenBSD: clock.c,v 1.3 1997/10/13 13:42:53 pefo Exp $ */ /* @@ -33,7 +33,7 @@ */ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: clock.c,v 1.12 2011/06/20 05:50:39 matt Exp $); +__KERNEL_RCSID(0, $NetBSD: clock.c,v 1.13 2013/04/25 00:11:35 macallan Exp $); #include sys/param.h #include sys/kernel.h @@ -185,8 +185,11 @@ decr_intr(struct clockframe *cfp) void delay(unsigned int n) { - u_quad_t tb; - u_long tbh, tbl, scratch; +#ifdef _ARCH_PPC64 + uint64_t tb, scratch; +#else + uint64_t tb; + uint32_t tbh, tbl, scratch; #ifdef PPC_OEA601 if ((mfpvr() 16) == MPC601) { @@ -208,16 +211,23 @@ delay(unsigned int n) : r(rtc[0]), r(rtc[1]), n(SPR_RTCU_R), n(SPR_RTCL_R) : cr0); } else -#endif +#endif /* PPC_OEA601 */ +#endif /* !_ARCH_PPC64 */ { tb = mftb(); tb += (n * 1000 + ns_per_tick - 1) / ns_per_tick; +#ifdef _ARCH_PPC64 + __asm volatile (1: mftb %0; cmpld %0,%1; blt 1b; + : =r(scratch) : r(tb) + : cr0); +#else tbh = tb 32; tbl = tb; __asm volatile (1: mftbu %0; cmplw %0,%1; blt 1b; bgt 2f; mftb %0; cmplw %0,%2; blt 1b; 2: : =r(scratch) : r(tbh), r(tbl) : cr0); +#endif } }
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: macallan Date: Thu Apr 11 18:20:33 UTC 2013 Modified Files: src/sys/arch/powerpc/powerpc: bus_space.c Log Message: in memio_map() don't fail without trying to mapiodev() if we don't find a BAT mapping or don't have BATs now this works on G5 To generate a diff of this commit: cvs rdiff -u -r1.34 -r1.35 src/sys/arch/powerpc/powerpc/bus_space.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/bus_space.c diff -u src/sys/arch/powerpc/powerpc/bus_space.c:1.34 src/sys/arch/powerpc/powerpc/bus_space.c:1.35 --- src/sys/arch/powerpc/powerpc/bus_space.c:1.34 Wed Jul 18 17:41:59 2012 +++ src/sys/arch/powerpc/powerpc/bus_space.c Thu Apr 11 18:20:33 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: bus_space.c,v 1.34 2012/07/18 17:41:59 matt Exp $ */ +/* $NetBSD: bus_space.c,v 1.35 2013/04/11 18:20:33 macallan Exp $ */ /*- * Copyright (c) 1996, 1997, 1998 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ */ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: bus_space.c,v 1.34 2012/07/18 17:41:59 matt Exp $); +__KERNEL_RCSID(0, $NetBSD: bus_space.c,v 1.35 2013/04/11 18:20:33 macallan Exp $); #define _POWERPC_BUS_SPACE_PRIVATE @@ -598,20 +598,6 @@ memio_map(bus_space_tag_t t, bus_addr_t } #endif /* defined (PPC_OEA) || defined(PPC_OEA601) */ - if (t-pbs_extent != NULL) { -#if !defined(PPC_IBM4XX) - if (extent_flags == 0) { - extent_free(t-pbs_extent, bpa, size, EX_NOWAIT); -#ifdef DEBUG - printf(bus_space_map(%p[%x:%x], %#x, %#x) - failed: ENOMEM\n, - t, t-pbs_base, t-pbs_limit, bpa, size); -#endif - return (ENOMEM); - } -#endif - } - /* * Map this into the kernel pmap. */
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: macallan Date: Thu Apr 11 19:53:51 UTC 2013 Modified Files: src/sys/arch/powerpc/powerpc: ofw_machdep.c Log Message: KNF nits To generate a diff of this commit: cvs rdiff -u -r1.20 -r1.21 src/sys/arch/powerpc/powerpc/ofw_machdep.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/ofw_machdep.c diff -u src/sys/arch/powerpc/powerpc/ofw_machdep.c:1.20 src/sys/arch/powerpc/powerpc/ofw_machdep.c:1.21 --- src/sys/arch/powerpc/powerpc/ofw_machdep.c:1.20 Mon Apr 1 20:14:42 2013 +++ src/sys/arch/powerpc/powerpc/ofw_machdep.c Thu Apr 11 19:53:51 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: ofw_machdep.c,v 1.20 2013/04/01 20:14:42 macallan Exp $ */ +/* $NetBSD: ofw_machdep.c,v 1.21 2013/04/11 19:53:51 macallan Exp $ */ /* * Copyright (C) 1996 Wolfgang Solfrank. @@ -32,7 +32,7 @@ */ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: ofw_machdep.c,v 1.20 2013/04/01 20:14:42 macallan Exp $); +__KERNEL_RCSID(0, $NetBSD: ofw_machdep.c,v 1.21 2013/04/11 19:53:51 macallan Exp $); #include sys/param.h #include sys/buf.h @@ -99,13 +99,13 @@ mem_regions(struct mem_region **memp, st goto error; /* how many mem regions did we get? */ - numregs = regcnt / (sizeof(uint32_t)*(acells+scells)); + numregs = regcnt / (sizeof(uint32_t) * (acells + scells)); DPRINTF(regcnt=%d num=%d acell=%d scell=%d\n, regcnt, numregs, acells, scells); /* move the data into OFmem */ memset(OFmem, 0, sizeof(OFmem)); - for (i=0, cnt=0; i = numregs; i++) { + for (i = 0, cnt = 0; i = numregs; i++) { uint64_t addr, size; if (acells 1) @@ -168,7 +168,7 @@ mem_regions(struct mem_region **memp, st /* move the data into OFavail */ memset(OFavail, 0, sizeof(OFavail)); - for (i=0, cnt=0; i = numregs; i++) { + for (i = 0, cnt = 0; i = numregs; i++) { uint64_t addr, size; DPRINTF(%d\n, i); @@ -188,7 +188,7 @@ mem_regions(struct mem_region **memp, st continue; #ifndef _LP64 if (addr 0x || size 0x || - (addr+size) 0x) { + (addr + size) 0x) { aprint_error(Base addr of %llx or size of %llx too large for 32 bit OS. Skipping., addr, size); continue;
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: macallan Date: Thu Apr 11 19:55:10 UTC 2013 Modified Files: src/sys/arch/powerpc/powerpc: ofw_machdep.c Log Message: fix off-by-one noticed by Phileas Fogg To generate a diff of this commit: cvs rdiff -u -r1.21 -r1.22 src/sys/arch/powerpc/powerpc/ofw_machdep.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/ofw_machdep.c diff -u src/sys/arch/powerpc/powerpc/ofw_machdep.c:1.21 src/sys/arch/powerpc/powerpc/ofw_machdep.c:1.22 --- src/sys/arch/powerpc/powerpc/ofw_machdep.c:1.21 Thu Apr 11 19:53:51 2013 +++ src/sys/arch/powerpc/powerpc/ofw_machdep.c Thu Apr 11 19:55:10 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: ofw_machdep.c,v 1.21 2013/04/11 19:53:51 macallan Exp $ */ +/* $NetBSD: ofw_machdep.c,v 1.22 2013/04/11 19:55:10 macallan Exp $ */ /* * Copyright (C) 1996 Wolfgang Solfrank. @@ -32,7 +32,7 @@ */ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: ofw_machdep.c,v 1.21 2013/04/11 19:53:51 macallan Exp $); +__KERNEL_RCSID(0, $NetBSD: ofw_machdep.c,v 1.22 2013/04/11 19:55:10 macallan Exp $); #include sys/param.h #include sys/buf.h @@ -105,7 +105,7 @@ mem_regions(struct mem_region **memp, st /* move the data into OFmem */ memset(OFmem, 0, sizeof(OFmem)); - for (i = 0, cnt = 0; i = numregs; i++) { + for (i = 0, cnt = 0; i numregs; i++) { uint64_t addr, size; if (acells 1) @@ -168,7 +168,7 @@ mem_regions(struct mem_region **memp, st /* move the data into OFavail */ memset(OFavail, 0, sizeof(OFavail)); - for (i = 0, cnt = 0; i = numregs; i++) { + for (i = 0, cnt = 0; i numregs; i++) { uint64_t addr, size; DPRINTF(%d\n, i);
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: macallan Date: Mon Apr 1 20:14:43 UTC 2013 Modified Files: src/sys/arch/powerpc/powerpc: ofw_machdep.c Log Message: deal with /memory reg property which may contain 64bit addresses on G5 To generate a diff of this commit: cvs rdiff -u -r1.19 -r1.20 src/sys/arch/powerpc/powerpc/ofw_machdep.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/ofw_machdep.c diff -u src/sys/arch/powerpc/powerpc/ofw_machdep.c:1.19 src/sys/arch/powerpc/powerpc/ofw_machdep.c:1.20 --- src/sys/arch/powerpc/powerpc/ofw_machdep.c:1.19 Wed Feb 1 09:54:03 2012 +++ src/sys/arch/powerpc/powerpc/ofw_machdep.c Mon Apr 1 20:14:42 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: ofw_machdep.c,v 1.19 2012/02/01 09:54:03 matt Exp $ */ +/* $NetBSD: ofw_machdep.c,v 1.20 2013/04/01 20:14:42 macallan Exp $ */ /* * Copyright (C) 1996 Wolfgang Solfrank. @@ -32,7 +32,7 @@ */ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: ofw_machdep.c,v 1.19 2012/02/01 09:54:03 matt Exp $); +__KERNEL_RCSID(0, $NetBSD: ofw_machdep.c,v 1.20 2013/04/01 20:14:42 macallan Exp $); #include sys/param.h #include sys/buf.h @@ -50,6 +50,12 @@ __KERNEL_RCSID(0, $NetBSD: ofw_machdep. #include machine/powerpc.h #include machine/autoconf.h +#ifdef DEBUG +#define DPRINTF aprint_error +#else +#define DPRINTF while(0) printf +#endif + #define OFMEM_REGIONS 32 static struct mem_region OFmem[OFMEM_REGIONS + 1], OFavail[OFMEM_REGIONS + 3]; @@ -63,74 +69,136 @@ static struct mem_region OFmem[OFMEM_REG void mem_regions(struct mem_region **memp, struct mem_region **availp) { - int phandle, i, cnt, regcnt; - struct mem_region_avail { - paddr_t start; - paddr_t size; - } OFavail_G5[OFMEM_REGIONS + 3] __attribute((unused)); + int phandle, i, cnt, regcnt, acells, scells; + int numregs; + uint32_t regs[OFMEM_REGIONS * 4]; /* 2 values + 2 for 64bit */ + + DPRINTF(calling mem_regions\n); + /* determine acell size */ + if ((phandle = OF_finddevice(/)) == -1) + goto error; + cnt = OF_getprop(phandle, #address-cells, acells, sizeof(int)); + if (cnt = 0) + acells = 1; - /* - * Get memory. - */ + /* determine scell size */ + if ((phandle = OF_finddevice(/)) == -1) + goto error; + cnt = OF_getprop(phandle, #size-cells, scells, sizeof(int)); + if (cnt = 0) + scells = 1; + + /* Get memory */ if ((phandle = OF_finddevice(/memory)) == -1) goto error; - memset(OFmem, 0, sizeof OFmem); - regcnt = OF_getprop(phandle, reg, - OFmem, sizeof OFmem[0] * OFMEM_REGIONS); + memset(regs, 0, sizeof(regs)); + regcnt = OF_getprop(phandle, reg, regs, + sizeof(regs[0]) * OFMEM_REGIONS * 4); if (regcnt = 0) goto error; - /* Remove zero sized entry in the returned data. */ - regcnt /= sizeof OFmem[0]; - for (i = 0; i regcnt; ) - if (OFmem[i].size == 0) { - memmove(OFmem[i], OFmem[i + 1], -(regcnt - i) * sizeof OFmem[0]); - regcnt--; - } else - i++; - -#if defined (PMAC_G5) - /* XXXSL: the G5 implementation of OFW is defines the /memory reg/available - * properties differently. Try to fix it up here with minimal damage to the - * rest of the code - */ - { - int count; - memset(OFavail_G5, 0, sizeof OFavail_G5); - count = OF_getprop(phandle, available, - OFavail_G5, sizeof OFavail_G5[0] * OFMEM_REGIONS); - - if (count = 0) - goto error; - - count /= sizeof OFavail_G5[0]; - cnt = count * sizeof(OFavail[0]); - - for (i = 0; i count; i++ ) - { - OFavail[i].start_hi = 0; - OFavail[i].start = OFavail_G5[i].start; - OFavail[i].size = OFavail_G5[i].size; + /* how many mem regions did we get? */ + numregs = regcnt / (sizeof(uint32_t)*(acells+scells)); + DPRINTF(regcnt=%d num=%d acell=%d scell=%d\n, + regcnt, numregs, acells, scells); + + /* move the data into OFmem */ + memset(OFmem, 0, sizeof(OFmem)); + for (i=0, cnt=0; i = numregs; i++) { + uint64_t addr, size; + + if (acells 1) + memcpy(addr, regs[i * (acells + scells)], + sizeof(int32_t) * acells); + else + addr = regs[i * (acells + scells)]; + + if (scells 1) + memcpy(size, regs[i * (acells + scells) + acells], + sizeof(int32_t) * scells); + else + size = regs[i * (acells + scells) + acells]; + + /* skip entry of 0 size */ + if (size == 0) + continue; +#ifndef _LP64 + if (addr 0x || size 0x || + (addr + size) 0x) { + aprint_error(Base addr of %llx or size of %llx too + large for 32 bit OS. Skipping., addr, size); + continue; } - } -#else - memset(OFavail, 0, sizeof OFavail); - cnt = OF_getprop(phandle, available, - OFavail, sizeof OFavail[0] * OFMEM_REGIONS); #endif - if (cnt = 0) + OFmem[cnt].start = addr; + OFmem[cnt].size = size; + aprint_normal(mem region %d start=%llx size=%llx\n, + cnt, addr, size); + cnt++; + } + + DPRINTF(available\n); + + /* now do the same thing again, for the available counts */ + memset(regs, 0, sizeof(regs)); +
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: mrg Date: Sun Sep 23 06:05:32 UTC 2012 Modified Files: src/sys/arch/powerpc/powerpc: lock_stubs.S Log Message: correct some comments on #endif to match their #if. To generate a diff of this commit: cvs rdiff -u -r1.8 -r1.9 src/sys/arch/powerpc/powerpc/lock_stubs.S Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/lock_stubs.S diff -u src/sys/arch/powerpc/powerpc/lock_stubs.S:1.8 src/sys/arch/powerpc/powerpc/lock_stubs.S:1.9 --- src/sys/arch/powerpc/powerpc/lock_stubs.S:1.8 Sun Jun 5 16:52:26 2011 +++ src/sys/arch/powerpc/powerpc/lock_stubs.S Sun Sep 23 06:05:32 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: lock_stubs.S,v 1.8 2011/06/05 16:52:26 matt Exp $ */ +/* $NetBSD: lock_stubs.S,v 1.9 2012/09/23 06:05:32 mrg Exp $ */ /*- * Copyright (c) 2007 The NetBSD Foundation, Inc. @@ -96,7 +96,7 @@ ENTRY(mutex_exit) 2: b _C_LABEL(mutex_vector_exit) -#endif /* __HAVE_MUTEX_STUBS */ +#endif /* !LOCKDEBUG */ /* * void rw_enter(krwlock_t *krw, krw_t op); @@ -190,4 +190,4 @@ ENTRY(rw_exit) #endif /* __HAVE_RW_STUBS */ -#endif /* !LOCKDEBUG */ +#endif /* __HAVE_MUTEX_STUBS */
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: matt Date: Thu Aug 2 14:06:34 UTC 2012 Modified Files: src/sys/arch/powerpc/powerpc: trap.c Log Message: Also supprese printing fatal traps is the process is being debugged. To generate a diff of this commit: cvs rdiff -u -r1.147 -r1.148 src/sys/arch/powerpc/powerpc/trap.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/trap.c diff -u src/sys/arch/powerpc/powerpc/trap.c:1.147 src/sys/arch/powerpc/powerpc/trap.c:1.148 --- src/sys/arch/powerpc/powerpc/trap.c:1.147 Thu Aug 2 13:50:14 2012 +++ src/sys/arch/powerpc/powerpc/trap.c Thu Aug 2 14:06:34 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: trap.c,v 1.147 2012/08/02 13:50:14 matt Exp $ */ +/* $NetBSD: trap.c,v 1.148 2012/08/02 14:06:34 matt Exp $ */ /* * Copyright (C) 1995, 1996 Wolfgang Solfrank. @@ -32,7 +32,7 @@ */ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: trap.c,v 1.147 2012/08/02 13:50:14 matt Exp $); +__KERNEL_RCSID(0, $NetBSD: trap.c,v 1.148 2012/08/02 14:06:34 matt Exp $); #include opt_altivec.h #include opt_ddb.h @@ -246,6 +246,7 @@ trap(struct trapframe *tf) } ci-ci_ev_udsi_fatal.ev_count++; if (cpu_printfataltraps + (p-p_slflag PSL_TRACED) == 0 !sigismember(p-p_sigctx.ps_sigcatch, SIGSEGV)) { printf(trap: pid %d.%d (%s): user %s DSI trap @ %#lx by %#lx (DSISR %#x, err=%d)\n, @@ -308,6 +309,7 @@ trap(struct trapframe *tf) } ci-ci_ev_isi_fatal.ev_count++; if (cpu_printfataltraps + (p-p_slflag PSL_TRACED) == 0 !sigismember(p-p_sigctx.ps_sigcatch, SIGSEGV)) { printf(trap: pid %d.%d (%s): user ISI trap @ %#lx (SRR1=%#lx)\n, p-p_pid, l-l_lid, p-p_comm, @@ -335,6 +337,7 @@ trap(struct trapframe *tf) if (fix_unaligned(l, tf) != 0) { ci-ci_ev_ali_fatal.ev_count++; if (cpu_printfataltraps + (p-p_slflag PSL_TRACED) == 0 !sigismember(p-p_sigctx.ps_sigcatch, SIGBUS)) { printf(trap: pid %d.%d (%s): user ALI trap @ %#lx by %#lx (DSISR %#x)\n, @@ -360,6 +363,7 @@ trap(struct trapframe *tf) break; #else if (cpu_printfataltraps + (p-p_slflag PSL_TRACED) == 0 !sigismember(p-p_sigctx.ps_sigcatch, SIGILL)) { printf(trap: pid %d.%d (%s): user VEC trap @ %#lx (SRR1=%#lx)\n, @@ -377,6 +381,7 @@ trap(struct trapframe *tf) case EXC_MCHK|EXC_USER: ci-ci_ev_umchk.ev_count++; if (cpu_printfataltraps + (p-p_slflag PSL_TRACED) == 0 !sigismember(p-p_sigctx.ps_sigcatch, SIGBUS)) { printf(trap: pid %d (%s): user MCHK trap @ %#lx (SRR1=%#lx)\n, @@ -422,6 +427,7 @@ trap(struct trapframe *tf) } else ksi.ksi_code = ILL_ILLOPC; if (cpu_printfataltraps + (p-p_slflag PSL_TRACED) == 0 !sigismember(p-p_sigctx.ps_sigcatch, ksi.ksi_signo)) { printf(trap: pid %d.%d (%s): user PGM trap @
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: matt Date: Wed Aug 1 20:35:53 UTC 2012 Modified Files: src/sys/arch/powerpc/powerpc: genassym.cf locore_subr.S Log Message: Add diagnostic code emptyidlespin verifying that the current IPL is IPL_NONE and EE is set in the MSR. To generate a diff of this commit: cvs rdiff -u -r1.8 -r1.9 src/sys/arch/powerpc/powerpc/genassym.cf cvs rdiff -u -r1.48 -r1.49 src/sys/arch/powerpc/powerpc/locore_subr.S Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/genassym.cf diff -u src/sys/arch/powerpc/powerpc/genassym.cf:1.8 src/sys/arch/powerpc/powerpc/genassym.cf:1.9 --- src/sys/arch/powerpc/powerpc/genassym.cf:1.8 Mon Jun 20 08:18:28 2011 +++ src/sys/arch/powerpc/powerpc/genassym.cf Wed Aug 1 20:35:52 2012 @@ -1,4 +1,4 @@ -# $NetBSD: genassym.cf,v 1.8 2011/06/20 08:18:28 matt Exp $ +# $NetBSD: genassym.cf,v 1.9 2012/08/01 20:35:52 matt Exp $ #- # Copyright (c) 2010, 2011 The NetBSD Foundation, Inc. @@ -65,6 +65,7 @@ include powerpc/psl.h define IPL_HIGH IPL_HIGH define IPL_SCHED IPL_SCHED define IPL_VM IPL_VM +define IPL_NONE IPL_NONE define CPU_MAXNUM CPU_MAXNUM Index: src/sys/arch/powerpc/powerpc/locore_subr.S diff -u src/sys/arch/powerpc/powerpc/locore_subr.S:1.48 src/sys/arch/powerpc/powerpc/locore_subr.S:1.49 --- src/sys/arch/powerpc/powerpc/locore_subr.S:1.48 Sun Feb 19 21:06:23 2012 +++ src/sys/arch/powerpc/powerpc/locore_subr.S Wed Aug 1 20:35:52 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: locore_subr.S,v 1.48 2012/02/19 21:06:23 rmind Exp $ */ +/* $NetBSD: locore_subr.S,v 1.49 2012/08/01 20:35:52 matt Exp $ */ /* * Copyright (c) 2001 Wasabi Systems, Inc. @@ -295,7 +295,17 @@ switchto_restore: #endif ldreg %r0,CFRAME_LR(%r1) mtlr %r0 + blr/* CPUINIT needs a raw blr */ + ENTRY_NOPROFILE(emptyidlespin) +#ifdef DIAGNOSTIC + GET_CPUINFO(%r3) + lbz %r4,CI_CPL(%r3) + twnei %r4,IPL_NONE + mfmsr %r5 + andi. %r5,%r5,PSL_EE@l + tweqi %r5,PSL_EE@l +#endif blr/* CPUINIT needs a raw blr */ #ifdef __HAVE_FAST_SOFTINTS
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: matt Date: Fri Jul 27 04:17:07 UTC 2012 Modified Files: src/sys/arch/powerpc/powerpc: trap_subr.S Log Message: Use %r6 for setting PSL_RI, not %r30 since r30 needs to be preserved. To generate a diff of this commit: cvs rdiff -u -r1.74 -r1.75 src/sys/arch/powerpc/powerpc/trap_subr.S Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/trap_subr.S diff -u src/sys/arch/powerpc/powerpc/trap_subr.S:1.74 src/sys/arch/powerpc/powerpc/trap_subr.S:1.75 --- src/sys/arch/powerpc/powerpc/trap_subr.S:1.74 Wed Jul 18 16:56:51 2012 +++ src/sys/arch/powerpc/powerpc/trap_subr.S Fri Jul 27 04:17:07 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: trap_subr.S,v 1.74 2012/07/18 16:56:51 matt Exp $ */ +/* $NetBSD: trap_subr.S,v 1.75 2012/07/27 04:17:07 matt Exp $ */ /* * Copyright (C) 1995, 1996 Wolfgang Solfrank. @@ -1124,9 +1124,9 @@ _C_LABEL(sctrapexit): streg %r4,FRAME_CTR(%r1); \ streg %r11,FRAME_SRR0(%r1); \ streg %r12,FRAME_SRR1(%r1); \ - mfmsr %r30; \ - ori %r30,%r30,PSL_RI; /* turn on recovery interrupt */\ - mtmsr %r30; \ + mfmsr %r6; \ + ori %r6,%r6,PSL_RI; /* turn on recovery interrupt */\ + mtmsr %r6; \ SAVE_VRSAVE(%r1,%r6); \ SAVE_MQ(%r1,%r7)
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: matt Date: Fri Jul 20 14:21:20 UTC 2012 Modified Files: src/sys/arch/powerpc/powerpc: syscall.c Log Message: Use the new syscall approach by collapsing fancy/plain variants into just a single routine. To generate a diff of this commit: cvs rdiff -u -r1.50 -r1.51 src/sys/arch/powerpc/powerpc/syscall.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/syscall.c diff -u src/sys/arch/powerpc/powerpc/syscall.c:1.50 src/sys/arch/powerpc/powerpc/syscall.c:1.51 --- src/sys/arch/powerpc/powerpc/syscall.c:1.50 Sun Feb 19 21:06:24 2012 +++ src/sys/arch/powerpc/powerpc/syscall.c Fri Jul 20 14:21:20 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: syscall.c,v 1.50 2012/02/19 21:06:24 rmind Exp $ */ +/* $NetBSD: syscall.c,v 1.51 2012/07/20 14:21:20 matt Exp $ */ /* * Copyright (C) 2002 Matt Thomas @@ -61,7 +61,7 @@ #define EMULNAME(x) (x) #define EMULNAMEU(x) (x) -__KERNEL_RCSID(0, $NetBSD: syscall.c,v 1.50 2012/02/19 21:06:24 rmind Exp $); +__KERNEL_RCSID(0, $NetBSD: syscall.c,v 1.51 2012/07/20 14:21:20 matt Exp $); void child_return(void *arg) @@ -79,107 +79,15 @@ child_return(void *arg) } #endif -static void EMULNAME(syscall_plain)(struct trapframe *); - #include powerpc/spr.h -void -EMULNAME(syscall_plain)(struct trapframe *tf) -{ - struct lwp *l = curlwp; - struct proc *p = l-l_proc; - const struct sysent *callp; - size_t argsize; - register_t code; - register_t *params, rval[2]; - register_t args[10]; - int error; - int n; - - LWP_CACHE_CREDS(l, p); - curcpu()-ci_ev_scalls.ev_count++; - curcpu()-ci_data.cpu_nsyscall++; - - code = tf-tf_fixreg[0]; - params = tf-tf_fixreg + FIRSTARG; - n = NARGREG; - - { - switch (code) { - case EMULNAMEU(SYS_syscall): - /* - * code is first argument, - * followed by actual args. - */ - code = *params++; - n -= 1; - break; -#if !defined(COMPAT_LINUX) - case EMULNAMEU(SYS___syscall): - params++; - code = *params++; - n -= 2; - break; -#endif - default: - break; - } - - callp = p-p_emul-e_sysent + - (code (EMULNAMEU(SYS_NSYSENT)-1)); - } - - argsize = callp-sy_argsize; - - if (argsize n * sizeof(register_t)) { - memcpy(args, params, n * sizeof(register_t)); - error = copyin(MOREARGS(tf-tf_fixreg[1]), - args + n, - argsize - n * sizeof(register_t)); - if (error) - goto bad; - params = args; - } - - rval[0] = 0; - rval[1] = 0; - - error = sy_call(callp, l, params, rval); - - switch (error) { - case 0: - tf-tf_fixreg[FIRSTARG] = rval[0]; - tf-tf_fixreg[FIRSTARG + 1] = rval[1]; - tf-tf_cr = ~0x1000; - break; - case ERESTART: - /* - * Set user's pc back to redo the system call. - */ - tf-tf_srr0 -= 4; - break; - case EJUSTRETURN: - /* nothing to do */ - break; - default: - bad: - if (p-p_emul-e_errno) - error = p-p_emul-e_errno[error]; - tf-tf_fixreg[FIRSTARG] = error; - tf-tf_cr |= 0x1000; - break; - } - - userret(l, tf); -} - -static void EMULNAME(syscall_fancy)(struct trapframe *); +static void EMULNAME(syscall)(struct trapframe *); void -EMULNAME(syscall_fancy)(struct trapframe *tf) +EMULNAME(syscall)(struct trapframe *tf) { - struct lwp *l = curlwp; - struct proc *p = l-l_proc; + struct lwp * const l = curlwp; + struct proc * const p = l-l_proc; const struct sysent *callp; size_t argsize; register_t code; @@ -236,38 +144,43 @@ EMULNAME(syscall_fancy)(struct trapframe params = args; } - if ((error = trace_enter(realcode, params, callp-sy_narg)) != 0) - goto out; + if (!__predict_false(p-p_trace_enabled) + || __predict_false(callp-sy_flags SYCALL_INDIRECT) + || (error = trace_enter(realcode, params, callp-sy_narg)) == 0) { + rval[0] = 0; + rval[1] = 0; + error = sy_call(callp, l, params, rval); + } - rval[0] = 0; - rval[1] = 0; + if (__predict_false(p-p_trace_enabled) + !__predict_false(callp-sy_flags SYCALL_INDIRECT)) { + trace_exit(code, rval, error); + } - error = sy_call(callp, l, params, rval); -out: - switch (error) { - case 0: + if (__predict_true(error == 0)) { tf-tf_fixreg[FIRSTARG] = rval[0]; tf-tf_fixreg[FIRSTARG + 1] = rval[1]; tf-tf_cr = ~0x1000; - break; - case ERESTART: - /* - * Set user's pc back to redo the system call. - */ - tf-tf_srr0 -= 4; - break; - case EJUSTRETURN: - /* nothing to do */ - break; - default: - bad: - if (p-p_emul-e_errno) - error = p-p_emul-e_errno[error]; - tf-tf_fixreg[FIRSTARG] = error; - tf-tf_cr |= 0x1000; - break; + } else { + switch (error) { + case ERESTART: + /* + * Set user's pc back to redo the system call. + */ + tf-tf_srr0 -= 4; + break; + case EJUSTRETURN: + /* nothing to do */ + break; + default: + bad: + if (p-p_emul-e_errno) +error = p-p_emul-e_errno[error]; + tf-tf_fixreg[FIRSTARG] = error; + tf-tf_cr |= 0x1000; + break; + } } - trace_exit(realcode, rval,
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: matt Date: Wed Jul 18 16:56:51 UTC 2012 Modified Files: src/sys/arch/powerpc/powerpc: trap_subr.S Log Message: Add conditionals so this should work for the MPC8XX SoCs. Turn on PSL_RI in interrupts. To generate a diff of this commit: cvs rdiff -u -r1.73 -r1.74 src/sys/arch/powerpc/powerpc/trap_subr.S Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/trap_subr.S diff -u src/sys/arch/powerpc/powerpc/trap_subr.S:1.73 src/sys/arch/powerpc/powerpc/trap_subr.S:1.74 --- src/sys/arch/powerpc/powerpc/trap_subr.S:1.73 Wed Feb 1 05:25:58 2012 +++ src/sys/arch/powerpc/powerpc/trap_subr.S Wed Jul 18 16:56:51 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: trap_subr.S,v 1.73 2012/02/01 05:25:58 matt Exp $ */ +/* $NetBSD: trap_subr.S,v 1.74 2012/07/18 16:56:51 matt Exp $ */ /* * Copyright (C) 1995, 1996 Wolfgang Solfrank. @@ -79,6 +79,14 @@ ldreg t0,_C_LABEL(kernel_pmap_)+PM_STEG@l(t0); \ mtasr t0 +#elif defined(PPC_MPC8XX) + +/* + * PPC_MPC8XX don't have SRs to load + */ +#define RESTORE_USER_SRS(t0,t1) +#define RESTORE_KERN_SRS(t0,t1) + #else /* not OEA64 */ /* @@ -216,6 +224,7 @@ _C_LABEL(alitrap): #endif _C_LABEL(alisize) = .-_C_LABEL(alitrap) +#if !defined(PPC_MPC8XX) /* * Similar to the above for DSI * Has to handle BAT spills @@ -232,10 +241,11 @@ _C_LABEL(dsitrap): streg %r31,(CI_DISISAVE+CPUSAVE_R31)(%r1) /* save r31 */ mfsprg1 %r1 mfcr %r29 /* save CR */ - mfxer %r30 /* save XER */ - mtsprg2 %r30 /* in SPRG2 */ mfsrr1 %r31 /* test kernel mode */ mtcr %r31 +#if !defined(PPC_MPC8XX) + mfxer %r30 /* save XER */ + mtsprg2 %r30 /* in SPRG2 */ bt MSR_PR,1f /* branch if PSL_PR is set */ mfdar %r31 /* get fault address */ rlwinm %r31,%r31,3+(32-BAT_ADDR_SHIFT),BAT_ADDR_SHIFT-3,28 @@ -296,6 +306,7 @@ dsitrap_fix_dbat7: mfsprg1 %r1 RFI/* return to trapped code */ 1: +#endif /* !PPC_MPC8XX */ mflr %r28 /* save LR */ mtsprg1 %r1 /* save SP */ #if defined(DISTANT_KERNEL) @@ -307,6 +318,7 @@ dsitrap_fix_dbat7: bla disitrap #endif _C_LABEL(dsisize) = .-_C_LABEL(dsitrap) +#endif /* !PPC_MPC8XX */ #if defined(PPC_OEA601) /* @@ -444,7 +456,7 @@ _C_LABEL(decrint): #endif _C_LABEL(decrsize) = .-_C_LABEL(decrint) -#if !defined(PPC_OEA64) +#if !defined(PPC_OEA64) !defined(PPC_MPC8XX) /* * Now the tlb software load for 603 processors: * (Code essentially from the 603e User Manual, Chapter 5, but @@ -648,7 +660,7 @@ _C_LABEL(tlbdsmiss): ba EXC_DSI #endif _C_LABEL(tlbdsmsize) = .-_C_LABEL(tlbdsmiss) -#endif /* !defined(PPC_OEA64) */ +#endif /* !PPC_OEA64 !PPC_MPC8XX */ #if defined(DDB) || defined(KGDB) /* @@ -1112,6 +1124,9 @@ _C_LABEL(sctrapexit): streg %r4,FRAME_CTR(%r1); \ streg %r11,FRAME_SRR0(%r1); \ streg %r12,FRAME_SRR1(%r1); \ + mfmsr %r30; \ + ori %r30,%r30,PSL_RI; /* turn on recovery interrupt */\ + mtmsr %r30; \ SAVE_VRSAVE(%r1,%r6); \ SAVE_MQ(%r1,%r7) @@ -1337,5 +1352,7 @@ _C_LABEL(trapend): * All OEA have FPUs so include this too. Some OEA have AltiVec so include * that too. */ +#if !defined(PPC_MPC8XX) #include powerpc/powerpc/fpu_subr.S #include powerpc/oea/altivec_subr.S +#endif
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: matt Date: Wed Jul 18 17:41:59 UTC 2012 Modified Files: src/sys/arch/powerpc/powerpc: bus_space.c Log Message: Fix some boundary conditions (fence post errors). To generate a diff of this commit: cvs rdiff -u -r1.33 -r1.34 src/sys/arch/powerpc/powerpc/bus_space.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/bus_space.c diff -u src/sys/arch/powerpc/powerpc/bus_space.c:1.33 src/sys/arch/powerpc/powerpc/bus_space.c:1.34 --- src/sys/arch/powerpc/powerpc/bus_space.c:1.33 Thu Jul 5 03:02:53 2012 +++ src/sys/arch/powerpc/powerpc/bus_space.c Wed Jul 18 17:41:59 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: bus_space.c,v 1.33 2012/07/05 03:02:53 kiyohara Exp $ */ +/* $NetBSD: bus_space.c,v 1.34 2012/07/18 17:41:59 matt Exp $ */ /*- * Copyright (c) 1996, 1997, 1998 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ */ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: bus_space.c,v 1.33 2012/07/05 03:02:53 kiyohara Exp $); +__KERNEL_RCSID(0, $NetBSD: bus_space.c,v 1.34 2012/07/18 17:41:59 matt Exp $); #define _POWERPC_BUS_SPACE_PRIVATE @@ -400,7 +400,7 @@ bus_space_init(struct powerpc_bus_space { if (t-pbs_extent == NULL extent_name != NULL) { t-pbs_extent = extent_create(extent_name, t-pbs_base, - t-pbs_limit-1, storage, storage_size, + t-pbs_limit, storage, storage_size, EX_NOCOALESCE|EX_NOWAIT); if (t-pbs_extent == NULL) return ENOMEM; @@ -525,7 +525,7 @@ memio_map(bus_space_tag_t t, bus_addr_t size = _BUS_SPACE_STRIDE(t, size); bpa = _BUS_SPACE_STRIDE(t, bpa); - if (t-pbs_limit != 0 bpa + size t-pbs_limit) { + if (t-pbs_limit != 0 bpa + size - 1 t-pbs_limit) { #ifdef DEBUG printf(bus_space_map(%p[%x:%x], %#x, %#x) failed: EINVAL\n, t, t-pbs_base, t-pbs_limit, bpa, size); @@ -709,7 +709,7 @@ memio_alloc(bus_space_tag_t t, bus_addr_ if (t-pbs_extent == NULL) return ENOMEM; - if (t-pbs_limit != 0 rstart + size t-pbs_limit) { + if (t-pbs_limit != 0 rstart + size - 1 t-pbs_limit) { #ifdef DEBUG printf(%s(%p[%x:%x], %#x, %#x) failed: EINVAL\n, __func__, t, t-pbs_base, t-pbs_limit, rstart, size);
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: kiyohara Date: Thu Jul 5 03:02:53 UTC 2012 Modified Files: src/sys/arch/powerpc/powerpc: bus_space.c Log Message: Don't call extent_free() in memio_unmap(), if not call extent_alloc() with defined PPC_IBM4XX and extent_flags. To generate a diff of this commit: cvs rdiff -u -r1.32 -r1.33 src/sys/arch/powerpc/powerpc/bus_space.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/bus_space.c diff -u src/sys/arch/powerpc/powerpc/bus_space.c:1.32 src/sys/arch/powerpc/powerpc/bus_space.c:1.33 --- src/sys/arch/powerpc/powerpc/bus_space.c:1.32 Wed Feb 1 09:54:03 2012 +++ src/sys/arch/powerpc/powerpc/bus_space.c Thu Jul 5 03:02:53 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: bus_space.c,v 1.32 2012/02/01 09:54:03 matt Exp $ */ +/* $NetBSD: bus_space.c,v 1.33 2012/07/05 03:02:53 kiyohara Exp $ */ /*- * Copyright (c) 1996, 1997, 1998 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ */ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: bus_space.c,v 1.32 2012/02/01 09:54:03 matt Exp $); +__KERNEL_RCSID(0, $NetBSD: bus_space.c,v 1.33 2012/07/05 03:02:53 kiyohara Exp $); #define _POWERPC_BUS_SPACE_PRIVATE @@ -679,6 +679,9 @@ memio_unmap(bus_space_tag_t t, bus_space bpa = pa - t-pbs_offset; if (t-pbs_extent != NULL +#ifdef PPC_IBM4XX + extent_flags +#endif extent_free(t-pbs_extent, bpa, size, EX_NOWAIT | extent_flags)) { printf(memio_unmap: %s 0x%lx, size 0x%lx\n,
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: matt Date: Thu Jun 28 15:28:45 UTC 2012 Modified Files: src/sys/arch/powerpc/powerpc: vm_machdep.c Log Message: Don't panic if you can't allocate a contiguous stack for system threads. Just use a mapped a stack. To generate a diff of this commit: cvs rdiff -u -r1.96 -r1.97 src/sys/arch/powerpc/powerpc/vm_machdep.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/vm_machdep.c diff -u src/sys/arch/powerpc/powerpc/vm_machdep.c:1.96 src/sys/arch/powerpc/powerpc/vm_machdep.c:1.97 --- src/sys/arch/powerpc/powerpc/vm_machdep.c:1.96 Sat Mar 24 17:52:35 2012 +++ src/sys/arch/powerpc/powerpc/vm_machdep.c Thu Jun 28 15:28:44 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: vm_machdep.c,v 1.96 2012/03/24 17:52:35 matt Exp $ */ +/* $NetBSD: vm_machdep.c,v 1.97 2012/06/28 15:28:44 matt Exp $ */ /* * Copyright (C) 1995, 1996 Wolfgang Solfrank. @@ -32,7 +32,7 @@ */ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: vm_machdep.c,v 1.96 2012/03/24 17:52:35 matt Exp $); +__KERNEL_RCSID(0, $NetBSD: vm_machdep.c,v 1.97 2012/06/28 15:28:44 matt Exp $); #include opt_altivec.h #include opt_multiprocessor.h @@ -292,9 +292,7 @@ cpu_uarea_alloc(bool system) */ error = uvm_pglistalloc(USPACE, 0, ~0UL, 0, 0, pglist, 1, 1); if (error) { - if (!system) - return NULL; - panic(%s: uvm_pglistalloc failed: %d, __func__, error); + return NULL; } /*
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: matt Date: Sat Mar 24 17:52:35 UTC 2012 Modified Files: src/sys/arch/powerpc/powerpc: vm_machdep.c Log Message: When a stack is specified, make sure the stack has enough for a previous callframe in which the LR can be stored. (atf test t_clone:clone_basic now passes). To generate a diff of this commit: cvs rdiff -u -r1.95 -r1.96 src/sys/arch/powerpc/powerpc/vm_machdep.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/vm_machdep.c diff -u src/sys/arch/powerpc/powerpc/vm_machdep.c:1.95 src/sys/arch/powerpc/powerpc/vm_machdep.c:1.96 --- src/sys/arch/powerpc/powerpc/vm_machdep.c:1.95 Sun Feb 19 21:06:25 2012 +++ src/sys/arch/powerpc/powerpc/vm_machdep.c Sat Mar 24 17:52:35 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: vm_machdep.c,v 1.95 2012/02/19 21:06:25 rmind Exp $ */ +/* $NetBSD: vm_machdep.c,v 1.96 2012/03/24 17:52:35 matt Exp $ */ /* * Copyright (C) 1995, 1996 Wolfgang Solfrank. @@ -32,7 +32,7 @@ */ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: vm_machdep.c,v 1.95 2012/02/19 21:06:25 rmind Exp $); +__KERNEL_RCSID(0, $NetBSD: vm_machdep.c,v 1.96 2012/03/24 17:52:35 matt Exp $); #include opt_altivec.h #include opt_multiprocessor.h @@ -108,10 +108,13 @@ cpu_lwp_fork(struct lwp *l1, struct lwp *l2-l_md.md_utf = *l1-l_md.md_utf; /* - * If specified, give the child a different stack. + * If specified, give the child a different stack. Make sure to + * reserve enough at the top to store the previous LR. */ if (stack != NULL) { - l2-l_md.md_utf-tf_fixreg[1] = (register_t)stack + stacksize; + l2-l_md.md_utf-tf_fixreg[1] = + ((register_t)stack + stacksize - STACK_ALIGNBYTES) + ~STACK_ALIGNBYTES; } /*
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: matt Date: Fri Mar 23 15:46:44 UTC 2012 Modified Files: src/sys/arch/powerpc/powerpc: db_disasm.c Log Message: Decode isel{lt,gt,eq} To generate a diff of this commit: cvs rdiff -u -r1.26 -r1.27 src/sys/arch/powerpc/powerpc/db_disasm.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/db_disasm.c diff -u src/sys/arch/powerpc/powerpc/db_disasm.c:1.26 src/sys/arch/powerpc/powerpc/db_disasm.c:1.27 --- src/sys/arch/powerpc/powerpc/db_disasm.c:1.26 Thu Jan 28 19:01:32 2010 +++ src/sys/arch/powerpc/powerpc/db_disasm.c Fri Mar 23 15:46:44 2012 @@ -1,8 +1,8 @@ -/* $NetBSD: db_disasm.c,v 1.26 2010/01/28 19:01:32 phx Exp $ */ +/* $NetBSD: db_disasm.c,v 1.27 2012/03/23 15:46:44 matt Exp $ */ /* $OpenBSD: db_disasm.c,v 1.2 1996/12/28 06:21:48 rahnds Exp $ */ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: db_disasm.c,v 1.26 2010/01/28 19:01:32 phx Exp $); +__KERNEL_RCSID(0, $NetBSD: db_disasm.c,v 1.27 2012/03/23 15:46:44 matt Exp $); #include sys/param.h #include sys/proc.h @@ -215,6 +215,9 @@ const struct opcode opcodes_1f[] = { { mulhdu, 0xfc0007fe, 0x7c12, Op_D | Op_A | Op_B | Op_Rc }, { addc, 0xfc0003fe, 0x7c14, Op_D | Op_A | Op_B | Op_OE | Op_Rc }, { mulhwu, 0xfc0007fe, 0x7c16, Op_D | Op_A | Op_B | Op_Rc }, + { isellt, 0xfc0007ff, 0x7c1e, Op_D | Op_A | Op_B }, + { iselgt, 0xfc0007ff, 0x7c5e, Op_D | Op_A | Op_B }, + { iseleq, 0xfc0007ff, 0x7c9e, Op_D | Op_A | Op_B }, { mfcr, 0xfc0007fe, 0x7c26, Op_D }, { lwarx, 0xfc0007fe, 0x7c28, Op_D | Op_A | Op_B },
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: phx Date: Mon Feb 13 13:44:14 UTC 2012 Modified Files: src/sys/arch/powerpc/powerpc: vm_machdep.c Log Message: Allow all physical addresses from 0 to 0x in cpu_uarea_alloc(). This fixes a panic with amigappc, which has RAM starting at 0x0800. Ok by releng@. To generate a diff of this commit: cvs rdiff -u -r1.93 -r1.94 src/sys/arch/powerpc/powerpc/vm_machdep.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/vm_machdep.c diff -u src/sys/arch/powerpc/powerpc/vm_machdep.c:1.93 src/sys/arch/powerpc/powerpc/vm_machdep.c:1.94 --- src/sys/arch/powerpc/powerpc/vm_machdep.c:1.93 Sat Jan 28 16:30:23 2012 +++ src/sys/arch/powerpc/powerpc/vm_machdep.c Mon Feb 13 13:44:14 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: vm_machdep.c,v 1.93 2012/01/28 16:30:23 skrll Exp $ */ +/* $NetBSD: vm_machdep.c,v 1.94 2012/02/13 13:44:14 phx Exp $ */ /* * Copyright (C) 1995, 1996 Wolfgang Solfrank. @@ -32,7 +32,7 @@ */ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: vm_machdep.c,v 1.93 2012/01/28 16:30:23 skrll Exp $); +__KERNEL_RCSID(0, $NetBSD: vm_machdep.c,v 1.94 2012/02/13 13:44:14 phx Exp $); #include opt_altivec.h #include opt_multiprocessor.h @@ -295,7 +295,7 @@ cpu_uarea_alloc(bool system) * Allocate a new physically contiguous uarea which can be * direct-mapped. */ - error = uvm_pglistalloc(USPACE, 0, ptoa(physmem), 0, 0, pglist, 1, 1); + error = uvm_pglistalloc(USPACE, 0, ~0UL, 0, 0, pglist, 1, 1); if (error) { if (!system) return NULL;
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: matt Date: Wed Feb 1 09:51:01 UTC 2012 Modified Files: src/sys/arch/powerpc/powerpc: db_interface.c Log Message: Need runtime checks for mach mmu command. To generate a diff of this commit: cvs rdiff -u -r1.49 -r1.50 src/sys/arch/powerpc/powerpc/db_interface.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/db_interface.c diff -u src/sys/arch/powerpc/powerpc/db_interface.c:1.49 src/sys/arch/powerpc/powerpc/db_interface.c:1.50 --- src/sys/arch/powerpc/powerpc/db_interface.c:1.49 Wed Feb 1 05:25:58 2012 +++ src/sys/arch/powerpc/powerpc/db_interface.c Wed Feb 1 09:51:00 2012 @@ -1,8 +1,8 @@ -/* $NetBSD: db_interface.c,v 1.49 2012/02/01 05:25:58 matt Exp $ */ +/* $NetBSD: db_interface.c,v 1.50 2012/02/01 09:51:00 matt Exp $ */ /* $OpenBSD: db_interface.c,v 1.2 1996/12/28 06:21:50 rahnds Exp $ */ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: db_interface.c,v 1.49 2012/02/01 05:25:58 matt Exp $); +__KERNEL_RCSID(0, $NetBSD: db_interface.c,v 1.50 2012/02/01 09:51:00 matt Exp $); #define USERACC @@ -343,6 +343,9 @@ db_show_bat(db_expr_t addr, bool have_ad u_int i; u_int maxbat = (oeacpufeat OEACPU_HIGHBAT) ? 8 : 4; + if (oeacpufeat OEACPU_NOBAT) + return; + cpuvers = mfpvr() 16; ibat[0].batu = mfspr(SPR_IBAT0U); @@ -406,26 +409,27 @@ static void db_show_mmu(db_expr_t addr, bool have_addr, db_expr_t count, const char *modif) { paddr_t sdr1; -#if !defined(PPC_OEA64) !defined(PPC_OEA64_BRIDGE) - register_t sr; - vaddr_t saddr; - int i; -#endif __asm volatile (mfsdr1 %0 : =r(sdr1)); db_printf(sdr1\t\t0x%08lx\n, sdr1); #if defined(PPC_OEA64) || defined(PPC_OEA64_BRIDGE) - __asm volatile (mfasr %0 : =r(sdr1)); - db_printf(asr\t\t0x%08lx\n, sdr1); -#else - saddr = 0; - for (i = 0; i= 0xf; i++) { - if ((i 3) == 0) - db_printf(sr%d-%d\t\t, i, i+3); - __asm volatile (mfsrin %0,%1 : =r(sr) : r(saddr)); - db_printf(0x%08lx %c, sr, (i3) == 3 ? '\n' : ' '); - saddr += 1 ADDR_SR_SHFT; + if (oeacpufeat (OEACPU_64|OEACPU_64_BRIDGE)) { + __asm volatile (mfasr %0 : =r(sdr1)); + db_printf(asr\t\t0x%08lx\n, sdr1); + } +#endif +#if defined(PPC_OEA) || defined(PPC_OEA64_BRIDGE) + if ((oeacpufeat OEACPU_64) == 0) { + vaddr_t saddr = 0; + for (u_int i = 0; i = 0xf; i++) { + register_t sr; + if ((i 3) == 0) +db_printf(sr%d-%d\t\t, i, i+3); + __asm volatile (mfsrin %0,%1 : =r(sr) : r(saddr)); + db_printf(0x%08lx %c, sr, (i3) == 3 ? '\n' : ' '); + saddr += 1 ADDR_SR_SHFT; + } } #endif }
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: matt Date: Mon Jan 30 23:34:15 UTC 2012 Modified Files: src/sys/arch/powerpc/powerpc: bus_dma.c Log Message: Use ANSI prototype for _bus_dmamem_alloc_range. Caught when compiling with -Wold-style-definition To generate a diff of this commit: cvs rdiff -u -r1.44 -r1.45 src/sys/arch/powerpc/powerpc/bus_dma.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/bus_dma.c diff -u src/sys/arch/powerpc/powerpc/bus_dma.c:1.44 src/sys/arch/powerpc/powerpc/bus_dma.c:1.45 --- src/sys/arch/powerpc/powerpc/bus_dma.c:1.44 Tue Jul 19 19:55:23 2011 +++ src/sys/arch/powerpc/powerpc/bus_dma.c Mon Jan 30 23:34:15 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: bus_dma.c,v 1.44 2011/07/19 19:55:23 matt Exp $ */ +/* $NetBSD: bus_dma.c,v 1.45 2012/01/30 23:34:15 matt Exp $ */ /*- * Copyright (c) 1996, 1997, 1998 The NetBSD Foundation, Inc. @@ -32,7 +32,7 @@ #define _POWERPC_BUS_DMA_PRIVATE #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: bus_dma.c,v 1.44 2011/07/19 19:55:23 matt Exp $); +__KERNEL_RCSID(0, $NetBSD: bus_dma.c,v 1.45 2012/01/30 23:34:15 matt Exp $); #include sys/param.h #include sys/systm.h @@ -701,16 +701,17 @@ _bus_dmamem_mmap(bus_dma_tag_t t, bus_dm * Called by DMA-safe memory allocation methods. */ int -_bus_dmamem_alloc_range(t, size, alignment, boundary, segs, nsegs, rsegs, -flags, low, high) - bus_dma_tag_t t; - bus_size_t size, alignment, boundary; - bus_dma_segment_t *segs; - int nsegs; - int *rsegs; - int flags; - paddr_t low; - paddr_t high; +_bus_dmamem_alloc_range( + bus_dma_tag_t t, + bus_size_t size, + bus_size_t alignment, + bus_size_t boundary, + bus_dma_segment_t *segs, + int nsegs, + int *rsegs, + int flags, + paddr_t low, + paddr_t high) { paddr_t curaddr, lastaddr; struct vm_page *m;
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: phx Date: Sat Dec 17 19:34:07 UTC 2011 Modified Files: src/sys/arch/powerpc/powerpc: bus_space.c Log Message: Allow defining a bus space with pbs_limit=0, which will have the effect to create a space which ends with 0x. This is needed, because pbs_limit=0x ends the space with 0xfffe. To generate a diff of this commit: cvs rdiff -u -r1.28 -r1.29 src/sys/arch/powerpc/powerpc/bus_space.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/bus_space.c diff -u src/sys/arch/powerpc/powerpc/bus_space.c:1.28 src/sys/arch/powerpc/powerpc/bus_space.c:1.29 --- src/sys/arch/powerpc/powerpc/bus_space.c:1.28 Thu Jun 30 00:53:00 2011 +++ src/sys/arch/powerpc/powerpc/bus_space.c Sat Dec 17 19:34:07 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: bus_space.c,v 1.28 2011/06/30 00:53:00 matt Exp $ */ +/* $NetBSD: bus_space.c,v 1.29 2011/12/17 19:34:07 phx Exp $ */ /*- * Copyright (c) 1996, 1997, 1998 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ */ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: bus_space.c,v 1.28 2011/06/30 00:53:00 matt Exp $); +__KERNEL_RCSID(0, $NetBSD: bus_space.c,v 1.29 2011/12/17 19:34:07 phx Exp $); #define _POWERPC_BUS_SPACE_PRIVATE @@ -526,7 +526,7 @@ memio_map(bus_space_tag_t t, bus_addr_t size = _BUS_SPACE_STRIDE(t, size); bpa = _BUS_SPACE_STRIDE(t, bpa); - if (bpa + size t-pbs_limit) { + if (t-pbs_limit != 0 bpa + size t-pbs_limit) { #ifdef DEBUG printf(bus_space_map(%p[%x:%x], %#x, %#x) failed: EINVAL\n, t, t-pbs_base, t-pbs_limit, bpa, size); @@ -702,7 +702,7 @@ memio_alloc(bus_space_tag_t t, bus_addr_ if (t-pbs_extent == NULL) return ENOMEM; - if (rstart + size t-pbs_limit) { + if (t-pbs_limit != 0 rstart + size t-pbs_limit) { #ifdef DEBUG printf(%s(%p[%x:%x], %#x, %#x) failed: EINVAL\n, __func__, t, t-pbs_base, t-pbs_limit, rstart, size);
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: kiyohara Date: Sun Jul 31 10:00:52 UTC 2011 Modified Files: src/sys/arch/powerpc/powerpc: powerpc_machdep.c Log Message: s/MULTIPROCESOR/MULTIPROCESSOR/. To generate a diff of this commit: cvs rdiff -u -r1.59 -r1.60 src/sys/arch/powerpc/powerpc/powerpc_machdep.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/powerpc_machdep.c diff -u src/sys/arch/powerpc/powerpc/powerpc_machdep.c:1.59 src/sys/arch/powerpc/powerpc/powerpc_machdep.c:1.60 --- src/sys/arch/powerpc/powerpc/powerpc_machdep.c:1.59 Wed Jun 29 06:00:17 2011 +++ src/sys/arch/powerpc/powerpc/powerpc_machdep.c Sun Jul 31 10:00:52 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: powerpc_machdep.c,v 1.59 2011/06/29 06:00:17 matt Exp $ */ +/* $NetBSD: powerpc_machdep.c,v 1.60 2011/07/31 10:00:52 kiyohara Exp $ */ /* * Copyright (C) 1995, 1996 Wolfgang Solfrank. @@ -32,7 +32,7 @@ */ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: powerpc_machdep.c,v 1.59 2011/06/29 06:00:17 matt Exp $); +__KERNEL_RCSID(0, $NetBSD: powerpc_machdep.c,v 1.60 2011/07/31 10:00:52 kiyohara Exp $); #include opt_altivec.h #include opt_modular.h @@ -69,7 +69,7 @@ #include powerpc/altivec.h #endif -#ifdef MULTIPROCESOR +#ifdef MULTIPROCESSOR #include powerpc/pic/ipivar.h #endif
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: matt Date: Tue Jul 19 19:55:23 UTC 2011 Modified Files: src/sys/arch/powerpc/powerpc: bus_dma.c Log Message: Fix missed change of BUS_DMA_NOCACHE to BUS_DMA_DONTCACHE. To generate a diff of this commit: cvs rdiff -u -r1.43 -r1.44 src/sys/arch/powerpc/powerpc/bus_dma.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/bus_dma.c diff -u src/sys/arch/powerpc/powerpc/bus_dma.c:1.43 src/sys/arch/powerpc/powerpc/bus_dma.c:1.44 --- src/sys/arch/powerpc/powerpc/bus_dma.c:1.43 Sun Jul 17 23:23:54 2011 +++ src/sys/arch/powerpc/powerpc/bus_dma.c Tue Jul 19 19:55:23 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: bus_dma.c,v 1.43 2011/07/17 23:23:54 dyoung Exp $ */ +/* $NetBSD: bus_dma.c,v 1.44 2011/07/19 19:55:23 matt Exp $ */ /*- * Copyright (c) 1996, 1997, 1998 The NetBSD Foundation, Inc. @@ -32,7 +32,7 @@ #define _POWERPC_BUS_DMA_PRIVATE #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: bus_dma.c,v 1.43 2011/07/17 23:23:54 dyoung Exp $); +__KERNEL_RCSID(0, $NetBSD: bus_dma.c,v 1.44 2011/07/19 19:55:23 matt Exp $); #include sys/param.h #include sys/systm.h @@ -605,7 +605,7 @@ * If we are mapping a cacheable physically contiguous segment, treat * it as if we are mapping a poolpage and avoid consuming any KVAs. */ - if (nsegs == 1 (flags BUS_DMA_NOCACHE) == 0) { + if (nsegs == 1 (flags BUS_DMA_DONTCACHE) == 0) { KASSERT(size == segs-ds_len); addr = BUS_MEM_TO_PHYS(t, segs-ds_addr); *kvap = (void *)PMAP_MAP_POOLPAGE(addr);
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: matt Date: Fri Jul 1 23:47:10 UTC 2011 Modified Files: src/sys/arch/powerpc/powerpc: fixup.c Log Message: Change assert to panic. To generate a diff of this commit: cvs rdiff -u -r1.4 -r1.5 src/sys/arch/powerpc/powerpc/fixup.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/fixup.c diff -u src/sys/arch/powerpc/powerpc/fixup.c:1.4 src/sys/arch/powerpc/powerpc/fixup.c:1.5 --- src/sys/arch/powerpc/powerpc/fixup.c:1.4 Wed Jun 15 15:18:20 2011 +++ src/sys/arch/powerpc/powerpc/fixup.c Fri Jul 1 23:47:09 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: fixup.c,v 1.4 2011/06/15 15:18:20 matt Exp $ */ +/* $NetBSD: fixup.c,v 1.5 2011/07/01 23:47:09 matt Exp $ */ /*- * Copyright (c) 2010, 2011 The NetBSD Foundation, Inc. * All rights reserved. @@ -36,7 +36,7 @@ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: fixup.c,v 1.4 2011/06/15 15:18:20 matt Exp $); +__KERNEL_RCSID(0, $NetBSD: fixup.c,v 1.5 2011/07/01 23:47:09 matt Exp $); #include sys/param.h #include sys/types.h @@ -177,7 +177,11 @@ case OPC_branch_19: { KASSERT(r_lr == -1 || i.i_int == 0x4e800421); KASSERT(r_lr != -1 || i.i_int == 0x4e800420); -KASSERT(ctr != 0); +if (ctr == 0) { + panic(%s: jump at %p to %p would + branch to 0, __func__, insnp, + insnp + instr.i_i.i_li); +} fixup.jfi_real = fixup_addr2offset(ctr); break; }
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: matt Date: Sat Jul 2 00:38:30 UTC 2011 Modified Files: src/sys/arch/powerpc/powerpc: vm_machdep.c Log Message: Default to normal uvm_uarea_alloc if we can't allocate one ourselves. To generate a diff of this commit: cvs rdiff -u -r1.90 -r1.91 src/sys/arch/powerpc/powerpc/vm_machdep.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/vm_machdep.c diff -u src/sys/arch/powerpc/powerpc/vm_machdep.c:1.90 src/sys/arch/powerpc/powerpc/vm_machdep.c:1.91 --- src/sys/arch/powerpc/powerpc/vm_machdep.c:1.90 Mon Jun 20 05:50:39 2011 +++ src/sys/arch/powerpc/powerpc/vm_machdep.c Sat Jul 2 00:38:29 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: vm_machdep.c,v 1.90 2011/06/20 05:50:39 matt Exp $ */ +/* $NetBSD: vm_machdep.c,v 1.91 2011/07/02 00:38:29 matt Exp $ */ /* * Copyright (C) 1995, 1996 Wolfgang Solfrank. @@ -32,7 +32,7 @@ */ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: vm_machdep.c,v 1.90 2011/06/20 05:50:39 matt Exp $); +__KERNEL_RCSID(0, $NetBSD: vm_machdep.c,v 1.91 2011/07/02 00:38:29 matt Exp $); #include opt_altivec.h #include opt_multiprocessor.h @@ -298,7 +298,7 @@ error = uvm_pglistalloc(USPACE, 0, ptoa(physmem), 0, 0, pglist, 1, 1); if (error) { if (!system) - return NULL; + return (void *)uvm_uarea_alloc(); panic(%s: uvm_pglistalloc failed: %d, __func__, error); } @@ -315,7 +315,7 @@ return (void *)(uintptr_t)PMAP_MAP_POOLPAGE(pa); #else - return NULL; + return (void *)uvm_uarea_alloc(); #endif }
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: matt Date: Wed Jun 29 05:57:30 UTC 2011 Modified Files: src/sys/arch/powerpc/powerpc: intr_stubs.c Log Message: Add cpu_send_ipi stub To generate a diff of this commit: cvs rdiff -u -r1.2 -r1.3 src/sys/arch/powerpc/powerpc/intr_stubs.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/intr_stubs.c diff -u src/sys/arch/powerpc/powerpc/intr_stubs.c:1.2 src/sys/arch/powerpc/powerpc/intr_stubs.c:1.3 --- src/sys/arch/powerpc/powerpc/intr_stubs.c:1.2 Wed Jun 15 17:47:45 2011 +++ src/sys/arch/powerpc/powerpc/intr_stubs.c Wed Jun 29 05:57:30 2011 @@ -38,7 +38,7 @@ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: intr_stubs.c,v 1.2 2011/06/15 17:47:45 matt Exp $); +__KERNEL_RCSID(0, $NetBSD: intr_stubs.c,v 1.3 2011/06/29 05:57:30 matt Exp $); #include sys/param.h #include sys/cpu.h @@ -207,5 +207,12 @@ intr_wdogintr(struct trapframe *tf) { (*powerpc_intrsw-intrsw_wdogintr)(tf); - +} + +void cpu_send_ipi(cpuid_t, uint32_t) __stub; + +void +cpu_send_ipi(cpuid_t id, uint32_t mask) +{ + (*powerpc_intrsw-intrsw_cpu_send_ipi)(id, mask); }
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: matt Date: Fri Jun 24 22:19:45 UTC 2011 Modified Files: src/sys/arch/powerpc/powerpc: powerpc_machdep.c Log Message: Fix code that's been broken for over seven years... To generate a diff of this commit: cvs rdiff -u -r1.57 -r1.58 src/sys/arch/powerpc/powerpc/powerpc_machdep.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/powerpc_machdep.c diff -u src/sys/arch/powerpc/powerpc/powerpc_machdep.c:1.57 src/sys/arch/powerpc/powerpc/powerpc_machdep.c:1.58 --- src/sys/arch/powerpc/powerpc/powerpc_machdep.c:1.57 Tue Jun 21 06:32:36 2011 +++ src/sys/arch/powerpc/powerpc/powerpc_machdep.c Fri Jun 24 22:19:45 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: powerpc_machdep.c,v 1.57 2011/06/21 06:32:36 matt Exp $ */ +/* $NetBSD: powerpc_machdep.c,v 1.58 2011/06/24 22:19:45 matt Exp $ */ /* * Copyright (C) 1995, 1996 Wolfgang Solfrank. @@ -32,7 +32,7 @@ */ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: powerpc_machdep.c,v 1.57 2011/06/21 06:32:36 matt Exp $); +__KERNEL_RCSID(0, $NetBSD: powerpc_machdep.c,v 1.58 2011/06/24 22:19:45 matt Exp $); #include opt_altivec.h #include opt_modular.h @@ -159,7 +159,7 @@ struct sysctlnode node = *rnode; if (powersave 0) - node.sysctl_flags |= ~CTLFLAG_READWRITE; + node.sysctl_flags = ~CTLFLAG_READWRITE; return (sysctl_lookup(SYSCTLFN_CALL(node))); } #endif
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: matt Date: Mon Jun 20 08:18:28 UTC 2011 Modified Files: src/sys/arch/powerpc/powerpc: genassym.cf locore_subr.S Log Message: If this is a MODULAR kernel, export USRSTACK and CPU_MAXNUM as linker symbols so modules can access them. To generate a diff of this commit: cvs rdiff -u -r1.7 -r1.8 src/sys/arch/powerpc/powerpc/genassym.cf cvs rdiff -u -r1.44 -r1.45 src/sys/arch/powerpc/powerpc/locore_subr.S Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/genassym.cf diff -u src/sys/arch/powerpc/powerpc/genassym.cf:1.7 src/sys/arch/powerpc/powerpc/genassym.cf:1.8 --- src/sys/arch/powerpc/powerpc/genassym.cf:1.7 Sat Jun 18 21:17:29 2011 +++ src/sys/arch/powerpc/powerpc/genassym.cf Mon Jun 20 08:18:28 2011 @@ -1,4 +1,4 @@ -# $NetBSD: genassym.cf,v 1.7 2011/06/18 21:17:29 matt Exp $ +# $NetBSD: genassym.cf,v 1.8 2011/06/20 08:18:28 matt Exp $ #- # Copyright (c) 2010, 2011 The NetBSD Foundation, Inc. @@ -48,23 +48,26 @@ quote #define __INTR_PRIVATE include sys/param.h -include sys/intr.h +include sys/bitops.h include sys/cpu.h -include sys/mutex.h -include sys/rwlock.h +include sys/intr.h include sys/lwp.h +include sys/mutex.h include sys/proc.h -include sys/bitops.h +include sys/rwlock.h include uvm/uvm_extern.h -include machine/pcb.h -include machine/frame.h +include powerpc/frame.h +include powerpc/pcb.h +include powerpc/psl.h define IPL_HIGH IPL_HIGH define IPL_SCHED IPL_SCHED define IPL_VM IPL_VM +define CPU_MAXNUM CPU_MAXNUM + define FRAMELEN FRAMELEN define FRAME_TF offsetof(struct ktrapframe, ktf_tf) define FRAME_R0 offsetof(struct ktrapframe, ktf_tf.tf_fixreg[0]) @@ -198,6 +201,7 @@ define PAGE_SIZE PAGE_SIZE define PAGE_MASK PAGE_MASK define PAGE_SHIFT PAGE_SHIFT +define USRSTACK USRSTACK ifdef __HAVE_FAST_SOFTINTS define __HAVE_FAST_SOFTINTS __HAVE_FAST_SOFTINTS Index: src/sys/arch/powerpc/powerpc/locore_subr.S diff -u src/sys/arch/powerpc/powerpc/locore_subr.S:1.44 src/sys/arch/powerpc/powerpc/locore_subr.S:1.45 --- src/sys/arch/powerpc/powerpc/locore_subr.S:1.44 Fri Jun 17 23:14:40 2011 +++ src/sys/arch/powerpc/powerpc/locore_subr.S Mon Jun 20 08:18:28 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: locore_subr.S,v 1.44 2011/06/17 23:14:40 matt Exp $ */ +/* $NetBSD: locore_subr.S,v 1.45 2011/06/20 08:18:28 matt Exp $ */ /* * Copyright (c) 2001 Wasabi Systems, Inc. @@ -77,6 +77,7 @@ #include opt_lockdebug.h #include opt_multiprocessor.h #include opt_ddb.h +#include opt_modular.h #ifdef DDB #define CFRAME_LRSAVE(t0) \ @@ -142,6 +143,13 @@ GLOBAL(powersave) .long -1 +#ifdef MODULAR + .global __USRSTACK + .equ __USRSTACK, USRSTACK + .global __CPU_MAXNUM + .equ __CPU_MAXNUM, CPU_MAXNUM +#endif + .text .align 2 /*
CVS commit: src/sys/arch/powerpc/powerpc
Module Name:src Committed By: matt Date: Tue Jun 21 04:22:25 UTC 2011 Modified Files: src/sys/arch/powerpc/powerpc: softint_machdep.c Log Message: Add an extra assert to verify we aren't trying to process softints while interrupts are being serviced. To generate a diff of this commit: cvs rdiff -u -r1.1 -r1.2 src/sys/arch/powerpc/powerpc/softint_machdep.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/powerpc/softint_machdep.c diff -u src/sys/arch/powerpc/powerpc/softint_machdep.c:1.1 src/sys/arch/powerpc/powerpc/softint_machdep.c:1.2 --- src/sys/arch/powerpc/powerpc/softint_machdep.c:1.1 Tue Jun 14 22:36:13 2011 +++ src/sys/arch/powerpc/powerpc/softint_machdep.c Tue Jun 21 04:22:25 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: softint_machdep.c,v 1.1 2011/06/14 22:36:13 matt Exp $ */ +/* $NetBSD: softint_machdep.c,v 1.2 2011/06/21 04:22:25 matt Exp $ */ /*- * Copyright (c) 2010, 2011 The NetBSD Foundation, Inc. * All rights reserved. @@ -69,6 +69,9 @@ const u_int softint_mask = (IPL_SOFTMASK old_ipl) IPL_SOFTMASK; u_int softints; + KASSERTMSG(ci-ci_idepth == -1, + (%s: cpu%u: idepth (%d) != -1, __func__, + cpu_index(ci), ci-ci_idepth)); KASSERT(ci-ci_mtx_count == 0); KASSERT(ci-ci_cpl == IPL_HIGH); while ((softints = (ci-ci_data.cpu_softints softint_mask)) != 0) {