osd: fix osd afbc can't display on android5.1 [1/1]
authorShuide Chen <shuide.chen@amlogic.com>
Thu, 11 Apr 2019 05:20:46 +0000 (13:20 +0800)
committerTao Zeng <tao.zeng@amlogic.com>
Mon, 15 Apr 2019 06:13:36 +0000 (23:13 -0700)
PD#SWPL-6869

Problem:
afbc can't display with android5.1, because blank enable
called before afbc set, which make osd enable not updated
and afbc not enable when hwc post frame

Solution:
if mali afbc enable, call osd enable.

Verify:
verified on x301

Change-Id: I1d727a586a66c6e7848d09dfb5c5b74ff7a2e3e6
Signed-off-by: Shuide Chen <shuide.chen@amlogic.com>
drivers/amlogic/media/osd/osd_hw.c

index fd64c26..01ac461 100644 (file)
@@ -4286,7 +4286,10 @@ static void osd_pan_display_single_fence(struct osd_fence_map_s *fence_map)
                                        .update_func(index);
                                osd_update_window_axis = false;
                        }
-                       if ((osd_enable != osd_hw.enable[index])
+                       if ((osd_enable != osd_hw.enable[index] ||
+                               (osd_hw.osd_meson_dev.afbc_type
+                                       == MALI_AFBC &&
+                               osd_hw.osd_afbcd[index].enable))
                                && (skip == false)
                                && (suspend_flag == false)) {
                                osd_hw.enable[index] = osd_enable;
@@ -4407,7 +4410,10 @@ static void osd_pan_display_single_fence(struct osd_fence_map_s *fence_map)
                                                .update_func(index);
                                osd_update_window_axis = false;
                        }
-                       if ((osd_enable != osd_hw.enable[index])
+                       if ((osd_enable != osd_hw.enable[index] ||
+                               (osd_hw.osd_meson_dev.afbc_type
+                                       == MALI_AFBC &&
+                               osd_hw.osd_afbcd[index].enable))
                                && (skip == false)
                                && (suspend_flag == false)) {
                                osd_hw.enable[index] = osd_enable;
@@ -4419,7 +4425,9 @@ static void osd_pan_display_single_fence(struct osd_fence_map_s *fence_map)
                                osd_mali_afbc_start();
                        spin_unlock_irqrestore(&osd_lock, lock_flags);
                        osd_wait_vsync_hw();
-               } else if ((osd_enable != osd_hw.enable[index])
+               } else if ((osd_enable != osd_hw.enable[index] ||
+                       (osd_hw.osd_meson_dev.afbc_type == MALI_AFBC &&
+                       osd_hw.osd_afbcd[index].enable))
                        && (skip == false)) {
                        spin_lock_irqsave(&osd_lock, lock_flags);
                        if (suspend_flag == false) {