We are using imx6ull processor and msxfb.c as our linux driver, it takes DOTCLK mode to display. However , for the same view, the driver will continually send the same data to the screen.
My question is that is that possible to optimise it , making it only output the different screen data to lower the CPU load ?
*enable the dotclk mode and RUN bit*/
//writel(CTRL_DOTCLK_MODE | CTRL_RUN, host->base + LCDC_CTRL + REG_SET);
/*disable the dotclk mode*/
//writel(CTRL_DOTCLK_MODE, host->base + LCDC_CTRL + REG_CLR);
And could we just use the current buffer register in the linux driver ? and clearing the DOTCLK mode bit will stop the transferring ?
Hi Alven
>My question is that is that possible to optimise it , making it only output the
>different screen data to lower the CPU load ?
I am afraid it is not supported in hardware, sorry. For stop data transferring one can
look at sect.34.4.8.1 Code Example i.MX 6ULL Applications Processor Reference Manual
Best regards
igor
For the data transferring stop, could we just set the DOTCLK_MODE to 0?
thanks igor.
HI igor,
we only use the current buffer register in 8080NPU mode in freertos, it could only out put what we wanted.
however , could we do the same thing in linux driver ? and its in DOTCLK mode. I guess this interface is for screen output in mxsfb.c in linux driver. Is that possible to make some optimization as well ?
static int mxsfb_pan_display(struct fb_var_screeninfo *var,
struct fb_info *fb_info)
{
int ret = 0;
struct mxsfb_info *host = fb_info->par;
unsigned offset;
if (host->cur_blank != FB_BLANK_UNBLANK) {
dev_dbg(fb_info->device, "can't do pan display when fb "
"is blank\n");
return -EINVAL;
}
if (var->xoffset > 0) {
dev_dbg(fb_info->device, "x panning not supported\n");
return -EINVAL;
}
if ((var->yoffset + var->yres > var->yres_virtual)) {
dev_err(fb_info->device, "y panning exceeds\n");
return -EINVAL;
}
init_completion(&host->flip_complete);
offset = fb_info->fix.line_length * var->yoffset;
/* update on next VSYNC */
writel(fb_info->fix.smem_start + offset,
host->base + host->devdata->cur_buf);
writel(CTRL1_CUR_FRAME_DONE_IRQ_EN,
host->base + LCDC_CTRL1 + REG_SET);
/*enable the dotclk mode and RUN bit*/
//writel(CTRL_DOTCLK_MODE | CTRL_RUN, host->base + LCDC_CTRL + REG_SET);
/*disable the dotclk mode*/
//writel(CTRL_DOTCLK_MODE, host->base + LCDC_CTRL + REG_CLR);
ret = wait_for_completion_timeout(&host->flip_complete, HZ / 2);
if (!ret) {
dev_err(fb_info->device,
"mxs wait for pan flip timeout\n");
return -ETIMEDOUT;
}
return 0;
}
thanks.