From d43a6594dd52f38e064e34a10c57d4fa5075e3a2 Mon Sep 17 00:00:00 2001 From: Pengcheng Chen Date: Tue, 26 Feb 2019 17:08:35 +0800 Subject: [PATCH] osd: move wait hw vsync for afbc when phy_addr==0 only before chip g12A [1/1] PD#SWPL-5148 Problem: bootvideo stuck when starting to play Solution: wait hw vsync for afbc when phy_addr==0 only before chip g12A Verify: tl1 Change-Id: I883c8f6699729854a852fc70c22b5629aa025c60 Signed-off-by: Pengcheng Chen --- drivers/amlogic/media/osd/osd_hw.c | 35 ++++++++++++++++-------------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/drivers/amlogic/media/osd/osd_hw.c b/drivers/amlogic/media/osd/osd_hw.c index cabceb844158..ce7e8eafe036 100644 --- a/drivers/amlogic/media/osd/osd_hw.c +++ b/drivers/amlogic/media/osd/osd_hw.c @@ -2971,17 +2971,18 @@ void osd_enable_hw(u32 index, u32 enable) add_to_update_list(index, OSD_GBL_ALPHA); add_to_update_list(index, DISP_GEOMETRY); osd_wait_vsync_hw(); - } - while ((index == 0) && osd_hw.osd_afbcd[index].enable && + while ((index == 0) && osd_hw.osd_afbcd[index].enable && (osd_hw.osd_afbcd[index].phy_addr == 0) && enable && (i < count)) { - osd_wait_vsync_hw(); - i++; + osd_wait_vsync_hw(); + i++; + } + if (i > 0) + osd_log_info("osd[%d]: wait %d vsync first buffer ready.\n", + index, i); } - if (i > 0) - osd_log_info("osd[%d]: wait %d vsync first buffer ready.\n", - index, i); + osd_hw.enable[index] = enable; if (get_osd_hwc_type() != OSD_G12A_NEW_HWC) { add_to_update_list(index, OSD_ENABLE); @@ -3183,16 +3184,18 @@ void osd_switch_free_scale( next_index, next_enable, next_scale, current->comm); if (osd_hw.free_scale_mode[pre_index] || osd_hw.free_scale_mode[next_index]) { - while ((next_index == OSD1) - && osd_hw.osd_afbcd[next_index].enable - && (osd_hw.osd_afbcd[next_index].phy_addr == 0) - && next_enable && (i < count)) { - osd_wait_vsync_hw(); - i++; + if (osd_hw.osd_meson_dev.osd_ver == OSD_NORMAL) { + while ((next_index == OSD1) + && osd_hw.osd_afbcd[next_index].enable + && (osd_hw.osd_afbcd[next_index].phy_addr == 0) + && next_enable && (i < count)) { + osd_wait_vsync_hw(); + i++; + } + if (i > 0) + osd_log_info("osd[%d]: wait %d vsync first buffer ready.\n", + next_index, i); } - if (i > 0) - osd_log_info("osd[%d]: wait %d vsync first buffer ready.\n", - next_index, i); if (pre_index != next_index) { h_enable = (pre_scale & 0xffff0000 ? 1 : 0); v_enable = (pre_scale & 0xffff ? 1 : 0);