mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-08 03:40:35 +09:00
vpp: sr: remove the vpp misc operation in sr function [1/1]
PD#SWPL-2613 Problem: sr mux in vpp misc is set incorrectly. Solution: move the vpp misc operation together Verify: verify by x301 Change-Id: Ie813e5b04b97a4481c2e45bcf0c8b4c065fb9f69 Signed-off-by: Brian Zhu <brian.zhu@amlogic.com>
This commit is contained in:
@@ -7573,6 +7573,33 @@ SET_FILTER:
|
||||
u32 set_value = 0;
|
||||
force_flush |= vpp_zorder_check();
|
||||
|
||||
/* for sr core0, put it between prebld & pps as default */
|
||||
if (cur_frame_par &&
|
||||
(cur_frame_par->sr_core_support &
|
||||
SUPER_CORE0_SUPPORT))
|
||||
if (cur_frame_par->sr0_position)
|
||||
vpp_misc_set |=
|
||||
PREBLD_SR0_VD1_SCALER;
|
||||
else
|
||||
vpp_misc_set &=
|
||||
~SR0_AFTER_DNLP;
|
||||
else
|
||||
vpp_misc_set |=
|
||||
PREBLD_SR0_VD1_SCALER;
|
||||
/* for sr core1, put it before post blend as default */
|
||||
if (cur_frame_par &&
|
||||
(cur_frame_par->sr_core_support &
|
||||
SUPER_CORE1_SUPPORT))
|
||||
if (cur_frame_par->sr1_position)
|
||||
vpp_misc_set |=
|
||||
DNLP_SR1_CM;
|
||||
else
|
||||
vpp_misc_set &=
|
||||
~SR1_AFTER_POSTBLEN;
|
||||
else
|
||||
vpp_misc_set |=
|
||||
DNLP_SR1_CM;
|
||||
|
||||
vpp_misc_set &=
|
||||
((1 << 29) | VPP_CM_ENABLE |
|
||||
(0x1ff << VPP_VD2_ALPHA_BIT) |
|
||||
|
||||
@@ -1776,39 +1776,16 @@ int vpp_set_super_scaler_regs(
|
||||
data_path_chose = 6;
|
||||
else
|
||||
data_path_chose = 5;
|
||||
if (is_meson_tl1_cpu()) {
|
||||
if (scaler_path_sel == CORE0_PPS_CORE1) {
|
||||
VSYNC_WR_MPEG_REG_BITS(VPP_MISC, 1, 1, 1);
|
||||
VSYNC_WR_MPEG_REG_BITS(VPP_MISC, 1, 3, 1);
|
||||
} else if (scaler_path_sel == CORE0_CORE1_PPS) {
|
||||
VSYNC_WR_MPEG_REG_BITS(VPP_MISC, 1, 1, 1);
|
||||
VSYNC_WR_MPEG_REG_BITS(VPP_MISC, 0, 3, 1);
|
||||
|
||||
} else if (scaler_path_sel == PPS_CORE0_CORE1) {
|
||||
VSYNC_WR_MPEG_REG_BITS(VPP_MISC, 0, 1, 1);
|
||||
VSYNC_WR_MPEG_REG_BITS(VPP_MISC, 1, 3, 1);
|
||||
|
||||
} else if (scaler_path_sel == PPS_CORE0_POSTBLEND_CORE1) {
|
||||
VSYNC_WR_MPEG_REG_BITS(VPP_MISC, 0, 1, 1);
|
||||
VSYNC_WR_MPEG_REG_BITS(VPP_MISC, 0, 3, 1);
|
||||
}
|
||||
} else if ((scaler_path_sel == CORE0_PPS_CORE1) ||
|
||||
(scaler_path_sel == CORE1_BEFORE_PPS) ||
|
||||
(scaler_path_sel == CORE0_BEFORE_PPS)) {
|
||||
if (is_meson_g12a_cpu() || is_meson_g12b_cpu())
|
||||
VSYNC_WR_MPEG_REG_BITS(VPP_MISC, 1, 1, 1);
|
||||
else
|
||||
if (get_cpu_type() <= MESON_CPU_MAJOR_ID_TXHD) {
|
||||
if ((scaler_path_sel == CORE0_PPS_CORE1) ||
|
||||
(scaler_path_sel == CORE1_BEFORE_PPS) ||
|
||||
(scaler_path_sel == CORE0_BEFORE_PPS)) {
|
||||
VSYNC_WR_MPEG_REG_BITS(VPP_VE_ENABLE_CTRL,
|
||||
0, data_path_chose, 1);
|
||||
} else {
|
||||
if (is_meson_g12a_cpu() || is_meson_g12b_cpu()) {
|
||||
if (scaler_path_sel == CORE0_AFTER_PPS)
|
||||
VSYNC_WR_MPEG_REG_BITS(VPP_MISC, 0, 1, 1);
|
||||
else
|
||||
VSYNC_WR_MPEG_REG_BITS(VPP_MISC, 1, 1, 1);
|
||||
} else
|
||||
} else {
|
||||
VSYNC_WR_MPEG_REG_BITS(VPP_VE_ENABLE_CTRL,
|
||||
1, data_path_chose, 1);
|
||||
}
|
||||
}
|
||||
if (super_scaler == 0) {
|
||||
VSYNC_WR_MPEG_REG(VPP_SRSHARP0_CTRL, 0);
|
||||
@@ -1831,10 +1808,13 @@ static void vpp_set_super_scaler(
|
||||
next_frame_par->VPP_vsc_startp + 1;
|
||||
u32 src_width = next_frame_par->video_input_w;
|
||||
u32 src_height = next_frame_par->video_input_h;
|
||||
u32 sr_path;
|
||||
|
||||
/*for sr adjust*/
|
||||
vpp_super_scaler_support();
|
||||
|
||||
next_frame_par->sr_core_support = sr_support;
|
||||
|
||||
hor_sc_multiple_num = (1 << PPS_FRAC_BITS) /
|
||||
next_frame_par->vpp_filter.vpp_hsc_start_phase_step;
|
||||
ver_sc_multiple_num = SUPER_SCALER_V_FACTOR*(1 << PPS_FRAC_BITS)/
|
||||
@@ -2148,6 +2128,62 @@ static void vpp_set_super_scaler(
|
||||
next_frame_par->VPP_pic_in_height_ <<=
|
||||
next_frame_par->supsc1_vert_ratio;
|
||||
}
|
||||
|
||||
sr_path = next_frame_par->supscl_path;
|
||||
/* path config */
|
||||
if (is_meson_tl1_cpu()) {
|
||||
if (sr_path == CORE0_PPS_CORE1) {
|
||||
next_frame_par->sr0_position = 1;
|
||||
next_frame_par->sr1_position = 1;
|
||||
} else if (sr_path == PPS_CORE0_CORE1) {
|
||||
next_frame_par->sr0_position = 0;
|
||||
next_frame_par->sr1_position = 1;
|
||||
} else if (sr_path ==
|
||||
PPS_CORE0_POSTBLEND_CORE1) {
|
||||
next_frame_par->sr0_position = 0;
|
||||
next_frame_par->sr1_position = 0;
|
||||
} else if (sr_path ==
|
||||
CORE0_PPS_POSTBLEND_CORE1) {
|
||||
next_frame_par->sr0_position = 1;
|
||||
next_frame_par->sr1_position = 0;
|
||||
} else {
|
||||
next_frame_par->sr0_position = 1;
|
||||
next_frame_par->sr1_position = 1;
|
||||
}
|
||||
} else if (is_meson_txhd_cpu()
|
||||
|| is_meson_g12a_cpu()
|
||||
|| is_meson_g12b_cpu()) {
|
||||
if (sr_path == CORE0_BEFORE_PPS)
|
||||
next_frame_par->sr0_position = 1;
|
||||
else if (sr_path == CORE0_AFTER_PPS)
|
||||
next_frame_par->sr0_position = 0;
|
||||
else
|
||||
next_frame_par->sr0_position = 1;
|
||||
next_frame_par->sr1_position = 0;
|
||||
} else if (is_meson_gxlx_cpu()) {
|
||||
if (sr_path == CORE1_BEFORE_PPS)
|
||||
next_frame_par->sr1_position = 1;
|
||||
else if (sr_path == CORE1_AFTER_PPS)
|
||||
next_frame_par->sr1_position = 0;
|
||||
else
|
||||
next_frame_par->sr1_position = 1;
|
||||
next_frame_par->sr0_position = 0;
|
||||
} else if (is_meson_txlx_cpu()
|
||||
|| is_meson_txl_cpu()
|
||||
|| is_meson_gxtvbb_cpu()) {
|
||||
if (sr_path == CORE0_PPS_CORE1) {
|
||||
next_frame_par->sr0_position = 1;
|
||||
next_frame_par->sr1_position = 1;
|
||||
} else if (sr_path ==
|
||||
CORE0_PPS_POSTBLEND_CORE1) {
|
||||
next_frame_par->sr0_position = 1;
|
||||
next_frame_par->sr1_position = 0;
|
||||
} else {
|
||||
next_frame_par->sr0_position = 1;
|
||||
next_frame_par->sr1_position = 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (super_debug) {
|
||||
pr_info("layer0: spsc0_w_in=%u, spsc0_h_in=%u, spsc1_w_in=%u, spsc1_h_in=%u.\n",
|
||||
next_frame_par->spsc0_w_in, next_frame_par->spsc0_h_in,
|
||||
|
||||
@@ -99,7 +99,11 @@ enum {
|
||||
#define VPP_POST_FG_SEL_MASK (1 << 4)
|
||||
#define VPP_POST_FG_OSD2 (1 << 4)
|
||||
#define VPP_POST_FG_OSD1 (0 << 4)
|
||||
#define DNLP_SR1_CM (1 << 3)
|
||||
#define SR1_AFTER_POSTBLEN (0 << 3)
|
||||
#define VPP_FIFO_RESET_DE (1 << 2)
|
||||
#define PREBLD_SR0_VD1_SCALER (1 << 1)
|
||||
#define SR0_AFTER_DNLP (0 << 1)
|
||||
#define VPP_OUT_SATURATE (1 << 0)
|
||||
|
||||
#define VDIF_RESET_ON_GO_FIELD (1<<29)
|
||||
|
||||
@@ -151,6 +151,9 @@ struct vpp_frame_par_s {
|
||||
|
||||
bool nocomp;
|
||||
|
||||
u8 sr0_position;
|
||||
u8 sr1_position;
|
||||
u8 sr_core_support;
|
||||
};
|
||||
|
||||
struct disp_info_s {
|
||||
@@ -198,6 +201,7 @@ enum select_scaler_path_e {
|
||||
/*tl1 have core0/core1, support below mode*/
|
||||
PPS_CORE0_CORE1,
|
||||
PPS_CORE0_POSTBLEND_CORE1,
|
||||
CORE0_PPS_POSTBLEND_CORE1,
|
||||
SCALER_PATH_MAX,
|
||||
};
|
||||
/*
|
||||
|
||||
Reference in New Issue
Block a user