osd: add canvas alignment for line length [1/4]

PD#SWPL-16902

Problem:
garbage screen for portrait panel in recovery mode

Solution:
add canvas alignment for line length
recovery takes it as framebuffer row_bytes

Verify:
g12b-w400

Change-Id: I9e94df3a7294fa3e388390e41eeb44e0588ec9d2
Signed-off-by: Cao Jian <jian.cao@amlogic.com>
This commit is contained in:
Cao Jian
2019-11-22 10:14:42 +08:00
committed by Chris KIM
parent b3705297a3
commit db0d3810e3
3 changed files with 14 additions and 12 deletions

View File

@@ -652,7 +652,8 @@ static int osd_check_var(struct fb_var_screeninfo *var, struct fb_info *info)
var->transp.length, var->transp.offset);
fix->visual = color_format_pt->color_type;
/* adjust memory length. */
fix->line_length = var->xres_virtual * var->bits_per_pixel / 8;
fix->line_length =
CANVAS_ALIGNED(var->xres_virtual * var->bits_per_pixel / 8);
osd_log_dbg(MODULE_BASE, "xvirtual=%d, bpp:%d, line_length=%d\n",
var->xres_virtual, var->bits_per_pixel, fix->line_length);
@@ -4416,7 +4417,7 @@ static int osd_probe(struct platform_device *pdev)
(fbdev->color->color_index > 16 ?
(fbdev->color->color_index > 24 ?
4 : 3) : 2) : 1);
fix->line_length = var->xres_virtual * bpp;
fix->line_length = CANVAS_ALIGNED(var->xres_virtual * bpp);
fix->smem_start = fbdev->fb_mem_paddr;
fix->smem_len = fbdev->fb_len;
if (fb_alloc_cmap(&fbi->cmap, 16, 0) != 0) {

View File

@@ -587,7 +587,6 @@ static int pxp_mode;
s64 timestamp[VIU_COUNT];
static unsigned int osd_h_filter_mode = 1;
#define CANVAS_ALIGNED(x) (((x) + 31) & ~31)
#define BYTE_32_ALIGNED(x) (((x) + 31) & ~31)
#define BYTE_16_ALIGNED(x) (((x) + 15) & ~15)
#define BYTE_8_ALIGNED(x) (((x) + 7) & ~7)
@@ -2894,7 +2893,7 @@ void osd_setup_hw(u32 index,
else {
canvas_config(osd_hw.fb_gem[index].canvas_idx,
osd_hw.fb_gem[index].addr,
osd_hw.fb_gem[index].width,
CANVAS_ALIGNED(osd_hw.fb_gem[index].width),
osd_hw.fb_gem[index].height,
CANVAS_ADDR_NOWRAP, CANVAS_BLKMODE_LINEAR);
}
@@ -4332,7 +4331,7 @@ static bool osd_direct_compose_pan_display(struct osd_fence_map_s *fence_map)
if (!osd_hw.osd_afbcd[index].enable) {
canvas_config(osd_hw.fb_gem[index].canvas_idx,
ext_addr,
fence_map->byte_stride,
CANVAS_ALIGNED(fence_map->byte_stride),
fence_map->height,
CANVAS_ADDR_NOWRAP, CANVAS_BLKMODE_LINEAR);
osd_hw.screen_base[index] = ext_addr;
@@ -4685,7 +4684,8 @@ static void osd_pan_display_single_fence(struct osd_fence_map_s *fence_map)
canvas_config(osd_hw.fb_gem[index].canvas_idx,
osd_hw.fb_gem[index].addr,
osd_hw.fb_gem[index].width,
CANVAS_ALIGNED(
osd_hw.fb_gem[index].width),
osd_hw.fb_gem[index].height,
CANVAS_ADDR_NOWRAP,
CANVAS_BLKMODE_LINEAR);
@@ -8629,7 +8629,7 @@ static int osd_setting_order(u32 output_index)
if (!osd_hw.osd_afbcd[i].enable)
canvas_config(osd_hw.fb_gem[i].canvas_idx,
osd_hw.fb_gem[i].addr,
osd_hw.fb_gem[i].width,
CANVAS_ALIGNED(osd_hw.fb_gem[i].width),
osd_hw.fb_gem[i].height,
CANVAS_ADDR_NOWRAP,
CANVAS_BLKMODE_LINEAR);
@@ -8851,7 +8851,7 @@ static void osd_setting_old_hwc(void)
if (!osd_hw.osd_afbcd[index].enable)
canvas_config(osd_hw.fb_gem[index].canvas_idx,
osd_hw.fb_gem[index].addr,
osd_hw.fb_gem[index].width,
CANVAS_ALIGNED(osd_hw.fb_gem[index].width),
osd_hw.fb_gem[index].height,
CANVAS_ADDR_NOWRAP,
CANVAS_BLKMODE_LINEAR);
@@ -8893,7 +8893,7 @@ static void osd_setting_viu2(void)
if (!osd_hw.osd_afbcd[index].enable)
canvas_config(osd_hw.fb_gem[index].canvas_idx,
osd_hw.fb_gem[index].addr,
osd_hw.fb_gem[index].width,
CANVAS_ALIGNED(osd_hw.fb_gem[index].width),
osd_hw.fb_gem[index].height,
CANVAS_ADDR_NOWRAP,
CANVAS_BLKMODE_LINEAR);
@@ -10378,7 +10378,7 @@ void osd_restore_hw(void)
for (i = 0; i < osd_hw.osd_meson_dev.osd_count; i++)
canvas_config(osd_hw.fb_gem[i].canvas_idx,
osd_hw.fb_gem[i].addr,
osd_hw.fb_gem[i].width,
CANVAS_ALIGNED(osd_hw.fb_gem[i].width),
osd_hw.fb_gem[i].height,
CANVAS_ADDR_NOWRAP, CANVAS_BLKMODE_LINEAR);
}
@@ -10720,7 +10720,7 @@ static bool osd_direct_render(struct osd_plane_map_s *plane_map)
} else {
canvas_config(osd_hw.fb_gem[index].canvas_idx,
phy_addr,
plane_map->byte_stride,
CANVAS_ALIGNED(plane_map->byte_stride),
plane_map->src_h,
CANVAS_ADDR_NOWRAP, CANVAS_BLKMODE_LINEAR);
}
@@ -10969,7 +10969,7 @@ static void osd_cursor_move(struct osd_plane_map_s *plane_map)
plane_map->byte_stride * plane_map->src_h;
canvas_config(osd_hw.fb_gem[index].canvas_idx,
phy_addr,
plane_map->byte_stride,
CANVAS_ALIGNED(plane_map->byte_stride),
plane_map->src_h,
CANVAS_ADDR_NOWRAP, CANVAS_BLKMODE_LINEAR);

View File

@@ -23,6 +23,7 @@
#include "osd_sync.h"
#include "osd_drm.h"
#define CANVAS_ALIGNED(x) (((x) + 63) & ~63)
#define MAX_HOLD_LINE 0x1f
#define MIN_HOLD_LINE 0x04
#define VIU1_DEFAULT_HOLD_LINE 0x08