|
@@ -309,16 +309,14 @@ static int dp_mst_calc_pbn_mode(struct dp_display_mode *dp_mode)
|
|
int pbn, bpp;
|
|
int pbn, bpp;
|
|
bool dsc_en;
|
|
bool dsc_en;
|
|
s64 pbn_fp;
|
|
s64 pbn_fp;
|
|
|
|
+ struct dp_panel_info *pinfo = &dp_mode->timing;
|
|
|
|
|
|
- dsc_en = dp_mode->timing.comp_info.enabled;
|
|
|
|
- bpp = dsc_en ?
|
|
|
|
- DSC_BPP(dp_mode->timing.comp_info.dsc_info.config)
|
|
|
|
- : dp_mode->timing.bpp;
|
|
|
|
|
|
+ dsc_en = pinfo->comp_info.enabled;
|
|
|
|
+ bpp = dsc_en ? DSC_BPP(pinfo->comp_info.dsc_info.config) : pinfo->bpp;
|
|
|
|
|
|
- pbn = drm_dp_calc_pbn_mode(dp_mode->timing.pixel_clk_khz, bpp, false);
|
|
|
|
|
|
+ pbn = drm_dp_calc_pbn_mode(pinfo->pixel_clk_khz, bpp, false);
|
|
pbn_fp = drm_fixp_from_fraction(pbn, 1);
|
|
pbn_fp = drm_fixp_from_fraction(pbn, 1);
|
|
-
|
|
|
|
- DP_DEBUG_V("before overhead pbn:%d, bpp:%d\n", pbn, bpp);
|
|
|
|
|
|
+ pinfo->pbn_no_overhead = pbn;
|
|
|
|
|
|
if (dsc_en)
|
|
if (dsc_en)
|
|
pbn_fp = drm_fixp_mul(pbn_fp, dp_mode->dsc_overhead_fp);
|
|
pbn_fp = drm_fixp_mul(pbn_fp, dp_mode->dsc_overhead_fp);
|
|
@@ -327,8 +325,11 @@ static int dp_mst_calc_pbn_mode(struct dp_display_mode *dp_mode)
|
|
pbn_fp = drm_fixp_mul(pbn_fp, dp_mode->fec_overhead_fp);
|
|
pbn_fp = drm_fixp_mul(pbn_fp, dp_mode->fec_overhead_fp);
|
|
|
|
|
|
pbn = drm_fixp2int(pbn_fp);
|
|
pbn = drm_fixp2int(pbn_fp);
|
|
|
|
+ pinfo->pbn = pbn;
|
|
|
|
+
|
|
|
|
+ DP_DEBUG_V("pbn before overhead:%d pbn final:%d, bpp:%d\n", pinfo->pbn_no_overhead, pbn,
|
|
|
|
+ bpp);
|
|
|
|
|
|
- DP_DEBUG_V("after overhead pbn:%d, bpp:%d\n", pbn, bpp);
|
|
|
|
return pbn;
|
|
return pbn;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -2024,6 +2025,12 @@ static void dp_mst_set_state(void *dp_display, enum dp_drv_state mst_state)
|
|
DP_MST_INFO("mst power state:%d\n", mst_state);
|
|
DP_MST_INFO("mst power state:%d\n", mst_state);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+static void dp_mst_display_set_mst_mode_params(void *dp_display, struct dp_display_mode *mode)
|
|
|
|
+{
|
|
|
|
+ // update pbn values that will later be used for rg calculation
|
|
|
|
+ dp_mst_calc_pbn_mode(mode);
|
|
|
|
+}
|
|
|
|
+
|
|
/* DP MST APIs */
|
|
/* DP MST APIs */
|
|
|
|
|
|
static const struct dp_mst_drm_cbs dp_mst_display_cbs = {
|
|
static const struct dp_mst_drm_cbs dp_mst_display_cbs = {
|
|
@@ -2031,6 +2038,7 @@ static const struct dp_mst_drm_cbs dp_mst_display_cbs = {
|
|
.hpd_irq = dp_mst_display_hpd_irq,
|
|
.hpd_irq = dp_mst_display_hpd_irq,
|
|
.set_drv_state = dp_mst_set_state,
|
|
.set_drv_state = dp_mst_set_state,
|
|
.set_mgr_state = dp_mst_display_set_mgr_state,
|
|
.set_mgr_state = dp_mst_display_set_mgr_state,
|
|
|
|
+ .set_mst_mode_params = dp_mst_display_set_mst_mode_params,
|
|
};
|
|
};
|
|
|
|
|
|
static const struct drm_dp_mst_topology_cbs dp_mst_drm_cbs = {
|
|
static const struct drm_dp_mst_topology_cbs dp_mst_drm_cbs = {
|