@@ -51,6 +51,7 @@ enum imx6_pcie_variants {
51
51
IMX7D ,
52
52
IMX8MQ ,
53
53
IMX8MM ,
54
+ IMX8MP ,
54
55
};
55
56
56
57
#define IMX6_PCIE_FLAG_IMX6_PHY BIT(0)
@@ -61,6 +62,7 @@ struct imx6_pcie_drvdata {
61
62
enum imx6_pcie_variants variant ;
62
63
u32 flags ;
63
64
int dbi_length ;
65
+ const char * gpr ;
64
66
};
65
67
66
68
struct imx6_pcie {
@@ -150,7 +152,8 @@ struct imx6_pcie {
150
152
static unsigned int imx6_pcie_grp_offset (const struct imx6_pcie * imx6_pcie )
151
153
{
152
154
WARN_ON (imx6_pcie -> drvdata -> variant != IMX8MQ &&
153
- imx6_pcie -> drvdata -> variant != IMX8MM );
155
+ imx6_pcie -> drvdata -> variant != IMX8MM &&
156
+ imx6_pcie -> drvdata -> variant != IMX8MP );
154
157
return imx6_pcie -> controller_id == 1 ? IOMUXC_GPR16 : IOMUXC_GPR14 ;
155
158
}
156
159
@@ -301,6 +304,7 @@ static void imx6_pcie_init_phy(struct imx6_pcie *imx6_pcie)
301
304
{
302
305
switch (imx6_pcie -> drvdata -> variant ) {
303
306
case IMX8MM :
307
+ case IMX8MP :
304
308
/*
305
309
* The PHY initialization had been done in the PHY
306
310
* driver, break here directly.
@@ -558,6 +562,7 @@ static int imx6_pcie_enable_ref_clk(struct imx6_pcie *imx6_pcie)
558
562
break ;
559
563
case IMX8MM :
560
564
case IMX8MQ :
565
+ case IMX8MP :
561
566
ret = clk_prepare_enable (imx6_pcie -> pcie_aux );
562
567
if (ret ) {
563
568
dev_err (dev , "unable to enable pcie_aux clock\n" );
@@ -602,6 +607,7 @@ static void imx6_pcie_disable_ref_clk(struct imx6_pcie *imx6_pcie)
602
607
break ;
603
608
case IMX8MM :
604
609
case IMX8MQ :
610
+ case IMX8MP :
605
611
clk_disable_unprepare (imx6_pcie -> pcie_aux );
606
612
break ;
607
613
default :
@@ -669,6 +675,7 @@ static void imx6_pcie_assert_core_reset(struct imx6_pcie *imx6_pcie)
669
675
reset_control_assert (imx6_pcie -> pciephy_reset );
670
676
fallthrough ;
671
677
case IMX8MM :
678
+ case IMX8MP :
672
679
reset_control_assert (imx6_pcie -> apps_reset );
673
680
break ;
674
681
case IMX6SX :
@@ -744,6 +751,7 @@ static int imx6_pcie_deassert_core_reset(struct imx6_pcie *imx6_pcie)
744
751
break ;
745
752
case IMX6Q : /* Nothing to do */
746
753
case IMX8MM :
754
+ case IMX8MP :
747
755
break ;
748
756
}
749
757
@@ -793,6 +801,7 @@ static void imx6_pcie_ltssm_enable(struct device *dev)
793
801
case IMX7D :
794
802
case IMX8MQ :
795
803
case IMX8MM :
804
+ case IMX8MP :
796
805
reset_control_deassert (imx6_pcie -> apps_reset );
797
806
break ;
798
807
}
@@ -812,6 +821,7 @@ static void imx6_pcie_ltssm_disable(struct device *dev)
812
821
case IMX7D :
813
822
case IMX8MQ :
814
823
case IMX8MM :
824
+ case IMX8MP :
815
825
reset_control_assert (imx6_pcie -> apps_reset );
816
826
break ;
817
827
}
@@ -1179,6 +1189,7 @@ static int imx6_pcie_probe(struct platform_device *pdev)
1179
1189
}
1180
1190
break ;
1181
1191
case IMX8MM :
1192
+ case IMX8MP :
1182
1193
imx6_pcie -> pcie_aux = devm_clk_get (dev , "pcie_aux" );
1183
1194
if (IS_ERR (imx6_pcie -> pcie_aux ))
1184
1195
return dev_err_probe (dev , PTR_ERR (imx6_pcie -> pcie_aux ),
@@ -1216,7 +1227,7 @@ static int imx6_pcie_probe(struct platform_device *pdev)
1216
1227
1217
1228
/* Grab GPR config register range */
1218
1229
imx6_pcie -> iomuxc_gpr =
1219
- syscon_regmap_lookup_by_compatible ("fsl,imx6q-iomuxc- gpr" );
1230
+ syscon_regmap_lookup_by_compatible (imx6_pcie -> drvdata -> gpr );
1220
1231
if (IS_ERR (imx6_pcie -> iomuxc_gpr )) {
1221
1232
dev_err (dev , "unable to find iomuxc registers\n" );
1222
1233
return PTR_ERR (imx6_pcie -> iomuxc_gpr );
@@ -1295,30 +1306,41 @@ static const struct imx6_pcie_drvdata drvdata[] = {
1295
1306
.flags = IMX6_PCIE_FLAG_IMX6_PHY |
1296
1307
IMX6_PCIE_FLAG_IMX6_SPEED_CHANGE ,
1297
1308
.dbi_length = 0x200 ,
1309
+ .gpr = "fsl,imx6q-iomuxc-gpr" ,
1298
1310
},
1299
1311
[IMX6SX ] = {
1300
1312
.variant = IMX6SX ,
1301
1313
.flags = IMX6_PCIE_FLAG_IMX6_PHY |
1302
1314
IMX6_PCIE_FLAG_IMX6_SPEED_CHANGE |
1303
1315
IMX6_PCIE_FLAG_SUPPORTS_SUSPEND ,
1316
+ .gpr = "fsl,imx6q-iomuxc-gpr" ,
1304
1317
},
1305
1318
[IMX6QP ] = {
1306
1319
.variant = IMX6QP ,
1307
1320
.flags = IMX6_PCIE_FLAG_IMX6_PHY |
1308
1321
IMX6_PCIE_FLAG_IMX6_SPEED_CHANGE |
1309
1322
IMX6_PCIE_FLAG_SUPPORTS_SUSPEND ,
1310
1323
.dbi_length = 0x200 ,
1324
+ .gpr = "fsl,imx6q-iomuxc-gpr" ,
1311
1325
},
1312
1326
[IMX7D ] = {
1313
1327
.variant = IMX7D ,
1314
1328
.flags = IMX6_PCIE_FLAG_SUPPORTS_SUSPEND ,
1329
+ .gpr = "fsl,imx7d-iomuxc-gpr" ,
1315
1330
},
1316
1331
[IMX8MQ ] = {
1317
1332
.variant = IMX8MQ ,
1333
+ .gpr = "fsl,imx8mq-iomuxc-gpr" ,
1318
1334
},
1319
1335
[IMX8MM ] = {
1320
1336
.variant = IMX8MM ,
1321
1337
.flags = IMX6_PCIE_FLAG_SUPPORTS_SUSPEND ,
1338
+ .gpr = "fsl,imx8mm-iomuxc-gpr" ,
1339
+ },
1340
+ [IMX8MP ] = {
1341
+ .variant = IMX8MP ,
1342
+ .flags = IMX6_PCIE_FLAG_SUPPORTS_SUSPEND ,
1343
+ .gpr = "fsl,imx8mp-iomuxc-gpr" ,
1322
1344
},
1323
1345
};
1324
1346
@@ -1329,6 +1351,7 @@ static const struct of_device_id imx6_pcie_of_match[] = {
1329
1351
{ .compatible = "fsl,imx7d-pcie" , .data = & drvdata [IMX7D ], },
1330
1352
{ .compatible = "fsl,imx8mq-pcie" , .data = & drvdata [IMX8MQ ], },
1331
1353
{ .compatible = "fsl,imx8mm-pcie" , .data = & drvdata [IMX8MM ], },
1354
+ { .compatible = "fsl,imx8mp-pcie" , .data = & drvdata [IMX8MP ], },
1332
1355
{},
1333
1356
};
1334
1357
0 commit comments