Maximum framebuffer width on OMAP5+ DSS is 4096, instead of 2048. This
patch makes omapdrm ask the respective dispc for the limits.

Signed-off-by: Tomi Valkeinen <tomi.valkeinen at ti.com>
---
 drivers/gpu/drm/omapdrm/dss/dispc.c   |  9 +++++++++
 drivers/gpu/drm/omapdrm/dss/omapdss.h |  1 +
 drivers/gpu/drm/omapdrm/omap_drv.c    | 11 +++++++----
 3 files changed, 17 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/omapdrm/dss/dispc.c 
b/drivers/gpu/drm/omapdrm/dss/dispc.c
index 9034b97240db..1db64edbbbfd 100644
--- a/drivers/gpu/drm/omapdrm/dss/dispc.c
+++ b/drivers/gpu/drm/omapdrm/dss/dispc.c
@@ -4148,6 +4148,14 @@ static void dispc_free_irq(void *dev_id)
        dispc.user_data = NULL;
 }

+static void dispc_get_min_max_size(u32 *min_w, u32 *min_h, u32 *max_w, u32 
*max_h)
+{
+       *min_w = 8;
+       *min_h = 2;
+       *max_w = dispc.feat->mgr_width_max;
+       *max_h = dispc.feat->mgr_height_max;
+}
+
 /*
  * Workaround for errata i734 in DSS dispc
  *  - LCD1 Gamma Correction Is Not Working When GFX Pipe Is Disabled
@@ -4321,6 +4329,7 @@ static const struct dispc_ops dispc_ops = {

        .get_num_ovls = dispc_get_num_ovls,
        .get_num_mgrs = dispc_get_num_mgrs,
+       .get_min_max_size = dispc_get_min_max_size,

        .mgr_enable = dispc_mgr_enable,
        .mgr_is_enabled = dispc_mgr_is_enabled,
diff --git a/drivers/gpu/drm/omapdrm/dss/omapdss.h 
b/drivers/gpu/drm/omapdrm/dss/omapdss.h
index 74cba1ef7ee9..8d04b02a7d35 100644
--- a/drivers/gpu/drm/omapdrm/dss/omapdss.h
+++ b/drivers/gpu/drm/omapdrm/dss/omapdss.h
@@ -906,6 +906,7 @@ struct dispc_ops {

        int (*get_num_ovls)(void);
        int (*get_num_mgrs)(void);
+       void (*get_min_max_size)(u32 *min_w, u32 *min_h, u32 *max_w, u32 
*max_h);

        void (*mgr_enable)(enum omap_channel channel, bool enable);
        bool (*mgr_is_enabled)(enum omap_channel channel);
diff --git a/drivers/gpu/drm/omapdrm/omap_drv.c 
b/drivers/gpu/drm/omapdrm/omap_drv.c
index eecf8649c0f7..f53343c24335 100644
--- a/drivers/gpu/drm/omapdrm/omap_drv.c
+++ b/drivers/gpu/drm/omapdrm/omap_drv.c
@@ -315,6 +315,7 @@ static int omap_modeset_init(struct drm_device *dev)
        int num_crtcs;
        int i, id = 0;
        int ret;
+       u32 min_w, min_h, max_w, max_h;

        drm_mode_config_init(dev);

@@ -475,14 +476,16 @@ static int omap_modeset_init(struct drm_device *dev)
                priv->num_planes, priv->num_crtcs, priv->num_encoders,
                priv->num_connectors);

-       dev->mode_config.min_width = 8;
-       dev->mode_config.min_height = 2;
+       priv->dispc_ops->get_min_max_size(&min_w, &min_h, &max_w, &max_h);
+
+       dev->mode_config.min_width = min_w;
+       dev->mode_config.min_height = min_h;

        /* note: eventually will need some cpu_is_omapXYZ() type stuff here
         * to fill in these limits properly on different OMAP generations..
         */
-       dev->mode_config.max_width = 2048;
-       dev->mode_config.max_height = 2048;
+       dev->mode_config.max_width = max_w;
+       dev->mode_config.max_height = max_h;

        dev->mode_config.funcs = &omap_mode_config_funcs;

-- 
2.7.4

Reply via email to