Skip to content

Commit dc869a4

Browse files
LorenzoBianconikwilczynski
authored andcommitted
PCI: mediatek-gen3: Add mtk_gen3_pcie_pdata data structure
Introduce mtk_gen3_pcie_pdata data structure in order to define multiple callbacks for each supported SoC. This is a preliminary patch to introduce EN7581 PCIe support. Link: https://lore.kernel.org/linux-pci/c193d1a87505d045e2e0ef33317bce17012ee095.1720022580.git.lorenzo@kernel.org Signed-off-by: Lorenzo Bianconi <[email protected]> Signed-off-by: Krzysztof Wilczyński <[email protected]> Tested-by: Zhengping Zhang <[email protected]> Reviewed-by: AngeloGioacchino Del Regno <[email protected]> Acked-by: Jianjun Wang <[email protected]>
1 parent c6abd0e commit dc869a4

File tree

1 file changed

+21
-3
lines changed

1 file changed

+21
-3
lines changed

drivers/pci/controller/pcie-mediatek-gen3.c

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,16 @@
100100
#define PCIE_ATR_TLP_TYPE_MEM PCIE_ATR_TLP_TYPE(0)
101101
#define PCIE_ATR_TLP_TYPE_IO PCIE_ATR_TLP_TYPE(2)
102102

103+
struct mtk_gen3_pcie;
104+
105+
/**
106+
* struct mtk_gen3_pcie_pdata - differentiate between host generations
107+
* @power_up: pcie power_up callback
108+
*/
109+
struct mtk_gen3_pcie_pdata {
110+
int (*power_up)(struct mtk_gen3_pcie *pcie);
111+
};
112+
103113
/**
104114
* struct mtk_msi_set - MSI information for each set
105115
* @base: IO mapped register base
@@ -131,6 +141,7 @@ struct mtk_msi_set {
131141
* @msi_sets: MSI sets information
132142
* @lock: lock protecting IRQ bit map
133143
* @msi_irq_in_use: bit map for assigned MSI IRQ
144+
* @soc: pointer to SoC-dependent operations
134145
*/
135146
struct mtk_gen3_pcie {
136147
struct device *dev;
@@ -151,6 +162,8 @@ struct mtk_gen3_pcie {
151162
struct mtk_msi_set msi_sets[PCIE_MSI_SET_NUM];
152163
struct mutex lock;
153164
DECLARE_BITMAP(msi_irq_in_use, PCIE_MSI_IRQS_NUM);
165+
166+
const struct mtk_gen3_pcie_pdata *soc;
154167
};
155168

156169
/* LTSSM state in PCIE_LTSSM_STATUS_REG bit[28:24] */
@@ -904,7 +917,7 @@ static int mtk_pcie_setup(struct mtk_gen3_pcie *pcie)
904917
usleep_range(10, 20);
905918

906919
/* Don't touch the hardware registers before power up */
907-
err = mtk_pcie_power_up(pcie);
920+
err = pcie->soc->power_up(pcie);
908921
if (err)
909922
return err;
910923

@@ -939,6 +952,7 @@ static int mtk_pcie_probe(struct platform_device *pdev)
939952
pcie = pci_host_bridge_priv(host);
940953

941954
pcie->dev = dev;
955+
pcie->soc = device_get_match_data(dev);
942956
platform_set_drvdata(pdev, pcie);
943957

944958
err = mtk_pcie_setup(pcie);
@@ -1054,7 +1068,7 @@ static int mtk_pcie_resume_noirq(struct device *dev)
10541068
struct mtk_gen3_pcie *pcie = dev_get_drvdata(dev);
10551069
int err;
10561070

1057-
err = mtk_pcie_power_up(pcie);
1071+
err = pcie->soc->power_up(pcie);
10581072
if (err)
10591073
return err;
10601074

@@ -1074,8 +1088,12 @@ static const struct dev_pm_ops mtk_pcie_pm_ops = {
10741088
mtk_pcie_resume_noirq)
10751089
};
10761090

1091+
static const struct mtk_gen3_pcie_pdata mtk_pcie_soc_mt8192 = {
1092+
.power_up = mtk_pcie_power_up,
1093+
};
1094+
10771095
static const struct of_device_id mtk_pcie_of_match[] = {
1078-
{ .compatible = "mediatek,mt8192-pcie" },
1096+
{ .compatible = "mediatek,mt8192-pcie", .data = &mtk_pcie_soc_mt8192 },
10791097
{},
10801098
};
10811099
MODULE_DEVICE_TABLE(of, mtk_pcie_of_match);

0 commit comments

Comments
 (0)