Re: failure to resume Lenovo E420s

Mike Larkin <[email protected]>
Newsgroups gmane.os.openbsd.bugs
Message-ID <[email protected]>
On Wed, Apr 08, 2026 at 06:24:33PM +0000, James Cook wrote:
> >Synopsis:	7.8 fails to resume after suspend on Lenovo E420s
> >Category:	amd64
> >Environment:
> 	System      : OpenBSD 7.8
> 	Details     : OpenBSD 7.8 (GENERIC.MP) #6: Fri Mar 20 10:18:39 MDT 2026
> 			 [email protected]:/usr/src/sys/arch/amd64/compile/GENERIC.MP
>
> 	Architecture: OpenBSD.amd64
> 	Machine     : amd64
> >Description:
> 	I don't know if it's worth the effort to debug this old laptop, but
> 	here's a report in case it's helpful.
>
>         The computer does not wake from suspend when I open the
>         lid. Instead, the indicator light (red dot over i in
>         "Thinkpad" logo) starts flashing with a period of about one
>         second, and I think I heard the optical drive do something.
>
> 	I tried once in an X session, leaving it asleep for hours, and once
> 	in single-user mode, sleeping for a bit more than a minute. Suspended
> 	by closing lid. Same result both times.
>
>         I did not activate rtwn0 (mentioned in my other bug report
>         about this computer; leads to crashes).
> >How-To-Repeat:
> 	Close lid. Wait a bit. Open lid. (machdep.lidaction sysctl is at default
> 	value of 1.)
> >Fix:
> 	Never sleep.
>

Can you try this diff and see if it fixes things?

-ml

Index: acpi_machdep.c
===================================================================
RCS file: /cvs/src/sys/arch/amd64/amd64/acpi_machdep.c,v
diff -u -p -a -u -r1.114 acpi_machdep.c
--- acpi_machdep.c	15 Mar 2026 11:16:36 -0000	1.114
+++ acpi_machdep.c	9 Apr 2026 06:52:22 -0000
@@ -159,7 +159,7 @@ acpi_intr_establish(int irq, int flags,
 	apic = ioapic_find_bybase(irq);
 	if (apic == NULL)
 		return NULL;
-
+
 	map = malloc(sizeof(*map), M_DEVBUF, M_NOWAIT | M_ZERO);
 	if (map == NULL)
 		return NULL;
@@ -472,16 +472,15 @@ acpi_sleep_cpu(struct acpi_softc *sc, in
  * will cause the least number of unexpected side effects.  We re-start
  * the clocks early because we will soon run AML which might do DELAY.
  * Then PM, and then further system/CPU work for the BSP cpu.
- */
+ */
 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, i
 #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, i
 	/* 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
@@ -526,7 +530,7 @@ sleep_mp(void)
 {
 	int i;

-	/*
+	/*
 	 * Wait for cpus to halt so we know their FPU state has been
 	 * saved and their caches have been written back.
 	 */
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.