From 6a8a46b2ea063e83ce82dc517c922676b035a038 Mon Sep 17 00:00:00 2001 From: Brian Zhu Date: Sun, 4 Feb 2018 05:24:26 +0800 Subject: [PATCH] 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 --- drivers/amlogic/media/osd/osd_fb.c | 22 +++++++++++----------- drivers/amlogic/media/osd/osd_hw.c | 30 +++++++++++++++++++++++------- 2 files changed, 34 insertions(+), 18 deletions(-) diff --git a/drivers/amlogic/media/osd/osd_fb.c b/drivers/amlogic/media/osd/osd_fb.c index 69aaadc..f7049e1 100644 --- a/drivers/amlogic/media/osd/osd_fb.c +++ b/drivers/amlogic/media/osd/osd_fb.c @@ -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 */ diff --git a/drivers/amlogic/media/osd/osd_hw.c b/drivers/amlogic/media/osd/osd_hw.c index 03ca00e..7a33e02 100644 --- a/drivers/amlogic/media/osd/osd_hw.c +++ b/drivers/amlogic/media/osd/osd_hw.c @@ -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 = -- 2.7.4