#include <linux/bitfield.h>
#include <linux/bits.h>
#include <linux/clk.h>
#include <linux/delay.h>
#include <linux/err.h>
#include <linux/gpio/consumer.h>
#include <linux/init.h>
#include <linux/iopoll.h>
#include <linux/irqchip/chained_irq.h>
#include <linux/kernel.h>
#include <linux/mod_devicetable.h>
#include <linux/pci.h>
#include <linux/platform_device.h>
#include <linux/property.h>
#include "pcie-designware.h"
#define PCIE_REGS_PCIE_CFG …
#define PCIE_DEVICE_TYPE …
#define PCIE_RSTN …
#define PCIE_REGS_PCIE_APP_CNTRL …
#define APP_LTSSM_ENABLE …
#define PCIE_REGS_INTERRUPT_ENABLE …
#define MSI_CTRL_INT_EN …
#define EDMA_INT_EN …
#define PCIE_REGS_INTERRUPT_STATUS …
#define MSI_CTRL_INT …
#define PCIE_REGS_PCIE_SII_PM_STATE …
#define SMLH_LINK_UP …
#define RDLH_LINK_UP …
#define PCIE_REGS_PCIE_SII_LINK_UP …
#define PCIE_REGS_PCIE_PHY_CNTL …
#define PHY0_SRAM_BYPASS …
#define PCIE_REGS_PCIE_PHY_STAT …
#define PHY0_MPLLA_STATE …
#define PCIE_REGS_LJPLL_STA …
#define LJPLL_LOCK …
#define PCIE_REGS_LJPLL_CNTRL_0 …
#define LJPLL_EN …
#define LJPLL_FOUT_EN …
#define PCIE_REGS_LJPLL_CNTRL_2 …
#define LJPLL_REF_DIV …
#define LJPLL_FB_DIV …
#define PCIE_REGS_LJPLL_CNTRL_3 …
#define LJPLL_POST_DIV3A …
#define LJPLL_POST_DIV2A …
#define PERST_DELAY_US …
#define AUX_CLK_RATE_HZ …
struct keembay_pcie { … };
struct keembay_pcie_of_data { … };
static void keembay_ep_reset_assert(struct keembay_pcie *pcie)
{ … }
static void keembay_ep_reset_deassert(struct keembay_pcie *pcie)
{ … }
static void keembay_pcie_ltssm_set(struct keembay_pcie *pcie, bool enable)
{ … }
static int keembay_pcie_link_up(struct dw_pcie *pci)
{ … }
static int keembay_pcie_start_link(struct dw_pcie *pci)
{ … }
static void keembay_pcie_stop_link(struct dw_pcie *pci)
{ … }
static const struct dw_pcie_ops keembay_pcie_ops = …;
static inline void keembay_pcie_disable_clock(void *data)
{ … }
static inline struct clk *keembay_pcie_probe_clock(struct device *dev,
const char *id, u64 rate)
{ … }
static int keembay_pcie_probe_clocks(struct keembay_pcie *pcie)
{ … }
static int keembay_pcie_pll_init(struct keembay_pcie *pcie)
{ … }
static void keembay_pcie_msi_irq_handler(struct irq_desc *desc)
{ … }
static int keembay_pcie_setup_msi_irq(struct keembay_pcie *pcie)
{ … }
static void keembay_pcie_ep_init(struct dw_pcie_ep *ep)
{ … }
static int keembay_pcie_ep_raise_irq(struct dw_pcie_ep *ep, u8 func_no,
unsigned int type, u16 interrupt_num)
{ … }
static const struct pci_epc_features keembay_pcie_epc_features = …;
static const struct pci_epc_features *
keembay_pcie_get_features(struct dw_pcie_ep *ep)
{ … }
static const struct dw_pcie_ep_ops keembay_pcie_ep_ops = …;
static const struct dw_pcie_host_ops keembay_pcie_host_ops = …;
static int keembay_pcie_add_pcie_port(struct keembay_pcie *pcie,
struct platform_device *pdev)
{ … }
static int keembay_pcie_probe(struct platform_device *pdev)
{ … }
static const struct keembay_pcie_of_data keembay_pcie_rc_of_data = …;
static const struct keembay_pcie_of_data keembay_pcie_ep_of_data = …;
static const struct of_device_id keembay_pcie_of_match[] = …;
static struct platform_driver keembay_pcie_driver = …;
builtin_platform_driver(…) …;