Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

phy: qcom-qmp-ufs: Add PHY Configuration support for sm8750

Add SM8750 specific register layout and table configs. The serdes
TX RX register offset has changed for SM8750 and hence keep UFS
specific serdes offsets in a dedicated header file.

Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
Co-developed-by: Manish Pandey <quic_mapa@quicinc.com>
Signed-off-by: Manish Pandey <quic_mapa@quicinc.com>
Signed-off-by: Nitin Rawat <quic_nitirawa@quicinc.com>
Link: https://lore.kernel.org/r/20250310-sm8750_ufs_master-v2-2-0dfdd6823161@quicinc.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>

authored by

Nitin Rawat and committed by
Vinod Koul
b02cc9a1 12185bc3

+246 -8
+7
drivers/phy/qualcomm/phy-qcom-qmp-qserdes-com-v6.h
··· 86 86 #define QSERDES_V6_COM_CMN_STATUS 0x1d0 87 87 #define QSERDES_V6_COM_C_READY_STATUS 0x1f8 88 88 89 + #define QSERDES_V6_COM_ADAPTIVE_ANALOG_CONFIG 0x268 90 + #define QSERDES_V6_COM_CP_CTRL_ADAPTIVE_MODE0 0x26c 91 + #define QSERDES_V6_COM_PLL_RCCTRL_ADAPTIVE_MODE0 0x270 92 + #define QSERDES_V6_COM_PLL_CCTRL_ADAPTIVE_MODE0 0x274 93 + #define QSERDES_V6_COM_CP_CTRL_ADAPTIVE_MODE1 0x278 94 + #define QSERDES_V6_COM_PLL_RCCTRL_ADAPTIVE_MODE1 0x27c 95 + #define QSERDES_V6_COM_PLL_CCTRL_ADAPTIVE_MODE1 0x280 89 96 #endif
+67
drivers/phy/qualcomm/phy-qcom-qmp-qserdes-txrx-ufs-v7.h
··· 1 + /* SPDX-License-Identifier: GPL-2.0 */ 2 + /* 3 + * Copyright (c) 2024, Linaro Limited 4 + */ 5 + 6 + #ifndef QCOM_PHY_QMP_QSERDES_TXRX_UFS_V7_H_ 7 + #define QCOM_PHY_QMP_QSERDES_TXRX_UFS_V7_H_ 8 + 9 + #define QSERDES_UFS_V7_TX_RES_CODE_LANE_TX 0x28 10 + #define QSERDES_UFS_V7_TX_RES_CODE_LANE_RX 0x2c 11 + #define QSERDES_UFS_V7_TX_RES_CODE_LANE_OFFSET_TX 0x30 12 + #define QSERDES_UFS_V7_TX_RES_CODE_LANE_OFFSET_RX 0x34 13 + #define QSERDES_UFS_V7_TX_LANE_MODE_1 0x7c 14 + #define QSERDES_UFS_V7_TX_FR_DCC_CTRL 0x108 15 + 16 + #define QSERDES_UFS_V7_RX_UCDR_FASTLOCK_FO_GAIN_RATE4 0x10 17 + #define QSERDES_UFS_V7_RX_UCDR_FASTLOCK_SO_GAIN_RATE4 0x24 18 + #define QSERDES_UFS_V7_RX_UCDR_SO_SATURATION 0x28 19 + #define QSERDES_UFS_V7_RX_UCDR_FASTLOCK_COUNT_HIGH_RATE4 0x54 20 + #define QSERDES_UFS_V7_RX_UCDR_PI_CTRL1 0x58 21 + #define QSERDES_UFS_V7_RX_TERM_BW_CTRL0 0xc4 22 + #define QSERDES_UFS_V7_RX_UCDR_FO_GAIN_RATE2 0xd4 23 + #define QSERDES_UFS_V7_RX_UCDR_FO_GAIN_RATE4 0xdc 24 + #define QSERDES_UFS_V7_RX_UCDR_SO_GAIN_RATE4 0xf0 25 + #define QSERDES_UFS_V7_RX_UCDR_PI_CONTROLS 0xf4 26 + #define QSERDES_UFS_V7_RX_VGA_CAL_MAN_VAL 0x178 27 + #define QSERDES_UFS_V7_RX_EQU_ADAPTOR_CNTRL4 0x1b4 28 + #define QSERDES_UFS_V7_RX_EQ_OFFSET_ADAPTOR_CNTRL1 0x1cc 29 + #define QSERDES_UFS_V7_RX_OFFSET_ADAPTOR_CNTRL3 0x1d4 30 + #define QSERDES_UFS_V7_RX_INTERFACE_MODE 0x1f0 31 + #define QSERDES_UFS_V7_RX_MODE_RATE_0_1_B0 0x218 32 + #define QSERDES_UFS_V7_RX_MODE_RATE_0_1_B1 0x21C 33 + #define QSERDES_UFS_V7_RX_MODE_RATE_0_1_B2 0x220 34 + #define QSERDES_UFS_V7_RX_MODE_RATE_0_1_B3 0x224 35 + #define QSERDES_UFS_V7_RX_MODE_RATE_0_1_B4 0x228 36 + #define QSERDES_UFS_V7_RX_MODE_RATE_0_1_B6 0x230 37 + #define QSERDES_UFS_V7_RX_MODE_RATE_0_1_B7 0x234 38 + #define QSERDES_UFS_V7_RX_MODE_RATE2_B3 0x248 39 + #define QSERDES_UFS_V7_RX_MODE_RATE2_B6 0x254 40 + #define QSERDES_UFS_V7_RX_MODE_RATE2_B7 0x258 41 + #define QSERDES_UFS_V7_RX_MODE_RATE3_B0 0x260 42 + #define QSERDES_UFS_V7_RX_MODE_RATE3_B1 0x264 43 + #define QSERDES_UFS_V7_RX_MODE_RATE3_B2 0x268 44 + #define QSERDES_UFS_V7_RX_MODE_RATE3_B3 0x26c 45 + #define QSERDES_UFS_V7_RX_MODE_RATE3_B4 0x270 46 + #define QSERDES_UFS_V7_RX_MODE_RATE3_B5 0x274 47 + #define QSERDES_UFS_V7_RX_MODE_RATE3_B7 0x27c 48 + #define QSERDES_UFS_V7_RX_MODE_RATE3_B8 0x280 49 + #define QSERDES_UFS_V7_RX_MODE_RATE4_SA_B0 0x284 50 + #define QSERDES_UFS_V7_RX_MODE_RATE4_SA_B1 0x288 51 + #define QSERDES_UFS_V7_RX_MODE_RATE4_SA_B2 0x28c 52 + #define QSERDES_UFS_V7_RX_MODE_RATE4_SA_B3 0x290 53 + #define QSERDES_UFS_V7_RX_MODE_RATE4_SA_B4 0x294 54 + #define QSERDES_UFS_V7_RX_MODE_RATE4_SA_B5 0x298 55 + #define QSERDES_UFS_V7_RX_MODE_RATE4_SA_B6 0x29c 56 + #define QSERDES_UFS_V7_RX_MODE_RATE4_SA_B7 0x2a0 57 + #define QSERDES_UFS_V7_RX_MODE_RATE4_SB_B0 0x2a8 58 + #define QSERDES_UFS_V7_RX_MODE_RATE4_SB_B1 0x2ac 59 + #define QSERDES_UFS_V7_RX_MODE_RATE4_SB_B2 0x2b0 60 + #define QSERDES_UFS_V7_RX_MODE_RATE4_SB_B3 0x2b4 61 + #define QSERDES_UFS_V7_RX_MODE_RATE4_SB_B4 0x2b8 62 + #define QSERDES_UFS_V7_RX_MODE_RATE4_SB_B5 0x2bc 63 + #define QSERDES_UFS_V7_RX_MODE_RATE4_SB_B6 0x2c0 64 + #define QSERDES_UFS_V7_RX_MODE_RATE4_SB_B7 0x2c4 65 + #define QSERDES_UFS_V7_RX_DLL0_FTUNE_CTRL 0x348 66 + #define QSERDES_UFS_V7_RX_SIGDET_CAL_TRIM 0x380 67 + #endif
+172 -8
drivers/phy/qualcomm/phy-qcom-qmp-ufs.c
··· 31 31 #include "phy-qcom-qmp-pcs-ufs-v6.h" 32 32 33 33 #include "phy-qcom-qmp-qserdes-txrx-ufs-v6.h" 34 + #include "phy-qcom-qmp-qserdes-txrx-ufs-v7.h" 34 35 35 36 /* QPHY_PCS_READY_STATUS bit */ 36 37 #define PCS_READY BIT(0) ··· 950 949 QMP_PHY_INIT_CFG(QPHY_V6_PCS_UFS_RX_HSG5_SYNC_WAIT_TIME, 0x9e), 951 950 }; 952 951 952 + static const struct qmp_phy_init_tbl sm8750_ufsphy_serdes[] = { 953 + QMP_PHY_INIT_CFG(QSERDES_V6_COM_SYSCLK_EN_SEL, 0xd9), 954 + QMP_PHY_INIT_CFG(QSERDES_V6_COM_CMN_CONFIG_1, 0x16), 955 + QMP_PHY_INIT_CFG(QSERDES_V6_COM_HSCLK_SEL_1, 0x11), 956 + QMP_PHY_INIT_CFG(QSERDES_V6_COM_HSCLK_HS_SWITCH_SEL_1, 0x00), 957 + QMP_PHY_INIT_CFG(QSERDES_V6_COM_LOCK_CMP_EN, 0x01), 958 + QMP_PHY_INIT_CFG(QSERDES_V6_COM_LOCK_CMP_CFG, 0x60), 959 + QMP_PHY_INIT_CFG(QSERDES_V6_COM_PLL_IVCO, 0x1f), 960 + QMP_PHY_INIT_CFG(QSERDES_V6_COM_PLL_IVCO_MODE1, 0x1f), 961 + QMP_PHY_INIT_CFG(QSERDES_V6_COM_CMN_IETRIM, 0x07), 962 + QMP_PHY_INIT_CFG(QSERDES_V6_COM_CMN_IPTRIM, 0x20), 963 + QMP_PHY_INIT_CFG(QSERDES_V6_COM_VCO_TUNE_MAP, 0x04), 964 + QMP_PHY_INIT_CFG(QSERDES_V6_COM_VCO_TUNE_CTRL, 0x40), 965 + QMP_PHY_INIT_CFG(QSERDES_V6_COM_ADAPTIVE_ANALOG_CONFIG, 0x06), 966 + QMP_PHY_INIT_CFG(QSERDES_V6_COM_DEC_START_MODE0, 0x41), 967 + QMP_PHY_INIT_CFG(QSERDES_V6_COM_CP_CTRL_MODE0, 0x06), 968 + QMP_PHY_INIT_CFG(QSERDES_V6_COM_PLL_RCTRL_MODE0, 0x18), 969 + QMP_PHY_INIT_CFG(QSERDES_V6_COM_PLL_CCTRL_MODE0, 0x14), 970 + QMP_PHY_INIT_CFG(QSERDES_V6_COM_CP_CTRL_ADAPTIVE_MODE0, 0x06), 971 + QMP_PHY_INIT_CFG(QSERDES_V6_COM_PLL_RCCTRL_ADAPTIVE_MODE0, 0x18), 972 + QMP_PHY_INIT_CFG(QSERDES_V6_COM_PLL_CCTRL_ADAPTIVE_MODE0, 0x14), 973 + QMP_PHY_INIT_CFG(QSERDES_V6_COM_LOCK_CMP1_MODE0, 0x7f), 974 + QMP_PHY_INIT_CFG(QSERDES_V6_COM_LOCK_CMP2_MODE0, 0x06), 975 + QMP_PHY_INIT_CFG(QSERDES_V6_COM_BIN_VCOCAL_CMP_CODE1_MODE0, 0x92), 976 + QMP_PHY_INIT_CFG(QSERDES_V6_COM_BIN_VCOCAL_CMP_CODE2_MODE0, 0x1e), 977 + QMP_PHY_INIT_CFG(QSERDES_V6_COM_DEC_START_MODE1, 0x4c), 978 + QMP_PHY_INIT_CFG(QSERDES_V6_COM_CP_CTRL_MODE1, 0x06), 979 + QMP_PHY_INIT_CFG(QSERDES_V6_COM_PLL_RCTRL_MODE1, 0x18), 980 + QMP_PHY_INIT_CFG(QSERDES_V6_COM_PLL_CCTRL_MODE1, 0x14), 981 + QMP_PHY_INIT_CFG(QSERDES_V6_COM_CP_CTRL_ADAPTIVE_MODE1, 0x06), 982 + QMP_PHY_INIT_CFG(QSERDES_V6_COM_PLL_RCCTRL_ADAPTIVE_MODE1, 0x18), 983 + QMP_PHY_INIT_CFG(QSERDES_V6_COM_PLL_CCTRL_ADAPTIVE_MODE1, 0x14), 984 + QMP_PHY_INIT_CFG(QSERDES_V6_COM_LOCK_CMP1_MODE1, 0x99), 985 + QMP_PHY_INIT_CFG(QSERDES_V6_COM_LOCK_CMP2_MODE1, 0x07), 986 + QMP_PHY_INIT_CFG(QSERDES_V6_COM_BIN_VCOCAL_CMP_CODE1_MODE1, 0xbe), 987 + QMP_PHY_INIT_CFG(QSERDES_V6_COM_BIN_VCOCAL_CMP_CODE2_MODE1, 0x23), 988 + }; 989 + 990 + static const struct qmp_phy_init_tbl sm8750_ufsphy_tx[] = { 991 + QMP_PHY_INIT_CFG(QSERDES_UFS_V7_TX_LANE_MODE_1, 0x00), 992 + QMP_PHY_INIT_CFG(QSERDES_UFS_V7_TX_RES_CODE_LANE_OFFSET_TX, 0x07), 993 + QMP_PHY_INIT_CFG(QSERDES_UFS_V7_TX_RES_CODE_LANE_OFFSET_RX, 0x17), 994 + }; 995 + 996 + static const struct qmp_phy_init_tbl sm8750_ufsphy_rx[] = { 997 + QMP_PHY_INIT_CFG(QSERDES_UFS_V7_RX_UCDR_FO_GAIN_RATE2, 0x0c), 998 + QMP_PHY_INIT_CFG(QSERDES_UFS_V7_RX_UCDR_FO_GAIN_RATE4, 0x0c), 999 + QMP_PHY_INIT_CFG(QSERDES_UFS_V7_RX_UCDR_SO_GAIN_RATE4, 0x04), 1000 + QMP_PHY_INIT_CFG(QSERDES_UFS_V7_RX_EQ_OFFSET_ADAPTOR_CNTRL1, 0x14), 1001 + QMP_PHY_INIT_CFG(QSERDES_UFS_V7_RX_UCDR_PI_CONTROLS, 0x07), 1002 + QMP_PHY_INIT_CFG(QSERDES_UFS_V7_RX_OFFSET_ADAPTOR_CNTRL3, 0x0e), 1003 + QMP_PHY_INIT_CFG(QSERDES_UFS_V7_RX_UCDR_FASTLOCK_COUNT_HIGH_RATE4, 0x02), 1004 + QMP_PHY_INIT_CFG(QSERDES_UFS_V7_RX_UCDR_FASTLOCK_FO_GAIN_RATE4, 0x1c), 1005 + QMP_PHY_INIT_CFG(QSERDES_UFS_V7_RX_UCDR_FASTLOCK_SO_GAIN_RATE4, 0x06), 1006 + QMP_PHY_INIT_CFG(QSERDES_UFS_V7_RX_VGA_CAL_MAN_VAL, 0x8e), 1007 + QMP_PHY_INIT_CFG(QSERDES_UFS_V7_RX_EQU_ADAPTOR_CNTRL4, 0x0f), 1008 + QMP_PHY_INIT_CFG(QSERDES_UFS_V7_RX_MODE_RATE_0_1_B0, 0xce), 1009 + QMP_PHY_INIT_CFG(QSERDES_UFS_V7_RX_MODE_RATE_0_1_B1, 0xce), 1010 + QMP_PHY_INIT_CFG(QSERDES_UFS_V7_RX_MODE_RATE_0_1_B2, 0x18), 1011 + QMP_PHY_INIT_CFG(QSERDES_UFS_V7_RX_MODE_RATE_0_1_B3, 0x1a), 1012 + QMP_PHY_INIT_CFG(QSERDES_UFS_V7_RX_MODE_RATE_0_1_B4, 0x0f), 1013 + QMP_PHY_INIT_CFG(QSERDES_UFS_V7_RX_MODE_RATE_0_1_B6, 0x60), 1014 + QMP_PHY_INIT_CFG(QSERDES_UFS_V7_RX_MODE_RATE_0_1_B7, 0x62), 1015 + QMP_PHY_INIT_CFG(QSERDES_UFS_V7_RX_MODE_RATE2_B3, 0x9a), 1016 + QMP_PHY_INIT_CFG(QSERDES_UFS_V7_RX_MODE_RATE2_B6, 0xe2), 1017 + QMP_PHY_INIT_CFG(QSERDES_UFS_V7_RX_MODE_RATE2_B7, 0x06), 1018 + QMP_PHY_INIT_CFG(QSERDES_UFS_V7_RX_MODE_RATE3_B0, 0x1b), 1019 + QMP_PHY_INIT_CFG(QSERDES_UFS_V7_RX_MODE_RATE3_B1, 0x1b), 1020 + QMP_PHY_INIT_CFG(QSERDES_UFS_V7_RX_MODE_RATE3_B2, 0x98), 1021 + QMP_PHY_INIT_CFG(QSERDES_UFS_V7_RX_MODE_RATE3_B3, 0x9b), 1022 + QMP_PHY_INIT_CFG(QSERDES_UFS_V7_RX_MODE_RATE3_B4, 0x2a), 1023 + QMP_PHY_INIT_CFG(QSERDES_UFS_V7_RX_MODE_RATE3_B5, 0x12), 1024 + QMP_PHY_INIT_CFG(QSERDES_UFS_V7_RX_MODE_RATE3_B7, 0x06), 1025 + QMP_PHY_INIT_CFG(QSERDES_UFS_V7_RX_MODE_RATE3_B8, 0x01), 1026 + QMP_PHY_INIT_CFG(QSERDES_UFS_V7_RX_MODE_RATE4_SA_B0, 0x93), 1027 + QMP_PHY_INIT_CFG(QSERDES_UFS_V7_RX_MODE_RATE4_SA_B1, 0x93), 1028 + QMP_PHY_INIT_CFG(QSERDES_UFS_V7_RX_MODE_RATE4_SA_B2, 0x60), 1029 + QMP_PHY_INIT_CFG(QSERDES_UFS_V7_RX_MODE_RATE4_SA_B3, 0x99), 1030 + QMP_PHY_INIT_CFG(QSERDES_UFS_V7_RX_MODE_RATE4_SA_B4, 0x5f), 1031 + QMP_PHY_INIT_CFG(QSERDES_UFS_V7_RX_MODE_RATE4_SA_B5, 0x92), 1032 + QMP_PHY_INIT_CFG(QSERDES_UFS_V7_RX_MODE_RATE4_SA_B6, 0xe3), 1033 + QMP_PHY_INIT_CFG(QSERDES_UFS_V7_RX_MODE_RATE4_SA_B7, 0x06), 1034 + QMP_PHY_INIT_CFG(QSERDES_UFS_V7_RX_MODE_RATE4_SB_B0, 0x9b), 1035 + QMP_PHY_INIT_CFG(QSERDES_UFS_V7_RX_MODE_RATE4_SB_B1, 0x9b), 1036 + QMP_PHY_INIT_CFG(QSERDES_UFS_V7_RX_MODE_RATE4_SB_B2, 0x60), 1037 + QMP_PHY_INIT_CFG(QSERDES_UFS_V7_RX_MODE_RATE4_SB_B3, 0x99), 1038 + QMP_PHY_INIT_CFG(QSERDES_UFS_V7_RX_MODE_RATE4_SB_B4, 0x5f), 1039 + QMP_PHY_INIT_CFG(QSERDES_UFS_V7_RX_MODE_RATE4_SB_B5, 0x92), 1040 + QMP_PHY_INIT_CFG(QSERDES_UFS_V7_RX_MODE_RATE4_SB_B6, 0xfb), 1041 + QMP_PHY_INIT_CFG(QSERDES_UFS_V7_RX_MODE_RATE4_SB_B7, 0x06), 1042 + QMP_PHY_INIT_CFG(QSERDES_UFS_V7_RX_UCDR_SO_SATURATION, 0x1f), 1043 + QMP_PHY_INIT_CFG(QSERDES_UFS_V7_RX_UCDR_PI_CTRL1, 0x94), 1044 + QMP_PHY_INIT_CFG(QSERDES_UFS_V7_RX_TERM_BW_CTRL0, 0xfa), 1045 + QMP_PHY_INIT_CFG(QSERDES_UFS_V7_RX_DLL0_FTUNE_CTRL, 0x30), 1046 + QMP_PHY_INIT_CFG(QSERDES_UFS_V7_RX_SIGDET_CAL_TRIM, 0x77), 1047 + }; 1048 + 1049 + static const struct qmp_phy_init_tbl sm8750_ufsphy_pcs[] = { 1050 + QMP_PHY_INIT_CFG(QPHY_V6_PCS_UFS_MULTI_LANE_CTRL1, 0x02), 1051 + QMP_PHY_INIT_CFG(QPHY_V6_PCS_UFS_TX_MID_TERM_CTRL1, 0x43), 1052 + QMP_PHY_INIT_CFG(QPHY_V6_PCS_UFS_PCS_CTRL1, 0x40), 1053 + QMP_PHY_INIT_CFG(QPHY_V6_PCS_UFS_TX_LARGE_AMP_DRV_LVL, 0x0f), 1054 + QMP_PHY_INIT_CFG(QPHY_V6_PCS_UFS_RX_SIGDET_CTRL2, 0x68), 1055 + QMP_PHY_INIT_CFG(QPHY_V6_PCS_UFS_TX_POST_EMP_LVL_S4, 0x0e), 1056 + QMP_PHY_INIT_CFG(QPHY_V6_PCS_UFS_TX_POST_EMP_LVL_S5, 0x12), 1057 + QMP_PHY_INIT_CFG(QPHY_V6_PCS_UFS_TX_POST_EMP_LVL_S6, 0x15), 1058 + QMP_PHY_INIT_CFG(QPHY_V6_PCS_UFS_TX_POST_EMP_LVL_S7, 0x19), 1059 + }; 1060 + 1061 + static const struct qmp_phy_init_tbl sm8750_ufsphy_g4_pcs[] = { 1062 + QMP_PHY_INIT_CFG(QPHY_V6_PCS_UFS_TX_HSGEAR_CAPABILITY, 0x04), 1063 + QMP_PHY_INIT_CFG(QPHY_V6_PCS_UFS_RX_HSGEAR_CAPABILITY, 0x04), 1064 + }; 1065 + 1066 + static const struct qmp_phy_init_tbl sm8750_ufsphy_hs_b_pcs[] = { 1067 + QMP_PHY_INIT_CFG(QPHY_V6_PCS_UFS_PCS_CTRL1, 0x41), 1068 + }; 1069 + 953 1070 struct qmp_ufs_offsets { 954 1071 u16 serdes; 955 1072 u16 pcs; ··· 1642 1523 .regs = ufsphy_v6_regs_layout, 1643 1524 }; 1644 1525 1526 + static const struct qmp_phy_cfg sm8750_ufsphy_cfg = { 1527 + .lanes = 2, 1528 + 1529 + .offsets = &qmp_ufs_offsets_v6, 1530 + .max_supported_gear = UFS_HS_G5, 1531 + 1532 + .tbls = { 1533 + .serdes = sm8750_ufsphy_serdes, 1534 + .serdes_num = ARRAY_SIZE(sm8750_ufsphy_serdes), 1535 + .tx = sm8750_ufsphy_tx, 1536 + .tx_num = ARRAY_SIZE(sm8750_ufsphy_tx), 1537 + .rx = sm8750_ufsphy_rx, 1538 + .rx_num = ARRAY_SIZE(sm8750_ufsphy_rx), 1539 + .pcs = sm8750_ufsphy_pcs, 1540 + .pcs_num = ARRAY_SIZE(sm8750_ufsphy_pcs), 1541 + }, 1542 + 1543 + .tbls_hs_b = { 1544 + .pcs = sm8750_ufsphy_hs_b_pcs, 1545 + .pcs_num = ARRAY_SIZE(sm8750_ufsphy_hs_b_pcs), 1546 + }, 1547 + 1548 + .tbls_hs_overlay[0] = { 1549 + .pcs = sm8750_ufsphy_g4_pcs, 1550 + .pcs_num = ARRAY_SIZE(sm8750_ufsphy_g4_pcs), 1551 + .max_gear = UFS_HS_G4, 1552 + }, 1553 + .tbls_hs_overlay[1] = { 1554 + .pcs = sm8650_ufsphy_g5_pcs, 1555 + .pcs_num = ARRAY_SIZE(sm8650_ufsphy_g5_pcs), 1556 + .max_gear = UFS_HS_G5, 1557 + }, 1558 + 1559 + .vreg_list = qmp_phy_vreg_l, 1560 + .num_vregs = ARRAY_SIZE(qmp_phy_vreg_l), 1561 + .regs = ufsphy_v6_regs_layout, 1562 + 1563 + }; 1564 + 1645 1565 static void qmp_ufs_serdes_init(struct qmp_ufs *qmp, const struct qmp_phy_cfg_tbls *tbls) 1646 1566 { 1647 1567 void __iomem *serdes = qmp->serdes; ··· 1736 1578 return ret; 1737 1579 } 1738 1580 1581 + static void qmp_ufs_init_all(struct qmp_ufs *qmp, const struct qmp_phy_cfg_tbls *tbls) 1582 + { 1583 + qmp_ufs_serdes_init(qmp, tbls); 1584 + qmp_ufs_lanes_init(qmp, tbls); 1585 + qmp_ufs_pcs_init(qmp, tbls); 1586 + } 1587 + 1739 1588 static void qmp_ufs_init_registers(struct qmp_ufs *qmp, const struct qmp_phy_cfg *cfg) 1740 1589 { 1741 1590 int i; 1742 1591 1743 - qmp_ufs_serdes_init(qmp, &cfg->tbls); 1744 - qmp_ufs_lanes_init(qmp, &cfg->tbls); 1745 - qmp_ufs_pcs_init(qmp, &cfg->tbls); 1592 + qmp_ufs_init_all(qmp, &cfg->tbls); 1746 1593 1747 1594 i = qmp_ufs_get_gear_overlay(qmp, cfg); 1748 1595 if (i >= 0) { 1749 - qmp_ufs_serdes_init(qmp, &cfg->tbls_hs_overlay[i]); 1750 - qmp_ufs_lanes_init(qmp, &cfg->tbls_hs_overlay[i]); 1751 - qmp_ufs_pcs_init(qmp, &cfg->tbls_hs_overlay[i]); 1596 + qmp_ufs_init_all(qmp, &cfg->tbls_hs_overlay[i]); 1752 1597 } 1753 1598 1754 - if (qmp->mode == PHY_MODE_UFS_HS_B) 1755 - qmp_ufs_serdes_init(qmp, &cfg->tbls_hs_b); 1599 + qmp_ufs_init_all(qmp, &cfg->tbls_hs_b); 1756 1600 } 1757 1601 1758 1602 static int qmp_ufs_com_init(struct qmp_ufs *qmp) ··· 2221 2061 }, { 2222 2062 .compatible = "qcom,sm8650-qmp-ufs-phy", 2223 2063 .data = &sm8650_ufsphy_cfg, 2064 + }, { 2065 + .compatible = "qcom,sm8750-qmp-ufs-phy", 2066 + .data = &sm8750_ufsphy_cfg, 2224 2067 }, 2068 + 2225 2069 { }, 2226 2070 }; 2227 2071 MODULE_DEVICE_TABLE(of, qmp_ufs_of_match_table);