Re: [Intel-gfx] [PATCH v2] drm/connector: Allow max possible encoders to attach to a connector

2019-09-06 Thread Souza, Jose
On Fri, 2019-09-06 at 14:27 +0300, Ville Syrjälä wrote:
> On Thu, Sep 05, 2019 at 02:09:27PM -0700, José Roberto de Souza
> wrote:
> > From: Dhinakaran Pandiyan 
> > 
> > Currently we restrict the number of encoders that can be linked to
> > a connector to 3, increase it to match the maximum number of
> > encoders
> > that can be initialized(32).
> > 
> > To more effiently do that lets switch from an array of encoder ids
> > to
> > bitmask.
> > 
> > Also removing the best_encoder hook from the drivers that only have
> > one encoder per connector(this ones have one encoder in the whole
> > driver), pick_single_encoder_for_connector() will do the same job
> > with no functional change.
> 
> I don't think non-atomic drivers have that fallback in place.
> They probable should...

Nice catch, thanks I will bring it back as it was removed from non-
atomic drivers.

> 
> Apart from that lgtm
> Reviewed-by: Ville Syrjälä 
> 
> > v2: Fixing missed return on amdgpu_dm_connector_to_encoder()
> > 
> > Suggested-by: Ville Syrjälä 
> > Cc: Ville Syrjälä 
> > Cc: Alex Deucher 
> > Cc: dri-de...@lists.freedesktop.org
> > Cc: intel-gfx@lists.freedesktop.org
> > Cc: nouv...@lists.freedesktop.org
> > Cc: amd-...@lists.freedesktop.org
> > Signed-off-by: Dhinakaran Pandiyan 
> > Signed-off-by: José Roberto de Souza 
> > ---
> >  .../gpu/drm/amd/amdgpu/amdgpu_connectors.c| 23 +-
> >  drivers/gpu/drm/amd/amdgpu/dce_virtual.c  |  5 ++-
> >  .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c |  6 +++-
> >  drivers/gpu/drm/ast/ast_mode.c| 12 ---
> >  drivers/gpu/drm/drm_atomic_helper.c   |  9 --
> >  drivers/gpu/drm/drm_client_modeset.c  |  3 +-
> >  drivers/gpu/drm/drm_connector.c   | 31 +
> > --
> >  drivers/gpu/drm/drm_probe_helper.c|  3 +-
> >  drivers/gpu/drm/mgag200/mgag200_mode.c| 11 ---
> >  drivers/gpu/drm/nouveau/dispnv04/disp.c   |  2 +-
> >  drivers/gpu/drm/nouveau/dispnv50/disp.c   |  2 +-
> >  drivers/gpu/drm/nouveau/nouveau_connector.c   |  7 ++---
> >  drivers/gpu/drm/radeon/radeon_connectors.c| 27 ++-
> > -
> >  drivers/gpu/drm/udl/udl_connector.c   |  8 -
> >  include/drm/drm_connector.h   | 18 +--
> >  15 files changed, 53 insertions(+), 114 deletions(-)
> > 
> > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
> > b/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
> > index ece55c8fa673..d8729285f731 100644
> > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
> > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
> > @@ -217,11 +217,10 @@ amdgpu_connector_update_scratch_regs(struct
> > drm_connector *connector,
> > struct drm_encoder *encoder;
> > const struct drm_connector_helper_funcs *connector_funcs =
> > connector->helper_private;
> > bool connected;
> > -   int i;
> >  
> > best_encoder = connector_funcs->best_encoder(connector);
> >  
> > -   drm_connector_for_each_possible_encoder(connector, encoder, i)
> > {
> > +   drm_connector_for_each_possible_encoder(connector, encoder) {
> > if ((encoder == best_encoder) && (status ==
> > connector_status_connected))
> > connected = true;
> > else
> > @@ -236,9 +235,8 @@ amdgpu_connector_find_encoder(struct
> > drm_connector *connector,
> >int encoder_type)
> >  {
> > struct drm_encoder *encoder;
> > -   int i;
> >  
> > -   drm_connector_for_each_possible_encoder(connector, encoder, i)
> > {
> > +   drm_connector_for_each_possible_encoder(connector, encoder) {
> > if (encoder->encoder_type == encoder_type)
> > return encoder;
> > }
> > @@ -347,10 +345,9 @@ static struct drm_encoder *
> >  amdgpu_connector_best_single_encoder(struct drm_connector
> > *connector)
> >  {
> > struct drm_encoder *encoder;
> > -   int i;
> >  
> > /* pick the first one */
> > -   drm_connector_for_each_possible_encoder(connector, encoder, i)
> > +   drm_connector_for_each_possible_encoder(connector, encoder)
> > return encoder;
> >  
> > return NULL;
> > @@ -1065,9 +1062,8 @@ amdgpu_connector_dvi_detect(struct
> > drm_connector *connector, bool force)
> > /* find analog encoder */
> > if (amdgpu_connector->dac_load_detect) {
> > struct drm_encoder *encoder;
> > -   int i;
> >  
> > -   drm_connector_for_each_possible_encoder(connector,
> > encoder, i) {
> > +   drm_connector_for_each_possible_encoder(connector,
> > encoder) {
> > if (encoder->encoder_type !=
> > DRM_MODE_ENCODER_DAC &&
> > encoder->encoder_type !=
> > DRM_MODE_ENCODER_TVDAC)
> > continue;
> > @@ -1117,9 +1113,8 @@ amdgpu_connector_dvi_encoder(struct
> > drm_connector *connector)
> >  {
> > struct amdgpu_connector *amdgpu_connector =
> > to_amdgpu_connector(connector);
> >  

Re: [Intel-gfx] [PATCH v2] drm/connector: Allow max possible encoders to attach to a connector

2019-09-06 Thread Ville Syrjälä
On Thu, Sep 05, 2019 at 02:09:27PM -0700, José Roberto de Souza wrote:
> From: Dhinakaran Pandiyan 
> 
> Currently we restrict the number of encoders that can be linked to
> a connector to 3, increase it to match the maximum number of encoders
> that can be initialized(32).
> 
> To more effiently do that lets switch from an array of encoder ids to
> bitmask.
> 
> Also removing the best_encoder hook from the drivers that only have
> one encoder per connector(this ones have one encoder in the whole
> driver), pick_single_encoder_for_connector() will do the same job
> with no functional change.

I don't think non-atomic drivers have that fallback in place.
They probable should...

Apart from that lgtm
Reviewed-by: Ville Syrjälä 

> 
> v2: Fixing missed return on amdgpu_dm_connector_to_encoder()
> 
> Suggested-by: Ville Syrjälä 
> Cc: Ville Syrjälä 
> Cc: Alex Deucher 
> Cc: dri-de...@lists.freedesktop.org
> Cc: intel-gfx@lists.freedesktop.org
> Cc: nouv...@lists.freedesktop.org
> Cc: amd-...@lists.freedesktop.org
> Signed-off-by: Dhinakaran Pandiyan 
> Signed-off-by: José Roberto de Souza 
> ---
>  .../gpu/drm/amd/amdgpu/amdgpu_connectors.c| 23 +-
>  drivers/gpu/drm/amd/amdgpu/dce_virtual.c  |  5 ++-
>  .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c |  6 +++-
>  drivers/gpu/drm/ast/ast_mode.c| 12 ---
>  drivers/gpu/drm/drm_atomic_helper.c   |  9 --
>  drivers/gpu/drm/drm_client_modeset.c  |  3 +-
>  drivers/gpu/drm/drm_connector.c   | 31 +--
>  drivers/gpu/drm/drm_probe_helper.c|  3 +-
>  drivers/gpu/drm/mgag200/mgag200_mode.c| 11 ---
>  drivers/gpu/drm/nouveau/dispnv04/disp.c   |  2 +-
>  drivers/gpu/drm/nouveau/dispnv50/disp.c   |  2 +-
>  drivers/gpu/drm/nouveau/nouveau_connector.c   |  7 ++---
>  drivers/gpu/drm/radeon/radeon_connectors.c| 27 ++--
>  drivers/gpu/drm/udl/udl_connector.c   |  8 -
>  include/drm/drm_connector.h   | 18 +--
>  15 files changed, 53 insertions(+), 114 deletions(-)
> 
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c 
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
> index ece55c8fa673..d8729285f731 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
> @@ -217,11 +217,10 @@ amdgpu_connector_update_scratch_regs(struct 
> drm_connector *connector,
>   struct drm_encoder *encoder;
>   const struct drm_connector_helper_funcs *connector_funcs = 
> connector->helper_private;
>   bool connected;
> - int i;
>  
>   best_encoder = connector_funcs->best_encoder(connector);
>  
> - drm_connector_for_each_possible_encoder(connector, encoder, i) {
> + drm_connector_for_each_possible_encoder(connector, encoder) {
>   if ((encoder == best_encoder) && (status == 
> connector_status_connected))
>   connected = true;
>   else
> @@ -236,9 +235,8 @@ amdgpu_connector_find_encoder(struct drm_connector 
> *connector,
>  int encoder_type)
>  {
>   struct drm_encoder *encoder;
> - int i;
>  
> - drm_connector_for_each_possible_encoder(connector, encoder, i) {
> + drm_connector_for_each_possible_encoder(connector, encoder) {
>   if (encoder->encoder_type == encoder_type)
>   return encoder;
>   }
> @@ -347,10 +345,9 @@ static struct drm_encoder *
>  amdgpu_connector_best_single_encoder(struct drm_connector *connector)
>  {
>   struct drm_encoder *encoder;
> - int i;
>  
>   /* pick the first one */
> - drm_connector_for_each_possible_encoder(connector, encoder, i)
> + drm_connector_for_each_possible_encoder(connector, encoder)
>   return encoder;
>  
>   return NULL;
> @@ -1065,9 +1062,8 @@ amdgpu_connector_dvi_detect(struct drm_connector 
> *connector, bool force)
>   /* find analog encoder */
>   if (amdgpu_connector->dac_load_detect) {
>   struct drm_encoder *encoder;
> - int i;
>  
> - drm_connector_for_each_possible_encoder(connector, encoder, i) {
> + drm_connector_for_each_possible_encoder(connector, encoder) {
>   if (encoder->encoder_type != DRM_MODE_ENCODER_DAC &&
>   encoder->encoder_type != DRM_MODE_ENCODER_TVDAC)
>   continue;
> @@ -1117,9 +1113,8 @@ amdgpu_connector_dvi_encoder(struct drm_connector 
> *connector)
>  {
>   struct amdgpu_connector *amdgpu_connector = 
> to_amdgpu_connector(connector);
>   struct drm_encoder *encoder;
> - int i;
>  
> - drm_connector_for_each_possible_encoder(connector, encoder, i) {
> + drm_connector_for_each_possible_encoder(connector, encoder) {
>   if (amdgpu_connector->use_digital == true) {
>   if (encoder->encoder_type == DRM_MODE_ENCODER_TMDS)
> 

[Intel-gfx] [PATCH v2] drm/connector: Allow max possible encoders to attach to a connector

2019-09-05 Thread José Roberto de Souza
From: Dhinakaran Pandiyan 

Currently we restrict the number of encoders that can be linked to
a connector to 3, increase it to match the maximum number of encoders
that can be initialized(32).

To more effiently do that lets switch from an array of encoder ids to
bitmask.

Also removing the best_encoder hook from the drivers that only have
one encoder per connector(this ones have one encoder in the whole
driver), pick_single_encoder_for_connector() will do the same job
with no functional change.

v2: Fixing missed return on amdgpu_dm_connector_to_encoder()

Suggested-by: Ville Syrjälä 
Cc: Ville Syrjälä 
Cc: Alex Deucher 
Cc: dri-de...@lists.freedesktop.org
Cc: intel-gfx@lists.freedesktop.org
Cc: nouv...@lists.freedesktop.org
Cc: amd-...@lists.freedesktop.org
Signed-off-by: Dhinakaran Pandiyan 
Signed-off-by: José Roberto de Souza 
---
 .../gpu/drm/amd/amdgpu/amdgpu_connectors.c| 23 +-
 drivers/gpu/drm/amd/amdgpu/dce_virtual.c  |  5 ++-
 .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c |  6 +++-
 drivers/gpu/drm/ast/ast_mode.c| 12 ---
 drivers/gpu/drm/drm_atomic_helper.c   |  9 --
 drivers/gpu/drm/drm_client_modeset.c  |  3 +-
 drivers/gpu/drm/drm_connector.c   | 31 +--
 drivers/gpu/drm/drm_probe_helper.c|  3 +-
 drivers/gpu/drm/mgag200/mgag200_mode.c| 11 ---
 drivers/gpu/drm/nouveau/dispnv04/disp.c   |  2 +-
 drivers/gpu/drm/nouveau/dispnv50/disp.c   |  2 +-
 drivers/gpu/drm/nouveau/nouveau_connector.c   |  7 ++---
 drivers/gpu/drm/radeon/radeon_connectors.c| 27 ++--
 drivers/gpu/drm/udl/udl_connector.c   |  8 -
 include/drm/drm_connector.h   | 18 +--
 15 files changed, 53 insertions(+), 114 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
index ece55c8fa673..d8729285f731 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
@@ -217,11 +217,10 @@ amdgpu_connector_update_scratch_regs(struct drm_connector 
*connector,
struct drm_encoder *encoder;
const struct drm_connector_helper_funcs *connector_funcs = 
connector->helper_private;
bool connected;
-   int i;
 
best_encoder = connector_funcs->best_encoder(connector);
 
-   drm_connector_for_each_possible_encoder(connector, encoder, i) {
+   drm_connector_for_each_possible_encoder(connector, encoder) {
if ((encoder == best_encoder) && (status == 
connector_status_connected))
connected = true;
else
@@ -236,9 +235,8 @@ amdgpu_connector_find_encoder(struct drm_connector 
*connector,
   int encoder_type)
 {
struct drm_encoder *encoder;
-   int i;
 
-   drm_connector_for_each_possible_encoder(connector, encoder, i) {
+   drm_connector_for_each_possible_encoder(connector, encoder) {
if (encoder->encoder_type == encoder_type)
return encoder;
}
@@ -347,10 +345,9 @@ static struct drm_encoder *
 amdgpu_connector_best_single_encoder(struct drm_connector *connector)
 {
struct drm_encoder *encoder;
-   int i;
 
/* pick the first one */
-   drm_connector_for_each_possible_encoder(connector, encoder, i)
+   drm_connector_for_each_possible_encoder(connector, encoder)
return encoder;
 
return NULL;
@@ -1065,9 +1062,8 @@ amdgpu_connector_dvi_detect(struct drm_connector 
*connector, bool force)
/* find analog encoder */
if (amdgpu_connector->dac_load_detect) {
struct drm_encoder *encoder;
-   int i;
 
-   drm_connector_for_each_possible_encoder(connector, encoder, i) {
+   drm_connector_for_each_possible_encoder(connector, encoder) {
if (encoder->encoder_type != DRM_MODE_ENCODER_DAC &&
encoder->encoder_type != DRM_MODE_ENCODER_TVDAC)
continue;
@@ -1117,9 +1113,8 @@ amdgpu_connector_dvi_encoder(struct drm_connector 
*connector)
 {
struct amdgpu_connector *amdgpu_connector = 
to_amdgpu_connector(connector);
struct drm_encoder *encoder;
-   int i;
 
-   drm_connector_for_each_possible_encoder(connector, encoder, i) {
+   drm_connector_for_each_possible_encoder(connector, encoder) {
if (amdgpu_connector->use_digital == true) {
if (encoder->encoder_type == DRM_MODE_ENCODER_TMDS)
return encoder;
@@ -1134,7 +1129,7 @@ amdgpu_connector_dvi_encoder(struct drm_connector 
*connector)
 
/* then check use digitial */
/* pick the first one */
-   drm_connector_for_each_possible_encoder(connector, encoder, i)
+   drm_connector_for_each_possible_encoder(connector, encoder)