Home | History | Annotate | Download | only in acpi
History log of /src/sys/dev/acpi/acpi_pci.c
RevisionDateAuthorComments
 1.37  14-Oct-2022  jmcneill Add a PCI resource manager and use it on Arm ACPI platforms.

The Arm ACPI code relied on PCI_NETBSD_CONFIGURE to configure devices that
were not enabled by system firmware. This is not safe to do unless the
firmware explicitly permits it using a device specific method defined in
the PCI firmware spec.

Introduce a new PCI resource manager that discovers what has already been
configured by firmware and allocates from the remaining space. This will
ensure that devices setup by firmware are untouched and only will program
BARs of devices that are not enabled at boot time.

The current implementation assumes that the parent PCI-PCI bridge's
are already configured. A worthwhile improvement in the future would be
to support programming windows for bridges that are not fully configured.
 1.36  27-Feb-2022  riastradh acpi: Nix conditional pci_get_segment use.

New MI default of 0 serves.
 1.35  11-Feb-2022  riastradh acpi(9): No need to test dv_locators.

It is always initialized by config_devalloc before config_devlink
makes it visible to device iteration. No need to reach into private
autoconf internals.
 1.34  22-Jan-2022  thorpej Change the devhandle_from_*() functions to also take a "super handle",
from which the newly created handle will inherit it's implementation.
The root implementation for a new handle type is used if an invalid
"super handle" is passed.
 1.33  20-Dec-2021  skrll Fix struct member prefix to be consistent. same code before and after.
 1.32  15-Sep-2021  thorpej Adjust the device_call() calling convention so as to provide type checking
of the arguments passed to the call, using auto-generated argument
structures and binding macros.
 1.31  12-May-2021  thorpej - Define a device call for PCI bus instances to fetch a direct child's
device handle given the device's device/function #s (extracted from
a pcitag_t). Use it to associate the handle with the child device
at config_found() time.
- Implement this device call for ACPI and OpenFirmware.
- Enable the OpenFirmware variant for evbarm FDT, macppc, ofppc, sparc64.
- Obsolete acpi_device_register(); it is no longer needed.
- Obsolete setting the OpenFirmware handle in PCI devices in the
sparc64 device_register(); it is no longer needed.
 1.30  14-Jan-2021  thorpej branches: 1.30.4; 1.30.6;
In acpi_pci_ignore_boot_config(), use acpi_dsm() and add some comments
describing the (somewhat confusing) semantics of the _DSM method used
here.
 1.29  08-May-2020  jmcneill branches: 1.29.2;
expose acpi_pcidev_pciroot_bus
 1.28  18-Jan-2020  jmcneill Ignore PCI boot config unless the _DSM for ignoring PCI boot config is
explicitly set to 0.
 1.27  17-Jan-2020  jmcneill Add support for Arm N1 SDP PCIe host controller.

The N1 SDP has a few bugs that we need to work around:
- PCIe root port config space lives in a non-standard location.
- Access to PCIe config space of devices that do not exist results in
an sync SError. Firmware creates a "known devices" table at a fixed
physical address that we use to filter PCI conf access to only known
devices.

This change splits the Arm ACPI PCI quirks into separate files for each
host controller, and allows per-segment quirks to be applied.

These changes exposed some bugs in the MI ACPI layer related to
multi-segment support. The MI ACPI PCI code was using a shared PCI
chipset tag to access devices, and these accesses can happen before our
PCI host bridge drivers are attached! The global chipset tag is now gone,
and an MD callback can provide a custom tag on a per-segment basis.
 1.26  01-Mar-2019  msaitoh branches: 1.26.6;
- Almost all ppbreg.h's definitions are also in pcireg.h. Remove duplicated
definitions from ppbreg.h and move some definitions from ppbreg.h to
pcireg.h.
- Change fast back-to-back "capable" to "enable" in pci_subr.c.
- Print Primary Discard Timer, Secondary Discard Timer, Discard Timer Status
and Discard Timer SERR# Enable bit in pci_subr.c.
- PCI_BRIDGE_PREFETCHBASE32_REG and PCI_BRIDGE_PREFETCHLIMIT32_REG are
"upper" 32bit registers, rename to *UP32_REG to avoid confusion.
- Use macro.
 1.25  27-Jan-2019  pgoyette Merge the [pgoyette-compat] branch
 1.24  21-Oct-2018  jmcneill Add a function to report whether the operating system may ignore the boot
configuration of PCI resources for a given bus.
 1.23  15-Oct-2018  jmcneill Add a function to find a PCI root bridge by segment and bus number.
 1.22  05-May-2018  christos branches: 1.22.2;
introduce acpi_device_present() to replace the previous _STA checks.
 1.21  07-Apr-2018  christos Merge conflicts; STA methods and fields are not present anymore.
 1.20  01-Jun-2017  chs branches: 1.20.8;
remove checks for failure after memory allocation calls that cannot fail:

kmem_alloc() with KM_SLEEP
kmem_zalloc() with KM_SLEEP
percpu_alloc()
pserialize_create()
psref_class_create()

all of these paths include an assertion that the allocation has not failed,
so callers should not assert that again.
 1.19  13-Apr-2015  christos sync with new acpica struct shuffling.
 1.18  31-Dec-2010  jruoho branches: 1.18.18; 1.18.36;
acpi_pcidev_find_dev(): take struct acpi_devnode as a parameter.
 1.17  31-Dec-2010  jruoho Move the function that finds a device_t for the corresponding ACPI device
node from ACPIVERBOSE to the ACPI PCI code.
 1.16  26-Oct-2010  gsutre An _ADR object is not required for PCI root bridges. To solve
this, the structure acpi_pciinfo now tells whether the ACPI
device node is a PCI bridge, a regular PCI device, or both.

Problem reported by jmcneill@, who also suggested the solution.

ok jmcneill@, jruoho@
 1.15  24-Sep-2010  gsutre Do not discard ACPI PCI addresses with function number 0xFFFF: the
ACPI specification allows them (ACPI 4.0a, p. 200).

ok jruoho@
 1.14  09-Aug-2010  gsutre acpi_pcidev_scan: attach PCI information only to working devices.

ok jruoho@
 1.13  08-Aug-2010  gsutre acpi_pcidev_scan: discard invalid PCI addresses.
 1.12  09-Jun-2010  mrg pci_chipset_tag_t is opaque - don't compare it to NULL, just use it.
shouldn't be a problem because "acpi_softc" variable isn't setup until
the "sc_pc" member is set.

fixes ia64 build. tested on amd64. ok jruoho.
 1.11  26-Apr-2010  jruoho Improve and rearrange comments.
 1.10  23-Apr-2010  jruoho Simplify acpi_pcidev_find(): directly return a pointer to the device node.
 1.9  22-Apr-2010  jruoho Some pretty printing for ACPIVERBOSE.
 1.8  22-Apr-2010  jruoho Wrap long lines, add some white space for readability, remove unnecessary
variable assignments, misc KNF. No functional change.
 1.7  22-Apr-2010  jruoho Shorten the long lines with two custom macros.
 1.6  22-Apr-2010  jruoho From Gregoire Sutre: rework the ACPI PCI support. This makes ACPI to
correctly pick PCI segment groups, PCI bus numbers, PCI root bridges,
PCI-to-PCI bridges, and PCI devices, among other things. In short: it is
more robust than the old code or anything in sys/arch/x86/x86/mpacpi.c.

ok cegger@, jmcneill@
 1.5  18-Apr-2010  jruoho From Gregoire Sutre:

Modify the main ACPI namespace scan by including a parent-child
relationship for each node. The result is a bi-directional tree.

ok jmcneill@
 1.4  09-Mar-2010  jruoho branches: 1.4.2; 1.4.4;
Remove the namespace scopes.

These are neither used nor useful beyond the parser and interpreter.

ok jmcneill@, joerg@
 1.3  05-Mar-2010  jruoho Remove <dev/acpi/acpica.h> from all files. It is included from
<dev/acpi/acpivar.h>. Ditto for <dev/sysmon/sysmonvar.h>, <sys/bus.h>,
<dev/pci/pcivar.h>, and <dev/isa/isavar.h>.

Also nuke a lot of unused and invalid headers. Some of these are audibly
provided by standard headers (namely <sys/param.h> and <sys/device.h>), some
have nothing to do with ACPI devices (e.g. <sys/syslog.h>), and some are
nonexistent local includes (e.g. "mpu_ym.h"). Moreoever, try to group the
includes into their respective blocks.

Tested with GENERIC and ALL (i386). No functional change.
 1.2  04-Dec-2009  njoly branches: 1.2.2;
Fix NetBSD keyword expansion.
 1.1  03-Dec-2009  cegger Enumerate ACPI PCI devices. Allows to link PCI with ACPI devices.
Patch presented on tech-kern@
http://mail-index.netbsd.org/tech-kern/2009/11/28/msg006552.html

'nice work' Jukka Ruohonen
 1.2.2.4  06-Nov-2010  uebayasi Sync with HEAD.
 1.2.2.3  22-Oct-2010  uebayasi Sync with HEAD (-D20101022).
 1.2.2.2  17-Aug-2010  uebayasi Sync with HEAD.
 1.2.2.1  30-Apr-2010  uebayasi Sync with HEAD.
 1.4.4.3  05-Mar-2011  rmind sync with head
 1.4.4.2  03-Jul-2010  rmind sync with head
 1.4.4.1  30-May-2010  rmind sync with head
 1.4.2.4  09-Oct-2010  yamt sync with head
 1.4.2.3  11-Aug-2010  yamt sync with head.
 1.4.2.2  11-Mar-2010  yamt sync with head
 1.4.2.1  09-Mar-2010  yamt file acpi_pci.c was added on branch yamt-nfs-mp on 2010-03-11 15:03:22 +0000
 1.18.36.2  28-Aug-2017  skrll Sync with HEAD
 1.18.36.1  06-Jun-2015  skrll Sync with HEAD
 1.18.18.1  03-Dec-2017  jdolecek update from HEAD
 1.20.8.4  26-Nov-2018  pgoyette Sync with HEAD, resolve a couple of conflicts
 1.20.8.3  20-Oct-2018  pgoyette Sync with head
 1.20.8.2  21-May-2018  pgoyette Sync with HEAD
 1.20.8.1  16-Apr-2018  pgoyette Sync with HEAD, resolve some conflicts
 1.22.2.2  08-Apr-2020  martin Merge changes from current as of 20200406
 1.22.2.1  10-Jun-2019  christos Sync with HEAD
 1.26.6.2  25-Jan-2020  ad Sync with head.
 1.26.6.1  17-Jan-2020  ad Sync with head.
 1.29.2.1  03-Apr-2021  thorpej Sync with HEAD.
 1.30.6.1  31-May-2021  cjep sync with head
 1.30.4.1  13-May-2021  thorpej Sync with HEAD.

RSS XML Feed