At the moment modesetting a stream CRTC will fail if the stream's BW along with the current BW of all the other streams on the same MST link is above the total BW of the MST link. Make the BW sharing more dynamic by trying to reduce the link bpp of one or more streams on the MST link in this case. When selecting a stream to reduce the BW for, take into account which link segment in the MST topology ran out of BW and which streams go through this link segment. For instance with A,B,C streams in the same MST topology A and B may share the BW of a link segment downstream of a branch device, stream C not downstream of the branch device, hence not affecting this BW. If this link segment's BW runs out one or both of stream A/B's BW will be reduced until their total BW is within limits. While reducing the link bpp for a given stream DSC may need to be enabled for it, which requires FEC on the whole MST link. Check for this condition and recompute the state for all streams taking the FEC overhead into account (on 8b/10b links). v2: - Rebase on s/min_bpp_pipes/min_bpp_reached_pipes/ change. Reviewed-by: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com> Signed-off-by: Imre Deak <imre.deak@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20231030155843.2251023-29-imre.deak@intel.com
31 lines
1.1 KiB
C
31 lines
1.1 KiB
C
/* SPDX-License-Identifier: MIT */
|
|
/*
|
|
* Copyright © 2019 Intel Corporation
|
|
*/
|
|
|
|
#ifndef __INTEL_DP_MST_H__
|
|
#define __INTEL_DP_MST_H__
|
|
|
|
#include <linux/types.h>
|
|
|
|
struct intel_atomic_state;
|
|
struct intel_crtc;
|
|
struct intel_crtc_state;
|
|
struct intel_digital_port;
|
|
struct intel_dp;
|
|
struct intel_link_bw_limits;
|
|
|
|
int intel_dp_mst_encoder_init(struct intel_digital_port *dig_port, int conn_id);
|
|
void intel_dp_mst_encoder_cleanup(struct intel_digital_port *dig_port);
|
|
int intel_dp_mst_encoder_active_links(struct intel_digital_port *dig_port);
|
|
bool intel_dp_mst_is_master_trans(const struct intel_crtc_state *crtc_state);
|
|
bool intel_dp_mst_is_slave_trans(const struct intel_crtc_state *crtc_state);
|
|
bool intel_dp_mst_source_support(struct intel_dp *intel_dp);
|
|
int intel_dp_mst_add_topology_state_for_crtc(struct intel_atomic_state *state,
|
|
struct intel_crtc *crtc);
|
|
int intel_dp_mst_atomic_check_link(struct intel_atomic_state *state,
|
|
struct intel_link_bw_limits *limits);
|
|
bool intel_dp_mst_crtc_needs_modeset(struct intel_atomic_state *state,
|
|
struct intel_crtc *crtc);
|
|
|
|
#endif /* __INTEL_DP_MST_H__ */
|