Re: failure to resume Lenovo E420s

Mike Larkin <[email protected]>
Newsgroups gmane.os.openbsd.bugs
Message-ID <[email protected]>
On Thu, Apr 09, 2026 at 05:13:29PM +0100, Laurence Tratt wrote:
> On Thu, Apr 09, 2026 at 08:02:29AM -0700, Mike Larkin wrote:
>
> Hello Mike,
>
> > Can you try this diff and see if it fixes things?
>
> This seems to have fixed my issues on a desktop AMD machine, which
> hasn't suspended successfully once for at least 2 or 3 weeks -- thanks!
> Your patch didn't quite apply cleanly to -current though: I manually
> ended up with the version at the end of this email FWIW.
>
> I will keep testing this over the next day or two; if there are any
> issues I will update this thread.
>
>
> Laurie
>

ah thanks for the update. kettenis and I are reworking this, there will be a
cleaner (but essentially the same) diff sent out later. good to see it's
fixing more machines.

thanks for testing!

-ml

>
> diff --git sys/arch/amd64/amd64/acpi_machdep.c sys/arch/amd64/amd64/acpi_machdep.c
> index 6e1f3363f5c..3f421ced0c9 100644
> --- sys/arch/amd64/amd64/acpi_machdep.c
> +++ sys/arch/amd64/amd64/acpi_machdep.c
> @@ -476,12 +476,11 @@ acpi_sleep_cpu(struct acpi_softc *sc, int state)
>  void
>  acpi_resume_cpu(struct acpi_softc *sc, int state)
>  {
> -	if (sc->sc_fadt->flags & FADT_USE_PLATFORM_CLOCK) {
> -		if (rtcalarm_fired())
> -			sc->sc_wakegpe = WAKEGPE_RTC;
> -	}
> -
>  	if (state == ACPI_STATE_S0) {
> +		if (sc->sc_fadt->flags & FADT_USE_PLATFORM_CLOCK) {
> +			if (rtcalarm_fired())
> +				sc->sc_wakegpe = WAKEGPE_RTC;
> +		}
>  		rtcalarm_resume();
>  		return;
>  	}
> @@ -504,7 +503,6 @@ acpi_resume_cpu(struct acpi_softc *sc, int state)
>  #endif
>
>  	i8254_startclock();
> -	rtcalarm_resume();		/* i8254 must be running */
>  	if (initclock_func == i8254_initclocks)
>  		rtcstart();		/* in i8254 mode, rtc is profclock */
>
> @@ -518,6 +516,12 @@ acpi_resume_cpu(struct acpi_softc *sc, int state)
>  	/* Re-initialise memory range handling on BSP */
>  	if (mem_range_softc.mr_op != NULL)
>  		mem_range_softc.mr_op->initAP(&mem_range_softc);
> +
> +	if (sc->sc_fadt->flags & FADT_USE_PLATFORM_CLOCK) {
> +		if (rtcalarm_fired())
> +			sc->sc_wakegpe = WAKEGPE_RTC;
> +	}
> +	rtcalarm_resume();
>  }
>
>  #ifdef MULTIPROCESSOR
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.