Commit 18e0deee authored by Matt Roper's avatar Matt Roper

drm/i915/display: Move display runtime info to display structure

Move the runtime info specific to display into display-specific
structures as has already been done with the constant display info.

v2:
 - Rename __runtime to __runtime_defaults for more clarity on the
   purpose.  (Andrzej)
 - Move introduction of DISPLAY_INFO() to previous patch.  (Andrzej)
 - Drop NO_DISPLAY macro.  (Andrzej)
v3:
 - Use "{}" instead of "{ 0 }" for empty struct init.  (Jani)

Cc: Andrzej Hajda <andrzej.hajda@intel.com>
Signed-off-by: default avatarMatt Roper <matthew.d.roper@intel.com>
Reviewed-by: default avatarAndrzej Hajda <andrzej.hajda@intel.com>
Acked-by: default avatarJani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20230523195609.73627-4-matthew.d.roper@intel.com
parent 5af5169d
...@@ -306,7 +306,7 @@ int intel_crtc_init(struct drm_i915_private *dev_priv, enum pipe pipe) ...@@ -306,7 +306,7 @@ int intel_crtc_init(struct drm_i915_private *dev_priv, enum pipe pipe)
return PTR_ERR(crtc); return PTR_ERR(crtc);
crtc->pipe = pipe; crtc->pipe = pipe;
crtc->num_scalers = RUNTIME_INFO(dev_priv)->num_scalers[pipe]; crtc->num_scalers = DISPLAY_RUNTIME_INFO(dev_priv)->num_scalers[pipe];
if (DISPLAY_VER(dev_priv) >= 9) if (DISPLAY_VER(dev_priv) >= 9)
primary = skl_universal_plane_create(dev_priv, pipe, primary = skl_universal_plane_create(dev_priv, pipe,
......
...@@ -814,7 +814,7 @@ intel_cursor_plane_create(struct drm_i915_private *dev_priv, ...@@ -814,7 +814,7 @@ intel_cursor_plane_create(struct drm_i915_private *dev_priv,
DRM_MODE_ROTATE_0 | DRM_MODE_ROTATE_0 |
DRM_MODE_ROTATE_180); DRM_MODE_ROTATE_180);
zpos = RUNTIME_INFO(dev_priv)->num_sprites[pipe] + 1; zpos = DISPLAY_RUNTIME_INFO(dev_priv)->num_sprites[pipe] + 1;
drm_plane_create_zpos_immutable_property(&cursor->base, zpos); drm_plane_create_zpos_immutable_property(&cursor->base, zpos);
if (DISPLAY_VER(dev_priv) >= 12) if (DISPLAY_VER(dev_priv) >= 12)
......
...@@ -3366,7 +3366,7 @@ static u8 bigjoiner_pipes(struct drm_i915_private *i915) ...@@ -3366,7 +3366,7 @@ static u8 bigjoiner_pipes(struct drm_i915_private *i915)
else else
pipes = 0; pipes = 0;
return pipes & RUNTIME_INFO(i915)->pipe_mask; return pipes & DISPLAY_RUNTIME_INFO(i915)->pipe_mask;
} }
static bool transcoder_ddi_func_is_enabled(struct drm_i915_private *dev_priv, static bool transcoder_ddi_func_is_enabled(struct drm_i915_private *dev_priv,
......
...@@ -105,7 +105,7 @@ enum i9xx_plane_id { ...@@ -105,7 +105,7 @@ enum i9xx_plane_id {
}; };
#define plane_name(p) ((p) + 'A') #define plane_name(p) ((p) + 'A')
#define sprite_name(p, s) ((p) * RUNTIME_INFO(dev_priv)->num_sprites[(p)] + (s) + 'A') #define sprite_name(p, s) ((p) * DISPLAY_RUNTIME_INFO(dev_priv)->num_sprites[(p)] + (s) + 'A')
#define for_each_plane_id_on_crtc(__crtc, __p) \ #define for_each_plane_id_on_crtc(__crtc, __p) \
for ((__p) = PLANE_PRIMARY; (__p) < I915_MAX_PLANES; (__p)++) \ for ((__p) = PLANE_PRIMARY; (__p) < I915_MAX_PLANES; (__p)++) \
...@@ -221,7 +221,7 @@ enum phy_fia { ...@@ -221,7 +221,7 @@ enum phy_fia {
#define for_each_pipe(__dev_priv, __p) \ #define for_each_pipe(__dev_priv, __p) \
for ((__p) = 0; (__p) < I915_MAX_PIPES; (__p)++) \ for ((__p) = 0; (__p) < I915_MAX_PIPES; (__p)++) \
for_each_if(RUNTIME_INFO(__dev_priv)->pipe_mask & BIT(__p)) for_each_if(DISPLAY_RUNTIME_INFO(__dev_priv)->pipe_mask & BIT(__p))
#define for_each_pipe_masked(__dev_priv, __p, __mask) \ #define for_each_pipe_masked(__dev_priv, __p, __mask) \
for_each_pipe(__dev_priv, __p) \ for_each_pipe(__dev_priv, __p) \
...@@ -229,7 +229,7 @@ enum phy_fia { ...@@ -229,7 +229,7 @@ enum phy_fia {
#define for_each_cpu_transcoder(__dev_priv, __t) \ #define for_each_cpu_transcoder(__dev_priv, __t) \
for ((__t) = 0; (__t) < I915_MAX_TRANSCODERS; (__t)++) \ for ((__t) = 0; (__t) < I915_MAX_TRANSCODERS; (__t)++) \
for_each_if (RUNTIME_INFO(__dev_priv)->cpu_transcoder_mask & BIT(__t)) for_each_if (DISPLAY_RUNTIME_INFO(__dev_priv)->cpu_transcoder_mask & BIT(__t))
#define for_each_cpu_transcoder_masked(__dev_priv, __t, __mask) \ #define for_each_cpu_transcoder_masked(__dev_priv, __t, __mask) \
for_each_cpu_transcoder(__dev_priv, __t) \ for_each_cpu_transcoder(__dev_priv, __t) \
...@@ -237,7 +237,7 @@ enum phy_fia { ...@@ -237,7 +237,7 @@ enum phy_fia {
#define for_each_sprite(__dev_priv, __p, __s) \ #define for_each_sprite(__dev_priv, __p, __s) \
for ((__s) = 0; \ for ((__s) = 0; \
(__s) < RUNTIME_INFO(__dev_priv)->num_sprites[(__p)]; \ (__s) < DISPLAY_RUNTIME_INFO(__dev_priv)->num_sprites[(__p)]; \
(__s)++) (__s)++)
#define for_each_port(__port) \ #define for_each_port(__port) \
......
...@@ -29,7 +29,30 @@ ...@@ -29,7 +29,30 @@
func(overlay_needs_physical); \ func(overlay_needs_physical); \
func(supports_tv); func(supports_tv);
struct intel_display_runtime_info {
struct {
u16 ver;
u16 rel;
u16 step;
} ip;
u8 pipe_mask;
u8 cpu_transcoder_mask;
u8 num_sprites[I915_MAX_PIPES];
u8 num_scalers[I915_MAX_PIPES];
u8 fbc_mask;
bool has_hdcp;
bool has_dmc;
bool has_dsc;
};
struct intel_display_device_info { struct intel_display_device_info {
/* Initial runtime info. */
const struct intel_display_runtime_info __runtime_defaults;
u8 abox_mask; u8 abox_mask;
struct { struct {
......
...@@ -56,7 +56,7 @@ ...@@ -56,7 +56,7 @@
#define for_each_fbc_id(__dev_priv, __fbc_id) \ #define for_each_fbc_id(__dev_priv, __fbc_id) \
for ((__fbc_id) = INTEL_FBC_A; (__fbc_id) < I915_MAX_FBCS; (__fbc_id)++) \ for ((__fbc_id) = INTEL_FBC_A; (__fbc_id) < I915_MAX_FBCS; (__fbc_id)++) \
for_each_if(RUNTIME_INFO(__dev_priv)->fbc_mask & BIT(__fbc_id)) for_each_if(DISPLAY_RUNTIME_INFO(__dev_priv)->fbc_mask & BIT(__fbc_id))
#define for_each_intel_fbc(__dev_priv, __fbc, __fbc_id) \ #define for_each_intel_fbc(__dev_priv, __fbc, __fbc_id) \
for_each_fbc_id((__dev_priv), (__fbc_id)) \ for_each_fbc_id((__dev_priv), (__fbc_id)) \
...@@ -1708,10 +1708,10 @@ void intel_fbc_init(struct drm_i915_private *i915) ...@@ -1708,10 +1708,10 @@ void intel_fbc_init(struct drm_i915_private *i915)
enum intel_fbc_id fbc_id; enum intel_fbc_id fbc_id;
if (!drm_mm_initialized(&i915->mm.stolen)) if (!drm_mm_initialized(&i915->mm.stolen))
RUNTIME_INFO(i915)->fbc_mask = 0; DISPLAY_RUNTIME_INFO(i915)->fbc_mask = 0;
if (need_fbc_vtd_wa(i915)) if (need_fbc_vtd_wa(i915))
RUNTIME_INFO(i915)->fbc_mask = 0; DISPLAY_RUNTIME_INFO(i915)->fbc_mask = 0;
i915->params.enable_fbc = intel_sanitize_fbc_option(i915); i915->params.enable_fbc = intel_sanitize_fbc_option(i915);
drm_dbg_kms(&i915->drm, "Sanitized enable_fbc value: %d\n", drm_dbg_kms(&i915->drm, "Sanitized enable_fbc value: %d\n",
......
...@@ -1103,7 +1103,7 @@ static void intel_hdcp_prop_work(struct work_struct *work) ...@@ -1103,7 +1103,7 @@ static void intel_hdcp_prop_work(struct work_struct *work)
bool is_hdcp_supported(struct drm_i915_private *dev_priv, enum port port) bool is_hdcp_supported(struct drm_i915_private *dev_priv, enum port port)
{ {
return RUNTIME_INFO(dev_priv)->has_hdcp && return DISPLAY_RUNTIME_INFO(dev_priv)->has_hdcp &&
(DISPLAY_VER(dev_priv) >= 12 || port < PORT_E); (DISPLAY_VER(dev_priv) >= 12 || port < PORT_E);
} }
......
...@@ -1944,7 +1944,7 @@ static enum intel_fbc_id skl_fbc_id_for_pipe(enum pipe pipe) ...@@ -1944,7 +1944,7 @@ static enum intel_fbc_id skl_fbc_id_for_pipe(enum pipe pipe)
static bool skl_plane_has_fbc(struct drm_i915_private *dev_priv, static bool skl_plane_has_fbc(struct drm_i915_private *dev_priv,
enum intel_fbc_id fbc_id, enum plane_id plane_id) enum intel_fbc_id fbc_id, enum plane_id plane_id)
{ {
if ((RUNTIME_INFO(dev_priv)->fbc_mask & BIT(fbc_id)) == 0) if ((DISPLAY_RUNTIME_INFO(dev_priv)->fbc_mask & BIT(fbc_id)) == 0)
return false; return false;
return plane_id == PLANE_PRIMARY; return plane_id == PLANE_PRIMARY;
......
...@@ -205,6 +205,7 @@ struct drm_i915_private { ...@@ -205,6 +205,7 @@ struct drm_i915_private {
const struct intel_device_info __info; /* Use INTEL_INFO() to access. */ const struct intel_device_info __info; /* Use INTEL_INFO() to access. */
struct intel_runtime_info __runtime; /* Use RUNTIME_INFO() to access. */ struct intel_runtime_info __runtime; /* Use RUNTIME_INFO() to access. */
struct intel_display_runtime_info __display_runtime; /* Access with DISPLAY_RUNTIME_INFO() */
struct intel_driver_caps caps; struct intel_driver_caps caps;
struct i915_dsm dsm; struct i915_dsm dsm;
...@@ -410,6 +411,7 @@ static inline struct intel_gt *to_gt(struct drm_i915_private *i915) ...@@ -410,6 +411,7 @@ static inline struct intel_gt *to_gt(struct drm_i915_private *i915)
#define INTEL_INFO(dev_priv) (&(dev_priv)->__info) #define INTEL_INFO(dev_priv) (&(dev_priv)->__info)
#define DISPLAY_INFO(i915) (INTEL_INFO(i915)->display) #define DISPLAY_INFO(i915) (INTEL_INFO(i915)->display)
#define RUNTIME_INFO(dev_priv) (&(dev_priv)->__runtime) #define RUNTIME_INFO(dev_priv) (&(dev_priv)->__runtime)
#define DISPLAY_RUNTIME_INFO(i915) (&(i915)->__display_runtime)
#define DRIVER_CAPS(dev_priv) (&(dev_priv)->caps) #define DRIVER_CAPS(dev_priv) (&(dev_priv)->caps)
#define INTEL_DEVID(dev_priv) (RUNTIME_INFO(dev_priv)->device_id) #define INTEL_DEVID(dev_priv) (RUNTIME_INFO(dev_priv)->device_id)
...@@ -428,7 +430,7 @@ static inline struct intel_gt *to_gt(struct drm_i915_private *i915) ...@@ -428,7 +430,7 @@ static inline struct intel_gt *to_gt(struct drm_i915_private *i915)
#define IS_MEDIA_VER(i915, from, until) \ #define IS_MEDIA_VER(i915, from, until) \
(MEDIA_VER(i915) >= (from) && MEDIA_VER(i915) <= (until)) (MEDIA_VER(i915) >= (from) && MEDIA_VER(i915) <= (until))
#define DISPLAY_VER(i915) (RUNTIME_INFO(i915)->display.ip.ver) #define DISPLAY_VER(i915) (DISPLAY_RUNTIME_INFO(i915)->ip.ver)
#define IS_DISPLAY_VER(i915, from, until) \ #define IS_DISPLAY_VER(i915, from, until) \
(DISPLAY_VER(i915) >= (from) && DISPLAY_VER(i915) <= (until)) (DISPLAY_VER(i915) >= (from) && DISPLAY_VER(i915) <= (until))
...@@ -811,7 +813,7 @@ IS_SUBPLATFORM(const struct drm_i915_private *i915, ...@@ -811,7 +813,7 @@ IS_SUBPLATFORM(const struct drm_i915_private *i915,
#define I915_HAS_HOTPLUG(dev_priv) (DISPLAY_INFO(dev_priv)->has_hotplug) #define I915_HAS_HOTPLUG(dev_priv) (DISPLAY_INFO(dev_priv)->has_hotplug)
#define HAS_FW_BLC(dev_priv) (DISPLAY_VER(dev_priv) > 2) #define HAS_FW_BLC(dev_priv) (DISPLAY_VER(dev_priv) > 2)
#define HAS_FBC(dev_priv) (RUNTIME_INFO(dev_priv)->fbc_mask != 0) #define HAS_FBC(dev_priv) (DISPLAY_RUNTIME_INFO(dev_priv)->fbc_mask != 0)
#define HAS_CUR_FBC(dev_priv) (!HAS_GMCH(dev_priv) && DISPLAY_VER(dev_priv) >= 7) #define HAS_CUR_FBC(dev_priv) (!HAS_GMCH(dev_priv) && DISPLAY_VER(dev_priv) >= 7)
#define HAS_DPT(dev_priv) (DISPLAY_VER(dev_priv) >= 13) #define HAS_DPT(dev_priv) (DISPLAY_VER(dev_priv) >= 13)
...@@ -831,7 +833,7 @@ IS_SUBPLATFORM(const struct drm_i915_private *i915, ...@@ -831,7 +833,7 @@ IS_SUBPLATFORM(const struct drm_i915_private *i915,
#define HAS_PSR_HW_TRACKING(dev_priv) \ #define HAS_PSR_HW_TRACKING(dev_priv) \
(DISPLAY_INFO(dev_priv)->has_psr_hw_tracking) (DISPLAY_INFO(dev_priv)->has_psr_hw_tracking)
#define HAS_PSR2_SEL_FETCH(dev_priv) (DISPLAY_VER(dev_priv) >= 12) #define HAS_PSR2_SEL_FETCH(dev_priv) (DISPLAY_VER(dev_priv) >= 12)
#define HAS_TRANSCODER(dev_priv, trans) ((RUNTIME_INFO(dev_priv)->cpu_transcoder_mask & BIT(trans)) != 0) #define HAS_TRANSCODER(dev_priv, trans) ((DISPLAY_RUNTIME_INFO(dev_priv)->cpu_transcoder_mask & BIT(trans)) != 0)
#define HAS_RC6(dev_priv) (INTEL_INFO(dev_priv)->has_rc6) #define HAS_RC6(dev_priv) (INTEL_INFO(dev_priv)->has_rc6)
#define HAS_RC6p(dev_priv) (INTEL_INFO(dev_priv)->has_rc6p) #define HAS_RC6p(dev_priv) (INTEL_INFO(dev_priv)->has_rc6p)
...@@ -839,9 +841,9 @@ IS_SUBPLATFORM(const struct drm_i915_private *i915, ...@@ -839,9 +841,9 @@ IS_SUBPLATFORM(const struct drm_i915_private *i915,
#define HAS_RPS(dev_priv) (INTEL_INFO(dev_priv)->has_rps) #define HAS_RPS(dev_priv) (INTEL_INFO(dev_priv)->has_rps)
#define HAS_DMC(dev_priv) (RUNTIME_INFO(dev_priv)->has_dmc) #define HAS_DMC(dev_priv) (DISPLAY_RUNTIME_INFO(dev_priv)->has_dmc)
#define HAS_DSB(dev_priv) (DISPLAY_INFO(dev_priv)->has_dsb) #define HAS_DSB(dev_priv) (DISPLAY_INFO(dev_priv)->has_dsb)
#define HAS_DSC(__i915) (RUNTIME_INFO(__i915)->has_dsc) #define HAS_DSC(__i915) (DISPLAY_RUNTIME_INFO(__i915)->has_dsc)
#define HAS_HW_SAGV_WM(i915) (DISPLAY_VER(i915) >= 13 && !IS_DGFX(i915)) #define HAS_HW_SAGV_WM(i915) (DISPLAY_VER(i915) >= 13 && !IS_DGFX(i915))
#define HAS_HECI_PXP(dev_priv) \ #define HAS_HECI_PXP(dev_priv) \
...@@ -903,9 +905,9 @@ IS_SUBPLATFORM(const struct drm_i915_private *i915, ...@@ -903,9 +905,9 @@ IS_SUBPLATFORM(const struct drm_i915_private *i915,
#define NUM_L3_SLICES(dev_priv) (IS_HSW_GT3(dev_priv) ? \ #define NUM_L3_SLICES(dev_priv) (IS_HSW_GT3(dev_priv) ? \
2 : HAS_L3_DPF(dev_priv)) 2 : HAS_L3_DPF(dev_priv))
#define INTEL_NUM_PIPES(dev_priv) (hweight8(RUNTIME_INFO(dev_priv)->pipe_mask)) #define INTEL_NUM_PIPES(dev_priv) (hweight8(DISPLAY_RUNTIME_INFO(dev_priv)->pipe_mask))
#define HAS_DISPLAY(dev_priv) (RUNTIME_INFO(dev_priv)->pipe_mask != 0) #define HAS_DISPLAY(dev_priv) (DISPLAY_RUNTIME_INFO(dev_priv)->pipe_mask != 0)
#define HAS_VRR(i915) (DISPLAY_VER(i915) >= 11) #define HAS_VRR(i915) (DISPLAY_VER(i915) >= 11)
......
This diff is collapsed.
...@@ -95,6 +95,9 @@ void intel_device_info_print(const struct intel_device_info *info, ...@@ -95,6 +95,9 @@ void intel_device_info_print(const struct intel_device_info *info,
const struct intel_runtime_info *runtime, const struct intel_runtime_info *runtime,
struct drm_printer *p) struct drm_printer *p)
{ {
const struct intel_display_runtime_info *display_runtime =
&info->display->__runtime_defaults;
if (runtime->graphics.ip.rel) if (runtime->graphics.ip.rel)
drm_printf(p, "graphics version: %u.%02u\n", drm_printf(p, "graphics version: %u.%02u\n",
runtime->graphics.ip.ver, runtime->graphics.ip.ver,
...@@ -111,13 +114,13 @@ void intel_device_info_print(const struct intel_device_info *info, ...@@ -111,13 +114,13 @@ void intel_device_info_print(const struct intel_device_info *info,
drm_printf(p, "media version: %u\n", drm_printf(p, "media version: %u\n",
runtime->media.ip.ver); runtime->media.ip.ver);
if (runtime->display.ip.rel) if (display_runtime->ip.rel)
drm_printf(p, "display version: %u.%02u\n", drm_printf(p, "display version: %u.%02u\n",
runtime->display.ip.ver, display_runtime->ip.ver,
runtime->display.ip.rel); display_runtime->ip.rel);
else else
drm_printf(p, "display version: %u\n", drm_printf(p, "display version: %u\n",
runtime->display.ip.ver); display_runtime->ip.ver);
drm_printf(p, "graphics stepping: %s\n", intel_step_name(runtime->step.graphics_step)); drm_printf(p, "graphics stepping: %s\n", intel_step_name(runtime->step.graphics_step));
drm_printf(p, "media stepping: %s\n", intel_step_name(runtime->step.media_step)); drm_printf(p, "media stepping: %s\n", intel_step_name(runtime->step.media_step));
...@@ -142,9 +145,9 @@ void intel_device_info_print(const struct intel_device_info *info, ...@@ -142,9 +145,9 @@ void intel_device_info_print(const struct intel_device_info *info,
DEV_INFO_DISPLAY_FOR_EACH_FLAG(PRINT_FLAG); DEV_INFO_DISPLAY_FOR_EACH_FLAG(PRINT_FLAG);
#undef PRINT_FLAG #undef PRINT_FLAG
drm_printf(p, "has_hdcp: %s\n", str_yes_no(runtime->has_hdcp)); drm_printf(p, "has_hdcp: %s\n", str_yes_no(display_runtime->has_hdcp));
drm_printf(p, "has_dmc: %s\n", str_yes_no(runtime->has_dmc)); drm_printf(p, "has_dmc: %s\n", str_yes_no(display_runtime->has_dmc));
drm_printf(p, "has_dsc: %s\n", str_yes_no(runtime->has_dsc)); drm_printf(p, "has_dsc: %s\n", str_yes_no(display_runtime->has_dsc));
drm_printf(p, "rawclk rate: %u kHz\n", runtime->rawclk_freq); drm_printf(p, "rawclk rate: %u kHz\n", runtime->rawclk_freq);
} }
...@@ -342,6 +345,7 @@ static void ip_ver_read(struct drm_i915_private *i915, u32 offset, struct intel_ ...@@ -342,6 +345,7 @@ static void ip_ver_read(struct drm_i915_private *i915, u32 offset, struct intel_
static void intel_ipver_early_init(struct drm_i915_private *i915) static void intel_ipver_early_init(struct drm_i915_private *i915)
{ {
struct intel_runtime_info *runtime = RUNTIME_INFO(i915); struct intel_runtime_info *runtime = RUNTIME_INFO(i915);
struct intel_display_runtime_info *display_runtime = DISPLAY_RUNTIME_INFO(i915);
if (!HAS_GMD_ID(i915)) { if (!HAS_GMD_ID(i915)) {
drm_WARN_ON(&i915->drm, RUNTIME_INFO(i915)->graphics.ip.ver > 12); drm_WARN_ON(&i915->drm, RUNTIME_INFO(i915)->graphics.ip.ver > 12);
...@@ -363,7 +367,7 @@ static void intel_ipver_early_init(struct drm_i915_private *i915) ...@@ -363,7 +367,7 @@ static void intel_ipver_early_init(struct drm_i915_private *i915)
RUNTIME_INFO(i915)->graphics.ip.rel = 70; RUNTIME_INFO(i915)->graphics.ip.rel = 70;
} }
ip_ver_read(i915, i915_mmio_reg_offset(GMD_ID_DISPLAY), ip_ver_read(i915, i915_mmio_reg_offset(GMD_ID_DISPLAY),
&runtime->display.ip); (struct intel_ip_version *)&display_runtime->ip);
ip_ver_read(i915, i915_mmio_reg_offset(GMD_ID_MEDIA), ip_ver_read(i915, i915_mmio_reg_offset(GMD_ID_MEDIA),
&runtime->media.ip); &runtime->media.ip);
} }
...@@ -410,32 +414,34 @@ void intel_device_info_runtime_init(struct drm_i915_private *dev_priv) ...@@ -410,32 +414,34 @@ void intel_device_info_runtime_init(struct drm_i915_private *dev_priv)
{ {
struct intel_device_info *info = mkwrite_device_info(dev_priv); struct intel_device_info *info = mkwrite_device_info(dev_priv);
struct intel_runtime_info *runtime = RUNTIME_INFO(dev_priv); struct intel_runtime_info *runtime = RUNTIME_INFO(dev_priv);
struct intel_display_runtime_info *display_runtime =
DISPLAY_RUNTIME_INFO(dev_priv);
enum pipe pipe; enum pipe pipe;
/* Wa_14011765242: adl-s A0,A1 */ /* Wa_14011765242: adl-s A0,A1 */
if (IS_ADLS_DISPLAY_STEP(dev_priv, STEP_A0, STEP_A2)) if (IS_ADLS_DISPLAY_STEP(dev_priv, STEP_A0, STEP_A2))
for_each_pipe(dev_priv, pipe) for_each_pipe(dev_priv, pipe)
runtime->num_scalers[pipe] = 0; display_runtime->num_scalers[pipe] = 0;
else if (DISPLAY_VER(dev_priv) >= 11) { else if (DISPLAY_VER(dev_priv) >= 11) {
for_each_pipe(dev_priv, pipe) for_each_pipe(dev_priv, pipe)
runtime->num_scalers[pipe] = 2; display_runtime->num_scalers[pipe] = 2;
} else if (DISPLAY_VER(dev_priv) >= 9) { } else if (DISPLAY_VER(dev_priv) >= 9) {
runtime->num_scalers[PIPE_A] = 2; display_runtime->num_scalers[PIPE_A] = 2;
runtime->num_scalers[PIPE_B] = 2; display_runtime->num_scalers[PIPE_B] = 2;
runtime->num_scalers[PIPE_C] = 1; display_runtime->num_scalers[PIPE_C] = 1;
} }
BUILD_BUG_ON(BITS_PER_TYPE(intel_engine_mask_t) < I915_NUM_ENGINES); BUILD_BUG_ON(BITS_PER_TYPE(intel_engine_mask_t) < I915_NUM_ENGINES);
if (DISPLAY_VER(dev_priv) >= 13 || HAS_D12_PLANE_MINIMIZATION(dev_priv)) if (DISPLAY_VER(dev_priv) >= 13 || HAS_D12_PLANE_MINIMIZATION(dev_priv))
for_each_pipe(dev_priv, pipe) for_each_pipe(dev_priv, pipe)
runtime->num_sprites[pipe] = 4; display_runtime->num_sprites[pipe] = 4;
else if (DISPLAY_VER(dev_priv) >= 11) else if (DISPLAY_VER(dev_priv) >= 11)
for_each_pipe(dev_priv, pipe) for_each_pipe(dev_priv, pipe)
runtime->num_sprites[pipe] = 6; display_runtime->num_sprites[pipe] = 6;
else if (DISPLAY_VER(dev_priv) == 10) else if (DISPLAY_VER(dev_priv) == 10)
for_each_pipe(dev_priv, pipe) for_each_pipe(dev_priv, pipe)
runtime->num_sprites[pipe] = 3; display_runtime->num_sprites[pipe] = 3;
else if (IS_BROXTON(dev_priv)) { else if (IS_BROXTON(dev_priv)) {
/* /*
* Skylake and Broxton currently don't expose the topmost plane as its * Skylake and Broxton currently don't expose the topmost plane as its
...@@ -446,15 +452,15 @@ void intel_device_info_runtime_init(struct drm_i915_private *dev_priv) ...@@ -446,15 +452,15 @@ void intel_device_info_runtime_init(struct drm_i915_private *dev_priv)
* down the line. * down the line.
*/ */
runtime->num_sprites[PIPE_A] = 2; display_runtime->num_sprites[PIPE_A] = 2;
runtime->num_sprites[PIPE_B] = 2; display_runtime->num_sprites[PIPE_B] = 2;
runtime->num_sprites[PIPE_C] = 1; display_runtime->num_sprites[PIPE_C] = 1;
} else if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) { } else if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) {
for_each_pipe(dev_priv, pipe) for_each_pipe(dev_priv, pipe)
runtime->num_sprites[pipe] = 2; display_runtime->num_sprites[pipe] = 2;
} else if (DISPLAY_VER(dev_priv) >= 5 || IS_G4X(dev_priv)) { } else if (DISPLAY_VER(dev_priv) >= 5 || IS_G4X(dev_priv)) {
for_each_pipe(dev_priv, pipe) for_each_pipe(dev_priv, pipe)
runtime->num_sprites[pipe] = 1; display_runtime->num_sprites[pipe] = 1;
} }
if (HAS_DISPLAY(dev_priv) && if (HAS_DISPLAY(dev_priv) &&
...@@ -462,7 +468,7 @@ void intel_device_info_runtime_init(struct drm_i915_private *dev_priv) ...@@ -462,7 +468,7 @@ void intel_device_info_runtime_init(struct drm_i915_private *dev_priv)
!(intel_de_read(dev_priv, GU_CNTL_PROTECTED) & DEPRESENT)) { !(intel_de_read(dev_priv, GU_CNTL_PROTECTED) & DEPRESENT)) {
drm_info(&dev_priv->drm, "Display not present, disabling\n"); drm_info(&dev_priv->drm, "Display not present, disabling\n");
runtime->pipe_mask = 0; display_runtime->pipe_mask = 0;
} }
if (HAS_DISPLAY(dev_priv) && IS_GRAPHICS_VER(dev_priv, 7, 8) && if (HAS_DISPLAY(dev_priv) && IS_GRAPHICS_VER(dev_priv, 7, 8) &&
...@@ -485,47 +491,47 @@ void intel_device_info_runtime_init(struct drm_i915_private *dev_priv) ...@@ -485,47 +491,47 @@ void intel_device_info_runtime_init(struct drm_i915_private *dev_priv)
!(sfuse_strap & SFUSE_STRAP_FUSE_LOCK))) { !(sfuse_strap & SFUSE_STRAP_FUSE_LOCK))) {
drm_info(&dev_priv->drm, drm_info(&dev_priv->drm,
"Display fused off, disabling\n"); "Display fused off, disabling\n");
runtime->pipe_mask = 0; display_runtime->pipe_mask = 0;
} else if (fuse_strap & IVB_PIPE_C_DISABLE) { } else if (fuse_strap & IVB_PIPE_C_DISABLE) {
drm_info(&dev_priv->drm, "PipeC fused off\n"); drm_info(&dev_priv->drm, "PipeC fused off\n");
runtime->pipe_mask &= ~BIT(PIPE_C); display_runtime->pipe_mask &= ~BIT(PIPE_C);
runtime->cpu_transcoder_mask &= ~BIT(TRANSCODER_C); display_runtime->cpu_transcoder_mask &= ~BIT(TRANSCODER_C);
} }
} else if (HAS_DISPLAY(dev_priv) && DISPLAY_VER(dev_priv) >= 9) { } else if (HAS_DISPLAY(dev_priv) && DISPLAY_VER(dev_priv) >= 9) {
u32 dfsm = intel_de_read(dev_priv, SKL_DFSM); u32 dfsm = intel_de_read(dev_priv, SKL_DFSM);
if (dfsm & SKL_DFSM_PIPE_A_DISABLE) { if (dfsm & SKL_DFSM_PIPE_A_DISABLE) {
runtime->pipe_mask &= ~BIT(PIPE_A); display_runtime->pipe_mask &= ~BIT(PIPE_A);
runtime->cpu_transcoder_mask &= ~BIT(TRANSCODER_A); display_runtime->cpu_transcoder_mask &= ~BIT(TRANSCODER_A);
runtime->fbc_mask &= ~BIT(INTEL_FBC_A); display_runtime->fbc_mask &= ~BIT(INTEL_FBC_A);
} }
if (dfsm & SKL_DFSM_PIPE_B_DISABLE) { if (dfsm & SKL_DFSM_PIPE_B_DISABLE) {
runtime->pipe_mask &= ~BIT(PIPE_B); display_runtime->pipe_mask &= ~BIT(PIPE_B);
runtime->cpu_transcoder_mask &= ~BIT(TRANSCODER_B); display_runtime->cpu_transcoder_mask &= ~BIT(TRANSCODER_B);
} }
if (dfsm & SKL_DFSM_PIPE_C_DISABLE) { if (dfsm & SKL_DFSM_PIPE_C_DISABLE) {
runtime->pipe_mask &= ~BIT(PIPE_C); display_runtime->pipe_mask &= ~BIT(PIPE_C);
runtime->cpu_transcoder_mask &= ~BIT(TRANSCODER_C); display_runtime->cpu_transcoder_mask &= ~BIT(TRANSCODER_C);
} }
if (DISPLAY_VER(dev_priv) >= 12 && if (DISPLAY_VER(dev_priv) >= 12 &&
(dfsm & TGL_DFSM_PIPE_D_DISABLE)) { (dfsm & TGL_DFSM_PIPE_D_DISABLE)) {
runtime->pipe_mask &= ~BIT(PIPE_D); display_runtime->pipe_mask &= ~BIT(PIPE_D);
runtime->cpu_transcoder_mask &= ~BIT(TRANSCODER_D); display_runtime->cpu_transcoder_mask &= ~BIT(TRANSCODER_D);
} }
if (dfsm & SKL_DFSM_DISPLAY_HDCP_DISABLE) if (dfsm & SKL_DFSM_DISPLAY_HDCP_DISABLE)
runtime->has_hdcp = 0; display_runtime->has_hdcp = 0;
if (dfsm & SKL_DFSM_DISPLAY_PM_DISABLE) if (dfsm & SKL_DFSM_DISPLAY_PM_DISABLE)
runtime->fbc_mask = 0; display_runtime->fbc_mask = 0;
if (DISPLAY_VER(dev_priv) >= 11 && (dfsm & ICL_DFSM_DMC_DISABLE)) if (DISPLAY_VER(dev_priv) >= 11 && (dfsm & ICL_DFSM_DMC_DISABLE))
runtime->has_dmc = 0; display_runtime->has_dmc = 0;
if (IS_DISPLAY_VER(dev_priv, 10, 12) && if (IS_DISPLAY_VER(dev_priv, 10, 12) &&
(dfsm & GLK_DFSM_DISPLAY_DSC_DISABLE)) (dfsm & GLK_DFSM_DISPLAY_DSC_DISABLE))
runtime->has_dsc = 0; display_runtime->has_dsc = 0;
} }
if (GRAPHICS_VER(dev_priv) == 6 && i915_vtd_active(dev_priv)) { if (GRAPHICS_VER(dev_priv) == 6 && i915_vtd_active(dev_priv)) {
...@@ -542,13 +548,13 @@ void intel_device_info_runtime_init(struct drm_i915_private *dev_priv) ...@@ -542,13 +548,13 @@ void intel_device_info_runtime_init(struct drm_i915_private *dev_priv)
DRIVER_ATOMIC); DRIVER_ATOMIC);
info->display = &no_display; info->display = &no_display;
runtime->cpu_transcoder_mask = 0; display_runtime->cpu_transcoder_mask = 0;
memset(runtime->num_sprites, 0, sizeof(runtime->num_sprites)); memset(display_runtime->num_sprites, 0, sizeof(display_runtime->num_sprites));
memset(runtime->num_scalers, 0, sizeof(runtime->num_scalers)); memset(display_runtime->num_scalers, 0, sizeof(display_runtime->num_scalers));
runtime->fbc_mask = 0; display_runtime->fbc_mask = 0;
runtime->has_hdcp = false; display_runtime->has_hdcp = false;
runtime->has_dmc = false; display_runtime->has_dmc = false;
runtime->has_dsc = false; display_runtime->has_dsc = false;
} }
/* Disable nuclear pageflip by default on pre-g4x */ /* Disable nuclear pageflip by default on pre-g4x */
...@@ -568,6 +574,7 @@ void intel_device_info_driver_create(struct drm_i915_private *i915, ...@@ -568,6 +574,7 @@ void intel_device_info_driver_create(struct drm_i915_private *i915,
{ {
struct intel_device_info *info; struct intel_device_info *info;
struct intel_runtime_info *runtime; struct intel_runtime_info *runtime;
struct intel_display_runtime_info *display_runtime;
/* Setup the write-once "constant" device info */ /* Setup the write-once "constant" device info */
info = mkwrite_device_info(i915); info = mkwrite_device_info(i915);
...@@ -576,6 +583,10 @@ void intel_device_info_driver_create(struct drm_i915_private *i915, ...@@ -576,6 +583,10 @@ void intel_device_info_driver_create(struct drm_i915_private *i915,
/* Initialize initial runtime info from static const data and pdev. */ /* Initialize initial runtime info from static const data and pdev. */
runtime = RUNTIME_INFO(i915); runtime = RUNTIME_INFO(i915);
memcpy(runtime, &INTEL_INFO(i915)->__runtime, sizeof(*runtime)); memcpy(runtime, &INTEL_INFO(i915)->__runtime, sizeof(*runtime));
display_runtime = DISPLAY_RUNTIME_INFO(i915);
memcpy(display_runtime, &DISPLAY_INFO(i915)->__runtime_defaults,
sizeof(*display_runtime));
runtime->device_id = device_id; runtime->device_id = device_id;
} }
......
...@@ -197,9 +197,6 @@ struct intel_runtime_info { ...@@ -197,9 +197,6 @@ struct intel_runtime_info {
struct { struct {
struct intel_ip_version ip; struct intel_ip_version ip;
} media; } media;
struct {
struct intel_ip_version ip;
} display;
/* /*
* Platform mask is used for optimizing or-ed IS_PLATFORM calls into * Platform mask is used for optimizing or-ed IS_PLATFORM calls into
...@@ -227,21 +224,6 @@ struct intel_runtime_info { ...@@ -227,21 +224,6 @@ struct intel_runtime_info {
u32 memory_regions; /* regions supported by the HW */ u32 memory_regions; /* regions supported by the HW */
bool has_pooled_eu; bool has_pooled_eu;
/* display */
struct {
u8 pipe_mask;
u8 cpu_transcoder_mask;
u8 num_sprites[I915_MAX_PIPES];
u8 num_scalers[I915_MAX_PIPES];
u8 fbc_mask;
bool has_hdcp;
bool has_dmc;
bool has_dsc;
};
}; };
struct intel_device_info { struct intel_device_info {
......
...@@ -166,8 +166,12 @@ void intel_step_init(struct drm_i915_private *i915) ...@@ -166,8 +166,12 @@ void intel_step_init(struct drm_i915_private *i915)
&RUNTIME_INFO(i915)->graphics.ip); &RUNTIME_INFO(i915)->graphics.ip);
step.media_step = gmd_to_intel_step(i915, step.media_step = gmd_to_intel_step(i915,
&RUNTIME_INFO(i915)->media.ip); &RUNTIME_INFO(i915)->media.ip);
step.display_step = gmd_to_intel_step(i915, step.display_step = STEP_A0 + DISPLAY_RUNTIME_INFO(i915)->ip.step;
&RUNTIME_INFO(i915)->display.ip); if (step.display_step >= STEP_FUTURE) {
drm_dbg(&i915->drm, "Using future display steppings\n");
step.display_step = STEP_FUTURE;
}
RUNTIME_INFO(i915)->step = step; RUNTIME_INFO(i915)->step = step;
return; return;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment