Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F115415978
D49146.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
2 KB
Referenced Files
None
Subscribers
None
D49146.diff
View Options
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
Details
Attached
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)
Attached To
Mode
D49146: acpi_pci: Add quirk for PSTAT_PME-before-detach
Attached
Detach File
Event Timeline
Log In to Comment