- Suspend fixes for Display (Jose)
- Properly block D3Cold for now (Anshuman) - Eliminate PIPECONF RMWs from .color_commit()(Ville) - Display info clean-up (Ville) - Fix error code (Dan) - Fix possible refcount leak on DP MST (Hangyu) - Other general display clean-ups (Jani, Tom) - Add bios debug logs (Jani) - PCH type clean-up (Ville) -----BEGIN PGP SIGNATURE----- iQEzBAABCAAdFiEEbSBwaO7dZQkcLOKj+mJfZA7rE8oFAmLGTOcACgkQ+mJfZA7r E8oF/AgAlttKWjOPrSjn6un6N+cSVrkxHtwhhtl/FooVUY9qpE8UlDd1RJhMZf/n W6aZ00Vawx2GbUUxZAhrgiGNbbB7aqaLVKCmKJTtoLyRDk4zSG63N3UhnFQu9lHh 10AC9Qx8/3RPnyAd5Zrdt6sN6pfPLy2u9rl9ld8GG6W0OYAsX9sUiJ1ztfNtCNbm 10BPNJZcRgMrtwkvZL/NPvS8C1sAGZUSGlNn8JALggVGHDg7xjljWU5LhdaInYJS tqfphxqLPeGWhW+YYdUKaDkn1IJCvWz9y/PkKl/p2+yavmTQN2byo+fPUKB3bl1A UI6Gr1+Lh2MlkCCOzfZ+TCVXHSSYiA== =NxQB -----END PGP SIGNATURE----- Merge tag 'drm-intel-next-2022-07-06' of git://anongit.freedesktop.org/drm/drm-intel into drm-next - Suspend fixes for Display (Jose) - Properly block D3Cold for now (Anshuman) - Eliminate PIPECONF RMWs from .color_commit()(Ville) - Display info clean-up (Ville) - Fix error code (Dan) - Fix possible refcount leak on DP MST (Hangyu) - Other general display clean-ups (Jani, Tom) - Add bios debug logs (Jani) - PCH type clean-up (Ville) Signed-off-by: Dave Airlie <airlied@redhat.com> From: Rodrigo Vivi <rodrigo.vivi@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/YsZNJUVh0iHOtORz@intel.com
This commit is contained in:
commit
6db5e0c869
@ -2670,8 +2670,6 @@ static void parse_ddi_port(struct intel_bios_encoder_data *devdata)
|
||||
|
||||
sanitize_device_type(devdata, port);
|
||||
|
||||
print_ddi_port(devdata, port);
|
||||
|
||||
if (intel_bios_encoder_supports_dvi(devdata))
|
||||
sanitize_ddc_pin(devdata, port);
|
||||
|
||||
@ -2689,12 +2687,18 @@ static bool has_ddi_port_info(struct drm_i915_private *i915)
|
||||
static void parse_ddi_ports(struct drm_i915_private *i915)
|
||||
{
|
||||
struct intel_bios_encoder_data *devdata;
|
||||
enum port port;
|
||||
|
||||
if (!has_ddi_port_info(i915))
|
||||
return;
|
||||
|
||||
list_for_each_entry(devdata, &i915->vbt.display_devices, node)
|
||||
parse_ddi_port(devdata);
|
||||
|
||||
for_each_port(port) {
|
||||
if (i915->vbt.ports[port])
|
||||
print_ddi_port(i915->vbt.ports[port], port);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -505,30 +505,19 @@ static void ilk_color_commit_noarm(const struct intel_crtc_state *crtc_state)
|
||||
|
||||
static void i9xx_color_commit_arm(const struct intel_crtc_state *crtc_state)
|
||||
{
|
||||
struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
|
||||
struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
|
||||
enum pipe pipe = crtc->pipe;
|
||||
u32 val;
|
||||
|
||||
val = intel_de_read(dev_priv, PIPECONF(pipe));
|
||||
val &= ~PIPECONF_GAMMA_MODE_MASK_I9XX;
|
||||
val |= PIPECONF_GAMMA_MODE(crtc_state->gamma_mode);
|
||||
intel_de_write(dev_priv, PIPECONF(pipe), val);
|
||||
/* update PIPECONF GAMMA_MODE */
|
||||
i9xx_set_pipeconf(crtc_state);
|
||||
}
|
||||
|
||||
static void ilk_color_commit_arm(const struct intel_crtc_state *crtc_state)
|
||||
{
|
||||
struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
|
||||
struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
|
||||
enum pipe pipe = crtc->pipe;
|
||||
u32 val;
|
||||
|
||||
val = intel_de_read(dev_priv, PIPECONF(pipe));
|
||||
val &= ~PIPECONF_GAMMA_MODE_MASK_ILK;
|
||||
val |= PIPECONF_GAMMA_MODE(crtc_state->gamma_mode);
|
||||
intel_de_write(dev_priv, PIPECONF(pipe), val);
|
||||
/* update PIPECONF GAMMA_MODE */
|
||||
ilk_set_pipeconf(crtc_state);
|
||||
|
||||
intel_de_write_fw(dev_priv, PIPE_CSC_MODE(pipe),
|
||||
intel_de_write_fw(dev_priv, PIPE_CSC_MODE(crtc->pipe),
|
||||
crtc_state->csc_mode);
|
||||
}
|
||||
|
||||
@ -852,7 +841,7 @@ static void glk_load_degamma_lut(const struct intel_crtc_state *crtc_state)
|
||||
struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
|
||||
struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
|
||||
enum pipe pipe = crtc->pipe;
|
||||
int i, lut_size = INTEL_INFO(dev_priv)->color.degamma_lut_size;
|
||||
int i, lut_size = INTEL_INFO(dev_priv)->display.color.degamma_lut_size;
|
||||
const struct drm_color_lut *lut = crtc_state->hw.degamma_lut->data;
|
||||
|
||||
/*
|
||||
@ -894,7 +883,7 @@ static void glk_load_degamma_lut_linear(const struct intel_crtc_state *crtc_stat
|
||||
struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
|
||||
struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
|
||||
enum pipe pipe = crtc->pipe;
|
||||
int i, lut_size = INTEL_INFO(dev_priv)->color.degamma_lut_size;
|
||||
int i, lut_size = INTEL_INFO(dev_priv)->display.color.degamma_lut_size;
|
||||
|
||||
/*
|
||||
* When setting the auto-increment bit, the hardware seems to
|
||||
@ -1346,10 +1335,10 @@ static int check_luts(const struct intel_crtc_state *crtc_state)
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
degamma_length = INTEL_INFO(dev_priv)->color.degamma_lut_size;
|
||||
gamma_length = INTEL_INFO(dev_priv)->color.gamma_lut_size;
|
||||
degamma_tests = INTEL_INFO(dev_priv)->color.degamma_lut_tests;
|
||||
gamma_tests = INTEL_INFO(dev_priv)->color.gamma_lut_tests;
|
||||
degamma_length = INTEL_INFO(dev_priv)->display.color.degamma_lut_size;
|
||||
gamma_length = INTEL_INFO(dev_priv)->display.color.gamma_lut_size;
|
||||
degamma_tests = INTEL_INFO(dev_priv)->display.color.degamma_lut_tests;
|
||||
gamma_tests = INTEL_INFO(dev_priv)->display.color.gamma_lut_tests;
|
||||
|
||||
if (check_lut_size(degamma_lut, degamma_length) ||
|
||||
check_lut_size(gamma_lut, gamma_length))
|
||||
@ -1885,7 +1874,7 @@ static void i9xx_read_luts(struct intel_crtc_state *crtc_state)
|
||||
static struct drm_property_blob *i965_read_lut_10p6(struct intel_crtc *crtc)
|
||||
{
|
||||
struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
|
||||
int i, lut_size = INTEL_INFO(dev_priv)->color.gamma_lut_size;
|
||||
int i, lut_size = INTEL_INFO(dev_priv)->display.color.gamma_lut_size;
|
||||
enum pipe pipe = crtc->pipe;
|
||||
struct drm_property_blob *blob;
|
||||
struct drm_color_lut *lut;
|
||||
@ -1928,7 +1917,7 @@ static void i965_read_luts(struct intel_crtc_state *crtc_state)
|
||||
static struct drm_property_blob *chv_read_cgm_gamma(struct intel_crtc *crtc)
|
||||
{
|
||||
struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
|
||||
int i, lut_size = INTEL_INFO(dev_priv)->color.gamma_lut_size;
|
||||
int i, lut_size = INTEL_INFO(dev_priv)->display.color.gamma_lut_size;
|
||||
enum pipe pipe = crtc->pipe;
|
||||
struct drm_property_blob *blob;
|
||||
struct drm_color_lut *lut;
|
||||
@ -1989,7 +1978,7 @@ static struct drm_property_blob *ilk_read_lut_8(struct intel_crtc *crtc)
|
||||
static struct drm_property_blob *ilk_read_lut_10(struct intel_crtc *crtc)
|
||||
{
|
||||
struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
|
||||
int i, lut_size = INTEL_INFO(dev_priv)->color.gamma_lut_size;
|
||||
int i, lut_size = INTEL_INFO(dev_priv)->display.color.gamma_lut_size;
|
||||
enum pipe pipe = crtc->pipe;
|
||||
struct drm_property_blob *blob;
|
||||
struct drm_color_lut *lut;
|
||||
@ -2040,7 +2029,7 @@ static struct drm_property_blob *bdw_read_lut_10(struct intel_crtc *crtc,
|
||||
{
|
||||
struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
|
||||
int i, hw_lut_size = ivb_lut_10_size(prec_index);
|
||||
int lut_size = INTEL_INFO(dev_priv)->color.gamma_lut_size;
|
||||
int lut_size = INTEL_INFO(dev_priv)->display.color.gamma_lut_size;
|
||||
enum pipe pipe = crtc->pipe;
|
||||
struct drm_property_blob *blob;
|
||||
struct drm_color_lut *lut;
|
||||
@ -2093,7 +2082,7 @@ static struct drm_property_blob *
|
||||
icl_read_lut_multi_segment(struct intel_crtc *crtc)
|
||||
{
|
||||
struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
|
||||
int i, lut_size = INTEL_INFO(dev_priv)->color.gamma_lut_size;
|
||||
int i, lut_size = INTEL_INFO(dev_priv)->display.color.gamma_lut_size;
|
||||
enum pipe pipe = crtc->pipe;
|
||||
struct drm_property_blob *blob;
|
||||
struct drm_color_lut *lut;
|
||||
@ -2230,7 +2219,7 @@ static const struct intel_color_funcs ilk_color_funcs = {
|
||||
void intel_color_init(struct intel_crtc *crtc)
|
||||
{
|
||||
struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
|
||||
bool has_ctm = INTEL_INFO(dev_priv)->color.degamma_lut_size != 0;
|
||||
bool has_ctm = INTEL_INFO(dev_priv)->display.color.degamma_lut_size != 0;
|
||||
|
||||
drm_mode_crtc_set_gamma_size(&crtc->base, 256);
|
||||
|
||||
@ -2261,7 +2250,7 @@ void intel_color_init(struct intel_crtc *crtc)
|
||||
}
|
||||
|
||||
drm_crtc_enable_color_mgmt(&crtc->base,
|
||||
INTEL_INFO(dev_priv)->color.degamma_lut_size,
|
||||
INTEL_INFO(dev_priv)->display.color.degamma_lut_size,
|
||||
has_ctm,
|
||||
INTEL_INFO(dev_priv)->color.gamma_lut_size);
|
||||
INTEL_INFO(dev_priv)->display.color.gamma_lut_size);
|
||||
}
|
||||
|
@ -4179,7 +4179,7 @@ static enum hpd_pin ehl_hpd_pin(struct drm_i915_private *dev_priv,
|
||||
if (port == PORT_D)
|
||||
return HPD_PORT_A;
|
||||
|
||||
if (HAS_PCH_MCC(dev_priv))
|
||||
if (HAS_PCH_TGP(dev_priv))
|
||||
return icl_hpd_pin(dev_priv, port);
|
||||
|
||||
return HPD_PORT_A + port - PORT_A;
|
||||
|
@ -126,8 +126,6 @@
|
||||
|
||||
static void intel_set_transcoder_timings(const struct intel_crtc_state *crtc_state);
|
||||
static void intel_set_pipe_src_size(const struct intel_crtc_state *crtc_state);
|
||||
static void i9xx_set_pipeconf(const struct intel_crtc_state *crtc_state);
|
||||
static void ilk_set_pipeconf(const struct intel_crtc_state *crtc_state);
|
||||
static void hsw_set_transconf(const struct intel_crtc_state *crtc_state);
|
||||
static void bdw_set_pipemisc(const struct intel_crtc_state *crtc_state);
|
||||
static void ilk_pfit_enable(const struct intel_crtc_state *crtc_state);
|
||||
@ -3015,14 +3013,18 @@ static void intel_get_pipe_src_size(struct intel_crtc *crtc,
|
||||
intel_bigjoiner_adjust_pipe_src(pipe_config);
|
||||
}
|
||||
|
||||
static void i9xx_set_pipeconf(const struct intel_crtc_state *crtc_state)
|
||||
void i9xx_set_pipeconf(const struct intel_crtc_state *crtc_state)
|
||||
{
|
||||
struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
|
||||
struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
|
||||
u32 pipeconf = 0;
|
||||
|
||||
/* we keep both pipes enabled on 830 */
|
||||
if (IS_I830(dev_priv))
|
||||
/*
|
||||
* - We keep both pipes enabled on 830
|
||||
* - During modeset the pipe is still disabled and must remain so
|
||||
* - During fastset the pipe is already enabled and must remain so
|
||||
*/
|
||||
if (IS_I830(dev_priv) || !intel_crtc_needs_modeset(crtc_state))
|
||||
pipeconf |= PIPECONF_ENABLE;
|
||||
|
||||
if (crtc_state->double_wide)
|
||||
@ -3335,14 +3337,19 @@ out:
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void ilk_set_pipeconf(const struct intel_crtc_state *crtc_state)
|
||||
void ilk_set_pipeconf(const struct intel_crtc_state *crtc_state)
|
||||
{
|
||||
struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
|
||||
struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
|
||||
enum pipe pipe = crtc->pipe;
|
||||
u32 val;
|
||||
u32 val = 0;
|
||||
|
||||
val = 0;
|
||||
/*
|
||||
* - During modeset the pipe is still disabled and must remain so
|
||||
* - During fastset the pipe is already enabled and must remain so
|
||||
*/
|
||||
if (!intel_crtc_needs_modeset(crtc_state))
|
||||
val |= PIPECONF_ENABLE;
|
||||
|
||||
switch (crtc_state->pipe_bpp) {
|
||||
default:
|
||||
@ -3401,6 +3408,13 @@ static void hsw_set_transconf(const struct intel_crtc_state *crtc_state)
|
||||
enum transcoder cpu_transcoder = crtc_state->cpu_transcoder;
|
||||
u32 val = 0;
|
||||
|
||||
/*
|
||||
* - During modeset the pipe is still disabled and must remain so
|
||||
* - During fastset the pipe is already enabled and must remain so
|
||||
*/
|
||||
if (!intel_crtc_needs_modeset(crtc_state))
|
||||
val |= PIPECONF_ENABLE;
|
||||
|
||||
if (IS_HASWELL(dev_priv) && crtc_state->dither)
|
||||
val |= PIPECONF_DITHER_EN | PIPECONF_DITHER_TYPE_SP;
|
||||
|
||||
|
@ -193,7 +193,7 @@ enum plane_id {
|
||||
|
||||
#define for_each_dbuf_slice(__dev_priv, __slice) \
|
||||
for ((__slice) = DBUF_S1; (__slice) < I915_MAX_DBUF_SLICES; (__slice)++) \
|
||||
for_each_if(INTEL_INFO(__dev_priv)->dbuf.slice_mask & BIT(__slice))
|
||||
for_each_if(INTEL_INFO(__dev_priv)->display.dbuf.slice_mask & BIT(__slice))
|
||||
|
||||
#define for_each_dbuf_slice_in_mask(__dev_priv, __slice, __mask) \
|
||||
for_each_dbuf_slice((__dev_priv), (__slice)) \
|
||||
@ -567,6 +567,8 @@ bool intel_pipe_config_compare(const struct intel_crtc_state *current_config,
|
||||
void intel_crtc_update_active_timings(const struct intel_crtc_state *crtc_state);
|
||||
|
||||
void intel_plane_destroy(struct drm_plane *plane);
|
||||
void i9xx_set_pipeconf(const struct intel_crtc_state *crtc_state);
|
||||
void ilk_set_pipeconf(const struct intel_crtc_state *crtc_state);
|
||||
void intel_enable_transcoder(const struct intel_crtc_state *new_crtc_state);
|
||||
void intel_disable_transcoder(const struct intel_crtc_state *old_crtc_state);
|
||||
void i830_enable_pipe(struct drm_i915_private *dev_priv, enum pipe pipe);
|
||||
|
@ -1038,7 +1038,7 @@ void gen9_dbuf_slices_update(struct drm_i915_private *dev_priv,
|
||||
u8 req_slices)
|
||||
{
|
||||
struct i915_power_domains *power_domains = &dev_priv->power_domains;
|
||||
u8 slice_mask = INTEL_INFO(dev_priv)->dbuf.slice_mask;
|
||||
u8 slice_mask = INTEL_INFO(dev_priv)->display.dbuf.slice_mask;
|
||||
enum dbuf_slice slice;
|
||||
|
||||
drm_WARN(&dev_priv->drm, req_slices & ~slice_mask,
|
||||
@ -1608,7 +1608,7 @@ static void icl_display_core_init(struct drm_i915_private *dev_priv,
|
||||
gen9_set_dc_state(dev_priv, DC_STATE_DISABLE);
|
||||
|
||||
/* Wa_14011294188:ehl,jsl,tgl,rkl,adl-s */
|
||||
if (INTEL_PCH_TYPE(dev_priv) >= PCH_JSP &&
|
||||
if (INTEL_PCH_TYPE(dev_priv) >= PCH_TGP &&
|
||||
INTEL_PCH_TYPE(dev_priv) < PCH_DG1)
|
||||
intel_de_rmw(dev_priv, SOUTH_DSPCLK_GATE_D, 0,
|
||||
PCH_DPMGUNIT_CLOCK_GATE_DISABLE);
|
||||
|
@ -839,6 +839,7 @@ static struct drm_connector *intel_dp_add_mst_connector(struct drm_dp_mst_topolo
|
||||
ret = drm_connector_init(dev, connector, &intel_dp_mst_connector_funcs,
|
||||
DRM_MODE_CONNECTOR_DisplayPort);
|
||||
if (ret) {
|
||||
drm_dp_mst_put_port_malloc(port);
|
||||
intel_connector_free(intel_connector);
|
||||
return NULL;
|
||||
}
|
||||
|
@ -3184,7 +3184,7 @@ static int icl_compute_combo_phy_dpll(struct intel_atomic_state *state,
|
||||
struct icl_port_dpll *port_dpll =
|
||||
&crtc_state->icl_port_dplls[ICL_PORT_DPLL_DEFAULT];
|
||||
struct skl_wrpll_params pll_params = {};
|
||||
bool ret;
|
||||
int ret;
|
||||
|
||||
if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI) ||
|
||||
intel_crtc_has_type(crtc_state, INTEL_OUTPUT_DSI))
|
||||
|
@ -2852,7 +2852,7 @@ static u8 intel_hdmi_ddc_pin(struct intel_encoder *encoder)
|
||||
ddc_pin = rkl_port_to_ddc_pin(dev_priv, port);
|
||||
else if (DISPLAY_VER(dev_priv) == 9 && HAS_PCH_TGP(dev_priv))
|
||||
ddc_pin = gen9bc_tgp_port_to_ddc_pin(dev_priv, port);
|
||||
else if (HAS_PCH_MCC(dev_priv))
|
||||
else if (IS_JSL_EHL(dev_priv) && HAS_PCH_TGP(dev_priv))
|
||||
ddc_pin = mcc_port_to_ddc_pin(dev_priv, port);
|
||||
else if (INTEL_PCH_TYPE(dev_priv) >= PCH_ICP)
|
||||
ddc_pin = icl_port_to_ddc_pin(dev_priv, port);
|
||||
|
@ -555,7 +555,7 @@ static void hsw_activate_psr2(struct intel_dp *intel_dp)
|
||||
/*
|
||||
* TODO: 7 lines of IO_BUFFER_WAKE and FAST_WAKE are default
|
||||
* values from BSpec. In order to setting an optimal power
|
||||
* consumption, lower than 4k resoluition mode needs to decrese
|
||||
* consumption, lower than 4k resolution mode needs to decrease
|
||||
* IO_BUFFER_WAKE and FAST_WAKE. And higher than 4K resolution
|
||||
* mode needs to increase IO_BUFFER_WAKE and FAST_WAKE.
|
||||
*/
|
||||
@ -959,7 +959,7 @@ void intel_psr_compute_config(struct intel_dp *intel_dp,
|
||||
int psr_setup_time;
|
||||
|
||||
/*
|
||||
* Current PSR panels dont work reliably with VRR enabled
|
||||
* Current PSR panels don't work reliably with VRR enabled
|
||||
* So if VRR is enabled, do not enable PSR.
|
||||
*/
|
||||
if (crtc_state->vrr.enable)
|
||||
@ -1664,7 +1664,7 @@ static void intel_psr2_sel_fetch_pipe_alignment(const struct intel_crtc_state *c
|
||||
*
|
||||
* Plane scaling and rotation is not supported by selective fetch and both
|
||||
* properties can change without a modeset, so need to be check at every
|
||||
* atomic commmit.
|
||||
* atomic commit.
|
||||
*/
|
||||
static bool psr2_sel_fetch_plane_state_supported(const struct intel_plane_state *plane_state)
|
||||
{
|
||||
@ -2203,7 +2203,7 @@ static void _psr_invalidate_handle(struct intel_dp *intel_dp)
|
||||
}
|
||||
|
||||
/**
|
||||
* intel_psr_invalidate - Invalidade PSR
|
||||
* intel_psr_invalidate - Invalidate PSR
|
||||
* @dev_priv: i915 device
|
||||
* @frontbuffer_bits: frontbuffer plane tracking bits
|
||||
* @origin: which operation caused the invalidate
|
||||
|
@ -549,6 +549,7 @@ static int i915_pcode_init(struct drm_i915_private *i915)
|
||||
static int i915_driver_hw_probe(struct drm_i915_private *dev_priv)
|
||||
{
|
||||
struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev);
|
||||
struct pci_dev *root_pdev;
|
||||
int ret;
|
||||
|
||||
if (i915_inject_probe_failure(dev_priv))
|
||||
@ -660,6 +661,15 @@ static int i915_driver_hw_probe(struct drm_i915_private *dev_priv)
|
||||
|
||||
intel_bw_init_hw(dev_priv);
|
||||
|
||||
/*
|
||||
* FIXME: Temporary hammer to avoid freezing the machine on our DGFX
|
||||
* This should be totally removed when we handle the pci states properly
|
||||
* on runtime PM and on s2idle cases.
|
||||
*/
|
||||
root_pdev = pcie_find_root_port(pdev);
|
||||
if (root_pdev)
|
||||
pci_d3cold_disable(root_pdev);
|
||||
|
||||
return 0;
|
||||
|
||||
err_msi:
|
||||
@ -683,11 +693,16 @@ err_perf:
|
||||
static void i915_driver_hw_remove(struct drm_i915_private *dev_priv)
|
||||
{
|
||||
struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev);
|
||||
struct pci_dev *root_pdev;
|
||||
|
||||
i915_perf_fini(dev_priv);
|
||||
|
||||
if (pdev->msi_enabled)
|
||||
pci_disable_msi(pdev);
|
||||
|
||||
root_pdev = pcie_find_root_port(pdev);
|
||||
if (root_pdev)
|
||||
pci_d3cold_enable(root_pdev);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -832,8 +847,6 @@ i915_driver_create(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||
*/
|
||||
int i915_driver_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||
{
|
||||
const struct intel_device_info *match_info =
|
||||
(struct intel_device_info *)ent->driver_data;
|
||||
struct drm_i915_private *i915;
|
||||
int ret;
|
||||
|
||||
@ -842,7 +855,7 @@ int i915_driver_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||
return PTR_ERR(i915);
|
||||
|
||||
/* Disable nuclear pageflip by default on pre-ILK */
|
||||
if (!i915->params.nuclear_pageflip && match_info->graphics.ver < 5)
|
||||
if (!i915->params.nuclear_pageflip && DISPLAY_VER(i915) < 5)
|
||||
i915->drm.driver_features &= ~DRIVER_ATOMIC;
|
||||
|
||||
ret = pci_enable_device(pdev);
|
||||
@ -1070,8 +1083,6 @@ void i915_driver_shutdown(struct drm_i915_private *i915)
|
||||
intel_runtime_pm_disable(&i915->runtime_pm);
|
||||
intel_power_domains_disable(i915);
|
||||
|
||||
i915_gem_suspend(i915);
|
||||
|
||||
if (HAS_DISPLAY(i915)) {
|
||||
drm_kms_helper_poll_disable(&i915->drm);
|
||||
|
||||
@ -1088,6 +1099,8 @@ void i915_driver_shutdown(struct drm_i915_private *i915)
|
||||
|
||||
intel_dmc_ucode_suspend(i915);
|
||||
|
||||
i915_gem_suspend(i915);
|
||||
|
||||
/*
|
||||
* The only requirement is to reboot with display DC states disabled,
|
||||
* for now leaving all display power wells in the INIT power domain
|
||||
@ -1171,6 +1184,8 @@ static int i915_drm_suspend(struct drm_device *dev)
|
||||
|
||||
enable_rpm_wakeref_asserts(&dev_priv->runtime_pm);
|
||||
|
||||
i915_gem_drain_freed_objects(dev_priv);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -1212,14 +1227,6 @@ static int i915_drm_suspend_late(struct drm_device *dev, bool hibernation)
|
||||
goto out;
|
||||
}
|
||||
|
||||
/*
|
||||
* FIXME: Temporary hammer to avoid freezing the machine on our DGFX
|
||||
* This should be totally removed when we handle the pci states properly
|
||||
* on runtime PM and on s2idle cases.
|
||||
*/
|
||||
if (suspend_to_idle(dev_priv))
|
||||
pci_d3cold_disable(pdev);
|
||||
|
||||
pci_disable_device(pdev);
|
||||
/*
|
||||
* During hibernation on some platforms the BIOS may try to access
|
||||
@ -1384,8 +1391,6 @@ static int i915_drm_resume_early(struct drm_device *dev)
|
||||
|
||||
pci_set_master(pdev);
|
||||
|
||||
pci_d3cold_enable(pdev);
|
||||
|
||||
disable_rpm_wakeref_asserts(&dev_priv->runtime_pm);
|
||||
|
||||
ret = vlv_resume_prepare(dev_priv, false);
|
||||
@ -1575,7 +1580,6 @@ static int intel_runtime_suspend(struct device *kdev)
|
||||
{
|
||||
struct drm_i915_private *dev_priv = kdev_to_i915(kdev);
|
||||
struct intel_runtime_pm *rpm = &dev_priv->runtime_pm;
|
||||
struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev);
|
||||
int ret;
|
||||
|
||||
if (drm_WARN_ON_ONCE(&dev_priv->drm, !HAS_RUNTIME_PM(dev_priv)))
|
||||
@ -1621,12 +1625,6 @@ static int intel_runtime_suspend(struct device *kdev)
|
||||
drm_err(&dev_priv->drm,
|
||||
"Unclaimed access detected prior to suspending\n");
|
||||
|
||||
/*
|
||||
* FIXME: Temporary hammer to avoid freezing the machine on our DGFX
|
||||
* This should be totally removed when we handle the pci states properly
|
||||
* on runtime PM and on s2idle cases.
|
||||
*/
|
||||
pci_d3cold_disable(pdev);
|
||||
rpm->suspended = true;
|
||||
|
||||
/*
|
||||
@ -1665,7 +1663,6 @@ static int intel_runtime_resume(struct device *kdev)
|
||||
{
|
||||
struct drm_i915_private *dev_priv = kdev_to_i915(kdev);
|
||||
struct intel_runtime_pm *rpm = &dev_priv->runtime_pm;
|
||||
struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev);
|
||||
int ret;
|
||||
|
||||
if (drm_WARN_ON_ONCE(&dev_priv->drm, !HAS_RUNTIME_PM(dev_priv)))
|
||||
@ -1678,7 +1675,6 @@ static int intel_runtime_resume(struct device *kdev)
|
||||
|
||||
intel_opregion_notify_adapter(dev_priv, PCI_D0);
|
||||
rpm->suspended = false;
|
||||
pci_d3cold_enable(pdev);
|
||||
if (intel_uncore_unclaimed_mmio(&dev_priv->uncore))
|
||||
drm_dbg(&dev_priv->drm,
|
||||
"Unclaimed access during suspend, bios?\n");
|
||||
|
@ -38,43 +38,43 @@
|
||||
.display.ver = (x)
|
||||
|
||||
#define I845_PIPE_OFFSETS \
|
||||
.pipe_offsets = { \
|
||||
.display.pipe_offsets = { \
|
||||
[TRANSCODER_A] = PIPE_A_OFFSET, \
|
||||
}, \
|
||||
.trans_offsets = { \
|
||||
.display.trans_offsets = { \
|
||||
[TRANSCODER_A] = TRANSCODER_A_OFFSET, \
|
||||
}
|
||||
|
||||
#define I9XX_PIPE_OFFSETS \
|
||||
.pipe_offsets = { \
|
||||
.display.pipe_offsets = { \
|
||||
[TRANSCODER_A] = PIPE_A_OFFSET, \
|
||||
[TRANSCODER_B] = PIPE_B_OFFSET, \
|
||||
}, \
|
||||
.trans_offsets = { \
|
||||
.display.trans_offsets = { \
|
||||
[TRANSCODER_A] = TRANSCODER_A_OFFSET, \
|
||||
[TRANSCODER_B] = TRANSCODER_B_OFFSET, \
|
||||
}
|
||||
|
||||
#define IVB_PIPE_OFFSETS \
|
||||
.pipe_offsets = { \
|
||||
.display.pipe_offsets = { \
|
||||
[TRANSCODER_A] = PIPE_A_OFFSET, \
|
||||
[TRANSCODER_B] = PIPE_B_OFFSET, \
|
||||
[TRANSCODER_C] = PIPE_C_OFFSET, \
|
||||
}, \
|
||||
.trans_offsets = { \
|
||||
.display.trans_offsets = { \
|
||||
[TRANSCODER_A] = TRANSCODER_A_OFFSET, \
|
||||
[TRANSCODER_B] = TRANSCODER_B_OFFSET, \
|
||||
[TRANSCODER_C] = TRANSCODER_C_OFFSET, \
|
||||
}
|
||||
|
||||
#define HSW_PIPE_OFFSETS \
|
||||
.pipe_offsets = { \
|
||||
.display.pipe_offsets = { \
|
||||
[TRANSCODER_A] = PIPE_A_OFFSET, \
|
||||
[TRANSCODER_B] = PIPE_B_OFFSET, \
|
||||
[TRANSCODER_C] = PIPE_C_OFFSET, \
|
||||
[TRANSCODER_EDP] = PIPE_EDP_OFFSET, \
|
||||
}, \
|
||||
.trans_offsets = { \
|
||||
.display.trans_offsets = { \
|
||||
[TRANSCODER_A] = TRANSCODER_A_OFFSET, \
|
||||
[TRANSCODER_B] = TRANSCODER_B_OFFSET, \
|
||||
[TRANSCODER_C] = TRANSCODER_C_OFFSET, \
|
||||
@ -82,44 +82,44 @@
|
||||
}
|
||||
|
||||
#define CHV_PIPE_OFFSETS \
|
||||
.pipe_offsets = { \
|
||||
.display.pipe_offsets = { \
|
||||
[TRANSCODER_A] = PIPE_A_OFFSET, \
|
||||
[TRANSCODER_B] = PIPE_B_OFFSET, \
|
||||
[TRANSCODER_C] = CHV_PIPE_C_OFFSET, \
|
||||
}, \
|
||||
.trans_offsets = { \
|
||||
.display.trans_offsets = { \
|
||||
[TRANSCODER_A] = TRANSCODER_A_OFFSET, \
|
||||
[TRANSCODER_B] = TRANSCODER_B_OFFSET, \
|
||||
[TRANSCODER_C] = CHV_TRANSCODER_C_OFFSET, \
|
||||
}
|
||||
|
||||
#define I845_CURSOR_OFFSETS \
|
||||
.cursor_offsets = { \
|
||||
.display.cursor_offsets = { \
|
||||
[PIPE_A] = CURSOR_A_OFFSET, \
|
||||
}
|
||||
|
||||
#define I9XX_CURSOR_OFFSETS \
|
||||
.cursor_offsets = { \
|
||||
.display.cursor_offsets = { \
|
||||
[PIPE_A] = CURSOR_A_OFFSET, \
|
||||
[PIPE_B] = CURSOR_B_OFFSET, \
|
||||
}
|
||||
|
||||
#define CHV_CURSOR_OFFSETS \
|
||||
.cursor_offsets = { \
|
||||
.display.cursor_offsets = { \
|
||||
[PIPE_A] = CURSOR_A_OFFSET, \
|
||||
[PIPE_B] = CURSOR_B_OFFSET, \
|
||||
[PIPE_C] = CHV_CURSOR_C_OFFSET, \
|
||||
}
|
||||
|
||||
#define IVB_CURSOR_OFFSETS \
|
||||
.cursor_offsets = { \
|
||||
.display.cursor_offsets = { \
|
||||
[PIPE_A] = CURSOR_A_OFFSET, \
|
||||
[PIPE_B] = IVB_CURSOR_B_OFFSET, \
|
||||
[PIPE_C] = IVB_CURSOR_C_OFFSET, \
|
||||
}
|
||||
|
||||
#define TGL_CURSOR_OFFSETS \
|
||||
.cursor_offsets = { \
|
||||
.display.cursor_offsets = { \
|
||||
[PIPE_A] = CURSOR_A_OFFSET, \
|
||||
[PIPE_B] = IVB_CURSOR_B_OFFSET, \
|
||||
[PIPE_C] = IVB_CURSOR_C_OFFSET, \
|
||||
@ -127,30 +127,33 @@
|
||||
}
|
||||
|
||||
#define I9XX_COLORS \
|
||||
.color = { .gamma_lut_size = 256 }
|
||||
.display.color = { .gamma_lut_size = 256 }
|
||||
#define I965_COLORS \
|
||||
.color = { .gamma_lut_size = 129, \
|
||||
.display.color = { .gamma_lut_size = 129, \
|
||||
.gamma_lut_tests = DRM_COLOR_LUT_NON_DECREASING, \
|
||||
}
|
||||
#define ILK_COLORS \
|
||||
.color = { .gamma_lut_size = 1024 }
|
||||
.display.color = { .gamma_lut_size = 1024 }
|
||||
#define IVB_COLORS \
|
||||
.color = { .degamma_lut_size = 1024, .gamma_lut_size = 1024 }
|
||||
.display.color = { .degamma_lut_size = 1024, .gamma_lut_size = 1024 }
|
||||
#define CHV_COLORS \
|
||||
.color = { .degamma_lut_size = 65, .gamma_lut_size = 257, \
|
||||
.degamma_lut_tests = DRM_COLOR_LUT_NON_DECREASING, \
|
||||
.gamma_lut_tests = DRM_COLOR_LUT_NON_DECREASING, \
|
||||
.display.color = { \
|
||||
.degamma_lut_size = 65, .gamma_lut_size = 257, \
|
||||
.degamma_lut_tests = DRM_COLOR_LUT_NON_DECREASING, \
|
||||
.gamma_lut_tests = DRM_COLOR_LUT_NON_DECREASING, \
|
||||
}
|
||||
#define GLK_COLORS \
|
||||
.color = { .degamma_lut_size = 33, .gamma_lut_size = 1024, \
|
||||
.degamma_lut_tests = DRM_COLOR_LUT_NON_DECREASING | \
|
||||
DRM_COLOR_LUT_EQUAL_CHANNELS, \
|
||||
.display.color = { \
|
||||
.degamma_lut_size = 33, .gamma_lut_size = 1024, \
|
||||
.degamma_lut_tests = DRM_COLOR_LUT_NON_DECREASING | \
|
||||
DRM_COLOR_LUT_EQUAL_CHANNELS, \
|
||||
}
|
||||
#define ICL_COLORS \
|
||||
.color = { .degamma_lut_size = 33, .gamma_lut_size = 262145, \
|
||||
.degamma_lut_tests = DRM_COLOR_LUT_NON_DECREASING | \
|
||||
DRM_COLOR_LUT_EQUAL_CHANNELS, \
|
||||
.gamma_lut_tests = DRM_COLOR_LUT_NON_DECREASING, \
|
||||
.display.color = { \
|
||||
.degamma_lut_size = 33, .gamma_lut_size = 262145, \
|
||||
.degamma_lut_tests = DRM_COLOR_LUT_NON_DECREASING | \
|
||||
DRM_COLOR_LUT_EQUAL_CHANNELS, \
|
||||
.gamma_lut_tests = DRM_COLOR_LUT_NON_DECREASING, \
|
||||
}
|
||||
|
||||
/* Keep in gen based order, and chronological order within a gen */
|
||||
@ -536,7 +539,7 @@ static const struct intel_device_info vlv_info = {
|
||||
.has_snoop = true,
|
||||
.has_coherent_ggtt = false,
|
||||
.platform_engine_mask = BIT(RCS0) | BIT(VCS0) | BIT(BCS0),
|
||||
.display_mmio_offset = VLV_DISPLAY_BASE,
|
||||
.display.mmio_offset = VLV_DISPLAY_BASE,
|
||||
I9XX_PIPE_OFFSETS,
|
||||
I9XX_CURSOR_OFFSETS,
|
||||
I965_COLORS,
|
||||
@ -634,7 +637,7 @@ static const struct intel_device_info chv_info = {
|
||||
.has_reset_engine = 1,
|
||||
.has_snoop = true,
|
||||
.has_coherent_ggtt = false,
|
||||
.display_mmio_offset = VLV_DISPLAY_BASE,
|
||||
.display.mmio_offset = VLV_DISPLAY_BASE,
|
||||
CHV_PIPE_OFFSETS,
|
||||
CHV_CURSOR_OFFSETS,
|
||||
CHV_COLORS,
|
||||
@ -656,8 +659,8 @@ static const struct intel_device_info chv_info = {
|
||||
.display.has_ipc = 1, \
|
||||
.display.has_psr = 1, \
|
||||
.display.has_psr_hw_tracking = 1, \
|
||||
.dbuf.size = 896 - 4, /* 4 blocks for bypass path allocation */ \
|
||||
.dbuf.slice_mask = BIT(DBUF_S1)
|
||||
.display.dbuf.size = 896 - 4, /* 4 blocks for bypass path allocation */ \
|
||||
.display.dbuf.slice_mask = BIT(DBUF_S1)
|
||||
|
||||
#define SKL_PLATFORM \
|
||||
GEN9_FEATURES, \
|
||||
@ -692,7 +695,7 @@ static const struct intel_device_info skl_gt4_info = {
|
||||
#define GEN9_LP_FEATURES \
|
||||
GEN(9), \
|
||||
.is_lp = 1, \
|
||||
.dbuf.slice_mask = BIT(DBUF_S1), \
|
||||
.display.dbuf.slice_mask = BIT(DBUF_S1), \
|
||||
.display.has_hotplug = 1, \
|
||||
.platform_engine_mask = BIT(RCS0) | BIT(VCS0) | BIT(BCS0) | BIT(VECS0), \
|
||||
.display.pipe_mask = BIT(PIPE_A) | BIT(PIPE_B) | BIT(PIPE_C), \
|
||||
@ -730,14 +733,14 @@ static const struct intel_device_info skl_gt4_info = {
|
||||
static const struct intel_device_info bxt_info = {
|
||||
GEN9_LP_FEATURES,
|
||||
PLATFORM(INTEL_BROXTON),
|
||||
.dbuf.size = 512 - 4, /* 4 blocks for bypass path allocation */
|
||||
.display.dbuf.size = 512 - 4, /* 4 blocks for bypass path allocation */
|
||||
};
|
||||
|
||||
static const struct intel_device_info glk_info = {
|
||||
GEN9_LP_FEATURES,
|
||||
PLATFORM(INTEL_GEMINILAKE),
|
||||
.display.ver = 10,
|
||||
.dbuf.size = 1024 - 4, /* 4 blocks for bypass path allocation */
|
||||
.display.dbuf.size = 1024 - 4, /* 4 blocks for bypass path allocation */
|
||||
GLK_COLORS,
|
||||
};
|
||||
|
||||
@ -809,7 +812,7 @@ static const struct intel_device_info cml_gt2_info = {
|
||||
.display.cpu_transcoder_mask = BIT(TRANSCODER_A) | BIT(TRANSCODER_B) | \
|
||||
BIT(TRANSCODER_C) | BIT(TRANSCODER_EDP) | \
|
||||
BIT(TRANSCODER_DSI_0) | BIT(TRANSCODER_DSI_1), \
|
||||
.pipe_offsets = { \
|
||||
.display.pipe_offsets = { \
|
||||
[TRANSCODER_A] = PIPE_A_OFFSET, \
|
||||
[TRANSCODER_B] = PIPE_B_OFFSET, \
|
||||
[TRANSCODER_C] = PIPE_C_OFFSET, \
|
||||
@ -817,7 +820,7 @@ static const struct intel_device_info cml_gt2_info = {
|
||||
[TRANSCODER_DSI_0] = PIPE_DSI0_OFFSET, \
|
||||
[TRANSCODER_DSI_1] = PIPE_DSI1_OFFSET, \
|
||||
}, \
|
||||
.trans_offsets = { \
|
||||
.display.trans_offsets = { \
|
||||
[TRANSCODER_A] = TRANSCODER_A_OFFSET, \
|
||||
[TRANSCODER_B] = TRANSCODER_B_OFFSET, \
|
||||
[TRANSCODER_C] = TRANSCODER_C_OFFSET, \
|
||||
@ -827,8 +830,8 @@ static const struct intel_device_info cml_gt2_info = {
|
||||
}, \
|
||||
GEN(11), \
|
||||
ICL_COLORS, \
|
||||
.dbuf.size = 2048, \
|
||||
.dbuf.slice_mask = BIT(DBUF_S1) | BIT(DBUF_S2), \
|
||||
.display.dbuf.size = 2048, \
|
||||
.display.dbuf.slice_mask = BIT(DBUF_S1) | BIT(DBUF_S2), \
|
||||
.display.has_dsc = 1, \
|
||||
.has_coherent_ggtt = false, \
|
||||
.has_logical_ring_elsq = 1
|
||||
@ -862,7 +865,7 @@ static const struct intel_device_info jsl_info = {
|
||||
.display.cpu_transcoder_mask = BIT(TRANSCODER_A) | BIT(TRANSCODER_B) | \
|
||||
BIT(TRANSCODER_C) | BIT(TRANSCODER_D) | \
|
||||
BIT(TRANSCODER_DSI_0) | BIT(TRANSCODER_DSI_1), \
|
||||
.pipe_offsets = { \
|
||||
.display.pipe_offsets = { \
|
||||
[TRANSCODER_A] = PIPE_A_OFFSET, \
|
||||
[TRANSCODER_B] = PIPE_B_OFFSET, \
|
||||
[TRANSCODER_C] = PIPE_C_OFFSET, \
|
||||
@ -870,7 +873,7 @@ static const struct intel_device_info jsl_info = {
|
||||
[TRANSCODER_DSI_0] = PIPE_DSI0_OFFSET, \
|
||||
[TRANSCODER_DSI_1] = PIPE_DSI1_OFFSET, \
|
||||
}, \
|
||||
.trans_offsets = { \
|
||||
.display.trans_offsets = { \
|
||||
[TRANSCODER_A] = TRANSCODER_A_OFFSET, \
|
||||
[TRANSCODER_B] = TRANSCODER_B_OFFSET, \
|
||||
[TRANSCODER_C] = TRANSCODER_C_OFFSET, \
|
||||
@ -937,22 +940,15 @@ static const struct intel_device_info adl_s_info = {
|
||||
.dma_mask_size = 39,
|
||||
};
|
||||
|
||||
#define XE_LPD_CURSOR_OFFSETS \
|
||||
.cursor_offsets = { \
|
||||
[PIPE_A] = CURSOR_A_OFFSET, \
|
||||
[PIPE_B] = IVB_CURSOR_B_OFFSET, \
|
||||
[PIPE_C] = IVB_CURSOR_C_OFFSET, \
|
||||
[PIPE_D] = TGL_CURSOR_D_OFFSET, \
|
||||
}
|
||||
|
||||
#define XE_LPD_FEATURES \
|
||||
.display.abox_mask = GENMASK(1, 0), \
|
||||
.color = { .degamma_lut_size = 128, .gamma_lut_size = 1024, \
|
||||
.degamma_lut_tests = DRM_COLOR_LUT_NON_DECREASING | \
|
||||
DRM_COLOR_LUT_EQUAL_CHANNELS, \
|
||||
.display.color = { \
|
||||
.degamma_lut_size = 128, .gamma_lut_size = 1024, \
|
||||
.degamma_lut_tests = DRM_COLOR_LUT_NON_DECREASING | \
|
||||
DRM_COLOR_LUT_EQUAL_CHANNELS, \
|
||||
}, \
|
||||
.dbuf.size = 4096, \
|
||||
.dbuf.slice_mask = BIT(DBUF_S1) | BIT(DBUF_S2) | BIT(DBUF_S3) | \
|
||||
.display.dbuf.size = 4096, \
|
||||
.display.dbuf.slice_mask = BIT(DBUF_S1) | BIT(DBUF_S2) | BIT(DBUF_S3) | \
|
||||
BIT(DBUF_S4), \
|
||||
.display.has_ddi = 1, \
|
||||
.display.has_dmc = 1, \
|
||||
@ -967,7 +963,7 @@ static const struct intel_device_info adl_s_info = {
|
||||
.display.has_psr = 1, \
|
||||
.display.ver = 13, \
|
||||
.display.pipe_mask = BIT(PIPE_A) | BIT(PIPE_B) | BIT(PIPE_C) | BIT(PIPE_D), \
|
||||
.pipe_offsets = { \
|
||||
.display.pipe_offsets = { \
|
||||
[TRANSCODER_A] = PIPE_A_OFFSET, \
|
||||
[TRANSCODER_B] = PIPE_B_OFFSET, \
|
||||
[TRANSCODER_C] = PIPE_C_OFFSET, \
|
||||
@ -975,7 +971,7 @@ static const struct intel_device_info adl_s_info = {
|
||||
[TRANSCODER_DSI_0] = PIPE_DSI0_OFFSET, \
|
||||
[TRANSCODER_DSI_1] = PIPE_DSI1_OFFSET, \
|
||||
}, \
|
||||
.trans_offsets = { \
|
||||
.display.trans_offsets = { \
|
||||
[TRANSCODER_A] = TRANSCODER_A_OFFSET, \
|
||||
[TRANSCODER_B] = TRANSCODER_B_OFFSET, \
|
||||
[TRANSCODER_C] = TRANSCODER_C_OFFSET, \
|
||||
@ -983,7 +979,7 @@ static const struct intel_device_info adl_s_info = {
|
||||
[TRANSCODER_DSI_0] = TRANSCODER_DSI0_OFFSET, \
|
||||
[TRANSCODER_DSI_1] = TRANSCODER_DSI1_OFFSET, \
|
||||
}, \
|
||||
XE_LPD_CURSOR_OFFSETS
|
||||
TGL_CURSOR_OFFSETS
|
||||
|
||||
static const struct intel_device_info adl_p_info = {
|
||||
GEN12_FEATURES,
|
||||
|
@ -115,7 +115,7 @@
|
||||
* #define GEN8_BAR _MMIO(0xb888)
|
||||
*/
|
||||
|
||||
#define DISPLAY_MMIO_BASE(dev_priv) (INTEL_INFO(dev_priv)->display_mmio_offset)
|
||||
#define DISPLAY_MMIO_BASE(dev_priv) (INTEL_INFO(dev_priv)->display.mmio_offset)
|
||||
|
||||
/*
|
||||
* Given the first two numbers __a and __b of arbitrarily many evenly spaced
|
||||
@ -161,16 +161,15 @@
|
||||
* Device info offset array based helpers for groups of registers with unevenly
|
||||
* spaced base offsets.
|
||||
*/
|
||||
#define _MMIO_PIPE2(pipe, reg) _MMIO(INTEL_INFO(dev_priv)->pipe_offsets[pipe] - \
|
||||
INTEL_INFO(dev_priv)->pipe_offsets[PIPE_A] + (reg) + \
|
||||
DISPLAY_MMIO_BASE(dev_priv))
|
||||
#define _TRANS2(tran, reg) (INTEL_INFO(dev_priv)->trans_offsets[(tran)] - \
|
||||
INTEL_INFO(dev_priv)->trans_offsets[TRANSCODER_A] + (reg) + \
|
||||
DISPLAY_MMIO_BASE(dev_priv))
|
||||
#define _MMIO_TRANS2(tran, reg) _MMIO(_TRANS2(tran, reg))
|
||||
#define _CURSOR2(pipe, reg) _MMIO(INTEL_INFO(dev_priv)->cursor_offsets[(pipe)] - \
|
||||
INTEL_INFO(dev_priv)->cursor_offsets[PIPE_A] + (reg) + \
|
||||
DISPLAY_MMIO_BASE(dev_priv))
|
||||
#define _MMIO_PIPE2(pipe, reg) _MMIO(INTEL_INFO(dev_priv)->display.pipe_offsets[(pipe)] - \
|
||||
INTEL_INFO(dev_priv)->display.pipe_offsets[PIPE_A] + \
|
||||
DISPLAY_MMIO_BASE(dev_priv) + (reg))
|
||||
#define _MMIO_TRANS2(tran, reg) _MMIO(INTEL_INFO(dev_priv)->display.trans_offsets[(tran)] - \
|
||||
INTEL_INFO(dev_priv)->display.trans_offsets[TRANSCODER_A] + \
|
||||
DISPLAY_MMIO_BASE(dev_priv) + (reg))
|
||||
#define _MMIO_CURSOR2(pipe, reg) _MMIO(INTEL_INFO(dev_priv)->display.cursor_offsets[(pipe)] - \
|
||||
INTEL_INFO(dev_priv)->display.cursor_offsets[PIPE_A] + \
|
||||
DISPLAY_MMIO_BASE(dev_priv) + (reg))
|
||||
|
||||
#define __MASKED_FIELD(mask, value) ((mask) << 16 | (value))
|
||||
#define _MASKED_FIELD(mask, value) ({ \
|
||||
@ -2171,7 +2170,7 @@
|
||||
*/
|
||||
#define _SRD_CTL_A 0x60800
|
||||
#define _SRD_CTL_EDP 0x6f800
|
||||
#define EDP_PSR_CTL(tran) _MMIO(_TRANS2(tran, _SRD_CTL_A))
|
||||
#define EDP_PSR_CTL(tran) _MMIO_TRANS2(tran, _SRD_CTL_A)
|
||||
#define EDP_PSR_ENABLE (1 << 31)
|
||||
#define BDW_PSR_SINGLE_FRAME (1 << 30)
|
||||
#define EDP_PSR_RESTORE_PSR_ACTIVE_CTX_MASK (1 << 29) /* SW can't modify */
|
||||
@ -2217,11 +2216,11 @@
|
||||
|
||||
#define _SRD_AUX_DATA_A 0x60814
|
||||
#define _SRD_AUX_DATA_EDP 0x6f814
|
||||
#define EDP_PSR_AUX_DATA(tran, i) _MMIO(_TRANS2(tran, _SRD_AUX_DATA_A) + (i) + 4) /* 5 registers */
|
||||
#define EDP_PSR_AUX_DATA(tran, i) _MMIO_TRANS2(tran, _SRD_AUX_DATA_A + (i) + 4) /* 5 registers */
|
||||
|
||||
#define _SRD_STATUS_A 0x60840
|
||||
#define _SRD_STATUS_EDP 0x6f840
|
||||
#define EDP_PSR_STATUS(tran) _MMIO(_TRANS2(tran, _SRD_STATUS_A))
|
||||
#define EDP_PSR_STATUS(tran) _MMIO_TRANS2(tran, _SRD_STATUS_A)
|
||||
#define EDP_PSR_STATUS_STATE_MASK (7 << 29)
|
||||
#define EDP_PSR_STATUS_STATE_SHIFT 29
|
||||
#define EDP_PSR_STATUS_STATE_IDLE (0 << 29)
|
||||
@ -2248,13 +2247,13 @@
|
||||
|
||||
#define _SRD_PERF_CNT_A 0x60844
|
||||
#define _SRD_PERF_CNT_EDP 0x6f844
|
||||
#define EDP_PSR_PERF_CNT(tran) _MMIO(_TRANS2(tran, _SRD_PERF_CNT_A))
|
||||
#define EDP_PSR_PERF_CNT(tran) _MMIO_TRANS2(tran, _SRD_PERF_CNT_A)
|
||||
#define EDP_PSR_PERF_CNT_MASK 0xffffff
|
||||
|
||||
/* PSR_MASK on SKL+ */
|
||||
#define _SRD_DEBUG_A 0x60860
|
||||
#define _SRD_DEBUG_EDP 0x6f860
|
||||
#define EDP_PSR_DEBUG(tran) _MMIO(_TRANS2(tran, _SRD_DEBUG_A))
|
||||
#define EDP_PSR_DEBUG(tran) _MMIO_TRANS2(tran, _SRD_DEBUG_A)
|
||||
#define EDP_PSR_DEBUG_MASK_MAX_SLEEP (1 << 28)
|
||||
#define EDP_PSR_DEBUG_MASK_LPSP (1 << 27)
|
||||
#define EDP_PSR_DEBUG_MASK_MEMUP (1 << 26)
|
||||
@ -2329,7 +2328,7 @@
|
||||
|
||||
#define _PSR2_SU_STATUS_A 0x60914
|
||||
#define _PSR2_SU_STATUS_EDP 0x6f914
|
||||
#define _PSR2_SU_STATUS(tran, index) _MMIO(_TRANS2(tran, _PSR2_SU_STATUS_A) + (index) * 4)
|
||||
#define _PSR2_SU_STATUS(tran, index) _MMIO_TRANS2(tran, _PSR2_SU_STATUS_A + (index) * 4)
|
||||
#define PSR2_SU_STATUS(tran, frame) (_PSR2_SU_STATUS(tran, (frame) / 3))
|
||||
#define PSR2_SU_STATUS_SHIFT(frame) (((frame) % 3) * 10)
|
||||
#define PSR2_SU_STATUS_MASK(frame) (0x3ff << PSR2_SU_STATUS_SHIFT(frame))
|
||||
@ -4328,12 +4327,12 @@
|
||||
#define _CURBBASE_IVB 0x71084
|
||||
#define _CURBPOS_IVB 0x71088
|
||||
|
||||
#define CURCNTR(pipe) _CURSOR2(pipe, _CURACNTR)
|
||||
#define CURBASE(pipe) _CURSOR2(pipe, _CURABASE)
|
||||
#define CURPOS(pipe) _CURSOR2(pipe, _CURAPOS)
|
||||
#define CURSIZE(pipe) _CURSOR2(pipe, _CURASIZE)
|
||||
#define CUR_FBC_CTL(pipe) _CURSOR2(pipe, _CUR_FBC_CTL_A)
|
||||
#define CURSURFLIVE(pipe) _CURSOR2(pipe, _CURASURFLIVE)
|
||||
#define CURCNTR(pipe) _MMIO_CURSOR2(pipe, _CURACNTR)
|
||||
#define CURBASE(pipe) _MMIO_CURSOR2(pipe, _CURABASE)
|
||||
#define CURPOS(pipe) _MMIO_CURSOR2(pipe, _CURAPOS)
|
||||
#define CURSIZE(pipe) _MMIO_CURSOR2(pipe, _CURASIZE)
|
||||
#define CUR_FBC_CTL(pipe) _MMIO_CURSOR2(pipe, _CUR_FBC_CTL_A)
|
||||
#define CURSURFLIVE(pipe) _MMIO_CURSOR2(pipe, _CURASURFLIVE)
|
||||
|
||||
#define CURSOR_A_OFFSET 0x70080
|
||||
#define CURSOR_B_OFFSET 0x700c0
|
||||
@ -4408,7 +4407,7 @@
|
||||
#define DSPLINOFF(plane) DSPADDR(plane)
|
||||
#define DSPOFFSET(plane) _MMIO_PIPE2(plane, _DSPAOFFSET)
|
||||
#define DSPSURFLIVE(plane) _MMIO_PIPE2(plane, _DSPASURFLIVE)
|
||||
#define DSPGAMC(plane, i) _MMIO(_PIPE2(plane, _DSPAGAMC) + (5 - (i)) * 4) /* plane C only, 6 x u0.8 */
|
||||
#define DSPGAMC(plane, i) _MMIO_PIPE2(plane, _DSPAGAMC + (5 - (i)) * 4) /* plane C only, 6 x u0.8 */
|
||||
|
||||
/* CHV pipe B blender and primary plane */
|
||||
#define _CHV_BLEND_A 0x60a00
|
||||
|
@ -214,8 +214,6 @@ struct intel_device_info {
|
||||
|
||||
u32 memory_regions; /* regions supported by the HW */
|
||||
|
||||
u32 display_mmio_offset;
|
||||
|
||||
u8 gt; /* GT number, 0 if undefined */
|
||||
|
||||
#define DEFINE_FLAG(name) u8 name:1
|
||||
@ -231,27 +229,30 @@ struct intel_device_info {
|
||||
u8 fbc_mask;
|
||||
u8 abox_mask;
|
||||
|
||||
struct {
|
||||
u16 size; /* in blocks */
|
||||
u8 slice_mask;
|
||||
} dbuf;
|
||||
|
||||
#define DEFINE_FLAG(name) u8 name:1
|
||||
DEV_INFO_DISPLAY_FOR_EACH_FLAG(DEFINE_FLAG);
|
||||
#undef DEFINE_FLAG
|
||||
|
||||
/* Global register offset for the display engine */
|
||||
u32 mmio_offset;
|
||||
|
||||
/* Register offsets for the various display pipes and transcoders */
|
||||
u32 pipe_offsets[I915_MAX_TRANSCODERS];
|
||||
u32 trans_offsets[I915_MAX_TRANSCODERS];
|
||||
u32 cursor_offsets[I915_MAX_PIPES];
|
||||
|
||||
struct {
|
||||
u32 degamma_lut_size;
|
||||
u32 gamma_lut_size;
|
||||
u32 degamma_lut_tests;
|
||||
u32 gamma_lut_tests;
|
||||
} color;
|
||||
} display;
|
||||
|
||||
struct {
|
||||
u16 size; /* in blocks */
|
||||
u8 slice_mask;
|
||||
} dbuf;
|
||||
|
||||
/* Register offsets for the various display pipes and transcoders */
|
||||
int pipe_offsets[I915_MAX_TRANSCODERS];
|
||||
int trans_offsets[I915_MAX_TRANSCODERS];
|
||||
int cursor_offsets[I915_MAX_PIPES];
|
||||
|
||||
struct color_luts {
|
||||
u32 degamma_lut_size;
|
||||
u32 gamma_lut_size;
|
||||
u32 degamma_lut_tests;
|
||||
u32 gamma_lut_tests;
|
||||
} color;
|
||||
};
|
||||
|
||||
struct intel_runtime_info {
|
||||
|
@ -25,7 +25,7 @@ intel_pch_type(const struct drm_i915_private *dev_priv, unsigned short id)
|
||||
drm_dbg_kms(&dev_priv->drm, "Found PantherPoint PCH\n");
|
||||
drm_WARN_ON(&dev_priv->drm,
|
||||
GRAPHICS_VER(dev_priv) != 6 && !IS_IVYBRIDGE(dev_priv));
|
||||
/* PantherPoint is CPT compatible */
|
||||
/* PPT is CPT compatible */
|
||||
return PCH_CPT;
|
||||
case INTEL_PCH_LPT_DEVICE_ID_TYPE:
|
||||
drm_dbg_kms(&dev_priv->drm, "Found LynxPoint PCH\n");
|
||||
@ -47,7 +47,7 @@ intel_pch_type(const struct drm_i915_private *dev_priv, unsigned short id)
|
||||
!IS_HASWELL(dev_priv) && !IS_BROADWELL(dev_priv));
|
||||
drm_WARN_ON(&dev_priv->drm,
|
||||
IS_HSW_ULT(dev_priv) || IS_BDW_ULT(dev_priv));
|
||||
/* WildcatPoint is LPT compatible */
|
||||
/* WPT is LPT compatible */
|
||||
return PCH_LPT;
|
||||
case INTEL_PCH_WPT_LP_DEVICE_ID_TYPE:
|
||||
drm_dbg_kms(&dev_priv->drm, "Found WildcatPoint LP PCH\n");
|
||||
@ -55,7 +55,7 @@ intel_pch_type(const struct drm_i915_private *dev_priv, unsigned short id)
|
||||
!IS_HASWELL(dev_priv) && !IS_BROADWELL(dev_priv));
|
||||
drm_WARN_ON(&dev_priv->drm,
|
||||
!IS_HSW_ULT(dev_priv) && !IS_BDW_ULT(dev_priv));
|
||||
/* WildcatPoint is LPT compatible */
|
||||
/* WPT is LPT compatible */
|
||||
return PCH_LPT;
|
||||
case INTEL_PCH_SPT_DEVICE_ID_TYPE:
|
||||
drm_dbg_kms(&dev_priv->drm, "Found SunrisePoint PCH\n");
|
||||
@ -99,14 +99,14 @@ intel_pch_type(const struct drm_i915_private *dev_priv, unsigned short id)
|
||||
!IS_COFFEELAKE(dev_priv) &&
|
||||
!IS_COMETLAKE(dev_priv) &&
|
||||
!IS_ROCKETLAKE(dev_priv));
|
||||
/* CometPoint is CNP Compatible */
|
||||
/* CMP is CNP compatible */
|
||||
return PCH_CNP;
|
||||
case INTEL_PCH_CMP_V_DEVICE_ID_TYPE:
|
||||
drm_dbg_kms(&dev_priv->drm, "Found Comet Lake V PCH (CMP-V)\n");
|
||||
drm_WARN_ON(&dev_priv->drm,
|
||||
!IS_COFFEELAKE(dev_priv) &&
|
||||
!IS_COMETLAKE(dev_priv));
|
||||
/* Comet Lake V PCH is based on KBP, which is SPT compatible */
|
||||
/* CMP-V is based on KBP, which is SPT compatible */
|
||||
return PCH_SPT;
|
||||
case INTEL_PCH_ICP_DEVICE_ID_TYPE:
|
||||
case INTEL_PCH_ICP2_DEVICE_ID_TYPE:
|
||||
@ -116,7 +116,8 @@ intel_pch_type(const struct drm_i915_private *dev_priv, unsigned short id)
|
||||
case INTEL_PCH_MCC_DEVICE_ID_TYPE:
|
||||
drm_dbg_kms(&dev_priv->drm, "Found Mule Creek Canyon PCH\n");
|
||||
drm_WARN_ON(&dev_priv->drm, !IS_JSL_EHL(dev_priv));
|
||||
return PCH_MCC;
|
||||
/* MCC is TGP compatible */
|
||||
return PCH_TGP;
|
||||
case INTEL_PCH_TGP_DEVICE_ID_TYPE:
|
||||
case INTEL_PCH_TGP2_DEVICE_ID_TYPE:
|
||||
drm_dbg_kms(&dev_priv->drm, "Found Tiger Lake LP PCH\n");
|
||||
@ -127,7 +128,8 @@ intel_pch_type(const struct drm_i915_private *dev_priv, unsigned short id)
|
||||
case INTEL_PCH_JSP_DEVICE_ID_TYPE:
|
||||
drm_dbg_kms(&dev_priv->drm, "Found Jasper Lake PCH\n");
|
||||
drm_WARN_ON(&dev_priv->drm, !IS_JSL_EHL(dev_priv));
|
||||
return PCH_JSP;
|
||||
/* JSP is ICP compatible */
|
||||
return PCH_ICP;
|
||||
case INTEL_PCH_ADP_DEVICE_ID_TYPE:
|
||||
case INTEL_PCH_ADP2_DEVICE_ID_TYPE:
|
||||
case INTEL_PCH_ADP3_DEVICE_ID_TYPE:
|
||||
|
@ -22,10 +22,8 @@ enum intel_pch {
|
||||
PCH_LPT, /* Lynxpoint/Wildcatpoint PCH */
|
||||
PCH_SPT, /* Sunrisepoint/Kaby Lake PCH */
|
||||
PCH_CNP, /* Cannon/Comet Lake PCH */
|
||||
PCH_ICP, /* Ice Lake PCH */
|
||||
PCH_JSP, /* Jasper Lake PCH */
|
||||
PCH_MCC, /* Mule Creek Canyon PCH */
|
||||
PCH_TGP, /* Tiger Lake PCH */
|
||||
PCH_ICP, /* Ice Lake/Jasper Lake PCH */
|
||||
PCH_TGP, /* Tiger Lake/Mule Creek Canyon PCH */
|
||||
PCH_ADP, /* Alder Lake PCH */
|
||||
|
||||
/* Fake PCHs, functionality handled on the same PCI dev */
|
||||
@ -68,8 +66,6 @@ enum intel_pch {
|
||||
#define HAS_PCH_DG2(dev_priv) (INTEL_PCH_TYPE(dev_priv) == PCH_DG2)
|
||||
#define HAS_PCH_ADP(dev_priv) (INTEL_PCH_TYPE(dev_priv) == PCH_ADP)
|
||||
#define HAS_PCH_DG1(dev_priv) (INTEL_PCH_TYPE(dev_priv) == PCH_DG1)
|
||||
#define HAS_PCH_JSP(dev_priv) (INTEL_PCH_TYPE(dev_priv) == PCH_JSP)
|
||||
#define HAS_PCH_MCC(dev_priv) (INTEL_PCH_TYPE(dev_priv) == PCH_MCC)
|
||||
#define HAS_PCH_TGP(dev_priv) (INTEL_PCH_TYPE(dev_priv) == PCH_TGP)
|
||||
#define HAS_PCH_ICP(dev_priv) (INTEL_PCH_TYPE(dev_priv) == PCH_ICP)
|
||||
#define HAS_PCH_CNP(dev_priv) (INTEL_PCH_TYPE(dev_priv) == PCH_CNP)
|
||||
|
@ -4101,8 +4101,8 @@ static u16 skl_ddb_entry_init(struct skl_ddb_entry *entry,
|
||||
|
||||
static int intel_dbuf_slice_size(struct drm_i915_private *dev_priv)
|
||||
{
|
||||
return INTEL_INFO(dev_priv)->dbuf.size /
|
||||
hweight8(INTEL_INFO(dev_priv)->dbuf.slice_mask);
|
||||
return INTEL_INFO(dev_priv)->display.dbuf.size /
|
||||
hweight8(INTEL_INFO(dev_priv)->display.dbuf.slice_mask);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -4121,7 +4121,7 @@ skl_ddb_entry_for_slices(struct drm_i915_private *dev_priv, u8 slice_mask,
|
||||
ddb->end = fls(slice_mask) * slice_size;
|
||||
|
||||
WARN_ON(ddb->start >= ddb->end);
|
||||
WARN_ON(ddb->end > INTEL_INFO(dev_priv)->dbuf.size);
|
||||
WARN_ON(ddb->end > INTEL_INFO(dev_priv)->display.dbuf.size);
|
||||
}
|
||||
|
||||
static unsigned int mbus_ddb_offset(struct drm_i915_private *i915, u8 slice_mask)
|
||||
@ -6096,7 +6096,7 @@ skl_compute_ddb(struct intel_atomic_state *state)
|
||||
"Enabled dbuf slices 0x%x -> 0x%x (total dbuf slices 0x%x), mbus joined? %s->%s\n",
|
||||
old_dbuf_state->enabled_slices,
|
||||
new_dbuf_state->enabled_slices,
|
||||
INTEL_INFO(dev_priv)->dbuf.slice_mask,
|
||||
INTEL_INFO(dev_priv)->display.dbuf.slice_mask,
|
||||
str_yes_no(old_dbuf_state->joined_mbus),
|
||||
str_yes_no(new_dbuf_state->joined_mbus));
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user