struct intel_crtc *crtc;
        struct intel_plane *plane;
 
+       if (!HAS_DISPLAY(dev_priv))
+               return 0;
+
        /*
         * We assume the primary plane for pipe A has
         * the highest stride limits of them all,
        struct drm_atomic_state *state;
        int ret;
 
+       if (!HAS_DISPLAY(dev_priv))
+               return 0;
+
        state = drm_atomic_helper_suspend(dev);
        ret = PTR_ERR_OR_ZERO(state);
        if (ret)
  */
 void intel_init_display_hooks(struct drm_i915_private *dev_priv)
 {
+       if (!HAS_DISPLAY(dev_priv))
+               return;
+
        intel_init_cdclk_hooks(dev_priv);
        intel_init_audio_hooks(dev_priv);
 
 
 void intel_modeset_init_hw(struct drm_i915_private *i915)
 {
-       struct intel_cdclk_state *cdclk_state =
-               to_intel_cdclk_state(i915->cdclk.obj.state);
+       struct intel_cdclk_state *cdclk_state;
+
+       if (!HAS_DISPLAY(i915))
+               return;
+
+       cdclk_state = to_intel_cdclk_state(i915->cdclk.obj.state);
 
        intel_update_cdclk(i915);
        intel_dump_cdclk_config(&i915->cdclk.hw, "Current CDCLK");
        /* FIXME: completely on the wrong abstraction layer */
        intel_power_domains_init_hw(i915, false);
 
+       if (!HAS_DISPLAY(i915))
+               return 0;
+
        intel_csr_ucode_init(i915);
 
        i915->modeset_wq = alloc_ordered_workqueue("i915_modeset", 0);
        struct intel_crtc *crtc;
        int ret;
 
+       if (!HAS_DISPLAY(i915))
+               return 0;
+
        intel_init_pm(i915);
 
        intel_panel_sanitize_ssc(i915);
                    INTEL_NUM_PIPES(i915),
                    INTEL_NUM_PIPES(i915) > 1 ? "s" : "");
 
-       if (HAS_DISPLAY(i915)) {
-               for_each_pipe(i915, pipe) {
-                       ret = intel_crtc_init(i915, pipe);
-                       if (ret) {
-                               intel_mode_config_cleanup(i915);
-                               return ret;
-                       }
+       for_each_pipe(i915, pipe) {
+               ret = intel_crtc_init(i915, pipe);
+               if (ret) {
+                       intel_mode_config_cleanup(i915);
+                       return ret;
                }
        }
 
        struct drm_modeset_acquire_ctx ctx;
        int ret;
 
+       if (!HAS_DISPLAY(dev_priv))
+               return;
+
        dev_priv->modeset_restore_state = NULL;
        if (state)
                state->acquire_ctx = &ctx;
 /* part #1: call before irq uninstall */
 void intel_modeset_driver_remove(struct drm_i915_private *i915)
 {
+       if (!HAS_DISPLAY(i915))
+               return;
+
        flush_workqueue(i915->flip_wq);
        flush_workqueue(i915->modeset_wq);
 
 /* part #2: call after irq uninstall */
 void intel_modeset_driver_remove_noirq(struct drm_i915_private *i915)
 {
+       if (!HAS_DISPLAY(i915))
+               return;
+
        /*
         * Due to the hpd irq storm handling the hotplug work can re-arm the
         * poll handlers. Hence disable polling after hpd handling is shut down.
 
 {
        u32 val;
 
+       if (!HAS_DISPLAY(dev_priv))
+               return;
+
        val = intel_de_read(dev_priv, DC_STATE_EN) & gen9_dc_mask(dev_priv);
 
        drm_dbg_kms(&dev_priv->drm,
        u32 val;
        u32 mask;
 
+       if (!HAS_DISPLAY(dev_priv))
+               return;
+
        if (drm_WARN_ON_ONCE(&dev_priv->drm,
                             state & ~dev_priv->csr.allowed_dc_mask))
                state &= dev_priv->csr.allowed_dc_mask;
 
        gen9_set_dc_state(dev_priv, DC_STATE_DISABLE);
 
+       if (!HAS_DISPLAY(dev_priv))
+               return;
+
        dev_priv->display.get_cdclk(dev_priv, &cdclk_config);
        /* Can't read out voltage_level so can't use intel_cdclk_changed() */
        drm_WARN_ON(&dev_priv->drm,
        int requested_dc;
        int max_dc;
 
+       if (!HAS_DISPLAY(dev_priv))
+               return 0;
+
        if (IS_DG1(dev_priv))
                max_dc = 3;
        else if (DISPLAY_VER(dev_priv) >= 12)
        /* enable PCH reset handshake */
        intel_pch_reset_handshake(dev_priv, !HAS_PCH_NOP(dev_priv));
 
+       if (!HAS_DISPLAY(dev_priv))
+               return;
+
        /* enable PG1 and Misc I/O */
        mutex_lock(&power_domains->lock);
 
        struct i915_power_domains *power_domains = &dev_priv->power_domains;
        struct i915_power_well *well;
 
+       if (!HAS_DISPLAY(dev_priv))
+               return;
+
        gen9_disable_dc_states(dev_priv);
 
        gen9_dbuf_disable(dev_priv);
         */
        intel_pch_reset_handshake(dev_priv, false);
 
+       if (!HAS_DISPLAY(dev_priv))
+               return;
+
        /* Enable PG1 */
        mutex_lock(&power_domains->lock);
 
        struct i915_power_domains *power_domains = &dev_priv->power_domains;
        struct i915_power_well *well;
 
+       if (!HAS_DISPLAY(dev_priv))
+               return;
+
        gen9_disable_dc_states(dev_priv);
 
        gen9_dbuf_disable(dev_priv);
        /* 1. Enable PCH Reset Handshake */
        intel_pch_reset_handshake(dev_priv, !HAS_PCH_NOP(dev_priv));
 
+       if (!HAS_DISPLAY(dev_priv))
+               return;
+
        /* 2-3. */
        intel_combo_phy_init(dev_priv);
 
        struct i915_power_domains *power_domains = &dev_priv->power_domains;
        struct i915_power_well *well;
 
+       if (!HAS_DISPLAY(dev_priv))
+               return;
+
        gen9_disable_dc_states(dev_priv);
 
        /* 1. Disable all display engine functions -> aready done */
        /* 1. Enable PCH reset handshake. */
        intel_pch_reset_handshake(dev_priv, !HAS_PCH_NOP(dev_priv));
 
+       if (!HAS_DISPLAY(dev_priv))
+               return;
+
        /* 2. Initialize all combo phys */
        intel_combo_phy_init(dev_priv);
 
        struct i915_power_domains *power_domains = &dev_priv->power_domains;
        struct i915_power_well *well;
 
+       if (!HAS_DISPLAY(dev_priv))
+               return;
+
        gen9_disable_dc_states(dev_priv);
 
        /* 1. Disable all display engine functions -> aready done */
 
 {
        struct intel_encoder *encoder;
 
+       if (!HAS_DISPLAY(dev_priv))
+               return;
+
        for_each_intel_encoder(&dev_priv->drm, encoder) {
                struct intel_dp *intel_dp;
 
 {
        struct intel_encoder *encoder;
 
+       if (!HAS_DISPLAY(dev_priv))
+               return;
+
        for_each_intel_encoder(&dev_priv->drm, encoder) {
                struct intel_dp *intel_dp;
                int ret;
 
        unsigned int pin;
        int ret;
 
-       if (!HAS_DISPLAY(dev_priv))
-               return 0;
-
        if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv))
                dev_priv->gpio_mmio_base = VLV_DISPLAY_BASE;
        else if (!HAS_GMCH(dev_priv))
 
 {
        int i;
 
+       if (!HAS_DISPLAY(dev_priv))
+               return;
+
        for_each_hpd_pin(i) {
                dev_priv->hotplug.stats[i].count = 0;
                dev_priv->hotplug.stats[i].state = HPD_ENABLED;
  */
 void intel_hpd_poll_enable(struct drm_i915_private *dev_priv)
 {
+       if (!HAS_DISPLAY(dev_priv))
+               return;
+
        WRITE_ONCE(dev_priv->hotplug.poll_enabled, true);
 
        /*
  */
 void intel_hpd_poll_disable(struct drm_i915_private *dev_priv)
 {
+       if (!HAS_DISPLAY(dev_priv))
+               return;
+
        WRITE_ONCE(dev_priv->hotplug.poll_enabled, false);
        schedule_work(&dev_priv->hotplug.poll_init_work);
 }
 
 void intel_hpd_cancel_work(struct drm_i915_private *dev_priv)
 {
+       if (!HAS_DISPLAY(dev_priv))
+               return;
+
        spin_lock_irq(&dev_priv->irq_lock);
 
        dev_priv->hotplug.long_port_mask = 0;
 
        if (drm_WARN_ON(&dev_priv->drm, !IS_LP(dev_priv)))
                return;
 
+       if (!HAS_DISPLAY(dev_priv))
+               return;
+
        /*
         * We can't grab pps_mutex here due to deadlock with power_domain
         * mutex when power_domain functions are called while holding pps_mutex.
        int pps_num;
        int pps_idx;
 
-       if (HAS_DDI(dev_priv))
+       if (!HAS_DISPLAY(dev_priv) || HAS_DDI(dev_priv))
                return;
        /*
         * This w/a is needed at least on CPT/PPT, but to be sure apply it
 
  */
 static void i915_driver_lastclose(struct drm_device *dev)
 {
+       struct drm_i915_private *i915 = to_i915(dev);
+
        intel_fbdev_restore_mode(dev);
-       vga_switcheroo_process_delayed_switch();
+
+       if (HAS_DISPLAY(i915))
+               vga_switcheroo_process_delayed_switch();
 }
 
 static void i915_driver_postclose(struct drm_device *dev, struct drm_file *file)
        struct drm_device *dev = &dev_priv->drm;
        struct intel_encoder *encoder;
 
+       if (!HAS_DISPLAY(dev_priv))
+               return;
+
        drm_modeset_lock_all(dev);
        for_each_intel_encoder(dev, encoder)
                if (encoder->suspend)
        struct drm_device *dev = &dev_priv->drm;
        struct intel_encoder *encoder;
 
+       if (!HAS_DISPLAY(dev_priv))
+               return;
+
        drm_modeset_lock_all(dev);
        for_each_intel_encoder(dev, encoder)
                if (encoder->shutdown)
 
        i915_gem_suspend(i915);
 
-       drm_kms_helper_poll_disable(&i915->drm);
+       if (HAS_DISPLAY(i915)) {
+               drm_kms_helper_poll_disable(&i915->drm);
 
-       drm_atomic_helper_shutdown(&i915->drm);
+               drm_atomic_helper_shutdown(&i915->drm);
+       }
 
        intel_dp_mst_suspend(i915);
 
        /* We do a lot of poking in a lot of registers, make sure they work
         * properly. */
        intel_power_domains_disable(dev_priv);
-
-       drm_kms_helper_poll_disable(dev);
+       if (HAS_DISPLAY(dev_priv))
+               drm_kms_helper_poll_disable(dev);
 
        pci_save_state(pdev);
 
         */
        intel_runtime_pm_enable_interrupts(dev_priv);
 
-       drm_mode_config_reset(dev);
+       if (HAS_DISPLAY(dev_priv))
+               drm_mode_config_reset(dev);
 
        i915_gem_resume(dev_priv);
 
        intel_display_resume(dev);
 
        intel_hpd_poll_disable(dev_priv);
-       drm_kms_helper_poll_enable(dev);
+       if (HAS_DISPLAY(dev_priv))
+               drm_kms_helper_poll_enable(dev);
 
        intel_opregion_resume(dev_priv);
 
 
 {
        struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev);
 
+       if (!HAS_DISPLAY(dev_priv))
+               return;
+
        /* Display arbitration control */
        if (INTEL_GEN(dev_priv) <= 4)
                dev_priv->regfile.saveDSPARB = intel_de_read(dev_priv, DSPARB);
 {
        struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev);
 
+       if (!HAS_DISPLAY(dev_priv))
+               return;
+
        intel_restore_swf(dev_priv);
 
        if (IS_GEN(dev_priv, 4))