uart/ns16550, drivers/pcie: add PCI(e) support
A parallel PCI implementation ("pcie") is added with features for PCIe.
In particular, message-signaled interrupts (MSI) are supported, which
are essential to the use of any non-trivial PCIe device.
The NS16550 UART driver is modified to use pcie.
pcie is a complete replacement for the old PCI support ("pci"). It is
smaller, by an order of magnitude, and cleaner. Both pci and pcie can
(and do) coexist in the same builds, but the intent is to rework any
existing drivers that depend on pci and ultimately remove pci entirely.
This patch is large, but things in mirror are smaller than they appear.
Most of the modified files are configuration-related, and are changed
only slightly to accommodate the modified UART driver.
Deficiencies:
64-bit support is minimal. The code works fine with 64-bit capable
devices, but will not cooperate with MMIO regions (or MSI targets) that
have high bits set. This is not needed on any current boards, and is
unlikely to be needed in the future. Only superficial changes would
be required if we change our minds.
The method specifying PCI endpoints in devicetree is somewhat kludgey.
The "right" way would be to hang PCI devices off a topological tree;
while this would be more aesthetically pleasing, I don't think it's
worth the effort, given our non-standard use of devicetree.
Signed-off-by: Charles E. Youse <charles.youse@intel.com>
2019-04-02 10:06:07 -07:00
|
|
|
/*
|
|
|
|
* Copyright (c) 2019 Intel Corporation
|
|
|
|
*
|
|
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef ZEPHYR_INCLUDE_DRIVERS_PCIE_MSI_H_
|
|
|
|
#define ZEPHYR_INCLUDE_DRIVERS_PCIE_MSI_H_
|
|
|
|
|
2020-11-12 11:39:16 +01:00
|
|
|
#include <kernel.h>
|
uart/ns16550, drivers/pcie: add PCI(e) support
A parallel PCI implementation ("pcie") is added with features for PCIe.
In particular, message-signaled interrupts (MSI) are supported, which
are essential to the use of any non-trivial PCIe device.
The NS16550 UART driver is modified to use pcie.
pcie is a complete replacement for the old PCI support ("pci"). It is
smaller, by an order of magnitude, and cleaner. Both pci and pcie can
(and do) coexist in the same builds, but the intent is to rework any
existing drivers that depend on pci and ultimately remove pci entirely.
This patch is large, but things in mirror are smaller than they appear.
Most of the modified files are configuration-related, and are changed
only slightly to accommodate the modified UART driver.
Deficiencies:
64-bit support is minimal. The code works fine with 64-bit capable
devices, but will not cooperate with MMIO regions (or MSI targets) that
have high bits set. This is not needed on any current boards, and is
unlikely to be needed in the future. Only superficial changes would
be required if we change our minds.
The method specifying PCI endpoints in devicetree is somewhat kludgey.
The "right" way would be to hang PCI devices off a topological tree;
while this would be more aesthetically pleasing, I don't think it's
worth the effort, given our non-standard use of devicetree.
Signed-off-by: Charles E. Youse <charles.youse@intel.com>
2019-04-02 10:06:07 -07:00
|
|
|
#include <zephyr/types.h>
|
|
|
|
#include <stdbool.h>
|
|
|
|
|
2020-11-12 11:39:16 +01:00
|
|
|
#include <drivers/pcie/pcie.h>
|
|
|
|
|
uart/ns16550, drivers/pcie: add PCI(e) support
A parallel PCI implementation ("pcie") is added with features for PCIe.
In particular, message-signaled interrupts (MSI) are supported, which
are essential to the use of any non-trivial PCIe device.
The NS16550 UART driver is modified to use pcie.
pcie is a complete replacement for the old PCI support ("pci"). It is
smaller, by an order of magnitude, and cleaner. Both pci and pcie can
(and do) coexist in the same builds, but the intent is to rework any
existing drivers that depend on pci and ultimately remove pci entirely.
This patch is large, but things in mirror are smaller than they appear.
Most of the modified files are configuration-related, and are changed
only slightly to accommodate the modified UART driver.
Deficiencies:
64-bit support is minimal. The code works fine with 64-bit capable
devices, but will not cooperate with MMIO regions (or MSI targets) that
have high bits set. This is not needed on any current boards, and is
unlikely to be needed in the future. Only superficial changes would
be required if we change our minds.
The method specifying PCI endpoints in devicetree is somewhat kludgey.
The "right" way would be to hang PCI devices off a topological tree;
while this would be more aesthetically pleasing, I don't think it's
worth the effort, given our non-standard use of devicetree.
Signed-off-by: Charles E. Youse <charles.youse@intel.com>
2019-04-02 10:06:07 -07:00
|
|
|
#ifdef __cplusplus
|
|
|
|
extern "C" {
|
|
|
|
#endif
|
|
|
|
|
2020-11-19 10:47:46 +01:00
|
|
|
struct msix_vector {
|
|
|
|
uint32_t msg_addr;
|
|
|
|
uint32_t msg_up_addr;
|
|
|
|
uint32_t msg_data;
|
|
|
|
uint32_t vector_ctrl;
|
|
|
|
};
|
|
|
|
|
2020-11-12 11:39:16 +01:00
|
|
|
struct msi_vector {
|
|
|
|
pcie_bdf_t bdf;
|
|
|
|
arch_msi_vector_t arch;
|
2020-11-19 10:47:46 +01:00
|
|
|
#ifdef CONFIG_PCIE_MSI_X
|
|
|
|
struct msix_vector *msix_vector;
|
|
|
|
bool msix;
|
|
|
|
#endif /* CONFIG_PCIE_MSI_X */
|
2020-11-12 11:39:16 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
typedef struct msi_vector msi_vector_t;
|
|
|
|
|
|
|
|
#ifdef CONFIG_PCIE_MSI_MULTI_VECTOR
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @brief Allocate vector(s) for the endpoint MSI message(s)
|
|
|
|
*
|
|
|
|
* @param bdf the target PCI endpoint
|
|
|
|
* @param priority the MSI vectors base interrupt priority
|
|
|
|
* @param vectors an array for storing allocated MSI vectors
|
|
|
|
* @param n_vector the size of the MSI vectors array
|
|
|
|
*
|
|
|
|
* @return the number of allocated MSI vectors.
|
|
|
|
*/
|
|
|
|
extern uint8_t pcie_msi_vectors_allocate(pcie_bdf_t bdf,
|
|
|
|
unsigned int priority,
|
|
|
|
msi_vector_t *vectors,
|
|
|
|
uint8_t n_vector);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @brief Connect the MSI vector to the handler
|
|
|
|
*
|
|
|
|
* @param bdf the target PCI endpoint
|
|
|
|
* @param vector the MSI vector to connect
|
|
|
|
* @param routine Interrupt service routine
|
|
|
|
* @param parameter ISR parameter
|
|
|
|
* @param flags Arch-specific IRQ configuration flag
|
|
|
|
*
|
|
|
|
* @return True on success, false otherwise
|
|
|
|
*/
|
|
|
|
extern bool pcie_msi_vector_connect(pcie_bdf_t bdf,
|
|
|
|
msi_vector_t *vector,
|
|
|
|
void (*routine)(const void *parameter),
|
|
|
|
const void *parameter,
|
|
|
|
uint32_t flags);
|
|
|
|
|
|
|
|
#endif /* CONFIG_PCIE_MSI_MULTI_VECTOR */
|
|
|
|
|
uart/ns16550, drivers/pcie: add PCI(e) support
A parallel PCI implementation ("pcie") is added with features for PCIe.
In particular, message-signaled interrupts (MSI) are supported, which
are essential to the use of any non-trivial PCIe device.
The NS16550 UART driver is modified to use pcie.
pcie is a complete replacement for the old PCI support ("pci"). It is
smaller, by an order of magnitude, and cleaner. Both pci and pcie can
(and do) coexist in the same builds, but the intent is to rework any
existing drivers that depend on pci and ultimately remove pci entirely.
This patch is large, but things in mirror are smaller than they appear.
Most of the modified files are configuration-related, and are changed
only slightly to accommodate the modified UART driver.
Deficiencies:
64-bit support is minimal. The code works fine with 64-bit capable
devices, but will not cooperate with MMIO regions (or MSI targets) that
have high bits set. This is not needed on any current boards, and is
unlikely to be needed in the future. Only superficial changes would
be required if we change our minds.
The method specifying PCI endpoints in devicetree is somewhat kludgey.
The "right" way would be to hang PCI devices off a topological tree;
while this would be more aesthetically pleasing, I don't think it's
worth the effort, given our non-standard use of devicetree.
Signed-off-by: Charles E. Youse <charles.youse@intel.com>
2019-04-02 10:06:07 -07:00
|
|
|
/**
|
|
|
|
* @brief Compute the target address for an MSI posted write.
|
|
|
|
*
|
|
|
|
* This function is exported by the arch, board or SoC code.
|
|
|
|
*
|
|
|
|
* @param irq The IRQ we wish to trigger via MSI.
|
2020-11-12 11:39:16 +01:00
|
|
|
* @param vector The vector for which you want the address (or NULL)
|
uart/ns16550, drivers/pcie: add PCI(e) support
A parallel PCI implementation ("pcie") is added with features for PCIe.
In particular, message-signaled interrupts (MSI) are supported, which
are essential to the use of any non-trivial PCIe device.
The NS16550 UART driver is modified to use pcie.
pcie is a complete replacement for the old PCI support ("pci"). It is
smaller, by an order of magnitude, and cleaner. Both pci and pcie can
(and do) coexist in the same builds, but the intent is to rework any
existing drivers that depend on pci and ultimately remove pci entirely.
This patch is large, but things in mirror are smaller than they appear.
Most of the modified files are configuration-related, and are changed
only slightly to accommodate the modified UART driver.
Deficiencies:
64-bit support is minimal. The code works fine with 64-bit capable
devices, but will not cooperate with MMIO regions (or MSI targets) that
have high bits set. This is not needed on any current boards, and is
unlikely to be needed in the future. Only superficial changes would
be required if we change our minds.
The method specifying PCI endpoints in devicetree is somewhat kludgey.
The "right" way would be to hang PCI devices off a topological tree;
while this would be more aesthetically pleasing, I don't think it's
worth the effort, given our non-standard use of devicetree.
Signed-off-by: Charles E. Youse <charles.youse@intel.com>
2019-04-02 10:06:07 -07:00
|
|
|
* @return A (32-bit) value for the MSI MAP register.
|
|
|
|
*/
|
2020-11-12 11:39:16 +01:00
|
|
|
extern uint32_t pcie_msi_map(unsigned int irq,
|
|
|
|
msi_vector_t *vector);
|
uart/ns16550, drivers/pcie: add PCI(e) support
A parallel PCI implementation ("pcie") is added with features for PCIe.
In particular, message-signaled interrupts (MSI) are supported, which
are essential to the use of any non-trivial PCIe device.
The NS16550 UART driver is modified to use pcie.
pcie is a complete replacement for the old PCI support ("pci"). It is
smaller, by an order of magnitude, and cleaner. Both pci and pcie can
(and do) coexist in the same builds, but the intent is to rework any
existing drivers that depend on pci and ultimately remove pci entirely.
This patch is large, but things in mirror are smaller than they appear.
Most of the modified files are configuration-related, and are changed
only slightly to accommodate the modified UART driver.
Deficiencies:
64-bit support is minimal. The code works fine with 64-bit capable
devices, but will not cooperate with MMIO regions (or MSI targets) that
have high bits set. This is not needed on any current boards, and is
unlikely to be needed in the future. Only superficial changes would
be required if we change our minds.
The method specifying PCI endpoints in devicetree is somewhat kludgey.
The "right" way would be to hang PCI devices off a topological tree;
while this would be more aesthetically pleasing, I don't think it's
worth the effort, given our non-standard use of devicetree.
Signed-off-by: Charles E. Youse <charles.youse@intel.com>
2019-04-02 10:06:07 -07:00
|
|
|
|
|
|
|
/**
|
|
|
|
* @brief Compute the data for an MSI posted write.
|
|
|
|
*
|
|
|
|
* This function is exported by the arch, board or SoC code.
|
|
|
|
*
|
|
|
|
* @param irq The IRQ we wish to trigger via MSI.
|
2020-11-12 11:39:16 +01:00
|
|
|
* @param vector The vector for which you want the data (or NULL)
|
uart/ns16550, drivers/pcie: add PCI(e) support
A parallel PCI implementation ("pcie") is added with features for PCIe.
In particular, message-signaled interrupts (MSI) are supported, which
are essential to the use of any non-trivial PCIe device.
The NS16550 UART driver is modified to use pcie.
pcie is a complete replacement for the old PCI support ("pci"). It is
smaller, by an order of magnitude, and cleaner. Both pci and pcie can
(and do) coexist in the same builds, but the intent is to rework any
existing drivers that depend on pci and ultimately remove pci entirely.
This patch is large, but things in mirror are smaller than they appear.
Most of the modified files are configuration-related, and are changed
only slightly to accommodate the modified UART driver.
Deficiencies:
64-bit support is minimal. The code works fine with 64-bit capable
devices, but will not cooperate with MMIO regions (or MSI targets) that
have high bits set. This is not needed on any current boards, and is
unlikely to be needed in the future. Only superficial changes would
be required if we change our minds.
The method specifying PCI endpoints in devicetree is somewhat kludgey.
The "right" way would be to hang PCI devices off a topological tree;
while this would be more aesthetically pleasing, I don't think it's
worth the effort, given our non-standard use of devicetree.
Signed-off-by: Charles E. Youse <charles.youse@intel.com>
2019-04-02 10:06:07 -07:00
|
|
|
* @return A (16-bit) value for MSI MDR register.
|
|
|
|
*/
|
2020-11-12 11:39:16 +01:00
|
|
|
extern uint16_t pcie_msi_mdr(unsigned int irq,
|
|
|
|
msi_vector_t *vector);
|
uart/ns16550, drivers/pcie: add PCI(e) support
A parallel PCI implementation ("pcie") is added with features for PCIe.
In particular, message-signaled interrupts (MSI) are supported, which
are essential to the use of any non-trivial PCIe device.
The NS16550 UART driver is modified to use pcie.
pcie is a complete replacement for the old PCI support ("pci"). It is
smaller, by an order of magnitude, and cleaner. Both pci and pcie can
(and do) coexist in the same builds, but the intent is to rework any
existing drivers that depend on pci and ultimately remove pci entirely.
This patch is large, but things in mirror are smaller than they appear.
Most of the modified files are configuration-related, and are changed
only slightly to accommodate the modified UART driver.
Deficiencies:
64-bit support is minimal. The code works fine with 64-bit capable
devices, but will not cooperate with MMIO regions (or MSI targets) that
have high bits set. This is not needed on any current boards, and is
unlikely to be needed in the future. Only superficial changes would
be required if we change our minds.
The method specifying PCI endpoints in devicetree is somewhat kludgey.
The "right" way would be to hang PCI devices off a topological tree;
while this would be more aesthetically pleasing, I don't think it's
worth the effort, given our non-standard use of devicetree.
Signed-off-by: Charles E. Youse <charles.youse@intel.com>
2019-04-02 10:06:07 -07:00
|
|
|
|
|
|
|
/**
|
|
|
|
* @brief Configure the given PCI endpoint to generate MSIs.
|
|
|
|
*
|
|
|
|
* @param bdf the target PCI endpoint
|
2020-11-12 11:39:16 +01:00
|
|
|
* @param vectors an array of allocated vector(s)
|
|
|
|
* @param n_vector the size of the vector array
|
2021-08-11 11:16:11 -07:00
|
|
|
* @param irq The IRQ we wish to trigger via MSI.
|
uart/ns16550, drivers/pcie: add PCI(e) support
A parallel PCI implementation ("pcie") is added with features for PCIe.
In particular, message-signaled interrupts (MSI) are supported, which
are essential to the use of any non-trivial PCIe device.
The NS16550 UART driver is modified to use pcie.
pcie is a complete replacement for the old PCI support ("pci"). It is
smaller, by an order of magnitude, and cleaner. Both pci and pcie can
(and do) coexist in the same builds, but the intent is to rework any
existing drivers that depend on pci and ultimately remove pci entirely.
This patch is large, but things in mirror are smaller than they appear.
Most of the modified files are configuration-related, and are changed
only slightly to accommodate the modified UART driver.
Deficiencies:
64-bit support is minimal. The code works fine with 64-bit capable
devices, but will not cooperate with MMIO regions (or MSI targets) that
have high bits set. This is not needed on any current boards, and is
unlikely to be needed in the future. Only superficial changes would
be required if we change our minds.
The method specifying PCI endpoints in devicetree is somewhat kludgey.
The "right" way would be to hang PCI devices off a topological tree;
while this would be more aesthetically pleasing, I don't think it's
worth the effort, given our non-standard use of devicetree.
Signed-off-by: Charles E. Youse <charles.youse@intel.com>
2019-04-02 10:06:07 -07:00
|
|
|
* @return true if the endpoint supports MSI, false otherwise.
|
|
|
|
*/
|
2020-11-12 11:39:16 +01:00
|
|
|
extern bool pcie_msi_enable(pcie_bdf_t bdf,
|
|
|
|
msi_vector_t *vectors,
|
2021-08-11 11:16:11 -07:00
|
|
|
uint8_t n_vector,
|
|
|
|
unsigned int irq);
|
uart/ns16550, drivers/pcie: add PCI(e) support
A parallel PCI implementation ("pcie") is added with features for PCIe.
In particular, message-signaled interrupts (MSI) are supported, which
are essential to the use of any non-trivial PCIe device.
The NS16550 UART driver is modified to use pcie.
pcie is a complete replacement for the old PCI support ("pci"). It is
smaller, by an order of magnitude, and cleaner. Both pci and pcie can
(and do) coexist in the same builds, but the intent is to rework any
existing drivers that depend on pci and ultimately remove pci entirely.
This patch is large, but things in mirror are smaller than they appear.
Most of the modified files are configuration-related, and are changed
only slightly to accommodate the modified UART driver.
Deficiencies:
64-bit support is minimal. The code works fine with 64-bit capable
devices, but will not cooperate with MMIO regions (or MSI targets) that
have high bits set. This is not needed on any current boards, and is
unlikely to be needed in the future. Only superficial changes would
be required if we change our minds.
The method specifying PCI endpoints in devicetree is somewhat kludgey.
The "right" way would be to hang PCI devices off a topological tree;
while this would be more aesthetically pleasing, I don't think it's
worth the effort, given our non-standard use of devicetree.
Signed-off-by: Charles E. Youse <charles.youse@intel.com>
2019-04-02 10:06:07 -07:00
|
|
|
|
|
|
|
/*
|
|
|
|
* The first word of the MSI capability is shared with the
|
|
|
|
* capability ID and list link. The high 16 bits are the MCR.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#define PCIE_MSI_MCR 0U
|
|
|
|
|
|
|
|
#define PCIE_MSI_MCR_EN 0x00010000U /* enable MSI */
|
2020-11-12 11:39:16 +01:00
|
|
|
#define PCIE_MSI_MCR_MMC 0x000E0000U /* Multi Messages Capable mask */
|
|
|
|
#define PCIE_MSI_MCR_MMC_SHIFT 17
|
uart/ns16550, drivers/pcie: add PCI(e) support
A parallel PCI implementation ("pcie") is added with features for PCIe.
In particular, message-signaled interrupts (MSI) are supported, which
are essential to the use of any non-trivial PCIe device.
The NS16550 UART driver is modified to use pcie.
pcie is a complete replacement for the old PCI support ("pci"). It is
smaller, by an order of magnitude, and cleaner. Both pci and pcie can
(and do) coexist in the same builds, but the intent is to rework any
existing drivers that depend on pci and ultimately remove pci entirely.
This patch is large, but things in mirror are smaller than they appear.
Most of the modified files are configuration-related, and are changed
only slightly to accommodate the modified UART driver.
Deficiencies:
64-bit support is minimal. The code works fine with 64-bit capable
devices, but will not cooperate with MMIO regions (or MSI targets) that
have high bits set. This is not needed on any current boards, and is
unlikely to be needed in the future. Only superficial changes would
be required if we change our minds.
The method specifying PCI endpoints in devicetree is somewhat kludgey.
The "right" way would be to hang PCI devices off a topological tree;
while this would be more aesthetically pleasing, I don't think it's
worth the effort, given our non-standard use of devicetree.
Signed-off-by: Charles E. Youse <charles.youse@intel.com>
2019-04-02 10:06:07 -07:00
|
|
|
#define PCIE_MSI_MCR_MME 0x00700000U /* mask of # of enabled IRQs */
|
2020-11-12 11:39:16 +01:00
|
|
|
#define PCIE_MSI_MCR_MME_SHIFT 20
|
uart/ns16550, drivers/pcie: add PCI(e) support
A parallel PCI implementation ("pcie") is added with features for PCIe.
In particular, message-signaled interrupts (MSI) are supported, which
are essential to the use of any non-trivial PCIe device.
The NS16550 UART driver is modified to use pcie.
pcie is a complete replacement for the old PCI support ("pci"). It is
smaller, by an order of magnitude, and cleaner. Both pci and pcie can
(and do) coexist in the same builds, but the intent is to rework any
existing drivers that depend on pci and ultimately remove pci entirely.
This patch is large, but things in mirror are smaller than they appear.
Most of the modified files are configuration-related, and are changed
only slightly to accommodate the modified UART driver.
Deficiencies:
64-bit support is minimal. The code works fine with 64-bit capable
devices, but will not cooperate with MMIO regions (or MSI targets) that
have high bits set. This is not needed on any current boards, and is
unlikely to be needed in the future. Only superficial changes would
be required if we change our minds.
The method specifying PCI endpoints in devicetree is somewhat kludgey.
The "right" way would be to hang PCI devices off a topological tree;
while this would be more aesthetically pleasing, I don't think it's
worth the effort, given our non-standard use of devicetree.
Signed-off-by: Charles E. Youse <charles.youse@intel.com>
2019-04-02 10:06:07 -07:00
|
|
|
#define PCIE_MSI_MCR_64 0x00800000U /* 64-bit MSI */
|
|
|
|
|
|
|
|
/*
|
|
|
|
* The MAP follows the MCR. If PCIE_MSI_MCR_64, then the MAP
|
|
|
|
* is two words long. The MDR follows immediately after the MAP.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#define PCIE_MSI_MAP0 1U
|
|
|
|
#define PCIE_MSI_MAP1_64 2U
|
|
|
|
#define PCIE_MSI_MDR_32 2U
|
|
|
|
#define PCIE_MSI_MDR_64 3U
|
|
|
|
|
2020-11-19 10:47:46 +01:00
|
|
|
/*
|
|
|
|
* As for MSI, he first word of the MSI-X capability is shared
|
|
|
|
* with the capability ID and list link. The high 16 bits are the MCR.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#define PCIE_MSIX_MCR 0U
|
|
|
|
|
|
|
|
#define PCIE_MSIX_MCR_EN 0x80000000U /* Enable MSI-X */
|
|
|
|
#define PCIE_MSIX_MCR_FMASK 0x40000000U /* Function Mask */
|
|
|
|
#define PCIE_MSIX_MCR_TSIZE 0x07FF0000U /* Table size mask */
|
|
|
|
#define PCIE_MSIX_MCR_TSIZE_SHIFT 16
|
|
|
|
#define PCIE_MSIR_TABLE_ENTRY_SIZE 16
|
|
|
|
|
|
|
|
#define PCIE_MSIX_TR 1U
|
|
|
|
#define PCIE_MSIX_TR_BIR 0x00000007U /* BIR mask */
|
|
|
|
#define PCIE_MSIX_TR_OFFSET 0xFFFFFFF8U /* Offset mask */
|
|
|
|
|
|
|
|
#define PCIE_VTBL_MA 0U /* Msg Address offset */
|
|
|
|
#define PCIE_VTBL_MUA 4U /* Msg Upper Address offset */
|
|
|
|
#define PCIE_VTBL_MD 8U /* Msg Data offset */
|
|
|
|
#define PCIE_VTBL_VCTRL 12U /* Vector control offset */
|
|
|
|
|
uart/ns16550, drivers/pcie: add PCI(e) support
A parallel PCI implementation ("pcie") is added with features for PCIe.
In particular, message-signaled interrupts (MSI) are supported, which
are essential to the use of any non-trivial PCIe device.
The NS16550 UART driver is modified to use pcie.
pcie is a complete replacement for the old PCI support ("pci"). It is
smaller, by an order of magnitude, and cleaner. Both pci and pcie can
(and do) coexist in the same builds, but the intent is to rework any
existing drivers that depend on pci and ultimately remove pci entirely.
This patch is large, but things in mirror are smaller than they appear.
Most of the modified files are configuration-related, and are changed
only slightly to accommodate the modified UART driver.
Deficiencies:
64-bit support is minimal. The code works fine with 64-bit capable
devices, but will not cooperate with MMIO regions (or MSI targets) that
have high bits set. This is not needed on any current boards, and is
unlikely to be needed in the future. Only superficial changes would
be required if we change our minds.
The method specifying PCI endpoints in devicetree is somewhat kludgey.
The "right" way would be to hang PCI devices off a topological tree;
while this would be more aesthetically pleasing, I don't think it's
worth the effort, given our non-standard use of devicetree.
Signed-off-by: Charles E. Youse <charles.youse@intel.com>
2019-04-02 10:06:07 -07:00
|
|
|
#ifdef __cplusplus
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#endif /* ZEPHYR_INCLUDE_DRIVERS_PCIE_MSI_H_ */
|