Managed to get a stack trace meanwhile: https://nazgul.ch/pub/macpro6,1_st.jpg
On Fri, May 02, 2025 at 06:29:10AM GMT, Marcus Glocker wrote: > >Synopsis: MacPro6,1 (trash can) is crashing during shutdown > >Category: kernel / acpi > >Environment: > System : OpenBSD 7.7 > Details : OpenBSD 7.7-current (GENERIC.MP) #21: Wed Apr 30 16:43:47 > CEST 2025 > [email protected]:/sys/arch/amd64/compile/GENERIC.MP > > Architecture: OpenBSD.amd64 > Machine : amd64 > >Description: > During execution of "doas halt -p" the shutdown process fails to > complete because of an I/O bus space write to address 0x80 > (POST debug status codes?): > > syncing disks... done > Stopped at x86_bus_space_io_write_4+0x1d: leave > ddb{0}> > > A backtrace isn't possible unfortunately since the keyboard doesn't > work anymore in ddb at this point. Using some debug printfs showed > that the I/O bus space write to address 0x80 is issued when calling > the _PTS DSDT function at sys/dev/acpi/acpi.c:2653: > > /* 1st powerdown AML step: _PTS(tostate) */ > aml_node_setval(sc, sc->sc_pts, state); > > The machine can't be powered off, and keeps running. > > The DSDT.dsl file of the machine is located in my home: > > cvs.openbsd.org:~mglocker/DSDT.dsl-macpro6,1 > >How-To-Repeat: > Execute 'doas halt -p' on that specific machine type. > >Fix: > No fix is currently known. Following a workaround patch which skips > the I/O bus space write to address 0x80, letting the machine power off. > > Index: sys/dev/acpi/acpi.c > =================================================================== > RCS file: /cvs/src/sys/dev/acpi/acpi.c,v > diff -u -p -u -p -r1.444 acpi.c > --- sys/dev/acpi/acpi.c 24 Mar 2025 09:53:20 -0000 1.444 > +++ sys/dev/acpi/acpi.c 30 Apr 2025 14:47:29 -0000 > @@ -253,6 +253,14 @@ acpi_gasio(struct acpi_softc *sc, int io > else > iot = sc->sc_iot; > > + /* > + * Accessing the I/O port 0x80 (POST debug port) on a > + * MacPro6,1 will crash the system since this port is likely > + * not implemented. > + */ > + if (address == 0x80 && strcmp(hw_prod, "MacPro6,1") == 0) > + return (-1); > + > if (acpi_bus_space_map(iot, address, len, 0, &ioh) != 0) { > printf("%s: unable to map iospace\n", DEVNAME(sc)); > return (-1);
