Merge tag 'drm-intel-next-2018-02-21' of git://anongit.freedesktop.org/drm/drm-intel...
[linux-2.6-microblaze.git] / drivers / gpu / drm / i915 / i915_drv.h
index e143004..92883a4 100644 (file)
@@ -40,6 +40,7 @@
 #include <linux/hash.h>
 #include <linux/intel-iommu.h>
 #include <linux/kref.h>
+#include <linux/perf_event.h>
 #include <linux/pm_qos.h>
 #include <linux/reservation.h>
 #include <linux/shmem_fs.h>
 #include "i915_reg.h"
 #include "i915_utils.h"
 
-#include "intel_uncore.h"
 #include "intel_bios.h"
+#include "intel_device_info.h"
+#include "intel_display.h"
 #include "intel_dpll_mgr.h"
-#include "intel_uc.h"
 #include "intel_lrc.h"
+#include "intel_opregion.h"
 #include "intel_ringbuffer.h"
+#include "intel_uncore.h"
+#include "intel_uc.h"
 
 #include "i915_gem.h"
 #include "i915_gem_context.h"
 #include "i915_gem_fence_reg.h"
 #include "i915_gem_object.h"
 #include "i915_gem_gtt.h"
-#include "i915_gem_render_state.h"
 #include "i915_gem_request.h"
 #include "i915_gem_timeline.h"
 
@@ -80,8 +83,8 @@
 
 #define DRIVER_NAME            "i915"
 #define DRIVER_DESC            "Intel Graphics"
-#define DRIVER_DATE            "20171023"
-#define DRIVER_TIMESTAMP       1508748913
+#define DRIVER_DATE            "20180221"
+#define DRIVER_TIMESTAMP       1519219289
 
 /* Use I915_STATE_WARN(x) and I915_STATE_WARN_ON() (rather than WARN() and
  * WARN_ON()) for hw state sanity checks to check for unexpected conditions
 #define I915_STATE_WARN_ON(x)                                          \
        I915_STATE_WARN((x), "%s", "WARN_ON(" __stringify(x) ")")
 
+#if IS_ENABLED(CONFIG_DRM_I915_DEBUG)
 bool __i915_inject_load_failure(const char *func, int line);
 #define i915_inject_load_failure() \
        __i915_inject_load_failure(__func__, __LINE__)
+#else
+#define i915_inject_load_failure() false
+#endif
 
 typedef struct {
        uint32_t val;
@@ -243,173 +250,6 @@ static inline uint_fixed_16_16_t add_fixed16_u32(uint_fixed_16_16_t add1,
        return clamp_u64_to_fixed16(interm_sum);
 }
 
-static inline const char *yesno(bool v)
-{
-       return v ? "yes" : "no";
-}
-
-static inline const char *onoff(bool v)
-{
-       return v ? "on" : "off";
-}
-
-static inline const char *enableddisabled(bool v)
-{
-       return v ? "enabled" : "disabled";
-}
-
-enum pipe {
-       INVALID_PIPE = -1,
-       PIPE_A = 0,
-       PIPE_B,
-       PIPE_C,
-       _PIPE_EDP,
-       I915_MAX_PIPES = _PIPE_EDP
-};
-#define pipe_name(p) ((p) + 'A')
-
-enum transcoder {
-       TRANSCODER_A = 0,
-       TRANSCODER_B,
-       TRANSCODER_C,
-       TRANSCODER_EDP,
-       TRANSCODER_DSI_A,
-       TRANSCODER_DSI_C,
-       I915_MAX_TRANSCODERS
-};
-
-static inline const char *transcoder_name(enum transcoder transcoder)
-{
-       switch (transcoder) {
-       case TRANSCODER_A:
-               return "A";
-       case TRANSCODER_B:
-               return "B";
-       case TRANSCODER_C:
-               return "C";
-       case TRANSCODER_EDP:
-               return "EDP";
-       case TRANSCODER_DSI_A:
-               return "DSI A";
-       case TRANSCODER_DSI_C:
-               return "DSI C";
-       default:
-               return "<invalid>";
-       }
-}
-
-static inline bool transcoder_is_dsi(enum transcoder transcoder)
-{
-       return transcoder == TRANSCODER_DSI_A || transcoder == TRANSCODER_DSI_C;
-}
-
-/*
- * Global legacy plane identifier. Valid only for primary/sprite
- * planes on pre-g4x, and only for primary planes on g4x+.
- */
-enum plane {
-       PLANE_A,
-       PLANE_B,
-       PLANE_C,
-};
-#define plane_name(p) ((p) + 'A')
-
-#define sprite_name(p, s) ((p) * INTEL_INFO(dev_priv)->num_sprites[(p)] + (s) + 'A')
-
-/*
- * Per-pipe plane identifier.
- * I915_MAX_PLANES in the enum below is the maximum (across all platforms)
- * number of planes per CRTC.  Not all platforms really have this many planes,
- * which means some arrays of size I915_MAX_PLANES may have unused entries
- * between the topmost sprite plane and the cursor plane.
- *
- * This is expected to be passed to various register macros
- * (eg. PLANE_CTL(), PS_PLANE_SEL(), etc.) so adjust with care.
- */
-enum plane_id {
-       PLANE_PRIMARY,
-       PLANE_SPRITE0,
-       PLANE_SPRITE1,
-       PLANE_SPRITE2,
-       PLANE_CURSOR,
-       I915_MAX_PLANES,
-};
-
-#define for_each_plane_id_on_crtc(__crtc, __p) \
-       for ((__p) = PLANE_PRIMARY; (__p) < I915_MAX_PLANES; (__p)++) \
-               for_each_if ((__crtc)->plane_ids_mask & BIT(__p))
-
-enum port {
-       PORT_NONE = -1,
-       PORT_A = 0,
-       PORT_B,
-       PORT_C,
-       PORT_D,
-       PORT_E,
-       I915_MAX_PORTS
-};
-#define port_name(p) ((p) + 'A')
-
-#define I915_NUM_PHYS_VLV 2
-
-enum dpio_channel {
-       DPIO_CH0,
-       DPIO_CH1
-};
-
-enum dpio_phy {
-       DPIO_PHY0,
-       DPIO_PHY1,
-       DPIO_PHY2,
-};
-
-enum intel_display_power_domain {
-       POWER_DOMAIN_PIPE_A,
-       POWER_DOMAIN_PIPE_B,
-       POWER_DOMAIN_PIPE_C,
-       POWER_DOMAIN_PIPE_A_PANEL_FITTER,
-       POWER_DOMAIN_PIPE_B_PANEL_FITTER,
-       POWER_DOMAIN_PIPE_C_PANEL_FITTER,
-       POWER_DOMAIN_TRANSCODER_A,
-       POWER_DOMAIN_TRANSCODER_B,
-       POWER_DOMAIN_TRANSCODER_C,
-       POWER_DOMAIN_TRANSCODER_EDP,
-       POWER_DOMAIN_TRANSCODER_DSI_A,
-       POWER_DOMAIN_TRANSCODER_DSI_C,
-       POWER_DOMAIN_PORT_DDI_A_LANES,
-       POWER_DOMAIN_PORT_DDI_B_LANES,
-       POWER_DOMAIN_PORT_DDI_C_LANES,
-       POWER_DOMAIN_PORT_DDI_D_LANES,
-       POWER_DOMAIN_PORT_DDI_E_LANES,
-       POWER_DOMAIN_PORT_DDI_A_IO,
-       POWER_DOMAIN_PORT_DDI_B_IO,
-       POWER_DOMAIN_PORT_DDI_C_IO,
-       POWER_DOMAIN_PORT_DDI_D_IO,
-       POWER_DOMAIN_PORT_DDI_E_IO,
-       POWER_DOMAIN_PORT_DSI,
-       POWER_DOMAIN_PORT_CRT,
-       POWER_DOMAIN_PORT_OTHER,
-       POWER_DOMAIN_VGA,
-       POWER_DOMAIN_AUDIO,
-       POWER_DOMAIN_PLLS,
-       POWER_DOMAIN_AUX_A,
-       POWER_DOMAIN_AUX_B,
-       POWER_DOMAIN_AUX_C,
-       POWER_DOMAIN_AUX_D,
-       POWER_DOMAIN_GMBUS,
-       POWER_DOMAIN_MODESET,
-       POWER_DOMAIN_INIT,
-
-       POWER_DOMAIN_NUM,
-};
-
-#define POWER_DOMAIN_PIPE(pipe) ((pipe) + POWER_DOMAIN_PIPE_A)
-#define POWER_DOMAIN_PIPE_PANEL_FITTER(pipe) \
-               ((pipe) + POWER_DOMAIN_PIPE_A_PANEL_FITTER)
-#define POWER_DOMAIN_TRANSCODER(tran) \
-       ((tran) == TRANSCODER_EDP ? POWER_DOMAIN_TRANSCODER_EDP : \
-        (tran) + POWER_DOMAIN_TRANSCODER_A)
-
 enum hpd_pin {
        HPD_NONE = 0,
        HPD_TV = HPD_NONE,     /* TV is known to be unreliable */
@@ -471,122 +311,6 @@ struct i915_hotplug {
         I915_GEM_DOMAIN_INSTRUCTION | \
         I915_GEM_DOMAIN_VERTEX)
 
-#define for_each_pipe(__dev_priv, __p) \
-       for ((__p) = 0; (__p) < INTEL_INFO(__dev_priv)->num_pipes; (__p)++)
-#define for_each_pipe_masked(__dev_priv, __p, __mask) \
-       for ((__p) = 0; (__p) < INTEL_INFO(__dev_priv)->num_pipes; (__p)++) \
-               for_each_if ((__mask) & (1 << (__p)))
-#define for_each_universal_plane(__dev_priv, __pipe, __p)              \
-       for ((__p) = 0;                                                 \
-            (__p) < INTEL_INFO(__dev_priv)->num_sprites[(__pipe)] + 1; \
-            (__p)++)
-#define for_each_sprite(__dev_priv, __p, __s)                          \
-       for ((__s) = 0;                                                 \
-            (__s) < INTEL_INFO(__dev_priv)->num_sprites[(__p)];        \
-            (__s)++)
-
-#define for_each_port_masked(__port, __ports_mask) \
-       for ((__port) = PORT_A; (__port) < I915_MAX_PORTS; (__port)++)  \
-               for_each_if ((__ports_mask) & (1 << (__port)))
-
-#define for_each_crtc(dev, crtc) \
-       list_for_each_entry(crtc, &(dev)->mode_config.crtc_list, head)
-
-#define for_each_intel_plane(dev, intel_plane) \
-       list_for_each_entry(intel_plane,                        \
-                           &(dev)->mode_config.plane_list,     \
-                           base.head)
-
-#define for_each_intel_plane_mask(dev, intel_plane, plane_mask)                \
-       list_for_each_entry(intel_plane,                                \
-                           &(dev)->mode_config.plane_list,             \
-                           base.head)                                  \
-               for_each_if ((plane_mask) &                             \
-                            (1 << drm_plane_index(&intel_plane->base)))
-
-#define for_each_intel_plane_on_crtc(dev, intel_crtc, intel_plane)     \
-       list_for_each_entry(intel_plane,                                \
-                           &(dev)->mode_config.plane_list,             \
-                           base.head)                                  \
-               for_each_if ((intel_plane)->pipe == (intel_crtc)->pipe)
-
-#define for_each_intel_crtc(dev, intel_crtc)                           \
-       list_for_each_entry(intel_crtc,                                 \
-                           &(dev)->mode_config.crtc_list,              \
-                           base.head)
-
-#define for_each_intel_crtc_mask(dev, intel_crtc, crtc_mask)           \
-       list_for_each_entry(intel_crtc,                                 \
-                           &(dev)->mode_config.crtc_list,              \
-                           base.head)                                  \
-               for_each_if ((crtc_mask) & (1 << drm_crtc_index(&intel_crtc->base)))
-
-#define for_each_intel_encoder(dev, intel_encoder)             \
-       list_for_each_entry(intel_encoder,                      \
-                           &(dev)->mode_config.encoder_list,   \
-                           base.head)
-
-#define for_each_intel_connector_iter(intel_connector, iter) \
-       while ((intel_connector = to_intel_connector(drm_connector_list_iter_next(iter))))
-
-#define for_each_encoder_on_crtc(dev, __crtc, intel_encoder) \
-       list_for_each_entry((intel_encoder), &(dev)->mode_config.encoder_list, base.head) \
-               for_each_if ((intel_encoder)->base.crtc == (__crtc))
-
-#define for_each_connector_on_encoder(dev, __encoder, intel_connector) \
-       list_for_each_entry((intel_connector), &(dev)->mode_config.connector_list, base.head) \
-               for_each_if ((intel_connector)->base.encoder == (__encoder))
-
-#define for_each_power_domain(domain, mask)                            \
-       for ((domain) = 0; (domain) < POWER_DOMAIN_NUM; (domain)++)     \
-               for_each_if (BIT_ULL(domain) & (mask))
-
-#define for_each_power_well(__dev_priv, __power_well)                          \
-       for ((__power_well) = (__dev_priv)->power_domains.power_wells;  \
-            (__power_well) - (__dev_priv)->power_domains.power_wells < \
-               (__dev_priv)->power_domains.power_well_count;           \
-            (__power_well)++)
-
-#define for_each_power_well_rev(__dev_priv, __power_well)                      \
-       for ((__power_well) = (__dev_priv)->power_domains.power_wells +         \
-                             (__dev_priv)->power_domains.power_well_count - 1; \
-            (__power_well) - (__dev_priv)->power_domains.power_wells >= 0;     \
-            (__power_well)--)
-
-#define for_each_power_domain_well(__dev_priv, __power_well, __domain_mask)    \
-       for_each_power_well(__dev_priv, __power_well)                           \
-               for_each_if ((__power_well)->domains & (__domain_mask))
-
-#define for_each_power_domain_well_rev(__dev_priv, __power_well, __domain_mask) \
-       for_each_power_well_rev(__dev_priv, __power_well)                       \
-               for_each_if ((__power_well)->domains & (__domain_mask))
-
-#define for_each_intel_plane_in_state(__state, plane, plane_state, __i) \
-       for ((__i) = 0; \
-            (__i) < (__state)->base.dev->mode_config.num_total_plane && \
-                    ((plane) = to_intel_plane((__state)->base.planes[__i].ptr), \
-                     (plane_state) = to_intel_plane_state((__state)->base.planes[__i].state), 1); \
-            (__i)++) \
-               for_each_if (plane_state)
-
-#define for_each_new_intel_crtc_in_state(__state, crtc, new_crtc_state, __i) \
-       for ((__i) = 0; \
-            (__i) < (__state)->base.dev->mode_config.num_crtc && \
-                    ((crtc) = to_intel_crtc((__state)->base.crtcs[__i].ptr), \
-                     (new_crtc_state) = to_intel_crtc_state((__state)->base.crtcs[__i].new_state), 1); \
-            (__i)++) \
-               for_each_if (crtc)
-
-
-#define for_each_oldnew_intel_plane_in_state(__state, plane, old_plane_state, new_plane_state, __i) \
-       for ((__i) = 0; \
-            (__i) < (__state)->base.dev->mode_config.num_total_plane && \
-                    ((plane) = to_intel_plane((__state)->base.planes[__i].ptr), \
-                     (old_plane_state) = to_intel_plane_state((__state)->base.planes[__i].old_state), \
-                     (new_plane_state) = to_intel_plane_state((__state)->base.planes[__i].new_state), 1); \
-            (__i)++) \
-               for_each_if (plane)
-
 struct drm_i915_private;
 struct i915_mm_struct;
 struct i915_mmu_object;
@@ -623,20 +347,6 @@ struct drm_i915_file_private {
        atomic_t context_bans;
 };
 
-/* Used by dp and fdi links */
-struct intel_link_m_n {
-       uint32_t        tu;
-       uint32_t        gmch_m;
-       uint32_t        gmch_n;
-       uint32_t        link_m;
-       uint32_t        link_n;
-};
-
-void intel_link_compute_m_n(int bpp, int nlanes,
-                           int pixel_clock, int link_clock,
-                           struct intel_link_m_n *m_n,
-                           bool reduce_m_n);
-
 /* Interface history:
  *
  * 1.1: Original.
@@ -651,27 +361,6 @@ void intel_link_compute_m_n(int bpp, int nlanes,
 #define DRIVER_MINOR           6
 #define DRIVER_PATCHLEVEL      0
 
-struct opregion_header;
-struct opregion_acpi;
-struct opregion_swsci;
-struct opregion_asle;
-
-struct intel_opregion {
-       struct opregion_header *header;
-       struct opregion_acpi *acpi;
-       struct opregion_swsci *swsci;
-       u32 swsci_gbda_sub_functions;
-       u32 swsci_sbcb_sub_functions;
-       struct opregion_asle *asle;
-       void *rvda;
-       void *vbt_firmware;
-       const void *vbt;
-       u32 vbt_size;
-       u32 *lid_state;
-       struct work_struct asle_work;
-};
-#define OPREGION_SIZE            (8*1024)
-
 struct intel_overlay;
 struct intel_overlay_error_state;
 
@@ -699,7 +388,8 @@ struct drm_i915_display_funcs {
                          struct intel_cdclk_state *cdclk_state);
        void (*set_cdclk)(struct drm_i915_private *dev_priv,
                          const struct intel_cdclk_state *cdclk_state);
-       int (*get_fifo_size)(struct drm_i915_private *dev_priv, int plane);
+       int (*get_fifo_size)(struct drm_i915_private *dev_priv,
+                            enum i9xx_plane_id i9xx_plane);
        int (*compute_pipe_wm)(struct intel_crtc_state *cstate);
        int (*compute_intermediate_wm)(struct drm_device *dev,
                                       struct intel_crtc *intel_crtc,
@@ -726,10 +416,12 @@ struct drm_i915_display_funcs {
        void (*crtc_disable)(struct intel_crtc_state *old_crtc_state,
                             struct drm_atomic_state *old_state);
        void (*update_crtcs)(struct drm_atomic_state *state);
-       void (*audio_codec_enable)(struct drm_connector *connector,
-                                  struct intel_encoder *encoder,
-                                  const struct drm_display_mode *adjusted_mode);
-       void (*audio_codec_disable)(struct intel_encoder *encoder);
+       void (*audio_codec_enable)(struct intel_encoder *encoder,
+                                  const struct intel_crtc_state *crtc_state,
+                                  const struct drm_connector_state *conn_state);
+       void (*audio_codec_disable)(struct intel_encoder *encoder,
+                                   const struct intel_crtc_state *old_crtc_state,
+                                   const struct drm_connector_state *old_conn_state);
        void (*fdi_link_train)(struct intel_crtc *crtc,
                               const struct intel_crtc_state *crtc_state);
        void (*init_clock_gating)(struct drm_i915_private *dev_priv);
@@ -761,142 +453,13 @@ struct intel_csr {
        uint32_t allowed_dc_mask;
 };
 
-#define DEV_INFO_FOR_EACH_FLAG(func) \
-       func(is_mobile); \
-       func(is_lp); \
-       func(is_alpha_support); \
-       /* Keep has_* in alphabetical order */ \
-       func(has_64bit_reloc); \
-       func(has_aliasing_ppgtt); \
-       func(has_csr); \
-       func(has_ddi); \
-       func(has_dp_mst); \
-       func(has_reset_engine); \
-       func(has_fbc); \
-       func(has_fpga_dbg); \
-       func(has_full_ppgtt); \
-       func(has_full_48bit_ppgtt); \
-       func(has_gmch_display); \
-       func(has_guc); \
-       func(has_guc_ct); \
-       func(has_hotplug); \
-       func(has_l3_dpf); \
-       func(has_llc); \
-       func(has_logical_ring_contexts); \
-       func(has_logical_ring_preemption); \
-       func(has_overlay); \
-       func(has_pooled_eu); \
-       func(has_psr); \
-       func(has_rc6); \
-       func(has_rc6p); \
-       func(has_resource_streamer); \
-       func(has_runtime_pm); \
-       func(has_snoop); \
-       func(unfenced_needs_alignment); \
-       func(cursor_needs_physical); \
-       func(hws_needs_physical); \
-       func(overlay_needs_physical); \
-       func(supports_tv); \
-       func(has_ipc);
-
-struct sseu_dev_info {
-       u8 slice_mask;
-       u8 subslice_mask;
-       u8 eu_total;
-       u8 eu_per_subslice;
-       u8 min_eu_in_pool;
-       /* For each slice, which subslice(s) has(have) 7 EUs (bitfield)? */
-       u8 subslice_7eu[3];
-       u8 has_slice_pg:1;
-       u8 has_subslice_pg:1;
-       u8 has_eu_pg:1;
-};
-
-static inline unsigned int sseu_subslice_total(const struct sseu_dev_info *sseu)
-{
-       return hweight8(sseu->slice_mask) * hweight8(sseu->subslice_mask);
-}
-
-/* Keep in gen based order, and chronological order within a gen */
-enum intel_platform {
-       INTEL_PLATFORM_UNINITIALIZED = 0,
-       INTEL_I830,
-       INTEL_I845G,
-       INTEL_I85X,
-       INTEL_I865G,
-       INTEL_I915G,
-       INTEL_I915GM,
-       INTEL_I945G,
-       INTEL_I945GM,
-       INTEL_G33,
-       INTEL_PINEVIEW,
-       INTEL_I965G,
-       INTEL_I965GM,
-       INTEL_G45,
-       INTEL_GM45,
-       INTEL_IRONLAKE,
-       INTEL_SANDYBRIDGE,
-       INTEL_IVYBRIDGE,
-       INTEL_VALLEYVIEW,
-       INTEL_HASWELL,
-       INTEL_BROADWELL,
-       INTEL_CHERRYVIEW,
-       INTEL_SKYLAKE,
-       INTEL_BROXTON,
-       INTEL_KABYLAKE,
-       INTEL_GEMINILAKE,
-       INTEL_COFFEELAKE,
-       INTEL_CANNONLAKE,
-       INTEL_MAX_PLATFORMS
-};
-
-struct intel_device_info {
-       u16 device_id;
-       u16 gen_mask;
-
-       u8 gen;
-       u8 gt; /* GT number, 0 if undefined */
-       u8 num_rings;
-       u8 ring_mask; /* Rings supported by the HW */
-
-       enum intel_platform platform;
-       u32 platform_mask;
-
-       u32 display_mmio_offset;
-
-       u8 num_pipes;
-       u8 num_sprites[I915_MAX_PIPES];
-       u8 num_scalers[I915_MAX_PIPES];
-
-       unsigned int page_sizes; /* page sizes supported by the HW */
-
-#define DEFINE_FLAG(name) u8 name:1
-       DEV_INFO_FOR_EACH_FLAG(DEFINE_FLAG);
-#undef DEFINE_FLAG
-       u16 ddb_size; /* in blocks */
-
-       /* Register offsets for the various display pipes and transcoders */
-       int pipe_offsets[I915_MAX_TRANSCODERS];
-       int trans_offsets[I915_MAX_TRANSCODERS];
-       int palette_offsets[I915_MAX_PIPES];
-       int cursor_offsets[I915_MAX_PIPES];
-
-       /* Slice/subslice/EU info */
-       struct sseu_dev_info sseu;
-
-       struct color_luts {
-               u16 degamma_lut_size;
-               u16 gamma_lut_size;
-       } color;
-};
-
 struct intel_display_error_state;
 
 struct i915_gpu_state {
        struct kref ref;
-       struct timeval time;
-       struct timeval boottime;
-       struct timeval uptime;
+       ktime_t time;
+       ktime_t boottime;
+       ktime_t uptime;
 
        struct drm_i915_private *i915;
 
@@ -909,8 +472,15 @@ struct i915_gpu_state {
        u32 reset_count;
        u32 suspend_count;
        struct intel_device_info device_info;
+       struct intel_driver_caps driver_caps;
        struct i915_params params;
 
+       struct i915_error_uc {
+               struct intel_uc_fw guc_fw;
+               struct intel_uc_fw huc_fw;
+               struct drm_i915_error_object *guc_log;
+       } uc;
+
        /* Generic register state */
        u32 eir;
        u32 pgtbl_er;
@@ -933,12 +503,11 @@ struct i915_gpu_state {
        u64 fence[I915_MAX_NUM_FENCES];
        struct intel_overlay_error_state *overlay;
        struct intel_display_error_state *display;
-       struct drm_i915_error_object *semaphore;
-       struct drm_i915_error_object *guc_log;
 
        struct drm_i915_error_engine {
                int engine_id;
                /* Software tracked state */
+               bool idle;
                bool waiting;
                int num_waiters;
                unsigned long hangcheck_timestamp;
@@ -987,6 +556,7 @@ struct i915_gpu_state {
                        int ban_score;
                        int active;
                        int guilty;
+                       bool bannable;
                } context;
 
                struct drm_i915_error_object {
@@ -1001,6 +571,7 @@ struct i915_gpu_state {
                long user_bo_count;
 
                struct drm_i915_error_object *wa_ctx;
+               struct drm_i915_error_object *default_state;
 
                struct drm_i915_error_request {
                        long jiffies;
@@ -1096,6 +667,7 @@ struct intel_fbc {
         */
        struct intel_fbc_state_cache {
                struct i915_vma *vma;
+               unsigned long flags;
 
                struct {
                        unsigned int mode_flags;
@@ -1134,10 +706,11 @@ struct intel_fbc {
         */
        struct intel_fbc_reg_params {
                struct i915_vma *vma;
+               unsigned long flags;
 
                struct {
                        enum pipe pipe;
-                       enum plane plane;
+                       enum i9xx_plane_id i9xx_plane;
                        unsigned int fence_y_offset;
                } crtc;
 
@@ -1152,7 +725,7 @@ struct intel_fbc {
 
        struct intel_fbc_work {
                bool scheduled;
-               u32 scheduled_vblank;
+               u64 scheduled_vblank;
                struct work_struct work;
        } work;
 
@@ -1189,7 +762,6 @@ struct i915_drrs {
 struct i915_psr {
        struct mutex lock;
        bool sink_support;
-       bool source_ok;
        struct intel_dp *enabled;
        bool active;
        struct delayed_work work;
@@ -1218,6 +790,7 @@ enum intel_pch {
        PCH_SPT,        /* Sunrisepoint PCH */
        PCH_KBP,        /* Kaby Lake PCH */
        PCH_CNP,        /* Cannon Lake PCH */
+       PCH_ICP,        /* Ice Lake PCH */
        PCH_NOP,
 };
 
@@ -1376,6 +949,8 @@ struct intel_rps {
 
 struct intel_rc6 {
        bool enabled;
+       u64 prev_hw_residency[4];
+       u64 cur_residency[4];
 };
 
 struct intel_llc_pstate {
@@ -1386,7 +961,6 @@ struct intel_gen6_power_mgmt {
        struct intel_rps rps;
        struct intel_rc6 rc6;
        struct intel_llc_pstate llc_pstate;
-       struct delayed_work autoenable_work;
 };
 
 /* defined intel_pm.c */
@@ -1523,15 +1097,17 @@ struct i915_gem_mm {
        struct llist_head free_list;
        struct work_struct free_work;
        spinlock_t free_lock;
+       /**
+        * Count of objects pending destructions. Used to skip needlessly
+        * waiting on an RCU barrier if no objects are waiting to be freed.
+        */
+       atomic_t free_count;
 
        /**
         * Small stash of WC pages
         */
        struct pagevec wc_stash;
 
-       /** Usable portion of the GTT for GEM */
-       dma_addr_t stolen_base; /* limited to low memory (32-bit) */
-
        /**
         * tmpfs instance used for shmem backed objects
         */
@@ -1580,6 +1156,8 @@ struct drm_i915_error_state_buf {
        loff_t pos;
 };
 
+#define I915_IDLE_ENGINES_TIMEOUT (200) /* in ms */
+
 #define I915_RESET_TIMEOUT (10 * HZ) /* 10s */
 #define I915_FENCE_TIMEOUT (10 * HZ) /* 10s */
 
@@ -1692,12 +1270,15 @@ enum modeset_restore {
 #define DP_AUX_B 0x10
 #define DP_AUX_C 0x20
 #define DP_AUX_D 0x30
+#define DP_AUX_F 0x60
 
 #define DDC_PIN_B  0x05
 #define DDC_PIN_C  0x04
 #define DDC_PIN_D  0x06
 
 struct ddi_vbt_port_info {
+       int max_tmds_clock;
+
        /*
         * This is an index in the HDMI/DVI DDI buffer translation table.
         * The special value HDMI_LEVEL_SHIFT_UNKNOWN means the VBT didn't
@@ -1716,6 +1297,7 @@ struct ddi_vbt_port_info {
 
        uint8_t dp_boost_level;
        uint8_t hdmi_boost_level;
+       int dp_max_link_rate;           /* 0 for not limited by VBT */
 };
 
 enum psr_lines_to_wait {
@@ -1784,6 +1366,7 @@ struct intel_vbt_data {
                u32 size;
                u8 *data;
                const u8 *sequence[MIPI_SEQ_MAX];
+               u8 *deassert_seq; /* Used by fixup_mipi_sequences() */
        } dsi;
 
        int crt_ddc_pin;
@@ -1895,6 +1478,7 @@ struct skl_wm_params {
        uint_fixed_16_16_t plane_blocks_per_line;
        uint_fixed_16_16_t y_tile_minimum;
        uint32_t linetime_us;
+       uint32_t dbuf_block_size;
 };
 
 /*
@@ -2227,7 +1811,8 @@ struct i915_oa_ops {
 };
 
 struct intel_cdclk_state {
-       unsigned int cdclk, vco, ref;
+       unsigned int cdclk, vco, ref, bypass;
+       u8 voltage_level;
 };
 
 struct drm_i915_private {
@@ -2241,6 +1826,31 @@ struct drm_i915_private {
        struct kmem_cache *priorities;
 
        const struct intel_device_info info;
+       struct intel_driver_caps caps;
+
+       /**
+        * Data Stolen Memory - aka "i915 stolen memory" gives us the start and
+        * end of stolen which we can optionally use to create GEM objects
+        * backed by stolen memory. Note that stolen_usable_size tells us
+        * exactly how much of this we are actually allowed to use, given that
+        * some portion of it is in fact reserved for use by hardware functions.
+        */
+       struct resource dsm;
+       /**
+        * Reseved portion of Data Stolen Memory
+        */
+       struct resource dsm_reserved;
+
+       /*
+        * Stolen memory is segmented in hardware with different portions
+        * offlimits to certain functions.
+        *
+        * The drm_mm is initialised to the total accessible range, as found
+        * from the PCI config. On Broadwell+, this is further restricted to
+        * avoid the first page! The upper end of stolen memory is reserved for
+        * hardware functions and similarly removed from the accessible range.
+        */
+       resource_size_t stolen_usable_size;     /* Total size minus reserved ranges */
 
        void __iomem *regs;
 
@@ -2281,7 +1891,8 @@ struct drm_i915_private {
        struct i915_gem_context *kernel_context;
        /* Context only to be used for injecting preemption commands */
        struct i915_gem_context *preempt_context;
-       struct i915_vma *semaphore;
+       struct intel_engine_cs *engine_class[MAX_ENGINE_CLASS + 1]
+                                           [MAX_ENGINE_INSTANCE + 1];
 
        struct drm_dma_handle *status_page_dmah;
        struct resource mch_res;
@@ -2339,6 +1950,7 @@ struct drm_i915_private {
        unsigned int max_dotclk_freq;
        unsigned int rawclk_freq;
        unsigned int hpll_freq;
+       unsigned int fdi_pll_freq;
        unsigned int czclk_freq;
 
        struct {
@@ -2418,6 +2030,8 @@ struct drm_i915_private {
        unsigned int active_crtcs;
        /* minimum acceptable cdclk for each pipe */
        int min_cdclk[I915_MAX_PIPES];
+       /* minimum acceptable voltage level for each pipe */
+       u8 min_voltage_level[I915_MAX_PIPES];
 
        int dpio_phy_iosf_port[I915_NUM_PHYS_VLV];
 
@@ -2609,7 +2223,6 @@ struct drm_i915_private {
 
                        bool periodic;
                        int period_exponent;
-                       int timestamp_frequency;
 
                        struct i915_oa_config test_config;
 
@@ -2719,6 +2332,12 @@ struct drm_i915_private {
                 */
                bool awake;
 
+               /**
+                * The number of times we have woken up.
+                */
+               unsigned int epoch;
+#define I915_EPOCH_INVALID 0
+
                /**
                 * We leave the user IRQ off as much as possible,
                 * but this means that requests will finish and never
@@ -2754,6 +2373,8 @@ struct drm_i915_private {
                int     irq;
        } lpe_audio;
 
+       struct i915_pmu pmu;
+
        /*
         * NOTE: This is the dri1/ums dungeon, don't add stuff here. Your patch
         * will be rejected. Instead look for a better place.
@@ -2809,18 +2430,17 @@ enum hdmi_force_audio {
  *
  * We have one bit per pipe and per scanout plane type.
  */
-#define INTEL_MAX_SPRITE_BITS_PER_PIPE 5
 #define INTEL_FRONTBUFFER_BITS_PER_PIPE 8
-#define INTEL_FRONTBUFFER_PRIMARY(pipe) \
-       (1 << (INTEL_FRONTBUFFER_BITS_PER_PIPE * (pipe)))
-#define INTEL_FRONTBUFFER_CURSOR(pipe) \
-       (1 << (1 + (INTEL_FRONTBUFFER_BITS_PER_PIPE * (pipe))))
-#define INTEL_FRONTBUFFER_SPRITE(pipe, plane) \
-       (1 << (2 + plane + (INTEL_FRONTBUFFER_BITS_PER_PIPE * (pipe))))
+#define INTEL_FRONTBUFFER(pipe, plane_id) ({ \
+       BUILD_BUG_ON(INTEL_FRONTBUFFER_BITS_PER_PIPE * I915_MAX_PIPES > 32); \
+       BUILD_BUG_ON(I915_MAX_PLANES > INTEL_FRONTBUFFER_BITS_PER_PIPE); \
+       BIT((plane_id) + INTEL_FRONTBUFFER_BITS_PER_PIPE * (pipe)); \
+})
 #define INTEL_FRONTBUFFER_OVERLAY(pipe) \
-       (1 << (2 + INTEL_MAX_SPRITE_BITS_PER_PIPE + (INTEL_FRONTBUFFER_BITS_PER_PIPE * (pipe))))
+       BIT(INTEL_FRONTBUFFER_BITS_PER_PIPE - 1 + INTEL_FRONTBUFFER_BITS_PER_PIPE * (pipe))
 #define INTEL_FRONTBUFFER_ALL_MASK(pipe) \
-       (0xff << (INTEL_FRONTBUFFER_BITS_PER_PIPE * (pipe)))
+       GENMASK(INTEL_FRONTBUFFER_BITS_PER_PIPE * ((pipe) + 1) - 1, \
+               INTEL_FRONTBUFFER_BITS_PER_PIPE * (pipe))
 
 /*
  * Optimised SGL iterator for GEM objects
@@ -3000,6 +2620,7 @@ intel_info(const struct drm_i915_private *dev_priv)
 #define IS_GEMINILAKE(dev_priv)        IS_PLATFORM(dev_priv, INTEL_GEMINILAKE)
 #define IS_COFFEELAKE(dev_priv)        IS_PLATFORM(dev_priv, INTEL_COFFEELAKE)
 #define IS_CANNONLAKE(dev_priv)        IS_PLATFORM(dev_priv, INTEL_CANNONLAKE)
+#define IS_ICELAKE(dev_priv)   IS_PLATFORM(dev_priv, INTEL_ICELAKE)
 #define IS_MOBILE(dev_priv)    ((dev_priv)->info.is_mobile)
 #define IS_HSW_EARLY_SDV(dev_priv) (IS_HASWELL(dev_priv) && \
                                    (INTEL_DEVID(dev_priv) & 0xFF00) == 0x0C00)
@@ -3049,6 +2670,10 @@ intel_info(const struct drm_i915_private *dev_priv)
                                 (INTEL_DEVID(dev_priv) & 0x00F0) == 0x00A0)
 #define IS_CFL_GT2(dev_priv)   (IS_COFFEELAKE(dev_priv) && \
                                 (dev_priv)->info.gt == 2)
+#define IS_CFL_GT3(dev_priv)   (IS_COFFEELAKE(dev_priv) && \
+                                (dev_priv)->info.gt == 3)
+#define IS_CNL_WITH_PORT_F(dev_priv)   (IS_CANNONLAKE(dev_priv) && \
+                                       (INTEL_DEVID(dev_priv) & 0x0004) == 0x0004)
 
 #define IS_ALPHA_SUPPORT(intel_info) ((intel_info)->is_alpha_support)
 
@@ -3109,6 +2734,7 @@ intel_info(const struct drm_i915_private *dev_priv)
 #define IS_GEN8(dev_priv)      (!!((dev_priv)->info.gen_mask & BIT(7)))
 #define IS_GEN9(dev_priv)      (!!((dev_priv)->info.gen_mask & BIT(8)))
 #define IS_GEN10(dev_priv)     (!!((dev_priv)->info.gen_mask & BIT(9)))
+#define IS_GEN11(dev_priv)     (!!((dev_priv)->info.gen_mask & BIT(10)))
 
 #define IS_LP(dev_priv)        (INTEL_INFO(dev_priv)->is_lp)
 #define IS_GEN9_LP(dev_priv)   (IS_GEN9(dev_priv) && IS_LP(dev_priv))
@@ -3130,6 +2756,8 @@ intel_info(const struct drm_i915_private *dev_priv)
 #define HAS_BLT(dev_priv)      HAS_ENGINE(dev_priv, BCS)
 #define HAS_VEBOX(dev_priv)    HAS_ENGINE(dev_priv, VECS)
 
+#define HAS_LEGACY_SEMAPHORES(dev_priv) IS_GEN7(dev_priv)
+
 #define HAS_LLC(dev_priv)      ((dev_priv)->info.has_llc)
 #define HAS_SNOOP(dev_priv)    ((dev_priv)->info.has_snoop)
 #define HAS_EDRAM(dev_priv)    (!!((dev_priv)->edram_cap & EDRAM_ENABLED))
@@ -3140,6 +2768,11 @@ intel_info(const struct drm_i915_private *dev_priv)
 
 #define HAS_LOGICAL_RING_CONTEXTS(dev_priv) \
                ((dev_priv)->info.has_logical_ring_contexts)
+#define HAS_LOGICAL_RING_PREEMPTION(dev_priv) \
+               ((dev_priv)->info.has_logical_ring_preemption)
+
+#define HAS_EXECLISTS(dev_priv) HAS_LOGICAL_RING_CONTEXTS(dev_priv)
+
 #define USES_PPGTT(dev_priv)           (i915_modparams.enable_ppgtt)
 #define USES_FULL_PPGTT(dev_priv)      (i915_modparams.enable_ppgtt >= 2)
 #define USES_FULL_48BIT_PPGTT(dev_priv)        (i915_modparams.enable_ppgtt == 3)
@@ -3182,7 +2815,7 @@ intel_info(const struct drm_i915_private *dev_priv)
 
 #define HAS_FW_BLC(dev_priv)   (INTEL_GEN(dev_priv) > 2)
 #define HAS_FBC(dev_priv)      ((dev_priv)->info.has_fbc)
-#define HAS_CUR_FBC(dev_priv)  (!HAS_GMCH_DISPLAY(dev_priv) && INTEL_INFO(dev_priv)->gen >= 7)
+#define HAS_CUR_FBC(dev_priv)  (!HAS_GMCH_DISPLAY(dev_priv) && INTEL_GEN(dev_priv) >= 7)
 
 #define HAS_IPS(dev_priv)      (IS_HSW_ULT(dev_priv) || IS_BROADWELL(dev_priv))
 
@@ -3191,8 +2824,10 @@ intel_info(const struct drm_i915_private *dev_priv)
 #define HAS_DDI(dev_priv)               ((dev_priv)->info.has_ddi)
 #define HAS_FPGA_DBG_UNCLAIMED(dev_priv) ((dev_priv)->info.has_fpga_dbg)
 #define HAS_PSR(dev_priv)               ((dev_priv)->info.has_psr)
+
 #define HAS_RC6(dev_priv)               ((dev_priv)->info.has_rc6)
 #define HAS_RC6p(dev_priv)              ((dev_priv)->info.has_rc6p)
+#define HAS_RC6pp(dev_priv)             (false) /* HW was never validated */
 
 #define HAS_CSR(dev_priv)      ((dev_priv)->info.has_csr)
 
@@ -3210,8 +2845,16 @@ intel_info(const struct drm_i915_private *dev_priv)
 #define HAS_GUC_CT(dev_priv)   ((dev_priv)->info.has_guc_ct)
 #define HAS_GUC_UCODE(dev_priv)        (HAS_GUC(dev_priv))
 #define HAS_GUC_SCHED(dev_priv)        (HAS_GUC(dev_priv))
+
+/* For now, anything with a GuC has also HuC */
+#define HAS_HUC(dev_priv)      (HAS_GUC(dev_priv))
 #define HAS_HUC_UCODE(dev_priv)        (HAS_GUC(dev_priv))
 
+/* Having a GuC is not the same as using a GuC */
+#define USES_GUC(dev_priv)             intel_uc_is_using_guc()
+#define USES_GUC_SUBMISSION(dev_priv)  intel_uc_is_using_guc_submission()
+#define USES_HUC(dev_priv)             intel_uc_is_using_huc()
+
 #define HAS_RESOURCE_STREAMER(dev_priv) ((dev_priv)->info.has_resource_streamer)
 
 #define HAS_POOLED_EU(dev_priv)        ((dev_priv)->info.has_pooled_eu)
@@ -3229,23 +2872,26 @@ intel_info(const struct drm_i915_private *dev_priv)
 #define INTEL_PCH_KBP_DEVICE_ID_TYPE           0xA280
 #define INTEL_PCH_CNP_DEVICE_ID_TYPE           0xA300
 #define INTEL_PCH_CNP_LP_DEVICE_ID_TYPE                0x9D80
+#define INTEL_PCH_ICP_DEVICE_ID_TYPE           0x3480
 #define INTEL_PCH_P2X_DEVICE_ID_TYPE           0x7100
 #define INTEL_PCH_P3X_DEVICE_ID_TYPE           0x7000
 #define INTEL_PCH_QEMU_DEVICE_ID_TYPE          0x2900 /* qemu q35 has 2918 */
 
 #define INTEL_PCH_TYPE(dev_priv) ((dev_priv)->pch_type)
+#define INTEL_PCH_ID(dev_priv) ((dev_priv)->pch_id)
+#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)
 #define HAS_PCH_CNP_LP(dev_priv) \
-       ((dev_priv)->pch_id == INTEL_PCH_CNP_LP_DEVICE_ID_TYPE)
+       (INTEL_PCH_ID(dev_priv) == INTEL_PCH_CNP_LP_DEVICE_ID_TYPE)
 #define HAS_PCH_KBP(dev_priv) (INTEL_PCH_TYPE(dev_priv) == PCH_KBP)
 #define HAS_PCH_SPT(dev_priv) (INTEL_PCH_TYPE(dev_priv) == PCH_SPT)
 #define HAS_PCH_LPT(dev_priv) (INTEL_PCH_TYPE(dev_priv) == PCH_LPT)
 #define HAS_PCH_LPT_LP(dev_priv) \
-       ((dev_priv)->pch_id == INTEL_PCH_LPT_LP_DEVICE_ID_TYPE || \
-        (dev_priv)->pch_id == INTEL_PCH_WPT_LP_DEVICE_ID_TYPE)
+       (INTEL_PCH_ID(dev_priv) == INTEL_PCH_LPT_LP_DEVICE_ID_TYPE || \
+        INTEL_PCH_ID(dev_priv) == INTEL_PCH_WPT_LP_DEVICE_ID_TYPE)
 #define HAS_PCH_LPT_H(dev_priv) \
-       ((dev_priv)->pch_id == INTEL_PCH_LPT_DEVICE_ID_TYPE || \
-        (dev_priv)->pch_id == INTEL_PCH_WPT_DEVICE_ID_TYPE)
+       (INTEL_PCH_ID(dev_priv) == INTEL_PCH_LPT_DEVICE_ID_TYPE || \
+        INTEL_PCH_ID(dev_priv) == INTEL_PCH_WPT_DEVICE_ID_TYPE)
 #define HAS_PCH_CPT(dev_priv) (INTEL_PCH_TYPE(dev_priv) == PCH_CPT)
 #define HAS_PCH_IBX(dev_priv) (INTEL_PCH_TYPE(dev_priv) == PCH_IBX)
 #define HAS_PCH_NOP(dev_priv) (INTEL_PCH_TYPE(dev_priv) == PCH_NOP)
@@ -3288,8 +2934,6 @@ intel_ggtt_update_needs_vtd_wa(struct drm_i915_private *dev_priv)
 int intel_sanitize_enable_ppgtt(struct drm_i915_private *dev_priv,
                                int enable_ppgtt);
 
-bool intel_sanitize_semaphores(struct drm_i915_private *dev_priv, int value);
-
 /* i915_drv.c */
 void __printf(3, 4)
 __i915_printk(struct drm_i915_private *dev_priv, const char *level,
@@ -3318,7 +2962,9 @@ extern int i915_reset_engine(struct intel_engine_cs *engine,
                             unsigned int flags);
 
 extern bool intel_has_reset_engine(struct drm_i915_private *dev_priv);
-extern int intel_guc_reset(struct drm_i915_private *dev_priv);
+extern int intel_reset_guc(struct drm_i915_private *dev_priv);
+extern int intel_guc_reset_engine(struct intel_guc *guc,
+                                 struct intel_engine_cs *engine);
 extern void intel_engine_init_hangcheck(struct intel_engine_cs *engine);
 extern void intel_hangcheck_init(struct drm_i915_private *dev_priv);
 extern unsigned long i915_chipset_val(struct drm_i915_private *dev_priv);
@@ -3336,8 +2982,10 @@ void intel_hpd_irq_handler(struct drm_i915_private *dev_priv,
 void intel_hpd_init(struct drm_i915_private *dev_priv);
 void intel_hpd_init_work(struct drm_i915_private *dev_priv);
 void intel_hpd_cancel_work(struct drm_i915_private *dev_priv);
-enum port intel_hpd_pin_to_port(enum hpd_pin pin);
-enum hpd_pin intel_hpd_pin(enum port port);
+enum port intel_hpd_pin_to_port(struct drm_i915_private *dev_priv,
+                               enum hpd_pin pin);
+enum hpd_pin intel_hpd_pin_default(struct drm_i915_private *dev_priv,
+                                  enum port port);
 bool intel_hpd_disable(struct drm_i915_private *dev_priv, enum hpd_pin pin);
 void intel_hpd_enable(struct drm_i915_private *dev_priv, enum hpd_pin pin);
 
@@ -3450,10 +3098,10 @@ int i915_gem_set_domain_ioctl(struct drm_device *dev, void *data,
                              struct drm_file *file_priv);
 int i915_gem_sw_finish_ioctl(struct drm_device *dev, void *data,
                             struct drm_file *file_priv);
-int i915_gem_execbuffer(struct drm_device *dev, void *data,
-                       struct drm_file *file_priv);
-int i915_gem_execbuffer2(struct drm_device *dev, void *data,
-                        struct drm_file *file_priv);
+int i915_gem_execbuffer_ioctl(struct drm_device *dev, void *data,
+                             struct drm_file *file_priv);
+int i915_gem_execbuffer2_ioctl(struct drm_device *dev, void *data,
+                              struct drm_file *file_priv);
 int i915_gem_busy_ioctl(struct drm_device *dev, void *data,
                        struct drm_file *file_priv);
 int i915_gem_get_caching_ioctl(struct drm_device *dev, void *data,
@@ -3497,6 +3145,9 @@ void i915_gem_free_object(struct drm_gem_object *obj);
 
 static inline void i915_gem_drain_freed_objects(struct drm_i915_private *i915)
 {
+       if (!atomic_read(&i915->mm.free_count))
+               return;
+
        /* A single pass should suffice to release all the freed objects (along
         * most call paths) , but be a little more paranoid in that freeing
         * the objects does take a little amount of time, during which the rcu
@@ -3768,7 +3419,8 @@ i915_gem_object_set_to_cpu_domain(struct drm_i915_gem_object *obj, bool write);
 struct i915_vma * __must_check
 i915_gem_object_pin_to_display_plane(struct drm_i915_gem_object *obj,
                                     u32 alignment,
-                                    const struct i915_ggtt_view *view);
+                                    const struct i915_ggtt_view *view,
+                                    unsigned int flags);
 void i915_gem_object_unpin_from_display_plane(struct i915_vma *vma);
 int i915_gem_object_attach_phys(struct drm_i915_gem_object *obj,
                                int align);
@@ -3855,6 +3507,8 @@ int __must_check i915_gem_evict_for_node(struct i915_address_space *vm,
                                         unsigned int flags);
 int i915_gem_evict_vm(struct i915_address_space *vm);
 
+void i915_gem_flush_ggtt_writes(struct drm_i915_private *dev_priv);
+
 /* belongs in i915_gem_gtt.h */
 static inline void i915_gem_chipset_flush(struct drm_i915_private *dev_priv)
 {
@@ -3876,12 +3530,13 @@ void i915_gem_stolen_remove_node(struct drm_i915_private *dev_priv,
 int i915_gem_init_stolen(struct drm_i915_private *dev_priv);
 void i915_gem_cleanup_stolen(struct drm_device *dev);
 struct drm_i915_gem_object *
-i915_gem_object_create_stolen(struct drm_i915_private *dev_priv, u32 size);
+i915_gem_object_create_stolen(struct drm_i915_private *dev_priv,
+                             resource_size_t size);
 struct drm_i915_gem_object *
 i915_gem_object_create_stolen_for_preallocated(struct drm_i915_private *dev_priv,
-                                              u32 stolen_offset,
-                                              u32 gtt_offset,
-                                              u32 size);
+                                              resource_size_t stolen_offset,
+                                              resource_size_t gtt_offset,
+                                              resource_size_t size);
 
 /* i915_gem_internal.c */
 struct drm_i915_gem_object *
@@ -3889,7 +3544,7 @@ i915_gem_object_create_internal(struct drm_i915_private *dev_priv,
                                phys_addr_t size);
 
 /* i915_gem_shrinker.c */
-unsigned long i915_gem_shrink(struct drm_i915_private *dev_priv,
+unsigned long i915_gem_shrink(struct drm_i915_private *i915,
                              unsigned long target,
                              unsigned long *nr_scanned,
                              unsigned flags);
@@ -3898,9 +3553,9 @@ unsigned long i915_gem_shrink(struct drm_i915_private *dev_priv,
 #define I915_SHRINK_BOUND 0x4
 #define I915_SHRINK_ACTIVE 0x8
 #define I915_SHRINK_VMAPS 0x10
-unsigned long i915_gem_shrink_all(struct drm_i915_private *dev_priv);
-void i915_gem_shrinker_init(struct drm_i915_private *dev_priv);
-void i915_gem_shrinker_cleanup(struct drm_i915_private *dev_priv);
+unsigned long i915_gem_shrink_all(struct drm_i915_private *i915);
+void i915_gem_shrinker_register(struct drm_i915_private *i915);
+void i915_gem_shrinker_unregister(struct drm_i915_private *i915);
 
 
 /* i915_gem_tiling.c */
@@ -4027,6 +3682,7 @@ extern int intel_setup_gmbus(struct drm_i915_private *dev_priv);
 extern void intel_teardown_gmbus(struct drm_i915_private *dev_priv);
 extern bool intel_gmbus_is_valid_pin(struct drm_i915_private *dev_priv,
                                     unsigned int pin);
+extern int intel_gmbus_output_aksv(struct i2c_adapter *adapter);
 
 extern struct i2c_adapter *
 intel_gmbus_get_adapter(struct drm_i915_private *dev_priv, unsigned int pin);
@@ -4040,6 +3696,7 @@ extern void intel_i2c_reset(struct drm_i915_private *dev_priv);
 
 /* intel_bios.c */
 void intel_bios_init(struct drm_i915_private *dev_priv);
+void intel_bios_cleanup(struct drm_i915_private *dev_priv);
 bool intel_bios_is_valid_vbt(const void *buf, size_t size);
 bool intel_bios_is_tv_present(struct drm_i915_private *dev_priv);
 bool intel_bios_is_lvds_present(struct drm_i915_private *dev_priv, u8 *i2c_pin);
@@ -4052,41 +3709,6 @@ bool intel_bios_is_port_hpd_inverted(struct drm_i915_private *dev_priv,
 bool intel_bios_is_lspcon_present(struct drm_i915_private *dev_priv,
                                enum port port);
 
-
-/* intel_opregion.c */
-#ifdef CONFIG_ACPI
-extern int intel_opregion_setup(struct drm_i915_private *dev_priv);
-extern void intel_opregion_register(struct drm_i915_private *dev_priv);
-extern void intel_opregion_unregister(struct drm_i915_private *dev_priv);
-extern void intel_opregion_asle_intr(struct drm_i915_private *dev_priv);
-extern int intel_opregion_notify_encoder(struct intel_encoder *intel_encoder,
-                                        bool enable);
-extern int intel_opregion_notify_adapter(struct drm_i915_private *dev_priv,
-                                        pci_power_t state);
-extern int intel_opregion_get_panel_type(struct drm_i915_private *dev_priv);
-#else
-static inline int intel_opregion_setup(struct drm_i915_private *dev) { return 0; }
-static inline void intel_opregion_register(struct drm_i915_private *dev_priv) { }
-static inline void intel_opregion_unregister(struct drm_i915_private *dev_priv) { }
-static inline void intel_opregion_asle_intr(struct drm_i915_private *dev_priv)
-{
-}
-static inline int
-intel_opregion_notify_encoder(struct intel_encoder *intel_encoder, bool enable)
-{
-       return 0;
-}
-static inline int
-intel_opregion_notify_adapter(struct drm_i915_private *dev, pci_power_t state)
-{
-       return 0;
-}
-static inline int intel_opregion_get_panel_type(struct drm_i915_private *dev)
-{
-       return -ENODEV;
-}
-#endif
-
 /* intel_acpi.c */
 #ifdef CONFIG_ACPI
 extern void intel_register_dsm_handler(void);
@@ -4103,14 +3725,9 @@ mkwrite_device_info(struct drm_i915_private *dev_priv)
        return (struct intel_device_info *)&dev_priv->info;
 }
 
-const char *intel_platform_name(enum intel_platform platform);
-void intel_device_info_runtime_init(struct drm_i915_private *dev_priv);
-void intel_device_info_dump(struct drm_i915_private *dev_priv);
-
 /* modesetting */
 extern void intel_modeset_init_hw(struct drm_device *dev);
 extern int intel_modeset_init(struct drm_device *dev);
-extern void intel_modeset_gem_init(struct drm_device *dev);
 extern void intel_modeset_cleanup(struct drm_device *dev);
 extern int intel_connector_register(struct drm_connector *);
 extern void intel_connector_unregister(struct drm_connector *);
@@ -4140,7 +3757,12 @@ extern void intel_display_print_error_state(struct drm_i915_error_state_buf *e,
                                            struct intel_display_error_state *error);
 
 int sandybridge_pcode_read(struct drm_i915_private *dev_priv, u32 mbox, u32 *val);
-int sandybridge_pcode_write(struct drm_i915_private *dev_priv, u32 mbox, u32 val);
+int sandybridge_pcode_write_timeout(struct drm_i915_private *dev_priv, u32 mbox,
+                                   u32 val, int fast_timeout_us,
+                                   int slow_timeout_ms);
+#define sandybridge_pcode_write(dev_priv, mbox, val)   \
+       sandybridge_pcode_write_timeout(dev_priv, mbox, val, 500, 0)
+
 int skl_pcode_request(struct drm_i915_private *dev_priv, u32 mbox, u32 request,
                      u32 reply_mask, u32 reply, int timeout_base_ms);
 
@@ -4177,8 +3799,7 @@ bool bxt_ddi_phy_is_enabled(struct drm_i915_private *dev_priv,
                            enum dpio_phy phy);
 bool bxt_ddi_phy_verify_state(struct drm_i915_private *dev_priv,
                              enum dpio_phy phy);
-uint8_t bxt_ddi_phy_calc_lane_lat_optim_mask(struct intel_encoder *encoder,
-                                            uint8_t lane_count);
+uint8_t bxt_ddi_phy_calc_lane_lat_optim_mask(uint8_t lane_count);
 void bxt_ddi_phy_set_lane_optim_mask(struct intel_encoder *encoder,
                                     uint8_t lane_lat_optim_mask);
 uint8_t bxt_ddi_phy_get_lane_lat_optim_mask(struct intel_encoder *encoder);
@@ -4187,24 +3808,39 @@ void chv_set_phy_signal_level(struct intel_encoder *encoder,
                              u32 deemph_reg_value, u32 margin_reg_value,
                              bool uniq_trans_scale);
 void chv_data_lane_soft_reset(struct intel_encoder *encoder,
+                             const struct intel_crtc_state *crtc_state,
                              bool reset);
-void chv_phy_pre_pll_enable(struct intel_encoder *encoder);
-void chv_phy_pre_encoder_enable(struct intel_encoder *encoder);
+void chv_phy_pre_pll_enable(struct intel_encoder *encoder,
+                           const struct intel_crtc_state *crtc_state);
+void chv_phy_pre_encoder_enable(struct intel_encoder *encoder,
+                               const struct intel_crtc_state *crtc_state);
 void chv_phy_release_cl2_override(struct intel_encoder *encoder);
-void chv_phy_post_pll_disable(struct intel_encoder *encoder);
+void chv_phy_post_pll_disable(struct intel_encoder *encoder,
+                             const struct intel_crtc_state *old_crtc_state);
 
 void vlv_set_phy_signal_level(struct intel_encoder *encoder,
                              u32 demph_reg_value, u32 preemph_reg_value,
                              u32 uniqtranscale_reg_value, u32 tx3_demph);
-void vlv_phy_pre_pll_enable(struct intel_encoder *encoder);
-void vlv_phy_pre_encoder_enable(struct intel_encoder *encoder);
-void vlv_phy_reset_lanes(struct intel_encoder *encoder);
+void vlv_phy_pre_pll_enable(struct intel_encoder *encoder,
+                           const struct intel_crtc_state *crtc_state);
+void vlv_phy_pre_encoder_enable(struct intel_encoder *encoder,
+                               const struct intel_crtc_state *crtc_state);
+void vlv_phy_reset_lanes(struct intel_encoder *encoder,
+                        const struct intel_crtc_state *old_crtc_state);
 
 int intel_gpu_freq(struct drm_i915_private *dev_priv, int val);
 int intel_freq_opcode(struct drm_i915_private *dev_priv, int val);
-u64 intel_rc6_residency_us(struct drm_i915_private *dev_priv,
+u64 intel_rc6_residency_ns(struct drm_i915_private *dev_priv,
                           const i915_reg_t reg);
 
+u32 intel_get_cagf(struct drm_i915_private *dev_priv, u32 rpstat1);
+
+static inline u64 intel_rc6_residency_us(struct drm_i915_private *dev_priv,
+                                        const i915_reg_t reg)
+{
+       return DIV_ROUND_UP_ULL(intel_rc6_residency_ns(dev_priv, reg), 1000);
+}
+
 #define I915_READ8(reg)                dev_priv->uncore.funcs.mmio_readb(dev_priv, (reg), true)
 #define I915_WRITE8(reg, val)  dev_priv->uncore.funcs.mmio_writeb(dev_priv, (reg), (val), true)