100
100
#define PCIE_ATR_TLP_TYPE_MEM PCIE_ATR_TLP_TYPE(0)
101
101
#define PCIE_ATR_TLP_TYPE_IO PCIE_ATR_TLP_TYPE(2)
102
102
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
+
103
113
/**
104
114
* struct mtk_msi_set - MSI information for each set
105
115
* @base: IO mapped register base
@@ -131,6 +141,7 @@ struct mtk_msi_set {
131
141
* @msi_sets: MSI sets information
132
142
* @lock: lock protecting IRQ bit map
133
143
* @msi_irq_in_use: bit map for assigned MSI IRQ
144
+ * @soc: pointer to SoC-dependent operations
134
145
*/
135
146
struct mtk_gen3_pcie {
136
147
struct device * dev ;
@@ -151,6 +162,8 @@ struct mtk_gen3_pcie {
151
162
struct mtk_msi_set msi_sets [PCIE_MSI_SET_NUM ];
152
163
struct mutex lock ;
153
164
DECLARE_BITMAP (msi_irq_in_use , PCIE_MSI_IRQS_NUM );
165
+
166
+ const struct mtk_gen3_pcie_pdata * soc ;
154
167
};
155
168
156
169
/* LTSSM state in PCIE_LTSSM_STATUS_REG bit[28:24] */
@@ -904,7 +917,7 @@ static int mtk_pcie_setup(struct mtk_gen3_pcie *pcie)
904
917
usleep_range (10 , 20 );
905
918
906
919
/* Don't touch the hardware registers before power up */
907
- err = mtk_pcie_power_up (pcie );
920
+ err = pcie -> soc -> power_up (pcie );
908
921
if (err )
909
922
return err ;
910
923
@@ -939,6 +952,7 @@ static int mtk_pcie_probe(struct platform_device *pdev)
939
952
pcie = pci_host_bridge_priv (host );
940
953
941
954
pcie -> dev = dev ;
955
+ pcie -> soc = device_get_match_data (dev );
942
956
platform_set_drvdata (pdev , pcie );
943
957
944
958
err = mtk_pcie_setup (pcie );
@@ -1054,7 +1068,7 @@ static int mtk_pcie_resume_noirq(struct device *dev)
1054
1068
struct mtk_gen3_pcie * pcie = dev_get_drvdata (dev );
1055
1069
int err ;
1056
1070
1057
- err = mtk_pcie_power_up (pcie );
1071
+ err = pcie -> soc -> power_up (pcie );
1058
1072
if (err )
1059
1073
return err ;
1060
1074
@@ -1074,8 +1088,12 @@ static const struct dev_pm_ops mtk_pcie_pm_ops = {
1074
1088
mtk_pcie_resume_noirq )
1075
1089
};
1076
1090
1091
+ static const struct mtk_gen3_pcie_pdata mtk_pcie_soc_mt8192 = {
1092
+ .power_up = mtk_pcie_power_up ,
1093
+ };
1094
+
1077
1095
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 },
1079
1097
{},
1080
1098
};
1081
1099
MODULE_DEVICE_TABLE (of , mtk_pcie_of_match );
0 commit comments