UFS: Add support for SM8150 UFS
Subsystems (4)
Vinod Koul
maintainerv2 cover UFS: Add support for SM8150 UFS
This series adds compatible strings for ufs hc and ufs qmp phy found in Qualcomm SM8150 SoC. Also update the qmp phy driver with version 4 and support for ufs phy.
Changes since v1:
- make the numbers a lower case hex
- add review tags recieved
Vinod Koul (3):
dt-bindings: ufs: Add sm8150 compatible string
dt-bindings: phy-qcom-qmp: Add sm8150 UFS phy compatible string
phy: qcom-qmp: Add SM8150 QMP UFS PHY support
.../devicetree/bindings/phy/qcom-qmp-phy.txt | 7 +- .../devicetree/bindings/ufs/ufshcd-pltfrm.txt | 1 + drivers/phy/qualcomm/phy-qcom-qmp.c | 125 ++++++++++++++++++ drivers/phy/qualcomm/phy-qcom-qmp.h | 96 ++++++++++++++ 4 files changed, 228 insertions(+), 1 deletion(-)
Signature · 1 line
2.20.1
Vinod Koul
maintainerPATCH v2 1/3 dt-bindings: ufs: Add sm8150 compatible string
Document "qcom,sm8150-ufshc" compatible string for UFS HC found on SM8150.
--- Documentation/devicetree/bindings/ufs/ufshcd-pltfrm.txt | 1 + 1 file changed, 1 insertion(+)
Documentation/devicetree/bindings/ufs/ufshcd-pltfrm.txt +1 -0
@@ -13,6 +13,7 @@ Required properties: "qcom,msm8996-ufshc", "qcom,ufshc", "jedec,ufs-2.0" "qcom,msm8998-ufshc", "qcom,ufshc", "jedec,ufs-2.0" "qcom,sdm845-ufshc", "qcom,ufshc", "jedec,ufs-2.0" + "qcom,sm8150-ufshc", "qcom,ufshc", "jedec,ufs-2.0" - interrupts : <interrupt mapping for UFS host controller IRQ> - reg : <registers mapping>
Signature · 1 line
2.20.1
Re: [PATCH v2 1/3] dt-bindings: ufs: Add sm8150 compatible string
Quoted 10 lines · Vinod Koul
Document "qcom,sm8150-ufshc" compatible string for UFS HC found on SM8150.
Signed-off-by Vinod Koul <[email protected]>Reviewed-by Bjorn Andersson <[email protected]>Reviewed-by Stephen Boyd <[email protected]>--- Documentation/devicetree/bindings/ufs/ufshcd-pltfrm.txt | 1 + 1 file changed, 1 insertion(+)
Vinod Koul
maintainerPATCH v2 2/3 dt-bindings: phy-qcom-qmp: Add sm8150 UFS phy compatible string
In reply to Vinod KoulDocument "qcom,sdm845-qmp-ufs-phy" compatible string for QMP UFS PHY found on SM8150.
--- Documentation/devicetree/bindings/phy/qcom-qmp-phy.txt | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)
Documentation/devicetree/bindings/phy/qcom-qmp-phy.txt +6 -1
@@ -14,7 +14,8 @@ Required properties: "qcom,msm8998-qmp-pcie-phy" for PCIe QMP phy on msm8998, "qcom,sdm845-qmp-usb3-phy" for USB3 QMP V3 phy on sdm845, "qcom,sdm845-qmp-usb3-uni-phy" for USB3 QMP V3 UNI phy on sdm845, - "qcom,sdm845-qmp-ufs-phy" for UFS QMP phy on sdm845. + "qcom,sdm845-qmp-ufs-phy" for UFS QMP phy on sdm845, + "qcom,sm8150-qmp-ufs-phy" for UFS QMP phy on sm8150. - reg: - index 0: address and length of register set for PHY's common
@@ -57,6 +58,8 @@ Required properties: "aux", "cfg_ahb", "ref", "com_aux". For "qcom,sdm845-qmp-ufs-phy" must contain: "ref", "ref_aux". + For "qcom,sm8150-qmp-ufs-phy" must contain: + "ref", "ref_aux". - resets: a list of phandles and reset controller specifier pairs, one for each entry in reset-names.
@@ -83,6 +86,8 @@ Required properties: "phy", "common". For "qcom,sdm845-qmp-ufs-phy": must contain: "ufsphy". + For "qcom,sm8150-qmp-ufs-phy": must contain: + "ufsphy". - vdda-phy-supply: Phandle to a regulator supply to PHY core block. - vdda-pll-supply: Phandle to 1.8V regulator supply to PHY refclk pll block.
Signature · 1 line
2.20.1
Re: [PATCH v2 2/3] dt-bindings: phy-qcom-qmp: Add sm8150 UFS phy compatible string
Quoted 10 lines · Vinod Koul
Document "qcom,sdm845-qmp-ufs-phy" compatible string for QMP UFS PHY found on SM8150.
Signed-off-by Vinod Koul <[email protected]>Reviewed-by Bjorn Andersson <[email protected]>Reviewed-by Stephen Boyd <[email protected]>--- Documentation/devicetree/bindings/phy/qcom-qmp-phy.txt | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)
Vinod Koul
maintainerPATCH v2 3/3 phy: qcom-qmp: Add SM8150 QMP UFS PHY support
In reply to Vinod KoulSM8150 UFS PHY is v4 of QMP phy. Add support for V4 QMP phy register defines and support for SM8150 QMP UFS PHY.
--- drivers/phy/qualcomm/phy-qcom-qmp.c | 125 ++++++++++++++++++++++++++++ drivers/phy/qualcomm/phy-qcom-qmp.h | 96 +++++++++++++++++++++ 2 files changed, 221 insertions(+)
drivers/phy/qualcomm/phy-qcom-qmp.c +125 -0
@@ -164,6 +164,11 @@ static const unsigned int sdm845_ufsphy_regs_layout[] = { [QPHY_PCS_READY_STATUS] = 0x160, }; +static const unsigned int sm8150_ufsphy_regs_layout[] = { + [QPHY_START_CTRL ] =0x00 , + [QPHY_PCS_READY_STATUS ] =0x180 , +}; +static const struct qmp_phy_init_tbl msm8996_pcie_serdes_tbl[] = {QMP_PHY_INIT_CFG (QSERDES_COM_BIAS_EN_CLKBUFLR_EN ,0x1c ),QMP_PHY_INIT_CFG (QSERDES_COM_CLK_ENABLE1 ,0x10 ),
@@ -878,6 +883,93 @@ static const struct qmp_phy_init_tbl msm8998_usb3_pcs_tbl[] = { QMP_PHY_INIT_CFG(QPHY_V3_PCS_RXEQTRAINING_RUN_TIME, 0x13), }; +static const struct qmp_phy_init_tbl sm8150_ufsphy_serdes_tbl[] = { +QMP_PHY_INIT_CFG (QPHY_POWER_DOWN_CONTROL ,0x01 ), +QMP_PHY_INIT_CFG (QSERDES_COM_V4_SYSCLK_EN_SEL ,0xd9 ), +QMP_PHY_INIT_CFG (QSERDES_COM_V4_HSCLK_SEL ,0x11 ), +QMP_PHY_INIT_CFG (QSERDES_COM_V4_HSCLK_HS_SWITCH_SEL ,0x00 ), +QMP_PHY_INIT_CFG (QSERDES_COM_V4_LOCK_CMP_EN ,0x01 ), +QMP_PHY_INIT_CFG (QSERDES_COM_V4_VCO_TUNE_MAP ,0x02 ), +QMP_PHY_INIT_CFG (QSERDES_COM_V4_PLL_IVCO ,0x0f ), +QMP_PHY_INIT_CFG (QSERDES_COM_V4_VCO_TUNE_INITVAL2 ,0x00 ), +QMP_PHY_INIT_CFG (QSERDES_COM_V4_BIN_VCOCAL_HSCLK_SEL ,0x11 ), +QMP_PHY_INIT_CFG (QSERDES_COM_V4_DEC_START_MODE0 ,0x82 ), +QMP_PHY_INIT_CFG (QSERDES_COM_V4_CP_CTRL_MODE0 ,0x06 ), +QMP_PHY_INIT_CFG (QSERDES_COM_V4_PLL_RCTRL_MODE0 ,0x16 ), +QMP_PHY_INIT_CFG (QSERDES_COM_V4_PLL_CCTRL_MODE0 ,0x36 ), +QMP_PHY_INIT_CFG (QSERDES_COM_V4_LOCK_CMP1_MODE0 ,0xff ), +QMP_PHY_INIT_CFG (QSERDES_COM_V4_LOCK_CMP2_MODE0 ,0x0c ), +QMP_PHY_INIT_CFG (QSERDES_COM_V4_BIN_VCOCAL_CMP_CODE1_MODE0 ,0xac ), +QMP_PHY_INIT_CFG (QSERDES_COM_V4_BIN_VCOCAL_CMP_CODE2_MODE0 ,0x1e ), +QMP_PHY_INIT_CFG (QSERDES_COM_V4_DEC_START_MODE1 ,0x98 ), +QMP_PHY_INIT_CFG (QSERDES_COM_V4_CP_CTRL_MODE1 ,0x06 ), +QMP_PHY_INIT_CFG (QSERDES_COM_V4_PLL_RCTRL_MODE1 ,0x16 ), +QMP_PHY_INIT_CFG (QSERDES_COM_V4_PLL_CCTRL_MODE1 ,0x36 ), +QMP_PHY_INIT_CFG (QSERDES_COM_V4_LOCK_CMP1_MODE1 ,0x32 ), +QMP_PHY_INIT_CFG (QSERDES_COM_V4_LOCK_CMP2_MODE1 ,0x0f ), +QMP_PHY_INIT_CFG (QSERDES_COM_V4_BIN_VCOCAL_CMP_CODE1_MODE1 ,0xdd ), +QMP_PHY_INIT_CFG (QSERDES_COM_V4_BIN_VCOCAL_CMP_CODE2_MODE1 ,0x23 ), + +/* Rate B */ +QMP_PHY_INIT_CFG (QSERDES_COM_V4_VCO_TUNE_MAP ,0x06 ), +}; + +static const struct qmp_phy_init_tbl sm8150_ufsphy_tx_tbl[] = { +QMP_PHY_INIT_CFG (QSERDES_V4_TX_PWM_GEAR_1_DIVIDER_BAND0_1 ,0x06 ), +QMP_PHY_INIT_CFG (QSERDES_V4_TX_PWM_GEAR_2_DIVIDER_BAND0_1 ,0x03 ), +QMP_PHY_INIT_CFG (QSERDES_V4_TX_PWM_GEAR_3_DIVIDER_BAND0_1 ,0x01 ), +QMP_PHY_INIT_CFG (QSERDES_V4_TX_PWM_GEAR_4_DIVIDER_BAND0_1 ,0x00 ), +QMP_PHY_INIT_CFG (QSERDES_V4_TX_LANE_MODE_1 ,0x05 ), +QMP_PHY_INIT_CFG (QSERDES_V4_TX_TRAN_DRVR_EMP_EN ,0x0c ), +}; + +static const struct qmp_phy_init_tbl sm8150_ufsphy_rx_tbl[] = { +QMP_PHY_INIT_CFG (QSERDES_V4_RX_SIGDET_LVL ,0x24 ), +QMP_PHY_INIT_CFG (QSERDES_V4_RX_SIGDET_CNTRL ,0x0f ), +QMP_PHY_INIT_CFG (QSERDES_V4_RX_SIGDET_DEGLITCH_CNTRL ,0x1e ), +QMP_PHY_INIT_CFG (QSERDES_V4_RX_RX_BAND ,0x18 ), +QMP_PHY_INIT_CFG (QSERDES_V4_RX_UCDR_FASTLOCK_FO_GAIN ,0x0a ), +QMP_PHY_INIT_CFG (QSERDES_V4_RX_UCDR_SO_SATURATION_AND_ENABLE ,0x4b ), +QMP_PHY_INIT_CFG (QSERDES_V4_RX_UCDR_PI_CONTROLS ,0xf1 ), +QMP_PHY_INIT_CFG (QSERDES_V4_RX_UCDR_FASTLOCK_COUNT_LOW ,0x80 ), +QMP_PHY_INIT_CFG (QSERDES_V4_RX_UCDR_PI_CTRL2 ,0x80 ), +QMP_PHY_INIT_CFG (QSERDES_V4_RX_UCDR_FO_GAIN ,0x0c ), +QMP_PHY_INIT_CFG (QSERDES_V4_RX_UCDR_SO_GAIN ,0x04 ), +QMP_PHY_INIT_CFG (QSERDES_V4_RX_RX_TERM_BW ,0x1b ), +QMP_PHY_INIT_CFG (QSERDES_V4_RX_RX_EQU_ADAPTOR_CNTRL2 ,0x06 ), +QMP_PHY_INIT_CFG (QSERDES_V4_RX_RX_EQU_ADAPTOR_CNTRL3 ,0x04 ), +QMP_PHY_INIT_CFG (QSERDES_V4_RX_RX_EQU_ADAPTOR_CNTRL4 ,0x1d ), +QMP_PHY_INIT_CFG (QSERDES_V4_RX_RX_OFFSET_ADAPTOR_CNTRL2 ,0x00 ), +QMP_PHY_INIT_CFG (QSERDES_V4_RX_RX_IDAC_MEASURE_TIME ,0x10 ), +QMP_PHY_INIT_CFG (QSERDES_V4_RX_RX_IDAC_TSETTLE_LOW ,0xc0 ), +QMP_PHY_INIT_CFG (QSERDES_V4_RX_RX_IDAC_TSETTLE_HIGH ,0x00 ), +QMP_PHY_INIT_CFG (QSERDES_V4_RX_RX_MODE_00_LOW ,0x36 ), +QMP_PHY_INIT_CFG (QSERDES_V4_RX_RX_MODE_00_HIGH ,0x36 ), +QMP_PHY_INIT_CFG (QSERDES_V4_RX_RX_MODE_00_HIGH2 ,0xf6 ), +QMP_PHY_INIT_CFG (QSERDES_V4_RX_RX_MODE_00_HIGH3 ,0x3b ), +QMP_PHY_INIT_CFG (QSERDES_V4_RX_RX_MODE_00_HIGH4 ,0x3d ), +QMP_PHY_INIT_CFG (QSERDES_V4_RX_RX_MODE_01_LOW ,0xe0 ), +QMP_PHY_INIT_CFG (QSERDES_V4_RX_RX_MODE_01_HIGH ,0xc8 ), +QMP_PHY_INIT_CFG (QSERDES_V4_RX_RX_MODE_01_HIGH2 ,0xc8 ), +QMP_PHY_INIT_CFG (QSERDES_V4_RX_RX_MODE_01_HIGH3 ,0x3b ), +QMP_PHY_INIT_CFG (QSERDES_V4_RX_RX_MODE_01_HIGH4 ,0xb1 ), +QMP_PHY_INIT_CFG (QSERDES_V4_RX_RX_MODE_10_LOW ,0xe0 ), +QMP_PHY_INIT_CFG (QSERDES_V4_RX_RX_MODE_10_HIGH ,0xc8 ), +QMP_PHY_INIT_CFG (QSERDES_V4_RX_RX_MODE_10_HIGH2 ,0xc8 ), +QMP_PHY_INIT_CFG (QSERDES_V4_RX_RX_MODE_10_HIGH3 ,0x3b ), +QMP_PHY_INIT_CFG (QSERDES_V4_RX_RX_MODE_10_HIGH4 ,0xb1 ), + +}; + +static const struct qmp_phy_init_tbl sm8150_ufsphy_pcs_tbl[] = { +QMP_PHY_INIT_CFG (QPHY_V4_RX_SIGDET_CTRL2 ,0x6d ), +QMP_PHY_INIT_CFG (QPHY_V4_TX_LARGE_AMP_DRV_LVL ,0x0a ), +QMP_PHY_INIT_CFG (QPHY_V4_TX_SMALL_AMP_DRV_LVL ,0x02 ), +QMP_PHY_INIT_CFG (QPHY_V4_TX_MID_TERM_CTRL1 ,0x43 ), +QMP_PHY_INIT_CFG (QPHY_V4_DEBUG_BUS_CLKSEL ,0x1f ), +QMP_PHY_INIT_CFG (QPHY_V4_RX_MIN_HIBERN8_TIME ,0xff ), +QMP_PHY_INIT_CFG (QPHY_V4_MULTI_LANE_CTRL1 ,0x02 ), +};/* struct qmp_phy_cfg - per-PHY initialization config */ struct qmp_phy_cfg {
@@ -1038,6 +1130,10 @@ static const char * const sdm845_ufs_phy_clk_l[] = { "ref", "ref_aux", }; +static const char *const sm8150_ufs_phy_clk_l[] = { +"ref" ,"ref_aux" , +}; +/* list of resets */ static const char *const msm8996_pciephy_reset_l[] = {"phy" ,"common" ,"cfg" ,
@@ -1284,6 +1380,32 @@ static const struct qmp_phy_cfg msm8998_usb3phy_cfg = { .is_dual_lane_phy = true, }; +static const struct qmp_phy_cfg sm8150_ufsphy_cfg = { + .type =PHY_TYPE_UFS , + .nlanes =2 , + + .serdes_tbl = sm8150_ufsphy_serdes_tbl, + .serdes_tbl_num =ARRAY_SIZE (sm8150_ufsphy_serdes_tbl), + .tx_tbl = sm8150_ufsphy_tx_tbl, + .tx_tbl_num =ARRAY_SIZE (sm8150_ufsphy_tx_tbl), + .rx_tbl = sm8150_ufsphy_rx_tbl, + .rx_tbl_num =ARRAY_SIZE (sm8150_ufsphy_rx_tbl), + .pcs_tbl = sm8150_ufsphy_pcs_tbl, + .pcs_tbl_num =ARRAY_SIZE (sm8150_ufsphy_pcs_tbl), + .clk_list = sm8150_ufs_phy_clk_l, + .num_clks =ARRAY_SIZE (sm8150_ufs_phy_clk_l), + .vreg_list = qmp_phy_vreg_l, + .num_vregs =ARRAY_SIZE (qmp_phy_vreg_l), + .regs = sm8150_ufsphy_regs_layout, + + .start_ctrl =SERDES_START , + .pwrdn_ctrl =SW_PWRDN , + .mask_pcs_ready =PCS_READY , + + .is_dual_lane_phy = true, + .no_pcs_sw_reset = true, +}; + static void qcom_qmp_phy_configure(void __iomem *base, const unsigned int *regs, const struct qmp_phy_init_tbl tbl[],
@@ -1999,6 +2121,9 @@ static const struct of_device_id qcom_qmp_phy_of_match_table[] = { }, { .compatible = "qcom,msm8998-qmp-usb3-phy", .data = &msm8998_usb3phy_cfg, + }, { + .compatible = "qcom,sm8150-qmp-ufs-phy", + .data = &sm8150_ufsphy_cfg, }, { }, };
drivers/phy/qualcomm/phy-qcom-qmp.h +96 -0
100 lines not on this page · raw message
Signature · 1 line
2.20.1
Re: [PATCH v2 3/3] phy: qcom-qmp: Add SM8150 QMP UFS PHY support
Quoting Vinod Koul (2019-09-05 22:10:17)
Quoted 6 lines
SM8150 UFS PHY is v4 of QMP phy. Add support for V4 QMP phy register defines and support for SM8150 QMP UFS PHY.
Signed-off-by Vinod Koul <[email protected]>Reviewed-by Bjorn Andersson <[email protected]>---
Re: [PATCH v2 3/3] phy: qcom-qmp: Add SM8150 QMP UFS PHY support
In reply to Vinod KoulQuoted 49 lines · Vinod Koul
SM8150 UFS PHY is v4 of QMP phy. Add support for V4 QMP phy register defines and support for SM8150 QMP UFS PHY.
Signed-off-by Vinod Koul <[email protected]>Reviewed-by Bjorn Andersson <[email protected]>--- drivers/phy/qualcomm/phy-qcom-qmp.c | 125 ++++++++++++++++++++++++++++ drivers/phy/qualcomm/phy-qcom-qmp.h | 96 +++++++++++++++++++++ 2 files changed, 221 insertions(+)drivers/phy/qualcomm/phy-qcom-qmp.c +24
-0@@ -164,6 +164,11 @@ static const unsigned int sdm845_ufsphy_regs_layout[] = { [QPHY_PCS_READY_STATUS] = 0x160, }; +static const unsigned int sm8150_ufsphy_regs_layout[] = { + [QPHY_START_CTRL ] =0x00 , + [QPHY_PCS_READY_STATUS ] =0x180 , +}; +static const struct qmp_phy_init_tbl msm8996_pcie_serdes_tbl[] = {QMP_PHY_INIT_CFG (QSERDES_COM_BIAS_EN_CLKBUFLR_EN ,0x1c ),QMP_PHY_INIT_CFG (QSERDES_COM_CLK_ENABLE1 ,0x10 ),@@ -878,6 +883,93 @@ static const struct qmp_phy_init_tbl msm8998_usb3_pcs_tbl[] = { QMP_PHY_INIT_CFG(QPHY_V3_PCS_RXEQTRAINING_RUN_TIME, 0x13), }; +static const struct qmp_phy_init_tbl sm8150_ufsphy_serdes_tbl[] = { +QMP_PHY_INIT_CFG (QPHY_POWER_DOWN_CONTROL ,0x01 ), +QMP_PHY_INIT_CFG (QSERDES_COM_V4_SYSCLK_EN_SEL ,0xd9 ), +QMP_PHY_INIT_CFG (QSERDES_COM_V4_HSCLK_SEL ,0x11 ), +QMP_PHY_INIT_CFG (QSERDES_COM_V4_HSCLK_HS_SWITCH_SEL ,0x00 ), +QMP_PHY_INIT_CFG (QSERDES_COM_V4_LOCK_CMP_EN ,0x01 ), +QMP_PHY_INIT_CFG (QSERDES_COM_V4_VCO_TUNE_MAP ,0x02 ), +QMP_PHY_INIT_CFG (QSERDES_COM_V4_PLL_IVCO ,0x0f ), +QMP_PHY_INIT_CFG (QSERDES_COM_V4_VCO_TUNE_INITVAL2 ,0x00 ), +QMP_PHY_INIT_CFG (QSERDES_COM_V4_BIN_VCOCAL_HSCLK_SEL ,0x11 ), +QMP_PHY_INIT_CFG (QSERDES_COM_V4_DEC_START_MODE0 ,0x82 ), +QMP_PHY_INIT_CFG (QSERDES_COM_V4_CP_CTRL_MODE0 ,0x06 ), +QMP_PHY_INIT_CFG (QSERDES_COM_V4_PLL_RCTRL_MODE0 ,0x16 ), +QMP_PHY_INIT_CFG (QSERDES_COM_V4_PLL_CCTRL_MODE0 ,0x36 ), +QMP_PHY_INIT_CFG (QSERDES_COM_V4_LOCK_CMP1_MODE0 ,0xff ), +QMP_PHY_INIT_CFG (QSERDES_COM_V4_LOCK_CMP2_MODE0 ,0x0c ), +QMP_PHY_INIT_CFG (QSERDES_COM_V4_BIN_VCOCAL_CMP_CODE1_MODE0 ,0xac ), +QMP_PHY_INIT_CFG (QSERDES_COM_V4_BIN_VCOCAL_CMP_CODE2_MODE0 ,0x1e ), +QMP_PHY_INIT_CFG (QSERDES_COM_V4_DEC_START_MODE1 ,0x98 ),
drivers/phy/qualcomm/phy-qcom-qmp.c static const struct qmp_phy_init_tbl msm8998_usb3_pcs_tbl[] = { · line 914
Quoted 10 lines
drivers/phy/qualcomm/phy-qcom-qmp.c +10
-0+QMP_PHY_INIT_CFG (QSERDES_COM_V4_CP_CTRL_MODE1 ,0x06 ), +QMP_PHY_INIT_CFG (QSERDES_COM_V4_PLL_RCTRL_MODE1 ,0x16 ), +QMP_PHY_INIT_CFG (QSERDES_COM_V4_PLL_CCTRL_MODE1 ,0x36 ), +QMP_PHY_INIT_CFG (QSERDES_COM_V4_LOCK_CMP1_MODE1 ,0x32 ), +QMP_PHY_INIT_CFG (QSERDES_COM_V4_LOCK_CMP2_MODE1 ,0x0f ), +QMP_PHY_INIT_CFG (QSERDES_COM_V4_BIN_VCOCAL_CMP_CODE1_MODE1 ,0xdd ), +QMP_PHY_INIT_CFG (QSERDES_COM_V4_BIN_VCOCAL_CMP_CODE2_MODE1 ,0x23 ), + +/* Rate B */ + QMP_PHY_INIT_CFG(QSERDES_COM_V4_VCO_TUNE_MAP, 0x06),
IMO, the name of the symbolic constants should be QSERDES_V4_COM* (like below for QSERDES_V4_TX* and QSERDES_V4_RX*)
Quoted 60 lines
drivers/phy/qualcomm/phy-qcom-qmp.c +56
-0+static const struct qmp_phy_init_tbl sm8150_ufsphy_tx_tbl[] = { +QMP_PHY_INIT_CFG (QSERDES_V4_TX_PWM_GEAR_1_DIVIDER_BAND0_1 ,0x06 ), +QMP_PHY_INIT_CFG (QSERDES_V4_TX_PWM_GEAR_2_DIVIDER_BAND0_1 ,0x03 ), +QMP_PHY_INIT_CFG (QSERDES_V4_TX_PWM_GEAR_3_DIVIDER_BAND0_1 ,0x01 ), +QMP_PHY_INIT_CFG (QSERDES_V4_TX_PWM_GEAR_4_DIVIDER_BAND0_1 ,0x00 ), +QMP_PHY_INIT_CFG (QSERDES_V4_TX_LANE_MODE_1 ,0x05 ), +QMP_PHY_INIT_CFG (QSERDES_V4_TX_TRAN_DRVR_EMP_EN ,0x0c ), +}; + +static const struct qmp_phy_init_tbl sm8150_ufsphy_rx_tbl[] = { +QMP_PHY_INIT_CFG (QSERDES_V4_RX_SIGDET_LVL ,0x24 ), +QMP_PHY_INIT_CFG (QSERDES_V4_RX_SIGDET_CNTRL ,0x0f ), +QMP_PHY_INIT_CFG (QSERDES_V4_RX_SIGDET_DEGLITCH_CNTRL ,0x1e ), +QMP_PHY_INIT_CFG (QSERDES_V4_RX_RX_BAND ,0x18 ), +QMP_PHY_INIT_CFG (QSERDES_V4_RX_UCDR_FASTLOCK_FO_GAIN ,0x0a ), +QMP_PHY_INIT_CFG (QSERDES_V4_RX_UCDR_SO_SATURATION_AND_ENABLE ,0x4b ), +QMP_PHY_INIT_CFG (QSERDES_V4_RX_UCDR_PI_CONTROLS ,0xf1 ), +QMP_PHY_INIT_CFG (QSERDES_V4_RX_UCDR_FASTLOCK_COUNT_LOW ,0x80 ), +QMP_PHY_INIT_CFG (QSERDES_V4_RX_UCDR_PI_CTRL2 ,0x80 ), +QMP_PHY_INIT_CFG (QSERDES_V4_RX_UCDR_FO_GAIN ,0x0c ), +QMP_PHY_INIT_CFG (QSERDES_V4_RX_UCDR_SO_GAIN ,0x04 ), +QMP_PHY_INIT_CFG (QSERDES_V4_RX_RX_TERM_BW ,0x1b ), +QMP_PHY_INIT_CFG (QSERDES_V4_RX_RX_EQU_ADAPTOR_CNTRL2 ,0x06 ), +QMP_PHY_INIT_CFG (QSERDES_V4_RX_RX_EQU_ADAPTOR_CNTRL3 ,0x04 ), +QMP_PHY_INIT_CFG (QSERDES_V4_RX_RX_EQU_ADAPTOR_CNTRL4 ,0x1d ), +QMP_PHY_INIT_CFG (QSERDES_V4_RX_RX_OFFSET_ADAPTOR_CNTRL2 ,0x00 ), +QMP_PHY_INIT_CFG (QSERDES_V4_RX_RX_IDAC_MEASURE_TIME ,0x10 ), +QMP_PHY_INIT_CFG (QSERDES_V4_RX_RX_IDAC_TSETTLE_LOW ,0xc0 ), +QMP_PHY_INIT_CFG (QSERDES_V4_RX_RX_IDAC_TSETTLE_HIGH ,0x00 ), +QMP_PHY_INIT_CFG (QSERDES_V4_RX_RX_MODE_00_LOW ,0x36 ), +QMP_PHY_INIT_CFG (QSERDES_V4_RX_RX_MODE_00_HIGH ,0x36 ), +QMP_PHY_INIT_CFG (QSERDES_V4_RX_RX_MODE_00_HIGH2 ,0xf6 ), +QMP_PHY_INIT_CFG (QSERDES_V4_RX_RX_MODE_00_HIGH3 ,0x3b ), +QMP_PHY_INIT_CFG (QSERDES_V4_RX_RX_MODE_00_HIGH4 ,0x3d ), +QMP_PHY_INIT_CFG (QSERDES_V4_RX_RX_MODE_01_LOW ,0xe0 ), +QMP_PHY_INIT_CFG (QSERDES_V4_RX_RX_MODE_01_HIGH ,0xc8 ), +QMP_PHY_INIT_CFG (QSERDES_V4_RX_RX_MODE_01_HIGH2 ,0xc8 ), +QMP_PHY_INIT_CFG (QSERDES_V4_RX_RX_MODE_01_HIGH3 ,0x3b ), +QMP_PHY_INIT_CFG (QSERDES_V4_RX_RX_MODE_01_HIGH4 ,0xb1 ), +QMP_PHY_INIT_CFG (QSERDES_V4_RX_RX_MODE_10_LOW ,0xe0 ), +QMP_PHY_INIT_CFG (QSERDES_V4_RX_RX_MODE_10_HIGH ,0xc8 ), +QMP_PHY_INIT_CFG (QSERDES_V4_RX_RX_MODE_10_HIGH2 ,0xc8 ), +QMP_PHY_INIT_CFG (QSERDES_V4_RX_RX_MODE_10_HIGH3 ,0x3b ), +QMP_PHY_INIT_CFG (QSERDES_V4_RX_RX_MODE_10_HIGH4 ,0xb1 ), + +}; + +static const struct qmp_phy_init_tbl sm8150_ufsphy_pcs_tbl[] = { +QMP_PHY_INIT_CFG (QPHY_V4_RX_SIGDET_CTRL2 ,0x6d ), +QMP_PHY_INIT_CFG (QPHY_V4_TX_LARGE_AMP_DRV_LVL ,0x0a ), +QMP_PHY_INIT_CFG (QPHY_V4_TX_SMALL_AMP_DRV_LVL ,0x02 ), +QMP_PHY_INIT_CFG (QPHY_V4_TX_MID_TERM_CTRL1 ,0x43 ), +QMP_PHY_INIT_CFG (QPHY_V4_DEBUG_BUS_CLKSEL ,0x1f ), +QMP_PHY_INIT_CFG (QPHY_V4_RX_MIN_HIBERN8_TIME ,0xff ), +QMP_PHY_INIT_CFG (QPHY_V4_MULTI_LANE_CTRL1 ,0x02 ), +};/* struct qmp_phy_cfg - per-PHY initialization config */ struct qmp_phy_cfg {
drivers/phy/qualcomm/phy-qcom-qmp.c static const char * const sdm845_ufs_phy_clk_l[] = { · line 1136
Quoted 7 lines
drivers/phy/qualcomm/phy-qcom-qmp.c +4
-0@@ -1038,6 +1130,10 @@ static const char * const sdm845_ufs_phy_clk_l[] = { "ref", "ref_aux", }; +static const char *const sm8150_ufs_phy_clk_l[] = { +"ref" ,"ref_aux" , +}; +
Why not just reuse sdm845_ufs_phy_clk_l?
Quoted 18 lines
drivers/phy/qualcomm/phy-qcom-qmp.c +11
-0/* list of resets */ static const char *const msm8996_pciephy_reset_l[] = {"phy" ,"common" ,"cfg" ,@@ -1284,6 +1380,32 @@ static const struct qmp_phy_cfg msm8998_usb3phy_cfg = { .is_dual_lane_phy = true, }; +static const struct qmp_phy_cfg sm8150_ufsphy_cfg = { + .type =PHY_TYPE_UFS , + .nlanes =2 , + + .serdes_tbl = sm8150_ufsphy_serdes_tbl, + .serdes_tbl_num =ARRAY_SIZE (sm8150_ufsphy_serdes_tbl), + .tx_tbl = sm8150_ufsphy_tx_tbl, + .tx_tbl_num =ARRAY_SIZE (sm8150_ufsphy_tx_tbl), + .rx_tbl = sm8150_ufsphy_rx_tbl, + .rx_tbl_num =ARRAY_SIZE (sm8150_ufsphy_rx_tbl), + .pcs_tbl = sm8150_ufsphy_pcs_tbl,
drivers/phy/qualcomm/phy-qcom-qmp.c static const struct qmp_phy_cfg msm8998_usb3phy_cfg = { · line 1403
Quoted 10 lines
drivers/phy/qualcomm/phy-qcom-qmp.c +10
-0+ .pcs_tbl_num = ARRAY_SIZE(sm8150_ufsphy_pcs_tbl), + .clk_list = sm8150_ufs_phy_clk_l, + .num_clks = ARRAY_SIZE(sm8150_ufs_phy_clk_l), + .vreg_list = qmp_phy_vreg_l, + .num_vregs = ARRAY_SIZE(qmp_phy_vreg_l), + .regs = sm8150_ufsphy_regs_layout, + + .start_ctrl = SERDES_START, + .pwrdn_ctrl = SW_PWRDN, + .mask_pcs_ready = PCS_READY,
I think you need to rework your patch on top of
"phy: qcom-qmp: Correct ready status, again"
(it removed this field)
Vinod Koul
maintainerRe: [PATCH v2 3/3] phy: qcom-qmp: Add SM8150 QMP UFS PHY support
Quoted 11 lines · Marc Gonzalez
drivers/phy/qualcomm/phy-qcom-qmp.c static const struct qmp_phy_init_tbl msm8998_usb3_pcs_tbl[] = { · line 914
Quoted 6 lines · Vinod Koul
drivers/phy/qualcomm/phy-qcom-qmp.c +6
-0+QMP_PHY_INIT_CFG (QSERDES_COM_V4_LOCK_CMP2_MODE1 ,0x0f ), +QMP_PHY_INIT_CFG (QSERDES_COM_V4_BIN_VCOCAL_CMP_CODE1_MODE1 ,0xdd ), +QMP_PHY_INIT_CFG (QSERDES_COM_V4_BIN_VCOCAL_CMP_CODE2_MODE1 ,0x23 ), + +/* Rate B */ + QMP_PHY_INIT_CFG(QSERDES_COM_V4_VCO_TUNE_MAP, 0x06),IMO, the name of the symbolic constants should be QSERDES_V4_COM* (like below for QSERDES_V4_TX* and QSERDES_V4_RX*)
Agreed this should have been QSERDES_V4_COM_*
Quoted 6 lines
drivers/phy/qualcomm/phy-qcom-qmp.c static const char * const sdm845_ufs_phy_clk_l[] = { · line 1136
Quoted 4 lines
drivers/phy/qualcomm/phy-qcom-qmp.c +4
-0+static const char *const sm8150_ufs_phy_clk_l[] = { +"ref" ,"ref_aux" , +}; +Why not just reuse
sdm845_ufs_phy_clk_l?
I think that is a good idea, will do
Quoted 17 lines
Quoted 17 lines
drivers/phy/qualcomm/phy-qcom-qmp.c +17
-0+static const struct qmp_phy_cfg sm8150_ufsphy_cfg = { + .type =PHY_TYPE_UFS , + .nlanes =2 , + + .serdes_tbl = sm8150_ufsphy_serdes_tbl, + .serdes_tbl_num =ARRAY_SIZE (sm8150_ufsphy_serdes_tbl), + .tx_tbl = sm8150_ufsphy_tx_tbl, + .tx_tbl_num =ARRAY_SIZE (sm8150_ufsphy_tx_tbl), + .rx_tbl = sm8150_ufsphy_rx_tbl, + .rx_tbl_num =ARRAY_SIZE (sm8150_ufsphy_rx_tbl), + .pcs_tbl = sm8150_ufsphy_pcs_tbl, + .pcs_tbl_num =ARRAY_SIZE (sm8150_ufsphy_pcs_tbl), + .clk_list = sm8150_ufs_phy_clk_l, + .num_clks =ARRAY_SIZE (sm8150_ufs_phy_clk_l), + .vreg_list = qmp_phy_vreg_l, + .num_vregs =ARRAY_SIZE (qmp_phy_vreg_l), + .regs = sm8150_ufsphy_regs_layout,
Quoted 8 lines
drivers/phy/qualcomm/phy-qcom-qmp.c static const struct qmp_phy_cfg msm8998_usb3phy_cfg = { · line 1403
Quoted 4 lines
drivers/phy/qualcomm/phy-qcom-qmp.c +4
-0+ + .start_ctrl = SERDES_START, + .pwrdn_ctrl = SW_PWRDN, + .mask_pcs_ready = PCS_READY,I think you need to rework your patch on top of
"phy: qcom-qmp: Correct ready status, again"
(it removed this field)
Yes will rebase on rc1 (when out) and resend, thanks for pointing
Signature · 1 line
~Vinod
Re: [PATCH v2 3/3] phy: qcom-qmp: Add SM8150 QMP UFS PHY support
In reply to Vinod KoulHi Vinod,
Quoted 27 lines · Vinod Koul
SM8150 UFS PHY is v4 of QMP phy. Add support for V4 QMP phy register defines and support for SM8150 QMP UFS PHY.
Signed-off-by Vinod Koul <[email protected]>Reviewed-by Bjorn Andersson <[email protected]>--- drivers/phy/qualcomm/phy-qcom-qmp.c | 125 ++++++++++++++++++++++++++++ drivers/phy/qualcomm/phy-qcom-qmp.h | 96 +++++++++++++++++++++ 2 files changed, 221 insertions(+)drivers/phy/qualcomm/phy-qcom-qmp.c +5
-0@@ -164,6 +164,11 @@ static const unsigned int sdm845_ufsphy_regs_layout[] = { [QPHY_PCS_READY_STATUS] = 0x160, }; +static const unsigned int sm8150_ufsphy_regs_layout[] = { + [QPHY_START_CTRL ] =0x00 , + [QPHY_PCS_READY_STATUS ] =0x180 , +}; +static const struct qmp_phy_init_tbl msm8996_pcie_serdes_tbl[] = {QMP_PHY_INIT_CFG (QSERDES_COM_BIAS_EN_CLKBUFLR_EN ,0x1c ),QMP_PHY_INIT_CFG (QSERDES_COM_CLK_ENABLE1 ,0x10 ),
drivers/phy/qualcomm/phy-qcom-qmp.c static const struct qmp_phy_init_tbl msm8998_usb3_pcs_tbl[] = { · line 888
Quoted 6 lines
drivers/phy/qualcomm/phy-qcom-qmp.c +3
-0@@ -878,6 +883,93 @@ static const struct qmp_phy_init_tbl msm8998_usb3_pcs_tbl[] = { QMP_PHY_INIT_CFG(QPHY_V3_PCS_RXEQTRAINING_RUN_TIME, 0x13), }; +static const struct qmp_phy_init_tbl sm8150_ufsphy_serdes_tbl[] = { +QMP_PHY_INIT_CFG (QPHY_POWER_DOWN_CONTROL ,0x01 ), +QMP_PHY_INIT_CFG (QSERDES_COM_V4_SYSCLK_EN_SEL ,0xd9 ),
QSERDES_V4_COM? See below.
<snip>
drivers/phy/qualcomm/phy-qcom-qmp.h line 317
Quoted 10 lines
drivers/phy/qualcomm/phy-qcom-qmp.h +2
-0@@ -313,4 +313,100 @@#define QPHY_V3_PCS_MISC_OSC_DTCT_MODE2_CONFIG4 0x5c#define QPHY_V3_PCS_MISC_OSC_DTCT_MODE2_CONFIG5 0x60 +/* Only for QMP V4 PHY - QSERDES COM registers */ +#define QSERDES_COM_V4_SYSCLK_EN_SEL 0x094
Should these rather be prefixed as QSERDES_V4_COM? There are already QSERDES_V3_COM_* in this header so the convention appears to be Q{SERDES,PHY}_VX_{COM,TX,RX,PCS}.
drivers/phy/qualcomm/phy-qcom-qmp.h line 321
Quoted 4 lines
drivers/phy/qualcomm/phy-qcom-qmp.h +4
-0+#define QSERDES_COM_V4_HSCLK_SEL 0x158 +#define QSERDES_COM_V4_HSCLK_HS_SWITCH_SEL 0x15C +#define QSERDES_COM_V4_LOCK_CMP_EN 0x0A4 +#define QSERDES_COM_V4_VCO_TUNE_MAP 0x10C
Nit: sort in ascending offset order, and make the hex values lowercase?
<snip>
Quoted 11 lines
drivers/phy/qualcomm/phy-qcom-qmp.h +11
-0+/* Only for QMP V4 PHY - PCS registers */ +#define QPHY_V4_PHY_START 0x000 +#define QPHY_V4_POWER_DOWN_CONTROL 0x004 +#define QPHY_V4_SW_RESET 0x008 +#define QPHY_V4_PCS_READY_STATUS 0x180 +#define QPHY_V4_LINECFG_DISABLE 0x148 +#define QPHY_V4_MULTI_LANE_CTRL1 0x1E0 +#define QPHY_V4_RX_SIGDET_CTRL2 0x158 +#define QPHY_V4_TX_LARGE_AMP_DRV_LVL 0x030 +#define QPHY_V4_TX_SMALL_AMP_DRV_LVL 0x038 +#define QPHY_V4_TX_MID_TERM_CTRL1 0x1D8
drivers/phy/qualcomm/phy-qcom-qmp.h line 410
Quoted 10 lines
drivers/phy/qualcomm/phy-qcom-qmp.h +10
-0+#define QPHY_V4_DEBUG_BUS_CLKSEL 0x124 +#define QPHY_V4_PLL_CNTL 0x02C +#define QPHY_V4_TIMER_20US_CORECLK_STEPS_MSB 0x00C +#define QPHY_V4_TIMER_20US_CORECLK_STEPS_LSB 0x010 +#define QPHY_V4_TX_PWM_GEAR_BAND 0x160 +#define QPHY_V4_TX_HS_GEAR_BAND 0x168 +#define QPHY_V4_TX_HSGEAR_CAPABILITY 0x074 +#define QPHY_V4_RX_HSGEAR_CAPABILITY 0x0B4 +#define QPHY_V4_RX_MIN_HIBERN8_TIME 0x150 +#define QPHY_V4_BIST_FIXED_PAT_CTRL 0x060
Interesting. These offsets appear to be valid only for the UFS instance of the QMP PHY. For PCIe and USB the PCS layout is completely different. Wonder if we need to add _UFS_ to the prefix to differentiate them? Or can this be deferred to when PCIe/USB PHY driver support for SM8150 gets added?
I was thinking of taking a stab at USB if I get time, not sure if that's already on your or somebody's (Bjorn?) radar.
Thanks
Jack
Signature · 2 lines
The Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project
Re: [PATCH v2 3/3] phy: qcom-qmp: Add SM8150 QMP UFS PHY support
Quoted 1 line · Jack Pham
On Fri, Sep 06, 2019 at 10:40:17AM +0530, Vinod Koul wrote:
[..]
Quoted 3 lines
I was thinking of taking a stab at USB if I get time, not sure if that's already on your or somebody's (Bjorn?) radar.
We only have remote access to the hardware, making it rather tedious to do USB. So it's all yours! :)
Regards,
Bjorn
Vinod Koul
maintainerRe: [PATCH v2 3/3] phy: qcom-qmp: Add SM8150 QMP UFS PHY support
In reply to Jack PhamQuoted 49 lines · Jack Pham
Hi Vinod,
Quoted 27 lines · Vinod Koul
SM8150 UFS PHY is v4 of QMP phy. Add support for V4 QMP phy register defines and support for SM8150 QMP UFS PHY.
Signed-off-by Vinod Koul <[email protected]>Reviewed-by Bjorn Andersson <[email protected]>--- drivers/phy/qualcomm/phy-qcom-qmp.c | 125 ++++++++++++++++++++++++++++ drivers/phy/qualcomm/phy-qcom-qmp.h | 96 +++++++++++++++++++++ 2 files changed, 221 insertions(+)drivers/phy/qualcomm/phy-qcom-qmp.c +5
-0@@ -164,6 +164,11 @@ static const unsigned int sdm845_ufsphy_regs_layout[] = { [QPHY_PCS_READY_STATUS] = 0x160, }; +static const unsigned int sm8150_ufsphy_regs_layout[] = { + [QPHY_START_CTRL ] =0x00 , + [QPHY_PCS_READY_STATUS ] =0x180 , +}; +static const struct qmp_phy_init_tbl msm8996_pcie_serdes_tbl[] = {QMP_PHY_INIT_CFG (QSERDES_COM_BIAS_EN_CLKBUFLR_EN ,0x1c ),QMP_PHY_INIT_CFG (QSERDES_COM_CLK_ENABLE1 ,0x10 ),drivers/phy/qualcomm/phy-qcom-qmp.c static const struct qmp_phy_init_tbl msm8998_usb3_pcs_tbl[] = { · line 888
Quoted 6 lines
drivers/phy/qualcomm/phy-qcom-qmp.c +3
-0@@ -878,6 +883,93 @@ static const struct qmp_phy_init_tbl msm8998_usb3_pcs_tbl[] = { QMP_PHY_INIT_CFG(QPHY_V3_PCS_RXEQTRAINING_RUN_TIME, 0x13), }; +static const struct qmp_phy_init_tbl sm8150_ufsphy_serdes_tbl[] = { +QMP_PHY_INIT_CFG (QPHY_POWER_DOWN_CONTROL ,0x01 ), +QMP_PHY_INIT_CFG (QSERDES_COM_V4_SYSCLK_EN_SEL ,0xd9 ),
QSERDES_V4_COM? See below.<snip>
Quoted 8 lines
drivers/phy/qualcomm/phy-qcom-qmp.h +0
-0@@ -313,4 +313,100 @@#define QPHY_V3_PCS_MISC_OSC_DTCT_MODE2_CONFIG4 0x5c#define QPHY_V3_PCS_MISC_OSC_DTCT_MODE2_CONFIG5 0x60
Quoted 6 lines
drivers/phy/qualcomm/phy-qcom-qmp.h line 317
Quoted 2 lines
drivers/phy/qualcomm/phy-qcom-qmp.h +2
-0+/* Only for QMP V4 PHY - QSERDES COM registers */ +#define QSERDES_COM_V4_SYSCLK_EN_SEL 0x094Should these rather be prefixed as
QSERDES_V4_COM? There are already QSERDES_V3_COM_* in this header so the convention appears to be Q{SERDES,PHY}_VX_{COM,TX,RX,PCS}.
Yup, I seem to have missed that (Marc also pointed out)
Quoted 6 lines
drivers/phy/qualcomm/phy-qcom-qmp.h line 321
Quoted 4 lines
drivers/phy/qualcomm/phy-qcom-qmp.h +4
-0+#define QSERDES_COM_V4_HSCLK_SEL 0x158 +#define QSERDES_COM_V4_HSCLK_HS_SWITCH_SEL 0x15C +#define QSERDES_COM_V4_LOCK_CMP_EN 0x0A4 +#define QSERDES_COM_V4_VCO_TUNE_MAP 0x10CNit: sort in ascending offset order, and make the hex values lowercase?
Sure will do
Quoted 22 lines
<snip>
Quoted 19 lines
drivers/phy/qualcomm/phy-qcom-qmp.h +19
-0+/* Only for QMP V4 PHY - PCS registers */ +#define QPHY_V4_PHY_START 0x000 +#define QPHY_V4_POWER_DOWN_CONTROL 0x004 +#define QPHY_V4_SW_RESET 0x008 +#define QPHY_V4_PCS_READY_STATUS 0x180 +#define QPHY_V4_LINECFG_DISABLE 0x148 +#define QPHY_V4_MULTI_LANE_CTRL1 0x1E0 +#define QPHY_V4_RX_SIGDET_CTRL2 0x158 +#define QPHY_V4_TX_LARGE_AMP_DRV_LVL 0x030 +#define QPHY_V4_TX_SMALL_AMP_DRV_LVL 0x038 +#define QPHY_V4_TX_MID_TERM_CTRL1 0x1D8 +#define QPHY_V4_DEBUG_BUS_CLKSEL 0x124 +#define QPHY_V4_PLL_CNTL 0x02C +#define QPHY_V4_TIMER_20US_CORECLK_STEPS_MSB 0x00C +#define QPHY_V4_TIMER_20US_CORECLK_STEPS_LSB 0x010 +#define QPHY_V4_TX_PWM_GEAR_BAND 0x160 +#define QPHY_V4_TX_HS_GEAR_BAND 0x168 +#define QPHY_V4_TX_HSGEAR_CAPABILITY 0x074 +#define QPHY_V4_RX_HSGEAR_CAPABILITY 0x0B4
Quoted 8 lines
drivers/phy/qualcomm/phy-qcom-qmp.h line 410
Quoted 2 lines
drivers/phy/qualcomm/phy-qcom-qmp.h +2
-0+#define QPHY_V4_RX_MIN_HIBERN8_TIME 0x150 +#define QPHY_V4_BIST_FIXED_PAT_CTRL 0x060Interesting. These offsets appear to be valid only for the UFS instance of the QMP PHY. For PCIe and USB the PCS layout is completely different. Wonder if we need to add _UFS_ to the prefix to differentiate them? Or can this be deferred to when PCIe/USB PHY driver support for SM8150 gets added?
I didnt look at that yet. Are we sure that it is using V4 of the instance?
Signature · 1 line
~Vinod