Commit 3445d382 authored by Krishna Chaitanya Chundru's avatar Krishna Chaitanya Chundru Committed by Bjorn Helgaas
Browse files

PCI: dwc: Implement .assert_perst() for dwc glue drivers



Add .assert_perst() hook for dwc glue drivers to register with
assert_perst() of pci ops, allowing for better control over the link
initialization and shutdown process.

Implement assert_perst() function op for dwc drivers.

Signed-off-by: default avatarKrishna Chaitanya Chundru <krishna.chundru@oss.qualcomm.com>
[bhelgaas: squash dwc host support]
Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
Acked-by: default avatarManivannan Sadhasivam <mani@kernel.org>
Link: https://patch.msgid.link/20251101-tc9563-v9-3-de3429f7787a@oss.qualcomm.com
Link: https://patch.msgid.link/20251101-tc9563-v9-4-de3429f7787a@oss.qualcomm.com
parent 01ba8270
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -842,10 +842,19 @@ void __iomem *dw_pcie_own_conf_map_bus(struct pci_bus *bus, unsigned int devfn,
}
EXPORT_SYMBOL_GPL(dw_pcie_own_conf_map_bus);

static int dw_pcie_op_assert_perst(struct pci_bus *bus, bool assert)
{
	struct dw_pcie_rp *pp = bus->sysdata;
	struct dw_pcie *pci = to_dw_pcie_from_pp(pp);

	return dw_pcie_assert_perst(pci, assert);
}

static struct pci_ops dw_pcie_ops = {
	.map_bus = dw_pcie_own_conf_map_bus,
	.read = pci_generic_config_read,
	.write = pci_generic_config_write,
	.assert_perst = dw_pcie_op_assert_perst,
};

static int dw_pcie_iatu_setup(struct dw_pcie_rp *pp)
+9 −0
Original line number Diff line number Diff line
@@ -485,6 +485,7 @@ struct dw_pcie_ops {
	enum dw_pcie_ltssm (*get_ltssm)(struct dw_pcie *pcie);
	int	(*start_link)(struct dw_pcie *pcie);
	void	(*stop_link)(struct dw_pcie *pcie);
	int	(*assert_perst)(struct dw_pcie *pcie, bool assert);
};

struct debugfs_info {
@@ -787,6 +788,14 @@ static inline void dw_pcie_stop_link(struct dw_pcie *pci)
		pci->ops->stop_link(pci);
}

static inline int dw_pcie_assert_perst(struct dw_pcie *pci, bool assert)
{
	if (pci->ops && pci->ops->assert_perst)
		return pci->ops->assert_perst(pci, assert);

	return 0;
}

static inline enum dw_pcie_ltssm dw_pcie_get_ltssm(struct dw_pcie *pci)
{
	u32 val;