On Nov 20 18:03:36, mark.kette...@xs4all.nl wrote:
> > Date: Fri, 18 Nov 2022 17:15:30 +0100
> > From: Mark Kettenis <mark.kette...@xs4all.nl>
> > 
> > > Date: Fri, 18 Nov 2022 14:36:18 +0100
> > > From: Jan Stary <h...@stare.cz>
> > > 
> > > On Nov 18 12:51:32, mark.kette...@xs4all.nl wrote:
> > > > > Date: Fri, 18 Nov 2022 12:19:46 +0100
> > > > > From: Jan Stary <h...@stare.cz>
> > > > > 
> > > > > On Nov 17 14:44:59, h...@stare.cz wrote:
> > > > > > This is a freshly installed current/arm64 on a MAcBook Air,
> > > > > > model 2337 (M1, 2020); full dmesg below.
> > > > > 
> > > > > Upgrading the co-existing macOS to 12.6.1
> > > > > seems to have brken the working bsd installation.
> > > > > The booting bsd kernel gets to 
> > > > > 
> > > > > [...]
> > > > > exuart0 at simplebus0
> > > > > exuart1 at simplebus0
> > > > > aplspmi0 at simplebus0
> > > > > aplpmu0 at aplspmi0 sid 0xf
> > > > > aplsmc0 at simplebus0
> > > > > 
> > > > > and moves no further. Same with booting bsd.rd,
> > > > > same with booting the latest one from snapshots (off a USB stick).
> > > > > 
> > > > > Can the macOS upgrade be related? Is this known?
> > > > > The macOS upgrade also switched the default boot to macOS
> > > > > (while after the bsd install, the avahi boot went to bsd by default).
> > > > 
> > > > Possible.  In principle the OpenBSD install comes with its own set of
> > > > Apple firmwares.  But the SMC firmware (like the NVMe firmware) is
> > > > stored in some sort of ROM and therefore "global".  The macOS upgrade
> > > > might have updated the SMC in a way that is incompatible with the
> > > > aplsmc(4) driver.
> > > 
> > > Thanks for the insight.
> > > Is there something I can do to debug it?
> > > Also, the line that normally follows is
> > > 
> > >   aplsart0 at simplebus0
> > > 
> > > and some time ago there was a warning at this list
> > > not to upgrade to macOS 13 specifically related to aplsart
> > > - could it be that's in fact what's broken now (as opposed to SMC)?
> > > 
> > > Jan
> 
> I managed to reproduce the issue on a 13" M1 MacBook Pro and...
> 
> > Here is a diff that changes the rtkit code to not spin forever.  That
> > might get you going again.  You'll need to boot a kernel with this
> > diff from a USB stick or something like that.
> 
> ...while that diff made the machine boot, it doesn't make it usable.
> But after some serious head-scratching I came up with the following
> diff that does.
> 
> This will probably land in -current pretty quickly.

Thanks. I will be at my only other arm64 machnie tomorrow,
will test.

        Jan


> 
> Index: arch/arm64/dev/aplhidev.c
> ===================================================================
> RCS file: /cvs/src/sys/arch/arm64/dev/aplhidev.c,v
> retrieving revision 1.9
> diff -u -p -r1.9 aplhidev.c
> --- arch/arm64/dev/aplhidev.c 9 Nov 2022 10:05:18 -0000       1.9
> +++ arch/arm64/dev/aplhidev.c 20 Nov 2022 12:50:07 -0000
> @@ -133,6 +133,7 @@ struct aplhidev_softc {
>       uint32_t                *sc_gpio;
>       int                     sc_gpiolen;
>  
> +     uint8_t                 sc_mode;
>       uint16_t                sc_vendor;
>       uint16_t                sc_product;
>  
> @@ -238,7 +239,14 @@ aplhidev_attach(struct device *parent, s
>                       break;
>       }
>  
> +     sc->sc_mode = APLHIDEV_MODE_HID;
>       aplhidev_set_mode(sc, APLHIDEV_MODE_RAW);
> +     for (retry = 10; retry > 0; retry--) {
> +             aplhidev_intr(sc);
> +             delay(1000);
> +             if (sc->sc_mode == APLHIDEV_MODE_RAW)
> +                     break;
> +     }
>  
>       printf("\n");
>  
> @@ -394,6 +402,8 @@ aplhidev_set_mode(struct aplhidev_softc 
>       delay(100);
>       spi_read(sc->sc_spi_tag, (char *)&status, sizeof(status));
>       spi_release_bus(sc->sc_spi_tag, 0);
> +
> +     delay(1000);
>  }
>  
>  int
> @@ -458,6 +468,12 @@ aplhidev_intr(void *arg)
>                       break;
>               }
>  
> +             return 1;
> +     }
> +     if (packet.flags == APLHIDEV_WRITE_PACKET &&
> +         packet.device == APLHIDEV_TP_DEVICE &&
> +         hdr->type == APLHIDEV_SET_MODE) {
> +             sc->sc_mode = APLHIDEV_MODE_RAW;
>               return 1;
>       }
>  
> 

Reply via email to