Re: [PATCH 14/15] drm/i915/dsi: skip unknown elements for sequence block v3+

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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.nikula@xxxxxxxxx>
> ---
>  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.vetter@xxxxxxxx>


> +			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@xxxxxxxxxxxxxxxxxxxxx
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx

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




[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]
  Powered by Linux