On Tue, 05 Jan 2016, Daniel Vetter <daniel@xxxxxxxx> 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@xxxxxxxxx> > > Reviewed-by: Daniel Vetter <daniel.vetter@xxxxxxxx> 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@xxxxxxxxxxxxxxxxxxxxx >> http://lists.freedesktop.org/mailman/listinfo/intel-gfx -- Jani Nikula, Intel Open Source Technology Center _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/intel-gfx