61
61
/* DBI registers */
62
62
#define AXI_MSTR_RESP_COMP_CTRL0 0x818
63
63
#define AXI_MSTR_RESP_COMP_CTRL1 0x81c
64
- #define MISC_CONTROL_1_REG 0x8bc
65
64
66
65
/* MHI registers */
67
66
#define PARF_DEBUG_CNT_PM_LINKST_IN_L2 0xc04
132
131
/* AXI_MSTR_RESP_COMP_CTRL1 register fields */
133
132
#define CFG_BRIDGE_SB_INIT BIT(0)
134
133
135
- /* MISC_CONTROL_1_REG register fields */
136
- #define DBI_RO_WR_EN 1
137
-
138
134
/* PCI_EXP_SLTCAP register fields */
139
135
#define PCIE_CAP_SLOT_POWER_LIMIT_VAL FIELD_PREP(PCI_EXP_SLTCAP_SPLV, 250)
140
136
#define PCIE_CAP_SLOT_POWER_LIMIT_SCALE FIELD_PREP(PCI_EXP_SLTCAP_SPLS, 1)
144
140
PCI_EXP_SLTCAP_AIP | \
145
141
PCI_EXP_SLTCAP_PIP | \
146
142
PCI_EXP_SLTCAP_HPS | \
147
- PCI_EXP_SLTCAP_HPC | \
148
143
PCI_EXP_SLTCAP_EIP | \
149
144
PCIE_CAP_SLOT_POWER_LIMIT_VAL | \
150
145
PCIE_CAP_SLOT_POWER_LIMIT_SCALE)
@@ -274,6 +269,20 @@ static int qcom_pcie_start_link(struct dw_pcie *pci)
274
269
return 0 ;
275
270
}
276
271
272
+ static void qcom_pcie_clear_hpc (struct dw_pcie * pci )
273
+ {
274
+ u16 offset = dw_pcie_find_capability (pci , PCI_CAP_ID_EXP );
275
+ u32 val ;
276
+
277
+ dw_pcie_dbi_ro_wr_en (pci );
278
+
279
+ val = readl (pci -> dbi_base + offset + PCI_EXP_SLTCAP );
280
+ val &= ~PCI_EXP_SLTCAP_HPC ;
281
+ writel (val , pci -> dbi_base + offset + PCI_EXP_SLTCAP );
282
+
283
+ dw_pcie_dbi_ro_wr_dis (pci );
284
+ }
285
+
277
286
static void qcom_pcie_2_1_0_ltssm_enable (struct qcom_pcie * pcie )
278
287
{
279
288
u32 val ;
@@ -429,6 +438,8 @@ static int qcom_pcie_post_init_2_1_0(struct qcom_pcie *pcie)
429
438
writel (CFG_BRIDGE_SB_INIT ,
430
439
pci -> dbi_base + AXI_MSTR_RESP_COMP_CTRL1 );
431
440
441
+ qcom_pcie_clear_hpc (pcie -> pci );
442
+
432
443
return 0 ;
433
444
}
434
445
@@ -512,6 +523,8 @@ static int qcom_pcie_post_init_1_0_0(struct qcom_pcie *pcie)
512
523
writel (val , pcie -> parf + PARF_AXI_MSTR_WR_ADDR_HALT );
513
524
}
514
525
526
+ qcom_pcie_clear_hpc (pcie -> pci );
527
+
515
528
return 0 ;
516
529
}
517
530
@@ -607,6 +620,8 @@ static int qcom_pcie_post_init_2_3_2(struct qcom_pcie *pcie)
607
620
val |= EN ;
608
621
writel (val , pcie -> parf + PARF_AXI_MSTR_WR_ADDR_HALT_V2 );
609
622
623
+ qcom_pcie_clear_hpc (pcie -> pci );
624
+
610
625
return 0 ;
611
626
}
612
627
@@ -692,34 +707,6 @@ static int qcom_pcie_init_2_4_0(struct qcom_pcie *pcie)
692
707
return 0 ;
693
708
}
694
709
695
- static int qcom_pcie_post_init_2_4_0 (struct qcom_pcie * pcie )
696
- {
697
- u32 val ;
698
-
699
- /* enable PCIe clocks and resets */
700
- val = readl (pcie -> parf + PARF_PHY_CTRL );
701
- val &= ~PHY_TEST_PWR_DOWN ;
702
- writel (val , pcie -> parf + PARF_PHY_CTRL );
703
-
704
- /* change DBI base address */
705
- writel (0 , pcie -> parf + PARF_DBI_BASE_ADDR );
706
-
707
- /* MAC PHY_POWERDOWN MUX DISABLE */
708
- val = readl (pcie -> parf + PARF_SYS_CTRL );
709
- val &= ~MAC_PHY_POWERDOWN_IN_P2_D_MUX_EN ;
710
- writel (val , pcie -> parf + PARF_SYS_CTRL );
711
-
712
- val = readl (pcie -> parf + PARF_MHI_CLOCK_RESET_CTRL );
713
- val |= BYPASS ;
714
- writel (val , pcie -> parf + PARF_MHI_CLOCK_RESET_CTRL );
715
-
716
- val = readl (pcie -> parf + PARF_AXI_MSTR_WR_ADDR_HALT_V2 );
717
- val |= EN ;
718
- writel (val , pcie -> parf + PARF_AXI_MSTR_WR_ADDR_HALT_V2 );
719
-
720
- return 0 ;
721
- }
722
-
723
710
static int qcom_pcie_get_resources_2_3_3 (struct qcom_pcie * pcie )
724
711
{
725
712
struct qcom_pcie_resources_2_3_3 * res = & pcie -> res .v2_3_3 ;
@@ -826,7 +813,9 @@ static int qcom_pcie_post_init_2_3_3(struct qcom_pcie *pcie)
826
813
writel (0 , pcie -> parf + PARF_Q2A_FLUSH );
827
814
828
815
writel (PCI_COMMAND_MASTER , pci -> dbi_base + PCI_COMMAND );
829
- writel (DBI_RO_WR_EN , pci -> dbi_base + MISC_CONTROL_1_REG );
816
+
817
+ dw_pcie_dbi_ro_wr_en (pci );
818
+
830
819
writel (PCIE_CAP_SLOT_VAL , pci -> dbi_base + offset + PCI_EXP_SLTCAP );
831
820
832
821
val = readl (pci -> dbi_base + offset + PCI_EXP_LNKCAP );
@@ -836,6 +825,8 @@ static int qcom_pcie_post_init_2_3_3(struct qcom_pcie *pcie)
836
825
writel (PCI_EXP_DEVCTL2_COMP_TMOUT_DIS , pci -> dbi_base + offset +
837
826
PCI_EXP_DEVCTL2 );
838
827
828
+ dw_pcie_dbi_ro_wr_dis (pci );
829
+
839
830
return 0 ;
840
831
}
841
832
@@ -966,6 +957,13 @@ static int qcom_pcie_init_2_7_0(struct qcom_pcie *pcie)
966
957
return ret ;
967
958
}
968
959
960
+ static int qcom_pcie_post_init_2_7_0 (struct qcom_pcie * pcie )
961
+ {
962
+ qcom_pcie_clear_hpc (pcie -> pci );
963
+
964
+ return 0 ;
965
+ }
966
+
969
967
static void qcom_pcie_deinit_2_7_0 (struct qcom_pcie * pcie )
970
968
{
971
969
struct qcom_pcie_resources_2_7_0 * res = & pcie -> res .v2_7_0 ;
@@ -1136,6 +1134,7 @@ static int qcom_pcie_post_init_2_9_0(struct qcom_pcie *pcie)
1136
1134
writel (0 , pcie -> parf + PARF_Q2A_FLUSH );
1137
1135
1138
1136
dw_pcie_dbi_ro_wr_en (pci );
1137
+
1139
1138
writel (PCIE_CAP_SLOT_VAL , pci -> dbi_base + offset + PCI_EXP_SLTCAP );
1140
1139
1141
1140
val = readl (pci -> dbi_base + offset + PCI_EXP_LNKCAP );
@@ -1145,6 +1144,8 @@ static int qcom_pcie_post_init_2_9_0(struct qcom_pcie *pcie)
1145
1144
writel (PCI_EXP_DEVCTL2_COMP_TMOUT_DIS , pci -> dbi_base + offset +
1146
1145
PCI_EXP_DEVCTL2 );
1147
1146
1147
+ dw_pcie_dbi_ro_wr_dis (pci );
1148
+
1148
1149
for (i = 0 ; i < 256 ; i ++ )
1149
1150
writel (0 , pcie -> parf + PARF_BDF_TO_SID_TABLE_N + (4 * i ));
1150
1151
@@ -1251,7 +1252,7 @@ static const struct qcom_pcie_ops ops_2_3_2 = {
1251
1252
static const struct qcom_pcie_ops ops_2_4_0 = {
1252
1253
.get_resources = qcom_pcie_get_resources_2_4_0 ,
1253
1254
.init = qcom_pcie_init_2_4_0 ,
1254
- .post_init = qcom_pcie_post_init_2_4_0 ,
1255
+ .post_init = qcom_pcie_post_init_2_3_2 ,
1255
1256
.deinit = qcom_pcie_deinit_2_4_0 ,
1256
1257
.ltssm_enable = qcom_pcie_2_3_2_ltssm_enable ,
1257
1258
};
@@ -1269,6 +1270,7 @@ static const struct qcom_pcie_ops ops_2_3_3 = {
1269
1270
static const struct qcom_pcie_ops ops_2_7_0 = {
1270
1271
.get_resources = qcom_pcie_get_resources_2_7_0 ,
1271
1272
.init = qcom_pcie_init_2_7_0 ,
1273
+ .post_init = qcom_pcie_post_init_2_7_0 ,
1272
1274
.deinit = qcom_pcie_deinit_2_7_0 ,
1273
1275
.ltssm_enable = qcom_pcie_2_3_2_ltssm_enable ,
1274
1276
};
@@ -1277,6 +1279,7 @@ static const struct qcom_pcie_ops ops_2_7_0 = {
1277
1279
static const struct qcom_pcie_ops ops_1_9_0 = {
1278
1280
.get_resources = qcom_pcie_get_resources_2_7_0 ,
1279
1281
.init = qcom_pcie_init_2_7_0 ,
1282
+ .post_init = qcom_pcie_post_init_2_7_0 ,
1280
1283
.deinit = qcom_pcie_deinit_2_7_0 ,
1281
1284
.ltssm_enable = qcom_pcie_2_3_2_ltssm_enable ,
1282
1285
.config_sid = qcom_pcie_config_sid_1_9_0 ,
0 commit comments