@@ -234,6 +234,11 @@ static const unsigned int sdm845_ufsphy_regs_layout[QPHY_LAYOUT_SIZE] = {
234
234
[QPHY_PCS_READY_STATUS ] = 0x160 ,
235
235
};
236
236
237
+ static const unsigned int sm6115_ufsphy_regs_layout [QPHY_LAYOUT_SIZE ] = {
238
+ [QPHY_START_CTRL ] = 0x00 ,
239
+ [QPHY_PCS_READY_STATUS ] = 0x168 ,
240
+ };
241
+
237
242
static const unsigned int sm8250_pcie_regs_layout [QPHY_LAYOUT_SIZE ] = {
238
243
[QPHY_SW_RESET ] = 0x00 ,
239
244
[QPHY_START_CTRL ] = 0x44 ,
@@ -1329,6 +1334,97 @@ static const struct qmp_phy_init_tbl qmp_v3_usb3_uniphy_pcs_tbl[] = {
1329
1334
QMP_PHY_INIT_CFG (QPHY_V3_PCS_REFGEN_REQ_CONFIG2 , 0x60 ),
1330
1335
};
1331
1336
1337
+ static const struct qmp_phy_init_tbl sm6115_ufsphy_serdes_tbl [] = {
1338
+ QMP_PHY_INIT_CFG (QSERDES_COM_CMN_CONFIG , 0x0e ),
1339
+ QMP_PHY_INIT_CFG (QSERDES_COM_SYSCLK_EN_SEL , 0x14 ),
1340
+ QMP_PHY_INIT_CFG (QSERDES_COM_CLK_SELECT , 0x30 ),
1341
+ QMP_PHY_INIT_CFG (QSERDES_COM_SYS_CLK_CTRL , 0x02 ),
1342
+ QMP_PHY_INIT_CFG (QSERDES_COM_BIAS_EN_CLKBUFLR_EN , 0x08 ),
1343
+ QMP_PHY_INIT_CFG (QSERDES_COM_BG_TIMER , 0x0a ),
1344
+ QMP_PHY_INIT_CFG (QSERDES_COM_HSCLK_SEL , 0x00 ),
1345
+ QMP_PHY_INIT_CFG (QSERDES_COM_CORECLK_DIV , 0x0a ),
1346
+ QMP_PHY_INIT_CFG (QSERDES_COM_CORECLK_DIV_MODE1 , 0x0a ),
1347
+ QMP_PHY_INIT_CFG (QSERDES_COM_LOCK_CMP_EN , 0x01 ),
1348
+ QMP_PHY_INIT_CFG (QSERDES_COM_VCO_TUNE_CTRL , 0x00 ),
1349
+ QMP_PHY_INIT_CFG (QSERDES_COM_RESETSM_CNTRL , 0x20 ),
1350
+ QMP_PHY_INIT_CFG (QSERDES_COM_CORE_CLK_EN , 0x00 ),
1351
+ QMP_PHY_INIT_CFG (QSERDES_COM_LOCK_CMP_CFG , 0x00 ),
1352
+ QMP_PHY_INIT_CFG (QSERDES_COM_VCO_TUNE_TIMER1 , 0xff ),
1353
+ QMP_PHY_INIT_CFG (QSERDES_COM_VCO_TUNE_TIMER2 , 0x3f ),
1354
+ QMP_PHY_INIT_CFG (QSERDES_COM_VCO_TUNE_MAP , 0x04 ),
1355
+ QMP_PHY_INIT_CFG (QSERDES_COM_SVS_MODE_CLK_SEL , 0x05 ),
1356
+ QMP_PHY_INIT_CFG (QSERDES_COM_DEC_START_MODE0 , 0x82 ),
1357
+ QMP_PHY_INIT_CFG (QSERDES_COM_DIV_FRAC_START1_MODE0 , 0x00 ),
1358
+ QMP_PHY_INIT_CFG (QSERDES_COM_DIV_FRAC_START2_MODE0 , 0x00 ),
1359
+ QMP_PHY_INIT_CFG (QSERDES_COM_DIV_FRAC_START3_MODE0 , 0x00 ),
1360
+ QMP_PHY_INIT_CFG (QSERDES_COM_CP_CTRL_MODE0 , 0x0b ),
1361
+ QMP_PHY_INIT_CFG (QSERDES_COM_PLL_RCTRL_MODE0 , 0x16 ),
1362
+ QMP_PHY_INIT_CFG (QSERDES_COM_PLL_CCTRL_MODE0 , 0x28 ),
1363
+ QMP_PHY_INIT_CFG (QSERDES_COM_INTEGLOOP_GAIN0_MODE0 , 0x80 ),
1364
+ QMP_PHY_INIT_CFG (QSERDES_COM_INTEGLOOP_GAIN1_MODE0 , 0x00 ),
1365
+ QMP_PHY_INIT_CFG (QSERDES_COM_VCO_TUNE1_MODE0 , 0x28 ),
1366
+ QMP_PHY_INIT_CFG (QSERDES_COM_VCO_TUNE2_MODE0 , 0x02 ),
1367
+ QMP_PHY_INIT_CFG (QSERDES_COM_LOCK_CMP1_MODE0 , 0xff ),
1368
+ QMP_PHY_INIT_CFG (QSERDES_COM_LOCK_CMP2_MODE0 , 0x0c ),
1369
+ QMP_PHY_INIT_CFG (QSERDES_COM_LOCK_CMP3_MODE0 , 0x00 ),
1370
+ QMP_PHY_INIT_CFG (QSERDES_COM_DEC_START_MODE1 , 0x98 ),
1371
+ QMP_PHY_INIT_CFG (QSERDES_COM_DIV_FRAC_START1_MODE1 , 0x00 ),
1372
+ QMP_PHY_INIT_CFG (QSERDES_COM_DIV_FRAC_START2_MODE1 , 0x00 ),
1373
+ QMP_PHY_INIT_CFG (QSERDES_COM_DIV_FRAC_START3_MODE1 , 0x00 ),
1374
+ QMP_PHY_INIT_CFG (QSERDES_COM_CP_CTRL_MODE1 , 0x0b ),
1375
+ QMP_PHY_INIT_CFG (QSERDES_COM_PLL_RCTRL_MODE1 , 0x16 ),
1376
+ QMP_PHY_INIT_CFG (QSERDES_COM_PLL_CCTRL_MODE1 , 0x28 ),
1377
+ QMP_PHY_INIT_CFG (QSERDES_COM_INTEGLOOP_GAIN0_MODE1 , 0x80 ),
1378
+ QMP_PHY_INIT_CFG (QSERDES_COM_INTEGLOOP_GAIN1_MODE1 , 0x00 ),
1379
+ QMP_PHY_INIT_CFG (QSERDES_COM_VCO_TUNE1_MODE1 , 0xd6 ),
1380
+ QMP_PHY_INIT_CFG (QSERDES_COM_VCO_TUNE2_MODE1 , 0x00 ),
1381
+ QMP_PHY_INIT_CFG (QSERDES_COM_LOCK_CMP1_MODE1 , 0x32 ),
1382
+ QMP_PHY_INIT_CFG (QSERDES_COM_LOCK_CMP2_MODE1 , 0x0f ),
1383
+ QMP_PHY_INIT_CFG (QSERDES_COM_LOCK_CMP3_MODE1 , 0x00 ),
1384
+ QMP_PHY_INIT_CFG (QSERDES_COM_PLL_IVCO , 0x0f ),
1385
+ QMP_PHY_INIT_CFG (QSERDES_COM_BG_TRIM , 0x0f ),
1386
+ QMP_PHY_INIT_CFG (QSERDES_COM_VCO_TUNE_INITVAL1 , 0xff ),
1387
+ QMP_PHY_INIT_CFG (QSERDES_COM_VCO_TUNE_INITVAL2 , 0x00 ),
1388
+
1389
+ /* Rate B */
1390
+ QMP_PHY_INIT_CFG (QSERDES_COM_VCO_TUNE_MAP , 0x44 ),
1391
+ };
1392
+
1393
+ static const struct qmp_phy_init_tbl sm6115_ufsphy_tx_tbl [] = {
1394
+ QMP_PHY_INIT_CFG (QSERDES_TX_HIGHZ_TRANSCEIVEREN_BIAS_DRVR_EN , 0x45 ),
1395
+ QMP_PHY_INIT_CFG (QSERDES_TX_LANE_MODE , 0x06 ),
1396
+ };
1397
+
1398
+ static const struct qmp_phy_init_tbl sm6115_ufsphy_rx_tbl [] = {
1399
+ QMP_PHY_INIT_CFG (QSERDES_RX_SIGDET_LVL , 0x24 ),
1400
+ QMP_PHY_INIT_CFG (QSERDES_RX_SIGDET_CNTRL , 0x0F ),
1401
+ QMP_PHY_INIT_CFG (QSERDES_RX_RX_INTERFACE_MODE , 0x40 ),
1402
+ QMP_PHY_INIT_CFG (QSERDES_RX_SIGDET_DEGLITCH_CNTRL , 0x1E ),
1403
+ QMP_PHY_INIT_CFG (QSERDES_RX_UCDR_FASTLOCK_FO_GAIN , 0x0B ),
1404
+ QMP_PHY_INIT_CFG (QSERDES_RX_RX_TERM_BW , 0x5B ),
1405
+ QMP_PHY_INIT_CFG (QSERDES_RX_RX_EQ_GAIN1_LSB , 0xFF ),
1406
+ QMP_PHY_INIT_CFG (QSERDES_RX_RX_EQ_GAIN1_MSB , 0x3F ),
1407
+ QMP_PHY_INIT_CFG (QSERDES_RX_RX_EQ_GAIN2_LSB , 0xFF ),
1408
+ QMP_PHY_INIT_CFG (QSERDES_RX_RX_EQ_GAIN2_MSB , 0x3F ),
1409
+ QMP_PHY_INIT_CFG (QSERDES_RX_RX_EQU_ADAPTOR_CNTRL2 , 0x0D ),
1410
+ QMP_PHY_INIT_CFG (QSERDES_RX_UCDR_SVS_SO_GAIN_HALF , 0x04 ),
1411
+ QMP_PHY_INIT_CFG (QSERDES_RX_UCDR_SVS_SO_GAIN_QUARTER , 0x04 ),
1412
+ QMP_PHY_INIT_CFG (QSERDES_RX_UCDR_SVS_SO_GAIN , 0x04 ),
1413
+ QMP_PHY_INIT_CFG (QSERDES_RX_UCDR_SO_SATURATION_AND_ENABLE , 0x5B ),
1414
+ };
1415
+
1416
+ static const struct qmp_phy_init_tbl sm6115_ufsphy_pcs_tbl [] = {
1417
+ QMP_PHY_INIT_CFG (QPHY_RX_PWM_GEAR_BAND , 0x15 ),
1418
+ QMP_PHY_INIT_CFG (QPHY_RX_SIGDET_CTRL2 , 0x6d ),
1419
+ QMP_PHY_INIT_CFG (QPHY_TX_LARGE_AMP_DRV_LVL , 0x0f ),
1420
+ QMP_PHY_INIT_CFG (QPHY_TX_SMALL_AMP_DRV_LVL , 0x02 ),
1421
+ QMP_PHY_INIT_CFG (QPHY_RX_MIN_STALL_NOCONFIG_TIME_CAP , 0x28 ),
1422
+ QMP_PHY_INIT_CFG (QPHY_RX_SYM_RESYNC_CTRL , 0x03 ),
1423
+ QMP_PHY_INIT_CFG (QPHY_TX_LARGE_AMP_POST_EMP_LVL , 0x12 ),
1424
+ QMP_PHY_INIT_CFG (QPHY_TX_SMALL_AMP_POST_EMP_LVL , 0x0f ),
1425
+ QMP_PHY_INIT_CFG (QPHY_RX_MIN_HIBERN8_TIME , 0x9a ), /* 8 us */
1426
+ };
1427
+
1332
1428
static const struct qmp_phy_init_tbl sdm845_ufsphy_serdes_tbl [] = {
1333
1429
QMP_PHY_INIT_CFG (QSERDES_V3_COM_SYS_CLK_CTRL , 0x02 ),
1334
1430
QMP_PHY_INIT_CFG (QSERDES_V3_COM_BIAS_EN_CLKBUFLR_EN , 0x04 ),
@@ -3396,6 +3492,31 @@ static const struct qmp_phy_cfg sdm845_ufsphy_cfg = {
3396
3492
.no_pcs_sw_reset = true,
3397
3493
};
3398
3494
3495
+ static const struct qmp_phy_cfg sm6115_ufsphy_cfg = {
3496
+ .type = PHY_TYPE_UFS ,
3497
+ .nlanes = 1 ,
3498
+
3499
+ .serdes_tbl = sm6115_ufsphy_serdes_tbl ,
3500
+ .serdes_tbl_num = ARRAY_SIZE (sm6115_ufsphy_serdes_tbl ),
3501
+ .tx_tbl = sm6115_ufsphy_tx_tbl ,
3502
+ .tx_tbl_num = ARRAY_SIZE (sm6115_ufsphy_tx_tbl ),
3503
+ .rx_tbl = sm6115_ufsphy_rx_tbl ,
3504
+ .rx_tbl_num = ARRAY_SIZE (sm6115_ufsphy_rx_tbl ),
3505
+ .pcs_tbl = sm6115_ufsphy_pcs_tbl ,
3506
+ .pcs_tbl_num = ARRAY_SIZE (sm6115_ufsphy_pcs_tbl ),
3507
+ .clk_list = sdm845_ufs_phy_clk_l ,
3508
+ .num_clks = ARRAY_SIZE (sdm845_ufs_phy_clk_l ),
3509
+ .vreg_list = qmp_phy_vreg_l ,
3510
+ .num_vregs = ARRAY_SIZE (qmp_phy_vreg_l ),
3511
+ .regs = sm6115_ufsphy_regs_layout ,
3512
+
3513
+ .start_ctrl = SERDES_START ,
3514
+ .pwrdn_ctrl = SW_PWRDN ,
3515
+
3516
+ .is_dual_lane_phy = false,
3517
+ .no_pcs_sw_reset = true,
3518
+ };
3519
+
3399
3520
static const struct qmp_phy_cfg msm8998_pciephy_cfg = {
3400
3521
.type = PHY_TYPE_PCIE ,
3401
3522
.nlanes = 1 ,
@@ -5444,6 +5565,9 @@ static const struct of_device_id qcom_qmp_phy_of_match_table[] = {
5444
5565
}, {
5445
5566
.compatible = "qcom,msm8998-qmp-usb3-phy" ,
5446
5567
.data = & msm8998_usb3phy_cfg ,
5568
+ }, {
5569
+ .compatible = "qcom,sm6115-qmp-ufs-phy" ,
5570
+ .data = & sm6115_ufsphy_cfg ,
5447
5571
}, {
5448
5572
.compatible = "qcom,sm8150-qmp-ufs-phy" ,
5449
5573
.data = & sm8150_ufsphy_cfg ,
0 commit comments