diff options
author | Bjorn Helgaas <bhelgaas@google.com> | 2023-10-28 13:31:01 -0500 |
---|---|---|
committer | Bjorn Helgaas <bhelgaas@google.com> | 2023-10-28 13:31:01 -0500 |
commit | eecffeb045738b0214219c3ad44cd0502836efdf (patch) | |
tree | eee82e2cf329504798fd2586b2d2b6416792c6f2 /drivers/pci | |
parent | e365a36eaca029520e5cae555849934fde398c82 (diff) | |
parent | a07d2497ed657eb2efeb967af47e22f573dcd1d6 (diff) |
Merge branch 'pci/controller/qcom-ep'
- Add qcom-ep callback to write DBI2 registers (Manivannan Sadhasivam)
* pci/controller/qcom-ep:
PCI: qcom-ep: Add dedicated callback for writing to DBI2 registers
Diffstat (limited to 'drivers/pci')
-rw-r--r-- | drivers/pci/controller/dwc/pcie-qcom-ep.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/drivers/pci/controller/dwc/pcie-qcom-ep.c b/drivers/pci/controller/dwc/pcie-qcom-ep.c index 8bd8107690a6..9b62ee6992f0 100644 --- a/drivers/pci/controller/dwc/pcie-qcom-ep.c +++ b/drivers/pci/controller/dwc/pcie-qcom-ep.c @@ -123,6 +123,7 @@ /* ELBI registers */ #define ELBI_SYS_STTS 0x08 +#define ELBI_CS2_ENABLE 0xa4 /* DBI registers */ #define DBI_CON_STATUS 0x44 @@ -263,6 +264,21 @@ static void qcom_pcie_dw_stop_link(struct dw_pcie *pci) disable_irq(pcie_ep->perst_irq); } +static void qcom_pcie_dw_write_dbi2(struct dw_pcie *pci, void __iomem *base, + u32 reg, size_t size, u32 val) +{ + struct qcom_pcie_ep *pcie_ep = to_pcie_ep(pci); + int ret; + + writel(1, pcie_ep->elbi + ELBI_CS2_ENABLE); + + ret = dw_pcie_write(pci->dbi_base2 + reg, size, val); + if (ret) + dev_err(pci->dev, "Failed to write DBI2 register (0x%x): %d\n", reg, ret); + + writel(0, pcie_ep->elbi + ELBI_CS2_ENABLE); +} + static void qcom_pcie_ep_icc_update(struct qcom_pcie_ep *pcie_ep) { struct dw_pcie *pci = &pcie_ep->pci; @@ -519,6 +535,7 @@ static const struct dw_pcie_ops pci_ops = { .link_up = qcom_pcie_dw_link_up, .start_link = qcom_pcie_dw_start_link, .stop_link = qcom_pcie_dw_stop_link, + .write_dbi2 = qcom_pcie_dw_write_dbi2, }; static int qcom_pcie_ep_get_io_resources(struct platform_device *pdev, |