[Intel-gfx] [PATCH] drm/fbdev: Fallback to non tiled mode if all tiles not present
Manasi Navare
manasi.d.navare at intel.com
Wed Nov 6 20:37:32 UTC 2019
On Wed, Nov 06, 2019 at 12:47:16PM +1000, Dave Airlie wrote:
> On Fri, 1 Nov 2019 at 07:46, Manasi Navare <manasi.d.navare at intel.com> wrote:
> >
> > In case of tiled displays, if we hotplug just one connector,
> > fbcon currently just selects the preferred mode and if it is
> > tiled mode then that becomes a problem if rest of the tiles are
> > not present.
> > So in the fbdev driver on hotplug when we probe the client modeset,
> > we we dont find all the connectors for all tiles, then on a connector
> > with one tile, just fallback to the first available non tiled mode
> > to display over a single connector.
> >
> > Suggested-by: Ville Syrjälä <ville.syrjala at linux.intel.com>
> > Suggested-by: Dave Airlie <airlied at redhat.com>
> > Cc: Ville Syrjälä <ville.syrjala at linux.intel.com>
> > Cc: Dave Airlie <airlied at redhat.com>
> > Signed-off-by: Manasi Navare <manasi.d.navare at intel.com>
> > ---
> > drivers/gpu/drm/drm_client_modeset.c | 29 ++++++++++++++++++++++++++++
> > 1 file changed, 29 insertions(+)
> >
> > diff --git a/drivers/gpu/drm/drm_client_modeset.c b/drivers/gpu/drm/drm_client_modeset.c
> > index 895b73f23079..e28a723587db 100644
> > --- a/drivers/gpu/drm/drm_client_modeset.c
> > +++ b/drivers/gpu/drm/drm_client_modeset.c
> > @@ -114,6 +114,20 @@ drm_client_find_modeset(struct drm_client_dev *client, struct drm_crtc *crtc)
> > return NULL;
> > }
> >
> > +static struct drm_display_mode *
> > +drm_connector_fallback_non_tiled_mode(struct drm_connector *connector)
> > +{
> > + struct drm_display_mode *mode;
> > +
> > + list_for_each_entry(mode, &connector->modes, head) {
> > + if (mode->hdisplay == connector->tile_h_size &&
> > + mode->vdisplay == connector->tile_v_size)
> > + continue;
> > + return mode;
> > + }
> > + return NULL;
> > +}
> > +
> > static struct drm_display_mode *
> > drm_connector_has_preferred_mode(struct drm_connector *connector, int width, int height)
> > {
> > @@ -348,8 +362,17 @@ static bool drm_client_target_preferred(struct drm_connector **connectors,
> > struct drm_connector *connector;
> > u64 conn_configured = 0;
> > int tile_pass = 0;
> > + int num_tiled_conns = 0;
> > int i;
> >
> > + for (i = 0; i < connector_count; i++) {
> > + connector = connectors[i];
> > + if (!connector->has_tile)
> > + continue;
> > +
> > + num_tiled_conns ++;
>
> Drop the space before the ++ here. Maybe just make this
>
> if (connectors[i]->has_tile)
> num_tiled_conns++;
Sure will modify like above and add your r-b afterwards.
Thank you so much for your review.
This only covers the hotplug case with 1 connector hotplugged and need to still
modify the fb dev code to ignore the second hotplug which I cant seem to figure out how
to avoid the second hotplug from going through a modeset and retain the first modeset on screen.
Also I will send a follow up patch to fallback to first non tiled mode in case of connected boot.
But its okay for that to be separate patch than this right?
Regards
Manasi
>
> Reviewed-by: Dave Airlie <airlied at redhat.com>
>
> Otherwise I think this seems fine, though it does beg the question in
> my mind of what happens if I get 2 8K monitors, and plug the first
> tile of one in, and the second tile of the other in.
>
> Dave.
More information about the Intel-gfx
mailing list