win0->fmt_10 = (val & m_WIN0_FMT_10) >> 4;
win0->format = win0->fmt_cfg;
break;
+ case WIN0_VIR:
+ win0->area[0].y_vir_stride =
+ val & m_WIN0_VIR_STRIDE;
+ win0->area[0].uv_vir_stride =
+ (val & m_WIN0_VIR_STRIDE_UV) >> 16;
+ if (win0->format == ARGB888)
+ win0->area[0].xvir =
+ win0->area[0].y_vir_stride;
+ else if (win0->format == RGB888)
+ win0->area[0].xvir =
+ win0->area[0].y_vir_stride * 4 / 3;
+ else if (win0->format == RGB565)
+ win0->area[0].xvir =
+ 2 * win0->area[0].y_vir_stride;
+ else /* YUV */
+ win0->area[0].xvir =
+ 4 * win0->area[0].y_vir_stride;
+ break;
case WIN0_YRGB_MST:
win0->area[0].smem_start = val;
break;
} else {
ext_win->area[0].xact = win->area[0].xact;
ext_win->area[0].yact = win->area[0].yact;
- ext_win->area[0].xvir = win->area[0].xvir;
- ext_win->area[0].yvir = win->area[0].yvir;
+ if (win->area[0].xvir == 0)
+ ext_win->area[0].xvir = win->area[0].xact;
+ else
+ ext_win->area[0].xvir = win->area[0].xvir;
+ if (win->area[0].yvir == 0)
+ ext_win->area[0].yvir = win->area[0].yact;
+ else
+ ext_win->area[0].yvir = win->area[0].yvir;
ext_win->area[0].y_vir_stride = win->area[0].y_vir_stride;
if (is_yuv)
ext_win->area[0].uv_vir_stride = win->area[0].uv_vir_stride;
rk_fb_alloc_buffer(main_fbi, 0); /* only alloc memory for main fb */
if (support_uboot_display()) {
- rk_fb_copy_from_loader(main_fbi);
- dev_drv->ops->direct_set_addr(dev_drv, 0,
+ if (dev_drv->iommu_enabled) {
+ rk_fb_copy_from_loader(main_fbi);
+ dev_drv->ops->direct_set_addr(dev_drv, 0,
main_fbi->fix.smem_start);
+ }
return 0;
}
main_fbi->fbops->fb_set_par(main_fbi);