mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-02-26 05:11:44 -05:00
drm/i915/mst: add mst sub-struct to struct intel_connector
Move port and mst_port members of struct intel_connector under an mst sub-struct to group mst related things together. Rename the latter dp for clarity. Cc: Imre Deak <imre.deak@intel.com> Reviewed-by: Imre Deak <imre.deak@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/e2afaf4595ae8e3241aaca1c1bb4d6356b07e44a.1740746939.git.jani.nikula@intel.com Signed-off-by: Jani Nikula <jani.nikula@intel.com>
This commit is contained in:
@@ -145,8 +145,8 @@ void intel_connector_destroy(struct drm_connector *connector)
|
||||
|
||||
drm_connector_cleanup(connector);
|
||||
|
||||
if (intel_connector->port)
|
||||
drm_dp_mst_put_port_malloc(intel_connector->port);
|
||||
if (intel_connector->mst.port)
|
||||
drm_dp_mst_put_port_malloc(intel_connector->mst.port);
|
||||
|
||||
kfree(connector);
|
||||
}
|
||||
|
||||
@@ -261,7 +261,7 @@ static void intel_connector_info(struct seq_file *m,
|
||||
switch (connector->connector_type) {
|
||||
case DRM_MODE_CONNECTOR_DisplayPort:
|
||||
case DRM_MODE_CONNECTOR_eDP:
|
||||
if (intel_connector->mst_port)
|
||||
if (intel_connector->mst.dp)
|
||||
intel_dp_mst_info(m, intel_connector);
|
||||
else
|
||||
intel_dp_info(m, intel_connector);
|
||||
@@ -1341,7 +1341,7 @@ void intel_connector_debugfs_add(struct intel_connector *connector)
|
||||
intel_dp_link_training_debugfs_add(connector);
|
||||
|
||||
if (DISPLAY_VER(display) >= 11 &&
|
||||
((connector_type == DRM_MODE_CONNECTOR_DisplayPort && !connector->mst_port) ||
|
||||
((connector_type == DRM_MODE_CONNECTOR_DisplayPort && !connector->mst.dp) ||
|
||||
connector_type == DRM_MODE_CONNECTOR_eDP)) {
|
||||
debugfs_create_file("i915_dsc_fec_support", 0644, root,
|
||||
connector, &i915_dsc_fec_support_fops);
|
||||
|
||||
@@ -534,10 +534,6 @@ struct intel_connector {
|
||||
state of connector->polled in case hotplug storm detection changes it */
|
||||
u8 polled;
|
||||
|
||||
struct drm_dp_mst_port *port;
|
||||
|
||||
struct intel_dp *mst_port;
|
||||
|
||||
int force_joined_pipes;
|
||||
|
||||
struct {
|
||||
@@ -549,6 +545,11 @@ struct intel_connector {
|
||||
u8 dsc_decompression_enabled:1;
|
||||
} dp;
|
||||
|
||||
struct {
|
||||
struct drm_dp_mst_port *port;
|
||||
struct intel_dp *dp;
|
||||
} mst;
|
||||
|
||||
/* Work struct to schedule a uevent on link train failure */
|
||||
struct work_struct modeset_retry_work;
|
||||
|
||||
@@ -1956,8 +1957,8 @@ static inline struct intel_dp *enc_to_intel_dp(struct intel_encoder *encoder)
|
||||
|
||||
static inline struct intel_dp *intel_attached_dp(struct intel_connector *connector)
|
||||
{
|
||||
if (connector->mst_port)
|
||||
return connector->mst_port;
|
||||
if (connector->mst.dp)
|
||||
return connector->mst.dp;
|
||||
else
|
||||
return enc_to_intel_dp(intel_attached_encoder(connector));
|
||||
}
|
||||
|
||||
@@ -1376,7 +1376,7 @@ bool intel_dp_has_dsc(const struct intel_connector *connector)
|
||||
if (!HAS_DSC(display))
|
||||
return false;
|
||||
|
||||
if (connector->mst_port && !HAS_DSC_MST(display))
|
||||
if (connector->mst.dp && !HAS_DSC_MST(display))
|
||||
return false;
|
||||
|
||||
if (connector->base.connector_type == DRM_MODE_CONNECTOR_eDP &&
|
||||
@@ -3080,7 +3080,7 @@ intel_dp_queue_modeset_retry_for_link(struct intel_atomic_state *state,
|
||||
if (!conn_state->base.crtc)
|
||||
continue;
|
||||
|
||||
if (connector->mst_port == intel_dp)
|
||||
if (connector->mst.dp == intel_dp)
|
||||
intel_connector_queue_modeset_retry_work(connector);
|
||||
}
|
||||
}
|
||||
@@ -3302,8 +3302,8 @@ intel_dp_sink_set_dsc_passthrough(const struct intel_connector *connector,
|
||||
bool enable)
|
||||
{
|
||||
struct intel_display *display = to_intel_display(connector);
|
||||
struct drm_dp_aux *aux = connector->port ?
|
||||
connector->port->passthrough_aux : NULL;
|
||||
struct drm_dp_aux *aux = connector->mst.port ?
|
||||
connector->mst.port->passthrough_aux : NULL;
|
||||
|
||||
if (!aux)
|
||||
return;
|
||||
@@ -3330,7 +3330,7 @@ static int intel_dp_dsc_aux_ref_count(struct intel_atomic_state *state,
|
||||
* On SST the decompression AUX device won't be shared, each connector
|
||||
* uses for this its own AUX targeting the sink device.
|
||||
*/
|
||||
if (!connector->mst_port)
|
||||
if (!connector->mst.dp)
|
||||
return connector->dp.dsc_decompression_enabled ? 1 : 0;
|
||||
|
||||
for_each_oldnew_connector_in_state(&state->base, _connector_iter,
|
||||
@@ -3338,7 +3338,7 @@ static int intel_dp_dsc_aux_ref_count(struct intel_atomic_state *state,
|
||||
const struct intel_connector *
|
||||
connector_iter = to_intel_connector(_connector_iter);
|
||||
|
||||
if (connector_iter->mst_port != connector->mst_port)
|
||||
if (connector_iter->mst.dp != connector->mst.dp)
|
||||
continue;
|
||||
|
||||
if (!connector_iter->dp.dsc_decompression_enabled)
|
||||
|
||||
@@ -705,10 +705,10 @@ int intel_dp_hdcp_get_remote_capability(struct intel_connector *connector,
|
||||
|
||||
*hdcp_capable = false;
|
||||
*hdcp2_capable = false;
|
||||
if (!connector->mst_port)
|
||||
if (!connector->mst.dp)
|
||||
return -EINVAL;
|
||||
|
||||
aux = &connector->port->aux;
|
||||
aux = &connector->mst.port->aux;
|
||||
ret = _intel_dp_hdcp2_get_capability(aux, hdcp2_capable);
|
||||
if (ret)
|
||||
drm_dbg_kms(display->drm,
|
||||
@@ -883,7 +883,7 @@ int intel_dp_hdcp_init(struct intel_digital_port *dig_port,
|
||||
if (!is_hdcp_supported(display, port))
|
||||
return 0;
|
||||
|
||||
if (intel_connector->mst_port)
|
||||
if (intel_connector->mst.dp)
|
||||
return intel_hdcp_init(intel_connector, dig_port,
|
||||
&intel_dp_mst_hdcp_shim);
|
||||
else if (!intel_dp_is_edp(intel_dp))
|
||||
|
||||
@@ -356,7 +356,7 @@ int intel_dp_mtp_tu_compute_config(struct intel_dp *intel_dp,
|
||||
crtc_state->dp_m_n.tu = remote_tu;
|
||||
|
||||
slots = drm_dp_atomic_find_time_slots(state, &intel_dp->mst.mgr,
|
||||
connector->port,
|
||||
connector->mst.port,
|
||||
dfixed_trunc(pbn));
|
||||
} else {
|
||||
/* Same as above for remote_tu */
|
||||
@@ -509,8 +509,8 @@ hblank_expansion_quirk_needs_dsc(const struct intel_connector *connector,
|
||||
{
|
||||
const struct drm_display_mode *adjusted_mode =
|
||||
&crtc_state->hw.adjusted_mode;
|
||||
bool is_uhbr_sink = connector->mst_port &&
|
||||
drm_dp_128b132b_supported(connector->mst_port->dpcd);
|
||||
bool is_uhbr_sink = connector->mst.dp &&
|
||||
drm_dp_128b132b_supported(connector->mst.dp->dpcd);
|
||||
int hblank_limit = is_uhbr_sink ? 500 : 300;
|
||||
|
||||
if (!connector->dp.dsc_hblank_expansion_quirk)
|
||||
@@ -741,7 +741,7 @@ intel_dp_mst_transcoder_mask(struct intel_atomic_state *state,
|
||||
const struct intel_crtc_state *crtc_state;
|
||||
struct intel_crtc *crtc;
|
||||
|
||||
if (connector->mst_port != mst_port || !conn_state->base.crtc)
|
||||
if (connector->mst.dp != mst_port || !conn_state->base.crtc)
|
||||
continue;
|
||||
|
||||
crtc = to_intel_crtc(conn_state->base.crtc);
|
||||
@@ -769,12 +769,12 @@ static u8 get_pipes_downstream_of_mst_port(struct intel_atomic_state *state,
|
||||
if (!conn_state->base.crtc)
|
||||
continue;
|
||||
|
||||
if (&connector->mst_port->mst.mgr != mst_mgr)
|
||||
if (&connector->mst.dp->mst.mgr != mst_mgr)
|
||||
continue;
|
||||
|
||||
if (connector->port != parent_port &&
|
||||
if (connector->mst.port != parent_port &&
|
||||
!drm_dp_mst_port_downstream_of_parent(mst_mgr,
|
||||
connector->port,
|
||||
connector->mst.port,
|
||||
parent_port))
|
||||
continue;
|
||||
|
||||
@@ -925,7 +925,7 @@ mst_connector_atomic_topology_check(struct intel_connector *connector,
|
||||
struct intel_crtc_state *crtc_state;
|
||||
struct intel_crtc *crtc;
|
||||
|
||||
if (connector_iter->mst_port != connector->mst_port ||
|
||||
if (connector_iter->mst.dp != connector->mst.dp ||
|
||||
connector_iter == connector)
|
||||
continue;
|
||||
|
||||
@@ -974,15 +974,15 @@ mst_connector_atomic_check(struct drm_connector *_connector,
|
||||
|
||||
if (intel_connector_needs_modeset(state, &connector->base)) {
|
||||
ret = intel_dp_tunnel_atomic_check_state(state,
|
||||
connector->mst_port,
|
||||
connector->mst.dp,
|
||||
connector);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
||||
return drm_dp_atomic_release_time_slots(&state->base,
|
||||
&connector->mst_port->mst.mgr,
|
||||
connector->port);
|
||||
&connector->mst.dp->mst.mgr,
|
||||
connector->mst.port);
|
||||
}
|
||||
|
||||
static void mst_stream_disable(struct intel_atomic_state *state,
|
||||
@@ -1027,9 +1027,9 @@ static void mst_stream_post_disable(struct intel_atomic_state *state,
|
||||
struct drm_dp_mst_topology_state *new_mst_state =
|
||||
drm_atomic_get_new_mst_topology_state(&state->base, &intel_dp->mst.mgr);
|
||||
const struct drm_dp_mst_atomic_payload *old_payload =
|
||||
drm_atomic_get_mst_payload_state(old_mst_state, connector->port);
|
||||
drm_atomic_get_mst_payload_state(old_mst_state, connector->mst.port);
|
||||
struct drm_dp_mst_atomic_payload *new_payload =
|
||||
drm_atomic_get_mst_payload_state(new_mst_state, connector->port);
|
||||
drm_atomic_get_mst_payload_state(new_mst_state, connector->mst.port);
|
||||
struct intel_crtc *pipe_crtc;
|
||||
bool last_mst_stream;
|
||||
int i;
|
||||
@@ -1080,7 +1080,7 @@ static void mst_stream_post_disable(struct intel_atomic_state *state,
|
||||
* Power down mst path before disabling the port, otherwise we end
|
||||
* up getting interrupts from the sink upon detecting link loss.
|
||||
*/
|
||||
drm_dp_send_power_updown_phy(&intel_dp->mst.mgr, connector->port,
|
||||
drm_dp_send_power_updown_phy(&intel_dp->mst.mgr, connector->mst.port,
|
||||
false);
|
||||
|
||||
/*
|
||||
@@ -1199,7 +1199,7 @@ static void mst_stream_pre_enable(struct intel_atomic_state *state,
|
||||
if (first_mst_stream)
|
||||
intel_dp_set_power(intel_dp, DP_SET_POWER_D0);
|
||||
|
||||
drm_dp_send_power_updown_phy(&intel_dp->mst.mgr, connector->port, true);
|
||||
drm_dp_send_power_updown_phy(&intel_dp->mst.mgr, connector->mst.port, true);
|
||||
|
||||
intel_dp_sink_enable_decompression(state, connector, pipe_config);
|
||||
|
||||
@@ -1213,7 +1213,7 @@ static void mst_stream_pre_enable(struct intel_atomic_state *state,
|
||||
intel_dp->mst.active_links++;
|
||||
|
||||
ret = drm_dp_add_payload_part1(&intel_dp->mst.mgr, mst_state,
|
||||
drm_atomic_get_mst_payload_state(mst_state, connector->port));
|
||||
drm_atomic_get_mst_payload_state(mst_state, connector->mst.port));
|
||||
if (ret < 0)
|
||||
intel_dp_queue_modeset_retry_for_link(state, primary_encoder, pipe_config);
|
||||
|
||||
@@ -1339,7 +1339,7 @@ static void mst_stream_enable(struct intel_atomic_state *state,
|
||||
|
||||
ret = drm_dp_add_payload_part2(&intel_dp->mst.mgr,
|
||||
drm_atomic_get_mst_payload_state(mst_state,
|
||||
connector->port));
|
||||
connector->mst.port));
|
||||
if (ret < 0)
|
||||
intel_dp_queue_modeset_retry_for_link(state, primary_encoder, pipe_config);
|
||||
|
||||
@@ -1392,7 +1392,7 @@ static int mst_connector_get_ddc_modes(struct drm_connector *_connector)
|
||||
{
|
||||
struct intel_connector *connector = to_intel_connector(_connector);
|
||||
struct intel_display *display = to_intel_display(connector);
|
||||
struct intel_dp *intel_dp = connector->mst_port;
|
||||
struct intel_dp *intel_dp = connector->mst.dp;
|
||||
const struct drm_edid *drm_edid;
|
||||
int ret;
|
||||
|
||||
@@ -1402,7 +1402,7 @@ static int mst_connector_get_ddc_modes(struct drm_connector *_connector)
|
||||
if (!intel_display_driver_check_access(display))
|
||||
return drm_edid_connector_add_modes(&connector->base);
|
||||
|
||||
drm_edid = drm_dp_mst_edid_read(&connector->base, &intel_dp->mst.mgr, connector->port);
|
||||
drm_edid = drm_dp_mst_edid_read(&connector->base, &intel_dp->mst.mgr, connector->mst.port);
|
||||
|
||||
ret = intel_connector_update_modes(&connector->base, drm_edid);
|
||||
|
||||
@@ -1417,13 +1417,13 @@ mst_connector_late_register(struct drm_connector *_connector)
|
||||
struct intel_connector *connector = to_intel_connector(_connector);
|
||||
int ret;
|
||||
|
||||
ret = drm_dp_mst_connector_late_register(&connector->base, connector->port);
|
||||
ret = drm_dp_mst_connector_late_register(&connector->base, connector->mst.port);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
ret = intel_connector_register(&connector->base);
|
||||
if (ret < 0)
|
||||
drm_dp_mst_connector_early_unregister(&connector->base, connector->port);
|
||||
drm_dp_mst_connector_early_unregister(&connector->base, connector->mst.port);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -1434,7 +1434,7 @@ mst_connector_early_unregister(struct drm_connector *_connector)
|
||||
struct intel_connector *connector = to_intel_connector(_connector);
|
||||
|
||||
intel_connector_unregister(&connector->base);
|
||||
drm_dp_mst_connector_early_unregister(&connector->base, connector->port);
|
||||
drm_dp_mst_connector_early_unregister(&connector->base, connector->mst.port);
|
||||
}
|
||||
|
||||
static const struct drm_connector_funcs mst_connector_funcs = {
|
||||
@@ -1463,9 +1463,9 @@ mst_connector_mode_valid_ctx(struct drm_connector *_connector,
|
||||
{
|
||||
struct intel_connector *connector = to_intel_connector(_connector);
|
||||
struct intel_display *display = to_intel_display(connector);
|
||||
struct intel_dp *intel_dp = connector->mst_port;
|
||||
struct intel_dp *intel_dp = connector->mst.dp;
|
||||
struct drm_dp_mst_topology_mgr *mgr = &intel_dp->mst.mgr;
|
||||
struct drm_dp_mst_port *port = connector->port;
|
||||
struct drm_dp_mst_port *port = connector->mst.port;
|
||||
const int min_bpp = 18;
|
||||
int max_dotclk = display->cdclk.max_dotclk_freq;
|
||||
int max_rate, mode_rate, max_lanes, max_link_clock;
|
||||
@@ -1576,7 +1576,7 @@ mst_connector_atomic_best_encoder(struct drm_connector *_connector,
|
||||
struct intel_connector *connector = to_intel_connector(_connector);
|
||||
struct drm_connector_state *connector_state =
|
||||
drm_atomic_get_new_connector_state(state, &connector->base);
|
||||
struct intel_dp *intel_dp = connector->mst_port;
|
||||
struct intel_dp *intel_dp = connector->mst.dp;
|
||||
struct intel_crtc *crtc = to_intel_crtc(connector_state->crtc);
|
||||
|
||||
return &intel_dp->mst.stream_encoders[crtc->pipe]->base.base;
|
||||
@@ -1588,7 +1588,7 @@ mst_connector_detect_ctx(struct drm_connector *_connector,
|
||||
{
|
||||
struct intel_connector *connector = to_intel_connector(_connector);
|
||||
struct intel_display *display = to_intel_display(connector);
|
||||
struct intel_dp *intel_dp = connector->mst_port;
|
||||
struct intel_dp *intel_dp = connector->mst.dp;
|
||||
|
||||
if (!intel_display_device_enabled(display))
|
||||
return connector_status_disconnected;
|
||||
@@ -1602,7 +1602,7 @@ mst_connector_detect_ctx(struct drm_connector *_connector,
|
||||
intel_dp_flush_connector_commits(connector);
|
||||
|
||||
return drm_dp_mst_detect_port(&connector->base, ctx, &intel_dp->mst.mgr,
|
||||
connector->port);
|
||||
connector->mst.port);
|
||||
}
|
||||
|
||||
static const struct drm_connector_helper_funcs mst_connector_helper_funcs = {
|
||||
@@ -1693,10 +1693,10 @@ static bool detect_dsc_hblank_expansion_quirk(const struct intel_connector *conn
|
||||
* A logical port's OUI (at least for affected sinks) is all 0, so
|
||||
* instead of that the parent port's OUI is used for identification.
|
||||
*/
|
||||
if (drm_dp_mst_port_is_logical(connector->port)) {
|
||||
aux = drm_dp_mst_aux_for_parent(connector->port);
|
||||
if (drm_dp_mst_port_is_logical(connector->mst.port)) {
|
||||
aux = drm_dp_mst_aux_for_parent(connector->mst.port);
|
||||
if (!aux)
|
||||
aux = &connector->mst_port->aux;
|
||||
aux = &connector->mst.dp->aux;
|
||||
}
|
||||
|
||||
if (drm_dp_read_dpcd_caps(aux, dpcd) < 0)
|
||||
@@ -1744,8 +1744,8 @@ mst_topology_add_connector(struct drm_dp_mst_topology_mgr *mgr,
|
||||
|
||||
connector->get_hw_state = mst_connector_get_hw_state;
|
||||
connector->sync_state = intel_dp_connector_sync_state;
|
||||
connector->mst_port = intel_dp;
|
||||
connector->port = port;
|
||||
connector->mst.dp = intel_dp;
|
||||
connector->mst.port = port;
|
||||
drm_dp_mst_get_port_malloc(port);
|
||||
|
||||
ret = drm_connector_dynamic_init(display->drm, &connector->base, &mst_connector_funcs,
|
||||
@@ -1954,11 +1954,11 @@ intel_dp_mst_add_topology_state_for_connector(struct intel_atomic_state *state,
|
||||
{
|
||||
struct drm_dp_mst_topology_state *mst_state;
|
||||
|
||||
if (!connector->mst_port)
|
||||
if (!connector->mst.dp)
|
||||
return 0;
|
||||
|
||||
mst_state = drm_atomic_get_mst_topology_state(&state->base,
|
||||
&connector->mst_port->mst.mgr);
|
||||
&connector->mst.dp->mst.mgr);
|
||||
if (IS_ERR(mst_state))
|
||||
return PTR_ERR(mst_state);
|
||||
|
||||
@@ -2056,7 +2056,7 @@ bool intel_dp_mst_crtc_needs_modeset(struct intel_atomic_state *state,
|
||||
const struct intel_crtc_state *old_crtc_state;
|
||||
struct intel_crtc *crtc_iter;
|
||||
|
||||
if (connector->mst_port != crtc_connector->mst_port ||
|
||||
if (connector->mst.dp != crtc_connector->mst.dp ||
|
||||
!conn_state->crtc)
|
||||
continue;
|
||||
|
||||
@@ -2079,7 +2079,7 @@ bool intel_dp_mst_crtc_needs_modeset(struct intel_atomic_state *state,
|
||||
* case.
|
||||
*/
|
||||
if (connector->dp.dsc_decompression_aux ==
|
||||
&connector->mst_port->aux)
|
||||
&connector->mst.dp->aux)
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -70,13 +70,13 @@ static int intel_conn_to_vcpi(struct intel_atomic_state *state,
|
||||
int vcpi = 0;
|
||||
|
||||
/* For HDMI this is forced to be 0x0. For DP SST also this is 0x0. */
|
||||
if (!connector->port)
|
||||
if (!connector->mst.port)
|
||||
return 0;
|
||||
mgr = connector->port->mgr;
|
||||
mgr = connector->mst.port->mgr;
|
||||
|
||||
drm_modeset_lock(&mgr->base.lock, state->base.acquire_ctx);
|
||||
mst_state = to_drm_dp_mst_topology_state(mgr->base.state);
|
||||
payload = drm_atomic_get_mst_payload_state(mst_state, connector->port);
|
||||
payload = drm_atomic_get_mst_payload_state(mst_state, connector->mst.port);
|
||||
if (drm_WARN_ON(mgr->dev, !payload))
|
||||
goto out;
|
||||
|
||||
@@ -2775,7 +2775,7 @@ static void __intel_hdcp_info(struct seq_file *m, struct intel_connector *connec
|
||||
void intel_hdcp_info(struct seq_file *m, struct intel_connector *connector)
|
||||
{
|
||||
seq_puts(m, "\tHDCP version: ");
|
||||
if (connector->mst_port) {
|
||||
if (connector->mst.dp) {
|
||||
__intel_hdcp_info(m, connector, true);
|
||||
seq_puts(m, "\tMST Hub HDCP version: ");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user