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 <jmcne...@invisible.ca> @@ -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; } /*