}
 };
 
+static struct wm_table lpddr4_wm_table_with_disabled_ppt = {
+       .entries = {
+               {
+                       .wm_inst = WM_A,
+                       .wm_type = WM_TYPE_PSTATE_CHG,
+                       .pstate_latency_us = 11.65333,
+                       .sr_exit_time_us = 8.32,
+                       .sr_enter_plus_exit_time_us = 9.38,
+                       .valid = true,
+               },
+               {
+                       .wm_inst = WM_B,
+                       .wm_type = WM_TYPE_PSTATE_CHG,
+                       .pstate_latency_us = 11.65333,
+                       .sr_exit_time_us = 9.82,
+                       .sr_enter_plus_exit_time_us = 11.196,
+                       .valid = true,
+               },
+               {
+                       .wm_inst = WM_C,
+                       .wm_type = WM_TYPE_PSTATE_CHG,
+                       .pstate_latency_us = 11.65333,
+                       .sr_exit_time_us = 9.89,
+                       .sr_enter_plus_exit_time_us = 11.24,
+                       .valid = true,
+               },
+               {
+                       .wm_inst = WM_D,
+                       .wm_type = WM_TYPE_PSTATE_CHG,
+                       .pstate_latency_us = 11.65333,
+                       .sr_exit_time_us = 9.748,
+                       .sr_enter_plus_exit_time_us = 11.102,
+                       .valid = true,
+               },
+       }
+};
 
 static unsigned int find_dcfclk_for_voltage(struct dpm_clocks *clock_table, unsigned int voltage)
 {
                struct clk_log_info log_info = {0};
 
                clk_mgr->smu_ver = rn_vbios_smu_get_smu_version(clk_mgr);
+               clk_mgr->periodic_retraining_disabled = rn_vbios_smu_is_periodic_retraining_disabled(clk_mgr);
 
                /* SMU Version 55.51.0 and up no longer have an issue
                 * that needs to limit minimum dispclk */
                        clk_mgr->base.dentist_vco_freq_khz = 3600000;
 
                if (ctx->dc_bios->integrated_info->memory_type == LpDdr4MemType) {
-                       rn_bw_params.wm_table = lpddr4_wm_table;
+                       if (clk_mgr->periodic_retraining_disabled) {
+                               rn_bw_params.wm_table = lpddr4_wm_table_with_disabled_ppt;
+                       } else {
+                               rn_bw_params.wm_table = lpddr4_wm_table;
+                       }
                } else {
                        rn_bw_params.wm_table = ddr4_wm_table;
                }
 
 #define VBIOSSMC_MSG_GetFclkFrequency             0xB
 #define VBIOSSMC_MSG_SetDisplayCount              0xC
 #define VBIOSSMC_MSG_EnableTmdp48MHzRefclkPwrDown 0xD
-#define VBIOSSMC_MSG_UpdatePmeRestore                    0xE
+#define VBIOSSMC_MSG_UpdatePmeRestore             0xE
+#define VBIOSSMC_MSG_IsPeriodicRetrainingDisabled 0xF
 
 #define VBIOSSMC_Status_BUSY                      0x0
 #define VBIOSSMC_Result_OK                        0x1
 
        result = rn_smu_wait_for_response(clk_mgr, 10, 1000);
 
-       ASSERT(result == VBIOSSMC_Result_OK);
+       ASSERT(result == VBIOSSMC_Result_OK || result == VBIOSSMC_Result_UnknownCmd);
 
        /* Actual dispclk set is returned in the parameter register */
        return REG_READ(MP1_SMN_C2PMSG_83);
                        VBIOSSMC_MSG_UpdatePmeRestore,
                        0);
 }
+
+int rn_vbios_smu_is_periodic_retraining_disabled(struct clk_mgr_internal *clk_mgr)
+{
+       return rn_vbios_smu_send_msg_with_param(
+                       clk_mgr,
+                       VBIOSSMC_MSG_IsPeriodicRetrainingDisabled,
+                       0);
+}