| /* SPDX-License-Identifier: GPL-2.0 */ |
| /* |
| * Common library for PCI host controller drivers |
| * |
| * Copyright (C) 2014 ARM Limited |
| * |
| * Author: Will Deacon <will.deacon@arm.com> |
| */ |
| |
| #ifndef _PCI_HOST_COMMON_H |
| #define _PCI_HOST_COMMON_H |
| |
| #include <linux/delay.h> |
| #include "../pci.h" |
| |
| struct pci_ecam_ops; |
| |
| /** |
| * struct pci_host_perst - PERST# GPIO descriptor |
| * @list: List node for linking multiple PERST# GPIOs |
| * @desc: GPIO descriptor for PERST# signal |
| * |
| * This structure holds a single PERST# GPIO descriptor. |
| */ |
| struct pci_host_perst { |
| struct list_head list; |
| struct gpio_desc *desc; |
| }; |
| |
| /** |
| * struct pci_host_port - Generic Root Port properties |
| * @list: List node for linking multiple ports |
| * @perst: List of PERST# GPIO descriptors for this port and its children |
| * |
| * This structure contains common properties that can be parsed from |
| * Root Port device tree nodes. |
| */ |
| struct pci_host_port { |
| struct list_head list; |
| struct list_head perst; |
| }; |
| |
| void pci_host_common_delete_ports(void *data); |
| int pci_host_common_parse_ports(struct device *dev, |
| struct pci_host_bridge *bridge); |
| int pci_host_common_probe(struct platform_device *pdev); |
| int pci_host_common_init(struct platform_device *pdev, |
| struct pci_host_bridge *bridge, |
| const struct pci_ecam_ops *ops); |
| void pci_host_common_remove(struct platform_device *pdev); |
| void pci_host_handle_link_down(struct pci_dev *port); |
| |
| struct pci_config_window *pci_host_common_ecam_create(struct device *dev, |
| struct pci_host_bridge *bridge, const struct pci_ecam_ops *ops); |
| |
| bool pci_host_common_d3cold_possible(struct pci_host_bridge *bridge, |
| bool *pme_capable); |
| |
| /** |
| * pci_host_common_link_train_delay - Wait 100 ms if link speed > 5 GT/s |
| * @max_link_speed: the maximum link speed (2 = 5.0 GT/s, 3 = 8.0 GT/s, ...) |
| * |
| * Must be called after Link training completes and before the first |
| * Configuration Request is sent. |
| */ |
| static inline void pci_host_common_link_train_delay(int max_link_speed) |
| { |
| if (max_link_speed > 2) |
| msleep(PCIE_RESET_CONFIG_WAIT_MS); |
| } |
| |
| #endif |