Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 9 May 2025 11:08:46 GMT
From:      Andrew Turner <andrew@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: 4a38527105d5 - main - pci: Ignore PCRx devices resources
Message-ID:  <202505091108.549B8kd1010934@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch main has been updated by andrew:

URL: https://cgit.FreeBSD.org/src/commit/?id=4a38527105d551d4ed3f8d8b51e055cc79be7c1b

commit 4a38527105d551d4ed3f8d8b51e055cc79be7c1b
Author:     Andrew Turner <andrew@FreeBSD.org>
AuthorDate: 2025-05-03 05:59:45 +0000
Commit:     Andrew Turner <andrew@FreeBSD.org>
CommitDate: 2025-05-08 18:38:36 +0000

    pci: Ignore PCRx devices resources
    
    Some systems provide two PCI root complex devices in the ACPI tables.
    Allow us to skip known pci-like devices even if they aren't detected
    as a PCI root complex.
    
    Reviewed by:    cognet, jhb
    Co-authored-by: cognet
    Differential Revision:  https://reviews.freebsd.org/D49709
---
 sys/dev/acpica/acpi_resource.c | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/sys/dev/acpica/acpi_resource.c b/sys/dev/acpica/acpi_resource.c
index 8c5a3ed57f32..8ced9b32cb22 100644
--- a/sys/dev/acpica/acpi_resource.c
+++ b/sys/dev/acpica/acpi_resource.c
@@ -67,6 +67,16 @@ struct lookup_irq_request {
 
 static char *pcilink_ids[] = { "PNP0C0F", NULL };
 
+/*
+ * Devices with invalid memory resources
+ */
+static char *bad_memresource_ids[] = {
+    /* PRCx on Radxa Orion O6 conflicts with the PCI resource range */
+    "CIXH2020",
+    NULL
+};
+
+
 static ACPI_STATUS
 acpi_lookup_irq_handler(ACPI_RESOURCE *res, void *context)
 {
@@ -620,6 +630,11 @@ acpi_res_ignore(device_t dev, int type, rman_res_t start, rman_res_t count)
      * access.
      */
     if (type == SYS_RES_MEMORY || type == SYS_RES_IOPORT) {
+	if (type == SYS_RES_MEMORY &&
+	    ACPI_ID_PROBE(device_get_parent(dev), dev, bad_memresource_ids,
+	    NULL) <= 0)
+		return (true);
+
 	if (ACPI_SUCCESS(AcpiGetObjectInfo(ad->ad_handle, &devinfo))) {
 	    if ((devinfo->Flags & ACPI_PCI_ROOT_BRIDGE) != 0) {
 #if defined(__i386__) || defined(__amd64__)



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202505091108.549B8kd1010934>