[Intel-gfx] [PATCH v2 07/13] drm/i915: Store cpu_transcoder_mask in device info
From: Ville Syrjälä We have a bunch of code that would like to know which CPU transcoders are actually present in the hardware. Rather than use various ad-hoc methods let's just include a full bitmask in the device info, alongside pipe_mask. v2: Rebase Signed-off-by: Ville Syrjälä --- drivers/gpu/drm/i915/display/intel_ddi.c | 6 ++-- drivers/gpu/drm/i915/display/intel_display.c | 13 ++--- drivers/gpu/drm/i915/display/intel_display.h | 8 -- drivers/gpu/drm/i915/i915_drv.h | 2 +- drivers/gpu/drm/i915/i915_pci.c | 23 +++- drivers/gpu/drm/i915/intel_device_info.c | 29 drivers/gpu/drm/i915/intel_device_info.h | 1 + 7 files changed, 53 insertions(+), 29 deletions(-) diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c index 8bb6c583abb8..0fea2ec2cdd8 100644 --- a/drivers/gpu/drm/i915/display/intel_ddi.c +++ b/drivers/gpu/drm/i915/display/intel_ddi.c @@ -1689,7 +1689,7 @@ bool intel_ddi_connector_get_hw_state(struct intel_connector *intel_connector) goto out; } - if (HAS_TRANSCODER_EDP(dev_priv) && port == PORT_A) + if (HAS_TRANSCODER(dev_priv, TRANSCODER_EDP) && port == PORT_A) cpu_transcoder = TRANSCODER_EDP; else cpu_transcoder = (enum transcoder) pipe; @@ -1751,7 +1751,7 @@ static void intel_ddi_get_encoder_pipes(struct intel_encoder *encoder, if (!(tmp & DDI_BUF_CTL_ENABLE)) goto out; - if (HAS_TRANSCODER_EDP(dev_priv) && port == PORT_A) { + if (HAS_TRANSCODER(dev_priv, TRANSCODER_EDP) && port == PORT_A) { tmp = intel_de_read(dev_priv, TRANS_DDI_FUNC_CTL(TRANSCODER_EDP)); @@ -4076,7 +4076,7 @@ static int intel_ddi_compute_config(struct intel_encoder *encoder, enum port port = encoder->port; int ret; - if (HAS_TRANSCODER_EDP(dev_priv) && port == PORT_A) + if (HAS_TRANSCODER(dev_priv, TRANSCODER_EDP) && port == PORT_A) pipe_config->cpu_transcoder = TRANSCODER_EDP; if (intel_crtc_has_type(pipe_config, INTEL_OUTPUT_HDMI)) { diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c index 4840988dc58d..292cac64f1ac 100644 --- a/drivers/gpu/drm/i915/display/intel_display.c +++ b/drivers/gpu/drm/i915/display/intel_display.c @@ -10855,7 +10855,7 @@ static bool hsw_get_transcoder_state(struct intel_crtc *crtc, panel_transcoder_mask |= BIT(TRANSCODER_DSI_0) | BIT(TRANSCODER_DSI_1); - if (HAS_TRANSCODER_EDP(dev_priv)) + if (HAS_TRANSCODER(dev_priv, TRANSCODER_EDP)) panel_transcoder_mask |= BIT(TRANSCODER_EDP); /* @@ -18712,15 +18712,6 @@ void intel_modeset_driver_remove_noirq(struct drm_i915_private *i915) #if IS_ENABLED(CONFIG_DRM_I915_CAPTURE_ERROR) -static bool -has_transcoder(struct drm_i915_private *dev_priv, enum transcoder cpu_transcoder) -{ - if (cpu_transcoder == TRANSCODER_EDP) - return HAS_TRANSCODER_EDP(dev_priv); - else - return INTEL_INFO(dev_priv)->pipe_mask & BIT(cpu_transcoder); -} - struct intel_display_error_state { u32 power_well_driver; @@ -18829,7 +18820,7 @@ intel_display_capture_error_state(struct drm_i915_private *dev_priv) for (i = 0; i < ARRAY_SIZE(error->transcoder); i++) { enum transcoder cpu_transcoder = transcoders[i]; - if (!has_transcoder(dev_priv, cpu_transcoder)) + if (!HAS_TRANSCODER(dev_priv, cpu_transcoder)) continue; error->transcoder[i].available = true; diff --git a/drivers/gpu/drm/i915/display/intel_display.h b/drivers/gpu/drm/i915/display/intel_display.h index adb1225a3480..cc7f287804d7 100644 --- a/drivers/gpu/drm/i915/display/intel_display.h +++ b/drivers/gpu/drm/i915/display/intel_display.h @@ -320,9 +320,13 @@ enum phy_fia { for_each_pipe(__dev_priv, __p) \ for_each_if((__mask) & BIT(__p)) -#define for_each_cpu_transcoder_masked(__dev_priv, __t, __mask) \ +#define for_each_cpu_transcoder(__dev_priv, __t) \ for ((__t) = 0; (__t) < I915_MAX_TRANSCODERS; (__t)++) \ - for_each_if ((__mask) & (1 << (__t))) + for_each_if (INTEL_INFO(__dev_priv)->cpu_transcoder_mask & BIT(__t)) + +#define for_each_cpu_transcoder_masked(__dev_priv, __t, __mask) \ + for_each_cpu_transcoder(__dev_priv, __t) \ + for_each_if ((__mask) & BIT(__t)) #define for_each_universal_plane(__dev_priv, __pipe, __p) \ for ((__p) = 0; \ diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h index a7ea1d855359..ea9170fd169b 100644 --- a/drivers/gpu/drm/i915/i915_drv.h +++ b/drivers/gpu/drm/i915/i9
Re: [Intel-gfx] [PATCH v2 07/13] drm/i915: Store cpu_transcoder_mask in device info
On Wed, 2020-03-18 at 19:02 +0200, Ville Syrjala wrote: > From: Ville Syrjälä > > We have a bunch of code that would like to know which > CPU transcoders are actually present in the hardware. Rather than > use various ad-hoc methods let's just include a full bitmask in > the device info, alongside pipe_mask. > > v2: Rebase > > Signed-off-by: Ville Syrjälä > --- > drivers/gpu/drm/i915/display/intel_ddi.c | 6 ++-- > drivers/gpu/drm/i915/display/intel_display.c | 13 ++--- > drivers/gpu/drm/i915/display/intel_display.h | 8 -- > drivers/gpu/drm/i915/i915_drv.h | 2 +- > drivers/gpu/drm/i915/i915_pci.c | 23 +++- > drivers/gpu/drm/i915/intel_device_info.c | 29 > > drivers/gpu/drm/i915/intel_device_info.h | 1 + > 7 files changed, 53 insertions(+), 29 deletions(-) > > diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c > b/drivers/gpu/drm/i915/display/intel_ddi.c > index 8bb6c583abb8..0fea2ec2cdd8 100644 > --- a/drivers/gpu/drm/i915/display/intel_ddi.c > +++ b/drivers/gpu/drm/i915/display/intel_ddi.c > @@ -1689,7 +1689,7 @@ bool intel_ddi_connector_get_hw_state(struct > intel_connector *intel_connector) > goto out; > } > > - if (HAS_TRANSCODER_EDP(dev_priv) && port == PORT_A) > + if (HAS_TRANSCODER(dev_priv, TRANSCODER_EDP) && port == PORT_A) > cpu_transcoder = TRANSCODER_EDP; > else > cpu_transcoder = (enum transcoder) pipe; > @@ -1751,7 +1751,7 @@ static void intel_ddi_get_encoder_pipes(struct > intel_encoder *encoder, > if (!(tmp & DDI_BUF_CTL_ENABLE)) > goto out; > > - if (HAS_TRANSCODER_EDP(dev_priv) && port == PORT_A) { > + if (HAS_TRANSCODER(dev_priv, TRANSCODER_EDP) && port == PORT_A) > { > tmp = intel_de_read(dev_priv, > TRANS_DDI_FUNC_CTL(TRANSCODER_EDP)) > ; > > @@ -4076,7 +4076,7 @@ static int intel_ddi_compute_config(struct > intel_encoder *encoder, > enum port port = encoder->port; > int ret; > > - if (HAS_TRANSCODER_EDP(dev_priv) && port == PORT_A) > + if (HAS_TRANSCODER(dev_priv, TRANSCODER_EDP) && port == PORT_A) > pipe_config->cpu_transcoder = TRANSCODER_EDP; > > if (intel_crtc_has_type(pipe_config, INTEL_OUTPUT_HDMI)) { > diff --git a/drivers/gpu/drm/i915/display/intel_display.c > b/drivers/gpu/drm/i915/display/intel_display.c > index 4840988dc58d..292cac64f1ac 100644 > --- a/drivers/gpu/drm/i915/display/intel_display.c > +++ b/drivers/gpu/drm/i915/display/intel_display.c > @@ -10855,7 +10855,7 @@ static bool hsw_get_transcoder_state(struct > intel_crtc *crtc, > panel_transcoder_mask |= > BIT(TRANSCODER_DSI_0) | BIT(TRANSCODER_DSI_1); > > - if (HAS_TRANSCODER_EDP(dev_priv)) > + if (HAS_TRANSCODER(dev_priv, TRANSCODER_EDP)) > panel_transcoder_mask |= BIT(TRANSCODER_EDP); > > /* > @@ -18712,15 +18712,6 @@ void > intel_modeset_driver_remove_noirq(struct drm_i915_private *i915) > > #if IS_ENABLED(CONFIG_DRM_I915_CAPTURE_ERROR) > > -static bool > -has_transcoder(struct drm_i915_private *dev_priv, enum transcoder > cpu_transcoder) > -{ > - if (cpu_transcoder == TRANSCODER_EDP) > - return HAS_TRANSCODER_EDP(dev_priv); > - else > - return INTEL_INFO(dev_priv)->pipe_mask & > BIT(cpu_transcoder); > -} > - > struct intel_display_error_state { > > u32 power_well_driver; > @@ -18829,7 +18820,7 @@ intel_display_capture_error_state(struct > drm_i915_private *dev_priv) > for (i = 0; i < ARRAY_SIZE(error->transcoder); i++) { > enum transcoder cpu_transcoder = transcoders[i]; > > - if (!has_transcoder(dev_priv, cpu_transcoder)) > + if (!HAS_TRANSCODER(dev_priv, cpu_transcoder)) > continue; > > error->transcoder[i].available = true; > diff --git a/drivers/gpu/drm/i915/display/intel_display.h > b/drivers/gpu/drm/i915/display/intel_display.h > index adb1225a3480..cc7f287804d7 100644 > --- a/drivers/gpu/drm/i915/display/intel_display.h > +++ b/drivers/gpu/drm/i915/display/intel_display.h > @@ -320,9 +320,13 @@ enum phy_fia { > for_each_pipe(__dev_priv, __p) \ > for_each_if((__mask) & BIT(__p)) > > -#define for_each_cpu_transcoder_masked(__dev_priv, __t, __mask) \ > +#define for_each_cpu_transcoder(__dev_priv, __t) \ > for ((__t) = 0; (__t) < I915_MAX_TRANSCODERS; (__t)++) \ > - for_each_if ((__mask) & (1 << (__t))) > + for_each_if (INTEL_INFO(__dev_priv)- > >cpu_transcoder_mask & BIT(__t)) > + > +#define for_each_cpu_transcoder_masked(__dev_priv, __t, __mask) \ > + for_each_cpu_transcoder(__dev_priv, __t) \ > + for_each_if ((__mask) & BIT(__t)) > > #define for_each_universal_plane(__dev_priv, __pipe, __p) > \ > for ((__p) = 0;