PCI: rockchip: dw: Support rockchip,rk3528-pcie

RK3528 can only support up to 8 MSI vectors, add a limitation
for that.

Change-Id: I62297711053253b8548cf61d69fbd9bcf690114d
Signed-off-by: Jon Lin <jon.lin@rock-chips.com>
Signed-off-by: Shawn Lin <shawn.lin@rock-chips.com>
This commit is contained in:
Jon Lin
2022-10-08 10:41:10 +08:00
committed by Tao Huang
parent c06ee9ef38
commit afb85c759c

View File

@@ -186,10 +186,12 @@ struct rk_pcie {
u16 aspm;
u32 l1ss_ctl1;
struct dentry *debugfs;
u32 msi_vector_num;
};
struct rk_pcie_of_data {
enum rk_pcie_device_mode mode;
u32 msi_vector_num;
};
#define to_rk_pcie(x) dev_get_drvdata((x)->dev)
@@ -1101,6 +1103,14 @@ static int rk_pcie_msi_host_init(struct pcie_port *pp)
return 0;
}
static void rk_pcie_msi_set_num_vectors(struct pcie_port *pp)
{
struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
struct rk_pcie *rk_pcie = to_rk_pcie(pci);
pp->num_vectors = rk_pcie->msi_vector_num;
}
static int rk_pcie_host_init(struct pcie_port *pp)
{
int ret;
@@ -1133,6 +1143,9 @@ static int rk_add_pcie_port(struct rk_pcie *rk_pcie, struct platform_device *pde
if (pp->msi_irq < 0) {
dev_info(dev, "use outband MSI support");
rk_pcie_host_ops.msi_host_init = rk_pcie_msi_host_init;
} else {
dev_info(dev, "max MSI vector is %d\n", rk_pcie->msi_vector_num);
rk_pcie_host_ops.set_num_vectors = rk_pcie_msi_set_num_vectors;
}
}
@@ -1511,6 +1524,11 @@ static const struct rk_pcie_of_data rk_pcie_ep_of_data = {
.mode = RK_PCIE_EP_TYPE,
};
static const struct rk_pcie_of_data rk3528_pcie_rc_of_data = {
.mode = RK_PCIE_RC_TYPE,
.msi_vector_num = 8,
};
static const struct of_device_id rk_pcie_of_match[] = {
{
.compatible = "rockchip,rk1808-pcie",
@@ -1520,6 +1538,10 @@ static const struct of_device_id rk_pcie_of_match[] = {
.compatible = "rockchip,rk1808-pcie-ep",
.data = &rk_pcie_ep_of_data,
},
{
.compatible = "rockchip,rk3528-pcie",
.data = &rk3528_pcie_rc_of_data,
},
{
.compatible = "rockchip,rk3568-pcie",
.data = &rk_pcie_rc_of_data,
@@ -1939,6 +1961,7 @@ static int rk_pcie_really_probe(void *p)
pci->ops = &dw_pcie_ops;
rk_pcie->mode = mode;
rk_pcie->msi_vector_num = data->msi_vector_num;
rk_pcie->pci = pci;
if (of_device_is_compatible(np, "rockchip,rk1808-pcie") ||