Commit 87c71931 authored by Bjorn Helgaas's avatar Bjorn Helgaas

Merge branch 'pci/driver-cleanup'

- Use of_device_get_match_data(), not of_match_device(), when we only need
  the device data in altera, artpec6, cadence, designware-plat, dra7xx,
  keystone, kirin (Fan Fei)

- Drop pointless of_device_get_match_data() cast in j721e (Bjorn Helgaas)

- Drop redundant struct device * from j721e since struct cdns_pcie already
  has one (Bjorn Helgaas)

- Rename driver structs to *_pcie in intel-gw, iproc, ls-gen4,
  mediatek-gen3, microchip, mt7621, rcar-gen2, tegra194, uniphier, xgene,
  xilinx, xilinx-cpm for consistency across drivers (Fan Fei)

- Fix invalid address space conversions in hisi, spear13xx (Bjorn Helgaas)

* pci/driver-cleanup:
  PCI: spear13xx: Avoid invalid address space conversions
  PCI: hisi: Avoid invalid address space conversions
  PCI: xilinx-cpm: Rename xilinx_cpm_pcie_port to xilinx_cpm_pcie
  PCI: xilinx: Rename xilinx_pcie_port to xilinx_pcie
  PCI: xgene: Rename xgene_pcie_port to xgene_pcie
  PCI: uniphier: Rename uniphier_pcie_priv to uniphier_pcie
  PCI: tegra194: Rename tegra_pcie_dw to tegra194_pcie
  PCI: rcar-gen2: Rename rcar_pci_priv to rcar_pci
  PCI: mt7621: Rename mt7621_pci_ to mt7621_pcie_
  PCI: microchip: Rename mc_port to mc_pcie
  PCI: mediatek-gen3: Rename mtk_pcie_port to mtk_gen3_pcie
  PCI: ls-gen4: Rename ls_pcie_g4 to ls_g4_pcie
  PCI: iproc: Rename iproc_pcie_pltfm_ to iproc_pltfm_pcie_
  PCI: iproc: Rename iproc_pcie_bcma_ to iproc_bcma_pcie_
  PCI: intel-gw: Rename intel_pcie_port to intel_pcie
  PCI: j721e: Drop redundant struct device *
  PCI: j721e: Drop pointless of_device_get_match_data() cast
  PCI: kirin: Prefer of_device_get_match_data()
  PCI: keystone: Prefer of_device_get_match_data()
  PCI: dra7xx: Prefer of_device_get_match_data()
  PCI: designware-plat: Prefer of_device_get_match_data()
  PCI: cadence: Prefer of_device_get_match_data()
  PCI: artpec6: Prefer of_device_get_match_data()
  PCI: altera: Prefer of_device_get_match_data()

# Conflicts:
#	drivers/pci/controller/pcie-mt7621.c
parents f5d3ca6f 73a0c2be
...@@ -51,11 +51,10 @@ enum link_status { ...@@ -51,11 +51,10 @@ enum link_status {
#define MAX_LANES 2 #define MAX_LANES 2
struct j721e_pcie { struct j721e_pcie {
struct device *dev; struct cdns_pcie *cdns_pcie;
struct clk *refclk; struct clk *refclk;
u32 mode; u32 mode;
u32 num_lanes; u32 num_lanes;
struct cdns_pcie *cdns_pcie;
void __iomem *user_cfg_base; void __iomem *user_cfg_base;
void __iomem *intd_cfg_base; void __iomem *intd_cfg_base;
u32 linkdown_irq_regfield; u32 linkdown_irq_regfield;
...@@ -99,7 +98,7 @@ static inline void j721e_pcie_intd_writel(struct j721e_pcie *pcie, u32 offset, ...@@ -99,7 +98,7 @@ static inline void j721e_pcie_intd_writel(struct j721e_pcie *pcie, u32 offset,
static irqreturn_t j721e_pcie_link_irq_handler(int irq, void *priv) static irqreturn_t j721e_pcie_link_irq_handler(int irq, void *priv)
{ {
struct j721e_pcie *pcie = priv; struct j721e_pcie *pcie = priv;
struct device *dev = pcie->dev; struct device *dev = pcie->cdns_pcie->dev;
u32 reg; u32 reg;
reg = j721e_pcie_intd_readl(pcie, STATUS_REG_SYS_2); reg = j721e_pcie_intd_readl(pcie, STATUS_REG_SYS_2);
...@@ -165,7 +164,7 @@ static const struct cdns_pcie_ops j721e_pcie_ops = { ...@@ -165,7 +164,7 @@ static const struct cdns_pcie_ops j721e_pcie_ops = {
static int j721e_pcie_set_mode(struct j721e_pcie *pcie, struct regmap *syscon, static int j721e_pcie_set_mode(struct j721e_pcie *pcie, struct regmap *syscon,
unsigned int offset) unsigned int offset)
{ {
struct device *dev = pcie->dev; struct device *dev = pcie->cdns_pcie->dev;
u32 mask = J721E_MODE_RC; u32 mask = J721E_MODE_RC;
u32 mode = pcie->mode; u32 mode = pcie->mode;
u32 val = 0; u32 val = 0;
...@@ -184,7 +183,7 @@ static int j721e_pcie_set_mode(struct j721e_pcie *pcie, struct regmap *syscon, ...@@ -184,7 +183,7 @@ static int j721e_pcie_set_mode(struct j721e_pcie *pcie, struct regmap *syscon,
static int j721e_pcie_set_link_speed(struct j721e_pcie *pcie, static int j721e_pcie_set_link_speed(struct j721e_pcie *pcie,
struct regmap *syscon, unsigned int offset) struct regmap *syscon, unsigned int offset)
{ {
struct device *dev = pcie->dev; struct device *dev = pcie->cdns_pcie->dev;
struct device_node *np = dev->of_node; struct device_node *np = dev->of_node;
int link_speed; int link_speed;
u32 val = 0; u32 val = 0;
...@@ -205,7 +204,7 @@ static int j721e_pcie_set_link_speed(struct j721e_pcie *pcie, ...@@ -205,7 +204,7 @@ static int j721e_pcie_set_link_speed(struct j721e_pcie *pcie,
static int j721e_pcie_set_lane_count(struct j721e_pcie *pcie, static int j721e_pcie_set_lane_count(struct j721e_pcie *pcie,
struct regmap *syscon, unsigned int offset) struct regmap *syscon, unsigned int offset)
{ {
struct device *dev = pcie->dev; struct device *dev = pcie->cdns_pcie->dev;
u32 lanes = pcie->num_lanes; u32 lanes = pcie->num_lanes;
u32 val = 0; u32 val = 0;
int ret; int ret;
...@@ -220,7 +219,7 @@ static int j721e_pcie_set_lane_count(struct j721e_pcie *pcie, ...@@ -220,7 +219,7 @@ static int j721e_pcie_set_lane_count(struct j721e_pcie *pcie,
static int j721e_pcie_ctrl_init(struct j721e_pcie *pcie) static int j721e_pcie_ctrl_init(struct j721e_pcie *pcie)
{ {
struct device *dev = pcie->dev; struct device *dev = pcie->cdns_pcie->dev;
struct device_node *node = dev->of_node; struct device_node *node = dev->of_node;
struct of_phandle_args args; struct of_phandle_args args;
unsigned int offset = 0; unsigned int offset = 0;
...@@ -354,7 +353,7 @@ static int j721e_pcie_probe(struct platform_device *pdev) ...@@ -354,7 +353,7 @@ static int j721e_pcie_probe(struct platform_device *pdev)
struct device *dev = &pdev->dev; struct device *dev = &pdev->dev;
struct device_node *node = dev->of_node; struct device_node *node = dev->of_node;
struct pci_host_bridge *bridge; struct pci_host_bridge *bridge;
struct j721e_pcie_data *data; const struct j721e_pcie_data *data;
struct cdns_pcie *cdns_pcie; struct cdns_pcie *cdns_pcie;
struct j721e_pcie *pcie; struct j721e_pcie *pcie;
struct cdns_pcie_rc *rc; struct cdns_pcie_rc *rc;
...@@ -367,7 +366,7 @@ static int j721e_pcie_probe(struct platform_device *pdev) ...@@ -367,7 +366,7 @@ static int j721e_pcie_probe(struct platform_device *pdev)
int ret; int ret;
int irq; int irq;
data = (struct j721e_pcie_data *)of_device_get_match_data(dev); data = of_device_get_match_data(dev);
if (!data) if (!data)
return -EINVAL; return -EINVAL;
...@@ -377,7 +376,6 @@ static int j721e_pcie_probe(struct platform_device *pdev) ...@@ -377,7 +376,6 @@ static int j721e_pcie_probe(struct platform_device *pdev)
if (!pcie) if (!pcie)
return -ENOMEM; return -ENOMEM;
pcie->dev = dev;
pcie->mode = mode; pcie->mode = mode;
pcie->linkdown_irq_regfield = data->linkdown_irq_regfield; pcie->linkdown_irq_regfield = data->linkdown_irq_regfield;
......
...@@ -45,7 +45,6 @@ static int cdns_plat_pcie_probe(struct platform_device *pdev) ...@@ -45,7 +45,6 @@ static int cdns_plat_pcie_probe(struct platform_device *pdev)
{ {
const struct cdns_plat_pcie_of_data *data; const struct cdns_plat_pcie_of_data *data;
struct cdns_plat_pcie *cdns_plat_pcie; struct cdns_plat_pcie *cdns_plat_pcie;
const struct of_device_id *match;
struct device *dev = &pdev->dev; struct device *dev = &pdev->dev;
struct pci_host_bridge *bridge; struct pci_host_bridge *bridge;
struct cdns_pcie_ep *ep; struct cdns_pcie_ep *ep;
...@@ -54,11 +53,10 @@ static int cdns_plat_pcie_probe(struct platform_device *pdev) ...@@ -54,11 +53,10 @@ static int cdns_plat_pcie_probe(struct platform_device *pdev)
bool is_rc; bool is_rc;
int ret; int ret;
match = of_match_device(cdns_plat_pcie_of_match, dev); data = of_device_get_match_data(dev);
if (!match) if (!data)
return -EINVAL; return -EINVAL;
data = (struct cdns_plat_pcie_of_data *)match->data;
is_rc = data->is_rc; is_rc = data->is_rc;
pr_debug(" Started %s with is_rc: %d\n", __func__, is_rc); pr_debug(" Started %s with is_rc: %d\n", __func__, is_rc);
......
...@@ -697,16 +697,14 @@ static int dra7xx_pcie_probe(struct platform_device *pdev) ...@@ -697,16 +697,14 @@ static int dra7xx_pcie_probe(struct platform_device *pdev)
struct device_node *np = dev->of_node; struct device_node *np = dev->of_node;
char name[10]; char name[10];
struct gpio_desc *reset; struct gpio_desc *reset;
const struct of_device_id *match;
const struct dra7xx_pcie_of_data *data; const struct dra7xx_pcie_of_data *data;
enum dw_pcie_device_mode mode; enum dw_pcie_device_mode mode;
u32 b1co_mode_sel_mask; u32 b1co_mode_sel_mask;
match = of_match_device(of_match_ptr(of_dra7xx_pcie_match), dev); data = of_device_get_match_data(dev);
if (!match) if (!data)
return -EINVAL; return -EINVAL;
data = (struct dra7xx_pcie_of_data *)match->data;
mode = (enum dw_pcie_device_mode)data->mode; mode = (enum dw_pcie_device_mode)data->mode;
b1co_mode_sel_mask = data->b1co_mode_sel_mask; b1co_mode_sel_mask = data->b1co_mode_sel_mask;
......
...@@ -1108,7 +1108,6 @@ static int __init ks_pcie_probe(struct platform_device *pdev) ...@@ -1108,7 +1108,6 @@ static int __init ks_pcie_probe(struct platform_device *pdev)
struct device *dev = &pdev->dev; struct device *dev = &pdev->dev;
struct device_node *np = dev->of_node; struct device_node *np = dev->of_node;
const struct ks_pcie_of_data *data; const struct ks_pcie_of_data *data;
const struct of_device_id *match;
enum dw_pcie_device_mode mode; enum dw_pcie_device_mode mode;
struct dw_pcie *pci; struct dw_pcie *pci;
struct keystone_pcie *ks_pcie; struct keystone_pcie *ks_pcie;
...@@ -1125,8 +1124,7 @@ static int __init ks_pcie_probe(struct platform_device *pdev) ...@@ -1125,8 +1124,7 @@ static int __init ks_pcie_probe(struct platform_device *pdev)
int irq; int irq;
int i; int i;
match = of_match_device(of_match_ptr(ks_pcie_of_match), dev); data = of_device_get_match_data(dev);
data = (struct ks_pcie_of_data *)match->data;
if (!data) if (!data)
return -EINVAL; return -EINVAL;
......
...@@ -380,17 +380,15 @@ static int artpec6_pcie_probe(struct platform_device *pdev) ...@@ -380,17 +380,15 @@ static int artpec6_pcie_probe(struct platform_device *pdev)
struct dw_pcie *pci; struct dw_pcie *pci;
struct artpec6_pcie *artpec6_pcie; struct artpec6_pcie *artpec6_pcie;
int ret; int ret;
const struct of_device_id *match;
const struct artpec_pcie_of_data *data; const struct artpec_pcie_of_data *data;
enum artpec_pcie_variants variant; enum artpec_pcie_variants variant;
enum dw_pcie_device_mode mode; enum dw_pcie_device_mode mode;
u32 val; u32 val;
match = of_match_device(artpec6_pcie_of_match, dev); data = of_device_get_match_data(dev);
if (!match) if (!data)
return -EINVAL; return -EINVAL;
data = (struct artpec_pcie_of_data *)match->data;
variant = (enum artpec_pcie_variants)data->variant; variant = (enum artpec_pcie_variants)data->variant;
mode = (enum dw_pcie_device_mode)data->mode; mode = (enum dw_pcie_device_mode)data->mode;
......
...@@ -122,15 +122,13 @@ static int dw_plat_pcie_probe(struct platform_device *pdev) ...@@ -122,15 +122,13 @@ static int dw_plat_pcie_probe(struct platform_device *pdev)
struct dw_plat_pcie *dw_plat_pcie; struct dw_plat_pcie *dw_plat_pcie;
struct dw_pcie *pci; struct dw_pcie *pci;
int ret; int ret;
const struct of_device_id *match;
const struct dw_plat_pcie_of_data *data; const struct dw_plat_pcie_of_data *data;
enum dw_pcie_device_mode mode; enum dw_pcie_device_mode mode;
match = of_match_device(dw_plat_pcie_of_match, dev); data = of_device_get_match_data(dev);
if (!match) if (!data)
return -EINVAL; return -EINVAL;
data = (struct dw_plat_pcie_of_data *)match->data;
mode = (enum dw_pcie_device_mode)data->mode; mode = (enum dw_pcie_device_mode)data->mode;
dw_plat_pcie = devm_kzalloc(dev, sizeof(*dw_plat_pcie), GFP_KERNEL); dw_plat_pcie = devm_kzalloc(dev, sizeof(*dw_plat_pcie), GFP_KERNEL);
......
...@@ -18,6 +18,10 @@ ...@@ -18,6 +18,10 @@
#if defined(CONFIG_PCI_HISI) || (defined(CONFIG_ACPI) && defined(CONFIG_PCI_QUIRKS)) #if defined(CONFIG_PCI_HISI) || (defined(CONFIG_ACPI) && defined(CONFIG_PCI_QUIRKS))
struct hisi_pcie {
void __iomem *reg_base;
};
static int hisi_pcie_rd_conf(struct pci_bus *bus, u32 devfn, int where, static int hisi_pcie_rd_conf(struct pci_bus *bus, u32 devfn, int where,
int size, u32 *val) int size, u32 *val)
{ {
...@@ -58,10 +62,10 @@ static void __iomem *hisi_pcie_map_bus(struct pci_bus *bus, unsigned int devfn, ...@@ -58,10 +62,10 @@ static void __iomem *hisi_pcie_map_bus(struct pci_bus *bus, unsigned int devfn,
int where) int where)
{ {
struct pci_config_window *cfg = bus->sysdata; struct pci_config_window *cfg = bus->sysdata;
void __iomem *reg_base = cfg->priv; struct hisi_pcie *pcie = cfg->priv;
if (bus->number == cfg->busr.start) if (bus->number == cfg->busr.start)
return reg_base + where; return pcie->reg_base + where;
else else
return pci_ecam_map_bus(bus, devfn, where); return pci_ecam_map_bus(bus, devfn, where);
} }
...@@ -71,12 +75,16 @@ static void __iomem *hisi_pcie_map_bus(struct pci_bus *bus, unsigned int devfn, ...@@ -71,12 +75,16 @@ static void __iomem *hisi_pcie_map_bus(struct pci_bus *bus, unsigned int devfn,
static int hisi_pcie_init(struct pci_config_window *cfg) static int hisi_pcie_init(struct pci_config_window *cfg)
{ {
struct device *dev = cfg->parent; struct device *dev = cfg->parent;
struct hisi_pcie *pcie;
struct acpi_device *adev = to_acpi_device(dev); struct acpi_device *adev = to_acpi_device(dev);
struct acpi_pci_root *root = acpi_driver_data(adev); struct acpi_pci_root *root = acpi_driver_data(adev);
struct resource *res; struct resource *res;
void __iomem *reg_base;
int ret; int ret;
pcie = devm_kzalloc(dev, sizeof(*pcie), GFP_KERNEL);
if (!pcie)
return -ENOMEM;
/* /*
* Retrieve RC base and size from a HISI0081 device with _UID * Retrieve RC base and size from a HISI0081 device with _UID
* matching our segment. * matching our segment.
...@@ -91,11 +99,11 @@ static int hisi_pcie_init(struct pci_config_window *cfg) ...@@ -91,11 +99,11 @@ static int hisi_pcie_init(struct pci_config_window *cfg)
return -ENOMEM; return -ENOMEM;
} }
reg_base = devm_pci_remap_cfgspace(dev, res->start, resource_size(res)); pcie->reg_base = devm_pci_remap_cfgspace(dev, res->start, resource_size(res));
if (!reg_base) if (!pcie->reg_base)
return -ENOMEM; return -ENOMEM;
cfg->priv = reg_base; cfg->priv = pcie;
return 0; return 0;
} }
...@@ -115,9 +123,13 @@ const struct pci_ecam_ops hisi_pcie_ops = { ...@@ -115,9 +123,13 @@ const struct pci_ecam_ops hisi_pcie_ops = {
static int hisi_pcie_platform_init(struct pci_config_window *cfg) static int hisi_pcie_platform_init(struct pci_config_window *cfg)
{ {
struct device *dev = cfg->parent; struct device *dev = cfg->parent;
struct hisi_pcie *pcie;
struct platform_device *pdev = to_platform_device(dev); struct platform_device *pdev = to_platform_device(dev);
struct resource *res; struct resource *res;
void __iomem *reg_base;
pcie = devm_kzalloc(dev, sizeof(*pcie), GFP_KERNEL);
if (!pcie)
return -ENOMEM;
res = platform_get_resource(pdev, IORESOURCE_MEM, 1); res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
if (!res) { if (!res) {
...@@ -125,11 +137,11 @@ static int hisi_pcie_platform_init(struct pci_config_window *cfg) ...@@ -125,11 +137,11 @@ static int hisi_pcie_platform_init(struct pci_config_window *cfg)
return -EINVAL; return -EINVAL;
} }
reg_base = devm_pci_remap_cfgspace(dev, res->start, resource_size(res)); pcie->reg_base = devm_pci_remap_cfgspace(dev, res->start, resource_size(res));
if (!reg_base) if (!pcie->reg_base)
return -ENOMEM; return -ENOMEM;
cfg->priv = reg_base; cfg->priv = pcie;
return 0; return 0;
} }
......
...@@ -62,7 +62,7 @@ struct intel_pcie_soc { ...@@ -62,7 +62,7 @@ struct intel_pcie_soc {
unsigned int pcie_ver; unsigned int pcie_ver;
}; };
struct intel_pcie_port { struct intel_pcie {
struct dw_pcie pci; struct dw_pcie pci;
void __iomem *app_base; void __iomem *app_base;
struct gpio_desc *reset_gpio; struct gpio_desc *reset_gpio;
...@@ -83,53 +83,53 @@ static void pcie_update_bits(void __iomem *base, u32 ofs, u32 mask, u32 val) ...@@ -83,53 +83,53 @@ static void pcie_update_bits(void __iomem *base, u32 ofs, u32 mask, u32 val)
writel(val, base + ofs); writel(val, base + ofs);
} }
static inline void pcie_app_wr(struct intel_pcie_port *lpp, u32 ofs, u32 val) static inline void pcie_app_wr(struct intel_pcie *pcie, u32 ofs, u32 val)
{ {
writel(val, lpp->app_base + ofs); writel(val, pcie->app_base + ofs);
} }
static void pcie_app_wr_mask(struct intel_pcie_port *lpp, u32 ofs, static void pcie_app_wr_mask(struct intel_pcie *pcie, u32 ofs,
u32 mask, u32 val) u32 mask, u32 val)
{ {
pcie_update_bits(lpp->app_base, ofs, mask, val); pcie_update_bits(pcie->app_base, ofs, mask, val);
} }
static inline u32 pcie_rc_cfg_rd(struct intel_pcie_port *lpp, u32 ofs) static inline u32 pcie_rc_cfg_rd(struct intel_pcie *pcie, u32 ofs)
{ {
return dw_pcie_readl_dbi(&lpp->pci, ofs); return dw_pcie_readl_dbi(&pcie->pci, ofs);
} }
static inline void pcie_rc_cfg_wr(struct intel_pcie_port *lpp, u32 ofs, u32 val) static inline void pcie_rc_cfg_wr(struct intel_pcie *pcie, u32 ofs, u32 val)
{ {
dw_pcie_writel_dbi(&lpp->pci, ofs, val); dw_pcie_writel_dbi(&pcie->pci, ofs, val);
} }
static void pcie_rc_cfg_wr_mask(struct intel_pcie_port *lpp, u32 ofs, static void pcie_rc_cfg_wr_mask(struct intel_pcie *pcie, u32 ofs,
u32 mask, u32 val) u32 mask, u32 val)
{ {
pcie_update_bits(lpp->pci.dbi_base, ofs, mask, val); pcie_update_bits(pcie->pci.dbi_base, ofs, mask, val);
} }
static void intel_pcie_ltssm_enable(struct intel_pcie_port *lpp) static void intel_pcie_ltssm_enable(struct intel_pcie *pcie)
{ {
pcie_app_wr_mask(lpp, PCIE_APP_CCR, PCIE_APP_CCR_LTSSM_ENABLE, pcie_app_wr_mask(pcie, PCIE_APP_CCR, PCIE_APP_CCR_LTSSM_ENABLE,
PCIE_APP_CCR_LTSSM_ENABLE); PCIE_APP_CCR_LTSSM_ENABLE);
} }
static void intel_pcie_ltssm_disable(struct intel_pcie_port *lpp) static void intel_pcie_ltssm_disable(struct intel_pcie *pcie)
{ {
pcie_app_wr_mask(lpp, PCIE_APP_CCR, PCIE_APP_CCR_LTSSM_ENABLE, 0); pcie_app_wr_mask(pcie, PCIE_APP_CCR, PCIE_APP_CCR_LTSSM_ENABLE, 0);
} }
static void intel_pcie_link_setup(struct intel_pcie_port *lpp) static void intel_pcie_link_setup(struct intel_pcie *pcie)
{ {
u32 val; u32 val;
u8 offset = dw_pcie_find_capability(&lpp->pci, PCI_CAP_ID_EXP); u8 offset = dw_pcie_find_capability(&pcie->pci, PCI_CAP_ID_EXP);
val = pcie_rc_cfg_rd(lpp, offset + PCI_EXP_LNKCTL); val = pcie_rc_cfg_rd(pcie, offset + PCI_EXP_LNKCTL);
val &= ~(PCI_EXP_LNKCTL_LD | PCI_EXP_LNKCTL_ASPMC); val &= ~(PCI_EXP_LNKCTL_LD | PCI_EXP_LNKCTL_ASPMC);
pcie_rc_cfg_wr(lpp, offset + PCI_EXP_LNKCTL, val); pcie_rc_cfg_wr(pcie, offset + PCI_EXP_LNKCTL, val);
} }
static void intel_pcie_init_n_fts(struct dw_pcie *pci) static void intel_pcie_init_n_fts(struct dw_pcie *pci)
...@@ -148,14 +148,14 @@ static void intel_pcie_init_n_fts(struct dw_pcie *pci) ...@@ -148,14 +148,14 @@ static void intel_pcie_init_n_fts(struct dw_pcie *pci)
pci->n_fts[0] = PORT_AFR_N_FTS_GEN12_DFT; pci->n_fts[0] = PORT_AFR_N_FTS_GEN12_DFT;
} }
static int intel_pcie_ep_rst_init(struct intel_pcie_port *lpp) static int intel_pcie_ep_rst_init(struct intel_pcie *pcie)
{ {
struct device *dev = lpp->pci.dev; struct device *dev = pcie->pci.dev;
int ret; int ret;
lpp->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_LOW); pcie->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_LOW);
if (IS_ERR(lpp->reset_gpio)) { if (IS_ERR(pcie->reset_gpio)) {
ret = PTR_ERR(lpp->reset_gpio); ret = PTR_ERR(pcie->reset_gpio);
if (ret != -EPROBE_DEFER) if (ret != -EPROBE_DEFER)
dev_err(dev, "Failed to request PCIe GPIO: %d\n", ret); dev_err(dev, "Failed to request PCIe GPIO: %d\n", ret);
return ret; return ret;
...@@ -167,19 +167,19 @@ static int intel_pcie_ep_rst_init(struct intel_pcie_port *lpp) ...@@ -167,19 +167,19 @@ static int intel_pcie_ep_rst_init(struct intel_pcie_port *lpp)
return 0; return 0;
} }
static void intel_pcie_core_rst_assert(struct intel_pcie_port *lpp) static void intel_pcie_core_rst_assert(struct intel_pcie *pcie)
{ {
reset_control_assert(lpp->core_rst); reset_control_assert(pcie->core_rst);
} }
static void intel_pcie_core_rst_deassert(struct intel_pcie_port *lpp) static void intel_pcie_core_rst_deassert(struct intel_pcie *pcie)
{ {
/* /*
* One micro-second delay to make sure the reset pulse * One micro-second delay to make sure the reset pulse
* wide enough so that core reset is clean. * wide enough so that core reset is clean.
*/ */
udelay(1); udelay(1);
reset_control_deassert(lpp->core_rst); reset_control_deassert(pcie->core_rst);
/* /*
* Some SoC core reset also reset PHY, more delay needed * Some SoC core reset also reset PHY, more delay needed
...@@ -188,58 +188,58 @@ static void intel_pcie_core_rst_deassert(struct intel_pcie_port *lpp) ...@@ -188,58 +188,58 @@ static void intel_pcie_core_rst_deassert(struct intel_pcie_port *lpp)
usleep_range(1000, 2000); usleep_range(1000, 2000);
} }
static void intel_pcie_device_rst_assert(struct intel_pcie_port *lpp) static void intel_pcie_device_rst_assert(struct intel_pcie *pcie)
{ {
gpiod_set_value_cansleep(lpp->reset_gpio, 1); gpiod_set_value_cansleep(pcie->reset_gpio, 1);
} }
static void intel_pcie_device_rst_deassert(struct intel_pcie_port *lpp) static void intel_pcie_device_rst_deassert(struct intel_pcie *pcie)
{ {
msleep(lpp->rst_intrvl); msleep(pcie->rst_intrvl);
gpiod_set_value_cansleep(lpp->reset_gpio, 0); gpiod_set_value_cansleep(pcie->reset_gpio, 0);
} }
static void intel_pcie_core_irq_disable(struct intel_pcie_port *lpp) static void intel_pcie_core_irq_disable(struct intel_pcie *pcie)
{ {
pcie_app_wr(lpp, PCIE_APP_IRNEN, 0); pcie_app_wr(pcie, PCIE_APP_IRNEN, 0);
pcie_app_wr(lpp, PCIE_APP_IRNCR, PCIE_APP_IRN_INT); pcie_app_wr(pcie, PCIE_APP_IRNCR, PCIE_APP_IRN_INT);
} }
static int intel_pcie_get_resources(struct platform_device *pdev) static int intel_pcie_get_resources(struct platform_device *pdev)
{ {
struct intel_pcie_port *lpp = platform_get_drvdata(pdev); struct intel_pcie *pcie = platform_get_drvdata(pdev);
struct dw_pcie *pci = &lpp->pci; struct dw_pcie *pci = &pcie->pci;
struct device *dev = pci->dev; struct device *dev = pci->dev;
int ret; int ret;
lpp->core_clk = devm_clk_get(dev, NULL); pcie->core_clk = devm_clk_get(dev, NULL);
if (IS_ERR(lpp->core_clk)) { if (IS_ERR(pcie->core_clk)) {
ret = PTR_ERR(lpp->core_clk); ret = PTR_ERR(pcie->core_clk);
if (ret != -EPROBE_DEFER) if (ret != -EPROBE_DEFER)
dev_err(dev, "Failed to get clks: %d\n", ret); dev_err(dev, "Failed to get clks: %d\n", ret);
return ret; return ret;
} }
lpp->core_rst = devm_reset_control_get(dev, NULL); pcie->core_rst = devm_reset_control_get(dev, NULL);
if (IS_ERR(lpp->core_rst)) { if (IS_ERR(pcie->core_rst)) {
ret = PTR_ERR(lpp->core_rst); ret = PTR_ERR(pcie->core_rst);
if (ret != -EPROBE_DEFER) if (ret != -EPROBE_DEFER)
dev_err(dev, "Failed to get resets: %d\n", ret); dev_err(dev, "Failed to get resets: %d\n", ret);
return ret; return ret;
} }
ret = device_property_read_u32(dev, "reset-assert-ms", ret = device_property_read_u32(dev, "reset-assert-ms",
&lpp->rst_intrvl); &pcie->rst_intrvl);
if (ret) if (ret)
lpp->rst_intrvl = RESET_INTERVAL_MS; pcie->rst_intrvl = RESET_INTERVAL_MS;
lpp->app_base = devm_platform_ioremap_resource_byname(pdev, "app"); pcie->app_base = devm_platform_ioremap_resource_byname(pdev, "app");
if (IS_ERR(lpp->app_base)) if (IS_ERR(pcie->app_base))
return PTR_ERR(lpp->app_base); return PTR_ERR(pcie->app_base);
lpp->phy = devm_phy_get(dev, "pcie"); pcie->phy = devm_phy_get(dev, "pcie");
if (IS_ERR(lpp->phy)) { if (IS_ERR(pcie->phy)) {
ret = PTR_ERR(lpp->phy); ret = PTR_ERR(pcie->phy);
if (ret != -EPROBE_DEFER) if (ret != -EPROBE_DEFER)
dev_err(dev, "Couldn't get pcie-phy: %d\n", ret); dev_err(dev, "Couldn't get pcie-phy: %d\n", ret);
return ret; return ret;
...@@ -248,137 +248,137 @@ static int intel_pcie_get_resources(struct platform_device *pdev) ...@@ -248,137 +248,137 @@ static int intel_pcie_get_resources(struct platform_device *pdev)
return 0; return 0;
} }
static int intel_pcie_wait_l2(struct intel_pcie_port *lpp) static int intel_pcie_wait_l2(struct intel_pcie *pcie)
{ {
u32 value; u32 value;
int ret; int ret;
struct dw_pcie *pci = &lpp->pci; struct dw_pcie *pci = &pcie->pci;
if (pci->link_gen < 3) if (pci->link_gen < 3)
return 0; return 0;
/* Send PME_TURN_OFF message */ /* Send PME_TURN_OFF message */
pcie_app_wr_mask(lpp, PCIE_APP_MSG_CR, PCIE_APP_MSG_XMT_PM_TURNOFF, pcie_app_wr_mask(pcie, PCIE_APP_MSG_CR, PCIE_APP_MSG_XMT_PM_TURNOFF,
PCIE_APP_MSG_XMT_PM_TURNOFF); PCIE_APP_MSG_XMT_PM_TURNOFF);
/* Read PMC status and wait for falling into L2 link state */ /* Read PMC status and wait for falling into L2 link state */
ret = readl_poll_timeout(lpp->app_base + PCIE_APP_PMC, value, ret = readl_poll_timeout(pcie->app_base + PCIE_APP_PMC, value,
value & PCIE_APP_PMC_IN_L2, 20, value & PCIE_APP_PMC_IN_L2, 20,
jiffies_to_usecs(5 * HZ)); jiffies_to_usecs(5 * HZ));
if (ret) if (ret)
dev_err(lpp->pci.dev, "PCIe link enter L2 timeout!\n"); dev_err(pcie->pci.dev, "PCIe link enter L2 timeout!\n");
return ret; return ret;
} }
static void intel_pcie_turn_off(struct intel_pcie_port *lpp) static void intel_pcie_turn_off(struct intel_pcie *pcie)
{ {
if (dw_pcie_link_up(&lpp->pci)) if (dw_pcie_link_up(&pcie->pci))
intel_pcie_wait_l2(lpp); intel_pcie_wait_l2(pcie);
/* Put endpoint device in reset state */ /* Put endpoint device in reset state */
intel_pcie_device_rst_assert(lpp); intel_pcie_device_rst_assert(pcie);
pcie_rc_cfg_wr_mask(lpp, PCI_COMMAND, PCI_COMMAND_MEMORY, 0); pcie_rc_cfg_wr_mask(pcie, PCI_COMMAND, PCI_COMMAND_MEMORY, 0);
} }
static int intel_pcie_host_setup(struct intel_pcie_port *lpp) static int intel_pcie_host_setup(struct intel_pcie *pcie)
{ {
int ret; int ret;
struct dw_pcie *pci = &lpp->pci; struct dw_pcie *pci = &pcie->pci;
intel_pcie_core_rst_assert(lpp); intel_pcie_core_rst_assert(pcie);
intel_pcie_device_rst_assert(lpp); intel_pcie_device_rst_assert(pcie);
ret = phy_init(lpp->phy); ret = phy_init(pcie->phy);
if (ret) if (ret)
return ret; return ret;
intel_pcie_core_rst_deassert(lpp); intel_pcie_core_rst_deassert(pcie);
ret = clk_prepare_enable(lpp->core_clk); ret = clk_prepare_enable(pcie->core_clk);
if (ret) { if (ret) {
dev_err(lpp->pci.dev, "Core clock enable failed: %d\n", ret); dev_err(pcie->pci.dev, "Core clock enable failed: %d\n", ret);
goto clk_err; goto clk_err;
} }
pci->atu_base = pci->dbi_base + 0xC0000; pci->atu_base = pci->dbi_base + 0xC0000;
intel_pcie_ltssm_disable(lpp); intel_pcie_ltssm_disable(pcie);
intel_pcie_link_setup(lpp); intel_pcie_link_setup(pcie);
intel_pcie_init_n_fts(pci); intel_pcie_init_n_fts(pci);
dw_pcie_setup_rc(&pci->pp); dw_pcie_setup_rc(&pci->pp);
dw_pcie_upconfig_setup(pci); dw_pcie_upconfig_setup(pci);
intel_pcie_device_rst_deassert(lpp); intel_pcie_device_rst_deassert(pcie);
intel_pcie_ltssm_enable(lpp); intel_pcie_ltssm_enable(pcie);
ret = dw_pcie_wait_for_link(pci); ret = dw_pcie_wait_for_link(pci);
if (ret) if (ret)
goto app_init_err; goto app_init_err;
/* Enable integrated interrupts */ /* Enable integrated interrupts */
pcie_app_wr_mask(lpp, PCIE_APP_IRNEN, PCIE_APP_IRN_INT, pcie_app_wr_mask(pcie, PCIE_APP_IRNEN, PCIE_APP_IRN_INT,
PCIE_APP_IRN_INT); PCIE_APP_IRN_INT);
return 0; return 0;
app_init_err: app_init_err:
clk_disable_unprepare(lpp->core_clk); clk_disable_unprepare(pcie->core_clk);
clk_err: clk_err:
intel_pcie_core_rst_assert(lpp); intel_pcie_core_rst_assert(pcie);
phy_exit(lpp->phy); phy_exit(pcie->phy);
return ret; return ret;
} }
static void __intel_pcie_remove(struct intel_pcie_port *lpp) static void __intel_pcie_remove(struct intel_pcie *pcie)
{ {
intel_pcie_core_irq_disable(lpp); intel_pcie_core_irq_disable(pcie);
intel_pcie_turn_off(lpp); intel_pcie_turn_off(pcie);
clk_disable_unprepare(lpp->core_clk); clk_disable_unprepare(pcie->core_clk);
intel_pcie_core_rst_assert(lpp); intel_pcie_core_rst_assert(pcie);
phy_exit(lpp->phy); phy_exit(pcie->phy);
} }
static int intel_pcie_remove(struct platform_device *pdev) static int intel_pcie_remove(struct platform_device *pdev)
{ {
struct intel_pcie_port *lpp = platform_get_drvdata(pdev); struct intel_pcie *pcie = platform_get_drvdata(pdev);
struct pcie_port *pp = &lpp->pci.pp; struct pcie_port *pp = &pcie->pci.pp;
dw_pcie_host_deinit(pp); dw_pcie_host_deinit(pp);
__intel_pcie_remove(lpp); __intel_pcie_remove(pcie);
return 0; return 0;
} }
static int __maybe_unused intel_pcie_suspend_noirq(struct device *dev) static int __maybe_unused intel_pcie_suspend_noirq(struct device *dev)
{ {
struct intel_pcie_port *lpp = dev_get_drvdata(dev); struct intel_pcie *pcie = dev_get_drvdata(dev);
int ret; int ret;
intel_pcie_core_irq_disable(lpp); intel_pcie_core_irq_disable(pcie);
ret = intel_pcie_wait_l2(lpp); ret = intel_pcie_wait_l2(pcie);
if (ret) if (ret)
return ret; return ret;
phy_exit(lpp->phy); phy_exit(pcie->phy);
clk_disable_unprepare(lpp->core_clk); clk_disable_unprepare(pcie->core_clk);
return ret; return ret;
} }
static int __maybe_unused intel_pcie_resume_noirq(struct device *dev) static int __maybe_unused intel_pcie_resume_noirq(struct device *dev)
{ {
struct intel_pcie_port *lpp = dev_get_drvdata(dev); struct intel_pcie *pcie = dev_get_drvdata(dev);
return intel_pcie_host_setup(lpp); return intel_pcie_host_setup(pcie);
} }
static int intel_pcie_rc_init(struct pcie_port *pp) static int intel_pcie_rc_init(struct pcie_port *pp)
{ {
struct dw_pcie *pci = to_dw_pcie_from_pp(pp); struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
struct intel_pcie_port *lpp = dev_get_drvdata(pci->dev); struct intel_pcie *pcie = dev_get_drvdata(pci->dev);
return intel_pcie_host_setup(lpp); return intel_pcie_host_setup(pcie);
} }
static u64 intel_pcie_cpu_addr(struct dw_pcie *pcie, u64 cpu_addr) static u64 intel_pcie_cpu_addr(struct dw_pcie *pcie, u64 cpu_addr)
...@@ -402,17 +402,17 @@ static int intel_pcie_probe(struct platform_device *pdev) ...@@ -402,17 +402,17 @@ static int intel_pcie_probe(struct platform_device *pdev)
{ {
const struct intel_pcie_soc *data; const struct intel_pcie_soc *data;
struct device *dev = &pdev->dev; struct device *dev = &pdev->dev;
struct intel_pcie_port *lpp; struct intel_pcie *pcie;
struct pcie_port *pp; struct pcie_port *pp;
struct dw_pcie *pci; struct dw_pcie *pci;
int ret; int ret;
lpp = devm_kzalloc(dev, sizeof(*lpp), GFP_KERNEL); pcie = devm_kzalloc(dev, sizeof(*pcie), GFP_KERNEL);
if (!lpp) if (!pcie)
return -ENOMEM; return -ENOMEM;
platform_set_drvdata(pdev, lpp); platform_set_drvdata(pdev, pcie);
pci = &lpp->pci; pci = &pcie->pci;
pci->dev = dev; pci->dev = dev;
pp = &pci->pp; pp = &pci->pp;
...@@ -420,7 +420,7 @@ static int intel_pcie_probe(struct platform_device *pdev) ...@@ -420,7 +420,7 @@ static int intel_pcie_probe(struct platform_device *pdev)
if (ret) if (ret)
return ret; return ret;
ret = intel_pcie_ep_rst_init(lpp); ret = intel_pcie_ep_rst_init(pcie);
if (ret) if (ret)
return ret; return ret;
......
...@@ -771,7 +771,6 @@ static const struct of_device_id kirin_pcie_match[] = { ...@@ -771,7 +771,6 @@ static const struct of_device_id kirin_pcie_match[] = {
static int kirin_pcie_probe(struct platform_device *pdev) static int kirin_pcie_probe(struct platform_device *pdev)
{ {
enum pcie_kirin_phy_type phy_type; enum pcie_kirin_phy_type phy_type;
const struct of_device_id *of_id;
struct device *dev = &pdev->dev; struct device *dev = &pdev->dev;
struct kirin_pcie *kirin_pcie; struct kirin_pcie *kirin_pcie;
struct dw_pcie *pci; struct dw_pcie *pci;
...@@ -782,13 +781,12 @@ static int kirin_pcie_probe(struct platform_device *pdev) ...@@ -782,13 +781,12 @@ static int kirin_pcie_probe(struct platform_device *pdev)
return -EINVAL; return -EINVAL;
} }
of_id = of_match_device(kirin_pcie_match, dev); phy_type = (long)of_device_get_match_data(dev);
if (!of_id) { if (!phy_type) {
dev_err(dev, "OF data missing\n"); dev_err(dev, "OF data missing\n");
return -EINVAL; return -EINVAL;
} }
phy_type = (long)of_id->data;
kirin_pcie = devm_kzalloc(dev, sizeof(struct kirin_pcie), GFP_KERNEL); kirin_pcie = devm_kzalloc(dev, sizeof(struct kirin_pcie), GFP_KERNEL);
if (!kirin_pcie) if (!kirin_pcie)
......
...@@ -69,7 +69,7 @@ struct pcie_app_reg { ...@@ -69,7 +69,7 @@ struct pcie_app_reg {
static int spear13xx_pcie_start_link(struct dw_pcie *pci) static int spear13xx_pcie_start_link(struct dw_pcie *pci)
{ {
struct spear13xx_pcie *spear13xx_pcie = to_spear13xx_pcie(pci); struct spear13xx_pcie *spear13xx_pcie = to_spear13xx_pcie(pci);
struct pcie_app_reg *app_reg = spear13xx_pcie->app_base; struct pcie_app_reg __iomem *app_reg = spear13xx_pcie->app_base;
/* enable ltssm */ /* enable ltssm */
writel(DEVICE_TYPE_RC | (1 << MISCTRL_EN_ID) writel(DEVICE_TYPE_RC | (1 << MISCTRL_EN_ID)
...@@ -83,7 +83,7 @@ static int spear13xx_pcie_start_link(struct dw_pcie *pci) ...@@ -83,7 +83,7 @@ static int spear13xx_pcie_start_link(struct dw_pcie *pci)
static irqreturn_t spear13xx_pcie_irq_handler(int irq, void *arg) static irqreturn_t spear13xx_pcie_irq_handler(int irq, void *arg)
{ {
struct spear13xx_pcie *spear13xx_pcie = arg; struct spear13xx_pcie *spear13xx_pcie = arg;
struct pcie_app_reg *app_reg = spear13xx_pcie->app_base; struct pcie_app_reg __iomem *app_reg = spear13xx_pcie->app_base;
struct dw_pcie *pci = spear13xx_pcie->pci; struct dw_pcie *pci = spear13xx_pcie->pci;
struct pcie_port *pp = &pci->pp; struct pcie_port *pp = &pci->pp;
unsigned int status; unsigned int status;
...@@ -102,7 +102,7 @@ static irqreturn_t spear13xx_pcie_irq_handler(int irq, void *arg) ...@@ -102,7 +102,7 @@ static irqreturn_t spear13xx_pcie_irq_handler(int irq, void *arg)
static void spear13xx_pcie_enable_interrupts(struct spear13xx_pcie *spear13xx_pcie) static void spear13xx_pcie_enable_interrupts(struct spear13xx_pcie *spear13xx_pcie)
{ {
struct pcie_app_reg *app_reg = spear13xx_pcie->app_base; struct pcie_app_reg __iomem *app_reg = spear13xx_pcie->app_base;
/* Enable MSI interrupt */ /* Enable MSI interrupt */
if (IS_ENABLED(CONFIG_PCI_MSI)) if (IS_ENABLED(CONFIG_PCI_MSI))
...@@ -113,7 +113,7 @@ static void spear13xx_pcie_enable_interrupts(struct spear13xx_pcie *spear13xx_pc ...@@ -113,7 +113,7 @@ static void spear13xx_pcie_enable_interrupts(struct spear13xx_pcie *spear13xx_pc
static int spear13xx_pcie_link_up(struct dw_pcie *pci) static int spear13xx_pcie_link_up(struct dw_pcie *pci)
{ {
struct spear13xx_pcie *spear13xx_pcie = to_spear13xx_pcie(pci); struct spear13xx_pcie *spear13xx_pcie = to_spear13xx_pcie(pci);
struct pcie_app_reg *app_reg = spear13xx_pcie->app_base; struct pcie_app_reg __iomem *app_reg = spear13xx_pcie->app_base;
if (readl(&app_reg->app_status_1) & XMLH_LINK_UP) if (readl(&app_reg->app_status_1) & XMLH_LINK_UP)
return 1; return 1;
......
...@@ -245,7 +245,7 @@ static const unsigned int pcie_gen_freq[] = { ...@@ -245,7 +245,7 @@ static const unsigned int pcie_gen_freq[] = {
GEN4_CORE_CLK_FREQ GEN4_CORE_CLK_FREQ
}; };
struct tegra_pcie_dw { struct tegra194_pcie {
struct device *dev; struct device *dev;
struct resource *appl_res; struct resource *appl_res;
struct resource *dbi_res; struct resource *dbi_res;
...@@ -289,22 +289,22 @@ struct tegra_pcie_dw { ...@@ -289,22 +289,22 @@ struct tegra_pcie_dw {
int ep_state; int ep_state;
}; };
struct tegra_pcie_dw_of_data { struct tegra194_pcie_of_data {
enum dw_pcie_device_mode mode; enum dw_pcie_device_mode mode;
}; };
static inline struct tegra_pcie_dw *to_tegra_pcie(struct dw_pcie *pci) static inline struct tegra194_pcie *to_tegra_pcie(struct dw_pcie *pci)
{ {
return container_of(pci, struct tegra_pcie_dw, pci); return container_of(pci, struct tegra194_pcie, pci);
} }
static inline void appl_writel(struct tegra_pcie_dw *pcie, const u32 value, static inline void appl_writel(struct tegra194_pcie *pcie, const u32 value,
const u32 reg) const u32 reg)
{ {
writel_relaxed(value, pcie->appl_base + reg); writel_relaxed(value, pcie->appl_base + reg);
} }
static inline u32 appl_readl(struct tegra_pcie_dw *pcie, const u32 reg) static inline u32 appl_readl(struct tegra194_pcie *pcie, const u32 reg)
{ {
return readl_relaxed(pcie->appl_base + reg); return readl_relaxed(pcie->appl_base + reg);
} }
...@@ -316,7 +316,7 @@ struct tegra_pcie_soc { ...@@ -316,7 +316,7 @@ struct tegra_pcie_soc {
static void apply_bad_link_workaround(struct pcie_port *pp) static void apply_bad_link_workaround(struct pcie_port *pp)
{ {
struct dw_pcie *pci = to_dw_pcie_from_pp(pp); struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
struct tegra_pcie_dw *pcie = to_tegra_pcie(pci); struct tegra194_pcie *pcie = to_tegra_pcie(pci);
u32 current_link_width; u32 current_link_width;
u16 val; u16 val;
...@@ -349,7 +349,7 @@ static void apply_bad_link_workaround(struct pcie_port *pp) ...@@ -349,7 +349,7 @@ static void apply_bad_link_workaround(struct pcie_port *pp)
static irqreturn_t tegra_pcie_rp_irq_handler(int irq, void *arg) static irqreturn_t tegra_pcie_rp_irq_handler(int irq, void *arg)
{ {
struct tegra_pcie_dw *pcie = arg; struct tegra194_pcie *pcie = arg;
struct dw_pcie *pci = &pcie->pci; struct dw_pcie *pci = &pcie->pci;
struct pcie_port *pp = &pci->pp; struct pcie_port *pp = &pci->pp;
u32 val, tmp; u32 val, tmp;
...@@ -420,7 +420,7 @@ static irqreturn_t tegra_pcie_rp_irq_handler(int irq, void *arg) ...@@ -420,7 +420,7 @@ static irqreturn_t tegra_pcie_rp_irq_handler(int irq, void *arg)
return IRQ_HANDLED; return IRQ_HANDLED;
} }
static void pex_ep_event_hot_rst_done(struct tegra_pcie_dw *pcie) static void pex_ep_event_hot_rst_done(struct tegra194_pcie *pcie)
{ {
u32 val; u32 val;
...@@ -448,7 +448,7 @@ static void pex_ep_event_hot_rst_done(struct tegra_pcie_dw *pcie) ...@@ -448,7 +448,7 @@ static void pex_ep_event_hot_rst_done(struct tegra_pcie_dw *pcie)
static irqreturn_t tegra_pcie_ep_irq_thread(int irq, void *arg) static irqreturn_t tegra_pcie_ep_irq_thread(int irq, void *arg)
{ {
struct tegra_pcie_dw *pcie = arg; struct tegra194_pcie *pcie = arg;
struct dw_pcie *pci = &pcie->pci; struct dw_pcie *pci = &pcie->pci;
u32 val, speed; u32 val, speed;
...@@ -494,7 +494,7 @@ static irqreturn_t tegra_pcie_ep_irq_thread(int irq, void *arg) ...@@ -494,7 +494,7 @@ static irqreturn_t tegra_pcie_ep_irq_thread(int irq, void *arg)
static irqreturn_t tegra_pcie_ep_hard_irq(int irq, void *arg) static irqreturn_t tegra_pcie_ep_hard_irq(int irq, void *arg)
{ {
struct tegra_pcie_dw *pcie = arg; struct tegra194_pcie *pcie = arg;
struct dw_pcie_ep *ep = &pcie->pci.ep; struct dw_pcie_ep *ep = &pcie->pci.ep;
int spurious = 1; int spurious = 1;
u32 status_l0, status_l1, link_status; u32 status_l0, status_l1, link_status;
...@@ -537,7 +537,7 @@ static irqreturn_t tegra_pcie_ep_hard_irq(int irq, void *arg) ...@@ -537,7 +537,7 @@ static irqreturn_t tegra_pcie_ep_hard_irq(int irq, void *arg)
return IRQ_HANDLED; return IRQ_HANDLED;
} }
static int tegra_pcie_dw_rd_own_conf(struct pci_bus *bus, u32 devfn, int where, static int tegra194_pcie_rd_own_conf(struct pci_bus *bus, u32 devfn, int where,
int size, u32 *val) int size, u32 *val)
{ {
/* /*
...@@ -554,7 +554,7 @@ static int tegra_pcie_dw_rd_own_conf(struct pci_bus *bus, u32 devfn, int where, ...@@ -554,7 +554,7 @@ static int tegra_pcie_dw_rd_own_conf(struct pci_bus *bus, u32 devfn, int where,
return pci_generic_config_read(bus, devfn, where, size, val); return pci_generic_config_read(bus, devfn, where, size, val);
} }
static int tegra_pcie_dw_wr_own_conf(struct pci_bus *bus, u32 devfn, int where, static int tegra194_pcie_wr_own_conf(struct pci_bus *bus, u32 devfn, int where,
int size, u32 val) int size, u32 val)
{ {
/* /*
...@@ -571,8 +571,8 @@ static int tegra_pcie_dw_wr_own_conf(struct pci_bus *bus, u32 devfn, int where, ...@@ -571,8 +571,8 @@ static int tegra_pcie_dw_wr_own_conf(struct pci_bus *bus, u32 devfn, int where,
static struct pci_ops tegra_pci_ops = { static struct pci_ops tegra_pci_ops = {
.map_bus = dw_pcie_own_conf_map_bus, .map_bus = dw_pcie_own_conf_map_bus,
.read = tegra_pcie_dw_rd_own_conf, .read = tegra194_pcie_rd_own_conf,
.write = tegra_pcie_dw_wr_own_conf, .write = tegra194_pcie_wr_own_conf,
}; };
#if defined(CONFIG_PCIEASPM) #if defined(CONFIG_PCIEASPM)
...@@ -594,7 +594,7 @@ static const u32 event_cntr_data_offset[] = { ...@@ -594,7 +594,7 @@ static const u32 event_cntr_data_offset[] = {
0x1dc 0x1dc
}; };
static void disable_aspm_l11(struct tegra_pcie_dw *pcie) static void disable_aspm_l11(struct tegra194_pcie *pcie)
{ {
u32 val; u32 val;
...@@ -603,7 +603,7 @@ static void disable_aspm_l11(struct tegra_pcie_dw *pcie) ...@@ -603,7 +603,7 @@ static void disable_aspm_l11(struct tegra_pcie_dw *pcie)
dw_pcie_writel_dbi(&pcie->pci, pcie->cfg_link_cap_l1sub, val); dw_pcie_writel_dbi(&pcie->pci, pcie->cfg_link_cap_l1sub, val);
} }
static void disable_aspm_l12(struct tegra_pcie_dw *pcie) static void disable_aspm_l12(struct tegra194_pcie *pcie)
{ {
u32 val; u32 val;
...@@ -612,7 +612,7 @@ static void disable_aspm_l12(struct tegra_pcie_dw *pcie) ...@@ -612,7 +612,7 @@ static void disable_aspm_l12(struct tegra_pcie_dw *pcie)
dw_pcie_writel_dbi(&pcie->pci, pcie->cfg_link_cap_l1sub, val); dw_pcie_writel_dbi(&pcie->pci, pcie->cfg_link_cap_l1sub, val);
} }
static inline u32 event_counter_prog(struct tegra_pcie_dw *pcie, u32 event) static inline u32 event_counter_prog(struct tegra194_pcie *pcie, u32 event)
{ {
u32 val; u32 val;
...@@ -629,7 +629,7 @@ static inline u32 event_counter_prog(struct tegra_pcie_dw *pcie, u32 event) ...@@ -629,7 +629,7 @@ static inline u32 event_counter_prog(struct tegra_pcie_dw *pcie, u32 event)
static int aspm_state_cnt(struct seq_file *s, void *data) static int aspm_state_cnt(struct seq_file *s, void *data)
{ {
struct tegra_pcie_dw *pcie = (struct tegra_pcie_dw *) struct tegra194_pcie *pcie = (struct tegra194_pcie *)
dev_get_drvdata(s->private); dev_get_drvdata(s->private);
u32 val; u32 val;
...@@ -660,7 +660,7 @@ static int aspm_state_cnt(struct seq_file *s, void *data) ...@@ -660,7 +660,7 @@ static int aspm_state_cnt(struct seq_file *s, void *data)
return 0; return 0;
} }
static void init_host_aspm(struct tegra_pcie_dw *pcie) static void init_host_aspm(struct tegra194_pcie *pcie)
{ {
struct dw_pcie *pci = &pcie->pci; struct dw_pcie *pci = &pcie->pci;
u32 val; u32 val;
...@@ -688,22 +688,22 @@ static void init_host_aspm(struct tegra_pcie_dw *pcie) ...@@ -688,22 +688,22 @@ static void init_host_aspm(struct tegra_pcie_dw *pcie)
dw_pcie_writel_dbi(pci, PCIE_PORT_AFR, val); dw_pcie_writel_dbi(pci, PCIE_PORT_AFR, val);
} }
static void init_debugfs(struct tegra_pcie_dw *pcie) static void init_debugfs(struct tegra194_pcie *pcie)
{ {
debugfs_create_devm_seqfile(pcie->dev, "aspm_state_cnt", pcie->debugfs, debugfs_create_devm_seqfile(pcie->dev, "aspm_state_cnt", pcie->debugfs,
aspm_state_cnt); aspm_state_cnt);
} }
#else #else
static inline void disable_aspm_l12(struct tegra_pcie_dw *pcie) { return; } static inline void disable_aspm_l12(struct tegra194_pcie *pcie) { return; }
static inline void disable_aspm_l11(struct tegra_pcie_dw *pcie) { return; } static inline void disable_aspm_l11(struct tegra194_pcie *pcie) { return; }
static inline void init_host_aspm(struct tegra_pcie_dw *pcie) { return; } static inline void init_host_aspm(struct tegra194_pcie *pcie) { return; }
static inline void init_debugfs(struct tegra_pcie_dw *pcie) { return; } static inline void init_debugfs(struct tegra194_pcie *pcie) { return; }
#endif #endif
static void tegra_pcie_enable_system_interrupts(struct pcie_port *pp) static void tegra_pcie_enable_system_interrupts(struct pcie_port *pp)
{ {
struct dw_pcie *pci = to_dw_pcie_from_pp(pp); struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
struct tegra_pcie_dw *pcie = to_tegra_pcie(pci); struct tegra194_pcie *pcie = to_tegra_pcie(pci);
u32 val; u32 val;
u16 val_w; u16 val_w;
...@@ -741,7 +741,7 @@ static void tegra_pcie_enable_system_interrupts(struct pcie_port *pp) ...@@ -741,7 +741,7 @@ static void tegra_pcie_enable_system_interrupts(struct pcie_port *pp)
static void tegra_pcie_enable_legacy_interrupts(struct pcie_port *pp) static void tegra_pcie_enable_legacy_interrupts(struct pcie_port *pp)
{ {
struct dw_pcie *pci = to_dw_pcie_from_pp(pp); struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
struct tegra_pcie_dw *pcie = to_tegra_pcie(pci); struct tegra194_pcie *pcie = to_tegra_pcie(pci);
u32 val; u32 val;
/* Enable legacy interrupt generation */ /* Enable legacy interrupt generation */
...@@ -762,7 +762,7 @@ static void tegra_pcie_enable_legacy_interrupts(struct pcie_port *pp) ...@@ -762,7 +762,7 @@ static void tegra_pcie_enable_legacy_interrupts(struct pcie_port *pp)
static void tegra_pcie_enable_msi_interrupts(struct pcie_port *pp) static void tegra_pcie_enable_msi_interrupts(struct pcie_port *pp)
{ {
struct dw_pcie *pci = to_dw_pcie_from_pp(pp); struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
struct tegra_pcie_dw *pcie = to_tegra_pcie(pci); struct tegra194_pcie *pcie = to_tegra_pcie(pci);
u32 val; u32 val;
/* Enable MSI interrupt generation */ /* Enable MSI interrupt generation */
...@@ -775,7 +775,7 @@ static void tegra_pcie_enable_msi_interrupts(struct pcie_port *pp) ...@@ -775,7 +775,7 @@ static void tegra_pcie_enable_msi_interrupts(struct pcie_port *pp)
static void tegra_pcie_enable_interrupts(struct pcie_port *pp) static void tegra_pcie_enable_interrupts(struct pcie_port *pp)
{ {
struct dw_pcie *pci = to_dw_pcie_from_pp(pp); struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
struct tegra_pcie_dw *pcie = to_tegra_pcie(pci); struct tegra194_pcie *pcie = to_tegra_pcie(pci);
/* Clear interrupt statuses before enabling interrupts */ /* Clear interrupt statuses before enabling interrupts */
appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L0); appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L0);
...@@ -800,7 +800,7 @@ static void tegra_pcie_enable_interrupts(struct pcie_port *pp) ...@@ -800,7 +800,7 @@ static void tegra_pcie_enable_interrupts(struct pcie_port *pp)
tegra_pcie_enable_msi_interrupts(pp); tegra_pcie_enable_msi_interrupts(pp);
} }
static void config_gen3_gen4_eq_presets(struct tegra_pcie_dw *pcie) static void config_gen3_gen4_eq_presets(struct tegra194_pcie *pcie)
{ {
struct dw_pcie *pci = &pcie->pci; struct dw_pcie *pci = &pcie->pci;
u32 val, offset, i; u32 val, offset, i;
...@@ -853,10 +853,10 @@ static void config_gen3_gen4_eq_presets(struct tegra_pcie_dw *pcie) ...@@ -853,10 +853,10 @@ static void config_gen3_gen4_eq_presets(struct tegra_pcie_dw *pcie)
dw_pcie_writel_dbi(pci, GEN3_RELATED_OFF, val); dw_pcie_writel_dbi(pci, GEN3_RELATED_OFF, val);
} }
static int tegra_pcie_dw_host_init(struct pcie_port *pp) static int tegra194_pcie_host_init(struct pcie_port *pp)
{ {
struct dw_pcie *pci = to_dw_pcie_from_pp(pp); struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
struct tegra_pcie_dw *pcie = to_tegra_pcie(pci); struct tegra194_pcie *pcie = to_tegra_pcie(pci);
u32 val; u32 val;
pp->bridge->ops = &tegra_pci_ops; pp->bridge->ops = &tegra_pci_ops;
...@@ -914,10 +914,10 @@ static int tegra_pcie_dw_host_init(struct pcie_port *pp) ...@@ -914,10 +914,10 @@ static int tegra_pcie_dw_host_init(struct pcie_port *pp)
return 0; return 0;
} }
static int tegra_pcie_dw_start_link(struct dw_pcie *pci) static int tegra194_pcie_start_link(struct dw_pcie *pci)
{ {
u32 val, offset, speed, tmp; u32 val, offset, speed, tmp;
struct tegra_pcie_dw *pcie = to_tegra_pcie(pci); struct tegra194_pcie *pcie = to_tegra_pcie(pci);
struct pcie_port *pp = &pci->pp; struct pcie_port *pp = &pci->pp;
bool retry = true; bool retry = true;
...@@ -982,7 +982,7 @@ static int tegra_pcie_dw_start_link(struct dw_pcie *pci) ...@@ -982,7 +982,7 @@ static int tegra_pcie_dw_start_link(struct dw_pcie *pci)
val &= ~PCI_DLF_EXCHANGE_ENABLE; val &= ~PCI_DLF_EXCHANGE_ENABLE;
dw_pcie_writel_dbi(pci, offset, val); dw_pcie_writel_dbi(pci, offset, val);
tegra_pcie_dw_host_init(pp); tegra194_pcie_host_init(pp);
dw_pcie_setup_rc(pp); dw_pcie_setup_rc(pp);
retry = false; retry = false;
...@@ -998,32 +998,32 @@ static int tegra_pcie_dw_start_link(struct dw_pcie *pci) ...@@ -998,32 +998,32 @@ static int tegra_pcie_dw_start_link(struct dw_pcie *pci)
return 0; return 0;
} }
static int tegra_pcie_dw_link_up(struct dw_pcie *pci) static int tegra194_pcie_link_up(struct dw_pcie *pci)
{ {
struct tegra_pcie_dw *pcie = to_tegra_pcie(pci); struct tegra194_pcie *pcie = to_tegra_pcie(pci);
u32 val = dw_pcie_readw_dbi(pci, pcie->pcie_cap_base + PCI_EXP_LNKSTA); u32 val = dw_pcie_readw_dbi(pci, pcie->pcie_cap_base + PCI_EXP_LNKSTA);
return !!(val & PCI_EXP_LNKSTA_DLLLA); return !!(val & PCI_EXP_LNKSTA_DLLLA);
} }
static void tegra_pcie_dw_stop_link(struct dw_pcie *pci) static void tegra194_pcie_stop_link(struct dw_pcie *pci)
{ {
struct tegra_pcie_dw *pcie = to_tegra_pcie(pci); struct tegra194_pcie *pcie = to_tegra_pcie(pci);
disable_irq(pcie->pex_rst_irq); disable_irq(pcie->pex_rst_irq);
} }
static const struct dw_pcie_ops tegra_dw_pcie_ops = { static const struct dw_pcie_ops tegra_dw_pcie_ops = {
.link_up = tegra_pcie_dw_link_up, .link_up = tegra194_pcie_link_up,
.start_link = tegra_pcie_dw_start_link, .start_link = tegra194_pcie_start_link,
.stop_link = tegra_pcie_dw_stop_link, .stop_link = tegra194_pcie_stop_link,
}; };
static const struct dw_pcie_host_ops tegra_pcie_dw_host_ops = { static const struct dw_pcie_host_ops tegra194_pcie_host_ops = {
.host_init = tegra_pcie_dw_host_init, .host_init = tegra194_pcie_host_init,
}; };
static void tegra_pcie_disable_phy(struct tegra_pcie_dw *pcie) static void tegra_pcie_disable_phy(struct tegra194_pcie *pcie)
{ {
unsigned int phy_count = pcie->phy_count; unsigned int phy_count = pcie->phy_count;
...@@ -1033,7 +1033,7 @@ static void tegra_pcie_disable_phy(struct tegra_pcie_dw *pcie) ...@@ -1033,7 +1033,7 @@ static void tegra_pcie_disable_phy(struct tegra_pcie_dw *pcie)
} }
} }
static int tegra_pcie_enable_phy(struct tegra_pcie_dw *pcie) static int tegra_pcie_enable_phy(struct tegra194_pcie *pcie)
{ {
unsigned int i; unsigned int i;
int ret; int ret;
...@@ -1060,7 +1060,7 @@ static int tegra_pcie_enable_phy(struct tegra_pcie_dw *pcie) ...@@ -1060,7 +1060,7 @@ static int tegra_pcie_enable_phy(struct tegra_pcie_dw *pcie)
return ret; return ret;
} }
static int tegra_pcie_dw_parse_dt(struct tegra_pcie_dw *pcie) static int tegra194_pcie_parse_dt(struct tegra194_pcie *pcie)
{ {
struct platform_device *pdev = to_platform_device(pcie->dev); struct platform_device *pdev = to_platform_device(pcie->dev);
struct device_node *np = pcie->dev->of_node; struct device_node *np = pcie->dev->of_node;
...@@ -1156,7 +1156,7 @@ static int tegra_pcie_dw_parse_dt(struct tegra_pcie_dw *pcie) ...@@ -1156,7 +1156,7 @@ static int tegra_pcie_dw_parse_dt(struct tegra_pcie_dw *pcie)
return 0; return 0;
} }
static int tegra_pcie_bpmp_set_ctrl_state(struct tegra_pcie_dw *pcie, static int tegra_pcie_bpmp_set_ctrl_state(struct tegra194_pcie *pcie,
bool enable) bool enable)
{ {
struct mrq_uphy_response resp; struct mrq_uphy_response resp;
...@@ -1184,7 +1184,7 @@ static int tegra_pcie_bpmp_set_ctrl_state(struct tegra_pcie_dw *pcie, ...@@ -1184,7 +1184,7 @@ static int tegra_pcie_bpmp_set_ctrl_state(struct tegra_pcie_dw *pcie,
return tegra_bpmp_transfer(pcie->bpmp, &msg); return tegra_bpmp_transfer(pcie->bpmp, &msg);
} }
static int tegra_pcie_bpmp_set_pll_state(struct tegra_pcie_dw *pcie, static int tegra_pcie_bpmp_set_pll_state(struct tegra194_pcie *pcie,
bool enable) bool enable)
{ {
struct mrq_uphy_response resp; struct mrq_uphy_response resp;
...@@ -1212,7 +1212,7 @@ static int tegra_pcie_bpmp_set_pll_state(struct tegra_pcie_dw *pcie, ...@@ -1212,7 +1212,7 @@ static int tegra_pcie_bpmp_set_pll_state(struct tegra_pcie_dw *pcie,
return tegra_bpmp_transfer(pcie->bpmp, &msg); return tegra_bpmp_transfer(pcie->bpmp, &msg);
} }
static void tegra_pcie_downstream_dev_to_D0(struct tegra_pcie_dw *pcie) static void tegra_pcie_downstream_dev_to_D0(struct tegra194_pcie *pcie)
{ {
struct pcie_port *pp = &pcie->pci.pp; struct pcie_port *pp = &pcie->pci.pp;
struct pci_bus *child, *root_bus = NULL; struct pci_bus *child, *root_bus = NULL;
...@@ -1250,7 +1250,7 @@ static void tegra_pcie_downstream_dev_to_D0(struct tegra_pcie_dw *pcie) ...@@ -1250,7 +1250,7 @@ static void tegra_pcie_downstream_dev_to_D0(struct tegra_pcie_dw *pcie)
} }
} }
static int tegra_pcie_get_slot_regulators(struct tegra_pcie_dw *pcie) static int tegra_pcie_get_slot_regulators(struct tegra194_pcie *pcie)
{ {
pcie->slot_ctl_3v3 = devm_regulator_get_optional(pcie->dev, "vpcie3v3"); pcie->slot_ctl_3v3 = devm_regulator_get_optional(pcie->dev, "vpcie3v3");
if (IS_ERR(pcie->slot_ctl_3v3)) { if (IS_ERR(pcie->slot_ctl_3v3)) {
...@@ -1271,7 +1271,7 @@ static int tegra_pcie_get_slot_regulators(struct tegra_pcie_dw *pcie) ...@@ -1271,7 +1271,7 @@ static int tegra_pcie_get_slot_regulators(struct tegra_pcie_dw *pcie)
return 0; return 0;
} }
static int tegra_pcie_enable_slot_regulators(struct tegra_pcie_dw *pcie) static int tegra_pcie_enable_slot_regulators(struct tegra194_pcie *pcie)
{ {
int ret; int ret;
...@@ -1309,7 +1309,7 @@ static int tegra_pcie_enable_slot_regulators(struct tegra_pcie_dw *pcie) ...@@ -1309,7 +1309,7 @@ static int tegra_pcie_enable_slot_regulators(struct tegra_pcie_dw *pcie)
return ret; return ret;
} }
static void tegra_pcie_disable_slot_regulators(struct tegra_pcie_dw *pcie) static void tegra_pcie_disable_slot_regulators(struct tegra194_pcie *pcie)
{ {
if (pcie->slot_ctl_12v) if (pcie->slot_ctl_12v)
regulator_disable(pcie->slot_ctl_12v); regulator_disable(pcie->slot_ctl_12v);
...@@ -1317,7 +1317,7 @@ static void tegra_pcie_disable_slot_regulators(struct tegra_pcie_dw *pcie) ...@@ -1317,7 +1317,7 @@ static void tegra_pcie_disable_slot_regulators(struct tegra_pcie_dw *pcie)
regulator_disable(pcie->slot_ctl_3v3); regulator_disable(pcie->slot_ctl_3v3);
} }
static int tegra_pcie_config_controller(struct tegra_pcie_dw *pcie, static int tegra_pcie_config_controller(struct tegra194_pcie *pcie,
bool en_hw_hot_rst) bool en_hw_hot_rst)
{ {
int ret; int ret;
...@@ -1414,7 +1414,7 @@ static int tegra_pcie_config_controller(struct tegra_pcie_dw *pcie, ...@@ -1414,7 +1414,7 @@ static int tegra_pcie_config_controller(struct tegra_pcie_dw *pcie,
return ret; return ret;
} }
static void tegra_pcie_unconfig_controller(struct tegra_pcie_dw *pcie) static void tegra_pcie_unconfig_controller(struct tegra194_pcie *pcie)
{ {
int ret; int ret;
...@@ -1442,7 +1442,7 @@ static void tegra_pcie_unconfig_controller(struct tegra_pcie_dw *pcie) ...@@ -1442,7 +1442,7 @@ static void tegra_pcie_unconfig_controller(struct tegra_pcie_dw *pcie)
pcie->cid, ret); pcie->cid, ret);
} }
static int tegra_pcie_init_controller(struct tegra_pcie_dw *pcie) static int tegra_pcie_init_controller(struct tegra194_pcie *pcie)
{ {
struct dw_pcie *pci = &pcie->pci; struct dw_pcie *pci = &pcie->pci;
struct pcie_port *pp = &pci->pp; struct pcie_port *pp = &pci->pp;
...@@ -1452,7 +1452,7 @@ static int tegra_pcie_init_controller(struct tegra_pcie_dw *pcie) ...@@ -1452,7 +1452,7 @@ static int tegra_pcie_init_controller(struct tegra_pcie_dw *pcie)
if (ret < 0) if (ret < 0)
return ret; return ret;
pp->ops = &tegra_pcie_dw_host_ops; pp->ops = &tegra194_pcie_host_ops;
ret = dw_pcie_host_init(pp); ret = dw_pcie_host_init(pp);
if (ret < 0) { if (ret < 0) {
...@@ -1467,11 +1467,11 @@ static int tegra_pcie_init_controller(struct tegra_pcie_dw *pcie) ...@@ -1467,11 +1467,11 @@ static int tegra_pcie_init_controller(struct tegra_pcie_dw *pcie)
return ret; return ret;
} }
static int tegra_pcie_try_link_l2(struct tegra_pcie_dw *pcie) static int tegra_pcie_try_link_l2(struct tegra194_pcie *pcie)
{ {
u32 val; u32 val;
if (!tegra_pcie_dw_link_up(&pcie->pci)) if (!tegra194_pcie_link_up(&pcie->pci))
return 0; return 0;
val = appl_readl(pcie, APPL_RADM_STATUS); val = appl_readl(pcie, APPL_RADM_STATUS);
...@@ -1483,12 +1483,12 @@ static int tegra_pcie_try_link_l2(struct tegra_pcie_dw *pcie) ...@@ -1483,12 +1483,12 @@ static int tegra_pcie_try_link_l2(struct tegra_pcie_dw *pcie)
1, PME_ACK_TIMEOUT); 1, PME_ACK_TIMEOUT);
} }
static void tegra_pcie_dw_pme_turnoff(struct tegra_pcie_dw *pcie) static void tegra194_pcie_pme_turnoff(struct tegra194_pcie *pcie)
{ {
u32 data; u32 data;
int err; int err;
if (!tegra_pcie_dw_link_up(&pcie->pci)) { if (!tegra194_pcie_link_up(&pcie->pci)) {
dev_dbg(pcie->dev, "PCIe link is not up...!\n"); dev_dbg(pcie->dev, "PCIe link is not up...!\n");
return; return;
} }
...@@ -1545,15 +1545,15 @@ static void tegra_pcie_dw_pme_turnoff(struct tegra_pcie_dw *pcie) ...@@ -1545,15 +1545,15 @@ static void tegra_pcie_dw_pme_turnoff(struct tegra_pcie_dw *pcie)
appl_writel(pcie, data, APPL_PINMUX); appl_writel(pcie, data, APPL_PINMUX);
} }
static void tegra_pcie_deinit_controller(struct tegra_pcie_dw *pcie) static void tegra_pcie_deinit_controller(struct tegra194_pcie *pcie)
{ {
tegra_pcie_downstream_dev_to_D0(pcie); tegra_pcie_downstream_dev_to_D0(pcie);
dw_pcie_host_deinit(&pcie->pci.pp); dw_pcie_host_deinit(&pcie->pci.pp);
tegra_pcie_dw_pme_turnoff(pcie); tegra194_pcie_pme_turnoff(pcie);
tegra_pcie_unconfig_controller(pcie); tegra_pcie_unconfig_controller(pcie);
} }
static int tegra_pcie_config_rp(struct tegra_pcie_dw *pcie) static int tegra_pcie_config_rp(struct tegra194_pcie *pcie)
{ {
struct device *dev = pcie->dev; struct device *dev = pcie->dev;
char *name; char *name;
...@@ -1580,7 +1580,7 @@ static int tegra_pcie_config_rp(struct tegra_pcie_dw *pcie) ...@@ -1580,7 +1580,7 @@ static int tegra_pcie_config_rp(struct tegra_pcie_dw *pcie)
goto fail_pm_get_sync; goto fail_pm_get_sync;
} }
pcie->link_state = tegra_pcie_dw_link_up(&pcie->pci); pcie->link_state = tegra194_pcie_link_up(&pcie->pci);
if (!pcie->link_state) { if (!pcie->link_state) {
ret = -ENOMEDIUM; ret = -ENOMEDIUM;
goto fail_host_init; goto fail_host_init;
...@@ -1605,7 +1605,7 @@ static int tegra_pcie_config_rp(struct tegra_pcie_dw *pcie) ...@@ -1605,7 +1605,7 @@ static int tegra_pcie_config_rp(struct tegra_pcie_dw *pcie)
return ret; return ret;
} }
static void pex_ep_event_pex_rst_assert(struct tegra_pcie_dw *pcie) static void pex_ep_event_pex_rst_assert(struct tegra194_pcie *pcie)
{ {
u32 val; u32 val;
int ret; int ret;
...@@ -1644,7 +1644,7 @@ static void pex_ep_event_pex_rst_assert(struct tegra_pcie_dw *pcie) ...@@ -1644,7 +1644,7 @@ static void pex_ep_event_pex_rst_assert(struct tegra_pcie_dw *pcie)
dev_dbg(pcie->dev, "Uninitialization of endpoint is completed\n"); dev_dbg(pcie->dev, "Uninitialization of endpoint is completed\n");
} }
static void pex_ep_event_pex_rst_deassert(struct tegra_pcie_dw *pcie) static void pex_ep_event_pex_rst_deassert(struct tegra194_pcie *pcie)
{ {
struct dw_pcie *pci = &pcie->pci; struct dw_pcie *pci = &pcie->pci;
struct dw_pcie_ep *ep = &pci->ep; struct dw_pcie_ep *ep = &pci->ep;
...@@ -1809,7 +1809,7 @@ static void pex_ep_event_pex_rst_deassert(struct tegra_pcie_dw *pcie) ...@@ -1809,7 +1809,7 @@ static void pex_ep_event_pex_rst_deassert(struct tegra_pcie_dw *pcie)
static irqreturn_t tegra_pcie_ep_pex_rst_irq(int irq, void *arg) static irqreturn_t tegra_pcie_ep_pex_rst_irq(int irq, void *arg)
{ {
struct tegra_pcie_dw *pcie = arg; struct tegra194_pcie *pcie = arg;
if (gpiod_get_value(pcie->pex_rst_gpiod)) if (gpiod_get_value(pcie->pex_rst_gpiod))
pex_ep_event_pex_rst_assert(pcie); pex_ep_event_pex_rst_assert(pcie);
...@@ -1819,7 +1819,7 @@ static irqreturn_t tegra_pcie_ep_pex_rst_irq(int irq, void *arg) ...@@ -1819,7 +1819,7 @@ static irqreturn_t tegra_pcie_ep_pex_rst_irq(int irq, void *arg)
return IRQ_HANDLED; return IRQ_HANDLED;
} }
static int tegra_pcie_ep_raise_legacy_irq(struct tegra_pcie_dw *pcie, u16 irq) static int tegra_pcie_ep_raise_legacy_irq(struct tegra194_pcie *pcie, u16 irq)
{ {
/* Tegra194 supports only INTA */ /* Tegra194 supports only INTA */
if (irq > 1) if (irq > 1)
...@@ -1831,7 +1831,7 @@ static int tegra_pcie_ep_raise_legacy_irq(struct tegra_pcie_dw *pcie, u16 irq) ...@@ -1831,7 +1831,7 @@ static int tegra_pcie_ep_raise_legacy_irq(struct tegra_pcie_dw *pcie, u16 irq)
return 0; return 0;
} }
static int tegra_pcie_ep_raise_msi_irq(struct tegra_pcie_dw *pcie, u16 irq) static int tegra_pcie_ep_raise_msi_irq(struct tegra194_pcie *pcie, u16 irq)
{ {
if (unlikely(irq > 31)) if (unlikely(irq > 31))
return -EINVAL; return -EINVAL;
...@@ -1841,7 +1841,7 @@ static int tegra_pcie_ep_raise_msi_irq(struct tegra_pcie_dw *pcie, u16 irq) ...@@ -1841,7 +1841,7 @@ static int tegra_pcie_ep_raise_msi_irq(struct tegra_pcie_dw *pcie, u16 irq)
return 0; return 0;
} }
static int tegra_pcie_ep_raise_msix_irq(struct tegra_pcie_dw *pcie, u16 irq) static int tegra_pcie_ep_raise_msix_irq(struct tegra194_pcie *pcie, u16 irq)
{ {
struct dw_pcie_ep *ep = &pcie->pci.ep; struct dw_pcie_ep *ep = &pcie->pci.ep;
...@@ -1855,7 +1855,7 @@ static int tegra_pcie_ep_raise_irq(struct dw_pcie_ep *ep, u8 func_no, ...@@ -1855,7 +1855,7 @@ static int tegra_pcie_ep_raise_irq(struct dw_pcie_ep *ep, u8 func_no,
u16 interrupt_num) u16 interrupt_num)
{ {
struct dw_pcie *pci = to_dw_pcie_from_ep(ep); struct dw_pcie *pci = to_dw_pcie_from_ep(ep);
struct tegra_pcie_dw *pcie = to_tegra_pcie(pci); struct tegra194_pcie *pcie = to_tegra_pcie(pci);
switch (type) { switch (type) {
case PCI_EPC_IRQ_LEGACY: case PCI_EPC_IRQ_LEGACY:
...@@ -1896,7 +1896,7 @@ static const struct dw_pcie_ep_ops pcie_ep_ops = { ...@@ -1896,7 +1896,7 @@ static const struct dw_pcie_ep_ops pcie_ep_ops = {
.get_features = tegra_pcie_ep_get_features, .get_features = tegra_pcie_ep_get_features,
}; };
static int tegra_pcie_config_ep(struct tegra_pcie_dw *pcie, static int tegra_pcie_config_ep(struct tegra194_pcie *pcie,
struct platform_device *pdev) struct platform_device *pdev)
{ {
struct dw_pcie *pci = &pcie->pci; struct dw_pcie *pci = &pcie->pci;
...@@ -1957,12 +1957,12 @@ static int tegra_pcie_config_ep(struct tegra_pcie_dw *pcie, ...@@ -1957,12 +1957,12 @@ static int tegra_pcie_config_ep(struct tegra_pcie_dw *pcie,
return 0; return 0;
} }
static int tegra_pcie_dw_probe(struct platform_device *pdev) static int tegra194_pcie_probe(struct platform_device *pdev)
{ {
const struct tegra_pcie_dw_of_data *data; const struct tegra194_pcie_of_data *data;
struct device *dev = &pdev->dev; struct device *dev = &pdev->dev;
struct resource *atu_dma_res; struct resource *atu_dma_res;
struct tegra_pcie_dw *pcie; struct tegra194_pcie *pcie;
struct pcie_port *pp; struct pcie_port *pp;
struct dw_pcie *pci; struct dw_pcie *pci;
struct phy **phys; struct phy **phys;
...@@ -1988,7 +1988,7 @@ static int tegra_pcie_dw_probe(struct platform_device *pdev) ...@@ -1988,7 +1988,7 @@ static int tegra_pcie_dw_probe(struct platform_device *pdev)
pcie->dev = &pdev->dev; pcie->dev = &pdev->dev;
pcie->mode = (enum dw_pcie_device_mode)data->mode; pcie->mode = (enum dw_pcie_device_mode)data->mode;
ret = tegra_pcie_dw_parse_dt(pcie); ret = tegra194_pcie_parse_dt(pcie);
if (ret < 0) { if (ret < 0) {
const char *level = KERN_ERR; const char *level = KERN_ERR;
...@@ -2146,9 +2146,9 @@ static int tegra_pcie_dw_probe(struct platform_device *pdev) ...@@ -2146,9 +2146,9 @@ static int tegra_pcie_dw_probe(struct platform_device *pdev)
return ret; return ret;
} }
static int tegra_pcie_dw_remove(struct platform_device *pdev) static int tegra194_pcie_remove(struct platform_device *pdev)
{ {
struct tegra_pcie_dw *pcie = platform_get_drvdata(pdev); struct tegra194_pcie *pcie = platform_get_drvdata(pdev);
if (!pcie->link_state) if (!pcie->link_state)
return 0; return 0;
...@@ -2164,9 +2164,9 @@ static int tegra_pcie_dw_remove(struct platform_device *pdev) ...@@ -2164,9 +2164,9 @@ static int tegra_pcie_dw_remove(struct platform_device *pdev)
return 0; return 0;
} }
static int tegra_pcie_dw_suspend_late(struct device *dev) static int tegra194_pcie_suspend_late(struct device *dev)
{ {
struct tegra_pcie_dw *pcie = dev_get_drvdata(dev); struct tegra194_pcie *pcie = dev_get_drvdata(dev);
u32 val; u32 val;
if (!pcie->link_state) if (!pcie->link_state)
...@@ -2182,9 +2182,9 @@ static int tegra_pcie_dw_suspend_late(struct device *dev) ...@@ -2182,9 +2182,9 @@ static int tegra_pcie_dw_suspend_late(struct device *dev)
return 0; return 0;
} }
static int tegra_pcie_dw_suspend_noirq(struct device *dev) static int tegra194_pcie_suspend_noirq(struct device *dev)
{ {
struct tegra_pcie_dw *pcie = dev_get_drvdata(dev); struct tegra194_pcie *pcie = dev_get_drvdata(dev);
if (!pcie->link_state) if (!pcie->link_state)
return 0; return 0;
...@@ -2193,15 +2193,15 @@ static int tegra_pcie_dw_suspend_noirq(struct device *dev) ...@@ -2193,15 +2193,15 @@ static int tegra_pcie_dw_suspend_noirq(struct device *dev)
pcie->msi_ctrl_int = dw_pcie_readl_dbi(&pcie->pci, pcie->msi_ctrl_int = dw_pcie_readl_dbi(&pcie->pci,
PORT_LOGIC_MSI_CTRL_INT_0_EN); PORT_LOGIC_MSI_CTRL_INT_0_EN);
tegra_pcie_downstream_dev_to_D0(pcie); tegra_pcie_downstream_dev_to_D0(pcie);
tegra_pcie_dw_pme_turnoff(pcie); tegra194_pcie_pme_turnoff(pcie);
tegra_pcie_unconfig_controller(pcie); tegra_pcie_unconfig_controller(pcie);
return 0; return 0;
} }
static int tegra_pcie_dw_resume_noirq(struct device *dev) static int tegra194_pcie_resume_noirq(struct device *dev)
{ {
struct tegra_pcie_dw *pcie = dev_get_drvdata(dev); struct tegra194_pcie *pcie = dev_get_drvdata(dev);
int ret; int ret;
if (!pcie->link_state) if (!pcie->link_state)
...@@ -2211,7 +2211,7 @@ static int tegra_pcie_dw_resume_noirq(struct device *dev) ...@@ -2211,7 +2211,7 @@ static int tegra_pcie_dw_resume_noirq(struct device *dev)
if (ret < 0) if (ret < 0)
return ret; return ret;
ret = tegra_pcie_dw_host_init(&pcie->pci.pp); ret = tegra194_pcie_host_init(&pcie->pci.pp);
if (ret < 0) { if (ret < 0) {
dev_err(dev, "Failed to init host: %d\n", ret); dev_err(dev, "Failed to init host: %d\n", ret);
goto fail_host_init; goto fail_host_init;
...@@ -2219,7 +2219,7 @@ static int tegra_pcie_dw_resume_noirq(struct device *dev) ...@@ -2219,7 +2219,7 @@ static int tegra_pcie_dw_resume_noirq(struct device *dev)
dw_pcie_setup_rc(&pcie->pci.pp); dw_pcie_setup_rc(&pcie->pci.pp);
ret = tegra_pcie_dw_start_link(&pcie->pci); ret = tegra194_pcie_start_link(&pcie->pci);
if (ret < 0) if (ret < 0)
goto fail_host_init; goto fail_host_init;
...@@ -2234,9 +2234,9 @@ static int tegra_pcie_dw_resume_noirq(struct device *dev) ...@@ -2234,9 +2234,9 @@ static int tegra_pcie_dw_resume_noirq(struct device *dev)
return ret; return ret;
} }
static int tegra_pcie_dw_resume_early(struct device *dev) static int tegra194_pcie_resume_early(struct device *dev)
{ {
struct tegra_pcie_dw *pcie = dev_get_drvdata(dev); struct tegra194_pcie *pcie = dev_get_drvdata(dev);
u32 val; u32 val;
if (pcie->mode == DW_PCIE_EP_TYPE) { if (pcie->mode == DW_PCIE_EP_TYPE) {
...@@ -2259,9 +2259,9 @@ static int tegra_pcie_dw_resume_early(struct device *dev) ...@@ -2259,9 +2259,9 @@ static int tegra_pcie_dw_resume_early(struct device *dev)
return 0; return 0;
} }
static void tegra_pcie_dw_shutdown(struct platform_device *pdev) static void tegra194_pcie_shutdown(struct platform_device *pdev)
{ {
struct tegra_pcie_dw *pcie = platform_get_drvdata(pdev); struct tegra194_pcie *pcie = platform_get_drvdata(pdev);
if (!pcie->link_state) if (!pcie->link_state)
return; return;
...@@ -2273,50 +2273,50 @@ static void tegra_pcie_dw_shutdown(struct platform_device *pdev) ...@@ -2273,50 +2273,50 @@ static void tegra_pcie_dw_shutdown(struct platform_device *pdev)
if (IS_ENABLED(CONFIG_PCI_MSI)) if (IS_ENABLED(CONFIG_PCI_MSI))
disable_irq(pcie->pci.pp.msi_irq); disable_irq(pcie->pci.pp.msi_irq);
tegra_pcie_dw_pme_turnoff(pcie); tegra194_pcie_pme_turnoff(pcie);
tegra_pcie_unconfig_controller(pcie); tegra_pcie_unconfig_controller(pcie);
} }
static const struct tegra_pcie_dw_of_data tegra_pcie_dw_rc_of_data = { static const struct tegra194_pcie_of_data tegra194_pcie_rc_of_data = {
.mode = DW_PCIE_RC_TYPE, .mode = DW_PCIE_RC_TYPE,
}; };
static const struct tegra_pcie_dw_of_data tegra_pcie_dw_ep_of_data = { static const struct tegra194_pcie_of_data tegra194_pcie_ep_of_data = {
.mode = DW_PCIE_EP_TYPE, .mode = DW_PCIE_EP_TYPE,
}; };
static const struct of_device_id tegra_pcie_dw_of_match[] = { static const struct of_device_id tegra194_pcie_of_match[] = {
{ {
.compatible = "nvidia,tegra194-pcie", .compatible = "nvidia,tegra194-pcie",
.data = &tegra_pcie_dw_rc_of_data, .data = &tegra194_pcie_rc_of_data,
}, },
{ {
.compatible = "nvidia,tegra194-pcie-ep", .compatible = "nvidia,tegra194-pcie-ep",
.data = &tegra_pcie_dw_ep_of_data, .data = &tegra194_pcie_ep_of_data,
}, },
{}, {},
}; };
static const struct dev_pm_ops tegra_pcie_dw_pm_ops = { static const struct dev_pm_ops tegra194_pcie_pm_ops = {
.suspend_late = tegra_pcie_dw_suspend_late, .suspend_late = tegra194_pcie_suspend_late,
.suspend_noirq = tegra_pcie_dw_suspend_noirq, .suspend_noirq = tegra194_pcie_suspend_noirq,
.resume_noirq = tegra_pcie_dw_resume_noirq, .resume_noirq = tegra194_pcie_resume_noirq,
.resume_early = tegra_pcie_dw_resume_early, .resume_early = tegra194_pcie_resume_early,
}; };
static struct platform_driver tegra_pcie_dw_driver = { static struct platform_driver tegra194_pcie_driver = {
.probe = tegra_pcie_dw_probe, .probe = tegra194_pcie_probe,
.remove = tegra_pcie_dw_remove, .remove = tegra194_pcie_remove,
.shutdown = tegra_pcie_dw_shutdown, .shutdown = tegra194_pcie_shutdown,
.driver = { .driver = {
.name = "tegra194-pcie", .name = "tegra194-pcie",
.pm = &tegra_pcie_dw_pm_ops, .pm = &tegra194_pcie_pm_ops,
.of_match_table = tegra_pcie_dw_of_match, .of_match_table = tegra194_pcie_of_match,
}, },
}; };
module_platform_driver(tegra_pcie_dw_driver); module_platform_driver(tegra194_pcie_driver);
MODULE_DEVICE_TABLE(of, tegra_pcie_dw_of_match); MODULE_DEVICE_TABLE(of, tegra194_pcie_of_match);
MODULE_AUTHOR("Vidya Sagar <vidyas@nvidia.com>"); MODULE_AUTHOR("Vidya Sagar <vidyas@nvidia.com>");
MODULE_DESCRIPTION("NVIDIA PCIe host controller driver"); MODULE_DESCRIPTION("NVIDIA PCIe host controller driver");
......
...@@ -61,9 +61,9 @@ ...@@ -61,9 +61,9 @@
#define PCL_RDLH_LINK_UP BIT(1) #define PCL_RDLH_LINK_UP BIT(1)
#define PCL_XMLH_LINK_UP BIT(0) #define PCL_XMLH_LINK_UP BIT(0)
struct uniphier_pcie_priv { struct uniphier_pcie {
void __iomem *base;
struct dw_pcie pci; struct dw_pcie pci;
void __iomem *base;
struct clk *clk; struct clk *clk;
struct reset_control *rst; struct reset_control *rst;
struct phy *phy; struct phy *phy;
...@@ -72,62 +72,62 @@ struct uniphier_pcie_priv { ...@@ -72,62 +72,62 @@ struct uniphier_pcie_priv {
#define to_uniphier_pcie(x) dev_get_drvdata((x)->dev) #define to_uniphier_pcie(x) dev_get_drvdata((x)->dev)
static void uniphier_pcie_ltssm_enable(struct uniphier_pcie_priv *priv, static void uniphier_pcie_ltssm_enable(struct uniphier_pcie *pcie,
bool enable) bool enable)
{ {
u32 val; u32 val;
val = readl(priv->base + PCL_APP_READY_CTRL); val = readl(pcie->base + PCL_APP_READY_CTRL);
if (enable) if (enable)
val |= PCL_APP_LTSSM_ENABLE; val |= PCL_APP_LTSSM_ENABLE;
else else
val &= ~PCL_APP_LTSSM_ENABLE; val &= ~PCL_APP_LTSSM_ENABLE;
writel(val, priv->base + PCL_APP_READY_CTRL); writel(val, pcie->base + PCL_APP_READY_CTRL);
} }
static void uniphier_pcie_init_rc(struct uniphier_pcie_priv *priv) static void uniphier_pcie_init_rc(struct uniphier_pcie *pcie)
{ {
u32 val; u32 val;
/* set RC MODE */ /* set RC MODE */
val = readl(priv->base + PCL_MODE); val = readl(pcie->base + PCL_MODE);
val |= PCL_MODE_REGEN; val |= PCL_MODE_REGEN;
val &= ~PCL_MODE_REGVAL; val &= ~PCL_MODE_REGVAL;
writel(val, priv->base + PCL_MODE); writel(val, pcie->base + PCL_MODE);
/* use auxiliary power detection */ /* use auxiliary power detection */
val = readl(priv->base + PCL_APP_PM0); val = readl(pcie->base + PCL_APP_PM0);
val |= PCL_SYS_AUX_PWR_DET; val |= PCL_SYS_AUX_PWR_DET;
writel(val, priv->base + PCL_APP_PM0); writel(val, pcie->base + PCL_APP_PM0);
/* assert PERST# */ /* assert PERST# */
val = readl(priv->base + PCL_PINCTRL0); val = readl(pcie->base + PCL_PINCTRL0);
val &= ~(PCL_PERST_NOE_REGVAL | PCL_PERST_OUT_REGVAL val &= ~(PCL_PERST_NOE_REGVAL | PCL_PERST_OUT_REGVAL
| PCL_PERST_PLDN_REGVAL); | PCL_PERST_PLDN_REGVAL);
val |= PCL_PERST_NOE_REGEN | PCL_PERST_OUT_REGEN val |= PCL_PERST_NOE_REGEN | PCL_PERST_OUT_REGEN
| PCL_PERST_PLDN_REGEN; | PCL_PERST_PLDN_REGEN;
writel(val, priv->base + PCL_PINCTRL0); writel(val, pcie->base + PCL_PINCTRL0);
uniphier_pcie_ltssm_enable(priv, false); uniphier_pcie_ltssm_enable(pcie, false);
usleep_range(100000, 200000); usleep_range(100000, 200000);
/* deassert PERST# */ /* deassert PERST# */
val = readl(priv->base + PCL_PINCTRL0); val = readl(pcie->base + PCL_PINCTRL0);
val |= PCL_PERST_OUT_REGVAL | PCL_PERST_OUT_REGEN; val |= PCL_PERST_OUT_REGVAL | PCL_PERST_OUT_REGEN;
writel(val, priv->base + PCL_PINCTRL0); writel(val, pcie->base + PCL_PINCTRL0);
} }
static int uniphier_pcie_wait_rc(struct uniphier_pcie_priv *priv) static int uniphier_pcie_wait_rc(struct uniphier_pcie *pcie)
{ {
u32 status; u32 status;
int ret; int ret;
/* wait PIPE clock */ /* wait PIPE clock */
ret = readl_poll_timeout(priv->base + PCL_PIPEMON, status, ret = readl_poll_timeout(pcie->base + PCL_PIPEMON, status,
status & PCL_PCLK_ALIVE, 100000, 1000000); status & PCL_PCLK_ALIVE, 100000, 1000000);
if (ret) { if (ret) {
dev_err(priv->pci.dev, dev_err(pcie->pci.dev,
"Failed to initialize controller in RC mode\n"); "Failed to initialize controller in RC mode\n");
return ret; return ret;
} }
...@@ -137,10 +137,10 @@ static int uniphier_pcie_wait_rc(struct uniphier_pcie_priv *priv) ...@@ -137,10 +137,10 @@ static int uniphier_pcie_wait_rc(struct uniphier_pcie_priv *priv)
static int uniphier_pcie_link_up(struct dw_pcie *pci) static int uniphier_pcie_link_up(struct dw_pcie *pci)
{ {
struct uniphier_pcie_priv *priv = to_uniphier_pcie(pci); struct uniphier_pcie *pcie = to_uniphier_pcie(pci);
u32 val, mask; u32 val, mask;
val = readl(priv->base + PCL_STATUS_LINK); val = readl(pcie->base + PCL_STATUS_LINK);
mask = PCL_RDLH_LINK_UP | PCL_XMLH_LINK_UP; mask = PCL_RDLH_LINK_UP | PCL_XMLH_LINK_UP;
return (val & mask) == mask; return (val & mask) == mask;
...@@ -148,39 +148,40 @@ static int uniphier_pcie_link_up(struct dw_pcie *pci) ...@@ -148,39 +148,40 @@ static int uniphier_pcie_link_up(struct dw_pcie *pci)
static int uniphier_pcie_start_link(struct dw_pcie *pci) static int uniphier_pcie_start_link(struct dw_pcie *pci)
{ {
struct uniphier_pcie_priv *priv = to_uniphier_pcie(pci); struct uniphier_pcie *pcie = to_uniphier_pcie(pci);
uniphier_pcie_ltssm_enable(priv, true); uniphier_pcie_ltssm_enable(pcie, true);
return 0; return 0;
} }
static void uniphier_pcie_stop_link(struct dw_pcie *pci) static void uniphier_pcie_stop_link(struct dw_pcie *pci)
{ {
struct uniphier_pcie_priv *priv = to_uniphier_pcie(pci); struct uniphier_pcie *pcie = to_uniphier_pcie(pci);
uniphier_pcie_ltssm_enable(priv, false); uniphier_pcie_ltssm_enable(pcie, false);
} }
static void uniphier_pcie_irq_enable(struct uniphier_pcie_priv *priv) static void uniphier_pcie_irq_enable(struct uniphier_pcie *pcie)
{ {
writel(PCL_RCV_INT_ALL_ENABLE, priv->base + PCL_RCV_INT); writel(PCL_RCV_INT_ALL_ENABLE, pcie->base + PCL_RCV_INT);
writel(PCL_RCV_INTX_ALL_ENABLE, priv->base + PCL_RCV_INTX); writel(PCL_RCV_INTX_ALL_ENABLE, pcie->base + PCL_RCV_INTX);
} }
static void uniphier_pcie_irq_mask(struct irq_data *d) static void uniphier_pcie_irq_mask(struct irq_data *d)
{ {
struct pcie_port *pp = irq_data_get_irq_chip_data(d); struct pcie_port *pp = irq_data_get_irq_chip_data(d);
struct dw_pcie *pci = to_dw_pcie_from_pp(pp); struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
struct uniphier_pcie_priv *priv = to_uniphier_pcie(pci); struct uniphier_pcie *pcie = to_uniphier_pcie(pci);
unsigned long flags; unsigned long flags;
u32 val; u32 val;
raw_spin_lock_irqsave(&pp->lock, flags); raw_spin_lock_irqsave(&pp->lock, flags);
val = readl(priv->base + PCL_RCV_INTX); val = readl(pcie->base + PCL_RCV_INTX);
val |= BIT(irqd_to_hwirq(d) + PCL_RCV_INTX_MASK_SHIFT); val |= BIT(irqd_to_hwirq(d) + PCL_RCV_INTX_MASK_SHIFT);
writel(val, priv->base + PCL_RCV_INTX); writel(val, pcie->base + PCL_RCV_INTX);
raw_spin_unlock_irqrestore(&pp->lock, flags); raw_spin_unlock_irqrestore(&pp->lock, flags);
} }
...@@ -189,15 +190,15 @@ static void uniphier_pcie_irq_unmask(struct irq_data *d) ...@@ -189,15 +190,15 @@ static void uniphier_pcie_irq_unmask(struct irq_data *d)
{ {
struct pcie_port *pp = irq_data_get_irq_chip_data(d); struct pcie_port *pp = irq_data_get_irq_chip_data(d);
struct dw_pcie *pci = to_dw_pcie_from_pp(pp); struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
struct uniphier_pcie_priv *priv = to_uniphier_pcie(pci); struct uniphier_pcie *pcie = to_uniphier_pcie(pci);
unsigned long flags; unsigned long flags;
u32 val; u32 val;
raw_spin_lock_irqsave(&pp->lock, flags); raw_spin_lock_irqsave(&pp->lock, flags);
val = readl(priv->base + PCL_RCV_INTX); val = readl(pcie->base + PCL_RCV_INTX);
val &= ~BIT(irqd_to_hwirq(d) + PCL_RCV_INTX_MASK_SHIFT); val &= ~BIT(irqd_to_hwirq(d) + PCL_RCV_INTX_MASK_SHIFT);
writel(val, priv->base + PCL_RCV_INTX); writel(val, pcie->base + PCL_RCV_INTX);
raw_spin_unlock_irqrestore(&pp->lock, flags); raw_spin_unlock_irqrestore(&pp->lock, flags);
} }
...@@ -226,13 +227,13 @@ static void uniphier_pcie_irq_handler(struct irq_desc *desc) ...@@ -226,13 +227,13 @@ static void uniphier_pcie_irq_handler(struct irq_desc *desc)
{ {
struct pcie_port *pp = irq_desc_get_handler_data(desc); struct pcie_port *pp = irq_desc_get_handler_data(desc);
struct dw_pcie *pci = to_dw_pcie_from_pp(pp); struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
struct uniphier_pcie_priv *priv = to_uniphier_pcie(pci); struct uniphier_pcie *pcie = to_uniphier_pcie(pci);
struct irq_chip *chip = irq_desc_get_chip(desc); struct irq_chip *chip = irq_desc_get_chip(desc);
unsigned long reg; unsigned long reg;
u32 val, bit; u32 val, bit;
/* INT for debug */ /* INT for debug */
val = readl(priv->base + PCL_RCV_INT); val = readl(pcie->base + PCL_RCV_INT);
if (val & PCL_CFG_BW_MGT_STATUS) if (val & PCL_CFG_BW_MGT_STATUS)
dev_dbg(pci->dev, "Link Bandwidth Management Event\n"); dev_dbg(pci->dev, "Link Bandwidth Management Event\n");
...@@ -243,16 +244,16 @@ static void uniphier_pcie_irq_handler(struct irq_desc *desc) ...@@ -243,16 +244,16 @@ static void uniphier_pcie_irq_handler(struct irq_desc *desc)
if (val & PCL_CFG_PME_MSI_STATUS) if (val & PCL_CFG_PME_MSI_STATUS)
dev_dbg(pci->dev, "PME Interrupt\n"); dev_dbg(pci->dev, "PME Interrupt\n");
writel(val, priv->base + PCL_RCV_INT); writel(val, pcie->base + PCL_RCV_INT);
/* INTx */ /* INTx */
chained_irq_enter(chip, desc); chained_irq_enter(chip, desc);
val = readl(priv->base + PCL_RCV_INTX); val = readl(pcie->base + PCL_RCV_INTX);
reg = FIELD_GET(PCL_RCV_INTX_ALL_STATUS, val); reg = FIELD_GET(PCL_RCV_INTX_ALL_STATUS, val);
for_each_set_bit(bit, &reg, PCI_NUM_INTX) for_each_set_bit(bit, &reg, PCI_NUM_INTX)
generic_handle_domain_irq(priv->legacy_irq_domain, bit); generic_handle_domain_irq(pcie->legacy_irq_domain, bit);
chained_irq_exit(chip, desc); chained_irq_exit(chip, desc);
} }
...@@ -260,7 +261,7 @@ static void uniphier_pcie_irq_handler(struct irq_desc *desc) ...@@ -260,7 +261,7 @@ static void uniphier_pcie_irq_handler(struct irq_desc *desc)
static int uniphier_pcie_config_legacy_irq(struct pcie_port *pp) static int uniphier_pcie_config_legacy_irq(struct pcie_port *pp)
{ {
struct dw_pcie *pci = to_dw_pcie_from_pp(pp); struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
struct uniphier_pcie_priv *priv = to_uniphier_pcie(pci); struct uniphier_pcie *pcie = to_uniphier_pcie(pci);
struct device_node *np = pci->dev->of_node; struct device_node *np = pci->dev->of_node;
struct device_node *np_intc; struct device_node *np_intc;
int ret = 0; int ret = 0;
...@@ -278,9 +279,9 @@ static int uniphier_pcie_config_legacy_irq(struct pcie_port *pp) ...@@ -278,9 +279,9 @@ static int uniphier_pcie_config_legacy_irq(struct pcie_port *pp)
goto out_put_node; goto out_put_node;
} }
priv->legacy_irq_domain = irq_domain_add_linear(np_intc, PCI_NUM_INTX, pcie->legacy_irq_domain = irq_domain_add_linear(np_intc, PCI_NUM_INTX,
&uniphier_intx_domain_ops, pp); &uniphier_intx_domain_ops, pp);
if (!priv->legacy_irq_domain) { if (!pcie->legacy_irq_domain) {
dev_err(pci->dev, "Failed to get INTx domain\n"); dev_err(pci->dev, "Failed to get INTx domain\n");
ret = -ENODEV; ret = -ENODEV;
goto out_put_node; goto out_put_node;
...@@ -297,14 +298,14 @@ static int uniphier_pcie_config_legacy_irq(struct pcie_port *pp) ...@@ -297,14 +298,14 @@ static int uniphier_pcie_config_legacy_irq(struct pcie_port *pp)
static int uniphier_pcie_host_init(struct pcie_port *pp) static int uniphier_pcie_host_init(struct pcie_port *pp)
{ {
struct dw_pcie *pci = to_dw_pcie_from_pp(pp); struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
struct uniphier_pcie_priv *priv = to_uniphier_pcie(pci); struct uniphier_pcie *pcie = to_uniphier_pcie(pci);
int ret; int ret;
ret = uniphier_pcie_config_legacy_irq(pp); ret = uniphier_pcie_config_legacy_irq(pp);
if (ret) if (ret)
return ret; return ret;
uniphier_pcie_irq_enable(priv); uniphier_pcie_irq_enable(pcie);
return 0; return 0;
} }
...@@ -313,36 +314,36 @@ static const struct dw_pcie_host_ops uniphier_pcie_host_ops = { ...@@ -313,36 +314,36 @@ static const struct dw_pcie_host_ops uniphier_pcie_host_ops = {
.host_init = uniphier_pcie_host_init, .host_init = uniphier_pcie_host_init,
}; };
static int uniphier_pcie_host_enable(struct uniphier_pcie_priv *priv) static int uniphier_pcie_host_enable(struct uniphier_pcie *pcie)
{ {
int ret; int ret;
ret = clk_prepare_enable(priv->clk); ret = clk_prepare_enable(pcie->clk);
if (ret) if (ret)
return ret; return ret;
ret = reset_control_deassert(priv->rst); ret = reset_control_deassert(pcie->rst);
if (ret) if (ret)
goto out_clk_disable; goto out_clk_disable;
uniphier_pcie_init_rc(priv); uniphier_pcie_init_rc(pcie);
ret = phy_init(priv->phy); ret = phy_init(pcie->phy);
if (ret) if (ret)
goto out_rst_assert; goto out_rst_assert;
ret = uniphier_pcie_wait_rc(priv); ret = uniphier_pcie_wait_rc(pcie);
if (ret) if (ret)
goto out_phy_exit; goto out_phy_exit;
return 0; return 0;
out_phy_exit: out_phy_exit:
phy_exit(priv->phy); phy_exit(pcie->phy);
out_rst_assert: out_rst_assert:
reset_control_assert(priv->rst); reset_control_assert(pcie->rst);
out_clk_disable: out_clk_disable:
clk_disable_unprepare(priv->clk); clk_disable_unprepare(pcie->clk);
return ret; return ret;
} }
...@@ -356,41 +357,41 @@ static const struct dw_pcie_ops dw_pcie_ops = { ...@@ -356,41 +357,41 @@ static const struct dw_pcie_ops dw_pcie_ops = {
static int uniphier_pcie_probe(struct platform_device *pdev) static int uniphier_pcie_probe(struct platform_device *pdev)
{ {
struct device *dev = &pdev->dev; struct device *dev = &pdev->dev;
struct uniphier_pcie_priv *priv; struct uniphier_pcie *pcie;
int ret; int ret;
priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL); pcie = devm_kzalloc(dev, sizeof(*pcie), GFP_KERNEL);
if (!priv) if (!pcie)
return -ENOMEM; return -ENOMEM;
priv->pci.dev = dev; pcie->pci.dev = dev;
priv->pci.ops = &dw_pcie_ops; pcie->pci.ops = &dw_pcie_ops;
priv->base = devm_platform_ioremap_resource_byname(pdev, "link"); pcie->base = devm_platform_ioremap_resource_byname(pdev, "link");
if (IS_ERR(priv->base)) if (IS_ERR(pcie->base))
return PTR_ERR(priv->base); return PTR_ERR(pcie->base);
priv->clk = devm_clk_get(dev, NULL); pcie->clk = devm_clk_get(dev, NULL);
if (IS_ERR(priv->clk)) if (IS_ERR(pcie->clk))
return PTR_ERR(priv->clk); return PTR_ERR(pcie->clk);
priv->rst = devm_reset_control_get_shared(dev, NULL); pcie->rst = devm_reset_control_get_shared(dev, NULL);
if (IS_ERR(priv->rst)) if (IS_ERR(pcie->rst))
return PTR_ERR(priv->rst); return PTR_ERR(pcie->rst);
priv->phy = devm_phy_optional_get(dev, "pcie-phy"); pcie->phy = devm_phy_optional_get(dev, "pcie-phy");
if (IS_ERR(priv->phy)) if (IS_ERR(pcie->phy))
return PTR_ERR(priv->phy); return PTR_ERR(pcie->phy);
platform_set_drvdata(pdev, priv); platform_set_drvdata(pdev, pcie);
ret = uniphier_pcie_host_enable(priv); ret = uniphier_pcie_host_enable(pcie);
if (ret) if (ret)
return ret; return ret;
priv->pci.pp.ops = &uniphier_pcie_host_ops; pcie->pci.pp.ops = &uniphier_pcie_host_ops;
return dw_pcie_host_init(&priv->pci.pp); return dw_pcie_host_init(&pcie->pci.pp);
} }
static const struct of_device_id uniphier_pcie_match[] = { static const struct of_device_id uniphier_pcie_match[] = {
......
...@@ -34,31 +34,31 @@ ...@@ -34,31 +34,31 @@
#define PF_DBG_WE BIT(31) #define PF_DBG_WE BIT(31)
#define PF_DBG_PABR BIT(27) #define PF_DBG_PABR BIT(27)
#define to_ls_pcie_g4(x) platform_get_drvdata((x)->pdev) #define to_ls_g4_pcie(x) platform_get_drvdata((x)->pdev)
struct ls_pcie_g4 { struct ls_g4_pcie {
struct mobiveil_pcie pci; struct mobiveil_pcie pci;
struct delayed_work dwork; struct delayed_work dwork;
int irq; int irq;
}; };
static inline u32 ls_pcie_g4_pf_readl(struct ls_pcie_g4 *pcie, u32 off) static inline u32 ls_g4_pcie_pf_readl(struct ls_g4_pcie *pcie, u32 off)
{ {
return ioread32(pcie->pci.csr_axi_slave_base + PCIE_PF_OFF + off); return ioread32(pcie->pci.csr_axi_slave_base + PCIE_PF_OFF + off);
} }
static inline void ls_pcie_g4_pf_writel(struct ls_pcie_g4 *pcie, static inline void ls_g4_pcie_pf_writel(struct ls_g4_pcie *pcie,
u32 off, u32 val) u32 off, u32 val)
{ {
iowrite32(val, pcie->pci.csr_axi_slave_base + PCIE_PF_OFF + off); iowrite32(val, pcie->pci.csr_axi_slave_base + PCIE_PF_OFF + off);
} }
static int ls_pcie_g4_link_up(struct mobiveil_pcie *pci) static int ls_g4_pcie_link_up(struct mobiveil_pcie *pci)
{ {
struct ls_pcie_g4 *pcie = to_ls_pcie_g4(pci); struct ls_g4_pcie *pcie = to_ls_g4_pcie(pci);
u32 state; u32 state;
state = ls_pcie_g4_pf_readl(pcie, PCIE_PF_DBG); state = ls_g4_pcie_pf_readl(pcie, PCIE_PF_DBG);
state = state & PF_DBG_LTSSM_MASK; state = state & PF_DBG_LTSSM_MASK;
if (state == PF_DBG_LTSSM_L0) if (state == PF_DBG_LTSSM_L0)
...@@ -67,14 +67,14 @@ static int ls_pcie_g4_link_up(struct mobiveil_pcie *pci) ...@@ -67,14 +67,14 @@ static int ls_pcie_g4_link_up(struct mobiveil_pcie *pci)
return 0; return 0;
} }
static void ls_pcie_g4_disable_interrupt(struct ls_pcie_g4 *pcie) static void ls_g4_pcie_disable_interrupt(struct ls_g4_pcie *pcie)
{ {
struct mobiveil_pcie *mv_pci = &pcie->pci; struct mobiveil_pcie *mv_pci = &pcie->pci;
mobiveil_csr_writel(mv_pci, 0, PAB_INTP_AMBA_MISC_ENB); mobiveil_csr_writel(mv_pci, 0, PAB_INTP_AMBA_MISC_ENB);
} }
static void ls_pcie_g4_enable_interrupt(struct ls_pcie_g4 *pcie) static void ls_g4_pcie_enable_interrupt(struct ls_g4_pcie *pcie)
{ {
struct mobiveil_pcie *mv_pci = &pcie->pci; struct mobiveil_pcie *mv_pci = &pcie->pci;
u32 val; u32 val;
...@@ -87,7 +87,7 @@ static void ls_pcie_g4_enable_interrupt(struct ls_pcie_g4 *pcie) ...@@ -87,7 +87,7 @@ static void ls_pcie_g4_enable_interrupt(struct ls_pcie_g4 *pcie)
mobiveil_csr_writel(mv_pci, val, PAB_INTP_AMBA_MISC_ENB); mobiveil_csr_writel(mv_pci, val, PAB_INTP_AMBA_MISC_ENB);
} }
static int ls_pcie_g4_reinit_hw(struct ls_pcie_g4 *pcie) static int ls_g4_pcie_reinit_hw(struct ls_g4_pcie *pcie)
{ {
struct mobiveil_pcie *mv_pci = &pcie->pci; struct mobiveil_pcie *mv_pci = &pcie->pci;
struct device *dev = &mv_pci->pdev->dev; struct device *dev = &mv_pci->pdev->dev;
...@@ -97,7 +97,7 @@ static int ls_pcie_g4_reinit_hw(struct ls_pcie_g4 *pcie) ...@@ -97,7 +97,7 @@ static int ls_pcie_g4_reinit_hw(struct ls_pcie_g4 *pcie)
/* Poll for pab_csb_reset to set and PAB activity to clear */ /* Poll for pab_csb_reset to set and PAB activity to clear */
do { do {
usleep_range(10, 15); usleep_range(10, 15);
val = ls_pcie_g4_pf_readl(pcie, PCIE_PF_INT_STAT); val = ls_g4_pcie_pf_readl(pcie, PCIE_PF_INT_STAT);
act_stat = mobiveil_csr_readl(mv_pci, PAB_ACTIVITY_STAT); act_stat = mobiveil_csr_readl(mv_pci, PAB_ACTIVITY_STAT);
} while (((val & PF_INT_STAT_PABRST) == 0 || act_stat) && to--); } while (((val & PF_INT_STAT_PABRST) == 0 || act_stat) && to--);
if (to < 0) { if (to < 0) {
...@@ -106,22 +106,22 @@ static int ls_pcie_g4_reinit_hw(struct ls_pcie_g4 *pcie) ...@@ -106,22 +106,22 @@ static int ls_pcie_g4_reinit_hw(struct ls_pcie_g4 *pcie)
} }
/* clear PEX_RESET bit in PEX_PF0_DBG register */ /* clear PEX_RESET bit in PEX_PF0_DBG register */
val = ls_pcie_g4_pf_readl(pcie, PCIE_PF_DBG); val = ls_g4_pcie_pf_readl(pcie, PCIE_PF_DBG);
val |= PF_DBG_WE; val |= PF_DBG_WE;
ls_pcie_g4_pf_writel(pcie, PCIE_PF_DBG, val); ls_g4_pcie_pf_writel(pcie, PCIE_PF_DBG, val);
val = ls_pcie_g4_pf_readl(pcie, PCIE_PF_DBG); val = ls_g4_pcie_pf_readl(pcie, PCIE_PF_DBG);
val |= PF_DBG_PABR; val |= PF_DBG_PABR;
ls_pcie_g4_pf_writel(pcie, PCIE_PF_DBG, val); ls_g4_pcie_pf_writel(pcie, PCIE_PF_DBG, val);
val = ls_pcie_g4_pf_readl(pcie, PCIE_PF_DBG); val = ls_g4_pcie_pf_readl(pcie, PCIE_PF_DBG);
val &= ~PF_DBG_WE; val &= ~PF_DBG_WE;
ls_pcie_g4_pf_writel(pcie, PCIE_PF_DBG, val); ls_g4_pcie_pf_writel(pcie, PCIE_PF_DBG, val);
mobiveil_host_init(mv_pci, true); mobiveil_host_init(mv_pci, true);
to = 100; to = 100;
while (!ls_pcie_g4_link_up(mv_pci) && to--) while (!ls_g4_pcie_link_up(mv_pci) && to--)
usleep_range(200, 250); usleep_range(200, 250);
if (to < 0) { if (to < 0) {
dev_err(dev, "PCIe link training timeout\n"); dev_err(dev, "PCIe link training timeout\n");
...@@ -131,9 +131,9 @@ static int ls_pcie_g4_reinit_hw(struct ls_pcie_g4 *pcie) ...@@ -131,9 +131,9 @@ static int ls_pcie_g4_reinit_hw(struct ls_pcie_g4 *pcie)
return 0; return 0;
} }
static irqreturn_t ls_pcie_g4_isr(int irq, void *dev_id) static irqreturn_t ls_g4_pcie_isr(int irq, void *dev_id)
{ {
struct ls_pcie_g4 *pcie = (struct ls_pcie_g4 *)dev_id; struct ls_g4_pcie *pcie = (struct ls_g4_pcie *)dev_id;
struct mobiveil_pcie *mv_pci = &pcie->pci; struct mobiveil_pcie *mv_pci = &pcie->pci;
u32 val; u32 val;
...@@ -142,7 +142,7 @@ static irqreturn_t ls_pcie_g4_isr(int irq, void *dev_id) ...@@ -142,7 +142,7 @@ static irqreturn_t ls_pcie_g4_isr(int irq, void *dev_id)
return IRQ_NONE; return IRQ_NONE;
if (val & PAB_INTP_RESET) { if (val & PAB_INTP_RESET) {
ls_pcie_g4_disable_interrupt(pcie); ls_g4_pcie_disable_interrupt(pcie);
schedule_delayed_work(&pcie->dwork, msecs_to_jiffies(1)); schedule_delayed_work(&pcie->dwork, msecs_to_jiffies(1));
} }
...@@ -151,9 +151,9 @@ static irqreturn_t ls_pcie_g4_isr(int irq, void *dev_id) ...@@ -151,9 +151,9 @@ static irqreturn_t ls_pcie_g4_isr(int irq, void *dev_id)
return IRQ_HANDLED; return IRQ_HANDLED;
} }
static int ls_pcie_g4_interrupt_init(struct mobiveil_pcie *mv_pci) static int ls_g4_pcie_interrupt_init(struct mobiveil_pcie *mv_pci)
{ {
struct ls_pcie_g4 *pcie = to_ls_pcie_g4(mv_pci); struct ls_g4_pcie *pcie = to_ls_g4_pcie(mv_pci);
struct platform_device *pdev = mv_pci->pdev; struct platform_device *pdev = mv_pci->pdev;
struct device *dev = &pdev->dev; struct device *dev = &pdev->dev;
int ret; int ret;
...@@ -162,7 +162,7 @@ static int ls_pcie_g4_interrupt_init(struct mobiveil_pcie *mv_pci) ...@@ -162,7 +162,7 @@ static int ls_pcie_g4_interrupt_init(struct mobiveil_pcie *mv_pci)
if (pcie->irq < 0) if (pcie->irq < 0)
return pcie->irq; return pcie->irq;
ret = devm_request_irq(dev, pcie->irq, ls_pcie_g4_isr, ret = devm_request_irq(dev, pcie->irq, ls_g4_pcie_isr,
IRQF_SHARED, pdev->name, pcie); IRQF_SHARED, pdev->name, pcie);
if (ret) { if (ret) {
dev_err(dev, "Can't register PCIe IRQ, errno = %d\n", ret); dev_err(dev, "Can't register PCIe IRQ, errno = %d\n", ret);
...@@ -172,11 +172,11 @@ static int ls_pcie_g4_interrupt_init(struct mobiveil_pcie *mv_pci) ...@@ -172,11 +172,11 @@ static int ls_pcie_g4_interrupt_init(struct mobiveil_pcie *mv_pci)
return 0; return 0;
} }
static void ls_pcie_g4_reset(struct work_struct *work) static void ls_g4_pcie_reset(struct work_struct *work)
{ {
struct delayed_work *dwork = container_of(work, struct delayed_work, struct delayed_work *dwork = container_of(work, struct delayed_work,
work); work);
struct ls_pcie_g4 *pcie = container_of(dwork, struct ls_pcie_g4, dwork); struct ls_g4_pcie *pcie = container_of(dwork, struct ls_g4_pcie, dwork);
struct mobiveil_pcie *mv_pci = &pcie->pci; struct mobiveil_pcie *mv_pci = &pcie->pci;
u16 ctrl; u16 ctrl;
...@@ -184,26 +184,26 @@ static void ls_pcie_g4_reset(struct work_struct *work) ...@@ -184,26 +184,26 @@ static void ls_pcie_g4_reset(struct work_struct *work)
ctrl &= ~PCI_BRIDGE_CTL_BUS_RESET; ctrl &= ~PCI_BRIDGE_CTL_BUS_RESET;
mobiveil_csr_writew(mv_pci, ctrl, PCI_BRIDGE_CONTROL); mobiveil_csr_writew(mv_pci, ctrl, PCI_BRIDGE_CONTROL);
if (!ls_pcie_g4_reinit_hw(pcie)) if (!ls_g4_pcie_reinit_hw(pcie))
return; return;
ls_pcie_g4_enable_interrupt(pcie); ls_g4_pcie_enable_interrupt(pcie);
} }
static struct mobiveil_rp_ops ls_pcie_g4_rp_ops = { static struct mobiveil_rp_ops ls_g4_pcie_rp_ops = {
.interrupt_init = ls_pcie_g4_interrupt_init, .interrupt_init = ls_g4_pcie_interrupt_init,
}; };
static const struct mobiveil_pab_ops ls_pcie_g4_pab_ops = { static const struct mobiveil_pab_ops ls_g4_pcie_pab_ops = {
.link_up = ls_pcie_g4_link_up, .link_up = ls_g4_pcie_link_up,
}; };
static int __init ls_pcie_g4_probe(struct platform_device *pdev) static int __init ls_g4_pcie_probe(struct platform_device *pdev)
{ {
struct device *dev = &pdev->dev; struct device *dev = &pdev->dev;
struct pci_host_bridge *bridge; struct pci_host_bridge *bridge;
struct mobiveil_pcie *mv_pci; struct mobiveil_pcie *mv_pci;
struct ls_pcie_g4 *pcie; struct ls_g4_pcie *pcie;
struct device_node *np = dev->of_node; struct device_node *np = dev->of_node;
int ret; int ret;
...@@ -220,13 +220,13 @@ static int __init ls_pcie_g4_probe(struct platform_device *pdev) ...@@ -220,13 +220,13 @@ static int __init ls_pcie_g4_probe(struct platform_device *pdev)
mv_pci = &pcie->pci; mv_pci = &pcie->pci;
mv_pci->pdev = pdev; mv_pci->pdev = pdev;
mv_pci->ops = &ls_pcie_g4_pab_ops; mv_pci->ops = &ls_g4_pcie_pab_ops;
mv_pci->rp.ops = &ls_pcie_g4_rp_ops; mv_pci->rp.ops = &ls_g4_pcie_rp_ops;
mv_pci->rp.bridge = bridge; mv_pci->rp.bridge = bridge;
platform_set_drvdata(pdev, pcie); platform_set_drvdata(pdev, pcie);
INIT_DELAYED_WORK(&pcie->dwork, ls_pcie_g4_reset); INIT_DELAYED_WORK(&pcie->dwork, ls_g4_pcie_reset);
ret = mobiveil_pcie_host_probe(mv_pci); ret = mobiveil_pcie_host_probe(mv_pci);
if (ret) { if (ret) {
...@@ -234,22 +234,22 @@ static int __init ls_pcie_g4_probe(struct platform_device *pdev) ...@@ -234,22 +234,22 @@ static int __init ls_pcie_g4_probe(struct platform_device *pdev)
return ret; return ret;
} }
ls_pcie_g4_enable_interrupt(pcie); ls_g4_pcie_enable_interrupt(pcie);
return 0; return 0;
} }
static const struct of_device_id ls_pcie_g4_of_match[] = { static const struct of_device_id ls_g4_pcie_of_match[] = {
{ .compatible = "fsl,lx2160a-pcie", }, { .compatible = "fsl,lx2160a-pcie", },
{ }, { },
}; };
static struct platform_driver ls_pcie_g4_driver = { static struct platform_driver ls_g4_pcie_driver = {
.driver = { .driver = {
.name = "layerscape-pcie-gen4", .name = "layerscape-pcie-gen4",
.of_match_table = ls_pcie_g4_of_match, .of_match_table = ls_g4_pcie_of_match,
.suppress_bind_attrs = true, .suppress_bind_attrs = true,
}, },
}; };
builtin_platform_driver_probe(ls_pcie_g4_driver, ls_pcie_g4_probe); builtin_platform_driver_probe(ls_g4_pcie_driver, ls_g4_pcie_probe);
...@@ -93,7 +93,7 @@ ...@@ -93,7 +93,7 @@
#define RCAR_PCI_UNIT_REV_REG (RCAR_AHBPCI_PCICOM_OFFSET + 0x48) #define RCAR_PCI_UNIT_REV_REG (RCAR_AHBPCI_PCICOM_OFFSET + 0x48)
struct rcar_pci_priv { struct rcar_pci {
struct device *dev; struct device *dev;
void __iomem *reg; void __iomem *reg;
struct resource mem_res; struct resource mem_res;
...@@ -105,7 +105,7 @@ struct rcar_pci_priv { ...@@ -105,7 +105,7 @@ struct rcar_pci_priv {
static void __iomem *rcar_pci_cfg_base(struct pci_bus *bus, unsigned int devfn, static void __iomem *rcar_pci_cfg_base(struct pci_bus *bus, unsigned int devfn,
int where) int where)
{ {
struct rcar_pci_priv *priv = bus->sysdata; struct rcar_pci *priv = bus->sysdata;
int slot, val; int slot, val;
if (!pci_is_root_bus(bus) || PCI_FUNC(devfn)) if (!pci_is_root_bus(bus) || PCI_FUNC(devfn))
...@@ -132,7 +132,7 @@ static void __iomem *rcar_pci_cfg_base(struct pci_bus *bus, unsigned int devfn, ...@@ -132,7 +132,7 @@ static void __iomem *rcar_pci_cfg_base(struct pci_bus *bus, unsigned int devfn,
static irqreturn_t rcar_pci_err_irq(int irq, void *pw) static irqreturn_t rcar_pci_err_irq(int irq, void *pw)
{ {
struct rcar_pci_priv *priv = pw; struct rcar_pci *priv = pw;
struct device *dev = priv->dev; struct device *dev = priv->dev;
u32 status = ioread32(priv->reg + RCAR_PCI_INT_STATUS_REG); u32 status = ioread32(priv->reg + RCAR_PCI_INT_STATUS_REG);
...@@ -148,7 +148,7 @@ static irqreturn_t rcar_pci_err_irq(int irq, void *pw) ...@@ -148,7 +148,7 @@ static irqreturn_t rcar_pci_err_irq(int irq, void *pw)
return IRQ_NONE; return IRQ_NONE;
} }
static void rcar_pci_setup_errirq(struct rcar_pci_priv *priv) static void rcar_pci_setup_errirq(struct rcar_pci *priv)
{ {
struct device *dev = priv->dev; struct device *dev = priv->dev;
int ret; int ret;
...@@ -166,11 +166,11 @@ static void rcar_pci_setup_errirq(struct rcar_pci_priv *priv) ...@@ -166,11 +166,11 @@ static void rcar_pci_setup_errirq(struct rcar_pci_priv *priv)
iowrite32(val, priv->reg + RCAR_PCI_INT_ENABLE_REG); iowrite32(val, priv->reg + RCAR_PCI_INT_ENABLE_REG);
} }
#else #else
static inline void rcar_pci_setup_errirq(struct rcar_pci_priv *priv) { } static inline void rcar_pci_setup_errirq(struct rcar_pci *priv) { }
#endif #endif
/* PCI host controller setup */ /* PCI host controller setup */
static void rcar_pci_setup(struct rcar_pci_priv *priv) static void rcar_pci_setup(struct rcar_pci *priv)
{ {
struct pci_host_bridge *bridge = pci_host_bridge_from_priv(priv); struct pci_host_bridge *bridge = pci_host_bridge_from_priv(priv);
struct device *dev = priv->dev; struct device *dev = priv->dev;
...@@ -279,7 +279,7 @@ static int rcar_pci_probe(struct platform_device *pdev) ...@@ -279,7 +279,7 @@ static int rcar_pci_probe(struct platform_device *pdev)
{ {
struct device *dev = &pdev->dev; struct device *dev = &pdev->dev;
struct resource *cfg_res, *mem_res; struct resource *cfg_res, *mem_res;
struct rcar_pci_priv *priv; struct rcar_pci *priv;
struct pci_host_bridge *bridge; struct pci_host_bridge *bridge;
void __iomem *reg; void __iomem *reg;
......
...@@ -60,7 +60,7 @@ ...@@ -60,7 +60,7 @@
#define XGENE_PCIE_IP_VER_2 2 #define XGENE_PCIE_IP_VER_2 2
#if defined(CONFIG_PCI_XGENE) || (defined(CONFIG_ACPI) && defined(CONFIG_PCI_QUIRKS)) #if defined(CONFIG_PCI_XGENE) || (defined(CONFIG_ACPI) && defined(CONFIG_PCI_QUIRKS))
struct xgene_pcie_port { struct xgene_pcie {
struct device_node *node; struct device_node *node;
struct device *dev; struct device *dev;
struct clk *clk; struct clk *clk;
...@@ -71,12 +71,12 @@ struct xgene_pcie_port { ...@@ -71,12 +71,12 @@ struct xgene_pcie_port {
u32 version; u32 version;
}; };
static u32 xgene_pcie_readl(struct xgene_pcie_port *port, u32 reg) static u32 xgene_pcie_readl(struct xgene_pcie *port, u32 reg)
{ {
return readl(port->csr_base + reg); return readl(port->csr_base + reg);
} }
static void xgene_pcie_writel(struct xgene_pcie_port *port, u32 reg, u32 val) static void xgene_pcie_writel(struct xgene_pcie *port, u32 reg, u32 val)
{ {
writel(val, port->csr_base + reg); writel(val, port->csr_base + reg);
} }
...@@ -86,15 +86,15 @@ static inline u32 pcie_bar_low_val(u32 addr, u32 flags) ...@@ -86,15 +86,15 @@ static inline u32 pcie_bar_low_val(u32 addr, u32 flags)
return (addr & PCI_BASE_ADDRESS_MEM_MASK) | flags; return (addr & PCI_BASE_ADDRESS_MEM_MASK) | flags;
} }
static inline struct xgene_pcie_port *pcie_bus_to_port(struct pci_bus *bus) static inline struct xgene_pcie *pcie_bus_to_port(struct pci_bus *bus)
{ {
struct pci_config_window *cfg; struct pci_config_window *cfg;
if (acpi_disabled) if (acpi_disabled)
return (struct xgene_pcie_port *)(bus->sysdata); return (struct xgene_pcie *)(bus->sysdata);
cfg = bus->sysdata; cfg = bus->sysdata;
return (struct xgene_pcie_port *)(cfg->priv); return (struct xgene_pcie *)(cfg->priv);
} }
/* /*
...@@ -103,7 +103,7 @@ static inline struct xgene_pcie_port *pcie_bus_to_port(struct pci_bus *bus) ...@@ -103,7 +103,7 @@ static inline struct xgene_pcie_port *pcie_bus_to_port(struct pci_bus *bus)
*/ */
static void __iomem *xgene_pcie_get_cfg_base(struct pci_bus *bus) static void __iomem *xgene_pcie_get_cfg_base(struct pci_bus *bus)
{ {
struct xgene_pcie_port *port = pcie_bus_to_port(bus); struct xgene_pcie *port = pcie_bus_to_port(bus);
if (bus->number >= (bus->primary + 1)) if (bus->number >= (bus->primary + 1))
return port->cfg_base + AXI_EP_CFG_ACCESS; return port->cfg_base + AXI_EP_CFG_ACCESS;
...@@ -117,7 +117,7 @@ static void __iomem *xgene_pcie_get_cfg_base(struct pci_bus *bus) ...@@ -117,7 +117,7 @@ static void __iomem *xgene_pcie_get_cfg_base(struct pci_bus *bus)
*/ */
static void xgene_pcie_set_rtdid_reg(struct pci_bus *bus, uint devfn) static void xgene_pcie_set_rtdid_reg(struct pci_bus *bus, uint devfn)
{ {
struct xgene_pcie_port *port = pcie_bus_to_port(bus); struct xgene_pcie *port = pcie_bus_to_port(bus);
unsigned int b, d, f; unsigned int b, d, f;
u32 rtdid_val = 0; u32 rtdid_val = 0;
...@@ -164,7 +164,7 @@ static void __iomem *xgene_pcie_map_bus(struct pci_bus *bus, unsigned int devfn, ...@@ -164,7 +164,7 @@ static void __iomem *xgene_pcie_map_bus(struct pci_bus *bus, unsigned int devfn,
static int xgene_pcie_config_read32(struct pci_bus *bus, unsigned int devfn, static int xgene_pcie_config_read32(struct pci_bus *bus, unsigned int devfn,
int where, int size, u32 *val) int where, int size, u32 *val)
{ {
struct xgene_pcie_port *port = pcie_bus_to_port(bus); struct xgene_pcie *port = pcie_bus_to_port(bus);
if (pci_generic_config_read32(bus, devfn, where & ~0x3, 4, val) != if (pci_generic_config_read32(bus, devfn, where & ~0x3, 4, val) !=
PCIBIOS_SUCCESSFUL) PCIBIOS_SUCCESSFUL)
...@@ -227,7 +227,7 @@ static int xgene_pcie_ecam_init(struct pci_config_window *cfg, u32 ipversion) ...@@ -227,7 +227,7 @@ static int xgene_pcie_ecam_init(struct pci_config_window *cfg, u32 ipversion)
{ {
struct device *dev = cfg->parent; struct device *dev = cfg->parent;
struct acpi_device *adev = to_acpi_device(dev); struct acpi_device *adev = to_acpi_device(dev);
struct xgene_pcie_port *port; struct xgene_pcie *port;
struct resource csr; struct resource csr;
int ret; int ret;
...@@ -281,7 +281,7 @@ const struct pci_ecam_ops xgene_v2_pcie_ecam_ops = { ...@@ -281,7 +281,7 @@ const struct pci_ecam_ops xgene_v2_pcie_ecam_ops = {
#endif #endif
#if defined(CONFIG_PCI_XGENE) #if defined(CONFIG_PCI_XGENE)
static u64 xgene_pcie_set_ib_mask(struct xgene_pcie_port *port, u32 addr, static u64 xgene_pcie_set_ib_mask(struct xgene_pcie *port, u32 addr,
u32 flags, u64 size) u32 flags, u64 size)
{ {
u64 mask = (~(size - 1) & PCI_BASE_ADDRESS_MEM_MASK) | flags; u64 mask = (~(size - 1) & PCI_BASE_ADDRESS_MEM_MASK) | flags;
...@@ -307,7 +307,7 @@ static u64 xgene_pcie_set_ib_mask(struct xgene_pcie_port *port, u32 addr, ...@@ -307,7 +307,7 @@ static u64 xgene_pcie_set_ib_mask(struct xgene_pcie_port *port, u32 addr,
return mask; return mask;
} }
static void xgene_pcie_linkup(struct xgene_pcie_port *port, static void xgene_pcie_linkup(struct xgene_pcie *port,
u32 *lanes, u32 *speed) u32 *lanes, u32 *speed)
{ {
u32 val32; u32 val32;
...@@ -322,7 +322,7 @@ static void xgene_pcie_linkup(struct xgene_pcie_port *port, ...@@ -322,7 +322,7 @@ static void xgene_pcie_linkup(struct xgene_pcie_port *port,
} }
} }
static int xgene_pcie_init_port(struct xgene_pcie_port *port) static int xgene_pcie_init_port(struct xgene_pcie *port)
{ {
struct device *dev = port->dev; struct device *dev = port->dev;
int rc; int rc;
...@@ -342,7 +342,7 @@ static int xgene_pcie_init_port(struct xgene_pcie_port *port) ...@@ -342,7 +342,7 @@ static int xgene_pcie_init_port(struct xgene_pcie_port *port)
return 0; return 0;
} }
static int xgene_pcie_map_reg(struct xgene_pcie_port *port, static int xgene_pcie_map_reg(struct xgene_pcie *port,
struct platform_device *pdev) struct platform_device *pdev)
{ {
struct device *dev = port->dev; struct device *dev = port->dev;
...@@ -362,7 +362,7 @@ static int xgene_pcie_map_reg(struct xgene_pcie_port *port, ...@@ -362,7 +362,7 @@ static int xgene_pcie_map_reg(struct xgene_pcie_port *port,
return 0; return 0;
} }
static void xgene_pcie_setup_ob_reg(struct xgene_pcie_port *port, static void xgene_pcie_setup_ob_reg(struct xgene_pcie *port,
struct resource *res, u32 offset, struct resource *res, u32 offset,
u64 cpu_addr, u64 pci_addr) u64 cpu_addr, u64 pci_addr)
{ {
...@@ -394,7 +394,7 @@ static void xgene_pcie_setup_ob_reg(struct xgene_pcie_port *port, ...@@ -394,7 +394,7 @@ static void xgene_pcie_setup_ob_reg(struct xgene_pcie_port *port,
xgene_pcie_writel(port, offset + 0x14, upper_32_bits(pci_addr)); xgene_pcie_writel(port, offset + 0x14, upper_32_bits(pci_addr));
} }
static void xgene_pcie_setup_cfg_reg(struct xgene_pcie_port *port) static void xgene_pcie_setup_cfg_reg(struct xgene_pcie *port)
{ {
u64 addr = port->cfg_addr; u64 addr = port->cfg_addr;
...@@ -403,7 +403,7 @@ static void xgene_pcie_setup_cfg_reg(struct xgene_pcie_port *port) ...@@ -403,7 +403,7 @@ static void xgene_pcie_setup_cfg_reg(struct xgene_pcie_port *port)
xgene_pcie_writel(port, CFGCTL, EN_REG); xgene_pcie_writel(port, CFGCTL, EN_REG);
} }
static int xgene_pcie_map_ranges(struct xgene_pcie_port *port) static int xgene_pcie_map_ranges(struct xgene_pcie *port)
{ {
struct pci_host_bridge *bridge = pci_host_bridge_from_priv(port); struct pci_host_bridge *bridge = pci_host_bridge_from_priv(port);
struct resource_entry *window; struct resource_entry *window;
...@@ -444,7 +444,7 @@ static int xgene_pcie_map_ranges(struct xgene_pcie_port *port) ...@@ -444,7 +444,7 @@ static int xgene_pcie_map_ranges(struct xgene_pcie_port *port)
return 0; return 0;
} }
static void xgene_pcie_setup_pims(struct xgene_pcie_port *port, u32 pim_reg, static void xgene_pcie_setup_pims(struct xgene_pcie *port, u32 pim_reg,
u64 pim, u64 size) u64 pim, u64 size)
{ {
xgene_pcie_writel(port, pim_reg, lower_32_bits(pim)); xgene_pcie_writel(port, pim_reg, lower_32_bits(pim));
...@@ -478,7 +478,7 @@ static int xgene_pcie_select_ib_reg(u8 *ib_reg_mask, u64 size) ...@@ -478,7 +478,7 @@ static int xgene_pcie_select_ib_reg(u8 *ib_reg_mask, u64 size)
return -EINVAL; return -EINVAL;
} }
static void xgene_pcie_setup_ib_reg(struct xgene_pcie_port *port, static void xgene_pcie_setup_ib_reg(struct xgene_pcie *port,
struct resource_entry *entry, struct resource_entry *entry,
u8 *ib_reg_mask) u8 *ib_reg_mask)
{ {
...@@ -529,7 +529,7 @@ static void xgene_pcie_setup_ib_reg(struct xgene_pcie_port *port, ...@@ -529,7 +529,7 @@ static void xgene_pcie_setup_ib_reg(struct xgene_pcie_port *port,
xgene_pcie_setup_pims(port, pim_reg, pci_addr, ~(size - 1)); xgene_pcie_setup_pims(port, pim_reg, pci_addr, ~(size - 1));
} }
static int xgene_pcie_parse_map_dma_ranges(struct xgene_pcie_port *port) static int xgene_pcie_parse_map_dma_ranges(struct xgene_pcie *port)
{ {
struct pci_host_bridge *bridge = pci_host_bridge_from_priv(port); struct pci_host_bridge *bridge = pci_host_bridge_from_priv(port);
struct resource_entry *entry; struct resource_entry *entry;
...@@ -542,7 +542,7 @@ static int xgene_pcie_parse_map_dma_ranges(struct xgene_pcie_port *port) ...@@ -542,7 +542,7 @@ static int xgene_pcie_parse_map_dma_ranges(struct xgene_pcie_port *port)
} }
/* clear BAR configuration which was done by firmware */ /* clear BAR configuration which was done by firmware */
static void xgene_pcie_clear_config(struct xgene_pcie_port *port) static void xgene_pcie_clear_config(struct xgene_pcie *port)
{ {
int i; int i;
...@@ -550,7 +550,7 @@ static void xgene_pcie_clear_config(struct xgene_pcie_port *port) ...@@ -550,7 +550,7 @@ static void xgene_pcie_clear_config(struct xgene_pcie_port *port)
xgene_pcie_writel(port, i, 0); xgene_pcie_writel(port, i, 0);
} }
static int xgene_pcie_setup(struct xgene_pcie_port *port) static int xgene_pcie_setup(struct xgene_pcie *port)
{ {
struct device *dev = port->dev; struct device *dev = port->dev;
u32 val, lanes = 0, speed = 0; u32 val, lanes = 0, speed = 0;
...@@ -588,7 +588,7 @@ static int xgene_pcie_probe(struct platform_device *pdev) ...@@ -588,7 +588,7 @@ static int xgene_pcie_probe(struct platform_device *pdev)
{ {
struct device *dev = &pdev->dev; struct device *dev = &pdev->dev;
struct device_node *dn = dev->of_node; struct device_node *dn = dev->of_node;
struct xgene_pcie_port *port; struct xgene_pcie *port;
struct pci_host_bridge *bridge; struct pci_host_bridge *bridge;
int ret; int ret;
......
...@@ -765,7 +765,7 @@ static int altera_pcie_probe(struct platform_device *pdev) ...@@ -765,7 +765,7 @@ static int altera_pcie_probe(struct platform_device *pdev)
struct altera_pcie *pcie; struct altera_pcie *pcie;
struct pci_host_bridge *bridge; struct pci_host_bridge *bridge;
int ret; int ret;
const struct of_device_id *match; const struct altera_pcie_data *data;
bridge = devm_pci_alloc_host_bridge(dev, sizeof(*pcie)); bridge = devm_pci_alloc_host_bridge(dev, sizeof(*pcie));
if (!bridge) if (!bridge)
...@@ -775,11 +775,11 @@ static int altera_pcie_probe(struct platform_device *pdev) ...@@ -775,11 +775,11 @@ static int altera_pcie_probe(struct platform_device *pdev)
pcie->pdev = pdev; pcie->pdev = pdev;
platform_set_drvdata(pdev, pcie); platform_set_drvdata(pdev, pcie);
match = of_match_device(altera_pcie_of_match, &pdev->dev); data = of_device_get_match_data(&pdev->dev);
if (!match) if (!data)
return -ENODEV; return -ENODEV;
pcie->pcie_data = match->data; pcie->pcie_data = data;
ret = altera_pcie_parse_dt(pcie); ret = altera_pcie_parse_dt(pcie);
if (ret) { if (ret) {
......
...@@ -23,7 +23,7 @@ static void bcma_pcie2_fixup_class(struct pci_dev *dev) ...@@ -23,7 +23,7 @@ static void bcma_pcie2_fixup_class(struct pci_dev *dev)
DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_BROADCOM, 0x8011, bcma_pcie2_fixup_class); DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_BROADCOM, 0x8011, bcma_pcie2_fixup_class);
DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_BROADCOM, 0x8012, bcma_pcie2_fixup_class); DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_BROADCOM, 0x8012, bcma_pcie2_fixup_class);
static int iproc_pcie_bcma_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) static int iproc_bcma_pcie_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
{ {
struct iproc_pcie *pcie = dev->sysdata; struct iproc_pcie *pcie = dev->sysdata;
struct bcma_device *bdev = container_of(pcie->dev, struct bcma_device, dev); struct bcma_device *bdev = container_of(pcie->dev, struct bcma_device, dev);
...@@ -31,7 +31,7 @@ static int iproc_pcie_bcma_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) ...@@ -31,7 +31,7 @@ static int iproc_pcie_bcma_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
return bcma_core_irq(bdev, 5); return bcma_core_irq(bdev, 5);
} }
static int iproc_pcie_bcma_probe(struct bcma_device *bdev) static int iproc_bcma_pcie_probe(struct bcma_device *bdev)
{ {
struct device *dev = &bdev->dev; struct device *dev = &bdev->dev;
struct iproc_pcie *pcie; struct iproc_pcie *pcie;
...@@ -64,33 +64,33 @@ static int iproc_pcie_bcma_probe(struct bcma_device *bdev) ...@@ -64,33 +64,33 @@ static int iproc_pcie_bcma_probe(struct bcma_device *bdev)
if (ret) if (ret)
return ret; return ret;
pcie->map_irq = iproc_pcie_bcma_map_irq; pcie->map_irq = iproc_bcma_pcie_map_irq;
bcma_set_drvdata(bdev, pcie); bcma_set_drvdata(bdev, pcie);
return iproc_pcie_setup(pcie, &bridge->windows); return iproc_pcie_setup(pcie, &bridge->windows);
} }
static void iproc_pcie_bcma_remove(struct bcma_device *bdev) static void iproc_bcma_pcie_remove(struct bcma_device *bdev)
{ {
struct iproc_pcie *pcie = bcma_get_drvdata(bdev); struct iproc_pcie *pcie = bcma_get_drvdata(bdev);
iproc_pcie_remove(pcie); iproc_pcie_remove(pcie);
} }
static const struct bcma_device_id iproc_pcie_bcma_table[] = { static const struct bcma_device_id iproc_bcma_pcie_table[] = {
BCMA_CORE(BCMA_MANUF_BCM, BCMA_CORE_NS_PCIEG2, BCMA_ANY_REV, BCMA_ANY_CLASS), BCMA_CORE(BCMA_MANUF_BCM, BCMA_CORE_NS_PCIEG2, BCMA_ANY_REV, BCMA_ANY_CLASS),
{}, {},
}; };
MODULE_DEVICE_TABLE(bcma, iproc_pcie_bcma_table); MODULE_DEVICE_TABLE(bcma, iproc_bcma_pcie_table);
static struct bcma_driver iproc_pcie_bcma_driver = { static struct bcma_driver iproc_bcma_pcie_driver = {
.name = KBUILD_MODNAME, .name = KBUILD_MODNAME,
.id_table = iproc_pcie_bcma_table, .id_table = iproc_bcma_pcie_table,
.probe = iproc_pcie_bcma_probe, .probe = iproc_bcma_pcie_probe,
.remove = iproc_pcie_bcma_remove, .remove = iproc_bcma_pcie_remove,
}; };
module_bcma_driver(iproc_pcie_bcma_driver); module_bcma_driver(iproc_bcma_pcie_driver);
MODULE_AUTHOR("Hauke Mehrtens"); MODULE_AUTHOR("Hauke Mehrtens");
MODULE_DESCRIPTION("Broadcom iProc PCIe BCMA driver"); MODULE_DESCRIPTION("Broadcom iProc PCIe BCMA driver");
......
...@@ -37,7 +37,7 @@ static const struct of_device_id iproc_pcie_of_match_table[] = { ...@@ -37,7 +37,7 @@ static const struct of_device_id iproc_pcie_of_match_table[] = {
}; };
MODULE_DEVICE_TABLE(of, iproc_pcie_of_match_table); MODULE_DEVICE_TABLE(of, iproc_pcie_of_match_table);
static int iproc_pcie_pltfm_probe(struct platform_device *pdev) static int iproc_pltfm_pcie_probe(struct platform_device *pdev)
{ {
struct device *dev = &pdev->dev; struct device *dev = &pdev->dev;
struct iproc_pcie *pcie; struct iproc_pcie *pcie;
...@@ -115,30 +115,30 @@ static int iproc_pcie_pltfm_probe(struct platform_device *pdev) ...@@ -115,30 +115,30 @@ static int iproc_pcie_pltfm_probe(struct platform_device *pdev)
return 0; return 0;
} }
static int iproc_pcie_pltfm_remove(struct platform_device *pdev) static int iproc_pltfm_pcie_remove(struct platform_device *pdev)
{ {
struct iproc_pcie *pcie = platform_get_drvdata(pdev); struct iproc_pcie *pcie = platform_get_drvdata(pdev);
return iproc_pcie_remove(pcie); return iproc_pcie_remove(pcie);
} }
static void iproc_pcie_pltfm_shutdown(struct platform_device *pdev) static void iproc_pltfm_pcie_shutdown(struct platform_device *pdev)
{ {
struct iproc_pcie *pcie = platform_get_drvdata(pdev); struct iproc_pcie *pcie = platform_get_drvdata(pdev);
iproc_pcie_shutdown(pcie); iproc_pcie_shutdown(pcie);
} }
static struct platform_driver iproc_pcie_pltfm_driver = { static struct platform_driver iproc_pltfm_pcie_driver = {
.driver = { .driver = {
.name = "iproc-pcie", .name = "iproc-pcie",
.of_match_table = of_match_ptr(iproc_pcie_of_match_table), .of_match_table = of_match_ptr(iproc_pcie_of_match_table),
}, },
.probe = iproc_pcie_pltfm_probe, .probe = iproc_pltfm_pcie_probe,
.remove = iproc_pcie_pltfm_remove, .remove = iproc_pltfm_pcie_remove,
.shutdown = iproc_pcie_pltfm_shutdown, .shutdown = iproc_pltfm_pcie_shutdown,
}; };
module_platform_driver(iproc_pcie_pltfm_driver); module_platform_driver(iproc_pltfm_pcie_driver);
MODULE_AUTHOR("Ray Jui <rjui@broadcom.com>"); MODULE_AUTHOR("Ray Jui <rjui@broadcom.com>");
MODULE_DESCRIPTION("Broadcom iPROC PCIe platform driver"); MODULE_DESCRIPTION("Broadcom iPROC PCIe platform driver");
......
...@@ -113,7 +113,7 @@ struct mtk_msi_set { ...@@ -113,7 +113,7 @@ struct mtk_msi_set {
}; };
/** /**
* struct mtk_pcie_port - PCIe port information * struct mtk_gen3_pcie - PCIe port information
* @dev: pointer to PCIe device * @dev: pointer to PCIe device
* @base: IO mapped register base * @base: IO mapped register base
* @reg_base: physical register base * @reg_base: physical register base
...@@ -132,7 +132,7 @@ struct mtk_msi_set { ...@@ -132,7 +132,7 @@ struct mtk_msi_set {
* @lock: lock protecting IRQ bit map * @lock: lock protecting IRQ bit map
* @msi_irq_in_use: bit map for assigned MSI IRQ * @msi_irq_in_use: bit map for assigned MSI IRQ
*/ */
struct mtk_pcie_port { struct mtk_gen3_pcie {
struct device *dev; struct device *dev;
void __iomem *base; void __iomem *base;
phys_addr_t reg_base; phys_addr_t reg_base;
...@@ -165,7 +165,7 @@ struct mtk_pcie_port { ...@@ -165,7 +165,7 @@ struct mtk_pcie_port {
static void mtk_pcie_config_tlp_header(struct pci_bus *bus, unsigned int devfn, static void mtk_pcie_config_tlp_header(struct pci_bus *bus, unsigned int devfn,
int where, int size) int where, int size)
{ {
struct mtk_pcie_port *port = bus->sysdata; struct mtk_gen3_pcie *pcie = bus->sysdata;
int bytes; int bytes;
u32 val; u32 val;
...@@ -174,15 +174,15 @@ static void mtk_pcie_config_tlp_header(struct pci_bus *bus, unsigned int devfn, ...@@ -174,15 +174,15 @@ static void mtk_pcie_config_tlp_header(struct pci_bus *bus, unsigned int devfn,
val = PCIE_CFG_FORCE_BYTE_EN | PCIE_CFG_BYTE_EN(bytes) | val = PCIE_CFG_FORCE_BYTE_EN | PCIE_CFG_BYTE_EN(bytes) |
PCIE_CFG_HEADER(bus->number, devfn); PCIE_CFG_HEADER(bus->number, devfn);
writel_relaxed(val, port->base + PCIE_CFGNUM_REG); writel_relaxed(val, pcie->base + PCIE_CFGNUM_REG);
} }
static void __iomem *mtk_pcie_map_bus(struct pci_bus *bus, unsigned int devfn, static void __iomem *mtk_pcie_map_bus(struct pci_bus *bus, unsigned int devfn,
int where) int where)
{ {
struct mtk_pcie_port *port = bus->sysdata; struct mtk_gen3_pcie *pcie = bus->sysdata;
return port->base + PCIE_CFG_OFFSET_ADDR + where; return pcie->base + PCIE_CFG_OFFSET_ADDR + where;
} }
static int mtk_pcie_config_read(struct pci_bus *bus, unsigned int devfn, static int mtk_pcie_config_read(struct pci_bus *bus, unsigned int devfn,
...@@ -210,7 +210,7 @@ static struct pci_ops mtk_pcie_ops = { ...@@ -210,7 +210,7 @@ static struct pci_ops mtk_pcie_ops = {
.write = mtk_pcie_config_write, .write = mtk_pcie_config_write,
}; };
static int mtk_pcie_set_trans_table(struct mtk_pcie_port *port, static int mtk_pcie_set_trans_table(struct mtk_gen3_pcie *pcie,
resource_size_t cpu_addr, resource_size_t cpu_addr,
resource_size_t pci_addr, resource_size_t pci_addr,
resource_size_t size, resource_size_t size,
...@@ -220,12 +220,12 @@ static int mtk_pcie_set_trans_table(struct mtk_pcie_port *port, ...@@ -220,12 +220,12 @@ static int mtk_pcie_set_trans_table(struct mtk_pcie_port *port,
u32 val; u32 val;
if (num >= PCIE_MAX_TRANS_TABLES) { if (num >= PCIE_MAX_TRANS_TABLES) {
dev_err(port->dev, "not enough translate table for addr: %#llx, limited to [%d]\n", dev_err(pcie->dev, "not enough translate table for addr: %#llx, limited to [%d]\n",
(unsigned long long)cpu_addr, PCIE_MAX_TRANS_TABLES); (unsigned long long)cpu_addr, PCIE_MAX_TRANS_TABLES);
return -ENODEV; return -ENODEV;
} }
table = port->base + PCIE_TRANS_TABLE_BASE_REG + table = pcie->base + PCIE_TRANS_TABLE_BASE_REG +
num * PCIE_ATR_TLB_SET_OFFSET; num * PCIE_ATR_TLB_SET_OFFSET;
writel_relaxed(lower_32_bits(cpu_addr) | PCIE_ATR_SIZE(fls(size) - 1), writel_relaxed(lower_32_bits(cpu_addr) | PCIE_ATR_SIZE(fls(size) - 1),
...@@ -247,68 +247,68 @@ static int mtk_pcie_set_trans_table(struct mtk_pcie_port *port, ...@@ -247,68 +247,68 @@ static int mtk_pcie_set_trans_table(struct mtk_pcie_port *port,
return 0; return 0;
} }
static void mtk_pcie_enable_msi(struct mtk_pcie_port *port) static void mtk_pcie_enable_msi(struct mtk_gen3_pcie *pcie)
{ {
int i; int i;
u32 val; u32 val;
for (i = 0; i < PCIE_MSI_SET_NUM; i++) { for (i = 0; i < PCIE_MSI_SET_NUM; i++) {
struct mtk_msi_set *msi_set = &port->msi_sets[i]; struct mtk_msi_set *msi_set = &pcie->msi_sets[i];
msi_set->base = port->base + PCIE_MSI_SET_BASE_REG + msi_set->base = pcie->base + PCIE_MSI_SET_BASE_REG +
i * PCIE_MSI_SET_OFFSET; i * PCIE_MSI_SET_OFFSET;
msi_set->msg_addr = port->reg_base + PCIE_MSI_SET_BASE_REG + msi_set->msg_addr = pcie->reg_base + PCIE_MSI_SET_BASE_REG +
i * PCIE_MSI_SET_OFFSET; i * PCIE_MSI_SET_OFFSET;
/* Configure the MSI capture address */ /* Configure the MSI capture address */
writel_relaxed(lower_32_bits(msi_set->msg_addr), msi_set->base); writel_relaxed(lower_32_bits(msi_set->msg_addr), msi_set->base);
writel_relaxed(upper_32_bits(msi_set->msg_addr), writel_relaxed(upper_32_bits(msi_set->msg_addr),
port->base + PCIE_MSI_SET_ADDR_HI_BASE + pcie->base + PCIE_MSI_SET_ADDR_HI_BASE +
i * PCIE_MSI_SET_ADDR_HI_OFFSET); i * PCIE_MSI_SET_ADDR_HI_OFFSET);
} }
val = readl_relaxed(port->base + PCIE_MSI_SET_ENABLE_REG); val = readl_relaxed(pcie->base + PCIE_MSI_SET_ENABLE_REG);
val |= PCIE_MSI_SET_ENABLE; val |= PCIE_MSI_SET_ENABLE;
writel_relaxed(val, port->base + PCIE_MSI_SET_ENABLE_REG); writel_relaxed(val, pcie->base + PCIE_MSI_SET_ENABLE_REG);
val = readl_relaxed(port->base + PCIE_INT_ENABLE_REG); val = readl_relaxed(pcie->base + PCIE_INT_ENABLE_REG);
val |= PCIE_MSI_ENABLE; val |= PCIE_MSI_ENABLE;
writel_relaxed(val, port->base + PCIE_INT_ENABLE_REG); writel_relaxed(val, pcie->base + PCIE_INT_ENABLE_REG);
} }
static int mtk_pcie_startup_port(struct mtk_pcie_port *port) static int mtk_pcie_startup_port(struct mtk_gen3_pcie *pcie)
{ {
struct resource_entry *entry; struct resource_entry *entry;
struct pci_host_bridge *host = pci_host_bridge_from_priv(port); struct pci_host_bridge *host = pci_host_bridge_from_priv(pcie);
unsigned int table_index = 0; unsigned int table_index = 0;
int err; int err;
u32 val; u32 val;
/* Set as RC mode */ /* Set as RC mode */
val = readl_relaxed(port->base + PCIE_SETTING_REG); val = readl_relaxed(pcie->base + PCIE_SETTING_REG);
val |= PCIE_RC_MODE; val |= PCIE_RC_MODE;
writel_relaxed(val, port->base + PCIE_SETTING_REG); writel_relaxed(val, pcie->base + PCIE_SETTING_REG);
/* Set class code */ /* Set class code */
val = readl_relaxed(port->base + PCIE_PCI_IDS_1); val = readl_relaxed(pcie->base + PCIE_PCI_IDS_1);
val &= ~GENMASK(31, 8); val &= ~GENMASK(31, 8);
val |= PCI_CLASS(PCI_CLASS_BRIDGE_PCI << 8); val |= PCI_CLASS(PCI_CLASS_BRIDGE_PCI << 8);
writel_relaxed(val, port->base + PCIE_PCI_IDS_1); writel_relaxed(val, pcie->base + PCIE_PCI_IDS_1);
/* Mask all INTx interrupts */ /* Mask all INTx interrupts */
val = readl_relaxed(port->base + PCIE_INT_ENABLE_REG); val = readl_relaxed(pcie->base + PCIE_INT_ENABLE_REG);
val &= ~PCIE_INTX_ENABLE; val &= ~PCIE_INTX_ENABLE;
writel_relaxed(val, port->base + PCIE_INT_ENABLE_REG); writel_relaxed(val, pcie->base + PCIE_INT_ENABLE_REG);
/* Disable DVFSRC voltage request */ /* Disable DVFSRC voltage request */
val = readl_relaxed(port->base + PCIE_MISC_CTRL_REG); val = readl_relaxed(pcie->base + PCIE_MISC_CTRL_REG);
val |= PCIE_DISABLE_DVFSRC_VLT_REQ; val |= PCIE_DISABLE_DVFSRC_VLT_REQ;
writel_relaxed(val, port->base + PCIE_MISC_CTRL_REG); writel_relaxed(val, pcie->base + PCIE_MISC_CTRL_REG);
/* Assert all reset signals */ /* Assert all reset signals */
val = readl_relaxed(port->base + PCIE_RST_CTRL_REG); val = readl_relaxed(pcie->base + PCIE_RST_CTRL_REG);
val |= PCIE_MAC_RSTB | PCIE_PHY_RSTB | PCIE_BRG_RSTB | PCIE_PE_RSTB; val |= PCIE_MAC_RSTB | PCIE_PHY_RSTB | PCIE_BRG_RSTB | PCIE_PE_RSTB;
writel_relaxed(val, port->base + PCIE_RST_CTRL_REG); writel_relaxed(val, pcie->base + PCIE_RST_CTRL_REG);
/* /*
* Described in PCIe CEM specification sections 2.2 (PERST# Signal) * Described in PCIe CEM specification sections 2.2 (PERST# Signal)
...@@ -320,19 +320,19 @@ static int mtk_pcie_startup_port(struct mtk_pcie_port *port) ...@@ -320,19 +320,19 @@ static int mtk_pcie_startup_port(struct mtk_pcie_port *port)
/* De-assert reset signals */ /* De-assert reset signals */
val &= ~(PCIE_MAC_RSTB | PCIE_PHY_RSTB | PCIE_BRG_RSTB | PCIE_PE_RSTB); val &= ~(PCIE_MAC_RSTB | PCIE_PHY_RSTB | PCIE_BRG_RSTB | PCIE_PE_RSTB);
writel_relaxed(val, port->base + PCIE_RST_CTRL_REG); writel_relaxed(val, pcie->base + PCIE_RST_CTRL_REG);
/* Check if the link is up or not */ /* Check if the link is up or not */
err = readl_poll_timeout(port->base + PCIE_LINK_STATUS_REG, val, err = readl_poll_timeout(pcie->base + PCIE_LINK_STATUS_REG, val,
!!(val & PCIE_PORT_LINKUP), 20, !!(val & PCIE_PORT_LINKUP), 20,
PCI_PM_D3COLD_WAIT * USEC_PER_MSEC); PCI_PM_D3COLD_WAIT * USEC_PER_MSEC);
if (err) { if (err) {
val = readl_relaxed(port->base + PCIE_LTSSM_STATUS_REG); val = readl_relaxed(pcie->base + PCIE_LTSSM_STATUS_REG);
dev_err(port->dev, "PCIe link down, ltssm reg val: %#x\n", val); dev_err(pcie->dev, "PCIe link down, ltssm reg val: %#x\n", val);
return err; return err;
} }
mtk_pcie_enable_msi(port); mtk_pcie_enable_msi(pcie);
/* Set PCIe translation windows */ /* Set PCIe translation windows */
resource_list_for_each_entry(entry, &host->windows) { resource_list_for_each_entry(entry, &host->windows) {
...@@ -355,12 +355,12 @@ static int mtk_pcie_startup_port(struct mtk_pcie_port *port) ...@@ -355,12 +355,12 @@ static int mtk_pcie_startup_port(struct mtk_pcie_port *port)
pci_addr = res->start - entry->offset; pci_addr = res->start - entry->offset;
size = resource_size(res); size = resource_size(res);
err = mtk_pcie_set_trans_table(port, cpu_addr, pci_addr, size, err = mtk_pcie_set_trans_table(pcie, cpu_addr, pci_addr, size,
type, table_index); type, table_index);
if (err) if (err)
return err; return err;
dev_dbg(port->dev, "set %s trans window[%d]: cpu_addr = %#llx, pci_addr = %#llx, size = %#llx\n", dev_dbg(pcie->dev, "set %s trans window[%d]: cpu_addr = %#llx, pci_addr = %#llx, size = %#llx\n",
range_type, table_index, (unsigned long long)cpu_addr, range_type, table_index, (unsigned long long)cpu_addr,
(unsigned long long)pci_addr, (unsigned long long)size); (unsigned long long)pci_addr, (unsigned long long)size);
...@@ -404,7 +404,7 @@ static struct msi_domain_info mtk_msi_domain_info = { ...@@ -404,7 +404,7 @@ static struct msi_domain_info mtk_msi_domain_info = {
static void mtk_compose_msi_msg(struct irq_data *data, struct msi_msg *msg) static void mtk_compose_msi_msg(struct irq_data *data, struct msi_msg *msg)
{ {
struct mtk_msi_set *msi_set = irq_data_get_irq_chip_data(data); struct mtk_msi_set *msi_set = irq_data_get_irq_chip_data(data);
struct mtk_pcie_port *port = data->domain->host_data; struct mtk_gen3_pcie *pcie = data->domain->host_data;
unsigned long hwirq; unsigned long hwirq;
hwirq = data->hwirq % PCIE_MSI_IRQS_PER_SET; hwirq = data->hwirq % PCIE_MSI_IRQS_PER_SET;
...@@ -412,7 +412,7 @@ static void mtk_compose_msi_msg(struct irq_data *data, struct msi_msg *msg) ...@@ -412,7 +412,7 @@ static void mtk_compose_msi_msg(struct irq_data *data, struct msi_msg *msg)
msg->address_hi = upper_32_bits(msi_set->msg_addr); msg->address_hi = upper_32_bits(msi_set->msg_addr);
msg->address_lo = lower_32_bits(msi_set->msg_addr); msg->address_lo = lower_32_bits(msi_set->msg_addr);
msg->data = hwirq; msg->data = hwirq;
dev_dbg(port->dev, "msi#%#lx address_hi %#x address_lo %#x data %d\n", dev_dbg(pcie->dev, "msi#%#lx address_hi %#x address_lo %#x data %d\n",
hwirq, msg->address_hi, msg->address_lo, msg->data); hwirq, msg->address_hi, msg->address_lo, msg->data);
} }
...@@ -429,33 +429,33 @@ static void mtk_msi_bottom_irq_ack(struct irq_data *data) ...@@ -429,33 +429,33 @@ static void mtk_msi_bottom_irq_ack(struct irq_data *data)
static void mtk_msi_bottom_irq_mask(struct irq_data *data) static void mtk_msi_bottom_irq_mask(struct irq_data *data)
{ {
struct mtk_msi_set *msi_set = irq_data_get_irq_chip_data(data); struct mtk_msi_set *msi_set = irq_data_get_irq_chip_data(data);
struct mtk_pcie_port *port = data->domain->host_data; struct mtk_gen3_pcie *pcie = data->domain->host_data;
unsigned long hwirq, flags; unsigned long hwirq, flags;
u32 val; u32 val;
hwirq = data->hwirq % PCIE_MSI_IRQS_PER_SET; hwirq = data->hwirq % PCIE_MSI_IRQS_PER_SET;
raw_spin_lock_irqsave(&port->irq_lock, flags); raw_spin_lock_irqsave(&pcie->irq_lock, flags);
val = readl_relaxed(msi_set->base + PCIE_MSI_SET_ENABLE_OFFSET); val = readl_relaxed(msi_set->base + PCIE_MSI_SET_ENABLE_OFFSET);
val &= ~BIT(hwirq); val &= ~BIT(hwirq);
writel_relaxed(val, msi_set->base + PCIE_MSI_SET_ENABLE_OFFSET); writel_relaxed(val, msi_set->base + PCIE_MSI_SET_ENABLE_OFFSET);
raw_spin_unlock_irqrestore(&port->irq_lock, flags); raw_spin_unlock_irqrestore(&pcie->irq_lock, flags);
} }
static void mtk_msi_bottom_irq_unmask(struct irq_data *data) static void mtk_msi_bottom_irq_unmask(struct irq_data *data)
{ {
struct mtk_msi_set *msi_set = irq_data_get_irq_chip_data(data); struct mtk_msi_set *msi_set = irq_data_get_irq_chip_data(data);
struct mtk_pcie_port *port = data->domain->host_data; struct mtk_gen3_pcie *pcie = data->domain->host_data;
unsigned long hwirq, flags; unsigned long hwirq, flags;
u32 val; u32 val;
hwirq = data->hwirq % PCIE_MSI_IRQS_PER_SET; hwirq = data->hwirq % PCIE_MSI_IRQS_PER_SET;
raw_spin_lock_irqsave(&port->irq_lock, flags); raw_spin_lock_irqsave(&pcie->irq_lock, flags);
val = readl_relaxed(msi_set->base + PCIE_MSI_SET_ENABLE_OFFSET); val = readl_relaxed(msi_set->base + PCIE_MSI_SET_ENABLE_OFFSET);
val |= BIT(hwirq); val |= BIT(hwirq);
writel_relaxed(val, msi_set->base + PCIE_MSI_SET_ENABLE_OFFSET); writel_relaxed(val, msi_set->base + PCIE_MSI_SET_ENABLE_OFFSET);
raw_spin_unlock_irqrestore(&port->irq_lock, flags); raw_spin_unlock_irqrestore(&pcie->irq_lock, flags);
} }
static struct irq_chip mtk_msi_bottom_irq_chip = { static struct irq_chip mtk_msi_bottom_irq_chip = {
...@@ -471,22 +471,22 @@ static int mtk_msi_bottom_domain_alloc(struct irq_domain *domain, ...@@ -471,22 +471,22 @@ static int mtk_msi_bottom_domain_alloc(struct irq_domain *domain,
unsigned int virq, unsigned int nr_irqs, unsigned int virq, unsigned int nr_irqs,
void *arg) void *arg)
{ {
struct mtk_pcie_port *port = domain->host_data; struct mtk_gen3_pcie *pcie = domain->host_data;
struct mtk_msi_set *msi_set; struct mtk_msi_set *msi_set;
int i, hwirq, set_idx; int i, hwirq, set_idx;
mutex_lock(&port->lock); mutex_lock(&pcie->lock);
hwirq = bitmap_find_free_region(port->msi_irq_in_use, PCIE_MSI_IRQS_NUM, hwirq = bitmap_find_free_region(pcie->msi_irq_in_use, PCIE_MSI_IRQS_NUM,
order_base_2(nr_irqs)); order_base_2(nr_irqs));
mutex_unlock(&port->lock); mutex_unlock(&pcie->lock);
if (hwirq < 0) if (hwirq < 0)
return -ENOSPC; return -ENOSPC;
set_idx = hwirq / PCIE_MSI_IRQS_PER_SET; set_idx = hwirq / PCIE_MSI_IRQS_PER_SET;
msi_set = &port->msi_sets[set_idx]; msi_set = &pcie->msi_sets[set_idx];
for (i = 0; i < nr_irqs; i++) for (i = 0; i < nr_irqs; i++)
irq_domain_set_info(domain, virq + i, hwirq + i, irq_domain_set_info(domain, virq + i, hwirq + i,
...@@ -499,15 +499,15 @@ static int mtk_msi_bottom_domain_alloc(struct irq_domain *domain, ...@@ -499,15 +499,15 @@ static int mtk_msi_bottom_domain_alloc(struct irq_domain *domain,
static void mtk_msi_bottom_domain_free(struct irq_domain *domain, static void mtk_msi_bottom_domain_free(struct irq_domain *domain,
unsigned int virq, unsigned int nr_irqs) unsigned int virq, unsigned int nr_irqs)
{ {
struct mtk_pcie_port *port = domain->host_data; struct mtk_gen3_pcie *pcie = domain->host_data;
struct irq_data *data = irq_domain_get_irq_data(domain, virq); struct irq_data *data = irq_domain_get_irq_data(domain, virq);
mutex_lock(&port->lock); mutex_lock(&pcie->lock);
bitmap_release_region(port->msi_irq_in_use, data->hwirq, bitmap_release_region(pcie->msi_irq_in_use, data->hwirq,
order_base_2(nr_irqs)); order_base_2(nr_irqs));
mutex_unlock(&port->lock); mutex_unlock(&pcie->lock);
irq_domain_free_irqs_common(domain, virq, nr_irqs); irq_domain_free_irqs_common(domain, virq, nr_irqs);
} }
...@@ -519,28 +519,28 @@ static const struct irq_domain_ops mtk_msi_bottom_domain_ops = { ...@@ -519,28 +519,28 @@ static const struct irq_domain_ops mtk_msi_bottom_domain_ops = {
static void mtk_intx_mask(struct irq_data *data) static void mtk_intx_mask(struct irq_data *data)
{ {
struct mtk_pcie_port *port = irq_data_get_irq_chip_data(data); struct mtk_gen3_pcie *pcie = irq_data_get_irq_chip_data(data);
unsigned long flags; unsigned long flags;
u32 val; u32 val;
raw_spin_lock_irqsave(&port->irq_lock, flags); raw_spin_lock_irqsave(&pcie->irq_lock, flags);
val = readl_relaxed(port->base + PCIE_INT_ENABLE_REG); val = readl_relaxed(pcie->base + PCIE_INT_ENABLE_REG);
val &= ~BIT(data->hwirq + PCIE_INTX_SHIFT); val &= ~BIT(data->hwirq + PCIE_INTX_SHIFT);
writel_relaxed(val, port->base + PCIE_INT_ENABLE_REG); writel_relaxed(val, pcie->base + PCIE_INT_ENABLE_REG);
raw_spin_unlock_irqrestore(&port->irq_lock, flags); raw_spin_unlock_irqrestore(&pcie->irq_lock, flags);
} }
static void mtk_intx_unmask(struct irq_data *data) static void mtk_intx_unmask(struct irq_data *data)
{ {
struct mtk_pcie_port *port = irq_data_get_irq_chip_data(data); struct mtk_gen3_pcie *pcie = irq_data_get_irq_chip_data(data);
unsigned long flags; unsigned long flags;
u32 val; u32 val;
raw_spin_lock_irqsave(&port->irq_lock, flags); raw_spin_lock_irqsave(&pcie->irq_lock, flags);
val = readl_relaxed(port->base + PCIE_INT_ENABLE_REG); val = readl_relaxed(pcie->base + PCIE_INT_ENABLE_REG);
val |= BIT(data->hwirq + PCIE_INTX_SHIFT); val |= BIT(data->hwirq + PCIE_INTX_SHIFT);
writel_relaxed(val, port->base + PCIE_INT_ENABLE_REG); writel_relaxed(val, pcie->base + PCIE_INT_ENABLE_REG);
raw_spin_unlock_irqrestore(&port->irq_lock, flags); raw_spin_unlock_irqrestore(&pcie->irq_lock, flags);
} }
/** /**
...@@ -553,11 +553,11 @@ static void mtk_intx_unmask(struct irq_data *data) ...@@ -553,11 +553,11 @@ static void mtk_intx_unmask(struct irq_data *data)
*/ */
static void mtk_intx_eoi(struct irq_data *data) static void mtk_intx_eoi(struct irq_data *data)
{ {
struct mtk_pcie_port *port = irq_data_get_irq_chip_data(data); struct mtk_gen3_pcie *pcie = irq_data_get_irq_chip_data(data);
unsigned long hwirq; unsigned long hwirq;
hwirq = data->hwirq + PCIE_INTX_SHIFT; hwirq = data->hwirq + PCIE_INTX_SHIFT;
writel_relaxed(BIT(hwirq), port->base + PCIE_INT_STATUS_REG); writel_relaxed(BIT(hwirq), pcie->base + PCIE_INT_STATUS_REG);
} }
static struct irq_chip mtk_intx_irq_chip = { static struct irq_chip mtk_intx_irq_chip = {
...@@ -581,13 +581,13 @@ static const struct irq_domain_ops intx_domain_ops = { ...@@ -581,13 +581,13 @@ static const struct irq_domain_ops intx_domain_ops = {
.map = mtk_pcie_intx_map, .map = mtk_pcie_intx_map,
}; };
static int mtk_pcie_init_irq_domains(struct mtk_pcie_port *port) static int mtk_pcie_init_irq_domains(struct mtk_gen3_pcie *pcie)
{ {
struct device *dev = port->dev; struct device *dev = pcie->dev;
struct device_node *intc_node, *node = dev->of_node; struct device_node *intc_node, *node = dev->of_node;
int ret; int ret;
raw_spin_lock_init(&port->irq_lock); raw_spin_lock_init(&pcie->irq_lock);
/* Setup INTx */ /* Setup INTx */
intc_node = of_get_child_by_name(node, "interrupt-controller"); intc_node = of_get_child_by_name(node, "interrupt-controller");
...@@ -596,28 +596,28 @@ static int mtk_pcie_init_irq_domains(struct mtk_pcie_port *port) ...@@ -596,28 +596,28 @@ static int mtk_pcie_init_irq_domains(struct mtk_pcie_port *port)
return -ENODEV; return -ENODEV;
} }
port->intx_domain = irq_domain_add_linear(intc_node, PCI_NUM_INTX, pcie->intx_domain = irq_domain_add_linear(intc_node, PCI_NUM_INTX,
&intx_domain_ops, port); &intx_domain_ops, pcie);
if (!port->intx_domain) { if (!pcie->intx_domain) {
dev_err(dev, "failed to create INTx IRQ domain\n"); dev_err(dev, "failed to create INTx IRQ domain\n");
return -ENODEV; return -ENODEV;
} }
/* Setup MSI */ /* Setup MSI */
mutex_init(&port->lock); mutex_init(&pcie->lock);
port->msi_bottom_domain = irq_domain_add_linear(node, PCIE_MSI_IRQS_NUM, pcie->msi_bottom_domain = irq_domain_add_linear(node, PCIE_MSI_IRQS_NUM,
&mtk_msi_bottom_domain_ops, port); &mtk_msi_bottom_domain_ops, pcie);
if (!port->msi_bottom_domain) { if (!pcie->msi_bottom_domain) {
dev_err(dev, "failed to create MSI bottom domain\n"); dev_err(dev, "failed to create MSI bottom domain\n");
ret = -ENODEV; ret = -ENODEV;
goto err_msi_bottom_domain; goto err_msi_bottom_domain;
} }
port->msi_domain = pci_msi_create_irq_domain(dev->fwnode, pcie->msi_domain = pci_msi_create_irq_domain(dev->fwnode,
&mtk_msi_domain_info, &mtk_msi_domain_info,
port->msi_bottom_domain); pcie->msi_bottom_domain);
if (!port->msi_domain) { if (!pcie->msi_domain) {
dev_err(dev, "failed to create MSI domain\n"); dev_err(dev, "failed to create MSI domain\n");
ret = -ENODEV; ret = -ENODEV;
goto err_msi_domain; goto err_msi_domain;
...@@ -626,32 +626,32 @@ static int mtk_pcie_init_irq_domains(struct mtk_pcie_port *port) ...@@ -626,32 +626,32 @@ static int mtk_pcie_init_irq_domains(struct mtk_pcie_port *port)
return 0; return 0;
err_msi_domain: err_msi_domain:
irq_domain_remove(port->msi_bottom_domain); irq_domain_remove(pcie->msi_bottom_domain);
err_msi_bottom_domain: err_msi_bottom_domain:
irq_domain_remove(port->intx_domain); irq_domain_remove(pcie->intx_domain);
return ret; return ret;
} }
static void mtk_pcie_irq_teardown(struct mtk_pcie_port *port) static void mtk_pcie_irq_teardown(struct mtk_gen3_pcie *pcie)
{ {
irq_set_chained_handler_and_data(port->irq, NULL, NULL); irq_set_chained_handler_and_data(pcie->irq, NULL, NULL);
if (port->intx_domain) if (pcie->intx_domain)
irq_domain_remove(port->intx_domain); irq_domain_remove(pcie->intx_domain);
if (port->msi_domain) if (pcie->msi_domain)
irq_domain_remove(port->msi_domain); irq_domain_remove(pcie->msi_domain);
if (port->msi_bottom_domain) if (pcie->msi_bottom_domain)
irq_domain_remove(port->msi_bottom_domain); irq_domain_remove(pcie->msi_bottom_domain);
irq_dispose_mapping(port->irq); irq_dispose_mapping(pcie->irq);
} }
static void mtk_pcie_msi_handler(struct mtk_pcie_port *port, int set_idx) static void mtk_pcie_msi_handler(struct mtk_gen3_pcie *pcie, int set_idx)
{ {
struct mtk_msi_set *msi_set = &port->msi_sets[set_idx]; struct mtk_msi_set *msi_set = &pcie->msi_sets[set_idx];
unsigned long msi_enable, msi_status; unsigned long msi_enable, msi_status;
irq_hw_number_t bit, hwirq; irq_hw_number_t bit, hwirq;
...@@ -666,59 +666,59 @@ static void mtk_pcie_msi_handler(struct mtk_pcie_port *port, int set_idx) ...@@ -666,59 +666,59 @@ static void mtk_pcie_msi_handler(struct mtk_pcie_port *port, int set_idx)
for_each_set_bit(bit, &msi_status, PCIE_MSI_IRQS_PER_SET) { for_each_set_bit(bit, &msi_status, PCIE_MSI_IRQS_PER_SET) {
hwirq = bit + set_idx * PCIE_MSI_IRQS_PER_SET; hwirq = bit + set_idx * PCIE_MSI_IRQS_PER_SET;
generic_handle_domain_irq(port->msi_bottom_domain, hwirq); generic_handle_domain_irq(pcie->msi_bottom_domain, hwirq);
} }
} while (true); } while (true);
} }
static void mtk_pcie_irq_handler(struct irq_desc *desc) static void mtk_pcie_irq_handler(struct irq_desc *desc)
{ {
struct mtk_pcie_port *port = irq_desc_get_handler_data(desc); struct mtk_gen3_pcie *pcie = irq_desc_get_handler_data(desc);
struct irq_chip *irqchip = irq_desc_get_chip(desc); struct irq_chip *irqchip = irq_desc_get_chip(desc);
unsigned long status; unsigned long status;
irq_hw_number_t irq_bit = PCIE_INTX_SHIFT; irq_hw_number_t irq_bit = PCIE_INTX_SHIFT;
chained_irq_enter(irqchip, desc); chained_irq_enter(irqchip, desc);
status = readl_relaxed(port->base + PCIE_INT_STATUS_REG); status = readl_relaxed(pcie->base + PCIE_INT_STATUS_REG);
for_each_set_bit_from(irq_bit, &status, PCI_NUM_INTX + for_each_set_bit_from(irq_bit, &status, PCI_NUM_INTX +
PCIE_INTX_SHIFT) PCIE_INTX_SHIFT)
generic_handle_domain_irq(port->intx_domain, generic_handle_domain_irq(pcie->intx_domain,
irq_bit - PCIE_INTX_SHIFT); irq_bit - PCIE_INTX_SHIFT);
irq_bit = PCIE_MSI_SHIFT; irq_bit = PCIE_MSI_SHIFT;
for_each_set_bit_from(irq_bit, &status, PCIE_MSI_SET_NUM + for_each_set_bit_from(irq_bit, &status, PCIE_MSI_SET_NUM +
PCIE_MSI_SHIFT) { PCIE_MSI_SHIFT) {
mtk_pcie_msi_handler(port, irq_bit - PCIE_MSI_SHIFT); mtk_pcie_msi_handler(pcie, irq_bit - PCIE_MSI_SHIFT);
writel_relaxed(BIT(irq_bit), port->base + PCIE_INT_STATUS_REG); writel_relaxed(BIT(irq_bit), pcie->base + PCIE_INT_STATUS_REG);
} }
chained_irq_exit(irqchip, desc); chained_irq_exit(irqchip, desc);
} }
static int mtk_pcie_setup_irq(struct mtk_pcie_port *port) static int mtk_pcie_setup_irq(struct mtk_gen3_pcie *pcie)
{ {
struct device *dev = port->dev; struct device *dev = pcie->dev;
struct platform_device *pdev = to_platform_device(dev); struct platform_device *pdev = to_platform_device(dev);
int err; int err;
err = mtk_pcie_init_irq_domains(port); err = mtk_pcie_init_irq_domains(pcie);
if (err) if (err)
return err; return err;
port->irq = platform_get_irq(pdev, 0); pcie->irq = platform_get_irq(pdev, 0);
if (port->irq < 0) if (pcie->irq < 0)
return port->irq; return pcie->irq;
irq_set_chained_handler_and_data(port->irq, mtk_pcie_irq_handler, port); irq_set_chained_handler_and_data(pcie->irq, mtk_pcie_irq_handler, pcie);
return 0; return 0;
} }
static int mtk_pcie_parse_port(struct mtk_pcie_port *port) static int mtk_pcie_parse_port(struct mtk_gen3_pcie *pcie)
{ {
struct device *dev = port->dev; struct device *dev = pcie->dev;
struct platform_device *pdev = to_platform_device(dev); struct platform_device *pdev = to_platform_device(dev);
struct resource *regs; struct resource *regs;
int ret; int ret;
...@@ -726,77 +726,77 @@ static int mtk_pcie_parse_port(struct mtk_pcie_port *port) ...@@ -726,77 +726,77 @@ static int mtk_pcie_parse_port(struct mtk_pcie_port *port)
regs = platform_get_resource_byname(pdev, IORESOURCE_MEM, "pcie-mac"); regs = platform_get_resource_byname(pdev, IORESOURCE_MEM, "pcie-mac");
if (!regs) if (!regs)
return -EINVAL; return -EINVAL;
port->base = devm_ioremap_resource(dev, regs); pcie->base = devm_ioremap_resource(dev, regs);
if (IS_ERR(port->base)) { if (IS_ERR(pcie->base)) {
dev_err(dev, "failed to map register base\n"); dev_err(dev, "failed to map register base\n");
return PTR_ERR(port->base); return PTR_ERR(pcie->base);
} }
port->reg_base = regs->start; pcie->reg_base = regs->start;
port->phy_reset = devm_reset_control_get_optional_exclusive(dev, "phy"); pcie->phy_reset = devm_reset_control_get_optional_exclusive(dev, "phy");
if (IS_ERR(port->phy_reset)) { if (IS_ERR(pcie->phy_reset)) {
ret = PTR_ERR(port->phy_reset); ret = PTR_ERR(pcie->phy_reset);
if (ret != -EPROBE_DEFER) if (ret != -EPROBE_DEFER)
dev_err(dev, "failed to get PHY reset\n"); dev_err(dev, "failed to get PHY reset\n");
return ret; return ret;
} }
port->mac_reset = devm_reset_control_get_optional_exclusive(dev, "mac"); pcie->mac_reset = devm_reset_control_get_optional_exclusive(dev, "mac");
if (IS_ERR(port->mac_reset)) { if (IS_ERR(pcie->mac_reset)) {
ret = PTR_ERR(port->mac_reset); ret = PTR_ERR(pcie->mac_reset);
if (ret != -EPROBE_DEFER) if (ret != -EPROBE_DEFER)
dev_err(dev, "failed to get MAC reset\n"); dev_err(dev, "failed to get MAC reset\n");
return ret; return ret;
} }
port->phy = devm_phy_optional_get(dev, "pcie-phy"); pcie->phy = devm_phy_optional_get(dev, "pcie-phy");
if (IS_ERR(port->phy)) { if (IS_ERR(pcie->phy)) {
ret = PTR_ERR(port->phy); ret = PTR_ERR(pcie->phy);
if (ret != -EPROBE_DEFER) if (ret != -EPROBE_DEFER)
dev_err(dev, "failed to get PHY\n"); dev_err(dev, "failed to get PHY\n");
return ret; return ret;
} }
port->num_clks = devm_clk_bulk_get_all(dev, &port->clks); pcie->num_clks = devm_clk_bulk_get_all(dev, &pcie->clks);
if (port->num_clks < 0) { if (pcie->num_clks < 0) {
dev_err(dev, "failed to get clocks\n"); dev_err(dev, "failed to get clocks\n");
return port->num_clks; return pcie->num_clks;
} }
return 0; return 0;
} }
static int mtk_pcie_power_up(struct mtk_pcie_port *port) static int mtk_pcie_power_up(struct mtk_gen3_pcie *pcie)
{ {
struct device *dev = port->dev; struct device *dev = pcie->dev;
int err; int err;
/* PHY power on and enable pipe clock */ /* PHY power on and enable pipe clock */
reset_control_deassert(port->phy_reset); reset_control_deassert(pcie->phy_reset);
err = phy_init(port->phy); err = phy_init(pcie->phy);
if (err) { if (err) {
dev_err(dev, "failed to initialize PHY\n"); dev_err(dev, "failed to initialize PHY\n");
goto err_phy_init; goto err_phy_init;
} }
err = phy_power_on(port->phy); err = phy_power_on(pcie->phy);
if (err) { if (err) {
dev_err(dev, "failed to power on PHY\n"); dev_err(dev, "failed to power on PHY\n");
goto err_phy_on; goto err_phy_on;
} }
/* MAC power on and enable transaction layer clocks */ /* MAC power on and enable transaction layer clocks */
reset_control_deassert(port->mac_reset); reset_control_deassert(pcie->mac_reset);
pm_runtime_enable(dev); pm_runtime_enable(dev);
pm_runtime_get_sync(dev); pm_runtime_get_sync(dev);
err = clk_bulk_prepare_enable(port->num_clks, port->clks); err = clk_bulk_prepare_enable(pcie->num_clks, pcie->clks);
if (err) { if (err) {
dev_err(dev, "failed to enable clocks\n"); dev_err(dev, "failed to enable clocks\n");
goto err_clk_init; goto err_clk_init;
...@@ -807,55 +807,55 @@ static int mtk_pcie_power_up(struct mtk_pcie_port *port) ...@@ -807,55 +807,55 @@ static int mtk_pcie_power_up(struct mtk_pcie_port *port)
err_clk_init: err_clk_init:
pm_runtime_put_sync(dev); pm_runtime_put_sync(dev);
pm_runtime_disable(dev); pm_runtime_disable(dev);
reset_control_assert(port->mac_reset); reset_control_assert(pcie->mac_reset);
phy_power_off(port->phy); phy_power_off(pcie->phy);
err_phy_on: err_phy_on:
phy_exit(port->phy); phy_exit(pcie->phy);
err_phy_init: err_phy_init:
reset_control_assert(port->phy_reset); reset_control_assert(pcie->phy_reset);
return err; return err;
} }
static void mtk_pcie_power_down(struct mtk_pcie_port *port) static void mtk_pcie_power_down(struct mtk_gen3_pcie *pcie)
{ {
clk_bulk_disable_unprepare(port->num_clks, port->clks); clk_bulk_disable_unprepare(pcie->num_clks, pcie->clks);
pm_runtime_put_sync(port->dev); pm_runtime_put_sync(pcie->dev);
pm_runtime_disable(port->dev); pm_runtime_disable(pcie->dev);
reset_control_assert(port->mac_reset); reset_control_assert(pcie->mac_reset);
phy_power_off(port->phy); phy_power_off(pcie->phy);
phy_exit(port->phy); phy_exit(pcie->phy);
reset_control_assert(port->phy_reset); reset_control_assert(pcie->phy_reset);
} }
static int mtk_pcie_setup(struct mtk_pcie_port *port) static int mtk_pcie_setup(struct mtk_gen3_pcie *pcie)
{ {
int err; int err;
err = mtk_pcie_parse_port(port); err = mtk_pcie_parse_port(pcie);
if (err) if (err)
return err; return err;
/* Don't touch the hardware registers before power up */ /* Don't touch the hardware registers before power up */
err = mtk_pcie_power_up(port); err = mtk_pcie_power_up(pcie);
if (err) if (err)
return err; return err;
/* Try link up */ /* Try link up */
err = mtk_pcie_startup_port(port); err = mtk_pcie_startup_port(pcie);
if (err) if (err)
goto err_setup; goto err_setup;
err = mtk_pcie_setup_irq(port); err = mtk_pcie_setup_irq(pcie);
if (err) if (err)
goto err_setup; goto err_setup;
return 0; return 0;
err_setup: err_setup:
mtk_pcie_power_down(port); mtk_pcie_power_down(pcie);
return err; return err;
} }
...@@ -863,30 +863,30 @@ static int mtk_pcie_setup(struct mtk_pcie_port *port) ...@@ -863,30 +863,30 @@ static int mtk_pcie_setup(struct mtk_pcie_port *port)
static int mtk_pcie_probe(struct platform_device *pdev) static int mtk_pcie_probe(struct platform_device *pdev)
{ {
struct device *dev = &pdev->dev; struct device *dev = &pdev->dev;
struct mtk_pcie_port *port; struct mtk_gen3_pcie *pcie;
struct pci_host_bridge *host; struct pci_host_bridge *host;
int err; int err;
host = devm_pci_alloc_host_bridge(dev, sizeof(*port)); host = devm_pci_alloc_host_bridge(dev, sizeof(*pcie));
if (!host) if (!host)
return -ENOMEM; return -ENOMEM;
port = pci_host_bridge_priv(host); pcie = pci_host_bridge_priv(host);
port->dev = dev; pcie->dev = dev;
platform_set_drvdata(pdev, port); platform_set_drvdata(pdev, pcie);
err = mtk_pcie_setup(port); err = mtk_pcie_setup(pcie);
if (err) if (err)
return err; return err;
host->ops = &mtk_pcie_ops; host->ops = &mtk_pcie_ops;
host->sysdata = port; host->sysdata = pcie;
err = pci_host_probe(host); err = pci_host_probe(host);
if (err) { if (err) {
mtk_pcie_irq_teardown(port); mtk_pcie_irq_teardown(pcie);
mtk_pcie_power_down(port); mtk_pcie_power_down(pcie);
return err; return err;
} }
...@@ -895,66 +895,66 @@ static int mtk_pcie_probe(struct platform_device *pdev) ...@@ -895,66 +895,66 @@ static int mtk_pcie_probe(struct platform_device *pdev)
static int mtk_pcie_remove(struct platform_device *pdev) static int mtk_pcie_remove(struct platform_device *pdev)
{ {
struct mtk_pcie_port *port = platform_get_drvdata(pdev); struct mtk_gen3_pcie *pcie = platform_get_drvdata(pdev);
struct pci_host_bridge *host = pci_host_bridge_from_priv(port); struct pci_host_bridge *host = pci_host_bridge_from_priv(pcie);
pci_lock_rescan_remove(); pci_lock_rescan_remove();
pci_stop_root_bus(host->bus); pci_stop_root_bus(host->bus);
pci_remove_root_bus(host->bus); pci_remove_root_bus(host->bus);
pci_unlock_rescan_remove(); pci_unlock_rescan_remove();
mtk_pcie_irq_teardown(port); mtk_pcie_irq_teardown(pcie);
mtk_pcie_power_down(port); mtk_pcie_power_down(pcie);
return 0; return 0;
} }
static void __maybe_unused mtk_pcie_irq_save(struct mtk_pcie_port *port) static void __maybe_unused mtk_pcie_irq_save(struct mtk_gen3_pcie *pcie)
{ {
int i; int i;
raw_spin_lock(&port->irq_lock); raw_spin_lock(&pcie->irq_lock);
port->saved_irq_state = readl_relaxed(port->base + PCIE_INT_ENABLE_REG); pcie->saved_irq_state = readl_relaxed(pcie->base + PCIE_INT_ENABLE_REG);
for (i = 0; i < PCIE_MSI_SET_NUM; i++) { for (i = 0; i < PCIE_MSI_SET_NUM; i++) {
struct mtk_msi_set *msi_set = &port->msi_sets[i]; struct mtk_msi_set *msi_set = &pcie->msi_sets[i];
msi_set->saved_irq_state = readl_relaxed(msi_set->base + msi_set->saved_irq_state = readl_relaxed(msi_set->base +
PCIE_MSI_SET_ENABLE_OFFSET); PCIE_MSI_SET_ENABLE_OFFSET);
} }
raw_spin_unlock(&port->irq_lock); raw_spin_unlock(&pcie->irq_lock);
} }
static void __maybe_unused mtk_pcie_irq_restore(struct mtk_pcie_port *port) static void __maybe_unused mtk_pcie_irq_restore(struct mtk_gen3_pcie *pcie)
{ {
int i; int i;
raw_spin_lock(&port->irq_lock); raw_spin_lock(&pcie->irq_lock);
writel_relaxed(port->saved_irq_state, port->base + PCIE_INT_ENABLE_REG); writel_relaxed(pcie->saved_irq_state, pcie->base + PCIE_INT_ENABLE_REG);
for (i = 0; i < PCIE_MSI_SET_NUM; i++) { for (i = 0; i < PCIE_MSI_SET_NUM; i++) {
struct mtk_msi_set *msi_set = &port->msi_sets[i]; struct mtk_msi_set *msi_set = &pcie->msi_sets[i];
writel_relaxed(msi_set->saved_irq_state, writel_relaxed(msi_set->saved_irq_state,
msi_set->base + PCIE_MSI_SET_ENABLE_OFFSET); msi_set->base + PCIE_MSI_SET_ENABLE_OFFSET);
} }
raw_spin_unlock(&port->irq_lock); raw_spin_unlock(&pcie->irq_lock);
} }
static int __maybe_unused mtk_pcie_turn_off_link(struct mtk_pcie_port *port) static int __maybe_unused mtk_pcie_turn_off_link(struct mtk_gen3_pcie *pcie)
{ {
u32 val; u32 val;
val = readl_relaxed(port->base + PCIE_ICMD_PM_REG); val = readl_relaxed(pcie->base + PCIE_ICMD_PM_REG);
val |= PCIE_TURN_OFF_LINK; val |= PCIE_TURN_OFF_LINK;
writel_relaxed(val, port->base + PCIE_ICMD_PM_REG); writel_relaxed(val, pcie->base + PCIE_ICMD_PM_REG);
/* Check the link is L2 */ /* Check the link is L2 */
return readl_poll_timeout(port->base + PCIE_LTSSM_STATUS_REG, val, return readl_poll_timeout(pcie->base + PCIE_LTSSM_STATUS_REG, val,
(PCIE_LTSSM_STATE(val) == (PCIE_LTSSM_STATE(val) ==
PCIE_LTSSM_STATE_L2_IDLE), 20, PCIE_LTSSM_STATE_L2_IDLE), 20,
50 * USEC_PER_MSEC); 50 * USEC_PER_MSEC);
...@@ -962,46 +962,46 @@ static int __maybe_unused mtk_pcie_turn_off_link(struct mtk_pcie_port *port) ...@@ -962,46 +962,46 @@ static int __maybe_unused mtk_pcie_turn_off_link(struct mtk_pcie_port *port)
static int __maybe_unused mtk_pcie_suspend_noirq(struct device *dev) static int __maybe_unused mtk_pcie_suspend_noirq(struct device *dev)
{ {
struct mtk_pcie_port *port = dev_get_drvdata(dev); struct mtk_gen3_pcie *pcie = dev_get_drvdata(dev);
int err; int err;
u32 val; u32 val;
/* Trigger link to L2 state */ /* Trigger link to L2 state */
err = mtk_pcie_turn_off_link(port); err = mtk_pcie_turn_off_link(pcie);
if (err) { if (err) {
dev_err(port->dev, "cannot enter L2 state\n"); dev_err(pcie->dev, "cannot enter L2 state\n");
return err; return err;
} }
/* Pull down the PERST# pin */ /* Pull down the PERST# pin */
val = readl_relaxed(port->base + PCIE_RST_CTRL_REG); val = readl_relaxed(pcie->base + PCIE_RST_CTRL_REG);
val |= PCIE_PE_RSTB; val |= PCIE_PE_RSTB;
writel_relaxed(val, port->base + PCIE_RST_CTRL_REG); writel_relaxed(val, pcie->base + PCIE_RST_CTRL_REG);
dev_dbg(port->dev, "entered L2 states successfully"); dev_dbg(pcie->dev, "entered L2 states successfully");
mtk_pcie_irq_save(port); mtk_pcie_irq_save(pcie);
mtk_pcie_power_down(port); mtk_pcie_power_down(pcie);
return 0; return 0;
} }
static int __maybe_unused mtk_pcie_resume_noirq(struct device *dev) static int __maybe_unused mtk_pcie_resume_noirq(struct device *dev)
{ {
struct mtk_pcie_port *port = dev_get_drvdata(dev); struct mtk_gen3_pcie *pcie = dev_get_drvdata(dev);
int err; int err;
err = mtk_pcie_power_up(port); err = mtk_pcie_power_up(pcie);
if (err) if (err)
return err; return err;
err = mtk_pcie_startup_port(port); err = mtk_pcie_startup_port(pcie);
if (err) { if (err) {
mtk_pcie_power_down(port); mtk_pcie_power_down(pcie);
return err; return err;
} }
mtk_pcie_irq_restore(port); mtk_pcie_irq_restore(pcie);
return 0; return 0;
} }
......
...@@ -262,7 +262,7 @@ struct mc_msi { ...@@ -262,7 +262,7 @@ struct mc_msi {
DECLARE_BITMAP(used, MC_NUM_MSI_IRQS); DECLARE_BITMAP(used, MC_NUM_MSI_IRQS);
}; };
struct mc_port { struct mc_pcie {
void __iomem *axi_base_addr; void __iomem *axi_base_addr;
struct device *dev; struct device *dev;
struct irq_domain *intx_domain; struct irq_domain *intx_domain;
...@@ -382,7 +382,7 @@ static struct { ...@@ -382,7 +382,7 @@ static struct {
static char poss_clks[][5] = { "fic0", "fic1", "fic2", "fic3" }; static char poss_clks[][5] = { "fic0", "fic1", "fic2", "fic3" };
static void mc_pcie_enable_msi(struct mc_port *port, void __iomem *base) static void mc_pcie_enable_msi(struct mc_pcie *port, void __iomem *base)
{ {
struct mc_msi *msi = &port->msi; struct mc_msi *msi = &port->msi;
u32 cap_offset = MC_MSI_CAP_CTRL_OFFSET; u32 cap_offset = MC_MSI_CAP_CTRL_OFFSET;
...@@ -405,7 +405,7 @@ static void mc_pcie_enable_msi(struct mc_port *port, void __iomem *base) ...@@ -405,7 +405,7 @@ static void mc_pcie_enable_msi(struct mc_port *port, void __iomem *base)
static void mc_handle_msi(struct irq_desc *desc) static void mc_handle_msi(struct irq_desc *desc)
{ {
struct mc_port *port = irq_desc_get_handler_data(desc); struct mc_pcie *port = irq_desc_get_handler_data(desc);
struct device *dev = port->dev; struct device *dev = port->dev;
struct mc_msi *msi = &port->msi; struct mc_msi *msi = &port->msi;
void __iomem *bridge_base_addr = void __iomem *bridge_base_addr =
...@@ -428,7 +428,7 @@ static void mc_handle_msi(struct irq_desc *desc) ...@@ -428,7 +428,7 @@ static void mc_handle_msi(struct irq_desc *desc)
static void mc_msi_bottom_irq_ack(struct irq_data *data) static void mc_msi_bottom_irq_ack(struct irq_data *data)
{ {
struct mc_port *port = irq_data_get_irq_chip_data(data); struct mc_pcie *port = irq_data_get_irq_chip_data(data);
void __iomem *bridge_base_addr = void __iomem *bridge_base_addr =
port->axi_base_addr + MC_PCIE_BRIDGE_ADDR; port->axi_base_addr + MC_PCIE_BRIDGE_ADDR;
u32 bitpos = data->hwirq; u32 bitpos = data->hwirq;
...@@ -443,7 +443,7 @@ static void mc_msi_bottom_irq_ack(struct irq_data *data) ...@@ -443,7 +443,7 @@ static void mc_msi_bottom_irq_ack(struct irq_data *data)
static void mc_compose_msi_msg(struct irq_data *data, struct msi_msg *msg) static void mc_compose_msi_msg(struct irq_data *data, struct msi_msg *msg)
{ {
struct mc_port *port = irq_data_get_irq_chip_data(data); struct mc_pcie *port = irq_data_get_irq_chip_data(data);
phys_addr_t addr = port->msi.vector_phy; phys_addr_t addr = port->msi.vector_phy;
msg->address_lo = lower_32_bits(addr); msg->address_lo = lower_32_bits(addr);
...@@ -470,7 +470,7 @@ static struct irq_chip mc_msi_bottom_irq_chip = { ...@@ -470,7 +470,7 @@ static struct irq_chip mc_msi_bottom_irq_chip = {
static int mc_irq_msi_domain_alloc(struct irq_domain *domain, unsigned int virq, static int mc_irq_msi_domain_alloc(struct irq_domain *domain, unsigned int virq,
unsigned int nr_irqs, void *args) unsigned int nr_irqs, void *args)
{ {
struct mc_port *port = domain->host_data; struct mc_pcie *port = domain->host_data;
struct mc_msi *msi = &port->msi; struct mc_msi *msi = &port->msi;
void __iomem *bridge_base_addr = void __iomem *bridge_base_addr =
port->axi_base_addr + MC_PCIE_BRIDGE_ADDR; port->axi_base_addr + MC_PCIE_BRIDGE_ADDR;
...@@ -503,7 +503,7 @@ static void mc_irq_msi_domain_free(struct irq_domain *domain, unsigned int virq, ...@@ -503,7 +503,7 @@ static void mc_irq_msi_domain_free(struct irq_domain *domain, unsigned int virq,
unsigned int nr_irqs) unsigned int nr_irqs)
{ {
struct irq_data *d = irq_domain_get_irq_data(domain, virq); struct irq_data *d = irq_domain_get_irq_data(domain, virq);
struct mc_port *port = irq_data_get_irq_chip_data(d); struct mc_pcie *port = irq_data_get_irq_chip_data(d);
struct mc_msi *msi = &port->msi; struct mc_msi *msi = &port->msi;
mutex_lock(&msi->lock); mutex_lock(&msi->lock);
...@@ -534,7 +534,7 @@ static struct msi_domain_info mc_msi_domain_info = { ...@@ -534,7 +534,7 @@ static struct msi_domain_info mc_msi_domain_info = {
.chip = &mc_msi_irq_chip, .chip = &mc_msi_irq_chip,
}; };
static int mc_allocate_msi_domains(struct mc_port *port) static int mc_allocate_msi_domains(struct mc_pcie *port)
{ {
struct device *dev = port->dev; struct device *dev = port->dev;
struct fwnode_handle *fwnode = of_node_to_fwnode(dev->of_node); struct fwnode_handle *fwnode = of_node_to_fwnode(dev->of_node);
...@@ -562,7 +562,7 @@ static int mc_allocate_msi_domains(struct mc_port *port) ...@@ -562,7 +562,7 @@ static int mc_allocate_msi_domains(struct mc_port *port)
static void mc_handle_intx(struct irq_desc *desc) static void mc_handle_intx(struct irq_desc *desc)
{ {
struct mc_port *port = irq_desc_get_handler_data(desc); struct mc_pcie *port = irq_desc_get_handler_data(desc);
struct device *dev = port->dev; struct device *dev = port->dev;
void __iomem *bridge_base_addr = void __iomem *bridge_base_addr =
port->axi_base_addr + MC_PCIE_BRIDGE_ADDR; port->axi_base_addr + MC_PCIE_BRIDGE_ADDR;
...@@ -585,7 +585,7 @@ static void mc_handle_intx(struct irq_desc *desc) ...@@ -585,7 +585,7 @@ static void mc_handle_intx(struct irq_desc *desc)
static void mc_ack_intx_irq(struct irq_data *data) static void mc_ack_intx_irq(struct irq_data *data)
{ {
struct mc_port *port = irq_data_get_irq_chip_data(data); struct mc_pcie *port = irq_data_get_irq_chip_data(data);
void __iomem *bridge_base_addr = void __iomem *bridge_base_addr =
port->axi_base_addr + MC_PCIE_BRIDGE_ADDR; port->axi_base_addr + MC_PCIE_BRIDGE_ADDR;
u32 mask = BIT(data->hwirq + PM_MSI_INT_INTX_SHIFT); u32 mask = BIT(data->hwirq + PM_MSI_INT_INTX_SHIFT);
...@@ -595,7 +595,7 @@ static void mc_ack_intx_irq(struct irq_data *data) ...@@ -595,7 +595,7 @@ static void mc_ack_intx_irq(struct irq_data *data)
static void mc_mask_intx_irq(struct irq_data *data) static void mc_mask_intx_irq(struct irq_data *data)
{ {
struct mc_port *port = irq_data_get_irq_chip_data(data); struct mc_pcie *port = irq_data_get_irq_chip_data(data);
void __iomem *bridge_base_addr = void __iomem *bridge_base_addr =
port->axi_base_addr + MC_PCIE_BRIDGE_ADDR; port->axi_base_addr + MC_PCIE_BRIDGE_ADDR;
unsigned long flags; unsigned long flags;
...@@ -611,7 +611,7 @@ static void mc_mask_intx_irq(struct irq_data *data) ...@@ -611,7 +611,7 @@ static void mc_mask_intx_irq(struct irq_data *data)
static void mc_unmask_intx_irq(struct irq_data *data) static void mc_unmask_intx_irq(struct irq_data *data)
{ {
struct mc_port *port = irq_data_get_irq_chip_data(data); struct mc_pcie *port = irq_data_get_irq_chip_data(data);
void __iomem *bridge_base_addr = void __iomem *bridge_base_addr =
port->axi_base_addr + MC_PCIE_BRIDGE_ADDR; port->axi_base_addr + MC_PCIE_BRIDGE_ADDR;
unsigned long flags; unsigned long flags;
...@@ -698,7 +698,7 @@ static u32 local_events(void __iomem *addr) ...@@ -698,7 +698,7 @@ static u32 local_events(void __iomem *addr)
return val; return val;
} }
static u32 get_events(struct mc_port *port) static u32 get_events(struct mc_pcie *port)
{ {
void __iomem *bridge_base_addr = void __iomem *bridge_base_addr =
port->axi_base_addr + MC_PCIE_BRIDGE_ADDR; port->axi_base_addr + MC_PCIE_BRIDGE_ADDR;
...@@ -715,7 +715,7 @@ static u32 get_events(struct mc_port *port) ...@@ -715,7 +715,7 @@ static u32 get_events(struct mc_port *port)
static irqreturn_t mc_event_handler(int irq, void *dev_id) static irqreturn_t mc_event_handler(int irq, void *dev_id)
{ {
struct mc_port *port = dev_id; struct mc_pcie *port = dev_id;
struct device *dev = port->dev; struct device *dev = port->dev;
struct irq_data *data; struct irq_data *data;
...@@ -731,7 +731,7 @@ static irqreturn_t mc_event_handler(int irq, void *dev_id) ...@@ -731,7 +731,7 @@ static irqreturn_t mc_event_handler(int irq, void *dev_id)
static void mc_handle_event(struct irq_desc *desc) static void mc_handle_event(struct irq_desc *desc)
{ {
struct mc_port *port = irq_desc_get_handler_data(desc); struct mc_pcie *port = irq_desc_get_handler_data(desc);
unsigned long events; unsigned long events;
u32 bit; u32 bit;
struct irq_chip *chip = irq_desc_get_chip(desc); struct irq_chip *chip = irq_desc_get_chip(desc);
...@@ -748,7 +748,7 @@ static void mc_handle_event(struct irq_desc *desc) ...@@ -748,7 +748,7 @@ static void mc_handle_event(struct irq_desc *desc)
static void mc_ack_event_irq(struct irq_data *data) static void mc_ack_event_irq(struct irq_data *data)
{ {
struct mc_port *port = irq_data_get_irq_chip_data(data); struct mc_pcie *port = irq_data_get_irq_chip_data(data);
u32 event = data->hwirq; u32 event = data->hwirq;
void __iomem *addr; void __iomem *addr;
u32 mask; u32 mask;
...@@ -763,7 +763,7 @@ static void mc_ack_event_irq(struct irq_data *data) ...@@ -763,7 +763,7 @@ static void mc_ack_event_irq(struct irq_data *data)
static void mc_mask_event_irq(struct irq_data *data) static void mc_mask_event_irq(struct irq_data *data)
{ {
struct mc_port *port = irq_data_get_irq_chip_data(data); struct mc_pcie *port = irq_data_get_irq_chip_data(data);
u32 event = data->hwirq; u32 event = data->hwirq;
void __iomem *addr; void __iomem *addr;
u32 mask; u32 mask;
...@@ -793,7 +793,7 @@ static void mc_mask_event_irq(struct irq_data *data) ...@@ -793,7 +793,7 @@ static void mc_mask_event_irq(struct irq_data *data)
static void mc_unmask_event_irq(struct irq_data *data) static void mc_unmask_event_irq(struct irq_data *data)
{ {
struct mc_port *port = irq_data_get_irq_chip_data(data); struct mc_pcie *port = irq_data_get_irq_chip_data(data);
u32 event = data->hwirq; u32 event = data->hwirq;
void __iomem *addr; void __iomem *addr;
u32 mask; u32 mask;
...@@ -881,7 +881,7 @@ static int mc_pcie_init_clks(struct device *dev) ...@@ -881,7 +881,7 @@ static int mc_pcie_init_clks(struct device *dev)
return 0; return 0;
} }
static int mc_pcie_init_irq_domains(struct mc_port *port) static int mc_pcie_init_irq_domains(struct mc_pcie *port)
{ {
struct device *dev = port->dev; struct device *dev = port->dev;
struct device_node *node = dev->of_node; struct device_node *node = dev->of_node;
...@@ -957,7 +957,7 @@ static void mc_pcie_setup_window(void __iomem *bridge_base_addr, u32 index, ...@@ -957,7 +957,7 @@ static void mc_pcie_setup_window(void __iomem *bridge_base_addr, u32 index,
} }
static int mc_pcie_setup_windows(struct platform_device *pdev, static int mc_pcie_setup_windows(struct platform_device *pdev,
struct mc_port *port) struct mc_pcie *port)
{ {
void __iomem *bridge_base_addr = void __iomem *bridge_base_addr =
port->axi_base_addr + MC_PCIE_BRIDGE_ADDR; port->axi_base_addr + MC_PCIE_BRIDGE_ADDR;
...@@ -983,7 +983,7 @@ static int mc_platform_init(struct pci_config_window *cfg) ...@@ -983,7 +983,7 @@ static int mc_platform_init(struct pci_config_window *cfg)
{ {
struct device *dev = cfg->parent; struct device *dev = cfg->parent;
struct platform_device *pdev = to_platform_device(dev); struct platform_device *pdev = to_platform_device(dev);
struct mc_port *port; struct mc_pcie *port;
void __iomem *bridge_base_addr; void __iomem *bridge_base_addr;
void __iomem *ctrl_base_addr; void __iomem *ctrl_base_addr;
int ret; int ret;
......
...@@ -93,8 +93,8 @@ struct mt7621_pcie_port { ...@@ -93,8 +93,8 @@ struct mt7621_pcie_port {
* reset lines are inverted. * reset lines are inverted.
*/ */
struct mt7621_pcie { struct mt7621_pcie {
void __iomem *base;
struct device *dev; struct device *dev;
void __iomem *base;
struct list_head ports; struct list_head ports;
bool resets_inverted; bool resets_inverted;
}; };
...@@ -129,7 +129,7 @@ static inline void pcie_port_write(struct mt7621_pcie_port *port, ...@@ -129,7 +129,7 @@ static inline void pcie_port_write(struct mt7621_pcie_port *port,
writel_relaxed(val, port->base + reg); writel_relaxed(val, port->base + reg);
} }
static inline u32 mt7621_pci_get_cfgaddr(unsigned int bus, unsigned int slot, static inline u32 mt7621_pcie_get_cfgaddr(unsigned int bus, unsigned int slot,
unsigned int func, unsigned int where) unsigned int func, unsigned int where)
{ {
return (((where & 0xf00) >> 8) << 24) | (bus << 16) | (slot << 11) | return (((where & 0xf00) >> 8) << 24) | (bus << 16) | (slot << 11) |
...@@ -140,7 +140,7 @@ static void __iomem *mt7621_pcie_map_bus(struct pci_bus *bus, ...@@ -140,7 +140,7 @@ static void __iomem *mt7621_pcie_map_bus(struct pci_bus *bus,
unsigned int devfn, int where) unsigned int devfn, int where)
{ {
struct mt7621_pcie *pcie = bus->sysdata; struct mt7621_pcie *pcie = bus->sysdata;
u32 address = mt7621_pci_get_cfgaddr(bus->number, PCI_SLOT(devfn), u32 address = mt7621_pcie_get_cfgaddr(bus->number, PCI_SLOT(devfn),
PCI_FUNC(devfn), where); PCI_FUNC(devfn), where);
writel_relaxed(address, pcie->base + RALINK_PCI_CONFIG_ADDR); writel_relaxed(address, pcie->base + RALINK_PCI_CONFIG_ADDR);
...@@ -148,7 +148,7 @@ static void __iomem *mt7621_pcie_map_bus(struct pci_bus *bus, ...@@ -148,7 +148,7 @@ static void __iomem *mt7621_pcie_map_bus(struct pci_bus *bus,
return pcie->base + RALINK_PCI_CONFIG_DATA + (where & 3); return pcie->base + RALINK_PCI_CONFIG_DATA + (where & 3);
} }
static struct pci_ops mt7621_pci_ops = { static struct pci_ops mt7621_pcie_ops = {
.map_bus = mt7621_pcie_map_bus, .map_bus = mt7621_pcie_map_bus,
.read = pci_generic_config_read, .read = pci_generic_config_read,
.write = pci_generic_config_write, .write = pci_generic_config_write,
...@@ -156,7 +156,7 @@ static struct pci_ops mt7621_pci_ops = { ...@@ -156,7 +156,7 @@ static struct pci_ops mt7621_pci_ops = {
static u32 read_config(struct mt7621_pcie *pcie, unsigned int dev, u32 reg) static u32 read_config(struct mt7621_pcie *pcie, unsigned int dev, u32 reg)
{ {
u32 address = mt7621_pci_get_cfgaddr(0, dev, 0, reg); u32 address = mt7621_pcie_get_cfgaddr(0, dev, 0, reg);
pcie_write(pcie, address, RALINK_PCI_CONFIG_ADDR); pcie_write(pcie, address, RALINK_PCI_CONFIG_ADDR);
return pcie_read(pcie, RALINK_PCI_CONFIG_DATA); return pcie_read(pcie, RALINK_PCI_CONFIG_DATA);
...@@ -165,7 +165,7 @@ static u32 read_config(struct mt7621_pcie *pcie, unsigned int dev, u32 reg) ...@@ -165,7 +165,7 @@ static u32 read_config(struct mt7621_pcie *pcie, unsigned int dev, u32 reg)
static void write_config(struct mt7621_pcie *pcie, unsigned int dev, static void write_config(struct mt7621_pcie *pcie, unsigned int dev,
u32 reg, u32 val) u32 reg, u32 val)
{ {
u32 address = mt7621_pci_get_cfgaddr(0, dev, 0, reg); u32 address = mt7621_pcie_get_cfgaddr(0, dev, 0, reg);
pcie_write(pcie, address, RALINK_PCI_CONFIG_ADDR); pcie_write(pcie, address, RALINK_PCI_CONFIG_ADDR);
pcie_write(pcie, val, RALINK_PCI_CONFIG_DATA); pcie_write(pcie, val, RALINK_PCI_CONFIG_DATA);
...@@ -474,16 +474,16 @@ static int mt7621_pcie_register_host(struct pci_host_bridge *host) ...@@ -474,16 +474,16 @@ static int mt7621_pcie_register_host(struct pci_host_bridge *host)
{ {
struct mt7621_pcie *pcie = pci_host_bridge_priv(host); struct mt7621_pcie *pcie = pci_host_bridge_priv(host);
host->ops = &mt7621_pci_ops; host->ops = &mt7621_pcie_ops;
host->sysdata = pcie; host->sysdata = pcie;
return pci_host_probe(host); return pci_host_probe(host);
} }
static const struct soc_device_attribute mt7621_pci_quirks_match[] = { static const struct soc_device_attribute mt7621_pcie_quirks_match[] = {
{ .soc_id = "mt7621", .revision = "E2" } { .soc_id = "mt7621", .revision = "E2" }
}; };
static int mt7621_pci_probe(struct platform_device *pdev) static int mt7621_pcie_probe(struct platform_device *pdev)
{ {
struct device *dev = &pdev->dev; struct device *dev = &pdev->dev;
const struct soc_device_attribute *attr; const struct soc_device_attribute *attr;
...@@ -504,7 +504,7 @@ static int mt7621_pci_probe(struct platform_device *pdev) ...@@ -504,7 +504,7 @@ static int mt7621_pci_probe(struct platform_device *pdev)
platform_set_drvdata(pdev, pcie); platform_set_drvdata(pdev, pcie);
INIT_LIST_HEAD(&pcie->ports); INIT_LIST_HEAD(&pcie->ports);
attr = soc_device_match(mt7621_pci_quirks_match); attr = soc_device_match(mt7621_pcie_quirks_match);
if (attr) if (attr)
pcie->resets_inverted = true; pcie->resets_inverted = true;
...@@ -535,7 +535,7 @@ static int mt7621_pci_probe(struct platform_device *pdev) ...@@ -535,7 +535,7 @@ static int mt7621_pci_probe(struct platform_device *pdev)
return err; return err;
} }
static int mt7621_pci_remove(struct platform_device *pdev) static int mt7621_pcie_remove(struct platform_device *pdev)
{ {
struct mt7621_pcie *pcie = platform_get_drvdata(pdev); struct mt7621_pcie *pcie = platform_get_drvdata(pdev);
struct mt7621_pcie_port *port; struct mt7621_pcie_port *port;
...@@ -546,20 +546,20 @@ static int mt7621_pci_remove(struct platform_device *pdev) ...@@ -546,20 +546,20 @@ static int mt7621_pci_remove(struct platform_device *pdev)
return 0; return 0;
} }
static const struct of_device_id mt7621_pci_ids[] = { static const struct of_device_id mt7621_pcie_ids[] = {
{ .compatible = "mediatek,mt7621-pci" }, { .compatible = "mediatek,mt7621-pci" },
{}, {},
}; };
MODULE_DEVICE_TABLE(of, mt7621_pci_ids); MODULE_DEVICE_TABLE(of, mt7621_pcie_ids);
static struct platform_driver mt7621_pci_driver = { static struct platform_driver mt7621_pcie_driver = {
.probe = mt7621_pci_probe, .probe = mt7621_pcie_probe,
.remove = mt7621_pci_remove, .remove = mt7621_pcie_remove,
.driver = { .driver = {
.name = "mt7621-pci", .name = "mt7621-pci",
.of_match_table = of_match_ptr(mt7621_pci_ids), .of_match_table = of_match_ptr(mt7621_pcie_ids),
}, },
}; };
builtin_platform_driver(mt7621_pci_driver); builtin_platform_driver(mt7621_pcie_driver);
MODULE_LICENSE("GPL v2"); MODULE_LICENSE("GPL v2");
...@@ -99,10 +99,10 @@ ...@@ -99,10 +99,10 @@
#define XILINX_CPM_PCIE_REG_PSCR_LNKUP BIT(11) #define XILINX_CPM_PCIE_REG_PSCR_LNKUP BIT(11)
/** /**
* struct xilinx_cpm_pcie_port - PCIe port information * struct xilinx_cpm_pcie - PCIe port information
* @dev: Device pointer
* @reg_base: Bridge Register Base * @reg_base: Bridge Register Base
* @cpm_base: CPM System Level Control and Status Register(SLCR) Base * @cpm_base: CPM System Level Control and Status Register(SLCR) Base
* @dev: Device pointer
* @intx_domain: Legacy IRQ domain pointer * @intx_domain: Legacy IRQ domain pointer
* @cpm_domain: CPM IRQ domain pointer * @cpm_domain: CPM IRQ domain pointer
* @cfg: Holds mappings of config space window * @cfg: Holds mappings of config space window
...@@ -110,10 +110,10 @@ ...@@ -110,10 +110,10 @@
* @irq: Error interrupt number * @irq: Error interrupt number
* @lock: lock protecting shared register access * @lock: lock protecting shared register access
*/ */
struct xilinx_cpm_pcie_port { struct xilinx_cpm_pcie {
struct device *dev;
void __iomem *reg_base; void __iomem *reg_base;
void __iomem *cpm_base; void __iomem *cpm_base;
struct device *dev;
struct irq_domain *intx_domain; struct irq_domain *intx_domain;
struct irq_domain *cpm_domain; struct irq_domain *cpm_domain;
struct pci_config_window *cfg; struct pci_config_window *cfg;
...@@ -122,24 +122,24 @@ struct xilinx_cpm_pcie_port { ...@@ -122,24 +122,24 @@ struct xilinx_cpm_pcie_port {
raw_spinlock_t lock; raw_spinlock_t lock;
}; };
static u32 pcie_read(struct xilinx_cpm_pcie_port *port, u32 reg) static u32 pcie_read(struct xilinx_cpm_pcie *port, u32 reg)
{ {
return readl_relaxed(port->reg_base + reg); return readl_relaxed(port->reg_base + reg);
} }
static void pcie_write(struct xilinx_cpm_pcie_port *port, static void pcie_write(struct xilinx_cpm_pcie *port,
u32 val, u32 reg) u32 val, u32 reg)
{ {
writel_relaxed(val, port->reg_base + reg); writel_relaxed(val, port->reg_base + reg);
} }
static bool cpm_pcie_link_up(struct xilinx_cpm_pcie_port *port) static bool cpm_pcie_link_up(struct xilinx_cpm_pcie *port)
{ {
return (pcie_read(port, XILINX_CPM_PCIE_REG_PSCR) & return (pcie_read(port, XILINX_CPM_PCIE_REG_PSCR) &
XILINX_CPM_PCIE_REG_PSCR_LNKUP); XILINX_CPM_PCIE_REG_PSCR_LNKUP);
} }
static void cpm_pcie_clear_err_interrupts(struct xilinx_cpm_pcie_port *port) static void cpm_pcie_clear_err_interrupts(struct xilinx_cpm_pcie *port)
{ {
unsigned long val = pcie_read(port, XILINX_CPM_PCIE_REG_RPEFR); unsigned long val = pcie_read(port, XILINX_CPM_PCIE_REG_RPEFR);
...@@ -153,7 +153,7 @@ static void cpm_pcie_clear_err_interrupts(struct xilinx_cpm_pcie_port *port) ...@@ -153,7 +153,7 @@ static void cpm_pcie_clear_err_interrupts(struct xilinx_cpm_pcie_port *port)
static void xilinx_cpm_mask_leg_irq(struct irq_data *data) static void xilinx_cpm_mask_leg_irq(struct irq_data *data)
{ {
struct xilinx_cpm_pcie_port *port = irq_data_get_irq_chip_data(data); struct xilinx_cpm_pcie *port = irq_data_get_irq_chip_data(data);
unsigned long flags; unsigned long flags;
u32 mask; u32 mask;
u32 val; u32 val;
...@@ -167,7 +167,7 @@ static void xilinx_cpm_mask_leg_irq(struct irq_data *data) ...@@ -167,7 +167,7 @@ static void xilinx_cpm_mask_leg_irq(struct irq_data *data)
static void xilinx_cpm_unmask_leg_irq(struct irq_data *data) static void xilinx_cpm_unmask_leg_irq(struct irq_data *data)
{ {
struct xilinx_cpm_pcie_port *port = irq_data_get_irq_chip_data(data); struct xilinx_cpm_pcie *port = irq_data_get_irq_chip_data(data);
unsigned long flags; unsigned long flags;
u32 mask; u32 mask;
u32 val; u32 val;
...@@ -211,7 +211,7 @@ static const struct irq_domain_ops intx_domain_ops = { ...@@ -211,7 +211,7 @@ static const struct irq_domain_ops intx_domain_ops = {
static void xilinx_cpm_pcie_intx_flow(struct irq_desc *desc) static void xilinx_cpm_pcie_intx_flow(struct irq_desc *desc)
{ {
struct xilinx_cpm_pcie_port *port = irq_desc_get_handler_data(desc); struct xilinx_cpm_pcie *port = irq_desc_get_handler_data(desc);
struct irq_chip *chip = irq_desc_get_chip(desc); struct irq_chip *chip = irq_desc_get_chip(desc);
unsigned long val; unsigned long val;
int i; int i;
...@@ -229,7 +229,7 @@ static void xilinx_cpm_pcie_intx_flow(struct irq_desc *desc) ...@@ -229,7 +229,7 @@ static void xilinx_cpm_pcie_intx_flow(struct irq_desc *desc)
static void xilinx_cpm_mask_event_irq(struct irq_data *d) static void xilinx_cpm_mask_event_irq(struct irq_data *d)
{ {
struct xilinx_cpm_pcie_port *port = irq_data_get_irq_chip_data(d); struct xilinx_cpm_pcie *port = irq_data_get_irq_chip_data(d);
u32 val; u32 val;
raw_spin_lock(&port->lock); raw_spin_lock(&port->lock);
...@@ -241,7 +241,7 @@ static void xilinx_cpm_mask_event_irq(struct irq_data *d) ...@@ -241,7 +241,7 @@ static void xilinx_cpm_mask_event_irq(struct irq_data *d)
static void xilinx_cpm_unmask_event_irq(struct irq_data *d) static void xilinx_cpm_unmask_event_irq(struct irq_data *d)
{ {
struct xilinx_cpm_pcie_port *port = irq_data_get_irq_chip_data(d); struct xilinx_cpm_pcie *port = irq_data_get_irq_chip_data(d);
u32 val; u32 val;
raw_spin_lock(&port->lock); raw_spin_lock(&port->lock);
...@@ -273,7 +273,7 @@ static const struct irq_domain_ops event_domain_ops = { ...@@ -273,7 +273,7 @@ static const struct irq_domain_ops event_domain_ops = {
static void xilinx_cpm_pcie_event_flow(struct irq_desc *desc) static void xilinx_cpm_pcie_event_flow(struct irq_desc *desc)
{ {
struct xilinx_cpm_pcie_port *port = irq_desc_get_handler_data(desc); struct xilinx_cpm_pcie *port = irq_desc_get_handler_data(desc);
struct irq_chip *chip = irq_desc_get_chip(desc); struct irq_chip *chip = irq_desc_get_chip(desc);
unsigned long val; unsigned long val;
int i; int i;
...@@ -327,7 +327,7 @@ static const struct { ...@@ -327,7 +327,7 @@ static const struct {
static irqreturn_t xilinx_cpm_pcie_intr_handler(int irq, void *dev_id) static irqreturn_t xilinx_cpm_pcie_intr_handler(int irq, void *dev_id)
{ {
struct xilinx_cpm_pcie_port *port = dev_id; struct xilinx_cpm_pcie *port = dev_id;
struct device *dev = port->dev; struct device *dev = port->dev;
struct irq_data *d; struct irq_data *d;
...@@ -350,7 +350,7 @@ static irqreturn_t xilinx_cpm_pcie_intr_handler(int irq, void *dev_id) ...@@ -350,7 +350,7 @@ static irqreturn_t xilinx_cpm_pcie_intr_handler(int irq, void *dev_id)
return IRQ_HANDLED; return IRQ_HANDLED;
} }
static void xilinx_cpm_free_irq_domains(struct xilinx_cpm_pcie_port *port) static void xilinx_cpm_free_irq_domains(struct xilinx_cpm_pcie *port)
{ {
if (port->intx_domain) { if (port->intx_domain) {
irq_domain_remove(port->intx_domain); irq_domain_remove(port->intx_domain);
...@@ -369,7 +369,7 @@ static void xilinx_cpm_free_irq_domains(struct xilinx_cpm_pcie_port *port) ...@@ -369,7 +369,7 @@ static void xilinx_cpm_free_irq_domains(struct xilinx_cpm_pcie_port *port)
* *
* Return: '0' on success and error value on failure * Return: '0' on success and error value on failure
*/ */
static int xilinx_cpm_pcie_init_irq_domain(struct xilinx_cpm_pcie_port *port) static int xilinx_cpm_pcie_init_irq_domain(struct xilinx_cpm_pcie *port)
{ {
struct device *dev = port->dev; struct device *dev = port->dev;
struct device_node *node = dev->of_node; struct device_node *node = dev->of_node;
...@@ -410,7 +410,7 @@ static int xilinx_cpm_pcie_init_irq_domain(struct xilinx_cpm_pcie_port *port) ...@@ -410,7 +410,7 @@ static int xilinx_cpm_pcie_init_irq_domain(struct xilinx_cpm_pcie_port *port)
return -ENOMEM; return -ENOMEM;
} }
static int xilinx_cpm_setup_irq(struct xilinx_cpm_pcie_port *port) static int xilinx_cpm_setup_irq(struct xilinx_cpm_pcie *port)
{ {
struct device *dev = port->dev; struct device *dev = port->dev;
struct platform_device *pdev = to_platform_device(dev); struct platform_device *pdev = to_platform_device(dev);
...@@ -462,7 +462,7 @@ static int xilinx_cpm_setup_irq(struct xilinx_cpm_pcie_port *port) ...@@ -462,7 +462,7 @@ static int xilinx_cpm_setup_irq(struct xilinx_cpm_pcie_port *port)
* xilinx_cpm_pcie_init_port - Initialize hardware * xilinx_cpm_pcie_init_port - Initialize hardware
* @port: PCIe port information * @port: PCIe port information
*/ */
static void xilinx_cpm_pcie_init_port(struct xilinx_cpm_pcie_port *port) static void xilinx_cpm_pcie_init_port(struct xilinx_cpm_pcie *port)
{ {
if (cpm_pcie_link_up(port)) if (cpm_pcie_link_up(port))
dev_info(port->dev, "PCIe Link is UP\n"); dev_info(port->dev, "PCIe Link is UP\n");
...@@ -497,7 +497,7 @@ static void xilinx_cpm_pcie_init_port(struct xilinx_cpm_pcie_port *port) ...@@ -497,7 +497,7 @@ static void xilinx_cpm_pcie_init_port(struct xilinx_cpm_pcie_port *port)
* *
* Return: '0' on success and error value on failure * Return: '0' on success and error value on failure
*/ */
static int xilinx_cpm_pcie_parse_dt(struct xilinx_cpm_pcie_port *port, static int xilinx_cpm_pcie_parse_dt(struct xilinx_cpm_pcie *port,
struct resource *bus_range) struct resource *bus_range)
{ {
struct device *dev = port->dev; struct device *dev = port->dev;
...@@ -523,7 +523,7 @@ static int xilinx_cpm_pcie_parse_dt(struct xilinx_cpm_pcie_port *port, ...@@ -523,7 +523,7 @@ static int xilinx_cpm_pcie_parse_dt(struct xilinx_cpm_pcie_port *port,
return 0; return 0;
} }
static void xilinx_cpm_free_interrupts(struct xilinx_cpm_pcie_port *port) static void xilinx_cpm_free_interrupts(struct xilinx_cpm_pcie *port)
{ {
irq_set_chained_handler_and_data(port->intx_irq, NULL, NULL); irq_set_chained_handler_and_data(port->intx_irq, NULL, NULL);
irq_set_chained_handler_and_data(port->irq, NULL, NULL); irq_set_chained_handler_and_data(port->irq, NULL, NULL);
...@@ -537,7 +537,7 @@ static void xilinx_cpm_free_interrupts(struct xilinx_cpm_pcie_port *port) ...@@ -537,7 +537,7 @@ static void xilinx_cpm_free_interrupts(struct xilinx_cpm_pcie_port *port)
*/ */
static int xilinx_cpm_pcie_probe(struct platform_device *pdev) static int xilinx_cpm_pcie_probe(struct platform_device *pdev)
{ {
struct xilinx_cpm_pcie_port *port; struct xilinx_cpm_pcie *port;
struct device *dev = &pdev->dev; struct device *dev = &pdev->dev;
struct pci_host_bridge *bridge; struct pci_host_bridge *bridge;
struct resource_entry *bus; struct resource_entry *bus;
......
...@@ -91,18 +91,18 @@ ...@@ -91,18 +91,18 @@
#define XILINX_NUM_MSI_IRQS 128 #define XILINX_NUM_MSI_IRQS 128
/** /**
* struct xilinx_pcie_port - PCIe port information * struct xilinx_pcie - PCIe port information
* @reg_base: IO Mapped Register Base
* @dev: Device pointer * @dev: Device pointer
* @reg_base: IO Mapped Register Base
* @msi_map: Bitmap of allocated MSIs * @msi_map: Bitmap of allocated MSIs
* @map_lock: Mutex protecting the MSI allocation * @map_lock: Mutex protecting the MSI allocation
* @msi_domain: MSI IRQ domain pointer * @msi_domain: MSI IRQ domain pointer
* @leg_domain: Legacy IRQ domain pointer * @leg_domain: Legacy IRQ domain pointer
* @resources: Bus Resources * @resources: Bus Resources
*/ */
struct xilinx_pcie_port { struct xilinx_pcie {
void __iomem *reg_base;
struct device *dev; struct device *dev;
void __iomem *reg_base;
unsigned long msi_map[BITS_TO_LONGS(XILINX_NUM_MSI_IRQS)]; unsigned long msi_map[BITS_TO_LONGS(XILINX_NUM_MSI_IRQS)];
struct mutex map_lock; struct mutex map_lock;
struct irq_domain *msi_domain; struct irq_domain *msi_domain;
...@@ -110,35 +110,35 @@ struct xilinx_pcie_port { ...@@ -110,35 +110,35 @@ struct xilinx_pcie_port {
struct list_head resources; struct list_head resources;
}; };
static inline u32 pcie_read(struct xilinx_pcie_port *port, u32 reg) static inline u32 pcie_read(struct xilinx_pcie *pcie, u32 reg)
{ {
return readl(port->reg_base + reg); return readl(pcie->reg_base + reg);
} }
static inline void pcie_write(struct xilinx_pcie_port *port, u32 val, u32 reg) static inline void pcie_write(struct xilinx_pcie *pcie, u32 val, u32 reg)
{ {
writel(val, port->reg_base + reg); writel(val, pcie->reg_base + reg);
} }
static inline bool xilinx_pcie_link_up(struct xilinx_pcie_port *port) static inline bool xilinx_pcie_link_up(struct xilinx_pcie *pcie)
{ {
return (pcie_read(port, XILINX_PCIE_REG_PSCR) & return (pcie_read(pcie, XILINX_PCIE_REG_PSCR) &
XILINX_PCIE_REG_PSCR_LNKUP) ? 1 : 0; XILINX_PCIE_REG_PSCR_LNKUP) ? 1 : 0;
} }
/** /**
* xilinx_pcie_clear_err_interrupts - Clear Error Interrupts * xilinx_pcie_clear_err_interrupts - Clear Error Interrupts
* @port: PCIe port information * @pcie: PCIe port information
*/ */
static void xilinx_pcie_clear_err_interrupts(struct xilinx_pcie_port *port) static void xilinx_pcie_clear_err_interrupts(struct xilinx_pcie *pcie)
{ {
struct device *dev = port->dev; struct device *dev = pcie->dev;
unsigned long val = pcie_read(port, XILINX_PCIE_REG_RPEFR); unsigned long val = pcie_read(pcie, XILINX_PCIE_REG_RPEFR);
if (val & XILINX_PCIE_RPEFR_ERR_VALID) { if (val & XILINX_PCIE_RPEFR_ERR_VALID) {
dev_dbg(dev, "Requester ID %lu\n", dev_dbg(dev, "Requester ID %lu\n",
val & XILINX_PCIE_RPEFR_REQ_ID); val & XILINX_PCIE_RPEFR_REQ_ID);
pcie_write(port, XILINX_PCIE_RPEFR_ALL_MASK, pcie_write(pcie, XILINX_PCIE_RPEFR_ALL_MASK,
XILINX_PCIE_REG_RPEFR); XILINX_PCIE_REG_RPEFR);
} }
} }
...@@ -152,11 +152,11 @@ static void xilinx_pcie_clear_err_interrupts(struct xilinx_pcie_port *port) ...@@ -152,11 +152,11 @@ static void xilinx_pcie_clear_err_interrupts(struct xilinx_pcie_port *port)
*/ */
static bool xilinx_pcie_valid_device(struct pci_bus *bus, unsigned int devfn) static bool xilinx_pcie_valid_device(struct pci_bus *bus, unsigned int devfn)
{ {
struct xilinx_pcie_port *port = bus->sysdata; struct xilinx_pcie *pcie = bus->sysdata;
/* Check if link is up when trying to access downstream ports */ /* Check if link is up when trying to access downstream pcie ports */
if (!pci_is_root_bus(bus)) { if (!pci_is_root_bus(bus)) {
if (!xilinx_pcie_link_up(port)) if (!xilinx_pcie_link_up(pcie))
return false; return false;
} else if (devfn > 0) { } else if (devfn > 0) {
/* Only one device down on each root port */ /* Only one device down on each root port */
...@@ -177,12 +177,12 @@ static bool xilinx_pcie_valid_device(struct pci_bus *bus, unsigned int devfn) ...@@ -177,12 +177,12 @@ static bool xilinx_pcie_valid_device(struct pci_bus *bus, unsigned int devfn)
static void __iomem *xilinx_pcie_map_bus(struct pci_bus *bus, static void __iomem *xilinx_pcie_map_bus(struct pci_bus *bus,
unsigned int devfn, int where) unsigned int devfn, int where)
{ {
struct xilinx_pcie_port *port = bus->sysdata; struct xilinx_pcie *pcie = bus->sysdata;
if (!xilinx_pcie_valid_device(bus, devfn)) if (!xilinx_pcie_valid_device(bus, devfn))
return NULL; return NULL;
return port->reg_base + PCIE_ECAM_OFFSET(bus->number, devfn, where); return pcie->reg_base + PCIE_ECAM_OFFSET(bus->number, devfn, where);
} }
/* PCIe operations */ /* PCIe operations */
...@@ -215,7 +215,7 @@ static int xilinx_msi_set_affinity(struct irq_data *d, const struct cpumask *mas ...@@ -215,7 +215,7 @@ static int xilinx_msi_set_affinity(struct irq_data *d, const struct cpumask *mas
static void xilinx_compose_msi_msg(struct irq_data *data, struct msi_msg *msg) static void xilinx_compose_msi_msg(struct irq_data *data, struct msi_msg *msg)
{ {
struct xilinx_pcie_port *pcie = irq_data_get_irq_chip_data(data); struct xilinx_pcie *pcie = irq_data_get_irq_chip_data(data);
phys_addr_t pa = ALIGN_DOWN(virt_to_phys(pcie), SZ_4K); phys_addr_t pa = ALIGN_DOWN(virt_to_phys(pcie), SZ_4K);
msg->address_lo = lower_32_bits(pa); msg->address_lo = lower_32_bits(pa);
...@@ -232,14 +232,14 @@ static struct irq_chip xilinx_msi_bottom_chip = { ...@@ -232,14 +232,14 @@ static struct irq_chip xilinx_msi_bottom_chip = {
static int xilinx_msi_domain_alloc(struct irq_domain *domain, unsigned int virq, static int xilinx_msi_domain_alloc(struct irq_domain *domain, unsigned int virq,
unsigned int nr_irqs, void *args) unsigned int nr_irqs, void *args)
{ {
struct xilinx_pcie_port *port = domain->host_data; struct xilinx_pcie *pcie = domain->host_data;
int hwirq, i; int hwirq, i;
mutex_lock(&port->map_lock); mutex_lock(&pcie->map_lock);
hwirq = bitmap_find_free_region(port->msi_map, XILINX_NUM_MSI_IRQS, order_base_2(nr_irqs)); hwirq = bitmap_find_free_region(pcie->msi_map, XILINX_NUM_MSI_IRQS, order_base_2(nr_irqs));
mutex_unlock(&port->map_lock); mutex_unlock(&pcie->map_lock);
if (hwirq < 0) if (hwirq < 0)
return -ENOSPC; return -ENOSPC;
...@@ -256,13 +256,13 @@ static void xilinx_msi_domain_free(struct irq_domain *domain, unsigned int virq, ...@@ -256,13 +256,13 @@ static void xilinx_msi_domain_free(struct irq_domain *domain, unsigned int virq,
unsigned int nr_irqs) unsigned int nr_irqs)
{ {
struct irq_data *d = irq_domain_get_irq_data(domain, virq); struct irq_data *d = irq_domain_get_irq_data(domain, virq);
struct xilinx_pcie_port *port = domain->host_data; struct xilinx_pcie *pcie = domain->host_data;
mutex_lock(&port->map_lock); mutex_lock(&pcie->map_lock);
bitmap_release_region(port->msi_map, d->hwirq, order_base_2(nr_irqs)); bitmap_release_region(pcie->msi_map, d->hwirq, order_base_2(nr_irqs));
mutex_unlock(&port->map_lock); mutex_unlock(&pcie->map_lock);
} }
static const struct irq_domain_ops xilinx_msi_domain_ops = { static const struct irq_domain_ops xilinx_msi_domain_ops = {
...@@ -275,7 +275,7 @@ static struct msi_domain_info xilinx_msi_info = { ...@@ -275,7 +275,7 @@ static struct msi_domain_info xilinx_msi_info = {
.chip = &xilinx_msi_top_chip, .chip = &xilinx_msi_top_chip,
}; };
static int xilinx_allocate_msi_domains(struct xilinx_pcie_port *pcie) static int xilinx_allocate_msi_domains(struct xilinx_pcie *pcie)
{ {
struct fwnode_handle *fwnode = dev_fwnode(pcie->dev); struct fwnode_handle *fwnode = dev_fwnode(pcie->dev);
struct irq_domain *parent; struct irq_domain *parent;
...@@ -298,7 +298,7 @@ static int xilinx_allocate_msi_domains(struct xilinx_pcie_port *pcie) ...@@ -298,7 +298,7 @@ static int xilinx_allocate_msi_domains(struct xilinx_pcie_port *pcie)
return 0; return 0;
} }
static void xilinx_free_msi_domains(struct xilinx_pcie_port *pcie) static void xilinx_free_msi_domains(struct xilinx_pcie *pcie)
{ {
struct irq_domain *parent = pcie->msi_domain->parent; struct irq_domain *parent = pcie->msi_domain->parent;
...@@ -342,13 +342,13 @@ static const struct irq_domain_ops intx_domain_ops = { ...@@ -342,13 +342,13 @@ static const struct irq_domain_ops intx_domain_ops = {
*/ */
static irqreturn_t xilinx_pcie_intr_handler(int irq, void *data) static irqreturn_t xilinx_pcie_intr_handler(int irq, void *data)
{ {
struct xilinx_pcie_port *port = (struct xilinx_pcie_port *)data; struct xilinx_pcie *pcie = (struct xilinx_pcie *)data;
struct device *dev = port->dev; struct device *dev = pcie->dev;
u32 val, mask, status; u32 val, mask, status;
/* Read interrupt decode and mask registers */ /* Read interrupt decode and mask registers */
val = pcie_read(port, XILINX_PCIE_REG_IDR); val = pcie_read(pcie, XILINX_PCIE_REG_IDR);
mask = pcie_read(port, XILINX_PCIE_REG_IMR); mask = pcie_read(pcie, XILINX_PCIE_REG_IMR);
status = val & mask; status = val & mask;
if (!status) if (!status)
...@@ -371,23 +371,23 @@ static irqreturn_t xilinx_pcie_intr_handler(int irq, void *data) ...@@ -371,23 +371,23 @@ static irqreturn_t xilinx_pcie_intr_handler(int irq, void *data)
if (status & XILINX_PCIE_INTR_CORRECTABLE) { if (status & XILINX_PCIE_INTR_CORRECTABLE) {
dev_warn(dev, "Correctable error message\n"); dev_warn(dev, "Correctable error message\n");
xilinx_pcie_clear_err_interrupts(port); xilinx_pcie_clear_err_interrupts(pcie);
} }
if (status & XILINX_PCIE_INTR_NONFATAL) { if (status & XILINX_PCIE_INTR_NONFATAL) {
dev_warn(dev, "Non fatal error message\n"); dev_warn(dev, "Non fatal error message\n");
xilinx_pcie_clear_err_interrupts(port); xilinx_pcie_clear_err_interrupts(pcie);
} }
if (status & XILINX_PCIE_INTR_FATAL) { if (status & XILINX_PCIE_INTR_FATAL) {
dev_warn(dev, "Fatal error message\n"); dev_warn(dev, "Fatal error message\n");
xilinx_pcie_clear_err_interrupts(port); xilinx_pcie_clear_err_interrupts(pcie);
} }
if (status & (XILINX_PCIE_INTR_INTX | XILINX_PCIE_INTR_MSI)) { if (status & (XILINX_PCIE_INTR_INTX | XILINX_PCIE_INTR_MSI)) {
struct irq_domain *domain; struct irq_domain *domain;
val = pcie_read(port, XILINX_PCIE_REG_RPIFR1); val = pcie_read(pcie, XILINX_PCIE_REG_RPIFR1);
/* Check whether interrupt valid */ /* Check whether interrupt valid */
if (!(val & XILINX_PCIE_RPIFR1_INTR_VALID)) { if (!(val & XILINX_PCIE_RPIFR1_INTR_VALID)) {
...@@ -397,17 +397,17 @@ static irqreturn_t xilinx_pcie_intr_handler(int irq, void *data) ...@@ -397,17 +397,17 @@ static irqreturn_t xilinx_pcie_intr_handler(int irq, void *data)
/* Decode the IRQ number */ /* Decode the IRQ number */
if (val & XILINX_PCIE_RPIFR1_MSI_INTR) { if (val & XILINX_PCIE_RPIFR1_MSI_INTR) {
val = pcie_read(port, XILINX_PCIE_REG_RPIFR2) & val = pcie_read(pcie, XILINX_PCIE_REG_RPIFR2) &
XILINX_PCIE_RPIFR2_MSG_DATA; XILINX_PCIE_RPIFR2_MSG_DATA;
domain = port->msi_domain->parent; domain = pcie->msi_domain->parent;
} else { } else {
val = (val & XILINX_PCIE_RPIFR1_INTR_MASK) >> val = (val & XILINX_PCIE_RPIFR1_INTR_MASK) >>
XILINX_PCIE_RPIFR1_INTR_SHIFT; XILINX_PCIE_RPIFR1_INTR_SHIFT;
domain = port->leg_domain; domain = pcie->leg_domain;
} }
/* Clear interrupt FIFO register 1 */ /* Clear interrupt FIFO register 1 */
pcie_write(port, XILINX_PCIE_RPIFR1_ALL_MASK, pcie_write(pcie, XILINX_PCIE_RPIFR1_ALL_MASK,
XILINX_PCIE_REG_RPIFR1); XILINX_PCIE_REG_RPIFR1);
generic_handle_domain_irq(domain, val); generic_handle_domain_irq(domain, val);
...@@ -442,20 +442,20 @@ static irqreturn_t xilinx_pcie_intr_handler(int irq, void *data) ...@@ -442,20 +442,20 @@ static irqreturn_t xilinx_pcie_intr_handler(int irq, void *data)
error: error:
/* Clear the Interrupt Decode register */ /* Clear the Interrupt Decode register */
pcie_write(port, status, XILINX_PCIE_REG_IDR); pcie_write(pcie, status, XILINX_PCIE_REG_IDR);
return IRQ_HANDLED; return IRQ_HANDLED;
} }
/** /**
* xilinx_pcie_init_irq_domain - Initialize IRQ domain * xilinx_pcie_init_irq_domain - Initialize IRQ domain
* @port: PCIe port information * @pcie: PCIe port information
* *
* Return: '0' on success and error value on failure * Return: '0' on success and error value on failure
*/ */
static int xilinx_pcie_init_irq_domain(struct xilinx_pcie_port *port) static int xilinx_pcie_init_irq_domain(struct xilinx_pcie *pcie)
{ {
struct device *dev = port->dev; struct device *dev = pcie->dev;
struct device_node *pcie_intc_node; struct device_node *pcie_intc_node;
int ret; int ret;
...@@ -466,25 +466,25 @@ static int xilinx_pcie_init_irq_domain(struct xilinx_pcie_port *port) ...@@ -466,25 +466,25 @@ static int xilinx_pcie_init_irq_domain(struct xilinx_pcie_port *port)
return -ENODEV; return -ENODEV;
} }
port->leg_domain = irq_domain_add_linear(pcie_intc_node, PCI_NUM_INTX, pcie->leg_domain = irq_domain_add_linear(pcie_intc_node, PCI_NUM_INTX,
&intx_domain_ops, &intx_domain_ops,
port); pcie);
of_node_put(pcie_intc_node); of_node_put(pcie_intc_node);
if (!port->leg_domain) { if (!pcie->leg_domain) {
dev_err(dev, "Failed to get a INTx IRQ domain\n"); dev_err(dev, "Failed to get a INTx IRQ domain\n");
return -ENODEV; return -ENODEV;
} }
/* Setup MSI */ /* Setup MSI */
if (IS_ENABLED(CONFIG_PCI_MSI)) { if (IS_ENABLED(CONFIG_PCI_MSI)) {
phys_addr_t pa = ALIGN_DOWN(virt_to_phys(port), SZ_4K); phys_addr_t pa = ALIGN_DOWN(virt_to_phys(pcie), SZ_4K);
ret = xilinx_allocate_msi_domains(port); ret = xilinx_allocate_msi_domains(pcie);
if (ret) if (ret)
return ret; return ret;
pcie_write(port, upper_32_bits(pa), XILINX_PCIE_REG_MSIBASE1); pcie_write(pcie, upper_32_bits(pa), XILINX_PCIE_REG_MSIBASE1);
pcie_write(port, lower_32_bits(pa), XILINX_PCIE_REG_MSIBASE2); pcie_write(pcie, lower_32_bits(pa), XILINX_PCIE_REG_MSIBASE2);
} }
return 0; return 0;
...@@ -492,44 +492,44 @@ static int xilinx_pcie_init_irq_domain(struct xilinx_pcie_port *port) ...@@ -492,44 +492,44 @@ static int xilinx_pcie_init_irq_domain(struct xilinx_pcie_port *port)
/** /**
* xilinx_pcie_init_port - Initialize hardware * xilinx_pcie_init_port - Initialize hardware
* @port: PCIe port information * @pcie: PCIe port information
*/ */
static void xilinx_pcie_init_port(struct xilinx_pcie_port *port) static void xilinx_pcie_init_port(struct xilinx_pcie *pcie)
{ {
struct device *dev = port->dev; struct device *dev = pcie->dev;
if (xilinx_pcie_link_up(port)) if (xilinx_pcie_link_up(pcie))
dev_info(dev, "PCIe Link is UP\n"); dev_info(dev, "PCIe Link is UP\n");
else else
dev_info(dev, "PCIe Link is DOWN\n"); dev_info(dev, "PCIe Link is DOWN\n");
/* Disable all interrupts */ /* Disable all interrupts */
pcie_write(port, ~XILINX_PCIE_IDR_ALL_MASK, pcie_write(pcie, ~XILINX_PCIE_IDR_ALL_MASK,
XILINX_PCIE_REG_IMR); XILINX_PCIE_REG_IMR);
/* Clear pending interrupts */ /* Clear pending interrupts */
pcie_write(port, pcie_read(port, XILINX_PCIE_REG_IDR) & pcie_write(pcie, pcie_read(pcie, XILINX_PCIE_REG_IDR) &
XILINX_PCIE_IMR_ALL_MASK, XILINX_PCIE_IMR_ALL_MASK,
XILINX_PCIE_REG_IDR); XILINX_PCIE_REG_IDR);
/* Enable all interrupts we handle */ /* Enable all interrupts we handle */
pcie_write(port, XILINX_PCIE_IMR_ENABLE_MASK, XILINX_PCIE_REG_IMR); pcie_write(pcie, XILINX_PCIE_IMR_ENABLE_MASK, XILINX_PCIE_REG_IMR);
/* Enable the Bridge enable bit */ /* Enable the Bridge enable bit */
pcie_write(port, pcie_read(port, XILINX_PCIE_REG_RPSC) | pcie_write(pcie, pcie_read(pcie, XILINX_PCIE_REG_RPSC) |
XILINX_PCIE_REG_RPSC_BEN, XILINX_PCIE_REG_RPSC_BEN,
XILINX_PCIE_REG_RPSC); XILINX_PCIE_REG_RPSC);
} }
/** /**
* xilinx_pcie_parse_dt - Parse Device tree * xilinx_pcie_parse_dt - Parse Device tree
* @port: PCIe port information * @pcie: PCIe port information
* *
* Return: '0' on success and error value on failure * Return: '0' on success and error value on failure
*/ */
static int xilinx_pcie_parse_dt(struct xilinx_pcie_port *port) static int xilinx_pcie_parse_dt(struct xilinx_pcie *pcie)
{ {
struct device *dev = port->dev; struct device *dev = pcie->dev;
struct device_node *node = dev->of_node; struct device_node *node = dev->of_node;
struct resource regs; struct resource regs;
unsigned int irq; unsigned int irq;
...@@ -541,14 +541,14 @@ static int xilinx_pcie_parse_dt(struct xilinx_pcie_port *port) ...@@ -541,14 +541,14 @@ static int xilinx_pcie_parse_dt(struct xilinx_pcie_port *port)
return err; return err;
} }
port->reg_base = devm_pci_remap_cfg_resource(dev, &regs); pcie->reg_base = devm_pci_remap_cfg_resource(dev, &regs);
if (IS_ERR(port->reg_base)) if (IS_ERR(pcie->reg_base))
return PTR_ERR(port->reg_base); return PTR_ERR(pcie->reg_base);
irq = irq_of_parse_and_map(node, 0); irq = irq_of_parse_and_map(node, 0);
err = devm_request_irq(dev, irq, xilinx_pcie_intr_handler, err = devm_request_irq(dev, irq, xilinx_pcie_intr_handler,
IRQF_SHARED | IRQF_NO_THREAD, IRQF_SHARED | IRQF_NO_THREAD,
"xilinx-pcie", port); "xilinx-pcie", pcie);
if (err) { if (err) {
dev_err(dev, "unable to request irq %d\n", irq); dev_err(dev, "unable to request irq %d\n", irq);
return err; return err;
...@@ -566,41 +566,41 @@ static int xilinx_pcie_parse_dt(struct xilinx_pcie_port *port) ...@@ -566,41 +566,41 @@ static int xilinx_pcie_parse_dt(struct xilinx_pcie_port *port)
static int xilinx_pcie_probe(struct platform_device *pdev) static int xilinx_pcie_probe(struct platform_device *pdev)
{ {
struct device *dev = &pdev->dev; struct device *dev = &pdev->dev;
struct xilinx_pcie_port *port; struct xilinx_pcie *pcie;
struct pci_host_bridge *bridge; struct pci_host_bridge *bridge;
int err; int err;
if (!dev->of_node) if (!dev->of_node)
return -ENODEV; return -ENODEV;
bridge = devm_pci_alloc_host_bridge(dev, sizeof(*port)); bridge = devm_pci_alloc_host_bridge(dev, sizeof(*pcie));
if (!bridge) if (!bridge)
return -ENODEV; return -ENODEV;
port = pci_host_bridge_priv(bridge); pcie = pci_host_bridge_priv(bridge);
mutex_init(&port->map_lock); mutex_init(&pcie->map_lock);
port->dev = dev; pcie->dev = dev;
err = xilinx_pcie_parse_dt(port); err = xilinx_pcie_parse_dt(pcie);
if (err) { if (err) {
dev_err(dev, "Parsing DT failed\n"); dev_err(dev, "Parsing DT failed\n");
return err; return err;
} }
xilinx_pcie_init_port(port); xilinx_pcie_init_port(pcie);
err = xilinx_pcie_init_irq_domain(port); err = xilinx_pcie_init_irq_domain(pcie);
if (err) { if (err) {
dev_err(dev, "Failed creating IRQ Domain\n"); dev_err(dev, "Failed creating IRQ Domain\n");
return err; return err;
} }
bridge->sysdata = port; bridge->sysdata = pcie;
bridge->ops = &xilinx_pcie_ops; bridge->ops = &xilinx_pcie_ops;
err = pci_host_probe(bridge); err = pci_host_probe(bridge);
if (err) if (err)
xilinx_free_msi_domains(port); xilinx_free_msi_domains(pcie);
return err; return err;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment