cfb_console: force natural alignment of unzipped bitmap images
PATCH 1/1 cfb_console: force natural alignment of unzipped bitmap images
Bitmaps contain 32-bit integers aligned at offsets of +2, +6 within the bmp_header structure. This patch forces them to be aligned properly when gzipped bitmaps are used.
Refer to these files for more details:
doc/README.displaying-bmps
doc/README.arm-unaligned-accesses
--- drivers/video/cfb_console.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)
drivers/video/cfb_console.c +5 -2
@@ -1473,7 +1473,10 @@ int video_display_bitmap(ulong bmp_image, int x, int y)printf ("Error: malloc in gunzip failed!\n" );return 1 ; } -if (gunzip (dst,CONFIG_SYS_VIDEO_LOGO_MAX_SIZE , +/* NB: we need to force offset of +2 +* See doc/README.displaying-bmps +*/ +if (gunzip (dst+2 ,CONFIG_SYS_VIDEO_LOGO_MAX_SIZE -2 , (uchar *) bmp_image, &len) !=0 ) { printf("Error: no valid bmp or bmp.gz image at %lx\n",
@@ -1489,7 +1492,7 @@ int video_display_bitmap(ulong bmp_image, int x, int y)/* * Set addr to decompressed image */ - bmp = (bmp_image_t *) dst; + bmp = (bmp_image_t *)(dst+2 );if (!((bmp->header.signature[0 ] =='B' ) && (bmp->header.signature[1 ] =='M' ))) {
Signature · 1 line
1.8.3.2
PATCH 1/1 cfb_console: force natural alignment of unzipped bitmap images
Dear Eric Nelson,
Quoted 4 lines · In message <[email protected]>…
Bitmaps contain 32-bit integers aligned at offsets of +2, +6 within the
bmp_headerstructure. This patch forces them to be aligned properly when gzipped bitmaps are used.
This makes no sense to me. In the Subject: you talk about "unzipped bitmap images", but here you write about "gzipped bitmaps".
I think I understand what you mean, but this needs better wording.
drivers/video/cfb_console.c int video_display_bitmap(ulong bmp_image, int x, int y) · line 1477
Quoted 3 lines
drivers/video/cfb_console.c +2
-1- if (gunzip(dst, CONFIG_SYS_VIDEO_LOGO_MAX_SIZE, +/* NB: we need to force offset of +2 +* See doc/README.displaying-bmps
Incorrect multiline comment style.
Best regards,
Wolfgang Denk
Signature · 7 lines
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
There are three ways to get something done:
(1) Do it yourself.
(2) Hire someone to do it for you.
(3) Forbid your kids to do it.PATCH v3 1/1 cfb_console: align fields in gzipped .bmp files
In reply to Eric Nelson.bmp files contain 32-bit integers aligned at offsets of +2, +6, et cetera within the bmp_header structure (see include/bmp_layout.h).
Support for gzip-compressed .bmp files is present in the cfb_console display subsystem by uncompressing them prior to use.
This patch forces the in-memory header to be aligned properly for these compressed images by extracting them to a 2-byte offset in the memory returned by malloc. Since malloc will always return a 4-byte aligned value, this forces the .bmp header fields to be naturally aligned on 4-byte addresses.
Refer to these files for more details:
doc/README.displaying-bmps
doc/README.arm-unaligned-accesses
---
Changes in V2:
- re-worded the subject line
- expanded and re-worded the commit message
Changes in V3:
- shortened the subject line
- fixed multiline comment style
- added patch history
- sent with "In-Reply-To" header referring to V1 See also:
V1: http://patchwork.ozlabs.org/patch/323243/
V2: http://patchwork.ozlabs.org/patch/325348/
drivers/video/cfb_console.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-)
drivers/video/cfb_console.c +6 -2
@@ -1473,7 +1473,11 @@ int video_display_bitmap(ulong bmp_image, int x, int y)printf ("Error: malloc in gunzip failed!\n" );return 1 ; } -if (gunzip (dst,CONFIG_SYS_VIDEO_LOGO_MAX_SIZE , +/* +* NB: we need to force offset of +2 +* See doc/README.displaying-bmps +*/ +if (gunzip (dst+2 ,CONFIG_SYS_VIDEO_LOGO_MAX_SIZE -2 , (uchar *) bmp_image, &len) !=0 ) { printf("Error: no valid bmp or bmp.gz image at %lx\n",
@@ -1489,7 +1493,7 @@ int video_display_bitmap(ulong bmp_image, int x, int y)/* * Set addr to decompressed image */ - bmp = (bmp_image_t *) dst; + bmp = (bmp_image_t *)(dst+2 );if (!((bmp->header.signature[0 ] =='B' ) && (bmp->header.signature[1 ] =='M' ))) {
Signature · 1 line
1.8.3.2
PATCH v3 1/1 cfb_console: align fields in gzipped .bmp files
Quoted 12 lines · Eric Nelson
.bmp files contain 32-bit integers aligned at offsets of +2, +6, et cetera within the
bmp_headerstructure (seeinclude/bmp_layout.h).Support for gzip-compressed .bmp files is present in the
cfb_consoledisplay subsystem by uncompressing them prior to use.This patch forces the in-memory header to be aligned properly for these compressed images by extracting them to a 2-byte offset in the memory returned by malloc. Since malloc will always return a 4-byte aligned value, this forces the .bmp header fields to be naturally aligned on 4-byte addresses.
Quoted 5 lines
Refer to these files for more details:
doc/README.displaying-bmps
doc/README.arm-unaligned-accessesSigned-off-by Eric Nelson <[email protected]>
Applied to u-boot/master, thanks!
Signature · 8 lines
Tom -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 836 bytes Desc: Digital signature URL: <http://lists.denx.de/pipermail/u-boot/attachments/20140310/b041d9e0/attachment.pgp>