Module Name: src
Committed By: martin
Date: Wed Jul 3 19:13:20 UTC 2024
Modified Files:
src/sys/arch/aarch64/include [netbsd-10]: vmparam.h
src/sys/arch/arm/pci [netbsd-10]: pci_msi_machdep.c
src/sys/dev/acpi [netbsd-10]: acpi_resource.c
src/sys/dev/pci [netbsd-10]: pci_resource.c
Log Message:
Pull up following revision(s) (requested by jmcneill in ticket #735):
sys/dev/pci/pci_resource.c: revision 1.5
sys/arch/arm/pci/pci_msi_machdep.c: revision 1.10
sys/arch/aarch64/include/vmparam.h: revision 1.21
sys/dev/acpi/acpi_resource.c: revision 1.43
pci_resource: Make unexpected bus numbers in bridges non-fatal.
Firmware bugs happen. Log a warning and continue instead of panicing.
acpi: Ignore producer/consumer bit for fixed memory resources.
The requirement to honour the producer/consumer bit in fixed memory
resource descriptors was dropped at some point in a revision to the ACPI
2.0 specification because too many firmware implementations got it wrong.
aarch64: Bump VM_PHYSSEG_MAX to match DRAM_BANKS / FDT_MEMORY_RANGES.
On aarch64 there is a single free list, so VM_PHYSSEG_MAX needs to be
the same as FDT_MEMORY_RANGES (which needs to be the same as DRAM_BANKS).
Future cleanup should be done to fold these into a single define.
arm: pci: Fix ITS ID lookup for MSIs.
pci_get_frameid expects a BDF requestor ID as input, not a Device ID.
Fixes MSI/MSI-X support on Ampere Altra systems.
To generate a diff of this commit:
cvs rdiff -u -r1.19 -r1.19.4.1 src/sys/arch/aarch64/include/vmparam.h
cvs rdiff -u -r1.9 -r1.9.24.1 src/sys/arch/arm/pci/pci_msi_machdep.c
cvs rdiff -u -r1.42 -r1.42.6.1 src/sys/dev/acpi/acpi_resource.c
cvs rdiff -u -r1.3.2.1 -r1.3.2.2 src/sys/dev/pci/pci_resource.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/arch/aarch64/include/vmparam.h
diff -u src/sys/arch/aarch64/include/vmparam.h:1.19 src/sys/arch/aarch64/include/vmparam.h:1.19.4.1
--- src/sys/arch/aarch64/include/vmparam.h:1.19 Sat Apr 2 11:16:06 2022
+++ src/sys/arch/aarch64/include/vmparam.h Wed Jul 3 19:13:20 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: vmparam.h,v 1.19 2022/04/02 11:16:06 skrll Exp $ */
+/* $NetBSD: vmparam.h,v 1.19.4.1 2024/07/03 19:13:20 martin Exp $ */
/*-
* Copyright (c) 2014 The NetBSD Foundation, Inc.
@@ -179,7 +179,7 @@
#define AARCH64_KVA_TO_PA(va) ((paddr_t) ((va) & ~AARCH64_DIRECTMAP_MASK))
/* */
-#define VM_PHYSSEG_MAX 64 /* XXX */
+#define VM_PHYSSEG_MAX 256 /* XXX */
#define VM_PHYSSEG_STRAT VM_PSTRAT_BSEARCH
#define VM_NFREELIST 1
Index: src/sys/arch/arm/pci/pci_msi_machdep.c
diff -u src/sys/arch/arm/pci/pci_msi_machdep.c:1.9 src/sys/arch/arm/pci/pci_msi_machdep.c:1.9.24.1
--- src/sys/arch/arm/pci/pci_msi_machdep.c:1.9 Thu Feb 13 06:28:25 2020
+++ src/sys/arch/arm/pci/pci_msi_machdep.c Wed Jul 3 19:13:20 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: pci_msi_machdep.c,v 1.9 2020/02/13 06:28:25 skrll Exp $ */
+/* $NetBSD: pci_msi_machdep.c,v 1.9.24.1 2024/07/03 19:13:20 martin Exp $ */
/*-
* Copyright (c) 2018 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: pci_msi_machdep.c,v 1.9 2020/02/13 06:28:25 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pci_msi_machdep.c,v 1.9.24.1 2024/07/03 19:13:20 martin Exp $");
#include <sys/kernel.h>
#include <sys/kmem.h>
@@ -63,14 +63,13 @@ static struct arm_pci_msi *
arm_pci_msi_lookup(const struct pci_attach_args *pa)
{
struct arm_pci_msi *msip;
- uint32_t devid, frameid;
+ uint32_t rid, frameid;
int b, d, f;
pci_decompose_tag(pa->pa_pc, pa->pa_tag, &b, &d, &f);
- devid = (b << 8) | (d << 3) | f;
- devid = pci_get_devid(pa->pa_pc, devid);
- frameid = pci_get_frameid(pa->pa_pc, devid);
+ rid = (b << 8) | (d << 3) | f;
+ frameid = pci_get_frameid(pa->pa_pc, rid);
SIMPLEQ_FOREACH(msip, &arm_pci_msi_list, msi_link)
if (frameid == msip->msi_id)
Index: src/sys/dev/acpi/acpi_resource.c
diff -u src/sys/dev/acpi/acpi_resource.c:1.42 src/sys/dev/acpi/acpi_resource.c:1.42.6.1
--- src/sys/dev/acpi/acpi_resource.c:1.42 Sat Aug 7 18:39:40 2021
+++ src/sys/dev/acpi/acpi_resource.c Wed Jul 3 19:13:20 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: acpi_resource.c,v 1.42 2021/08/07 18:39:40 jmcneill Exp $ */
+/* $NetBSD: acpi_resource.c,v 1.42.6.1 2024/07/03 19:13:20 martin Exp $ */
/*
* Copyright 2001 Wasabi Systems, Inc.
@@ -67,7 +67,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: acpi_resource.c,v 1.42 2021/08/07 18:39:40 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: acpi_resource.c,v 1.42.6.1 2024/07/03 19:13:20 martin Exp $");
#include <sys/param.h>
#include <sys/device.h>
@@ -247,9 +247,7 @@ acpi_resource_parse_callback(ACPI_RESOUR
case ACPI_RESOURCE_TYPE_ADDRESS32:
/* XXX Only fixed size supported for now */
- if (res->Data.Address32.Address.AddressLength == 0 ||
- (!arg->include_producer &&
- res->Data.Address32.ProducerConsumer != ACPI_CONSUMER))
+ if (res->Data.Address32.Address.AddressLength == 0)
break;
#define ADDRESS32_FIXED2(r) \
((r)->Data.Address32.MinAddressFixed == ACPI_ADDRESS_FIXED && \
@@ -303,9 +301,7 @@ acpi_resource_parse_callback(ACPI_RESOUR
case ACPI_RESOURCE_TYPE_ADDRESS64:
#ifdef _LP64
/* XXX Only fixed size supported for now */
- if (res->Data.Address64.Address.AddressLength == 0 ||
- (!arg->include_producer &&
- res->Data.Address64.ProducerConsumer != ACPI_CONSUMER))
+ if (res->Data.Address64.Address.AddressLength == 0)
break;
#define ADDRESS64_FIXED2(r) \
((r)->Data.Address64.MinAddressFixed == ACPI_ADDRESS_FIXED && \
Index: src/sys/dev/pci/pci_resource.c
diff -u src/sys/dev/pci/pci_resource.c:1.3.2.1 src/sys/dev/pci/pci_resource.c:1.3.2.2
--- src/sys/dev/pci/pci_resource.c:1.3.2.1 Wed Nov 29 12:34:46 2023
+++ src/sys/dev/pci/pci_resource.c Wed Jul 3 19:13:19 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: pci_resource.c,v 1.3.2.1 2023/11/29 12:34:46 martin Exp $ */
+/* $NetBSD: pci_resource.c,v 1.3.2.2 2024/07/03 19:13:19 martin Exp $ */
/*-
* Copyright (c) 2022 Jared McNeill <[email protected]>
@@ -35,7 +35,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: pci_resource.c,v 1.3.2.1 2023/11/29 12:34:46 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pci_resource.c,v 1.3.2.2 2024/07/03 19:13:19 martin Exp $");
#include <sys/param.h>
#include <sys/bus.h>
@@ -136,7 +136,7 @@ struct pci_resources {
vmem_t *pr_res[NUM_PCI_RANGES];
};
-static void pci_resource_scan_bus(struct pci_resources *,
+static int pci_resource_scan_bus(struct pci_resources *,
struct pci_device *, uint8_t);
#define PCI_SBDF_FMT "%04x:%02x:%02x.%u"
@@ -524,7 +524,11 @@ pci_resource_scan_device(struct pci_reso
bridge_bus = pci_conf_read(pr->pr_pc, tag, PCI_BRIDGE_BUS_REG);
sec_bus = PCI_BRIDGE_BUS_NUM_SECONDARY(bridge_bus);
if (sec_bus <= pr->pr_endbus) {
- pci_resource_scan_bus(pr, pd, sec_bus);
+ if (pci_resource_scan_bus(pr, pd, sec_bus) != 0) {
+ DPRINT("PCI: " PCI_SBDF_FMT " bus %u "
+ "already scanned (firmware bug!)\n",
+ PCI_SBDF_FMT_ARGS(pr, pd), sec_bus);
+ }
}
}
@@ -536,7 +540,7 @@ pci_resource_scan_device(struct pci_reso
*
* Enumerate devices on a bus, recursively.
*/
-static void
+static int
pci_resource_scan_bus(struct pci_resources *pr,
struct pci_device *bridge_dev, uint8_t busno)
{
@@ -552,8 +556,7 @@ pci_resource_scan_bus(struct pci_resourc
* Firmware has configured more than one bridge with the
* same secondary bus number.
*/
- panic("Bus %u already scanned (firmware bug!)", busno);
- return;
+ return EINVAL;
}
pb = pci_new_bus(pr, busno, bridge_dev);
@@ -570,6 +573,8 @@ pci_resource_scan_bus(struct pci_resourc
pci_resource_scan_device(pr, pb, devno, funcno);
}
}
+
+ return 0;
}
/*