From nobody Wed Mar 5 20:28:00 2025 X-Original-To: dev-commits-src-all@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 4Z7PJ119jNz5qjfR; Wed, 05 Mar 2025 20:28:01 +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 "R10" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4Z7PJ102N2z3XYv; Wed, 05 Mar 2025 20:28:01 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1741206481; 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=QKVq2mNINFC+cRNnL6dLzys+8ri2afw/ZzPO7930cFI=; b=oPzfGk06zFK0Xe96pDw/+qn9v2IlvRrhZ5NFfYC8bgTwjnIN1uzCkSfjQdQOPGJfHKU0IG J25L89WdYynZRq9wxiN8YF12F0wg12B+48etwr94ZATu57ww4UfIlrc6KQ9egNc2sNXHnl I1JRyw96snMOPeVSsQmJwYR84ROcEjr3s3jb11oQ+9825JDbM/EWDuma5+WTSZN2QZqHOp 8YtRJDmDAN0FdwaVZ3Eworv81zhHy/RJkFpQcDqjqSgecXrpAX8bOCvcpLRMFSG/so4Jdd vTdcz1JFL8vdUM8R7tSohuO9fYFW3LEjX5K+cqRWvUDAFtKAzg0IqaD6NQnhFA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1741206481; a=rsa-sha256; cv=none; b=vZfNHTp0Ogj0NVJpxnwAI99SaHsUi9CllO5wsh18ZS9oQJnOlC9D5updAO3yxLVcSQSicC DQ+MNhJEOKGuYxHRQGhZLzqHfQMJhmZ9HflBxnOqPtm5B2qaWaMGVaUA9kD4Ruoj/Y3wZ7 R2OFddJ3PK/tRMsyGynngP8pnMWP2kdhHndxyG+sZkNY5eW6NKVQxwEDhpGja4KMqviUZa kKd6JBxInAETbsOohvwRJ2OwPzw8FLuJxSMYQnlFgJmAnCbA+QrPy6YgTUFw7PQfXu02wP o+aQoNh9pqSCtjZwCYqfxZ2NtLRTbsU0/sJSsAQP9DfJQ8ZUvwEHdqh2nHNI1Q== 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=1741206481; 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=QKVq2mNINFC+cRNnL6dLzys+8ri2afw/ZzPO7930cFI=; b=l37SjvGN5+hQVY/6LLUqgTjozKqn4+rzn5AHVZevCTCGWyTZB1a3Wsz+dLIC5plwU9K5oP 9cWIHMrIWn2YAPYLCx70gkQ2k+Ne2S1QnWr55vhUDs3jRKe8q6ESAlnGFPm/T10CpYTJKc f8WG7Hm4Ivsl4D2i42xSMCNHmMJHNfuX2FCKMWTAYGgrwFGCMWdv+KFv3DN/HeYLdclwjq ZTTk2MlaiYi0xvgwr+3UvyRGImu9HEiTwsTfXMJyeibEcZRhN5kBnom4IAKyoolspsJViv uVPXXfNtJlGpBIB7fOLrR2Y/QKeyTBAWum49z4At7LV4Dd1+a141E2/NTlxnUg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (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 did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4Z7PJ06HkVz4gQ; Wed, 05 Mar 2025 20:28:00 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 525KS09A074620; Wed, 5 Mar 2025 20:28:00 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 525KS0iH074617; Wed, 5 Mar 2025 20:28:00 GMT (envelope-from git) Date: Wed, 5 Mar 2025 20:28:00 GMT Message-Id: <202503052028.525KS0iH074617@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Colin Percival Subject: git: d70bac252d30 - main - acpi_pci: Add quirk for PSTAT_PME-before-detach List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: cperciva X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: d70bac252d30adec4feba0c866dabe2c16a756d9 Auto-Submitted: auto-generated The branch main has been updated by cperciva: URL: https://cgit.FreeBSD.org/src/commit/?id=d70bac252d30adec4feba0c866dabe2c16a756d9 commit d70bac252d30adec4feba0c866dabe2c16a756d9 Author: Colin Percival AuthorDate: 2025-02-27 00:31:08 +0000 Commit: Colin Percival CommitDate: 2025-03-05 20:25:49 +0000 acpi_pci: Add quirk for PSTAT_PME-before-detach In order to signal to Graviton [123] systems that a device is ready to be "ejected" (after a detach request is made via the EC2 API) we need to set PCIM_PSTAT_PME to 1 and PCIM_PSTAT_PMEENABLE to 0. We are not aware of any rationale for this requirement beyond "another OS kernel happens to do this", i.e. this is effectively bug-for-bug compatibility. Arguably this should be done by the ACPI _EJ0 method on these systems, but it is not. Create a new ACPI_Q_CLEAR_PME_ON_DETACH quirk and set it in EC2 AMIs, and add the PCI register write to acpi_pci_device_notify_handler when that quirk is set. Reviewed by: jhb MFC after: 1 month Sponsored by: Amazon Differential Revision: https://reviews.freebsd.org/D49146 --- release/tools/ec2.conf | 7 +++++-- sys/dev/acpica/acpi_pci.c | 9 +++++++++ sys/dev/acpica/acpivar.h | 3 +++ 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/release/tools/ec2.conf b/release/tools/ec2.conf index b5a91d47decf..a8fc3854a0e2 100644 --- a/release/tools/ec2.conf +++ b/release/tools/ec2.conf @@ -72,8 +72,11 @@ ec2_common() { # Graviton 1 through Graviton 4 have a bug in their ACPI where they # mark the PL061's pins as needing to be configured in PullUp mode - # (in fact the PL061 has no pullup/pulldown resistors). - echo 'debug.acpi.quirks="8"' >> ${DESTDIR}/boot/loader.conf + # (in fact the PL061 has no pullup/pulldown resistors). Graviton 1 + # through Graviton 3 have non-functional PCI _EJ0 and need a value + # written to the PCI power status register in order to eject a + # device. + echo 'debug.acpi.quirks="24"' >> ${DESTDIR}/boot/loader.conf # Load the kernel module for the Amazon "Elastic Network Adapter" echo 'if_ena_load="YES"' >> ${DESTDIR}/boot/loader.conf diff --git a/sys/dev/acpica/acpi_pci.c b/sys/dev/acpica/acpi_pci.c index 6411af02ee58..97704111839b 100644 --- a/sys/dev/acpica/acpi_pci.c +++ b/sys/dev/acpica/acpi_pci.c @@ -391,6 +391,8 @@ acpi_pci_device_notify_handler(ACPI_HANDLE h, UINT32 notify, void *context) { device_t child, dev; ACPI_STATUS status; + int pmc; + uint16_t pmstat; int error; dev = context; @@ -416,6 +418,13 @@ acpi_pci_device_notify_handler(ACPI_HANDLE h, UINT32 notify, void *context) device_get_nameunit(child), error); return; } + if ((acpi_quirks & ACPI_Q_CLEAR_PME_ON_DETACH) && + (pci_find_cap(child, PCIY_PMG, &pmc) == 0)) { + pmstat = pci_read_config(child, pmc + PCIR_POWER_STATUS, 2); + pmstat &= ~PCIM_PSTAT_PMEENABLE; + pmstat |= PCIM_PSTAT_PME; + pci_write_config(child, pmc + PCIR_POWER_STATUS, pmstat, 2); + } status = acpi_SetInteger(h, "_EJ0", 1); if (ACPI_FAILURE(status)) { bus_topo_unlock(); diff --git a/sys/dev/acpica/acpivar.h b/sys/dev/acpica/acpivar.h index 668d0b51a1f3..830764434f48 100644 --- a/sys/dev/acpica/acpivar.h +++ b/sys/dev/acpica/acpivar.h @@ -230,6 +230,8 @@ extern struct mtx acpi_mutex; * compatible flag and ignoring overrides that redirect IRQ 0 to pin 2. * ACPI_Q_AEI_NOPULL: Specifies that _AEI objects incorrectly designate pins * as "PullUp" and they should be treated as "NoPull" instead. + * ACPI_Q_CLEAR_PME_ON_DETACH: Specifies that PCIM_PSTAT_(PME & ~PMEENABLE) + * should be written to the power status register as part of ACPI Eject. */ extern int acpi_quirks; #define ACPI_Q_OK 0 @@ -237,6 +239,7 @@ extern int acpi_quirks; #define ACPI_Q_TIMER (1 << 1) #define ACPI_Q_MADT_IRQ0 (1 << 2) #define ACPI_Q_AEI_NOPULL (1 << 3) +#define ACPI_Q_CLEAR_PME_ON_DETACH (1 << 4) #if defined(__amd64__) || defined(__i386__) /*