[Intel-gfx] [PATCH 04/15] drm/i915/bios: have get_blocksize() support MIPI sequence block v3+

Jani Nikula jani.nikula at intel.com
Tue Jan 5 05:01:21 PST 2016


On Tue, 05 Jan 2016, Daniel Vetter <daniel at ffwll.ch> wrote:
> On Mon, Dec 21, 2015 at 03:10:55PM +0200, Jani Nikula wrote:
>> Have get_blocksize() support the special case of MIPI sequence block v3+
>> which has a separate field for size. Provide and use abstractions for
>> getting the blocksize given a pointer to the block "envelope",
>> i.e. pointer to the block id, and given a pointer to the block payload
>> data.
>> 
>> Signed-off-by: Jani Nikula <jani.nikula at intel.com>
>
> Reviewed-by: Daniel Vetter <daniel.vetter at ffwll.ch>

Patches 2-4 pushed to drm-intel-next-queued, thanks for the review.

BR,
Jani.

>
>> ---
>>  drivers/gpu/drm/i915/intel_bios.c | 36 ++++++++++++++++++------------------
>>  1 file changed, 18 insertions(+), 18 deletions(-)
>> 
>> diff --git a/drivers/gpu/drm/i915/intel_bios.c b/drivers/gpu/drm/i915/intel_bios.c
>> index 91540ab15e0b..7393596df37d 100644
>> --- a/drivers/gpu/drm/i915/intel_bios.c
>> +++ b/drivers/gpu/drm/i915/intel_bios.c
>> @@ -58,6 +58,22 @@
>>  
>>  static int panel_type;
>>  
>> +/* Get BDB block size given a pointer to Block ID. */
>> +static u32 _get_blocksize(const u8 *block_base)
>> +{
>> +	/* The MIPI Sequence Block v3+ has a separate size field. */
>> +	if (*block_base == BDB_MIPI_SEQUENCE && *(block_base + 3) >= 3)
>> +		return *((const u32 *)(block_base + 4));
>> +	else
>> +		return *((const u16 *)(block_base + 1));
>> +}
>> +
>> +/* Get BDB block size give a pointer to data after Block ID and Block Size. */
>> +static u32 get_blocksize(const void *block_data)
>> +{
>> +	return _get_blocksize(block_data - 3);
>> +}
>> +
>>  static const void *
>>  find_section(const void *_bdb, int section_id)
>>  {
>> @@ -74,14 +90,8 @@ find_section(const void *_bdb, int section_id)
>>  	/* walk the sections looking for section_id */
>>  	while (index + 3 < total) {
>>  		current_id = *(base + index);
>> -		index++;
>> -
>> -		current_size = *((const u16 *)(base + index));
>> -		index += 2;
>> -
>> -		/* The MIPI Sequence Block v3+ has a separate size field. */
>> -		if (current_id == BDB_MIPI_SEQUENCE && *(base + index) >= 3)
>> -			current_size = *((const u32 *)(base + index + 1));
>> +		current_size = _get_blocksize(base + index);
>> +		index += 3;
>>  
>>  		if (index + current_size > total)
>>  			return NULL;
>> @@ -95,16 +105,6 @@ find_section(const void *_bdb, int section_id)
>>  	return NULL;
>>  }
>>  
>> -static u16
>> -get_blocksize(const void *p)
>> -{
>> -	u16 *block_ptr, block_size;
>> -
>> -	block_ptr = (u16 *)((char *)p - 2);
>> -	block_size = *block_ptr;
>> -	return block_size;
>> -}
>> -
>>  static void
>>  fill_detail_timing_data(struct drm_display_mode *panel_fixed_mode,
>>  			const struct lvds_dvo_timing *dvo_timing)
>> -- 
>> 2.1.4
>> 
>> _______________________________________________
>> Intel-gfx mailing list
>> Intel-gfx at lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/intel-gfx

-- 
Jani Nikula, Intel Open Source Technology Center


More information about the Intel-gfx mailing list