From nobody Wed Apr 1 11:58:11 2026 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4fm3Qq2ypdz6Wchn for ; Wed, 01 Apr 2026 11:58:11 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R12" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4fm3Qq1lVMz3JKn for ; Wed, 01 Apr 2026 11:58:11 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1775044691; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=nimhxS4d9vAA7VjJm2w2Tk9j5PgHrQznnrJln1YOsjk=; b=rsat90VSwDnduA4fVdgpTMtN4odoVEz4bdAeAYj4RZ4WzuuS78/ApB5mr5xMT3Wkfzx/da hUEomD23wgSKT0yRccwIGyb9HYClg77rwpKxgQQwEHM6CvwB23Gjs+qAuaevalbi0pjWL6 VNXhgAQdnLiJG2YV12eI6YOVOmrKUmGApiwJ62ytwujEaxbzsL7xc2aTTLbgGiLzOZ851i tbHTV1vlEsDXuGMrOCcy1MXMtEmuwH9kbYBP8VKSNvI5nAQl4TyenxZWaRilVQBPY6LMyq o4RoG3ufOde7rWU3jLzS1hmncX9TeGdPAf50gSzYa9ndF36s+xnJw49nYxqkUw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1775044691; a=rsa-sha256; cv=none; b=qNprUCB6X0NioVv5XRqV28eTz99D5fqu3zhX5dlNxl6okXKIXlqRWEtB4LYvwIIZCBPNaE Hw6qb+6PgX4BKq8rkPikvYXq6bOph9X9ZfinVACgIMBWWz5iksNw8R9wGeoc1MOlAO+SMi q7RHvdqh8GeFWLAh/dn69FsJ6m5Ul6ZfQUyqDjD31/5yyHH1k1EmrcDwAN2wjHXlrPGULH aGRDKoHnFPrDkQHr1O+/iNc71JpyY7BEgiuMMJIN2waNbYLym86oyQ97p2Fyf6Jh+Fzl5a 6a2/vzRbQCiebw3aekS76YN6zfS68yNqziT+S5B0SL2pas9uflqkMSeSowT25Q== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1775044691; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=nimhxS4d9vAA7VjJm2w2Tk9j5PgHrQznnrJln1YOsjk=; b=IO4bd6KAjGD+RGCyVzemuMZnUwXXjUmhlfVT5CtE0iZWRvLtEQVcmBTuVdi0sErRtAEstH CcJNOIyeHdzdAc1RDNdTWR1SWIQADem9is9v90QatShBGZH4VcS8Nm90z7O2mOwbaHyExl LSHTjQwB/bMHU+0iX1EqR55DVDzzXJvZtvj5rIIa42zFpgp/ua0NrTm1zQaNUypulM2Gl8 RP1ZJ/cUk21J8wp/doLw5AQi4AnXgaHEYpa6aAcMUyV51WhZLEH+EhRWLiQdIIn/tB2ila IzXlvwHqvJop4BLjBN7wyb4kMlz7WAl0b2uWRPGK671IGe19YDEtHhCtwHnjLw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4fm3Qq117szd7 for ; Wed, 01 Apr 2026 11:58:11 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 47440 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Wed, 01 Apr 2026 11:58:11 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Aymeric Wibo Subject: git: 683f7a8374ff - main - acpi_spmc: Call new MS turn on display DSM List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: obiwac X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 683f7a8374ff67417ac45949bd56a12c23781232 Auto-Submitted: auto-generated Date: Wed, 01 Apr 2026 11:58:11 +0000 Message-Id: <69cd0853.47440.20ef591e@gitrepo.freebsd.org> The branch main has been updated by obiwac: URL: https://cgit.FreeBSD.org/src/commit/?id=683f7a8374ff67417ac45949bd56a12c23781232 commit 683f7a8374ff67417ac45949bd56a12c23781232 Author: Aymeric Wibo AuthorDate: 2026-04-01 11:56:03 +0000 Commit: Aymeric Wibo CommitDate: 2026-04-01 11:56:04 +0000 acpi_spmc: Call new MS turn on display DSM Microsoft added a new function index (turn on display, 9) to their DSM set. This revision calls this, which fixes S0ix on certain machines, such as the Lenovo Yoga Slim 7i Aura, who's ECs use this method as a trigger to restore power to certain devices. See commit 229ecbaac6b3 ("ACPI: x86: s2idle: Invoke Microsoft _DSM Function 9 (Turn On Display)") on Linux. Also see the following: https://learn.microsoft.com/en-us/windows-hardware/design/device-experiences/modern-standby-firmware-notifications#turn-on-display-notification-function-9 Reviewed by: olce Approved by: olce Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D56062 --- sys/dev/acpica/acpi_spmc.c | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/sys/dev/acpica/acpi_spmc.c b/sys/dev/acpica/acpi_spmc.c index 0c2a5d9e96a9..ca7b3bd95ead 100644 --- a/sys/dev/acpica/acpi_spmc.c +++ b/sys/dev/acpica/acpi_spmc.c @@ -45,6 +45,7 @@ enum intel_dsm_index { /* Only for Microsoft DSM set. */ DSM_MODERN_ENTRY_NOTIF = 7, DSM_MODERN_EXIT_NOTIF = 8, + DSM_MODERN_TURN_ON_DISPLAY = 9, }; enum amd_dsm_index { @@ -67,7 +68,9 @@ struct dsm_set { const char *name; int revision; struct uuid uuid; + uint64_t dsms_supported; uint64_t dsms_expected; + uint64_t extra_dsms; }; static struct dsm_set intel_dsm_set = { @@ -107,6 +110,7 @@ static struct dsm_set ms_dsm_set = { (1 << DSM_DISPLAY_ON_NOTIF) | (1 << DSM_ENTRY_NOTIF) | (1 << DSM_EXIT_NOTIF) | (1 << DSM_MODERN_ENTRY_NOTIF) | (1 << DSM_MODERN_EXIT_NOTIF), + .extra_dsms = (1 << DSM_MODERN_TURN_ON_DISPLAY), }; static struct dsm_set amd_dsm_set = { @@ -261,6 +265,8 @@ acpi_spmc_check_dsm_set(struct acpi_spmc_softc *sc, ACPI_HANDLE handle, { uint64_t dsms_supported = acpi_DSMQuery(handle, (uint8_t *)&dsm_set->uuid, dsm_set->revision); + const uint64_t min_dsms = dsm_set->dsms_expected; + const uint64_t max_dsms = min_dsms | dsm_set->extra_dsms; /* * Check if DSM set supported at all. We do this by checking the @@ -269,14 +275,19 @@ acpi_spmc_check_dsm_set(struct acpi_spmc_softc *sc, ACPI_HANDLE handle, if ((dsms_supported & 1) == 0) return; dsms_supported &= ~1; - if ((dsms_supported & dsm_set->dsms_expected) - != dsm_set->dsms_expected) { + dsm_set->dsms_supported = dsms_supported; + sc->dsm_sets |= dsm_set->flag; + + if ((dsms_supported & min_dsms) != min_dsms) device_printf(sc->dev, "DSM set %s does not support expected " "DSMs (%#" PRIx64 " vs %#" PRIx64 "). " "Some methods may fail.\n", - dsm_set->name, dsms_supported, dsm_set->dsms_expected); - } - sc->dsm_sets |= dsm_set->flag; + dsm_set->name, dsms_supported, min_dsms); + + if ((dsms_supported & ~max_dsms) != 0) + device_printf(sc->dev, "DSM set %s supports more DSMs than " + "expected (%#" PRIx64 " vs %#" PRIx64 ").", dsm_set->name, + dsms_supported, max_dsms); } static void @@ -601,6 +612,10 @@ acpi_spmc_exit_notif(device_t dev) acpi_spmc_run_dsm(dev, &amd_dsm_set, AMD_DSM_EXIT_NOTIF); if ((sc->dsm_sets & DSM_SET_MS) != 0) { acpi_spmc_run_dsm(dev, &ms_dsm_set, DSM_EXIT_NOTIF); + if (ms_dsm_set.dsms_supported & + (1 << DSM_MODERN_TURN_ON_DISPLAY)) + acpi_spmc_run_dsm(dev, &ms_dsm_set, + DSM_MODERN_TURN_ON_DISPLAY); acpi_spmc_run_dsm(dev, &ms_dsm_set, DSM_MODERN_EXIT_NOTIF); } }