@@ -450,6 +450,133 @@ static const struct qmp_phy_init_tbl ipq8074_pcie_pcs_tbl[] = {
450
450
QMP_PHY_INIT_CFG_L (QPHY_START_CTRL , 0x3 ),
451
451
};
452
452
453
+ static const struct qmp_phy_init_tbl ipq8074_pcie_gen3_serdes_tbl [] = {
454
+ QMP_PHY_INIT_CFG (QSERDES_PLL_BIAS_EN_CLKBUFLR_EN , 0x18 ),
455
+ QMP_PHY_INIT_CFG (QSERDES_PLL_BIAS_EN_CTRL_BY_PSM , 0x01 ),
456
+ QMP_PHY_INIT_CFG (QSERDES_PLL_CLK_SELECT , 0x31 ),
457
+ QMP_PHY_INIT_CFG (QSERDES_PLL_PLL_IVCO , 0x0f ),
458
+ QMP_PHY_INIT_CFG (QSERDES_PLL_BG_TRIM , 0x0f ),
459
+ QMP_PHY_INIT_CFG (QSERDES_PLL_CMN_CONFIG , 0x06 ),
460
+ QMP_PHY_INIT_CFG (QSERDES_PLL_LOCK_CMP_EN , 0x42 ),
461
+ QMP_PHY_INIT_CFG (QSERDES_PLL_RESETSM_CNTRL , 0x20 ),
462
+ QMP_PHY_INIT_CFG (QSERDES_PLL_SVS_MODE_CLK_SEL , 0x01 ),
463
+ QMP_PHY_INIT_CFG (QSERDES_PLL_VCO_TUNE_MAP , 0x04 ),
464
+ QMP_PHY_INIT_CFG (QSERDES_PLL_SVS_MODE_CLK_SEL , 0x05 ),
465
+ QMP_PHY_INIT_CFG (QSERDES_PLL_VCO_TUNE_TIMER1 , 0xff ),
466
+ QMP_PHY_INIT_CFG (QSERDES_PLL_VCO_TUNE_TIMER2 , 0x3f ),
467
+ QMP_PHY_INIT_CFG (QSERDES_PLL_CORE_CLK_EN , 0x30 ),
468
+ QMP_PHY_INIT_CFG (QSERDES_PLL_HSCLK_SEL , 0x21 ),
469
+ QMP_PHY_INIT_CFG (QSERDES_PLL_DEC_START_MODE0 , 0x82 ),
470
+ QMP_PHY_INIT_CFG (QSERDES_PLL_DIV_FRAC_START3_MODE0 , 0x03 ),
471
+ QMP_PHY_INIT_CFG (QSERDES_PLL_DIV_FRAC_START2_MODE0 , 0x355 ),
472
+ QMP_PHY_INIT_CFG (QSERDES_PLL_DIV_FRAC_START1_MODE0 , 0x35555 ),
473
+ QMP_PHY_INIT_CFG (QSERDES_PLL_LOCK_CMP2_MODE0 , 0x1a ),
474
+ QMP_PHY_INIT_CFG (QSERDES_PLL_LOCK_CMP1_MODE0 , 0x1a0a ),
475
+ QMP_PHY_INIT_CFG (QSERDES_PLL_CP_CTRL_MODE0 , 0xb ),
476
+ QMP_PHY_INIT_CFG (QSERDES_PLL_PLL_RCTRL_MODE0 , 0x16 ),
477
+ QMP_PHY_INIT_CFG (QSERDES_PLL_PLL_CCTRL_MODE0 , 0x28 ),
478
+ QMP_PHY_INIT_CFG (QSERDES_PLL_INTEGLOOP_GAIN1_MODE0 , 0x0 ),
479
+ QMP_PHY_INIT_CFG (QSERDES_PLL_INTEGLOOP_GAIN0_MODE0 , 0x40 ),
480
+ QMP_PHY_INIT_CFG (QSERDES_PLL_VCO_TUNE2_MODE0 , 0x02 ),
481
+ QMP_PHY_INIT_CFG (QSERDES_PLL_VCO_TUNE1_MODE0 , 0x24 ),
482
+ QMP_PHY_INIT_CFG (QSERDES_PLL_SVS_MODE_CLK_SEL , 0x05 ),
483
+ QMP_PHY_INIT_CFG (QSERDES_PLL_CORE_CLK_EN , 0x20 ),
484
+ QMP_PHY_INIT_CFG (QSERDES_PLL_CORECLK_DIV , 0xa ),
485
+ QMP_PHY_INIT_CFG (QSERDES_PLL_CLK_SELECT , 0x32 ),
486
+ QMP_PHY_INIT_CFG (QSERDES_PLL_SYS_CLK_CTRL , 0x02 ),
487
+ QMP_PHY_INIT_CFG (QSERDES_PLL_SYSCLK_BUF_ENABLE , 0x07 ),
488
+ QMP_PHY_INIT_CFG (QSERDES_PLL_SYSCLK_EN_SEL , 0x08 ),
489
+ QMP_PHY_INIT_CFG (QSERDES_PLL_BG_TIMER , 0xa ),
490
+ QMP_PHY_INIT_CFG (QSERDES_PLL_HSCLK_SEL , 0x1 ),
491
+ QMP_PHY_INIT_CFG (QSERDES_PLL_DEC_START_MODE1 , 0x68 ),
492
+ QMP_PHY_INIT_CFG (QSERDES_PLL_DIV_FRAC_START3_MODE1 , 0x2 ),
493
+ QMP_PHY_INIT_CFG (QSERDES_PLL_DIV_FRAC_START2_MODE1 , 0x2aa ),
494
+ QMP_PHY_INIT_CFG (QSERDES_PLL_DIV_FRAC_START1_MODE1 , 0x2aaab ),
495
+ QMP_PHY_INIT_CFG (QSERDES_PLL_CLK_ENABLE1 , 0x90 ),
496
+ QMP_PHY_INIT_CFG (QSERDES_PLL_LOCK_CMP2_MODE1 , 0x34 ),
497
+ QMP_PHY_INIT_CFG (QSERDES_PLL_LOCK_CMP1_MODE1 , 0x3414 ),
498
+ QMP_PHY_INIT_CFG (QSERDES_PLL_CP_CTRL_MODE1 , 0x0b ),
499
+ QMP_PHY_INIT_CFG (QSERDES_PLL_PLL_RCTRL_MODE1 , 0x16 ),
500
+ QMP_PHY_INIT_CFG (QSERDES_PLL_PLL_CCTRL_MODE1 , 0x28 ),
501
+ QMP_PHY_INIT_CFG (QSERDES_PLL_INTEGLOOP_GAIN1_MODE1 , 0x0 ),
502
+ QMP_PHY_INIT_CFG (QSERDES_PLL_INTEGLOOP_GAIN0_MODE1 , 0x40 ),
503
+ QMP_PHY_INIT_CFG (QSERDES_PLL_VCO_TUNE2_MODE1 , 0x03 ),
504
+ QMP_PHY_INIT_CFG (QSERDES_PLL_VCO_TUNE1_MODE1 , 0xb4 ),
505
+ QMP_PHY_INIT_CFG (QSERDES_PLL_SVS_MODE_CLK_SEL , 0x05 ),
506
+ QMP_PHY_INIT_CFG (QSERDES_PLL_CORE_CLK_EN , 0x0 ),
507
+ QMP_PHY_INIT_CFG (QSERDES_PLL_CORECLK_DIV_MODE1 , 0x08 ),
508
+ QMP_PHY_INIT_CFG (QSERDES_PLL_CLK_EP_DIV_MODE0 , 0x19 ),
509
+ QMP_PHY_INIT_CFG (QSERDES_PLL_CLK_EP_DIV_MODE1 , 0x28 ),
510
+ QMP_PHY_INIT_CFG (QSERDES_PLL_CLK_ENABLE1 , 0x90 ),
511
+ };
512
+
513
+ static const struct qmp_phy_init_tbl ipq8074_pcie_gen3_tx_tbl [] = {
514
+ QMP_PHY_INIT_CFG (QSERDES_TX0_RES_CODE_LANE_OFFSET_TX , 0x02 ),
515
+ QMP_PHY_INIT_CFG (QSERDES_TX0_RCV_DETECT_LVL_2 , 0x12 ),
516
+ QMP_PHY_INIT_CFG (QSERDES_TX0_HIGHZ_DRVR_EN , 0x10 ),
517
+ QMP_PHY_INIT_CFG (QSERDES_TX0_LANE_MODE_1 , 0x06 ),
518
+ };
519
+
520
+ static const struct qmp_phy_init_tbl ipq8074_pcie_gen3_rx_tbl [] = {
521
+ QMP_PHY_INIT_CFG (QSERDES_RX0_SIGDET_CNTRL , 0x03 ),
522
+ QMP_PHY_INIT_CFG (QSERDES_RX0_SIGDET_ENABLES , 0x1c ),
523
+ QMP_PHY_INIT_CFG (QSERDES_RX0_SIGDET_DEGLITCH_CNTRL , 0x14 ),
524
+ QMP_PHY_INIT_CFG (QSERDES_RX0_RX_EQU_ADAPTOR_CNTRL2 , 0xe ),
525
+ QMP_PHY_INIT_CFG (QSERDES_RX0_RX_EQU_ADAPTOR_CNTRL3 , 0x4 ),
526
+ QMP_PHY_INIT_CFG (QSERDES_RX0_RX_EQU_ADAPTOR_CNTRL4 , 0x1b ),
527
+ QMP_PHY_INIT_CFG (QSERDES_RX0_DFE_EN_TIMER , 0x04 ),
528
+ QMP_PHY_INIT_CFG (QSERDES_RX0_UCDR_SO_SATURATION_AND_ENABLE , 0x7f ),
529
+ QMP_PHY_INIT_CFG (QSERDES_RX0_UCDR_PI_CONTROLS , 0x70 ),
530
+ QMP_PHY_INIT_CFG (QSERDES_RX0_RX_EQ_OFFSET_ADAPTOR_CNTRL1 , 0x73 ),
531
+ QMP_PHY_INIT_CFG (QSERDES_RX0_RX_OFFSET_ADAPTOR_CNTRL2 , 0x80 ),
532
+ QMP_PHY_INIT_CFG (QSERDES_RX0_RX_MODE_10_LOW , 0x00 ),
533
+ QMP_PHY_INIT_CFG (QSERDES_RX0_RX_MODE_10_HIGH , 0x02 ),
534
+ QMP_PHY_INIT_CFG (QSERDES_RX0_RX_MODE_10_HIGH2 , 0xc8 ),
535
+ QMP_PHY_INIT_CFG (QSERDES_RX0_RX_MODE_10_HIGH3 , 0x09 ),
536
+ QMP_PHY_INIT_CFG (QSERDES_RX0_RX_MODE_10_HIGH4 , 0xb1 ),
537
+ QMP_PHY_INIT_CFG (QSERDES_RX0_RX_MODE_01_LOW , 0x01 ),
538
+ QMP_PHY_INIT_CFG (QSERDES_RX0_RX_MODE_01_HIGH , 0x02 ),
539
+ QMP_PHY_INIT_CFG (QSERDES_RX0_RX_MODE_01_HIGH2 , 0xc8 ),
540
+ QMP_PHY_INIT_CFG (QSERDES_RX0_RX_MODE_01_HIGH3 , 0x09 ),
541
+ QMP_PHY_INIT_CFG (QSERDES_RX0_RX_MODE_01_HIGH4 , 0xb1 ),
542
+ QMP_PHY_INIT_CFG (QSERDES_RX0_RX_MODE_00_LOW , 0xf0 ),
543
+ QMP_PHY_INIT_CFG (QSERDES_RX0_RX_MODE_00_HIGH , 0x2 ),
544
+ QMP_PHY_INIT_CFG (QSERDES_RX0_RX_MODE_00_HIGH2 , 0x2f ),
545
+ QMP_PHY_INIT_CFG (QSERDES_RX0_RX_MODE_00_HIGH3 , 0xd3 ),
546
+ QMP_PHY_INIT_CFG (QSERDES_RX0_RX_MODE_00_HIGH4 , 0x40 ),
547
+ QMP_PHY_INIT_CFG (QSERDES_RX0_RX_IDAC_TSETTLE_HIGH , 0x00 ),
548
+ QMP_PHY_INIT_CFG (QSERDES_RX0_RX_IDAC_TSETTLE_LOW , 0xc0 ),
549
+ QMP_PHY_INIT_CFG (QSERDES_RX0_UCDR_FO_GAIN , 0x0c ),
550
+ QMP_PHY_INIT_CFG (QSERDES_RX0_UCDR_SO_GAIN , 0x02 ),
551
+ };
552
+
553
+ static const struct qmp_phy_init_tbl ipq8074_pcie_gen3_pcs_tbl [] = {
554
+ QMP_PHY_INIT_CFG (PCS_COM_FLL_CNTRL2 , 0x83 ),
555
+ QMP_PHY_INIT_CFG (PCS_COM_FLL_CNT_VAL_L , 0x9 ),
556
+ QMP_PHY_INIT_CFG (PCS_COM_FLL_CNT_VAL_H_TOL , 0x42 ),
557
+ QMP_PHY_INIT_CFG (PCS_COM_FLL_MAN_CODE , 0x40 ),
558
+ QMP_PHY_INIT_CFG (PCS_COM_FLL_CNTRL1 , 0x01 ),
559
+ QMP_PHY_INIT_CFG (PCS_COM_P2U3_WAKEUP_DLY_TIME_AUXCLK_H , 0x0 ),
560
+ QMP_PHY_INIT_CFG (PCS_COM_P2U3_WAKEUP_DLY_TIME_AUXCLK_L , 0x1 ),
561
+ QMP_PHY_INIT_CFG (PCS_PCIE_OSC_DTCT_ACTIONS , 0x0 ),
562
+ QMP_PHY_INIT_CFG (PCS_PCIE_L1P1_WAKEUP_DLY_TIME_AUXCLK_H , 0x00 ),
563
+ QMP_PHY_INIT_CFG (PCS_PCIE_L1P1_WAKEUP_DLY_TIME_AUXCLK_L , 0x01 ),
564
+ QMP_PHY_INIT_CFG (PCS_PCIE_L1P2_WAKEUP_DLY_TIME_AUXCLK_H , 0x00 ),
565
+ QMP_PHY_INIT_CFG (PCS_PCIE_L1P2_WAKEUP_DLY_TIME_AUXCLK_L , 0x01 ),
566
+ QMP_PHY_INIT_CFG (PCS_PCIE_EQ_CONFIG1 , 0x11 ),
567
+ QMP_PHY_INIT_CFG (PCS_PCIE_EQ_CONFIG2 , 0xb ),
568
+ QMP_PHY_INIT_CFG (PCS_PCIE_POWER_STATE_CONFIG4 , 0x07 ),
569
+ QMP_PHY_INIT_CFG (PCS_PCIE_OSC_DTCT_CONFIG2 , 0x52 ),
570
+ QMP_PHY_INIT_CFG (PCS_PCIE_OSC_DTCT_MODE2_CONFIG2 , 0x50 ),
571
+ QMP_PHY_INIT_CFG (PCS_PCIE_OSC_DTCT_MODE2_CONFIG4 , 0x1a ),
572
+ QMP_PHY_INIT_CFG (PCS_PCIE_OSC_DTCT_MODE2_CONFIG5 , 0x6 ),
573
+ QMP_PHY_INIT_CFG (PCS_COM_G12S1_TXDEEMPH_M3P5DB , 0x10 ),
574
+ QMP_PHY_INIT_CFG (PCS_PCIE_ENDPOINT_REFCLK_DRIVE , 0xc1 ),
575
+ QMP_PHY_INIT_CFG (PCS_COM_RX_DCC_CAL_CONFIG , 0x01 ),
576
+ QMP_PHY_INIT_CFG (PCS_COM_RX_SIGDET_LVL , 0xaa ),
577
+ QMP_PHY_INIT_CFG (PCS_COM_REFGEN_REQ_CONFIG1 , 0x0d ),
578
+ };
579
+
453
580
static const struct qmp_phy_init_tbl sdm845_qmp_pcie_serdes_tbl [] = {
454
581
QMP_PHY_INIT_CFG (QSERDES_V3_COM_BIAS_EN_CLKBUFLR_EN , 0x14 ),
455
582
QMP_PHY_INIT_CFG (QSERDES_V3_COM_CLK_SELECT , 0x30 ),
@@ -1424,6 +1551,36 @@ static const struct qmp_phy_cfg ipq8074_pciephy_cfg = {
1424
1551
.pwrdn_delay_max = 1005 , /* us */
1425
1552
};
1426
1553
1554
+ static const struct qmp_phy_cfg ipq8074_pciephy_gen3_cfg = {
1555
+ .type = PHY_TYPE_PCIE ,
1556
+ .nlanes = 1 ,
1557
+
1558
+ .serdes_tbl = ipq8074_pcie_gen3_serdes_tbl ,
1559
+ .serdes_tbl_num = ARRAY_SIZE (ipq8074_pcie_gen3_serdes_tbl ),
1560
+ .tx_tbl = ipq8074_pcie_gen3_tx_tbl ,
1561
+ .tx_tbl_num = ARRAY_SIZE (ipq8074_pcie_gen3_tx_tbl ),
1562
+ .rx_tbl = ipq8074_pcie_gen3_rx_tbl ,
1563
+ .rx_tbl_num = ARRAY_SIZE (ipq8074_pcie_gen3_rx_tbl ),
1564
+ .pcs_tbl = ipq8074_pcie_gen3_pcs_tbl ,
1565
+ .pcs_tbl_num = ARRAY_SIZE (ipq8074_pcie_gen3_pcs_tbl ),
1566
+ .clk_list = ipq8074_pciephy_clk_l ,
1567
+ .num_clks = ARRAY_SIZE (ipq8074_pciephy_clk_l ),
1568
+ .reset_list = ipq8074_pciephy_reset_l ,
1569
+ .num_resets = ARRAY_SIZE (ipq8074_pciephy_reset_l ),
1570
+ .vreg_list = NULL ,
1571
+ .num_vregs = 0 ,
1572
+ .regs = ipq_pciephy_gen3_regs_layout ,
1573
+
1574
+ .start_ctrl = SERDES_START | PCS_START ,
1575
+ .pwrdn_ctrl = SW_PWRDN | REFCLK_DRV_DSBL ,
1576
+
1577
+ .has_pwrdn_delay = true,
1578
+ .pwrdn_delay_min = 995 , /* us */
1579
+ .pwrdn_delay_max = 1005 , /* us */
1580
+
1581
+ .pipe_clock_rate = 250000000 ,
1582
+ };
1583
+
1427
1584
static const struct qmp_phy_cfg ipq6018_pciephy_cfg = {
1428
1585
.type = PHY_TYPE_PCIE ,
1429
1586
.nlanes = 1 ,
@@ -2250,6 +2407,9 @@ static const struct of_device_id qcom_qmp_phy_pcie_of_match_table[] = {
2250
2407
}, {
2251
2408
.compatible = "qcom,ipq8074-qmp-pcie-phy" ,
2252
2409
.data = & ipq8074_pciephy_cfg ,
2410
+ }, {
2411
+ .compatible = "qcom,ipq8074-qmp-gen3-pcie-phy" ,
2412
+ .data = & ipq8074_pciephy_gen3_cfg ,
2253
2413
}, {
2254
2414
.compatible = "qcom,ipq6018-qmp-pcie-phy" ,
2255
2415
.data = & ipq6018_pciephy_cfg ,
0 commit comments