Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/arch/sparc PR port-sparc/54789: Sparc boot fails with "T...



details:   https://anonhg.NetBSD.org/src/rev/6a02865fb425
branches:  trunk
changeset: 466684:6a02865fb425
user:      ad <ad%NetBSD.org@localhost>
date:      Mon Dec 30 22:13:46 2019 +0000

description:
PR port-sparc/54789: Sparc boot fails with "Trap 0x21 while interrupts disabled"

Remove assumption that cpu_info is smaller than 1kB.

diffstat:

 sys/arch/sparc/dev/apc.c          |   8 ++--
 sys/arch/sparc/include/cpu.h      |   4 +-
 sys/arch/sparc/sparc/clkctrl.c    |   9 +++--
 sys/arch/sparc/sparc/lock_stubs.s |  20 +++++++------
 sys/arch/sparc/sparc/locore.s     |  55 ++++++++++++++++++++------------------
 sys/arch/sparc/sparc/msiiep.c     |   8 ++--
 6 files changed, 55 insertions(+), 49 deletions(-)

diffs (truncated from 328 to 300 lines):

diff -r 50eb20f41685 -r 6a02865fb425 sys/arch/sparc/dev/apc.c
--- a/sys/arch/sparc/dev/apc.c  Mon Dec 30 19:52:11 2019 +0000
+++ b/sys/arch/sparc/dev/apc.c  Mon Dec 30 22:13:46 2019 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: apc.c,v 1.1 2010/01/15 20:57:12 bouyer Exp $   */
+/*     $NetBSD: apc.c,v 1.2 2019/12/30 22:13:46 ad Exp $       */
 
 /*
  * Copyright (c) 2010 Manuel Bouyer.
@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: apc.c,v 1.1 2010/01/15 20:57:12 bouyer Exp $");
+__KERNEL_RCSID(0, "$NetBSD: apc.c,v 1.2 2019/12/30 22:13:46 ad Exp $");
 
 
 /*
@@ -45,7 +45,7 @@
 
 static int apcmatch(device_t, struct cfdata *, void *);
 static void apcattach(device_t, device_t, void *);
-static void apc_cpu_sleep(struct cpu_info *);
+static void apc_cpu_sleep(void);
 
 struct apc_softc {
        device_t        sc_dev;
@@ -86,7 +86,7 @@
 }
 
 static void
-apc_cpu_sleep(struct cpu_info *ci)
+apc_cpu_sleep(void)
 {
        uint8_t val;
        if (apc == NULL)
diff -r 50eb20f41685 -r 6a02865fb425 sys/arch/sparc/include/cpu.h
--- a/sys/arch/sparc/include/cpu.h      Mon Dec 30 19:52:11 2019 +0000
+++ b/sys/arch/sparc/include/cpu.h      Mon Dec 30 22:13:46 2019 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: cpu.h,v 1.103 2019/12/01 15:34:45 ad Exp $ */
+/*     $NetBSD: cpu.h,v 1.104 2019/12/30 22:13:47 ad Exp $ */
 
 /*
  * Copyright (c) 1992, 1993
@@ -374,7 +374,7 @@
         * unrecoverable faults end up here.
         */
        void            (*memerr)(unsigned, u_int, u_int, struct trapframe *);
-       void            (*idlespin)(struct cpu_info *);
+       void            (*idlespin)(void);
        /* Module Control Registers */
        /*bus_space_handle_t*/ long ci_mbusport;
        /*bus_space_handle_t*/ long ci_mxccregs;
diff -r 50eb20f41685 -r 6a02865fb425 sys/arch/sparc/sparc/clkctrl.c
--- a/sys/arch/sparc/sparc/clkctrl.c    Mon Dec 30 19:52:11 2019 +0000
+++ b/sys/arch/sparc/sparc/clkctrl.c    Mon Dec 30 22:13:46 2019 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: clkctrl.c,v 1.5 2011/07/17 23:32:37 mrg Exp $  */
+/*     $NetBSD: clkctrl.c,v 1.6 2019/12/30 22:13:47 ad Exp $   */
 
 /*
  * Copyright (c) 2005 Michael Lorenz
@@ -26,7 +26,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: clkctrl.c,v 1.5 2011/07/17 23:32:37 mrg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: clkctrl.c,v 1.6 2019/12/30 22:13:47 ad Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -44,7 +44,7 @@
 CFATTACH_DECL_NEW(clkctrl, 0,
      clkctrl_match, clkctrl_attach, NULL, NULL);
 
-static void tadpole_cpu_sleep(struct cpu_info *);
+static void tadpole_cpu_sleep(void);
 volatile uint8_t *clkctrl_reg = NULL;
 
 static int
@@ -91,8 +91,9 @@
 
 /* ARGSUSED */
 static void
-tadpole_cpu_sleep(struct cpu_info *ci)
+tadpole_cpu_sleep(void)
 {
+
        if (clkctrl_reg == 0)
                return;
        *clkctrl_reg = 0;
diff -r 50eb20f41685 -r 6a02865fb425 sys/arch/sparc/sparc/lock_stubs.s
--- a/sys/arch/sparc/sparc/lock_stubs.s Mon Dec 30 19:52:11 2019 +0000
+++ b/sys/arch/sparc/sparc/lock_stubs.s Mon Dec 30 22:13:46 2019 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: lock_stubs.s,v 1.12 2008/05/25 15:56:12 chs Exp $      */
+/*     $NetBSD: lock_stubs.s,v 1.13 2019/12/30 22:13:47 ad Exp $       */
 
 /*-
  * Copyright (c) 2002, 2007 The NetBSD Foundation, Inc.
@@ -122,10 +122,10 @@
  * void mutex_spin_enter(kmutex_t *);
  */
 ENTRY(mutex_spin_enter)
-       sethi   %hi(CPUINFO_VA), %o4
-       ld      [ %o4 + CPUINFO_MTX_COUNT ], %o5
+       sethi   %hi(CPUINFO_VA+CPUINFO_MTX_COUNT), %o4
+       ld      [ %o4 + %lo(CPUINFO_VA+CPUINFO_MTX_COUNT) ], %o5
        sub     %o5, 1, %o1
-       st      %o1, [ %o4 + CPUINFO_MTX_COUNT ]
+       st      %o1, [ %o4 + %lo(CPUINFO_VA+CPUINFO_MTX_COUNT) ]
        ldub    [ %o0 + MTX_IPL ], %o2
        rd      %psr, %o1
        sll     %o2, 8, %o2
@@ -140,8 +140,9 @@
        nop
        tst     %o5
 1:
+       sethi   %hi(CPUINFO_VA+CPUINFO_MTX_OLDSPL), %o4
        bz,a    2f
-        st     %o3, [ %o4 + CPUINFO_MTX_OLDSPL ]
+        st     %o3, [ %o4 + %lo(CPUINFO_VA+CPUINFO_MTX_OLDSPL) ]
 2:
 #if defined(MULTIPROCESSOR) || defined(DIAGNOSTIC)
        ldstub  [ %o0 + MTX_LOCK ], %o2
@@ -166,12 +167,13 @@
 #elif defined(MULTIPROCESSOR)
        clrb    [ %o0 + MTX_LOCK ]
 #endif
-       sethi    %hi(CPUINFO_VA), %o2
-       ld      [ %o2 + CPUINFO_MTX_OLDSPL ], %o3
-       ld      [ %o2 + CPUINFO_MTX_COUNT ], %o1
+       sethi    %hi(CPUINFO_VA+CPUINFO_MTX_OLDSPL), %o2
+       ld      [ %o2 + %lo(CPUINFO_VA+CPUINFO_MTX_OLDSPL) ], %o3
+       sethi    %hi(CPUINFO_VA+CPUINFO_MTX_COUNT), %o2
+       ld      [ %o2 + %lo(CPUINFO_VA+CPUINFO_MTX_COUNT) ], %o1
        addcc   %o1, 1, %o4
        bnz     1f
-        st     %o4, [ %o2 + CPUINFO_MTX_COUNT ]
+        st     %o4, [ %o2 + %lo(CPUINFO_VA+CPUINFO_MTX_COUNT) ]
        rd      %psr, %o1
        andn    %o1, PSR_PIL, %o1
        wr      %o3, %o1, %psr
diff -r 50eb20f41685 -r 6a02865fb425 sys/arch/sparc/sparc/locore.s
--- a/sys/arch/sparc/sparc/locore.s     Mon Dec 30 19:52:11 2019 +0000
+++ b/sys/arch/sparc/sparc/locore.s     Mon Dec 30 22:13:46 2019 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: locore.s,v 1.274 2019/06/07 00:18:26 mrg Exp $ */
+/*     $NetBSD: locore.s,v 1.275 2019/12/30 22:13:47 ad Exp $  */
 
 /*
  * Copyright (c) 1996 Paul Kranenburg
@@ -1954,10 +1954,11 @@
 #if defined(SUN4M)
 _ENTRY(memfault_sun4m)
 memfault_sun4m:
-       sethi   %hi(CPUINFO_VA), %l4
+       sethi   %hi(CPUINFO_VA+CPUINFO_GETSYNCFLT), %l4
        ld      [%l4 + %lo(CPUINFO_VA+CPUINFO_GETSYNCFLT)], %l5
+       sethi   %hi(CPUINFO_VA+CPUINFO_SYNCFLTDUMP), %l4
        jmpl    %l5, %l7
-        or     %l4, %lo(CPUINFO_SYNCFLTDUMP), %l4
+        or     %l4, %lo(CPUINFO_VA+CPUINFO_SYNCFLTDUMP), %l4
        TRAP_SETUP(-CCFSZ-80)
        ! tally fault (curcpu()->cpu_data.cpu_nfault++) (clobbers %o0,%o1,%o2)
        INCR64(CPUINFO_VA + CPUINFO_NFAULT)
@@ -2519,10 +2520,10 @@
        set     _C_LABEL(sintrhand), %l4! %l4 = sintrhand[intlev];
        ld      [%l4 + %l5], %l4
 
-       sethi   %hi(CPUINFO_VA), %o2
-       ld      [ %o2 + CPUINFO_IDEPTH ], %o3
+       sethi   %hi(CPUINFO_VA+CPUINFO_IDEPTH), %o2
+       ld      [ %o2 + %lo(CPUINFO_VA+CPUINFO_IDEPTH) ], %o3
        inc     %o3
-       st      %o3, [ %o2 + CPUINFO_IDEPTH ]
+       st      %o3, [ %o2 + %lo(CPUINFO_VA+CPUINFO_IDEPTH) ]
 
        b       3f
         st     %fp, [%sp + CCFSZ + 16]
@@ -2543,10 +2544,10 @@
        bnz     1b
         nop
 
-       sethi   %hi(CPUINFO_VA), %o2
-       ld      [ %o2 + CPUINFO_IDEPTH ], %o3
+       sethi   %hi(CPUINFO_VA+CPUINFO_IDEPTH), %o2
+       ld      [ %o2 + %lo(CPUINFO_VA+CPUINFO_IDEPTH) ], %o3
        dec     %o3
-       st      %o3, [ %o2 + CPUINFO_IDEPTH ]
+       st      %o3, [ %o2 + %lo(CPUINFO_VA+CPUINFO_IDEPTH) ]
 
        mov     %l7, %g1
        wr      %l6, 0, %y
@@ -2563,8 +2564,8 @@
 #if defined(SUN4M)
 _ENTRY(_C_LABEL(sparc_interrupt4m))
 #if !defined(MSIIEP)   /* "normal" sun4m */
-       sethi   %hi(CPUINFO_VA), %l6
-       ld      [%l6 + CPUINFO_INTREG], %l7
+       sethi   %hi(CPUINFO_VA+CPUINFO_INTREG), %l6
+       ld      [%l6 + %lo(CPUINFO_VA+CPUINFO_INTREG)], %l7
        mov     1, %l4
        ld      [%l7 + ICR_PI_PEND_OFFSET], %l5 ! get pending interrupts
        sll     %l4, %l3, %l4   ! hw intr bits are in the lower halfword
@@ -2704,10 +2705,10 @@
        set     _C_LABEL(intrhand), %l4 ! %l4 = intrhand[intlev];
        ld      [%l4 + %l5], %l4
 
-       sethi   %hi(CPUINFO_VA), %o2
-       ld      [ %o2 + CPUINFO_IDEPTH ], %o3
+       sethi   %hi(CPUINFO_VA+CPUINFO_IDEPTH), %o2
+       ld      [ %o2 + %lo(CPUINFO_VA+CPUINFO_IDEPTH) ], %o3
        inc     %o3
-       st      %o3, [ %o2 + CPUINFO_IDEPTH ]
+       st      %o3, [ %o2 + %lo(CPUINFO_VA+CPUINFO_IDEPTH) ]
 
        b       3f
         st     %fp, [%sp + CCFSZ + 16]
@@ -2742,10 +2743,10 @@
         add    %sp, CCFSZ, %o0
        /* all done: restore registers and go return */
 4:
-       sethi   %hi(CPUINFO_VA), %o2
-       ld      [ %o2 + CPUINFO_IDEPTH ], %o3
+       sethi   %hi(CPUINFO_VA+CPUINFO_IDEPTH), %o2
+       ld      [ %o2 + %lo(CPUINFO_VA+CPUINFO_IDEPTH) ], %o3
        dec     %o3
-       st      %o3, [ %o2 + CPUINFO_IDEPTH ]
+       st      %o3, [ %o2 + %lo(CPUINFO_VA+CPUINFO_IDEPTH) ]
 
        mov     %l7, %g1
        wr      %l6, 0, %y
@@ -2763,8 +2764,8 @@
  * %l6 = &cpuinfo
  */
 lev14_softint:
-       sethi   %hi(CPUINFO_VA), %l7
-       ldd     [%l7 + CPUINFO_LEV14], %l4
+       sethi   %hi(CPUINFO_VA+CPUINFO_LEV14), %l7
+       ldd     [%l7 + %lo(CPUINFO_VA+CPUINFO_LEV14)], %l4
        inccc   %l5
        addx    %l4, %g0, %l4
        std     %l4, [%l7 + CPUINFO_LEV14]
@@ -4961,13 +4962,13 @@
  * Call the idlespin() function if it exists, otherwise just return.
  */
 ENTRY(cpu_idle)
-       sethi   %hi(CPUINFO_VA), %o0
-       ld      [%o0 + CPUINFO_IDLESPIN], %o1
+       sethi   %hi(CPUINFO_VA+CPUINFO_IDLESPIN), %o0
+       ld      [%o0 + %lo(CPUINFO_VA+CPUINFO_IDLESPIN)], %o1
        tst     %o1
        bz      1f
         nop
        jmp     %o1
-        nop    ! CPUINFO_VA is already in %o0
+        nop
 1:
        retl
         nop
@@ -5641,8 +5642,8 @@
        _ALIGN
 
 ENTRY(ipi_savefpstate)
-       sethi   %hi(CPUINFO_VA), %o5
-       ldd     [%o5 + CPUINFO_SAVEFPSTATE], %o2
+       sethi   %hi(CPUINFO_VA+CPUINFO_SAVEFPSTATE), %o5
+       ldd     [%o5 + %lo(CPUINFO_VA+CPUINFO_SAVEFPSTATE)], %o2
        inccc   %o3
        addx    %o2, 0, %o2
        std     %o2, [%o5 + CPUINFO_SAVEFPSTATE]
@@ -5855,14 +5856,16 @@
 _ENTRY(_C_LABEL(smp_get_syncflt))
        save    %sp, -CCFSZ, %sp
 
-       sethi   %hi(CPUINFO_VA), %o4
+       sethi   %hi(CPUINFO_VA+CPUINFO_GETSYNCFLT), %o4
        ld      [%l4 + %lo(CPUINFO_VA+CPUINFO_GETSYNCFLT)], %o5
        clr     %l1
        clr     %l3
+       sethi   %hi(CPUINFO_VA+CPUINFO_SYNCFLTDUMP), %o4
        jmpl    %o5, %l7
-        or     %o4, %lo(CPUINFO_SYNCFLTDUMP), %l4
+        or     %o4, %lo(CPUINFO_VA+CPUINFO_SYNCFLTDUMP), %l4
 
        ! load values out of the dump
+       sethi   %hi(CPUINFO_VA+CPUINFO_SYNCFLTDUMP), %o4
        ld      [%o4 + %lo(CPUINFO_VA+CPUINFO_SYNCFLTDUMP)], %o5
        st      %o5, [%i0]
        ld      [%o4 + %lo(CPUINFO_VA+CPUINFO_SYNCFLTDUMP+4)], %o5
diff -r 50eb20f41685 -r 6a02865fb425 sys/arch/sparc/sparc/msiiep.c
--- a/sys/arch/sparc/sparc/msiiep.c     Mon Dec 30 19:52:11 2019 +0000
+++ b/sys/arch/sparc/sparc/msiiep.c     Mon Dec 30 22:13:46 2019 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: msiiep.c,v 1.47 2019/11/10 21:16:33 chs Exp $ */
+/*     $NetBSD: msiiep.c,v 1.48 2019/12/30 22:13:47 ad Exp $ */
 
 /*



Home | Main Index | Thread Index | Old Index