
Dear Lukasz & Simon,
In message CAPnjgZ3tfvRJO-16ncwE43hPptdMEtOmPEK7pfeLkrMn-rVrgw@mail.gmail.com Simon Glass wrote:
dst = malloc(CONFIG_SYS_VIDEO_LOGO_MAX_SIZE);
dst = memalign(CONFIG_SYS_CACHELINE_SIZE, len);
Why do you need to align this one? It is just returned to the caller, isn't it?
Yes, it is returned to the caller, but afterwards lcd_display_bitmap takes this pointer (and thereof probably unaligned buffer) and works on it. (At least in the case of trats the bmp is gzipped).
OK, so it is directly used as a frame buffer? In that case it looks right to me. I doubt you want to be able to control the cache features for this area, since you only write it once. But if you did, then the memory would currently need to be section-aligned.
I don't think this is as it should be. Any frame buffer that actually gets used as such should be located in the memory area specifically allocated for this purpose using lcd_setmem(). This is especially important when you load a splash screen image and intend to display it flicker-free when booting an OS. If you use malloc() or memalign(), it will be memory in the malloc arena, which gets overwritten when an OS boots, resulting in a corrupted display.
Note: I added Anatolij, our video custodian to the Cc: list.
Best regards,
Wolfgang Denk