forked from Minki/linux
PCI: dwc: Move "dbi", "dbi2", and "addr_space" resource setup into common code
Most DWC drivers use the common register resource names "dbi", "dbi2", and "addr_space", so let's move their setup into the DWC common code. This means 'dbi_base' in particular is setup later, but it looks like no drivers touch DBI registers before dw_pcie_host_init or dw_pcie_ep_init. Link: https://lore.kernel.org/r/20201105211159.1814485-4-robh@kernel.org Tested-by: Marek Szyprowski <m.szyprowski@samsung.com> Signed-off-by: Rob Herring <robh@kernel.org> Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> Acked-by: Jingoo Han <jingoohan1@gmail.com> Cc: Kishon Vijay Abraham I <kishon@ti.com> Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> Cc: Bjorn Helgaas <bhelgaas@google.com> Cc: Murali Karicheri <m-karicheri2@ti.com> Cc: Minghuan Lian <minghuan.Lian@nxp.com> Cc: Mingkai Hu <mingkai.hu@nxp.com> Cc: Roy Zang <roy.zang@nxp.com> Cc: Jonathan Chocron <jonnyc@amazon.com> Cc: Jesper Nilsson <jesper.nilsson@axis.com> Cc: Gustavo Pimentel <gustavo.pimentel@synopsys.com> Cc: Xiaowei Song <songxiaowei@hisilicon.com> Cc: Binghui Wang <wangbinghui@hisilicon.com> Cc: Andy Gross <agross@kernel.org> Cc: Bjorn Andersson <bjorn.andersson@linaro.org> Cc: Stanimir Varbanov <svarbanov@mm-sol.com> Cc: Pratyush Anand <pratyush.anand@gmail.com> Cc: Thierry Reding <thierry.reding@gmail.com> Cc: Jonathan Hunter <jonathanh@nvidia.com> Cc: Kunihiko Hayashi <hayashi.kunihiko@socionext.com> Cc: Masahiro Yamada <yamada.masahiro@socionext.com> Cc: linux-omap@vger.kernel.org Cc: linuxppc-dev@lists.ozlabs.org Cc: linux-arm-kernel@axis.com Cc: linux-arm-msm@vger.kernel.org Cc: linux-tegra@vger.kernel.org
This commit is contained in:
parent
1d567aac46
commit
a0fd361db8
@ -578,7 +578,6 @@ static int __init dra7xx_add_pcie_ep(struct dra7xx_pcie *dra7xx,
|
|||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
struct dw_pcie_ep *ep;
|
struct dw_pcie_ep *ep;
|
||||||
struct resource *res;
|
|
||||||
struct device *dev = &pdev->dev;
|
struct device *dev = &pdev->dev;
|
||||||
struct dw_pcie *pci = dra7xx->pci;
|
struct dw_pcie *pci = dra7xx->pci;
|
||||||
|
|
||||||
@ -594,13 +593,6 @@ static int __init dra7xx_add_pcie_ep(struct dra7xx_pcie *dra7xx,
|
|||||||
if (IS_ERR(pci->dbi_base2))
|
if (IS_ERR(pci->dbi_base2))
|
||||||
return PTR_ERR(pci->dbi_base2);
|
return PTR_ERR(pci->dbi_base2);
|
||||||
|
|
||||||
res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "addr_space");
|
|
||||||
if (!res)
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
ep->phys_base = res->start;
|
|
||||||
ep->addr_size = resource_size(res);
|
|
||||||
|
|
||||||
ret = dw_pcie_ep_init(ep);
|
ret = dw_pcie_ep_init(ep);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
dev_err(dev, "failed to initialize endpoint\n");
|
dev_err(dev, "failed to initialize endpoint\n");
|
||||||
|
@ -977,33 +977,6 @@ static const struct dw_pcie_ep_ops ks_pcie_am654_ep_ops = {
|
|||||||
.get_features = &ks_pcie_am654_get_features,
|
.get_features = &ks_pcie_am654_get_features,
|
||||||
};
|
};
|
||||||
|
|
||||||
static int __init ks_pcie_add_pcie_ep(struct keystone_pcie *ks_pcie,
|
|
||||||
struct platform_device *pdev)
|
|
||||||
{
|
|
||||||
int ret;
|
|
||||||
struct dw_pcie_ep *ep;
|
|
||||||
struct resource *res;
|
|
||||||
struct device *dev = &pdev->dev;
|
|
||||||
struct dw_pcie *pci = ks_pcie->pci;
|
|
||||||
|
|
||||||
ep = &pci->ep;
|
|
||||||
|
|
||||||
res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "addr_space");
|
|
||||||
if (!res)
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
ep->phys_base = res->start;
|
|
||||||
ep->addr_size = resource_size(res);
|
|
||||||
|
|
||||||
ret = dw_pcie_ep_init(ep);
|
|
||||||
if (ret) {
|
|
||||||
dev_err(dev, "failed to initialize endpoint\n");
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void ks_pcie_disable_phy(struct keystone_pcie *ks_pcie)
|
static void ks_pcie_disable_phy(struct keystone_pcie *ks_pcie)
|
||||||
{
|
{
|
||||||
int num_lanes = ks_pcie->num_lanes;
|
int num_lanes = ks_pcie->num_lanes;
|
||||||
@ -1313,7 +1286,7 @@ static int __init ks_pcie_probe(struct platform_device *pdev)
|
|||||||
}
|
}
|
||||||
|
|
||||||
pci->ep.ops = ep_ops;
|
pci->ep.ops = ep_ops;
|
||||||
ret = ks_pcie_add_pcie_ep(ks_pcie, pdev);
|
ret = dw_pcie_ep_init(&pci->ep);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
goto err_get_sync;
|
goto err_get_sync;
|
||||||
break;
|
break;
|
||||||
|
@ -18,8 +18,6 @@
|
|||||||
|
|
||||||
#include "pcie-designware.h"
|
#include "pcie-designware.h"
|
||||||
|
|
||||||
#define PCIE_DBI2_OFFSET 0x1000 /* DBI2 base address*/
|
|
||||||
|
|
||||||
#define to_ls_pcie_ep(x) dev_get_drvdata((x)->dev)
|
#define to_ls_pcie_ep(x) dev_get_drvdata((x)->dev)
|
||||||
|
|
||||||
struct ls_pcie_ep_drvdata {
|
struct ls_pcie_ep_drvdata {
|
||||||
@ -124,34 +122,6 @@ static const struct of_device_id ls_pcie_ep_of_match[] = {
|
|||||||
{ },
|
{ },
|
||||||
};
|
};
|
||||||
|
|
||||||
static int __init ls_add_pcie_ep(struct ls_pcie_ep *pcie,
|
|
||||||
struct platform_device *pdev)
|
|
||||||
{
|
|
||||||
struct dw_pcie *pci = pcie->pci;
|
|
||||||
struct device *dev = pci->dev;
|
|
||||||
struct dw_pcie_ep *ep;
|
|
||||||
struct resource *res;
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
ep = &pci->ep;
|
|
||||||
ep->ops = pcie->drvdata->ops;
|
|
||||||
|
|
||||||
res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "addr_space");
|
|
||||||
if (!res)
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
ep->phys_base = res->start;
|
|
||||||
ep->addr_size = resource_size(res);
|
|
||||||
|
|
||||||
ret = dw_pcie_ep_init(ep);
|
|
||||||
if (ret) {
|
|
||||||
dev_err(dev, "failed to initialize endpoint\n");
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int __init ls_pcie_ep_probe(struct platform_device *pdev)
|
static int __init ls_pcie_ep_probe(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
struct device *dev = &pdev->dev;
|
struct device *dev = &pdev->dev;
|
||||||
@ -159,7 +129,6 @@ static int __init ls_pcie_ep_probe(struct platform_device *pdev)
|
|||||||
struct ls_pcie_ep *pcie;
|
struct ls_pcie_ep *pcie;
|
||||||
struct pci_epc_features *ls_epc;
|
struct pci_epc_features *ls_epc;
|
||||||
struct resource *dbi_base;
|
struct resource *dbi_base;
|
||||||
int ret;
|
|
||||||
|
|
||||||
pcie = devm_kzalloc(dev, sizeof(*pcie), GFP_KERNEL);
|
pcie = devm_kzalloc(dev, sizeof(*pcie), GFP_KERNEL);
|
||||||
if (!pcie)
|
if (!pcie)
|
||||||
@ -188,13 +157,11 @@ static int __init ls_pcie_ep_probe(struct platform_device *pdev)
|
|||||||
if (IS_ERR(pci->dbi_base))
|
if (IS_ERR(pci->dbi_base))
|
||||||
return PTR_ERR(pci->dbi_base);
|
return PTR_ERR(pci->dbi_base);
|
||||||
|
|
||||||
pci->dbi_base2 = pci->dbi_base + PCIE_DBI2_OFFSET;
|
pci->ep.ops = &ls_pcie_ep_ops;
|
||||||
|
|
||||||
platform_set_drvdata(pdev, pcie);
|
platform_set_drvdata(pdev, pcie);
|
||||||
|
|
||||||
ret = ls_add_pcie_ep(pcie, pdev);
|
return dw_pcie_ep_init(&pci->ep);
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct platform_driver ls_pcie_ep_driver = {
|
static struct platform_driver ls_pcie_ep_driver = {
|
||||||
|
@ -347,7 +347,6 @@ static int al_pcie_probe(struct platform_device *pdev)
|
|||||||
struct device *dev = &pdev->dev;
|
struct device *dev = &pdev->dev;
|
||||||
struct resource *controller_res;
|
struct resource *controller_res;
|
||||||
struct resource *ecam_res;
|
struct resource *ecam_res;
|
||||||
struct resource *dbi_res;
|
|
||||||
struct al_pcie *al_pcie;
|
struct al_pcie *al_pcie;
|
||||||
struct dw_pcie *pci;
|
struct dw_pcie *pci;
|
||||||
|
|
||||||
@ -365,11 +364,6 @@ static int al_pcie_probe(struct platform_device *pdev)
|
|||||||
al_pcie->pci = pci;
|
al_pcie->pci = pci;
|
||||||
al_pcie->dev = dev;
|
al_pcie->dev = dev;
|
||||||
|
|
||||||
dbi_res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "dbi");
|
|
||||||
pci->dbi_base = devm_pci_remap_cfg_resource(dev, dbi_res);
|
|
||||||
if (IS_ERR(pci->dbi_base))
|
|
||||||
return PTR_ERR(pci->dbi_base);
|
|
||||||
|
|
||||||
ecam_res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "config");
|
ecam_res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "config");
|
||||||
if (!ecam_res) {
|
if (!ecam_res) {
|
||||||
dev_err(dev, "couldn't find 'config' reg in DT\n");
|
dev_err(dev, "couldn't find 'config' reg in DT\n");
|
||||||
@ -386,8 +380,7 @@ static int al_pcie_probe(struct platform_device *pdev)
|
|||||||
return PTR_ERR(al_pcie->controller_base);
|
return PTR_ERR(al_pcie->controller_base);
|
||||||
}
|
}
|
||||||
|
|
||||||
dev_dbg(dev, "From DT: dbi_base: %pR, controller_base: %pR\n",
|
dev_dbg(dev, "From DT: controller_base: %pR\n", controller_res);
|
||||||
dbi_res, controller_res);
|
|
||||||
|
|
||||||
platform_set_drvdata(pdev, al_pcie);
|
platform_set_drvdata(pdev, al_pcie);
|
||||||
|
|
||||||
|
@ -403,38 +403,6 @@ static const struct dw_pcie_ep_ops pcie_ep_ops = {
|
|||||||
.raise_irq = artpec6_pcie_raise_irq,
|
.raise_irq = artpec6_pcie_raise_irq,
|
||||||
};
|
};
|
||||||
|
|
||||||
static int artpec6_add_pcie_ep(struct artpec6_pcie *artpec6_pcie,
|
|
||||||
struct platform_device *pdev)
|
|
||||||
{
|
|
||||||
int ret;
|
|
||||||
struct dw_pcie_ep *ep;
|
|
||||||
struct resource *res;
|
|
||||||
struct device *dev = &pdev->dev;
|
|
||||||
struct dw_pcie *pci = artpec6_pcie->pci;
|
|
||||||
|
|
||||||
ep = &pci->ep;
|
|
||||||
ep->ops = &pcie_ep_ops;
|
|
||||||
|
|
||||||
pci->dbi_base2 = devm_platform_ioremap_resource_byname(pdev, "dbi2");
|
|
||||||
if (IS_ERR(pci->dbi_base2))
|
|
||||||
return PTR_ERR(pci->dbi_base2);
|
|
||||||
|
|
||||||
res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "addr_space");
|
|
||||||
if (!res)
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
ep->phys_base = res->start;
|
|
||||||
ep->addr_size = resource_size(res);
|
|
||||||
|
|
||||||
ret = dw_pcie_ep_init(ep);
|
|
||||||
if (ret) {
|
|
||||||
dev_err(dev, "failed to initialize endpoint\n");
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int artpec6_pcie_probe(struct platform_device *pdev)
|
static int artpec6_pcie_probe(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
struct device *dev = &pdev->dev;
|
struct device *dev = &pdev->dev;
|
||||||
@ -469,10 +437,6 @@ static int artpec6_pcie_probe(struct platform_device *pdev)
|
|||||||
artpec6_pcie->variant = variant;
|
artpec6_pcie->variant = variant;
|
||||||
artpec6_pcie->mode = mode;
|
artpec6_pcie->mode = mode;
|
||||||
|
|
||||||
pci->dbi_base = devm_platform_ioremap_resource_byname(pdev, "dbi");
|
|
||||||
if (IS_ERR(pci->dbi_base))
|
|
||||||
return PTR_ERR(pci->dbi_base);
|
|
||||||
|
|
||||||
artpec6_pcie->phy_base =
|
artpec6_pcie->phy_base =
|
||||||
devm_platform_ioremap_resource_byname(pdev, "phy");
|
devm_platform_ioremap_resource_byname(pdev, "phy");
|
||||||
if (IS_ERR(artpec6_pcie->phy_base))
|
if (IS_ERR(artpec6_pcie->phy_base))
|
||||||
@ -504,9 +468,10 @@ static int artpec6_pcie_probe(struct platform_device *pdev)
|
|||||||
val = artpec6_pcie_readl(artpec6_pcie, PCIECFG);
|
val = artpec6_pcie_readl(artpec6_pcie, PCIECFG);
|
||||||
val &= ~PCIECFG_DEVICE_TYPE_MASK;
|
val &= ~PCIECFG_DEVICE_TYPE_MASK;
|
||||||
artpec6_pcie_writel(artpec6_pcie, PCIECFG, val);
|
artpec6_pcie_writel(artpec6_pcie, PCIECFG, val);
|
||||||
ret = artpec6_add_pcie_ep(artpec6_pcie, pdev);
|
|
||||||
if (ret < 0)
|
pci->ep.ops = &pcie_ep_ops;
|
||||||
return ret;
|
|
||||||
|
return dw_pcie_ep_init(&pci->ep);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <linux/of.h>
|
#include <linux/of.h>
|
||||||
|
#include <linux/platform_device.h>
|
||||||
|
|
||||||
#include "pcie-designware.h"
|
#include "pcie-designware.h"
|
||||||
#include <linux/pci-epc.h>
|
#include <linux/pci-epc.h>
|
||||||
@ -676,20 +677,42 @@ int dw_pcie_ep_init(struct dw_pcie_ep *ep)
|
|||||||
int ret;
|
int ret;
|
||||||
void *addr;
|
void *addr;
|
||||||
u8 func_no;
|
u8 func_no;
|
||||||
|
struct resource *res;
|
||||||
struct pci_epc *epc;
|
struct pci_epc *epc;
|
||||||
struct dw_pcie *pci = to_dw_pcie_from_ep(ep);
|
struct dw_pcie *pci = to_dw_pcie_from_ep(ep);
|
||||||
struct device *dev = pci->dev;
|
struct device *dev = pci->dev;
|
||||||
|
struct platform_device *pdev = to_platform_device(dev);
|
||||||
struct device_node *np = dev->of_node;
|
struct device_node *np = dev->of_node;
|
||||||
const struct pci_epc_features *epc_features;
|
const struct pci_epc_features *epc_features;
|
||||||
struct dw_pcie_ep_func *ep_func;
|
struct dw_pcie_ep_func *ep_func;
|
||||||
|
|
||||||
INIT_LIST_HEAD(&ep->func_list);
|
INIT_LIST_HEAD(&ep->func_list);
|
||||||
|
|
||||||
if (!pci->dbi_base || !pci->dbi_base2) {
|
if (!pci->dbi_base) {
|
||||||
dev_err(dev, "dbi_base/dbi_base2 is not populated\n");
|
res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "dbi");
|
||||||
return -EINVAL;
|
pci->dbi_base = devm_pci_remap_cfg_resource(dev, res);
|
||||||
|
if (IS_ERR(pci->dbi_base))
|
||||||
|
return PTR_ERR(pci->dbi_base);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!pci->dbi_base2) {
|
||||||
|
res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "dbi2");
|
||||||
|
if (!res)
|
||||||
|
pci->dbi_base2 = pci->dbi_base + SZ_4K;
|
||||||
|
else {
|
||||||
|
pci->dbi_base2 = devm_pci_remap_cfg_resource(dev, res);
|
||||||
|
if (IS_ERR(pci->dbi_base2))
|
||||||
|
return PTR_ERR(pci->dbi_base2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "addr_space");
|
||||||
|
if (!res)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
ep->phys_base = res->start;
|
||||||
|
ep->addr_size = resource_size(res);
|
||||||
|
|
||||||
ret = of_property_read_u32(np, "num-ib-windows", &ep->num_ib_windows);
|
ret = of_property_read_u32(np, "num-ib-windows", &ep->num_ib_windows);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
dev_err(dev, "Unable to read *num-ib-windows* property\n");
|
dev_err(dev, "Unable to read *num-ib-windows* property\n");
|
||||||
|
@ -310,6 +310,13 @@ int dw_pcie_host_init(struct pcie_port *pp)
|
|||||||
dev_err(dev, "Missing *config* reg space\n");
|
dev_err(dev, "Missing *config* reg space\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!pci->dbi_base) {
|
||||||
|
struct resource *dbi_res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "dbi");
|
||||||
|
pci->dbi_base = devm_pci_remap_cfg_resource(dev, dbi_res);
|
||||||
|
if (IS_ERR(pci->dbi_base))
|
||||||
|
return PTR_ERR(pci->dbi_base);
|
||||||
|
}
|
||||||
|
|
||||||
bridge = devm_pci_alloc_host_bridge(dev, 0);
|
bridge = devm_pci_alloc_host_bridge(dev, 0);
|
||||||
if (!bridge)
|
if (!bridge)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
@ -139,43 +139,11 @@ static int dw_plat_add_pcie_port(struct dw_plat_pcie *dw_plat_pcie,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int dw_plat_add_pcie_ep(struct dw_plat_pcie *dw_plat_pcie,
|
|
||||||
struct platform_device *pdev)
|
|
||||||
{
|
|
||||||
int ret;
|
|
||||||
struct dw_pcie_ep *ep;
|
|
||||||
struct resource *res;
|
|
||||||
struct device *dev = &pdev->dev;
|
|
||||||
struct dw_pcie *pci = dw_plat_pcie->pci;
|
|
||||||
|
|
||||||
ep = &pci->ep;
|
|
||||||
ep->ops = &pcie_ep_ops;
|
|
||||||
|
|
||||||
pci->dbi_base2 = devm_platform_ioremap_resource_byname(pdev, "dbi2");
|
|
||||||
if (IS_ERR(pci->dbi_base2))
|
|
||||||
return PTR_ERR(pci->dbi_base2);
|
|
||||||
|
|
||||||
res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "addr_space");
|
|
||||||
if (!res)
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
ep->phys_base = res->start;
|
|
||||||
ep->addr_size = resource_size(res);
|
|
||||||
|
|
||||||
ret = dw_pcie_ep_init(ep);
|
|
||||||
if (ret) {
|
|
||||||
dev_err(dev, "Failed to initialize endpoint\n");
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int dw_plat_pcie_probe(struct platform_device *pdev)
|
static int dw_plat_pcie_probe(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
struct device *dev = &pdev->dev;
|
struct device *dev = &pdev->dev;
|
||||||
struct dw_plat_pcie *dw_plat_pcie;
|
struct dw_plat_pcie *dw_plat_pcie;
|
||||||
struct dw_pcie *pci;
|
struct dw_pcie *pci;
|
||||||
struct resource *res; /* Resource from DT */
|
|
||||||
int ret;
|
int ret;
|
||||||
const struct of_device_id *match;
|
const struct of_device_id *match;
|
||||||
const struct dw_plat_pcie_of_data *data;
|
const struct dw_plat_pcie_of_data *data;
|
||||||
@ -202,14 +170,6 @@ static int dw_plat_pcie_probe(struct platform_device *pdev)
|
|||||||
dw_plat_pcie->pci = pci;
|
dw_plat_pcie->pci = pci;
|
||||||
dw_plat_pcie->mode = mode;
|
dw_plat_pcie->mode = mode;
|
||||||
|
|
||||||
res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "dbi");
|
|
||||||
if (!res)
|
|
||||||
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
|
||||||
|
|
||||||
pci->dbi_base = devm_ioremap_resource(dev, res);
|
|
||||||
if (IS_ERR(pci->dbi_base))
|
|
||||||
return PTR_ERR(pci->dbi_base);
|
|
||||||
|
|
||||||
platform_set_drvdata(pdev, dw_plat_pcie);
|
platform_set_drvdata(pdev, dw_plat_pcie);
|
||||||
|
|
||||||
switch (dw_plat_pcie->mode) {
|
switch (dw_plat_pcie->mode) {
|
||||||
@ -225,9 +185,8 @@ static int dw_plat_pcie_probe(struct platform_device *pdev)
|
|||||||
if (!IS_ENABLED(CONFIG_PCIE_DW_PLAT_EP))
|
if (!IS_ENABLED(CONFIG_PCIE_DW_PLAT_EP))
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
||||||
ret = dw_plat_add_pcie_ep(dw_plat_pcie, pdev);
|
pci->ep.ops = &pcie_ep_ops;
|
||||||
if (ret < 0)
|
return dw_pcie_ep_init(&pci->ep);
|
||||||
return ret;
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
dev_err(dev, "INVALID device type %d\n", dw_plat_pcie->mode);
|
dev_err(dev, "INVALID device type %d\n", dw_plat_pcie->mode);
|
||||||
|
@ -237,10 +237,6 @@ static int intel_pcie_get_resources(struct platform_device *pdev)
|
|||||||
struct device *dev = pci->dev;
|
struct device *dev = pci->dev;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
pci->dbi_base = devm_platform_ioremap_resource_byname(pdev, "dbi");
|
|
||||||
if (IS_ERR(pci->dbi_base))
|
|
||||||
return PTR_ERR(pci->dbi_base);
|
|
||||||
|
|
||||||
lpp->core_clk = devm_clk_get(dev, NULL);
|
lpp->core_clk = devm_clk_get(dev, NULL);
|
||||||
if (IS_ERR(lpp->core_clk)) {
|
if (IS_ERR(lpp->core_clk)) {
|
||||||
ret = PTR_ERR(lpp->core_clk);
|
ret = PTR_ERR(lpp->core_clk);
|
||||||
|
@ -157,11 +157,6 @@ static long kirin_pcie_get_resource(struct kirin_pcie *kirin_pcie,
|
|||||||
if (IS_ERR(kirin_pcie->phy_base))
|
if (IS_ERR(kirin_pcie->phy_base))
|
||||||
return PTR_ERR(kirin_pcie->phy_base);
|
return PTR_ERR(kirin_pcie->phy_base);
|
||||||
|
|
||||||
kirin_pcie->pci->dbi_base =
|
|
||||||
devm_platform_ioremap_resource_byname(pdev, "dbi");
|
|
||||||
if (IS_ERR(kirin_pcie->pci->dbi_base))
|
|
||||||
return PTR_ERR(kirin_pcie->pci->dbi_base);
|
|
||||||
|
|
||||||
kirin_pcie->crgctrl =
|
kirin_pcie->crgctrl =
|
||||||
syscon_regmap_lookup_by_compatible("hisilicon,hi3660-crgctrl");
|
syscon_regmap_lookup_by_compatible("hisilicon,hi3660-crgctrl");
|
||||||
if (IS_ERR(kirin_pcie->crgctrl))
|
if (IS_ERR(kirin_pcie->crgctrl))
|
||||||
|
@ -1368,7 +1368,6 @@ static const struct dw_pcie_ops dw_pcie_ops = {
|
|||||||
static int qcom_pcie_probe(struct platform_device *pdev)
|
static int qcom_pcie_probe(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
struct device *dev = &pdev->dev;
|
struct device *dev = &pdev->dev;
|
||||||
struct resource *res;
|
|
||||||
struct pcie_port *pp;
|
struct pcie_port *pp;
|
||||||
struct dw_pcie *pci;
|
struct dw_pcie *pci;
|
||||||
struct qcom_pcie *pcie;
|
struct qcom_pcie *pcie;
|
||||||
@ -1407,13 +1406,6 @@ static int qcom_pcie_probe(struct platform_device *pdev)
|
|||||||
goto err_pm_runtime_put;
|
goto err_pm_runtime_put;
|
||||||
}
|
}
|
||||||
|
|
||||||
res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "dbi");
|
|
||||||
pci->dbi_base = devm_pci_remap_cfg_resource(dev, res);
|
|
||||||
if (IS_ERR(pci->dbi_base)) {
|
|
||||||
ret = PTR_ERR(pci->dbi_base);
|
|
||||||
goto err_pm_runtime_put;
|
|
||||||
}
|
|
||||||
|
|
||||||
pcie->elbi = devm_platform_ioremap_resource_byname(pdev, "elbi");
|
pcie->elbi = devm_platform_ioremap_resource_byname(pdev, "elbi");
|
||||||
if (IS_ERR(pcie->elbi)) {
|
if (IS_ERR(pcie->elbi)) {
|
||||||
ret = PTR_ERR(pcie->elbi);
|
ret = PTR_ERR(pcie->elbi);
|
||||||
|
@ -152,6 +152,8 @@ static int spear13xx_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 spear13xx_pcie *spear13xx_pcie = to_spear13xx_pcie(pci);
|
struct spear13xx_pcie *spear13xx_pcie = to_spear13xx_pcie(pci);
|
||||||
|
|
||||||
|
spear13xx_pcie->app_base = pci->dbi_base + 0x2000;
|
||||||
|
|
||||||
spear13xx_pcie_establish_link(spear13xx_pcie);
|
spear13xx_pcie_establish_link(spear13xx_pcie);
|
||||||
spear13xx_pcie_enable_interrupts(spear13xx_pcie);
|
spear13xx_pcie_enable_interrupts(spear13xx_pcie);
|
||||||
|
|
||||||
@ -203,7 +205,6 @@ static int spear13xx_pcie_probe(struct platform_device *pdev)
|
|||||||
struct dw_pcie *pci;
|
struct dw_pcie *pci;
|
||||||
struct spear13xx_pcie *spear13xx_pcie;
|
struct spear13xx_pcie *spear13xx_pcie;
|
||||||
struct device_node *np = dev->of_node;
|
struct device_node *np = dev->of_node;
|
||||||
struct resource *dbi_base;
|
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
spear13xx_pcie = devm_kzalloc(dev, sizeof(*spear13xx_pcie), GFP_KERNEL);
|
spear13xx_pcie = devm_kzalloc(dev, sizeof(*spear13xx_pcie), GFP_KERNEL);
|
||||||
@ -242,14 +243,6 @@ static int spear13xx_pcie_probe(struct platform_device *pdev)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
dbi_base = platform_get_resource_byname(pdev, IORESOURCE_MEM, "dbi");
|
|
||||||
pci->dbi_base = devm_pci_remap_cfg_resource(dev, dbi_base);
|
|
||||||
if (IS_ERR(pci->dbi_base)) {
|
|
||||||
ret = PTR_ERR(pci->dbi_base);
|
|
||||||
goto fail_clk;
|
|
||||||
}
|
|
||||||
spear13xx_pcie->app_base = pci->dbi_base + 0x2000;
|
|
||||||
|
|
||||||
if (of_property_read_bool(np, "st,pcie-is-gen1"))
|
if (of_property_read_bool(np, "st,pcie-is-gen1"))
|
||||||
pci->link_gen = 1;
|
pci->link_gen = 1;
|
||||||
|
|
||||||
|
@ -1907,19 +1907,12 @@ static int tegra_pcie_config_ep(struct tegra_pcie_dw *pcie,
|
|||||||
struct dw_pcie *pci = &pcie->pci;
|
struct dw_pcie *pci = &pcie->pci;
|
||||||
struct device *dev = pcie->dev;
|
struct device *dev = pcie->dev;
|
||||||
struct dw_pcie_ep *ep;
|
struct dw_pcie_ep *ep;
|
||||||
struct resource *res;
|
|
||||||
char *name;
|
char *name;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ep = &pci->ep;
|
ep = &pci->ep;
|
||||||
ep->ops = &pcie_ep_ops;
|
ep->ops = &pcie_ep_ops;
|
||||||
|
|
||||||
res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "addr_space");
|
|
||||||
if (!res)
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
ep->phys_base = res->start;
|
|
||||||
ep->addr_size = resource_size(res);
|
|
||||||
ep->page_size = SZ_64K;
|
ep->page_size = SZ_64K;
|
||||||
|
|
||||||
ret = gpiod_set_debounce(pcie->pex_rst_gpiod, PERST_DEBOUNCE_TIME);
|
ret = gpiod_set_debounce(pcie->pex_rst_gpiod, PERST_DEBOUNCE_TIME);
|
||||||
@ -1982,7 +1975,6 @@ static int tegra_pcie_dw_probe(struct platform_device *pdev)
|
|||||||
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 tegra_pcie_dw *pcie;
|
||||||
struct resource *dbi_res;
|
|
||||||
struct pcie_port *pp;
|
struct pcie_port *pp;
|
||||||
struct dw_pcie *pci;
|
struct dw_pcie *pci;
|
||||||
struct phy **phys;
|
struct phy **phys;
|
||||||
@ -2091,20 +2083,6 @@ static int tegra_pcie_dw_probe(struct platform_device *pdev)
|
|||||||
|
|
||||||
pcie->phys = phys;
|
pcie->phys = phys;
|
||||||
|
|
||||||
dbi_res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "dbi");
|
|
||||||
if (!dbi_res) {
|
|
||||||
dev_err(dev, "Failed to find \"dbi\" region\n");
|
|
||||||
return -ENODEV;
|
|
||||||
}
|
|
||||||
pcie->dbi_res = dbi_res;
|
|
||||||
|
|
||||||
pci->dbi_base = devm_ioremap_resource(dev, dbi_res);
|
|
||||||
if (IS_ERR(pci->dbi_base))
|
|
||||||
return PTR_ERR(pci->dbi_base);
|
|
||||||
|
|
||||||
/* Tegra HW locates DBI2 at a fixed offset from DBI */
|
|
||||||
pci->dbi_base2 = pci->dbi_base + 0x1000;
|
|
||||||
|
|
||||||
atu_dma_res = platform_get_resource_byname(pdev, IORESOURCE_MEM,
|
atu_dma_res = platform_get_resource_byname(pdev, IORESOURCE_MEM,
|
||||||
"atu_dma");
|
"atu_dma");
|
||||||
if (!atu_dma_res) {
|
if (!atu_dma_res) {
|
||||||
|
@ -218,35 +218,6 @@ static const struct dw_pcie_ep_ops uniphier_pcie_ep_ops = {
|
|||||||
.get_features = uniphier_pcie_get_features,
|
.get_features = uniphier_pcie_get_features,
|
||||||
};
|
};
|
||||||
|
|
||||||
static int uniphier_add_pcie_ep(struct uniphier_pcie_ep_priv *priv,
|
|
||||||
struct platform_device *pdev)
|
|
||||||
{
|
|
||||||
struct dw_pcie *pci = &priv->pci;
|
|
||||||
struct dw_pcie_ep *ep = &pci->ep;
|
|
||||||
struct device *dev = &pdev->dev;
|
|
||||||
struct resource *res;
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
ep->ops = &uniphier_pcie_ep_ops;
|
|
||||||
|
|
||||||
pci->dbi_base2 = devm_platform_ioremap_resource_byname(pdev, "dbi2");
|
|
||||||
if (IS_ERR(pci->dbi_base2))
|
|
||||||
return PTR_ERR(pci->dbi_base2);
|
|
||||||
|
|
||||||
res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "addr_space");
|
|
||||||
if (!res)
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
ep->phys_base = res->start;
|
|
||||||
ep->addr_size = resource_size(res);
|
|
||||||
|
|
||||||
ret = dw_pcie_ep_init(ep);
|
|
||||||
if (ret)
|
|
||||||
dev_err(dev, "Failed to initialize endpoint (%d)\n", ret);
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int uniphier_pcie_ep_enable(struct uniphier_pcie_ep_priv *priv)
|
static int uniphier_pcie_ep_enable(struct uniphier_pcie_ep_priv *priv)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
@ -300,7 +271,6 @@ static int uniphier_pcie_ep_probe(struct platform_device *pdev)
|
|||||||
{
|
{
|
||||||
struct device *dev = &pdev->dev;
|
struct device *dev = &pdev->dev;
|
||||||
struct uniphier_pcie_ep_priv *priv;
|
struct uniphier_pcie_ep_priv *priv;
|
||||||
struct resource *res;
|
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
|
priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
|
||||||
@ -314,11 +284,6 @@ static int uniphier_pcie_ep_probe(struct platform_device *pdev)
|
|||||||
priv->pci.dev = dev;
|
priv->pci.dev = dev;
|
||||||
priv->pci.ops = &dw_pcie_ops;
|
priv->pci.ops = &dw_pcie_ops;
|
||||||
|
|
||||||
res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "dbi");
|
|
||||||
priv->pci.dbi_base = devm_pci_remap_cfg_resource(dev, res);
|
|
||||||
if (IS_ERR(priv->pci.dbi_base))
|
|
||||||
return PTR_ERR(priv->pci.dbi_base);
|
|
||||||
|
|
||||||
priv->base = devm_platform_ioremap_resource_byname(pdev, "link");
|
priv->base = devm_platform_ioremap_resource_byname(pdev, "link");
|
||||||
if (IS_ERR(priv->base))
|
if (IS_ERR(priv->base))
|
||||||
return PTR_ERR(priv->base);
|
return PTR_ERR(priv->base);
|
||||||
@ -352,7 +317,8 @@ static int uniphier_pcie_ep_probe(struct platform_device *pdev)
|
|||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
return uniphier_add_pcie_ep(priv, pdev);
|
priv->pci.ep.ops = &uniphier_pcie_ep_ops;
|
||||||
|
return dw_pcie_ep_init(&priv->pci.ep);
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct pci_epc_features uniphier_pro5_data = {
|
static const struct pci_epc_features uniphier_pro5_data = {
|
||||||
|
@ -400,7 +400,6 @@ 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_priv *priv;
|
||||||
struct resource *res;
|
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
|
priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
|
||||||
@ -410,11 +409,6 @@ static int uniphier_pcie_probe(struct platform_device *pdev)
|
|||||||
priv->pci.dev = dev;
|
priv->pci.dev = dev;
|
||||||
priv->pci.ops = &dw_pcie_ops;
|
priv->pci.ops = &dw_pcie_ops;
|
||||||
|
|
||||||
res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "dbi");
|
|
||||||
priv->pci.dbi_base = devm_pci_remap_cfg_resource(dev, res);
|
|
||||||
if (IS_ERR(priv->pci.dbi_base))
|
|
||||||
return PTR_ERR(priv->pci.dbi_base);
|
|
||||||
|
|
||||||
priv->base = devm_platform_ioremap_resource_byname(pdev, "link");
|
priv->base = devm_platform_ioremap_resource_byname(pdev, "link");
|
||||||
if (IS_ERR(priv->base))
|
if (IS_ERR(priv->base))
|
||||||
return PTR_ERR(priv->base);
|
return PTR_ERR(priv->base);
|
||||||
|
Loading…
Reference in New Issue
Block a user