@Bio_TICFSL do you mean, that when late_init is enabled, ipu is not getting the framebuffer address from u-boot? In either case IPU should be running and when late_init is set to 0, the display blinks and after a while psplash image is seen.
In mxc_ipuv3_fb.c I've identified, that the crusial piece of code involving late_init is mxcfb_register function:
if (!mxcfbi->late_init) {
fbi->var.activate |= FB_ACTIVATE_FORCE;
console_lock();
ret = fb_set_var(fbi, &fbi->var);
if (!ret)
fbcon_update_vcs(fbi, fbi->var.activate & FB_ACTIVATE_ALL);
console_unlock();
if (ret < 0) {
dev_err(fbi->device, "Error fb_set_var ret:%d\n", ret);
goto err3;
}
if (mxcfbi->next_blank == FB_BLANK_UNBLANK) {
console_lock();
ret = fb_blank(fbi, FB_BLANK_UNBLANK);
console_unlock();
if (ret < 0) {
dev_err(fbi->device,
"Error fb_blank ret:%d\n", ret);
goto err4;
}
}
} else {
/*
* Setup the channel again though bootloader
* has done this, then set_par() can stop the
* channel neatly and re-initialize it .
*/
if (mxcfbi->next_blank == FB_BLANK_UNBLANK) {
console_lock();
_setup_disp_channel1(fbi);
ipu_enable_channel(mxcfbi->ipu, mxcfbi->ipu_ch);
console_unlock();
}
}
So I've create a function in mxc_ipuv3_fb.c base on that if part of the statement, which is not getting called when late_init is 1:
int mxcfb_reinit(struct fb_info *fbi)
{
struct mxcfb_info *mxcfbi = (struct mxcfb_info *)fbi->par;
int ret = 0;
if (!fbi || !mxcfbi)
return -EINVAL;
fbi->var.activate |= FB_ACTIVATE_FORCE;
// console_lock();
ret = fb_set_var(fbi, &fbi->var);
if (!ret)
fbcon_update_vcs(fbi, fbi->var.activate & FB_ACTIVATE_ALL);
// console_unlock();
if (ret < 0)
return ret;
// console_lock();
ret = fb_blank(fbi, FB_BLANK_UNBLANK);
//console_unlock();
return 0;
}
EXPORT_SYMBOL(mxcfb_reinit);
And I've added it to mxcfb_ioctl, so I could call it from user space, but the problem is that I get a lot of warnings about deadlock, when the function is called and sometimes the deadlock really happens, which is of consern, but at least the display is refreshed and if I call psplash explicitly, then display is updated with the psplash image, but the progress bar is not working, but it could be another problem. This could be a solution, but I would really appreceate a more cleaner one.