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);

Reply via email to