bool is_hdcp_supported(struct drm_i915_private *dev_priv, enum port port)
 {
        /* PORT E doesn't have HDCP, and PORT F is disabled */
-       return INTEL_GEN(dev_priv) >= 9 && port < PORT_E;
+       return INTEL_INFO(dev_priv)->display.has_hdcp && port < PORT_E;
 }
 
 static int
 
        .has_logical_ring_preemption = 1, \
        .display.has_csr = 1, \
        .has_gt_uc = 1, \
+       .display.has_hdcp = 1, \
        .display.has_ipc = 1, \
        .ddb_size = 896
 
        .display.has_ddi = 1, \
        .has_fpga_dbg = 1, \
        .display.has_fbc = 1, \
+       .display.has_hdcp = 1, \
        .display.has_psr = 1, \
        .has_runtime_pm = 1, \
        .display.has_csr = 1, \
 
 #define   CNL_DDI_CLOCK_REG_ACCESS_ON  (1 << 7)
 
 #define SKL_DFSM                       _MMIO(0x51000)
+#define   SKL_DFSM_DISPLAY_HDCP_DISABLE        (1 << 25)
 #define   SKL_DFSM_CDCLK_LIMIT_MASK    (3 << 23)
 #define   SKL_DFSM_CDCLK_LIMIT_675     (0 << 23)
 #define   SKL_DFSM_CDCLK_LIMIT_540     (1 << 23)
 
                                  enabled_mask);
                else
                        info->pipe_mask = enabled_mask;
+
+               if (dfsm & SKL_DFSM_DISPLAY_HDCP_DISABLE)
+                       info->display.has_hdcp = 0;
        }
 
        /* Initialize slice/subslice/EU info */
 
        func(has_dsb); \
        func(has_fbc); \
        func(has_gmch); \
+       func(has_hdcp); \
        func(has_hotplug); \
        func(has_ipc); \
        func(has_modular_fia); \