On Mon, Dec 21, 2015 at 03:11:05PM +0200, Jani Nikula wrote:
> The sequence block has sizes of elements after the operation byte since
> sequence block v3. Use it to skip elements we don't support yet.
> 
> Signed-off-by: Jani Nikula <jani.nik...@intel.com>
> ---
>  drivers/gpu/drm/i915/intel_dsi_panel_vbt.c | 43 
> +++++++++++++++++-------------
>  1 file changed, 24 insertions(+), 19 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c 
> b/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c
> index eabfd9eb9cc0..1f9c80d21904 100644
> --- a/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c
> +++ b/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c
> @@ -335,31 +335,36 @@ static void generic_exec_sequence(struct intel_dsi 
> *intel_dsi, const u8 *data)
>       if (dev_priv->vbt.dsi.seq_version >= 3)
>               data += 4;
>  
> -     /* parse each byte till we reach end of sequence byte - 0x00 */
>       while (1) {
>               u8 operation_byte = *data++;
> -             if (operation_byte >= ARRAY_SIZE(exec_elem) ||
> -                 !exec_elem[operation_byte]) {
> +             u8 operation_size = 0;
> +
> +             if (operation_byte == MIPI_SEQ_ELEM_END)
> +                     break;
> +
> +             if (operation_byte < ARRAY_SIZE(exec_elem) &&
> +                 exec_elem[operation_byte])

&& exec_elem[operation_byte] is redundant since you assing it to NULL
anyway in the else clause. While I bikeshed: Might look prettier with ?:


> +                     mipi_elem_exec = exec_elem[operation_byte];
> +             else
> +                     mipi_elem_exec = NULL;
> +
> +             /* Size of Operation. */
> +             if (dev_priv->vbt.dsi.seq_version >= 3)
> +                     operation_size = *data++;
> +
> +             if (mipi_elem_exec) {
> +                     data = mipi_elem_exec(intel_dsi, data);
> +             } else if (operation_size) {
> +                     /* We have size, skip. */
> +                     DRM_DEBUG_KMS("Unsupported MIPI operation byte %u\n",
> +                                   operation_byte);

DRM_ERROR, like in the other cases we fail to parse the sequence fully?

Either way on both bikesheds: Reviewed-by: Daniel Vetter 
<daniel.vet...@ffwll.ch>


> +                     data += operation_size;
> +             } else {
> +                     /* No size, can't skip without parsing. */
>                       DRM_ERROR("Unsupported MIPI operation byte %u\n",
>                                 operation_byte);
>                       return;
>               }
> -             mipi_elem_exec = exec_elem[operation_byte];
> -
> -             /* Skip Size of Operation. */
> -             if (dev_priv->vbt.dsi.seq_version >= 3)
> -                     data++;
> -
> -             /* execute the element specific rotines */
> -             data = mipi_elem_exec(intel_dsi, data);
> -
> -             /*
> -              * After processing the element, data should point to
> -              * next element or end of sequence
> -              * check if have we reached end of sequence
> -              */
> -             if (*data == 0x00)
> -                     break;
>       }
>  }
>  
> -- 
> 2.1.4
> 
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to