osd: make osd2 and osd3 work

PD#156734: osd:
1. fix the osd2 & osd3 init error
2. enable all mem_pd

Change-Id: Ib0d817e98ad5381fdd9dc436ff30bf4ed8bbbcca
Signed-off-by: Brian Zhu <brian.zhu@amlogic.com>
This commit is contained in:
Brian Zhu
2018-02-04 05:24:26 +08:00
committed by Yixun Lan
parent 81b4552562
commit 6a8a46b2ea
2 changed files with 34 additions and 18 deletions

View File

@@ -239,10 +239,10 @@ static struct fb_var_screeninfo fb_def_var[] = {
.rotate = 0,
},
{
.xres = 1920,
.yres = 1080,
.xres_virtual = 1920,
.yres_virtual = 1080,
.xres = 32,
.yres = 32,
.xres_virtual = 32,
.yres_virtual = 32,
.xoffset = 0,
.yoffset = 0,
.bits_per_pixel = 32,
@@ -268,10 +268,10 @@ static struct fb_var_screeninfo fb_def_var[] = {
.rotate = 0,
},
{
.xres = 1920,
.yres = 1080,
.xres_virtual = 1920,
.yres_virtual = 1080,
.xres = 32,
.yres = 32,
.xres_virtual = 32,
.yres_virtual = 32,
.xoffset = 0,
.yoffset = 0,
.bits_per_pixel = 32,
@@ -3128,9 +3128,9 @@ static int osd_probe(struct platform_device *pdev)
return -ENODEV;
}
} else {
pr_err("%s NOT match\n", __func__);
return -ENODEV;
}
pr_err("%s NOT match\n", __func__);
return -ENODEV;
}
}
/* get interrupt resource */

View File

@@ -484,11 +484,23 @@ static void osd_vpu_power_on(void)
switch_vpu_mem_pd_vmod(VPU_VIU_OSD1, VPU_MEM_POWER_ON);
switch_vpu_mem_pd_vmod(VPU_VIU_OSD2, VPU_MEM_POWER_ON);
switch_vpu_mem_pd_vmod(VPU_VIU_OSD_SCALE, VPU_MEM_POWER_ON);
if (osd_hw.osd_meson_dev.osd_ver == OSD_HIGH_ONE) {
switch_vpu_mem_pd_vmod(
VPU_VD2_OSD2_SCALE,
VPU_MEM_POWER_ON);
switch_vpu_mem_pd_vmod(VPU_VIU_OSD3,
VPU_MEM_POWER_ON);
switch_vpu_mem_pd_vmod(VPU_OSD_BLD34,
VPU_MEM_POWER_ON);
}
if (osd_hw.osd_meson_dev.afbc_type == MESON_AFBC) {
switch_vpu_mem_pd_vmod(VPU_AFBC_DEC,
switch_vpu_mem_pd_vmod(
VPU_AFBC_DEC,
VPU_MEM_POWER_ON);
} else if (osd_hw.osd_meson_dev.afbc_type == MALI_AFBC) {
switch_vpu_mem_pd_vmod(
VPU_MAIL_AFBCD,
VPU_MEM_POWER_ON);
}
#endif
}
@@ -2794,7 +2806,7 @@ static void osd_pan_display_fence(struct osd_fence_map_s *fence_map)
}
/* Todo: */
if (fence_map->ext_addr && fence_map->width
&& fence_map->height) {
&& fence_map->height) {
spin_lock_irqsave(&osd_lock, lock_flags);
use_ext = true;
if (!fence_map->afbc_en) {
@@ -5670,6 +5682,10 @@ void osd_init_hw(u32 logo_loaded, u32 osd_probe,
int err_num = 0;
osd_hw.fb_drvier_probe = osd_probe;
memcpy(&osd_hw.osd_meson_dev, osd_meson,
sizeof(struct osd_device_data_s));
osd_vpu_power_on();
if (osd_meson->cpu_id == __MESON_CPU_MAJOR_ID_GXTVBB)
backup_regs_init(HW_RESET_AFBCD_REGS);
@@ -5687,8 +5703,7 @@ void osd_init_hw(u32 logo_loaded, u32 osd_probe,
for (idx = 0; idx < HW_REG_INDEX_MAX; idx++)
osd_hw.reg[idx].update_func =
hw_func_array[idx];
memcpy(&osd_hw.osd_meson_dev, osd_meson,
sizeof(struct osd_device_data_s));
#ifdef CONFIG_AMLOGIC_MEDIA_ENHANCEMENT_VECM
osd_hdr_on = false;
#endif
@@ -5756,8 +5771,9 @@ void osd_init_hw(u32 logo_loaded, u32 osd_probe,
/* just disable osd to avoid booting hang up */
data32 = 0x1 << 0;
data32 |= OSD_GLOBAL_ALPHA_DEF << 12;
for (idx = 0; idx < osd_hw.osd_meson_dev.osd_count; idx++)
osd_reg_write(hw_osd_reg_array[idx].osd_ctrl_stat, data32);
for (idx = 0; idx < osd_hw.osd_meson_dev.osd_count; idx++)
osd_reg_write(
hw_osd_reg_array[idx].osd_ctrl_stat, data32);
}
if (osd_hw.osd_meson_dev.osd_ver <= OSD_NORMAL) {
osd_vpp_misc =