mirror of
https://github.com/torvalds/linux.git
synced 2024-11-17 01:22:07 +00:00
Couple Reverts, build fix, couple virtualization fixes,
blank screen and other display rates fixes, and more. Four patches targeting stable in here. Display Fixes: - DP rates related fixes (Imre, Jani) - A Revert on disaling dual eDP that was causing state readout problems (Jani) - put the cdclk vtables in const data (Jani) - Fix DVO port type for moder platforms (Ville) - Fix blankscreen by turning DP++ TMDS output buffers on encoder->shutdown (Ville) - CCS FBs related fixes (Imre) GT fixes: - Fix recursive lock in GuC submission (Matt Brost) - Revert guc_id from i915_request tracepoint (Joonas) - Build fix around dmabuf (Matt Auld) -----BEGIN PGP SIGNATURE----- iQEzBAABCAAdFiEEbSBwaO7dZQkcLOKj+mJfZA7rE8oFAmGLAXwACgkQ+mJfZA7r E8rCbwf9EDwnn35GYmATgf0wDiXmZRJHlFqRgLcPs5o9P+4MXDvPAKINCTXJBxr6 +TpA+ZYsTHh58P9FmoGLu1btBasEACjeoiMFL5u4RVUPOQUd0qwBmXHjSHzJ+y6E eA8hrtYVVfc9/Z3QFLybxyZNzw8s7a9BUZoBCjr0AiUfp0BdqzplIU2LpnsPyw9S Q7UbMRyiMNd7iOndVCamfDnTbVBFRvv6WEbxveCjLL3ud02fpWywBN+CryQ3ZQs0 5gco7H/gpCrLHysJbBa60DPM6NL0JKxXvRU0aSXP2WY6ONFzc6jULYYtkRLMHjc3 NLuQlx5uBCf863h6k3shIzlNHCvF+Q== =aRFO -----END PGP SIGNATURE----- Merge tag 'drm-intel-next-fixes-2021-11-09' of git://anongit.freedesktop.org/drm/drm-intel into drm-next Couple Reverts, build fix, couple virtualization fixes, blank screen and other display rates fixes, and more. Four patches targeting stable in here. Display Fixes: - DP rates related fixes (Imre, Jani) - A Revert on disaling dual eDP that was causing state readout problems (Jani) - put the cdclk vtables in const data (Jani) - Fix DVO port type for moder platforms (Ville) - Fix blankscreen by turning DP++ TMDS output buffers on encoder->shutdown (Ville) - CCS FBs related fixes (Imre) GT fixes: - Fix recursive lock in GuC submission (Matt Brost) - Revert guc_id from i915_request tracepoint (Joonas) - Build fix around dmabuf (Matt Auld) Signed-off-by: Dave Airlie <airlied@redhat.com> From: Rodrigo Vivi <rodrigo.vivi@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/YYsBif3HMi8GjLoU@intel.com
This commit is contained in:
commit
917a6f0bdb
@ -584,6 +584,7 @@ void g4x_hdmi_init(struct drm_i915_private *dev_priv,
|
||||
else
|
||||
intel_encoder->enable = g4x_enable_hdmi;
|
||||
}
|
||||
intel_encoder->shutdown = intel_hdmi_encoder_shutdown;
|
||||
|
||||
intel_encoder->type = INTEL_OUTPUT_HDMI;
|
||||
intel_encoder->power_domain = intel_port_to_power_domain(port);
|
||||
|
@ -1707,6 +1707,39 @@ static void sanitize_aux_ch(struct intel_bios_encoder_data *devdata,
|
||||
child->aux_channel = 0;
|
||||
}
|
||||
|
||||
static u8 dvo_port_type(u8 dvo_port)
|
||||
{
|
||||
switch (dvo_port) {
|
||||
case DVO_PORT_HDMIA:
|
||||
case DVO_PORT_HDMIB:
|
||||
case DVO_PORT_HDMIC:
|
||||
case DVO_PORT_HDMID:
|
||||
case DVO_PORT_HDMIE:
|
||||
case DVO_PORT_HDMIF:
|
||||
case DVO_PORT_HDMIG:
|
||||
case DVO_PORT_HDMIH:
|
||||
case DVO_PORT_HDMII:
|
||||
return DVO_PORT_HDMIA;
|
||||
case DVO_PORT_DPA:
|
||||
case DVO_PORT_DPB:
|
||||
case DVO_PORT_DPC:
|
||||
case DVO_PORT_DPD:
|
||||
case DVO_PORT_DPE:
|
||||
case DVO_PORT_DPF:
|
||||
case DVO_PORT_DPG:
|
||||
case DVO_PORT_DPH:
|
||||
case DVO_PORT_DPI:
|
||||
return DVO_PORT_DPA;
|
||||
case DVO_PORT_MIPIA:
|
||||
case DVO_PORT_MIPIB:
|
||||
case DVO_PORT_MIPIC:
|
||||
case DVO_PORT_MIPID:
|
||||
return DVO_PORT_MIPIA;
|
||||
default:
|
||||
return dvo_port;
|
||||
}
|
||||
}
|
||||
|
||||
static enum port __dvo_port_to_port(int n_ports, int n_dvo,
|
||||
const int port_mapping[][3], u8 dvo_port)
|
||||
{
|
||||
@ -1930,50 +1963,6 @@ static int _intel_bios_max_tmds_clock(const struct intel_bios_encoder_data *devd
|
||||
}
|
||||
}
|
||||
|
||||
static enum port get_edp_port(struct drm_i915_private *i915)
|
||||
{
|
||||
const struct intel_bios_encoder_data *devdata;
|
||||
enum port port;
|
||||
|
||||
for_each_port(port) {
|
||||
devdata = i915->vbt.ports[port];
|
||||
|
||||
if (devdata && intel_bios_encoder_supports_edp(devdata))
|
||||
return port;
|
||||
}
|
||||
|
||||
return PORT_NONE;
|
||||
}
|
||||
|
||||
/*
|
||||
* FIXME: The power sequencer and backlight code currently do not support more
|
||||
* than one set registers, at least not on anything other than VLV/CHV. It will
|
||||
* clobber the registers. As a temporary workaround, gracefully prevent more
|
||||
* than one eDP from being registered.
|
||||
*/
|
||||
static void sanitize_dual_edp(struct intel_bios_encoder_data *devdata,
|
||||
enum port port)
|
||||
{
|
||||
struct drm_i915_private *i915 = devdata->i915;
|
||||
struct child_device_config *child = &devdata->child;
|
||||
enum port p;
|
||||
|
||||
/* CHV might not clobber PPS registers. */
|
||||
if (IS_CHERRYVIEW(i915))
|
||||
return;
|
||||
|
||||
p = get_edp_port(i915);
|
||||
if (p == PORT_NONE)
|
||||
return;
|
||||
|
||||
drm_dbg_kms(&i915->drm, "both ports %c and %c configured as eDP, "
|
||||
"disabling port %c eDP\n", port_name(p), port_name(port),
|
||||
port_name(port));
|
||||
|
||||
child->device_type &= ~DEVICE_TYPE_DISPLAYPORT_OUTPUT;
|
||||
child->device_type &= ~DEVICE_TYPE_INTERNAL_CONNECTOR;
|
||||
}
|
||||
|
||||
static bool is_port_valid(struct drm_i915_private *i915, enum port port)
|
||||
{
|
||||
/*
|
||||
@ -2031,9 +2020,6 @@ static void parse_ddi_port(struct drm_i915_private *i915,
|
||||
supports_typec_usb, supports_tbt,
|
||||
devdata->dsc != NULL);
|
||||
|
||||
if (is_edp)
|
||||
sanitize_dual_edp(devdata, port);
|
||||
|
||||
if (is_dvi)
|
||||
sanitize_ddc_pin(devdata, port);
|
||||
|
||||
@ -2670,8 +2656,25 @@ bool intel_bios_is_port_edp(struct drm_i915_private *i915, enum port port)
|
||||
return false;
|
||||
}
|
||||
|
||||
static bool child_dev_is_dp_dual_mode(const struct child_device_config *child,
|
||||
enum port port)
|
||||
static bool child_dev_is_dp_dual_mode(const struct child_device_config *child)
|
||||
{
|
||||
if ((child->device_type & DEVICE_TYPE_DP_DUAL_MODE_BITS) !=
|
||||
(DEVICE_TYPE_DP_DUAL_MODE & DEVICE_TYPE_DP_DUAL_MODE_BITS))
|
||||
return false;
|
||||
|
||||
if (dvo_port_type(child->dvo_port) == DVO_PORT_DPA)
|
||||
return true;
|
||||
|
||||
/* Only accept a HDMI dvo_port as DP++ if it has an AUX channel */
|
||||
if (dvo_port_type(child->dvo_port) == DVO_PORT_HDMIA &&
|
||||
child->aux_channel != 0)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool intel_bios_is_port_dp_dual_mode(struct drm_i915_private *i915,
|
||||
enum port port)
|
||||
{
|
||||
static const struct {
|
||||
u16 dp, hdmi;
|
||||
@ -2686,32 +2689,23 @@ static bool child_dev_is_dp_dual_mode(const struct child_device_config *child,
|
||||
[PORT_E] = { DVO_PORT_DPE, DVO_PORT_HDMIE, },
|
||||
[PORT_F] = { DVO_PORT_DPF, DVO_PORT_HDMIF, },
|
||||
};
|
||||
const struct intel_bios_encoder_data *devdata;
|
||||
|
||||
if (HAS_DDI(i915)) {
|
||||
const struct intel_bios_encoder_data *devdata;
|
||||
|
||||
devdata = intel_bios_encoder_data_lookup(i915, port);
|
||||
|
||||
return devdata && child_dev_is_dp_dual_mode(&devdata->child);
|
||||
}
|
||||
|
||||
if (port == PORT_A || port >= ARRAY_SIZE(port_mapping))
|
||||
return false;
|
||||
|
||||
if ((child->device_type & DEVICE_TYPE_DP_DUAL_MODE_BITS) !=
|
||||
(DEVICE_TYPE_DP_DUAL_MODE & DEVICE_TYPE_DP_DUAL_MODE_BITS))
|
||||
return false;
|
||||
|
||||
if (child->dvo_port == port_mapping[port].dp)
|
||||
return true;
|
||||
|
||||
/* Only accept a HDMI dvo_port as DP++ if it has an AUX channel */
|
||||
if (child->dvo_port == port_mapping[port].hdmi &&
|
||||
child->aux_channel != 0)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool intel_bios_is_port_dp_dual_mode(struct drm_i915_private *i915,
|
||||
enum port port)
|
||||
{
|
||||
const struct intel_bios_encoder_data *devdata;
|
||||
|
||||
list_for_each_entry(devdata, &i915->vbt.display_devices, node) {
|
||||
if (child_dev_is_dp_dual_mode(&devdata->child, port))
|
||||
if ((devdata->child.dvo_port == port_mapping[port].dp ||
|
||||
devdata->child.dvo_port == port_mapping[port].hdmi) &&
|
||||
child_dev_is_dp_dual_mode(&devdata->child))
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -2885,7 +2885,7 @@ u32 intel_read_rawclk(struct drm_i915_private *dev_priv)
|
||||
return freq;
|
||||
}
|
||||
|
||||
static struct intel_cdclk_funcs tgl_cdclk_funcs = {
|
||||
static const struct intel_cdclk_funcs tgl_cdclk_funcs = {
|
||||
.get_cdclk = bxt_get_cdclk,
|
||||
.set_cdclk = bxt_set_cdclk,
|
||||
.bw_calc_min_cdclk = skl_bw_calc_min_cdclk,
|
||||
@ -2893,7 +2893,7 @@ static struct intel_cdclk_funcs tgl_cdclk_funcs = {
|
||||
.calc_voltage_level = tgl_calc_voltage_level,
|
||||
};
|
||||
|
||||
static struct intel_cdclk_funcs ehl_cdclk_funcs = {
|
||||
static const struct intel_cdclk_funcs ehl_cdclk_funcs = {
|
||||
.get_cdclk = bxt_get_cdclk,
|
||||
.set_cdclk = bxt_set_cdclk,
|
||||
.bw_calc_min_cdclk = skl_bw_calc_min_cdclk,
|
||||
@ -2901,7 +2901,7 @@ static struct intel_cdclk_funcs ehl_cdclk_funcs = {
|
||||
.calc_voltage_level = ehl_calc_voltage_level,
|
||||
};
|
||||
|
||||
static struct intel_cdclk_funcs icl_cdclk_funcs = {
|
||||
static const struct intel_cdclk_funcs icl_cdclk_funcs = {
|
||||
.get_cdclk = bxt_get_cdclk,
|
||||
.set_cdclk = bxt_set_cdclk,
|
||||
.bw_calc_min_cdclk = skl_bw_calc_min_cdclk,
|
||||
@ -2909,7 +2909,7 @@ static struct intel_cdclk_funcs icl_cdclk_funcs = {
|
||||
.calc_voltage_level = icl_calc_voltage_level,
|
||||
};
|
||||
|
||||
static struct intel_cdclk_funcs bxt_cdclk_funcs = {
|
||||
static const struct intel_cdclk_funcs bxt_cdclk_funcs = {
|
||||
.get_cdclk = bxt_get_cdclk,
|
||||
.set_cdclk = bxt_set_cdclk,
|
||||
.bw_calc_min_cdclk = skl_bw_calc_min_cdclk,
|
||||
@ -2917,54 +2917,54 @@ static struct intel_cdclk_funcs bxt_cdclk_funcs = {
|
||||
.calc_voltage_level = bxt_calc_voltage_level,
|
||||
};
|
||||
|
||||
static struct intel_cdclk_funcs skl_cdclk_funcs = {
|
||||
static const struct intel_cdclk_funcs skl_cdclk_funcs = {
|
||||
.get_cdclk = skl_get_cdclk,
|
||||
.set_cdclk = skl_set_cdclk,
|
||||
.bw_calc_min_cdclk = skl_bw_calc_min_cdclk,
|
||||
.modeset_calc_cdclk = skl_modeset_calc_cdclk,
|
||||
};
|
||||
|
||||
static struct intel_cdclk_funcs bdw_cdclk_funcs = {
|
||||
static const struct intel_cdclk_funcs bdw_cdclk_funcs = {
|
||||
.get_cdclk = bdw_get_cdclk,
|
||||
.set_cdclk = bdw_set_cdclk,
|
||||
.bw_calc_min_cdclk = intel_bw_calc_min_cdclk,
|
||||
.modeset_calc_cdclk = bdw_modeset_calc_cdclk,
|
||||
};
|
||||
|
||||
static struct intel_cdclk_funcs chv_cdclk_funcs = {
|
||||
static const struct intel_cdclk_funcs chv_cdclk_funcs = {
|
||||
.get_cdclk = vlv_get_cdclk,
|
||||
.set_cdclk = chv_set_cdclk,
|
||||
.bw_calc_min_cdclk = intel_bw_calc_min_cdclk,
|
||||
.modeset_calc_cdclk = vlv_modeset_calc_cdclk,
|
||||
};
|
||||
|
||||
static struct intel_cdclk_funcs vlv_cdclk_funcs = {
|
||||
static const struct intel_cdclk_funcs vlv_cdclk_funcs = {
|
||||
.get_cdclk = vlv_get_cdclk,
|
||||
.set_cdclk = vlv_set_cdclk,
|
||||
.bw_calc_min_cdclk = intel_bw_calc_min_cdclk,
|
||||
.modeset_calc_cdclk = vlv_modeset_calc_cdclk,
|
||||
};
|
||||
|
||||
static struct intel_cdclk_funcs hsw_cdclk_funcs = {
|
||||
static const struct intel_cdclk_funcs hsw_cdclk_funcs = {
|
||||
.get_cdclk = hsw_get_cdclk,
|
||||
.bw_calc_min_cdclk = intel_bw_calc_min_cdclk,
|
||||
.modeset_calc_cdclk = fixed_modeset_calc_cdclk,
|
||||
};
|
||||
|
||||
/* SNB, IVB, 965G, 945G */
|
||||
static struct intel_cdclk_funcs fixed_400mhz_cdclk_funcs = {
|
||||
static const struct intel_cdclk_funcs fixed_400mhz_cdclk_funcs = {
|
||||
.get_cdclk = fixed_400mhz_get_cdclk,
|
||||
.bw_calc_min_cdclk = intel_bw_calc_min_cdclk,
|
||||
.modeset_calc_cdclk = fixed_modeset_calc_cdclk,
|
||||
};
|
||||
|
||||
static struct intel_cdclk_funcs ilk_cdclk_funcs = {
|
||||
static const struct intel_cdclk_funcs ilk_cdclk_funcs = {
|
||||
.get_cdclk = fixed_450mhz_get_cdclk,
|
||||
.bw_calc_min_cdclk = intel_bw_calc_min_cdclk,
|
||||
.modeset_calc_cdclk = fixed_modeset_calc_cdclk,
|
||||
};
|
||||
|
||||
static struct intel_cdclk_funcs gm45_cdclk_funcs = {
|
||||
static const struct intel_cdclk_funcs gm45_cdclk_funcs = {
|
||||
.get_cdclk = gm45_get_cdclk,
|
||||
.bw_calc_min_cdclk = intel_bw_calc_min_cdclk,
|
||||
.modeset_calc_cdclk = fixed_modeset_calc_cdclk,
|
||||
@ -2972,7 +2972,7 @@ static struct intel_cdclk_funcs gm45_cdclk_funcs = {
|
||||
|
||||
/* G45 uses G33 */
|
||||
|
||||
static struct intel_cdclk_funcs i965gm_cdclk_funcs = {
|
||||
static const struct intel_cdclk_funcs i965gm_cdclk_funcs = {
|
||||
.get_cdclk = i965gm_get_cdclk,
|
||||
.bw_calc_min_cdclk = intel_bw_calc_min_cdclk,
|
||||
.modeset_calc_cdclk = fixed_modeset_calc_cdclk,
|
||||
@ -2980,19 +2980,19 @@ static struct intel_cdclk_funcs i965gm_cdclk_funcs = {
|
||||
|
||||
/* i965G uses fixed 400 */
|
||||
|
||||
static struct intel_cdclk_funcs pnv_cdclk_funcs = {
|
||||
static const struct intel_cdclk_funcs pnv_cdclk_funcs = {
|
||||
.get_cdclk = pnv_get_cdclk,
|
||||
.bw_calc_min_cdclk = intel_bw_calc_min_cdclk,
|
||||
.modeset_calc_cdclk = fixed_modeset_calc_cdclk,
|
||||
};
|
||||
|
||||
static struct intel_cdclk_funcs g33_cdclk_funcs = {
|
||||
static const struct intel_cdclk_funcs g33_cdclk_funcs = {
|
||||
.get_cdclk = g33_get_cdclk,
|
||||
.bw_calc_min_cdclk = intel_bw_calc_min_cdclk,
|
||||
.modeset_calc_cdclk = fixed_modeset_calc_cdclk,
|
||||
};
|
||||
|
||||
static struct intel_cdclk_funcs i945gm_cdclk_funcs = {
|
||||
static const struct intel_cdclk_funcs i945gm_cdclk_funcs = {
|
||||
.get_cdclk = i945gm_get_cdclk,
|
||||
.bw_calc_min_cdclk = intel_bw_calc_min_cdclk,
|
||||
.modeset_calc_cdclk = fixed_modeset_calc_cdclk,
|
||||
@ -3000,37 +3000,37 @@ static struct intel_cdclk_funcs i945gm_cdclk_funcs = {
|
||||
|
||||
/* i945G uses fixed 400 */
|
||||
|
||||
static struct intel_cdclk_funcs i915gm_cdclk_funcs = {
|
||||
static const struct intel_cdclk_funcs i915gm_cdclk_funcs = {
|
||||
.get_cdclk = i915gm_get_cdclk,
|
||||
.bw_calc_min_cdclk = intel_bw_calc_min_cdclk,
|
||||
.modeset_calc_cdclk = fixed_modeset_calc_cdclk,
|
||||
};
|
||||
|
||||
static struct intel_cdclk_funcs i915g_cdclk_funcs = {
|
||||
static const struct intel_cdclk_funcs i915g_cdclk_funcs = {
|
||||
.get_cdclk = fixed_333mhz_get_cdclk,
|
||||
.bw_calc_min_cdclk = intel_bw_calc_min_cdclk,
|
||||
.modeset_calc_cdclk = fixed_modeset_calc_cdclk,
|
||||
};
|
||||
|
||||
static struct intel_cdclk_funcs i865g_cdclk_funcs = {
|
||||
static const struct intel_cdclk_funcs i865g_cdclk_funcs = {
|
||||
.get_cdclk = fixed_266mhz_get_cdclk,
|
||||
.bw_calc_min_cdclk = intel_bw_calc_min_cdclk,
|
||||
.modeset_calc_cdclk = fixed_modeset_calc_cdclk,
|
||||
};
|
||||
|
||||
static struct intel_cdclk_funcs i85x_cdclk_funcs = {
|
||||
static const struct intel_cdclk_funcs i85x_cdclk_funcs = {
|
||||
.get_cdclk = i85x_get_cdclk,
|
||||
.bw_calc_min_cdclk = intel_bw_calc_min_cdclk,
|
||||
.modeset_calc_cdclk = fixed_modeset_calc_cdclk,
|
||||
};
|
||||
|
||||
static struct intel_cdclk_funcs i845g_cdclk_funcs = {
|
||||
static const struct intel_cdclk_funcs i845g_cdclk_funcs = {
|
||||
.get_cdclk = fixed_200mhz_get_cdclk,
|
||||
.bw_calc_min_cdclk = intel_bw_calc_min_cdclk,
|
||||
.modeset_calc_cdclk = fixed_modeset_calc_cdclk,
|
||||
};
|
||||
|
||||
static struct intel_cdclk_funcs i830_cdclk_funcs = {
|
||||
static const struct intel_cdclk_funcs i830_cdclk_funcs = {
|
||||
.get_cdclk = fixed_133mhz_get_cdclk,
|
||||
.bw_calc_min_cdclk = intel_bw_calc_min_cdclk,
|
||||
.modeset_calc_cdclk = fixed_modeset_calc_cdclk,
|
||||
|
@ -4361,6 +4361,7 @@ static void intel_ddi_encoder_shutdown(struct intel_encoder *encoder)
|
||||
enum phy phy = intel_port_to_phy(i915, encoder->port);
|
||||
|
||||
intel_dp_encoder_shutdown(encoder);
|
||||
intel_hdmi_encoder_shutdown(encoder);
|
||||
|
||||
if (!intel_phy_is_tc(i915, phy))
|
||||
return;
|
||||
|
@ -848,9 +848,16 @@ unsigned int intel_remapped_info_size(const struct intel_remapped_info *rem_info
|
||||
int i;
|
||||
|
||||
for (i = 0 ; i < ARRAY_SIZE(rem_info->plane); i++) {
|
||||
unsigned int plane_size;
|
||||
|
||||
plane_size = rem_info->plane[i].dst_stride * rem_info->plane[i].height;
|
||||
if (plane_size == 0)
|
||||
continue;
|
||||
|
||||
if (rem_info->plane_alignment)
|
||||
size = ALIGN(size, rem_info->plane_alignment);
|
||||
size += rem_info->plane[i].dst_stride * rem_info->plane[i].height;
|
||||
|
||||
size += plane_size;
|
||||
}
|
||||
|
||||
return size;
|
||||
|
@ -120,6 +120,12 @@ bool intel_dp_is_uhbr(const struct intel_crtc_state *crtc_state)
|
||||
return crtc_state->port_clock >= 1000000;
|
||||
}
|
||||
|
||||
static void intel_dp_set_default_sink_rates(struct intel_dp *intel_dp)
|
||||
{
|
||||
intel_dp->sink_rates[0] = 162000;
|
||||
intel_dp->num_sink_rates = 1;
|
||||
}
|
||||
|
||||
/* update sink rates from dpcd */
|
||||
static void intel_dp_set_sink_rates(struct intel_dp *intel_dp)
|
||||
{
|
||||
@ -281,7 +287,7 @@ intel_dp_max_data_rate(int max_link_rate, int max_lanes)
|
||||
*/
|
||||
int max_link_rate_kbps = max_link_rate * 10;
|
||||
|
||||
max_link_rate_kbps = DIV_ROUND_CLOSEST_ULL(max_link_rate_kbps * 9671, 10000);
|
||||
max_link_rate_kbps = DIV_ROUND_CLOSEST_ULL(mul_u32_u32(max_link_rate_kbps, 9671), 10000);
|
||||
max_link_rate = max_link_rate_kbps / 8;
|
||||
}
|
||||
|
||||
@ -1858,6 +1864,12 @@ void intel_dp_set_link_params(struct intel_dp *intel_dp,
|
||||
intel_dp->lane_count = lane_count;
|
||||
}
|
||||
|
||||
static void intel_dp_reset_max_link_params(struct intel_dp *intel_dp)
|
||||
{
|
||||
intel_dp->max_link_lane_count = intel_dp_max_common_lane_count(intel_dp);
|
||||
intel_dp->max_link_rate = intel_dp_max_common_rate(intel_dp);
|
||||
}
|
||||
|
||||
/* Enable backlight PWM and backlight PP control. */
|
||||
void intel_edp_backlight_on(const struct intel_crtc_state *crtc_state,
|
||||
const struct drm_connector_state *conn_state)
|
||||
@ -2014,8 +2026,7 @@ void intel_dp_sync_state(struct intel_encoder *encoder,
|
||||
if (intel_dp->dpcd[DP_DPCD_REV] == 0)
|
||||
intel_dp_get_dpcd(intel_dp);
|
||||
|
||||
intel_dp->max_link_lane_count = intel_dp_max_common_lane_count(intel_dp);
|
||||
intel_dp->max_link_rate = intel_dp_max_common_rate(intel_dp);
|
||||
intel_dp_reset_max_link_params(intel_dp);
|
||||
}
|
||||
|
||||
bool intel_dp_initial_fastset_check(struct intel_encoder *encoder,
|
||||
@ -2553,6 +2564,9 @@ intel_edp_init_dpcd(struct intel_dp *intel_dp)
|
||||
*/
|
||||
intel_psr_init_dpcd(intel_dp);
|
||||
|
||||
/* Clear the default sink rates */
|
||||
intel_dp->num_sink_rates = 0;
|
||||
|
||||
/* Read the eDP 1.4+ supported link rates. */
|
||||
if (intel_dp->edp_dpcd[0] >= DP_EDP_14) {
|
||||
__le16 sink_rates[DP_MAX_SUPPORTED_RATES];
|
||||
@ -2588,6 +2602,7 @@ intel_edp_init_dpcd(struct intel_dp *intel_dp)
|
||||
intel_dp_set_sink_rates(intel_dp);
|
||||
|
||||
intel_dp_set_common_rates(intel_dp);
|
||||
intel_dp_reset_max_link_params(intel_dp);
|
||||
|
||||
/* Read the eDP DSC DPCD registers */
|
||||
if (DISPLAY_VER(dev_priv) >= 10)
|
||||
@ -4329,12 +4344,7 @@ intel_dp_detect(struct drm_connector *connector,
|
||||
* supports link training fallback params.
|
||||
*/
|
||||
if (intel_dp->reset_link_params || intel_dp->is_mst) {
|
||||
/* Initial max link lane count */
|
||||
intel_dp->max_link_lane_count = intel_dp_max_common_lane_count(intel_dp);
|
||||
|
||||
/* Initial max link rate */
|
||||
intel_dp->max_link_rate = intel_dp_max_common_rate(intel_dp);
|
||||
|
||||
intel_dp_reset_max_link_params(intel_dp);
|
||||
intel_dp->reset_link_params = false;
|
||||
}
|
||||
|
||||
@ -5000,6 +5010,9 @@ intel_dp_init_connector(struct intel_digital_port *dig_port,
|
||||
}
|
||||
|
||||
intel_dp_set_source_rates(intel_dp);
|
||||
intel_dp_set_default_sink_rates(intel_dp);
|
||||
intel_dp_set_common_rates(intel_dp);
|
||||
intel_dp_reset_max_link_params(intel_dp);
|
||||
|
||||
if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv))
|
||||
intel_dp->pps.active_pipe = vlv_active_pipe(intel_dp);
|
||||
|
@ -378,8 +378,8 @@ static void intel_fb_plane_dims(const struct intel_framebuffer *fb, int color_pl
|
||||
intel_fb_plane_get_subsampling(&main_hsub, &main_vsub, &fb->base, main_plane);
|
||||
intel_fb_plane_get_subsampling(&hsub, &vsub, &fb->base, color_plane);
|
||||
|
||||
*w = main_width / main_hsub / hsub;
|
||||
*h = main_height / main_vsub / vsub;
|
||||
*w = DIV_ROUND_UP(main_width, main_hsub * hsub);
|
||||
*h = DIV_ROUND_UP(main_height, main_vsub * vsub);
|
||||
}
|
||||
|
||||
static u32 intel_adjust_tile_offset(int *x, int *y,
|
||||
|
@ -1246,12 +1246,13 @@ static void hsw_set_infoframes(struct intel_encoder *encoder,
|
||||
void intel_dp_dual_mode_set_tmds_output(struct intel_hdmi *hdmi, bool enable)
|
||||
{
|
||||
struct drm_i915_private *dev_priv = intel_hdmi_to_i915(hdmi);
|
||||
struct i2c_adapter *adapter =
|
||||
intel_gmbus_get_adapter(dev_priv, hdmi->ddc_bus);
|
||||
struct i2c_adapter *adapter;
|
||||
|
||||
if (hdmi->dp_dual_mode.type < DRM_DP_DUAL_MODE_TYPE2_DVI)
|
||||
return;
|
||||
|
||||
adapter = intel_gmbus_get_adapter(dev_priv, hdmi->ddc_bus);
|
||||
|
||||
drm_dbg_kms(&dev_priv->drm, "%s DP dual mode adaptor TMDS output\n",
|
||||
enable ? "Enabling" : "Disabling");
|
||||
|
||||
@ -2258,6 +2259,17 @@ int intel_hdmi_compute_config(struct intel_encoder *encoder,
|
||||
return 0;
|
||||
}
|
||||
|
||||
void intel_hdmi_encoder_shutdown(struct intel_encoder *encoder)
|
||||
{
|
||||
struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(encoder);
|
||||
|
||||
/*
|
||||
* Give a hand to buggy BIOSen which forget to turn
|
||||
* the TMDS output buffers back on after a reboot.
|
||||
*/
|
||||
intel_dp_dual_mode_set_tmds_output(intel_hdmi, true);
|
||||
}
|
||||
|
||||
static void
|
||||
intel_hdmi_unset_edid(struct drm_connector *connector)
|
||||
{
|
||||
|
@ -28,6 +28,7 @@ void intel_hdmi_init_connector(struct intel_digital_port *dig_port,
|
||||
int intel_hdmi_compute_config(struct intel_encoder *encoder,
|
||||
struct intel_crtc_state *pipe_config,
|
||||
struct drm_connector_state *conn_state);
|
||||
void intel_hdmi_encoder_shutdown(struct intel_encoder *encoder);
|
||||
bool intel_hdmi_handle_sink_scrambling(struct intel_encoder *encoder,
|
||||
struct drm_connector *connector,
|
||||
bool high_tmds_clock_ratio,
|
||||
|
@ -12,6 +12,13 @@
|
||||
#include "i915_gem_object.h"
|
||||
#include "i915_scatterlist.h"
|
||||
|
||||
#if defined(CONFIG_X86)
|
||||
#include <asm/smp.h>
|
||||
#else
|
||||
#define wbinvd_on_all_cpus() \
|
||||
pr_warn(DRIVER_NAME ": Missing cache flush in %s\n", __func__)
|
||||
#endif
|
||||
|
||||
I915_SELFTEST_DECLARE(static bool force_different_devices;)
|
||||
|
||||
static struct drm_i915_gem_object *dma_buf_to_obj(struct dma_buf *buf)
|
||||
|
@ -1396,6 +1396,9 @@ remap_pages(struct drm_i915_gem_object *obj,
|
||||
{
|
||||
unsigned int row;
|
||||
|
||||
if (!width || !height)
|
||||
return sg;
|
||||
|
||||
if (alignment_pad) {
|
||||
st->nents++;
|
||||
|
||||
|
@ -2373,6 +2373,7 @@ static inline void guc_lrc_desc_unpin(struct intel_context *ce)
|
||||
unsigned long flags;
|
||||
bool disabled;
|
||||
|
||||
lockdep_assert_held(&guc->submission_state.lock);
|
||||
GEM_BUG_ON(!intel_gt_pm_is_awake(gt));
|
||||
GEM_BUG_ON(!lrc_desc_registered(guc, ce->guc_id.id));
|
||||
GEM_BUG_ON(ce != __get_context(guc, ce->guc_id.id));
|
||||
@ -2388,7 +2389,7 @@ static inline void guc_lrc_desc_unpin(struct intel_context *ce)
|
||||
}
|
||||
spin_unlock_irqrestore(&ce->guc_state.lock, flags);
|
||||
if (unlikely(disabled)) {
|
||||
release_guc_id(guc, ce);
|
||||
__release_guc_id(guc, ce);
|
||||
__guc_context_destroy(ce);
|
||||
return;
|
||||
}
|
||||
|
@ -794,7 +794,6 @@ DECLARE_EVENT_CLASS(i915_request,
|
||||
TP_STRUCT__entry(
|
||||
__field(u32, dev)
|
||||
__field(u64, ctx)
|
||||
__field(u32, guc_id)
|
||||
__field(u16, class)
|
||||
__field(u16, instance)
|
||||
__field(u32, seqno)
|
||||
@ -805,16 +804,14 @@ DECLARE_EVENT_CLASS(i915_request,
|
||||
__entry->dev = rq->engine->i915->drm.primary->index;
|
||||
__entry->class = rq->engine->uabi_class;
|
||||
__entry->instance = rq->engine->uabi_instance;
|
||||
__entry->guc_id = rq->context->guc_id.id;
|
||||
__entry->ctx = rq->fence.context;
|
||||
__entry->seqno = rq->fence.seqno;
|
||||
__entry->tail = rq->tail;
|
||||
),
|
||||
|
||||
TP_printk("dev=%u, engine=%u:%u, guc_id=%u, ctx=%llu, seqno=%u, tail=%u",
|
||||
TP_printk("dev=%u, engine=%u:%u, ctx=%llu, seqno=%u, tail=%u",
|
||||
__entry->dev, __entry->class, __entry->instance,
|
||||
__entry->guc_id, __entry->ctx, __entry->seqno,
|
||||
__entry->tail)
|
||||
__entry->ctx, __entry->seqno, __entry->tail)
|
||||
);
|
||||
|
||||
DEFINE_EVENT(i915_request, i915_request_add,
|
||||
|
Loading…
Reference in New Issue
Block a user