Index: sys/arch/sgimips/dev/crime.c =================================================================== RCS file: /cvsroot/src/sys/arch/sgimips/dev/crime.c,v retrieving revision 1.38 diff -p -u -r1.38 crime.c --- sys/arch/sgimips/dev/crime.c 18 Feb 2015 16:47:58 -0000 1.38 +++ sys/arch/sgimips/dev/crime.c 12 Apr 2021 23:05:31 -0000 @@ -107,6 +107,8 @@ crime_attach(device_t parent, device_t s uint64_t baseline, endline; uint32_t startctr, endctr, cps; + platform.mach_reset = crime_reboot; + sc->sc_dev = self; crm_iot = normal_memt; Index: sys/arch/sgimips/include/sysconf.h =================================================================== RCS file: /cvsroot/src/sys/arch/sgimips/include/sysconf.h,v retrieving revision 1.8 diff -p -u -r1.8 sysconf.h --- sys/arch/sgimips/include/sysconf.h 20 Feb 2011 07:59:50 -0000 1.8 +++ sys/arch/sgimips/include/sysconf.h 12 Apr 2021 23:05:31 -0000 @@ -81,6 +81,7 @@ struct platform { void (*intr3)(vaddr_t, uint32_t, uint32_t); void (*intr4)(vaddr_t, uint32_t, uint32_t); void (*intr5)(vaddr_t, uint32_t, uint32_t); + void (*mach_reset)(void); }; extern struct platform platform; Index: sys/arch/sgimips/sgimips/machdep.c =================================================================== RCS file: /cvsroot/src/sys/arch/sgimips/sgimips/machdep.c,v retrieving revision 1.150 diff -p -u -r1.150 machdep.c --- sys/arch/sgimips/sgimips/machdep.c 11 Jun 2020 19:20:45 -0000 1.150 +++ sys/arch/sgimips/sgimips/machdep.c 12 Apr 2021 23:05:31 -0000 @@ -98,6 +98,7 @@ __KERNEL_RCSID(0, "$NetBSD: machdep.c,v #include #include #include +#include #include #endif @@ -197,6 +198,7 @@ static void *unimpl_intr_establish(int, static void unimpl_intr(vaddr_t, uint32_t, uint32_t); static unsigned long nulllong(void); static void nullvoid(void); +static void ddb_sgimips_mach_reset(void); void ddb_trap_hook(int where); @@ -216,7 +218,8 @@ struct platform platform = { .intr2 = unimpl_intr, .intr3 = unimpl_intr, .intr4 = unimpl_intr, - .intr5 = unimpl_intr + .intr5 = unimpl_intr, + .mach_reset = nullvoid, }; extern u_int32_t ssir; @@ -263,6 +266,10 @@ mach_init(int argc, int32_t argv32[], ui char **argv = (void *)argv32; #endif +#if defined(DDB) + cpu_reset_address = ddb_sgimips_mach_reset; +#endif + /* * Initialize firmware. This will set up the bootstrap console. * At this point we do not yet know the machine type, so we @@ -929,6 +936,15 @@ void ddb_trap_hook(int where) } } +static void +ddb_sgimips_mach_reset(void) +{ + if (platform.mach_reset) + (*platform.mach_reset)(); + else + db_printf("sgimips mach reset not implemented."); +} + #endif void mips_machdep_cache_config(void)