return true;
 }
 
+static int io_buffer_wake_time(void)
+{
+       return 10;
+}
+
 static bool _compute_alpm_params(struct intel_dp *intel_dp,
                                 struct intel_crtc_state *crtc_state)
 {
        u8 max_wake_lines;
 
        if (DISPLAY_VER(i915) >= 12) {
-               io_wake_time = 42;
-               /*
-                * According to Bspec it's 42us, but based on testing
-                * it is not enough -> use 45 us.
-                */
-               fast_wake_time = 45;
+               int tfw_exit_latency = 20; /* eDP spec */
+               int phy_wake = 4;          /* eDP spec */
+               int preamble = 8;          /* eDP spec */
+               int precharge = intel_dp_aux_fw_sync_len() - preamble;
+
+               io_wake_time = max(precharge, io_buffer_wake_time()) + preamble +
+                       phy_wake + tfw_exit_latency;
+               fast_wake_time = precharge + preamble + phy_wake +
+                       tfw_exit_latency;
 
                /* TODO: Check how we can use ALPM_CTL fast wake extended field */
                max_wake_lines = 12;