From nobody Thu Sep 17 09:56:04 2026 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 4hlrk248lGz6snBW for ; Thu, 17 Sep 2026 09:56:10 +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 "YR2" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4hlrk16ZpGz3Qdv for ; Thu, 17 Sep 2026 09:56:09 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1789638969; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=VSF5JY8guoYwZkeh8+QHk0bQKEOLCIb/BPGAPut0GvI=; b=JxXb/Lr4n3ouZFU82S1FPxIKFtfg45pLFA6vaiVPDvumOho476dj8Yxv2Qd7bhmv4bkDGF cSxIbrSbVDfF5DtkxSNb9yKPfawRYuCksIJksEpLrrejlawBSFlthbnCoZLGM6mmSABCsS VWwpvT4amPWmUiwXT9s9cTuEQXjsE+z3tafOPSngH4dTfOfAl15varfTRMQ/ZXbhxey8zn jgai+y1eUqQh2O1woX9vFohRM2V7zV+mGRa1h6ey8wm4kiiIOLcwmJWocyS/BTWajDI9tr 3q5M8R512jMuEYo25Za5KhtO8xn1NihvBm7rm6yiStnROYFGdixs1aSt8M8odQ== ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1789638969; b=N/vkx19j9P+nxAL0+CsSNU0NCGIiPylmWghFMMqpxN8eUz57uJ+/CEwRXGX9vRXuNGwI31 y2WsBZnXtHlff0UE4+jHjv0FB0V8TAw5wES7qL23HP50DLsy+2R/e1JhqgOpCHoLc+2bYA mFalrkTQ4MdQsqIlytoiEwESJWdYh6izc0I2x5OhskQtXH2gXbzLA/PEEgDFmJkii/MOV1 wMpXAK/k1XEsg6m+YKk41SlUglbpn/DrABqadfvOr7Gz7PO8HiNUflgpSLVvJiFB8wHXkd d9/PpC6sLcwt7obwgVksKCCr1A3D2iQ3XVTzz7U8VgdPGpybgWYP74ABqIklEQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1789638969; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=VSF5JY8guoYwZkeh8+QHk0bQKEOLCIb/BPGAPut0GvI=; b=Cy2gSXj0srkfRnn1i37Sg5690/Ba1nzI1IORO1rouplDpbSYFmep1ih9AXuMXfdbvGQIQe sqOIxkvgdNkjzAMV115dEV4u5WWRKhF8FPUu4V64Q4V21dsDAB7wEg9FTTQLKgpLUm9dpL kae1ydsoIB04w/KO/BZ+YPoWXtZYZ5GYUxwLSi1MyPHYjronxT0ouhUpEdlUXrqdDf9KD1 hC0ZwWZWaweC9VWtG5CPEOWy+9CT3wctzgZmAfYu0J6/zrJ1N/fHfXxR+wjoiBJ5KC04C0 JKgDEDrHZZezD+yxXFwtSUV+W6BKhowSoH7mcvzIUEm74BGZigv92exPJyDMZA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4hlrk14X7GzR6S for ; Thu, 17 Sep 2026 09:56:09 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 45a03 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Thu, 17 Sep 2026 09:56:04 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Cc: Sarah Walker From: Andrew Turner Subject: git: 9f24c7d54222 - main - dev: acpica: Add PCI device methods for aarch64 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 List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: andrew X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 9f24c7d5422285d2a89c50253c54aa1502f26dd7 Auto-Submitted: auto-generated Date: Thu, 17 Sep 2026 09:56:04 +0000 Message-Id: <6aabb934.45a03.eefef8f@gitrepo.freebsd.org> The branch main has been updated by andrew: URL: https://cgit.FreeBSD.org/src/commit/?id=9f24c7d5422285d2a89c50253c54aa1502f26dd7 commit 9f24c7d5422285d2a89c50253c54aa1502f26dd7 Author: Sarah Walker AuthorDate: 2026-08-04 12:35:08 +0000 Commit: Andrew Turner CommitDate: 2026-09-17 09:20:22 +0000 dev: acpica: Add PCI device methods for aarch64 Add pci_get_id() and pci_alloc_msi() device methods for aarch64 platforms. Reviewed by: markj (earlier version), andrew Sponsored by: Arm Ltd Differential Revision: https://reviews.freebsd.org/D59169 --- sys/arm64/acpica/acpi_iort.c | 60 ++++++++++++++++++++++++++++++++++++++++++++ sys/dev/acpica/acpi.c | 39 ++++++++++++++++++++++++++++ sys/dev/acpica/acpivar.h | 2 ++ 3 files changed, 101 insertions(+) diff --git a/sys/arm64/acpica/acpi_iort.c b/sys/arm64/acpica/acpi_iort.c index eef2575fe432..3ca1ff0e32df 100644 --- a/sys/arm64/acpica/acpi_iort.c +++ b/sys/arm64/acpica/acpi_iort.c @@ -763,6 +763,19 @@ acpi_iort_lookup_iwb_node(device_t bus, device_t child) return (NULL); } +int +acpi_iort_lookup_pci_id(device_t bus, device_t child, uintptr_t *devid) +{ + struct iort_node *node; + + node = acpi_iort_lookup_iwb_node(bus, child); + if (!node) + return (ENODEV); + + *devid = node->entries.mappings[0].outbase; + return (0); +} + int acpi_iort_lookup_its_from_iwb(device_t dev, int *its_id) { @@ -786,6 +799,53 @@ acpi_iort_lookup_its_from_iwb(device_t dev, int *its_id) return (ENODEV); } +int +acpi_iort_alloc_msi(device_t bus, device_t dev, int *count) +{ + int *irqs; + int irq_count; + int error; + int i; + int its_id; + u_int xref; + int pxm; + + irq_count = *count; + irqs = mallocarray(irq_count, sizeof(int), M_DEVBUF, M_WAITOK | M_ZERO); + + error = acpi_iort_lookup_its_from_iwb(dev, &its_id); + if (error) + return (error); + + error = acpi_iort_its_lookup(its_id, &xref, &pxm); + if (error) + return (error); + + error = intr_alloc_msi(bus, dev, xref, irq_count, irq_count, irqs); + if (error) + return (error); + + for (i = 0; i < irq_count; i++) { + error = bus_generic_rl_set_resource(bus, dev, SYS_RES_IRQ, + i + 1, irqs[i], 1); + if (error != 0) + break; + } + + *count = irq_count; + + /* Clean up resources if something failed */ + if (error != 0) { + for (int j = 0; j < i; j++) { + bus_generic_rl_delete_resource(bus, dev, SYS_RES_IRQ, + j + 1); + } + } + + free(irqs, M_DEVBUF); + return (error); +} + device_t acpi_iort_get_iwb_dev(int iwb_id) { diff --git a/sys/dev/acpica/acpi.c b/sys/dev/acpica/acpi.c index 351969058d72..5b4a5024b891 100644 --- a/sys/dev/acpica/acpi.c +++ b/sys/dev/acpica/acpi.c @@ -158,6 +158,9 @@ static acpi_scan_children_t acpi_device_scan_children; static isa_pnp_probe_t acpi_isa_pnp_probe; +static pci_get_id_t acpi_pci_get_id; +static pci_alloc_msi_t acpi_pci_alloc_msi; + static void acpi_reserve_resources(device_t dev); static int acpi_sysres_alloc(device_t dev); static uint32_t acpi_isa_get_logicalid(device_t dev); @@ -251,6 +254,10 @@ static device_method_t acpi_methods[] = { /* ISA emulation */ DEVMETHOD(isa_pnp_probe, acpi_isa_pnp_probe), + /* PCI emulation */ + DEVMETHOD(pci_get_id, acpi_pci_get_id), + DEVMETHOD(pci_alloc_msi, acpi_pci_alloc_msi), + DEVMETHOD_END }; @@ -2364,6 +2371,38 @@ acpi_isa_pnp_probe(device_t bus, device_t child, struct isa_pnp_id *ids) return_VALUE (result); } +static int +acpi_pci_get_id(device_t dev, device_t child, enum pci_id_type type, + uintptr_t *id) +{ + if (dev != device_get_parent(child)) + return (EINVAL); + + if (type != PCI_ID_MSI) + return (EINVAL); + +#ifdef __aarch64__ + if (acpi_iort_lookup_pci_id(dev, child, id) == 0) + return (0); +#endif + + return (ENXIO); +} + +static int +acpi_pci_alloc_msi(device_t bus, device_t child, int *count) +{ + if (bus != device_get_parent(child)) + return (EINVAL); + +#ifdef __aarch64__ + if (acpi_iort_alloc_msi(bus, child, count) == 0) + return (0); +#endif + + return (ENXIO); +} + /* * Look for a MCFG table. If it is present, use the settings for * domain (segment) 0 to setup PCI config space access via the memory diff --git a/sys/dev/acpica/acpivar.h b/sys/dev/acpica/acpivar.h index 05d581b77fb9..550c6ceb9c97 100644 --- a/sys/dev/acpica/acpivar.h +++ b/sys/dev/acpica/acpivar.h @@ -642,6 +642,8 @@ int acpi_iort_map_named_smmuv3(const char *devname, u_int rid, uint64_t *xref, u_int *devid); int acpi_iort_lookup_its_from_iwb(device_t dev, int *its_id); device_t acpi_iort_get_iwb_dev(int iwb_id); +int acpi_iort_lookup_pci_id(device_t bus, device_t child, uintptr_t *devid); +int acpi_iort_alloc_msi(device_t bus, device_t child, int *count); #endif #endif /* _KERNEL */ #endif /* !_ACPIVAR_H_ */