[Intel-gfx] [PATCH v2 07/13] drm/i915: Store cpu_transcoder_mask in device info

2020-03-18 Thread Ville Syrjala
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

2020-04-01 Thread Souza, Jose
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;