blob: f00d50c4411272ca1395b93c98f8e74e8e79b632 [file] [log] [blame]
/* SPDX-License-Identifier: (GPL-2.0+ OR MIT) */
/*
* Copyright (c) 2019 Amlogic, Inc. All rights reserved.
*/
#ifndef __FRC_CLK_H__
#define __FRC_CLK_H__
#define HEIGHT_4K 2160
#define WIDTH_4K 3840
#define HEIGHT_2K 1080
#define WIDTH_2K 1920
#define HME_ME_OFFSET 0x100
/*osd only always support 960x540 0: 960x540, 1: 1920x1080*/
#define OSD_MC_RATIO 0 //0->1:1; 1->1:2
/*ME max size 960x540*/
#define ME_MVX_BIT 12 //include sign bit for ME@960x540
#define ME_MVY_BIT 11 //include sign bit for ME@960x540
#define MAX_ME_MVX 511 // for ME@960x540 => means +/-128 ME pixels for MVx
#define MAX_ME_MVY 160 // for ME@960x540 => means (40+2)+(40+4+2) line memory
#define HME_MVX_BIT 10 //include sign bit for HME@960x540
#define HME_MVY_BIT 9 //include sign bit for HME@960x540
#define MAX_HME_MVX 127 // for HME@960x540
#define MAX_HME_MVY 40 // for HME@960x540
#define ME_FINER_HIST_BIT 4 //
#define ME_ROUGH_X_HIST_BIT 4 // include sign bit for ME@960x540
#define ME_ROUGH_Y_HIST_BIT 3 // include sign bit for ME@960x540
#define HME_FINER_HIST_BIT 4 // actually not used for HME
#define HME_ROUGH_X_HIST_BIT 4 // include sign bit for HME@960x540
#define HME_ROUGH_Y_HIST_BIT 3 // include sign bit for HME@960x540
#define MAX_MC_Y_VRANG 64 // one side of Luma range(under MC scale)
#define MAX_MC_C_VRANG 64 // one side of Chroma range
#define MAX_INP_UNDONE_CNT 1
#define MAX_ME_UNDONE_CNT 1
#define MAX_MC_UNDONE_CNT 1
#define MAX_VP_UNDONE_CNT 1
extern void __iomem *frc_clk_base;
extern void __iomem *vpu_base;
void frc_clk_init(struct frc_dev_s *frc_devp);
void set_frc_clk_disable(void);
void frc_init_config(struct frc_dev_s *devp);
void set_frc_enable(u32 en);
void set_frc_bypass(u32 en);
void frc_pattern_on(u32 en);
void frc_set_buf_num(u32 frc_fb_num);
void frc_top_init(struct frc_dev_s *frc_devp);
void frc_inp_init(u32 frc_fb_num, u32 film_hwfw_sel);
void config_phs_lut(enum frc_ratio_mode_type frc_ratio_mode,
enum en_film_mode film_mode);
void config_phs_regs(enum frc_ratio_mode_type frc_ratio_mode,
enum en_film_mode film_mode);
void config_me_top_hw_reg(void);
void init_bb_xyxy(u32 hsize ,u32 vsize, u32 is_me1mc4);
void fw_param_bbd_init(u32 hsize ,u32 vsize);
void sys_fw_param_frc_init(u32 frm_hsize, u32 frm_vsize, u32 is_me1mc4);
void config_loss_out(u32 fmt422);
void enable_nr(void);
void set_mc_lbuf_ext(void);
void cfg_me_loss(u32 me_loss_en);
void cfg_mc_loss(u32 mc_loss_en);
void recfg_memc_mif_base_addr(u32 base_ofst);
void frc_internal_initial(struct frc_dev_s *frc_devp);
void frc_dump_reg_tab(void);
void frc_mtx_set(struct frc_dev_s *frc_devp);
void frc_crc_enable(struct frc_dev_s *frc_devp);
void frc_me_crc_read(struct frc_dev_s *frc_devp);
void frc_mc_crc_read(struct frc_dev_s *frc_devp);
void me_undone_read(struct frc_dev_s *frc_devp);
void mc_undone_read(struct frc_dev_s *frc_devp);
void frc_dump_fixed_table(void);
void frc_reset(u32 onoff);
void frc_mc_reset(u32 onoff);
void frc_force_secure(u32 onoff);
void frc_osdbit_setfalsecolor(u32 falsecolor);
u8 frc_frame_forcebuf_enable(u8 enable);
void frc_frame_forcebuf_count(u8 forceidx);
void inp_undone_read(struct frc_dev_s *frc_devp);
void vp_undone_read(struct frc_dev_s *frc_devp);
u32 vpu_reg_read(u32 addr);
#endif