dev_priv->vbt.psr.tp2_tp3_wakeup_time = psr_table->tp2_tp3_wakeup_time;
 }
 
+static void parse_dsi_backlight_ports(struct drm_i915_private *dev_priv,
+                                     u16 version, enum port port)
+{
+       if (!dev_priv->vbt.dsi.config->dual_link || version < 197) {
+               dev_priv->vbt.dsi.bl_ports = BIT(port);
+               if (dev_priv->vbt.dsi.config->cabc_supported)
+                       dev_priv->vbt.dsi.cabc_ports = BIT(port);
+
+               dev_priv->vbt.dsi.config->dl_dcs_cabc_ports = 0;
+               dev_priv->vbt.dsi.config->dl_dcs_backlight_ports = 0;
+               return;
+       }
+
+       switch (dev_priv->vbt.dsi.config->dl_dcs_backlight_ports) {
+       case DL_DCS_PORT_A:
+               dev_priv->vbt.dsi.bl_ports = BIT(PORT_A);
+               break;
+       case DL_DCS_PORT_C:
+               dev_priv->vbt.dsi.bl_ports = BIT(PORT_C);
+               break;
+       default:
+       case DL_DCS_PORT_A_AND_C:
+               dev_priv->vbt.dsi.bl_ports = BIT(PORT_A) | BIT(PORT_C);
+               break;
+       }
+
+       if (!dev_priv->vbt.dsi.config->cabc_supported)
+               return;
+
+       switch (dev_priv->vbt.dsi.config->dl_dcs_cabc_ports) {
+       case DL_DCS_PORT_A:
+               dev_priv->vbt.dsi.cabc_ports = BIT(PORT_A);
+               break;
+       case DL_DCS_PORT_C:
+               dev_priv->vbt.dsi.cabc_ports = BIT(PORT_C);
+               break;
+       default:
+       case DL_DCS_PORT_A_AND_C:
+               dev_priv->vbt.dsi.cabc_ports =
+                                       BIT(PORT_A) | BIT(PORT_C);
+               break;
+       }
+}
+
 static void
 parse_mipi_config(struct drm_i915_private *dev_priv,
                  const struct bdb_header *bdb)
        const struct mipi_config *config;
        const struct mipi_pps_data *pps;
        int panel_type = dev_priv->vbt.panel_type;
+       enum port port;
 
        /* parse MIPI blocks only if LFP type is MIPI */
-       if (!intel_bios_is_dsi_present(dev_priv, NULL))
+       if (!intel_bios_is_dsi_present(dev_priv, &port))
                return;
 
        /* Initialize this to undefined indicating no generic MIPI support */
                return;
        }
 
-       /*
-        * These fields are introduced from the VBT version 197 onwards,
-        * so making sure that these bits are set zero in the previous
-        * versions.
-        */
-       if (dev_priv->vbt.dsi.config->dual_link && bdb->version < 197) {
-               dev_priv->vbt.dsi.config->dl_dcs_cabc_ports = 0;
-               dev_priv->vbt.dsi.config->dl_dcs_backlight_ports = 0;
-       }
+       parse_dsi_backlight_ports(dev_priv, bdb->version, port);
 
        /* We have mandatory mipi config blocks. Initialize as generic panel */
        dev_priv->vbt.dsi.panel_id = MIPI_DSI_GENERIC_PANEL_ID;