summaryrefslogtreecommitdiff
path: root/include/pci.h
AgeCommit message (Collapse)Author
2019-10-08sandbox: pci: Drop the get_devfn() methodSimon Glass
This method is not used anymore since the bus/device/function of PCI devices can be obtained from their (parent's per-child) platform data. Drop it. Signed-off-by: Simon Glass <[email protected]> Reviewed-by: Bin Meng <[email protected]>
2019-07-10drivers: pci: add API to issue FLR on a PCI function if supportedAlex Marginean
Adds dm_pci_flr API that issues a Function Level reset on a PCI-e function, if FLR is supported. Signed-off-by: Alex Marginean <[email protected]> Reviewed-by: Bin Meng <[email protected]>
2019-07-10drivers: pci: add map_bar support for Enhanced AllocationAlex Marginean
Makes dm_pci_map_bar API available for integrated PCI devices that support Enhanced Allocation instead of the original PCI BAR mechanism. Signed-off-by: Alex Marginean <[email protected]> Reviewed-by: Bin Meng <[email protected]>
2019-07-10pci: fixed dm_pci_map_bar commentAlex Marginean
The comment now indicates that the input argument bar is a register offset, not a BAR index. It also mentions which BARs are supported for type 0/1 and that the function can return 0 on error. Signed-off-by: Alex Marginean <[email protected]> Reviewed-by: Bin Meng <[email protected]>
2019-05-08Revert "pci: Scale MAX_PCI_REGIONS based on CONFIG_NR_DRAM_BANKS"Simon Glass
This reverts commit aec4298ccb337106fd0115b91d846a022fdf301d. Unfortunately this has a dramatic impact on the pre-relocation memory used on x86 platforms (increasing it by 2KB) since it increases the overhead for each PCI device from 220 bytes to 412 bytes. The offending line is in UCLASS_DRIVER(pci): .per_device_auto_alloc_size = sizeof(struct pci_controller), This means that all PCI devices have the controller struct associated with them. The solution is to move the regions[] member out of the array, makes its size dynamic, or split UCLASS_PCI into controllers and non-controllers, as the comment suggests. For now, revert the commit to get things running again. Signed-off-by: Simon Glass <[email protected]> Reviewed-by: Bin Meng <[email protected]>
2019-04-24Merge tag 'pull-24apr19' of git://git.denx.de/u-boot-dmTom Rini
Various minor sandbox iumprovements Fixes for tracing with sandbox Refactoring for boot_get_fdt()
2019-04-23pci: pci.h: add missing maskbitRamon Fried
PCI_MSI_FLAGS_MASKBIT was missing from include file, add it. Signed-off-by: Ramon Fried <[email protected]> Reviewed-by: Simon Glass <[email protected]>
2019-04-23pci: Scale MAX_PCI_REGIONS based on CONFIG_NR_DRAM_BANKSThierry Reding
If a platform defines CONFIG_NR_DRAM_BANKS, each DRAM bank will be added as a PCI region. The number of MAX_PCI_REGIONS therefore needs to scale with the number of DRAM banks, otherwise we will end up with too little space in the hose->regions array to store all system memory regions. Signed-off-by: Thierry Reding <[email protected]> Reviewed-by: Simon Glass <[email protected]>
2019-03-22pci: Add comment to mention difference in DEVFN usage in U-Boot vs LinuxStefan Roese
This patch adds a comment to the header with the PCI_foo macros related to DEVFN to explain the difference in U-Boot vs Linux. Signed-off-by: Stefan Roese <[email protected]> Cc: Simon Glass <[email protected]> Cc: Bin Meng <[email protected]> Reviewed-by: Simon Glass <[email protected]>
2019-02-20pci: Fix comment in struct pci_child_platdataSimon Glass
This is platdata, not private data, so the comment is currently incorrect. Fix it to avoid confusion. Signed-off-by: Simon Glass <[email protected]> Reviewed-by: Bin Meng <[email protected]>
2019-02-20pci: Don't export pci_hose_config_device()Simon Glass
This function is not used outside this file so make it static. Signed-off-by: Simon Glass <[email protected]> Reviewed-by: Bin Meng <[email protected]>
2019-02-05pci: Add pci_get_devfn() to extract devfn from the fdt_pci_addrStefan Roese
This function will be used by the Marvell Armada XP/38x PCIe driver, which is moved to DM right now. So let's extract the functionality from pci_uclass_child_post_bind() to make it available. Signed-off-by: Stefan Roese <[email protected]> Reviewed-by: Simon Glass <[email protected]> Reviewed-by: Bin Meng <[email protected]>
2018-11-14dm: pci: Add APIs to find next capability and extended capabilityBin Meng
This introduces two new APIs dm_pci_find_next_capability() and dm_pci_find_next_ext_capability() to get PCI capability address and PCI express extended capability address for a given PCI device starting from a given offset. Signed-off-by: Bin Meng <[email protected]> Reviewed-by: Simon Glass <[email protected]>
2018-08-08dm: pci: Add APIs to find capability and extended capabilityBin Meng
This introduces two new APIs dm_pci_find_capability() and dm_pci_find_ext_capability() to get PCI capability address and PCI express extended capability address for a given PCI device. Signed-off-by: Bin Meng <[email protected]> Reviewed-by: Simon Glass <[email protected]>
2018-08-08pci: Add all known capability and extended capability idsBin Meng
Currently we don't have a complete list of capability and extended capability ids. This adds them. Signed-off-by: Bin Meng <[email protected]> Reviewed-by: Simon Glass <[email protected]>
2018-08-08pci: sandbox: Support dynamically binding device driverBin Meng
At present all emulated sandbox pci devices must be present in the device tree in order to be used. The real world pci uclass driver supports pci device driver matching, and we should add such support on sandbox too. Signed-off-by: Bin Meng <[email protected]> Reviewed-by: Simon Glass <[email protected]>
2018-08-08pci: Remove 440ep-specific macrosBin Meng
These macros should not be put in the generic pci.h header file. Since they are not referenced anywhere, remove them completely. Signed-off-by: Bin Meng <[email protected]> Reviewed-by: Simon Glass <[email protected]>
2018-05-26PCI: Document pciauto_region_allocate()Tuomas Tynkkynen
Add a doc comment for pciauto_region_allocate(). Signed-off-by: Tuomas Tynkkynen <[email protected]> Reviewed-by: Simon Glass <[email protected]>
2018-05-26PCI: autoconfig: Don't allocate 64-bit addresses to 32-bit only resourcesTuomas Tynkkynen
Currently, if we happen to allocate an address requiring 64 bits to a device only supporting 32-bit BARs, the address eventually gets silently truncated to 32 bits. Avoid this by adding a new flag to pciauto_region_allocate() to bail out in such situations. Signed-off-by: Tuomas Tynkkynen <[email protected]> Reviewed-by: Simon Glass <[email protected]>
2018-05-07SPDX: Convert all of our single license tags to Linux Kernel styleTom Rini
When U-Boot started using SPDX tags we were among the early adopters and there weren't a lot of other examples to borrow from. So we picked the area of the file that usually had a full license text and replaced it with an appropriate SPDX-License-Identifier: entry. Since then, the Linux Kernel has adopted SPDX tags and they place it as the very first line in a file (except where shebangs are used, then it's second line) and with slightly different comment styles than us. In part due to community overlap, in part due to better tag visibility and in part for other minor reasons, switch over to that style. This commit changes all instances where we have a single declared license in the tag as both the before and after are identical in tag contents. There's also a few places where I found we did not have a tag and have introduced one. Signed-off-by: Tom Rini <[email protected]>
2018-03-19pci: Remove unused ppc4xx variable from struct pci_controllerStefan Roese
ppc4xx support was removed some time ago. Lets remove the now unused "pci_fb" variable from "struct pci_controller" as well. Signed-off-by: Stefan Roese <[email protected]> Cc: Bin Meng <[email protected]> Cc: Simon Glass <[email protected]>
2017-10-06pci: Add helper for implementing memory-mapped config space accessesTuomas Tynkkynen
This sort of pattern for implementing memory-mapped PCI config space accesses appears in U-Boot twice already, and a third user is coming up. So add helper functions to avoid code duplication, similar to how Linux has pci_generic_config_write and pci_generic_config_read. Signed-off-by: Tuomas Tynkkynen <[email protected]> Reviewed-by: Bin Meng <[email protected]>
2017-05-31drivers: pci: imx: add imx_pcie_remove functionTim Harvey
There is no dedicated reset signal wired up for the MX6QDL thus if the bootloader enables the link we need some special handling to get the core back into a state where it is safe to touch it for configuration. While there has been some special handling in the Linux kernel to do this, it was removed in 4.11 thus we need to do it properly in the bootloader and therefore without this if you enable PCI in the bootloader you will hang while booting the 4.11 kernel. This puts the PCIe controller back into a safe state for the kernel driver before launching the kernel. Signed-off-by: Tim Harvey <[email protected]> Reviewed-by: Fabio Estevam <[email protected]> Tested-by: Peter Senna Tschudin <[email protected]>
2016-03-21pci: make pci_get_hose_head() available to external usersStuart Yoder
Put pci_get_hose_head() prototype in header so it is available to external users, allowing them to find and iterate over all pci controllers. Signed-off-by: Stuart Yoder <[email protected]> Reviewed-by: York Sun <[email protected]>
2016-03-17pci: Correct a few comments and nitsSimon Glass
Two comments are missing a parameter and there is an extra blank line. Also two of the region access macros are misnamed. Correct these problems. Signed-off-by: Simon Glass <[email protected]> Reviewed-by: Bin Meng <[email protected]>
2016-03-17pci: Add functions to update PCI configuration registersSimon Glass
It is common to read a config register value, clear and set some bits, then write back the updated value. Add functions to do this in one step, for convenience. Signed-off-by: Simon Glass <[email protected]> Reviewed-by: Bin Meng <[email protected]>
2016-02-05dm: pci: Add missing forward declarationsBin Meng
When CONFIG_DM_PCI_COMPAT is not on, there is only a forward declaration for pci_write_config32(). Add other missing ones. Signed-off-by: Bin Meng <[email protected]> Reviewed-by: Simon Glass <[email protected]>
2016-01-24dm: pci: Add a function to write a BARSimon Glass
Add a driver-model version of the pci_write_bar32 function so that this is supported in the new API. Signed-off-by: Simon Glass <[email protected]> Reviewed-by: Bin Meng <[email protected]>
2016-01-12dm: pci: Switch to DM API for PCI address mappingSimon Glass
We should use the new address mapping functions unless we are in compatibility mode. Disable the old functions by default. Signed-off-by: Simon Glass <[email protected]> Reviewed-by: Bin Meng <[email protected]>
2016-01-12dm: pci: Add driver model API functions for address mappingSimon Glass
At present the PCI address map functions use the old API. Add new functions for this so that drivers can be converted. Signed-off-by: Simon Glass <[email protected]> Reviewed-by: Bin Meng <[email protected]>
2016-01-12dm: pci: Add a function to read a PCI BARSimon Glass
Add a driver-model function for reading the PCI BAR from a device. Signed-off-by: Simon Glass <[email protected]> Reviewed-by: Bin Meng <[email protected]>
2016-01-12dm: pci: Add a driver-model version of pci_find_class()Simon Glass
Add a function which scans the driver model device information rather than scanning the PCI bus again. Signed-off-by: Simon Glass <[email protected]> Reviewed-by: Bin Meng <[email protected]> Tested-by: Bin Meng <[email protected]>
2016-01-12dm: pci: Add a driver-model version of pci_find_device()Simon Glass
Add a function which scans the driver model device information rather than scanning the PCI bus again. Signed-off-by: Simon Glass <[email protected]> Reviewed-by: Bin Meng <[email protected]> Tested-by: Bin Meng <[email protected]>
2016-01-12dm: pci: Use driver model PCI API in auto-configSimon Glass
At present we are using legacy functions even in the auto-configuration code used by driver model. Add a new pci_auto.c version which uses the correct API. Create a new pci_internal.h header to hold functions that are used within the PCI subsystem, but are not exported to other drivers. Signed-off-by: Simon Glass <[email protected]> Reviewed-by: Bin Meng <[email protected]> Tested-by: Bin Meng <[email protected]>
2016-01-12dm: pci: Add a dm_ prefix to pci_bus_find_bdf()Simon Glass
Most driver model PCI functions have a dm_ prefix. At some point, when the old code is converted to driver model and the old functions are removed, we will drop that prefix. For consistency, we should use the dm_ prefix for all driver model functions. Update pci_bus_find_bdf() accordingly. Signed-off-by: Simon Glass <[email protected]> Reviewed-by: Bin Meng <[email protected]>
2016-01-12dm: pci: Add a dm_ prefix to pci_get_bdf()Simon Glass
Most driver model PCI functions have a dm_ prefix. At some point, when the old code is converted to driver model and the old functions are removed, we will drop that prefix. For consistency, we should use the dm_ prefix for all driver model functions. Update pci_get_bdf() accordingly. Signed-off-by: Simon Glass <[email protected]> Reviewed-by: Bin Meng <[email protected]>
2015-12-01dm: pci: Disable PCI compatibility functions by defaultSimon Glass
We eventually need to drop the compatibility functions for driver model. As a first step, create a configuration option to enable them and hide them when the option is disabled. Signed-off-by: Simon Glass <[email protected]> Reviewed-by: Bin Meng <[email protected]>
2015-12-01dm: pci: Add a comment about how to find struct pci_controllerSimon Glass
With driver mode, struct pci_controller is stored as uclass-private data. Add a comment to that effect. Signed-off-by: Simon Glass <[email protected]> Reviewed-by: Bin Meng <[email protected]>
2015-12-01dm: pci: Add a function to find the regions for a PCI busSimon Glass
This function looks up the controller and returns a pointer to each region type. Signed-off-by: Simon Glass <[email protected]> Acked-by: Stephen Warren <[email protected]> Tested-by: Stephen Warren <[email protected]>
2015-12-01dm: pci: Add a function to get the controller for a busSimon Glass
A PCI bus may be a bridge device where the controller is the bridge's parent. Add a function to return the controller device, given a PCI device. Signed-off-by: Simon Glass <[email protected]> Acked-by: Stephen Warren <[email protected]> Tested-by: Stephen Warren <[email protected]>
2015-12-01dm: pci: Add functions to emulate 8- and 16-bit accessSimon Glass
Provide a few functions to support using 32-bit access to emulate 8- and 16-bit access. Signed-off-by: Simon Glass <[email protected]> Reviewed-by: Stephen Warren <[email protected]> Tested-by: Stephen Warren <[email protected]>
2015-10-23dm: Rename dev_get_parentdata() to dev_get_parent_priv()Simon Glass
The current name is inconsistent with other driver model data access functions. Rename it and fix up all users. Signed-off-by: Simon Glass <[email protected]> Reviewed-by: Joe Hershberger <[email protected]>
2015-08-26dm: pci: Add a comment to help find pci_hose_read_config_byte, etc.Simon Glass
These functions are defined by macros so do not show up with grep. Add a comment to help. Signed-off-by: Simon Glass <[email protected]> Reviewed-by: Bin Meng <[email protected]>
2015-08-14dm: pci: Add a way to iterate through all PCI devicesSimon Glass
These functions allow iteration through all PCI devices including bridges. The children of each PCI bus are returned in turn. This can be useful for configuring, checking or enumerating all the devices. Signed-off-by: Simon Glass <[email protected]> Reviewed-by: Bin Meng <[email protected]>
2015-08-14dm: pci: Provide friendly config access functionsSimon Glass
At present there are no PCI functions which allow access to PCI configuration using a struct udevice. This is a sad situation for driver model as it makes use of PCI harder. Add these functions. Signed-off-by: Simon Glass <[email protected]> Reviewed-by: Bin Meng <[email protected]>
2015-08-05pci: Add a constant for an invalid interruptSimon Glass
Rather than using 0xff in the code, add a constant. Signed-off-by: Simon Glass <[email protected]> Reviewed-by: Bin Meng <[email protected]>
2015-08-03drivers/pci: Add function to find an extended capabilityMinghuan Lian
PCIe extends device's configuration space to 4k and provides extended capability. The patch adds function to find them. The code is ported from Linux PCIe driver. Signed-off-by: Minghuan Lian <[email protected]> Reviewed-by: Bin Meng <[email protected]> Reviewed-by: York Sun <[email protected]>
2015-07-21dm: pci: Add a function to get the BDF for a deviceSimon Glass
It is useful to be able to find the full PCI address (bus, device and function) for a PCI device. Add a function to provide this. Adjust the existing code to use this. Signed-off-by: Simon Glass <[email protected]>
2015-07-21dm: pci: Add support for PCI driver matchingSimon Glass
At present all PCI devices must be present in the device tree in order to be used. Many or most PCI devices don't require any configuration other than that which is done automatically by U-Boot. It is inefficent to add a node with nothing but a compatible string in order to get a device working. Add a mechanism whereby PCI drivers can be declared along with the device parameters they support (vendor/device/class). When no suitable driver is found in the device tree the list of such devices is consulted to determine the correct driver. If this also fails, then a generic driver is used as before. The mechanism used is very similar to that provided by Linux and the header file defintions are copied from Linux 4.1. Signed-off-by: Simon Glass <[email protected]> Reviewed-by: Joe Hershberger <[email protected]>
2015-07-14pci: Configure expansion ROM during auto config processBin Meng
Currently PCI expansion ROM address is assigned by a call to pciauto_setup_rom() outside of the pci auto config process. This does not work when expansion ROM is on a device behind PCI bridge where bridge's memory limit register was already programmed to a value that does not cover the newly assigned expansion ROM address. To fix this, we should configure the ROM address during the auto config process. Signed-off-by: Bin Meng <[email protected]> Reviewed-by: Simon Glass <[email protected]> Tested-by: Simon Glass <[email protected]> Acked-by: Simon Glass <[email protected]>