On 06/21/2017 12:34 PM, Shashank Sharma wrote:
> CEA-861-F specs defines new video modes to be used with
> HDMI 2.0 EDIDs. The VIC range has been extended from 1-64 to
> 1-107.
> 
> Our existing CEA modedb contains only 64 modes (VIC=1 to VIC=64). Now
> to be able to parse new CEA modes using the existing methods, we have
> to complete the modedb (VIC=65 onwards).
> 
> This patch adds:
> - Timings for existing CEA video modes (from VIC=65 till VIC=92)
> - Newly added 4k modes (from VIC=93 to VIC=107).
> 
> The patch was originaly discussed and reviewed here:
> https://patchwork.freedesktop.org/patch/135810/
> 
> Cc: Ville Syrjala <ville.syrj...@linux.intel.com>
> Cc: Jose Abreu <jose.ab...@synopsys.com>
> Cc: Andrzej Hajda <a.ha...@samsung.com>
> Cc: Alex Deucher <alexander.deuc...@amd.com>
> Cc: Harry Wentland <harry.wentl...@amd.com>
> 
> V2: Rebase
> V3: Rebase
> V4: Added native bit handling as per CEA-861-F spec (Ville)
> 
> Reviewed-by: Jose Abreu <jose.ab...@synopsys.com>
> Reviewed-by: Alex Deucher <alexander.deuc...@amd.com>
> Acked-by: Harry Wentland <harry.wentl...@amd.com>
> Signed-off-by: Shashank Sharma <shashank.sha...@intel.com>
> ---
>  drivers/gpu/drm/drm_edid.c | 227 
> ++++++++++++++++++++++++++++++++++++++++++++-
>  1 file changed, 226 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
> index d312fe1..e2d1b30 100644
> --- a/drivers/gpu/drm/drm_edid.c
> +++ b/drivers/gpu/drm/drm_edid.c
> @@ -1006,6 +1006,221 @@ static const struct drm_display_mode edid_cea_modes[] 
> = {
>                  2492, 2640, 0, 1080, 1084, 1089, 1125, 0,
>                  DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC),
>        .vrefresh = 100, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
> +     /* 65 - 1280x720@24Hz */
> +     { DRM_MODE("1280x720", DRM_MODE_TYPE_DRIVER, 59400, 1280, 3040,
> +                3080, 3300, 0, 720, 725, 730, 750, 0,
> +                DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC),
> +       .vrefresh = 24, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_64_27, },
> +     /* 66 - 1280x720@25Hz */
> +     { DRM_MODE("1280x720", DRM_MODE_TYPE_DRIVER, 74250, 1280, 3700,
> +                3740, 3960, 0, 720, 725, 730, 750, 0,
> +                DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC),
> +       .vrefresh = 25, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_64_27, },
> +     /* 67 - 1280x720@30Hz */
> +     { DRM_MODE("1280x720", DRM_MODE_TYPE_DRIVER, 74250, 1280, 3040,
> +                3080, 3300, 0, 720, 725, 730, 750, 0,
> +                DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC),
> +       .vrefresh = 30, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_64_27, },
> +     /* 68 - 1280x720@50Hz */
> +     { DRM_MODE("1280x720", DRM_MODE_TYPE_DRIVER, 74250, 1280, 1720,
> +                1760, 1980, 0, 720, 725, 730, 750, 0,
> +                DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC),
> +       .vrefresh = 50, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_64_27, },
> +     /* 69 - 1280x720@60Hz */
> +     { DRM_MODE("1280x720", DRM_MODE_TYPE_DRIVER, 74250, 1280, 1390,
> +                1430, 1650, 0, 720, 725, 730, 750, 0,
> +                DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC),
> +       .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_64_27, },
> +     /* 70 - 1280x720@100Hz */
> +     { DRM_MODE("1280x720", DRM_MODE_TYPE_DRIVER, 148500, 1280, 1720,
> +                1760, 1980, 0, 720, 725, 730, 750, 0,
> +                DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC),
> +       .vrefresh = 100, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_64_27, },
> +     /* 71 - 1280x720@120Hz */
> +     { DRM_MODE("1280x720", DRM_MODE_TYPE_DRIVER, 148500, 1280, 1390,
> +                1430, 1650, 0, 720, 725, 730, 750, 0,
> +                DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC),
> +       .vrefresh = 120, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_64_27, },
> +     /* 72 - 1920x1080@24Hz */
> +     { DRM_MODE("1920x1080", DRM_MODE_TYPE_DRIVER, 74250, 1920, 2558,
> +                2602, 2750, 0, 1080, 1084, 1089, 1125, 0,
> +                DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC),
> +       .vrefresh = 24, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_64_27, },
> +     /* 73 - 1920x1080@25Hz */
> +     { DRM_MODE("1920x1080", DRM_MODE_TYPE_DRIVER, 74250, 1920, 2448,
> +                2492, 2640, 0, 1080, 1084, 1089, 1125, 0,
> +                DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC),
> +       .vrefresh = 25, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_64_27, },
> +     /* 74 - 1920x1080@30Hz */
> +     { DRM_MODE("1920x1080", DRM_MODE_TYPE_DRIVER, 74250, 1920, 2008,
> +                2052, 2200, 0, 1080, 1084, 1089, 1125, 0,
> +                DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC),
> +       .vrefresh = 30, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_64_27, },
> +     /* 75 - 1920x1080@50Hz */
> +     { DRM_MODE("1920x1080", DRM_MODE_TYPE_DRIVER, 148500, 1920, 2448,
> +                2492, 2640, 0, 1080, 1084, 1089, 1125, 0,
> +                DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC),
> +       .vrefresh = 50, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_64_27, },
> +     /* 76 - 1920x1080@60Hz */
> +     { DRM_MODE("1920x1080", DRM_MODE_TYPE_DRIVER, 148500, 1920, 2008,
> +                2052, 2200, 0, 1080, 1084, 1089, 1125, 0,
> +                DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC),
> +       .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_64_27, },
> +     /* 77 - 1920x1080@100Hz */
> +     { DRM_MODE("1920x1080", DRM_MODE_TYPE_DRIVER, 297000, 1920, 2448,
> +                2492, 2640, 0, 1080, 1084, 1094, 1125, 0,
> +                DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC),
> +      .vrefresh = 100, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_64_27, },
> +     /* 78 - 1920x1080@120Hz */
> +     { DRM_MODE("1920x1080", DRM_MODE_TYPE_DRIVER, 297000, 1920, 2008,
> +                2052, 2200, 0, 1080, 1084, 1089, 1125, 0,
> +                DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC),
> +      .vrefresh = 120, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_64_27, },
> +     /* 79 - 1680x720@24Hz */
> +     { DRM_MODE("1680x720", DRM_MODE_TYPE_DRIVER, 59400, 1680, 3040,
> +             3080, 3300, 0, 720, 725, 730, 750, 0,
> +             DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC),
> +     .vrefresh = 24, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_64_27, },
> +     /* 80 - 1680x720@25Hz */
> +     { DRM_MODE("1680x720", DRM_MODE_TYPE_DRIVER, 59400, 1680, 2908,
> +             2948, 3168, 0, 720, 725, 730, 750, 0,
> +             DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC),
> +     .vrefresh = 25, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_64_27, },
> +     /* 81 - 1680x720@30Hz */
> +     { DRM_MODE("1680x720", DRM_MODE_TYPE_DRIVER, 59400, 1680, 2380,
> +             2420, 2640, 0, 720, 725, 730, 750, 0,
> +             DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC),
> +     .vrefresh = 30, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_64_27, },
> +     /* 82 - 1680x720@50Hz */
> +     { DRM_MODE("1680x720", DRM_MODE_TYPE_DRIVER, 82500, 1680, 1940,
> +             1980, 2200, 0, 720, 725, 730, 750, 0,
> +             DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC),
> +     .vrefresh = 50, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_64_27, },
> +     /* 83 - 1680x720@60Hz */
> +     { DRM_MODE("1680x720", DRM_MODE_TYPE_DRIVER, 99000, 1680, 1940,
> +             1980, 2200, 0, 720, 725, 730, 750, 0,
> +             DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC),
> +     .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_64_27, },
> +     /* 84 - 1680x720@100Hz */
> +     { DRM_MODE("1680x720", DRM_MODE_TYPE_DRIVER, 165000, 1680, 1740,
> +             1780, 2000, 0, 720, 725, 730, 825, 0,
> +             DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC),
> +     .vrefresh = 100, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_64_27, },
> +     /* 85 - 1680x720@120Hz */
> +     { DRM_MODE("1680x720", DRM_MODE_TYPE_DRIVER, 198000, 1680, 1740,
> +             1780, 2000, 0, 720, 725, 730, 825, 0,
> +             DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC),
> +     .vrefresh = 120, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_64_27, },
> +     /* 86 - 2560x1080@24Hz */
> +     { DRM_MODE("2560x1080", DRM_MODE_TYPE_DRIVER, 99000, 2560, 3558,
> +             3602, 3750, 0, 1080, 1084, 1089, 1100, 0,
> +             DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC),
> +     .vrefresh = 24, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_64_27, },
> +     /* 87 - 2560x1080@25Hz */
> +     { DRM_MODE("2560x1080", DRM_MODE_TYPE_DRIVER, 90000, 2560, 3008,
> +             3052, 3200, 0, 1080, 1084, 1089, 1125, 0,
> +             DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC),
> +     .vrefresh = 25, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_64_27, },
> +     /* 88 - 2560x1080@30Hz */
> +     { DRM_MODE("2560x1080", DRM_MODE_TYPE_DRIVER, 118800, 2560, 3328,
> +             3372, 3520, 0, 1080, 1084, 1089, 1125, 0,
> +             DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC),
> +     .vrefresh = 30, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_64_27, },
> +     /* 89 - 2560x1080@50Hz */
> +     { DRM_MODE("2560x1080", DRM_MODE_TYPE_DRIVER, 185625, 2560, 3108,
> +             3152, 3300, 0, 1080, 1084, 1089, 1125, 0,
> +             DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC),
> +     .vrefresh = 50, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_64_27, },
> +     /* 90 - 2560x1080@60Hz */
> +     { DRM_MODE("2560x1080", DRM_MODE_TYPE_DRIVER, 198000, 2560, 2808,
> +             2852, 3000, 0, 1080, 1084, 1089, 1100, 0,
> +             DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC),
> +     .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_64_27, },
> +     /* 91 - 2560x1080@100Hz */
> +     { DRM_MODE("2560x1080", DRM_MODE_TYPE_DRIVER, 371250, 2560, 2778,
> +             2822, 2970, 0, 1080, 1084, 1089, 1250, 0,
> +             DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC),
> +     .vrefresh = 100, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_64_27, },
> +     /* 92 - 2560x1080@120Hz */
> +     { DRM_MODE("2560x1080", DRM_MODE_TYPE_DRIVER, 495000, 2560, 3108,
> +             3152, 3300, 0, 1080, 1084, 1089, 1250, 0,
> +             DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC),
> +     .vrefresh = 120, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_64_27, },
> +     /* 93 - 3840x2160p@24Hz 16:9 */
> +     { DRM_MODE("3840x2160", DRM_MODE_TYPE_DRIVER, 297000, 3840, 5116,
> +             5204, 5500, 0, 2160, 2168, 2178, 2250, 0,
> +             DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC),
> +     .vrefresh = 24, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9,},
> +     /* 94 - 3840x2160p@25Hz 16:9 */
> +     { DRM_MODE("3840x2160", DRM_MODE_TYPE_DRIVER, 297000, 3840, 4896,
> +             4984, 5280, 0, 2160, 2168, 2178, 2250, 0,
> +             DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC),
> +     .vrefresh = 25, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9},
> +     /* 95 - 3840x2160p@30Hz 16:9 */
> +     { DRM_MODE("3840x2160", DRM_MODE_TYPE_DRIVER, 297000, 3840, 4016,
> +             4104, 4400, 0, 2160, 2168, 2178, 2250, 0,
> +             DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC),
> +     .vrefresh = 30, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9},
> +     /* 96 - 3840x2160p@50Hz 16:9 */
> +     { DRM_MODE("3840x2160", DRM_MODE_TYPE_DRIVER, 594000, 3840, 4896,
> +             4984, 5280, 0, 2160, 2168, 2178, 2250, 0,
> +             DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC),
> +     .vrefresh = 50, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9},
> +     /* 97 - 3840x2160p@60Hz 16:9 */
> +     { DRM_MODE("3840x2160", DRM_MODE_TYPE_DRIVER, 594000, 3840, 4016,
> +             4104, 4400, 0, 2160, 2168, 2178, 2250, 0,
> +             DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC),
> +     .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9},
> +     /* 98 - 4096x2160p@24Hz 256:135 */
> +     { DRM_MODE("4096x2160", DRM_MODE_TYPE_DRIVER, 297000, 4096, 5116,
> +             5204, 5500, 0, 2160, 2168, 2178, 2250, 0,
> +             DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC),
> +     .vrefresh = 24, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_256_135},
> +     /* 99 - 4096x2160p@25Hz 256:135 */
> +     { DRM_MODE("4096x2160", DRM_MODE_TYPE_DRIVER, 297000, 4096, 5064,
> +             5152, 5280, 0, 2160, 2168, 2178, 2250, 0,
> +             DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC),
> +     .vrefresh = 25, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_256_135},
> +     /* 100 - 4096x2160p@30Hz 256:135 */
> +     { DRM_MODE("4096x2160", DRM_MODE_TYPE_DRIVER, 297000, 4096, 4184,
> +             4272, 4400, 0, 2160, 2168, 2178, 2250, 0,
> +             DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC),
> +     .vrefresh = 30, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_256_135},
> +     /* 101 - 4096x2160p@50Hz 256:135 */
> +     { DRM_MODE("4096x2160", DRM_MODE_TYPE_DRIVER, 594000, 4096, 5064,
> +             5152, 5280, 0, 2160, 2168, 2178, 2250, 0,
> +             DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC),
> +     .vrefresh = 50, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_256_135},
> +     /* 102 - 4096x2160p@60Hz 256:135 */
> +     { DRM_MODE("4096x2160", DRM_MODE_TYPE_DRIVER, 594000, 4096, 4184,
> +             4272, 4400, 0, 2160, 2168, 2178, 2250, 0,
> +             DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC),
> +     .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_256_135},
> +     /* 103 - 3840x2160p@24Hz 64:27 */
> +     { DRM_MODE("3840x2160", DRM_MODE_TYPE_DRIVER, 297000, 3840, 5116,
> +             5204, 5500, 0, 2160, 2168, 2178, 2250, 0,
> +             DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC),
> +     .vrefresh = 24, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_64_27},
> +     /* 104 - 3840x2160p@25Hz 64:27 */
> +     { DRM_MODE("3840x2160", DRM_MODE_TYPE_DRIVER, 297000, 3840, 4016,
> +             4104, 4400, 0, 2160, 2168, 2178, 2250, 0,
> +             DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC),
> +     .vrefresh = 25, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_64_27},
> +     /* 105 - 3840x2160p@30Hz 64:27 */
> +     { DRM_MODE("3840x2160", DRM_MODE_TYPE_DRIVER, 297000, 3840, 4016,
> +             4104, 4400, 0, 2160, 2168, 2178, 2250, 0,
> +             DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC),
> +     .vrefresh = 30, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_64_27},
> +     /* 106 - 3840x2160p@50Hz 64:27 */
> +     { DRM_MODE("3840x2160", DRM_MODE_TYPE_DRIVER, 594000, 3840, 4896,
> +             4984, 5280, 0, 2160, 2168, 2178, 2250, 0,
> +             DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC),
> +     .vrefresh = 50, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_64_27},
> +     /* 107 - 3840x2160p@60Hz 64:27 */
> +     { DRM_MODE("3840x2160", DRM_MODE_TYPE_DRIVER, 594000, 3840, 4016,
> +             4104, 4400, 0, 2160, 2168, 2178, 2250, 0,
> +             DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC),
> +     .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_64_27},
>  };
>  
>  /*
> @@ -2902,6 +3117,16 @@ add_alternate_cea_modes(struct drm_connector 
> *connector, struct edid *edid)
>       return modes;
>  }
>  
> +static u8 svd_to_vic(u8 svd)
> +{
> +
> +     /* 0-6 bit vic, 7th bit native mode indicator */
> +     if (((svd >= 1) && (svd <= 64)) || ((svd >= 129) && (svd <= 192)))
> +             return svd & 127;
> +
> +     return svd;
> +}
> +
>  static struct drm_display_mode *
>  drm_display_mode_from_vic_index(struct drm_connector *connector,
>                               const u8 *video_db, u8 video_len,
> @@ -2915,7 +3140,7 @@ drm_display_mode_from_vic_index(struct drm_connector 
> *connector,
>               return NULL;
>  
>       /* CEA modes are numbered 1..127 */
> -     vic = (video_db[video_index] & 127);
> +     vic = svd_to_vic(video_db[video_index]);
>       if (!drm_valid_cea_vic(vic))
>               return NULL;
>  
> 

Reviewed-by: Neil Armstrong <narmstr...@baylibre.com>
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to