mirror of
https://github.com/brain-hackers/u-boot-brain
synced 2024-10-04 18:40:42 +09:00
fsl_diu: fix alignment error that caused malloc corruption
When aligning malloc()ed screen_base, invalid offset was added. This not only caused misaligned result (which did not cause hardware misbehaviour), but - worse - caused screen_base + smem_len to be out of malloc()ed space, which in turn caused breakage of futher malloc()/free() operation. This patch fixes screen_base alignment. Also this patch makes memset() that cleans framebuffer to be executed on first initialization of diu, not only on re-initialization. It looks correct to clean the framebuffer instead of displaying random garbage; I believe that was disabled only because that memset caused breakage of malloc/free described above - which no longer happens with the fix described above. Signed-off-by: Nikita V. Youshchenko <yoush@debian.org>
This commit is contained in:
parent
3d0ea3110f
commit
ec4d8c1c1d
@ -242,10 +242,10 @@ int fsl_diu_init(int xres,
|
|||||||
printf("Unable to allocate fb memory 1\n");
|
printf("Unable to allocate fb memory 1\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
memset(info->screen_base, 0, info->smem_len);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
memset(info->screen_base, 0, info->smem_len);
|
||||||
|
|
||||||
dr.diu_reg->desc[0] = (unsigned int) &dummy_ad;
|
dr.diu_reg->desc[0] = (unsigned int) &dummy_ad;
|
||||||
dr.diu_reg->desc[1] = (unsigned int) &dummy_ad;
|
dr.diu_reg->desc[1] = (unsigned int) &dummy_ad;
|
||||||
dr.diu_reg->desc[2] = (unsigned int) &dummy_ad;
|
dr.diu_reg->desc[2] = (unsigned int) &dummy_ad;
|
||||||
@ -403,7 +403,7 @@ static int map_video_memory(struct fb_info *info, unsigned long bytes_align)
|
|||||||
mask = bytes_align - 1;
|
mask = bytes_align - 1;
|
||||||
offset = (unsigned long)info->screen_base & mask;
|
offset = (unsigned long)info->screen_base & mask;
|
||||||
if (offset) {
|
if (offset) {
|
||||||
info->screen_base += offset;
|
info->screen_base += (bytes_align - offset);
|
||||||
info->smem_len = info->smem_len - (bytes_align - offset);
|
info->smem_len = info->smem_len - (bytes_align - offset);
|
||||||
} else
|
} else
|
||||||
info->smem_len = info->smem_len - bytes_align;
|
info->smem_len = info->smem_len - bytes_align;
|
||||||
|
Loading…
Reference in New Issue
Block a user