Page MenuHomeFreeBSD

D49146.diff
No OneTemporary

D49146.diff

diff --git a/release/tools/ec2.conf b/release/tools/ec2.conf
--- a/release/tools/ec2.conf
+++ b/release/tools/ec2.conf
@@ -72,8 +72,11 @@
# 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
--- a/sys/dev/acpica/acpi_pci.c
+++ b/sys/dev/acpica/acpi_pci.c
@@ -391,6 +391,8 @@
{
device_t child, dev;
ACPI_STATUS status;
+ int pmc;
+ uint16_t pmstat;
int error;
dev = context;
@@ -416,6 +418,13 @@
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
--- a/sys/dev/acpica/acpivar.h
+++ b/sys/dev/acpica/acpivar.h
@@ -230,6 +230,8 @@
* 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 @@
#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__)
/*

File Metadata

Mime Type
text/plain
Expires
Thu, Apr 24, 2:10 PM (12 h, 12 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
17760332
Default Alt Text
D49146.diff (2 KB)

Event Timeline