Skip to content

Commit 08f3890

Browse files
committed
Merge branch 'pci/controller/dwc'
- Move DBI accesses from dw_pcie_ep_init() to dw_pcie_ep_init_complete() so drivers for endpoints that require Refclk for DBI access, e.g., qcom and tegra194, can control when this happens (Manivannan Sadhasivam) - Add endpoint API kernel-doc (Manivannan Sadhasivam) - Remove .deinit() callback and instead call rcar_gen4_pcie_ep_deinit() explicitly from rcar-gen4, which was the only user (Manivannan Sadhasivam) - Rename dw_pcie_ep_exit() to dw_pcie_ep_deinit() to correspond with dw_pcie_ep_init() (Manivannan Sadhasivam) - Add dw_pcie_ep_cleanup() for drivers that need to clean up eDMA resources when PERST# is asserted, e.g., qcom, tegra194 (Manivannan Sadhasivam) - Rename dw_pcie_ep_init_complete() to dw_pcie_ep_init_registers() to better reflect the functionality (Manivannan Sadhasivam) - Call dw_pcie_ep_init_registers() directly from drivers instead of from dw_pcie_ep_init() so drivers, e.g., qcom and tegra194, can do it when Refclk is available (Manivannan Sadhasivam) - Remove the "core_init_notifier" flag, which previously identified drivers that required Refclk before DBI access, because it's now unnecessary (Manivannan Sadhasivam) * pci/controller/dwc: PCI: endpoint: Remove "core_init_notifier" flag PCI: dwc: ep: Call dw_pcie_ep_init_registers() API directly from all glue drivers PCI: dwc: ep: Rename dw_pcie_ep_init_complete() to dw_pcie_ep_init_registers() PCI: dwc: ep: Introduce dw_pcie_ep_cleanup() API for drivers supporting PERST# PCI: dwc: ep: Rename dw_pcie_ep_exit() to dw_pcie_ep_deinit() PCI: dwc: ep: Remove deinit() callback from struct dw_pcie_ep_ops PCI: dwc: ep: Add Kernel-doc comments for APIs PCI: dwc: ep: Fix DBI access failure for drivers requiring refclk from host
2 parents ec54985 + a01e721 commit 08f3890

20 files changed

+338
-111
lines changed

drivers/pci/controller/cadence/pcie-cadence-ep.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -743,6 +743,8 @@ int cdns_pcie_ep_setup(struct cdns_pcie_ep *ep)
743743

744744
spin_lock_init(&ep->lock);
745745

746+
pci_epc_init_notify(epc);
747+
746748
return 0;
747749

748750
free_epc_mem:

drivers/pci/controller/dwc/pci-dra7xx.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -467,6 +467,15 @@ static int dra7xx_add_pcie_ep(struct dra7xx_pcie *dra7xx,
467467
return ret;
468468
}
469469

470+
ret = dw_pcie_ep_init_registers(ep);
471+
if (ret) {
472+
dev_err(dev, "Failed to initialize DWC endpoint registers\n");
473+
dw_pcie_ep_deinit(ep);
474+
return ret;
475+
}
476+
477+
dw_pcie_ep_init_notify(ep);
478+
470479
return 0;
471480
}
472481

drivers/pci/controller/dwc/pci-imx6.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1123,6 +1123,16 @@ static int imx6_add_pcie_ep(struct imx6_pcie *imx6_pcie,
11231123
dev_err(dev, "failed to initialize endpoint\n");
11241124
return ret;
11251125
}
1126+
1127+
ret = dw_pcie_ep_init_registers(ep);
1128+
if (ret) {
1129+
dev_err(dev, "Failed to initialize DWC endpoint registers\n");
1130+
dw_pcie_ep_deinit(ep);
1131+
return ret;
1132+
}
1133+
1134+
dw_pcie_ep_init_notify(ep);
1135+
11261136
/* Start LTSSM. */
11271137
imx6_pcie_ltssm_enable(dev);
11281138

drivers/pci/controller/dwc/pci-keystone.c

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1286,6 +1286,15 @@ static int ks_pcie_probe(struct platform_device *pdev)
12861286
ret = dw_pcie_ep_init(&pci->ep);
12871287
if (ret < 0)
12881288
goto err_get_sync;
1289+
1290+
ret = dw_pcie_ep_init_registers(&pci->ep);
1291+
if (ret) {
1292+
dev_err(dev, "Failed to initialize DWC endpoint registers\n");
1293+
goto err_ep_init;
1294+
}
1295+
1296+
dw_pcie_ep_init_notify(&pci->ep);
1297+
12891298
break;
12901299
default:
12911300
dev_err(dev, "INVALID device type %d\n", mode);
@@ -1295,6 +1304,8 @@ static int ks_pcie_probe(struct platform_device *pdev)
12951304

12961305
return 0;
12971306

1307+
err_ep_init:
1308+
dw_pcie_ep_deinit(&pci->ep);
12981309
err_get_sync:
12991310
pm_runtime_put(dev);
13001311
pm_runtime_disable(dev);

drivers/pci/controller/dwc/pci-layerscape-ep.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -279,6 +279,15 @@ static int __init ls_pcie_ep_probe(struct platform_device *pdev)
279279
if (ret)
280280
return ret;
281281

282+
ret = dw_pcie_ep_init_registers(&pci->ep);
283+
if (ret) {
284+
dev_err(dev, "Failed to initialize DWC endpoint registers\n");
285+
dw_pcie_ep_deinit(&pci->ep);
286+
return ret;
287+
}
288+
289+
dw_pcie_ep_init_notify(&pci->ep);
290+
282291
return ls_pcie_ep_interrupt_init(pcie, pdev);
283292
}
284293

drivers/pci/controller/dwc/pcie-artpec6.c

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -441,7 +441,20 @@ static int artpec6_pcie_probe(struct platform_device *pdev)
441441

442442
pci->ep.ops = &pcie_ep_ops;
443443

444-
return dw_pcie_ep_init(&pci->ep);
444+
ret = dw_pcie_ep_init(&pci->ep);
445+
if (ret)
446+
return ret;
447+
448+
ret = dw_pcie_ep_init_registers(&pci->ep);
449+
if (ret) {
450+
dev_err(dev, "Failed to initialize DWC endpoint registers\n");
451+
dw_pcie_ep_deinit(&pci->ep);
452+
return ret;
453+
}
454+
455+
dw_pcie_ep_init_notify(&pci->ep);
456+
457+
break;
445458
default:
446459
dev_err(dev, "INVALID device type %d\n", artpec6_pcie->mode);
447460
}

0 commit comments

Comments
 (0)