osd: fix osd_reverse casued afbc decode error [1/1]

PD#SWPL-4335

Problem:
osd_reverse casued afbc decode error

Solution:
add afbc prefect reverse when osd_reverse

Verify:
verify by tl1

Change-Id: I11730121e62935683480f42db7c43365bc91bf31
Signed-off-by: Pengcheng Chen <pengcheng.chen@amlogic.com>
This commit is contained in:
Pengcheng Chen
2019-01-18 13:30:52 +08:00
committed by Luan Yuan
parent 6a603ab085
commit 9f334f9462

View File

@@ -3905,6 +3905,7 @@ static void osd_pan_display_single_fence(struct osd_fence_map_s *fence_map)
/* geometry and freescale need update with ioctl */
osd_hw.reg[DISP_GEOMETRY].update_func(index);
osd_hw.reg[DISP_OSD_REVERSE].update_func(index);
if ((osd_hw.free_scale_enable[index]
&& osd_update_window_axis)
|| freescale_update) {
@@ -4024,6 +4025,7 @@ static void osd_pan_display_single_fence(struct osd_fence_map_s *fence_map)
if (color_mode)
osd_hw.reg[OSD_COLOR_MODE].update_func(index);
osd_hw.reg[DISP_GEOMETRY].update_func(index);
osd_hw.reg[DISP_OSD_REVERSE].update_func(index);
if ((osd_hw.free_scale_enable[index]
&& osd_update_window_axis)
|| (osd_hw.free_scale_enable[index]
@@ -4980,18 +4982,35 @@ static void osd_update_enable(u32 index)
static void osd_update_disp_osd_reverse(u32 index)
{
if (osd_hw.osd_reverse[index] == REVERSE_TRUE)
if (osd_hw.osd_reverse[index] == REVERSE_TRUE) {
VSYNCOSD_WR_MPEG_REG_BITS(
hw_osd_reg_array[index].osd_blk0_cfg_w0, 3, 28, 2);
else if (osd_hw.osd_reverse[index] == REVERSE_X)
if ((osd_hw.osd_meson_dev.afbc_type == MALI_AFBC) &&
(osd_hw.osd_afbcd[index].enable == ENABLE))
VSYNCOSD_WR_MPEG_REG_BITS(
hw_osd_reg_array[index].afbc_prefetch_cfg_s, 3, 0, 2);
} else if (osd_hw.osd_reverse[index] == REVERSE_X) {
VSYNCOSD_WR_MPEG_REG_BITS(
hw_osd_reg_array[index].osd_blk0_cfg_w0, 1, 28, 2);
else if (osd_hw.osd_reverse[index] == REVERSE_Y)
if ((osd_hw.osd_meson_dev.afbc_type == MALI_AFBC) &&
(osd_hw.osd_afbcd[index].enable == ENABLE))
VSYNCOSD_WR_MPEG_REG_BITS(
hw_osd_reg_array[index].afbc_prefetch_cfg_s, 1, 0, 2);
} else if (osd_hw.osd_reverse[index] == REVERSE_Y) {
VSYNCOSD_WR_MPEG_REG_BITS(
hw_osd_reg_array[index].osd_blk0_cfg_w0, 2, 28, 2);
else
if ((osd_hw.osd_meson_dev.afbc_type == MALI_AFBC) &&
(osd_hw.osd_afbcd[index].enable == ENABLE))
VSYNCOSD_WR_MPEG_REG_BITS(
hw_osd_reg_array[index].afbc_prefetch_cfg_s, 2, 0, 2);
} else {
VSYNCOSD_WR_MPEG_REG_BITS(
hw_osd_reg_array[index].osd_blk0_cfg_w0, 0, 28, 2);
if ((osd_hw.osd_meson_dev.afbc_type == MALI_AFBC) &&
(osd_hw.osd_afbcd[index].enable == ENABLE))
VSYNCOSD_WR_MPEG_REG_BITS(
hw_osd_reg_array[index].afbc_prefetch_cfg_s, 0, 0, 2);
}
remove_from_update_list(index, DISP_OSD_REVERSE);
}
@@ -7465,6 +7484,7 @@ static int osd_setting_order(void)
}
osd_hw.reg[DISP_GEOMETRY].update_func(i);
osd_hw.reg[OSD_GBL_ALPHA].update_func(i);
osd_hw.reg[DISP_OSD_REVERSE].update_func(i);
if (update || osd_update_window_axis) {
osd_set_scan_mode(i);
osd_hw.reg
@@ -7748,6 +7768,7 @@ static void osd_setting_old_hwc(void)
freescale_update = set_old_hwc_freescale(index);
/* geometry and freescale need update with ioctl */
osd_hw.reg[DISP_GEOMETRY].update_func(index);
osd_hw.reg[DISP_OSD_REVERSE].update_func(index);
if ((osd_hw.free_scale_enable[index]
&& osd_update_window_axis)
|| freescale_update) {
@@ -7785,6 +7806,7 @@ static void osd_setting_viu2(void)
osd_hw.reg[OSD_COLOR_MODE].update_func(index);
/* geometry and freescale need update with ioctl */
osd_hw.reg[DISP_GEOMETRY].update_func(index);
osd_hw.reg[DISP_OSD_REVERSE].update_func(index);
if (!osd_hw.osd_display_debug)
osd_hw.reg[OSD_ENABLE]
.update_func(index);
@@ -9955,6 +9977,7 @@ void osd_page_flip(struct osd_plane_map_s *plane_map)
plane_map->phy_addr;
osd_hw.reg[OSD_COLOR_MODE].update_func(index);
osd_hw.reg[DISP_GEOMETRY].update_func(index);
osd_hw.reg[DISP_OSD_REVERSE].update_func(index);
if ((osd_hw.free_scale_enable[index]
&& osd_update_window_axis)
|| freescale_update) {
@@ -9986,6 +10009,7 @@ void osd_page_flip(struct osd_plane_map_s *plane_map)
osd_cursor_move(plane_map);
osd_hw.reg[OSD_COLOR_MODE].update_func(index);
osd_hw.reg[DISP_GEOMETRY].update_func(index);
osd_hw.reg[DISP_OSD_REVERSE].update_func(index);
if ((osd_enable != osd_hw.enable[index])
&& (suspend_flag == false)) {
osd_hw.enable[index] = osd_enable;
@@ -10026,6 +10050,7 @@ void osd_page_flip(struct osd_plane_map_s *plane_map)
osd_hw.reg[OSD_COLOR_MODE].update_func(index);
if (!osd_hw.hwc_enable) {
osd_hw.reg[DISP_GEOMETRY].update_func(index);
osd_hw.reg[DISP_OSD_REVERSE].update_func(index);
if ((osd_hw.free_scale_enable[index]
&& osd_update_window_axis)
|| freescale_update) {