@@ -553,6 +553,8 @@ struct qmp_phy_cfg {
const struct qmp_phy_cfg_tables tables;
/* Additional sequence for HS Series B */
const struct qmp_phy_cfg_tables tables_hs_b;
+ /* Additional sequence for HS G4 */
+ const struct qmp_phy_cfg_tables tables_hs_g4;
/* clock ids to be requested */
const char * const *clk_list;
@@ -587,6 +589,7 @@ struct qmp_phy_cfg {
* @pcs_misc: iomapped memory space for lane's pcs_misc
* @qmp: QMP phy to which this lane belongs
* @mode: PHY mode configured by the UFS driver
+ * @submode: PHY submode configured by the UFS driver
*/
struct qmp_phy {
struct phy *phy;
@@ -600,6 +603,7 @@ struct qmp_phy {
void __iomem *pcs_misc;
struct qcom_qmp *qmp;
u32 mode;
+ u32 submode;
};
/**
@@ -993,8 +997,12 @@ static int qmp_ufs_power_on(struct phy *phy)
qmp_ufs_serdes_init(qphy, &cfg->tables_hs_b);
qmp_ufs_lanes_init(qphy, &cfg->tables);
+ if (qphy->submode == UFS_HS_G4)
+ qmp_ufs_lanes_init(qphy, &cfg->tables_hs_g4);
qmp_ufs_pcs_init(qphy, &cfg->tables);
+ if (qphy->submode == UFS_HS_G4)
+ qmp_ufs_pcs_init(qphy, &cfg->tables_hs_g4);
ret = reset_control_deassert(qmp->ufs_reset);
if (ret)
@@ -1083,6 +1091,7 @@ static int qmp_ufs_set_mode(struct phy *phy, enum phy_mode mode, int submode)
struct qmp_phy *qphy = phy_get_drvdata(phy);
qphy->mode = mode;
+ qphy->submode = submode;
return 0;
}