[PATCH AUTOSEL 6.19-5.10] ACPI: PM: Save NVS memory on Lenovo G70-35

Sasha Levin
2026-03-05T15:37:18Z

From: Piotr Mazek <pmazek@outlook.com>

[ Upstream commit 023cd6d90f8aa2ef7b72d84be84a18e61ecebd64 ]

[821d6f0359b0614792ab8e2fb93b503e25a65079] prevented machines
produced later than 2012 from saving NVS region to accelerate S3.

Despite being made after 2012, Lenovo G70-35 still needs NVS memory
saving during S3. A quirk is introduced for this platform.

Signed-off-by: Piotr Mazek <pmazek@outlook.com>
[ rjw: Subject adjustment ]
Link: https://patch.msgid.link/GV2PPF3CD5B63CC2442EE3F76F8443EAD90D499A@GV2PPF3CD5B63CC.EURP251.PROD.OUTLOOK.COM
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---

LLM Generated explanations, may be completely bogus:

### Classification

This is a **hardware quirk** — one of the explicitly listed exception
categories that are appropriate for stable backporting. The pattern is
identical to the existing Lenovo G50-45 and G40-45 quirks already in the
table.

### Technical details

- Commit `821d6f0359b0` (2014) made machines with BIOS year >= 2012 skip
NVS memory saving to speed up S3 suspend.
- Some Lenovo laptops (G50-45, G40-45, and now G70-35) need the NVS save
despite being post-2012.
- Without this quirk, suspend/resume (S3) is broken on the Lenovo
G70-35.

### Risk assessment

- **Scope**: Adds exactly 8 lines to a DMI quirk table — the most
mechanical kind of change possible.
- **Affected systems**: Only the Lenovo G70-35 (DMI match on vendor
"LENOVO" + product "80Q5"). Zero impact on any other machine.
- **Risk of regression**: Essentially zero. The DMI match is highly
specific.
- **Benefit**: Fixes S3 suspend/resume on this laptop — a real user-
facing bug that makes the machine unusable for suspend.

### Stable criteria check

1. **Obviously correct and tested**: Yes — follows exact same pattern as
existing quirks, and presumably tested by the reporter on the
hardware.
2. **Fixes a real bug**: Yes — broken S3 suspend/resume on this laptop.
3. **Important issue**: Yes — suspend/resume not working is a
significant issue for laptop users.
4. **Small and contained**: Yes — 8 lines added to a DMI table, no logic
changes.
5. **No new features**: Correct — this restores expected behavior on
specific hardware.
6. **Dependencies**: None — the DMI table and `init_nvs_save_s3`
callback have existed since 2014. This will apply cleanly to any
stable tree.

### Verification

- Verified commit `821d6f0359b0` exists and introduced the post-2012 NVS
nosave optimization (confirmed via `git log` and `git show`).
- Verified the existing quirk table in `drivers/acpi/sleep.c` already
has identical entries for Lenovo G50-45 ("80E3") and G40-45 ("80E1")
at lines 373-388.
- Verified `init_nvs_save_s3` callback and `acpi_sleep_dmi_check()`
(line 412-418) show the 2012 cutoff logic — confirming the quirk
mechanism.
- Verified the change is purely additive: 8 lines added to the DMI
table, no existing code modified.
- The `acpisleep_dmi_table` and `init_nvs_save_s3` have been present
since 2014, so all active stable trees contain the prerequisite code.

This is a textbook hardware quirk addition — small, safe, DMI-matched to
a single platform, fixing a real suspend/resume issue, with zero risk to
other systems.

**YES**

drivers/acpi/sleep.c | 8 ++++++++
1 file changed, 8 insertions(+)

diff --git a/drivers/acpi/sleep.c b/drivers/acpi/sleep.c
index 66ec81e306d47..132a9df984713 100644
--- a/drivers/acpi/sleep.c
+++ b/drivers/acpi/sleep.c
@@ -386,6 +386,14 @@ static const struct dmi_system_id acpisleep_dmi_table[] __initconst = {
DMI_MATCH(DMI_PRODUCT_NAME, "80E1"),
},
},
+ {
+ .callback = init_nvs_save_s3,
+ .ident = "Lenovo G70-35",
+ .matches = {
+ DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
+ DMI_MATCH(DMI_PRODUCT_NAME, "80Q5"),
+ },
+ },
/*
* ThinkPad X1 Tablet(2016) cannot do suspend-to-idle using
* the Low Power S0 Idle firmware interface (see
--
2.51.0