blob: 53bbb1ff34f0a961a1f147ec0929c47540941e47 [file] [log] [blame] [edit]
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Copyright (c) 2019 Amlogic, Inc. All rights reserved.
*/
/* System Headers */
#include <config.h>
#include <common.h>
#include <malloc.h>
#include <asm/arch/io.h>
#include <amlogic/cpu_id.h>
#include <asm/arch/cpu.h>
/* Local Headers */
#ifdef CONFIG_AML_CANVAS
#include <amlogic/canvas.h>
#endif
/* Local Headers */
#include "osd_log.h"
#include "osd_io.h"
#include "osd_hw.h"
#define OSD_TEST_DURATION 500
#define msleep(a) mdelay(a)
#define REG_INDEX_VCBUS(reg) (u32)((reg) & REG_BASE_VCBUS ? ((reg - REG_BASE_VCBUS) >> 2) : reg)
extern struct hw_para_s osd_hw;
#ifdef AML_S5_DISPLAY
static u32 get_reg_slice_vpost(int reg_addr, int slice_idx)
{
u32 reg_offset;
u32 reg_addr_tmp;
reg_offset = slice_idx == 0 ? 0 :
slice_idx == 1 ? 0x100 :
slice_idx == 2 ? 0x700 : 0x1900;
reg_addr_tmp = reg_addr + reg_offset;
return reg_addr_tmp;
}
static void dump_vpp_blend_reg(void)
{
u32 reg_addr, reg_val = 0;
osd_logi("vpp blend regs:\n");
reg_addr = REG_INDEX_VCBUS(VPP_OSD1_BLD_H_SCOPE);
reg_val = osd_reg_read(reg_addr);
osd_logi("reg[0x%x]: 0x%08x\n",
reg_addr, reg_val);
reg_addr = REG_INDEX_VCBUS(VPP_OSD1_BLD_V_SCOPE);
reg_val = osd_reg_read(reg_addr);
osd_logi("reg[0x%x]: 0x%08x\n",
reg_addr, reg_val);
reg_addr = REG_INDEX_VCBUS(VPP_OSD2_BLD_H_SCOPE);
reg_val = osd_reg_read(reg_addr);
osd_logi("reg[0x%x]: 0x%08x\n",
reg_addr, reg_val);
reg_addr = REG_INDEX_VCBUS(VPP_OSD2_BLD_V_SCOPE);
reg_val = osd_reg_read(reg_addr);
osd_logi("reg[0x%x]: 0x%08x\n",
reg_addr, reg_val);
reg_addr = REG_INDEX_VCBUS(VPP_POSTBLEND_VD1_H_START_END);
reg_val = osd_reg_read(reg_addr);
osd_logi("reg[0x%x]: 0x%08x\n",
reg_addr, reg_val);
reg_addr = REG_INDEX_VCBUS(VPP_POSTBLEND_VD1_V_START_END);
reg_val = osd_reg_read(reg_addr);
osd_logi("reg[0x%x]: 0x%08x\n",
reg_addr, reg_val);
reg_addr = REG_INDEX_VCBUS(VPP_POSTBLEND_VD2_H_START_END);
reg_val = osd_reg_read(reg_addr);
osd_logi("reg[0x%x]: 0x%08x\n",
reg_addr, reg_val);
reg_addr = REG_INDEX_VCBUS(VPP_POSTBLEND_VD2_V_START_END);
reg_val = osd_reg_read(reg_addr);
osd_logi("reg[0x%x]: 0x%08x\n",
reg_addr, reg_val);
reg_addr = REG_INDEX_VCBUS(VPP_POSTBLEND_VD3_H_START_END);
reg_val = osd_reg_read(reg_addr);
osd_logi("reg[0x%x]: 0x%08x\n",
reg_addr, reg_val);
reg_addr = REG_INDEX_VCBUS(VPP_POSTBLEND_VD3_V_START_END);
reg_val = osd_reg_read(reg_addr);
osd_logi("reg[0x%x]: 0x%08x\n",
reg_addr, reg_val);
reg_addr = REG_INDEX_VCBUS(VPP_POSTBLND_H_V_SIZE);
reg_val = osd_reg_read(reg_addr);
osd_logi("reg[0x%x]: 0x%08x\n",
reg_addr, reg_val);
reg_addr = REG_INDEX_VCBUS(VPP_POST_BLEND_BLEND_DUMMY_DATA);
reg_val = osd_reg_read(reg_addr);
osd_logi("reg[0x%x]: 0x%08x\n",
reg_addr, reg_val);
reg_addr = REG_INDEX_VCBUS(VPP_POST_BLEND_DUMMY_ALPHA);
reg_val = osd_reg_read(reg_addr);
osd_logi("reg[0x%x]: 0x%08x\n",
reg_addr, reg_val);
reg_addr = REG_INDEX_VCBUS(VPP_POST_BLEND_DUMMY_ALPHA1);
reg_val = osd_reg_read(reg_addr);
osd_logi("reg[0x%x]: 0x%08x\n",
reg_addr, reg_val);
reg_addr = REG_INDEX_VCBUS(VD1_BLEND_SRC_CTRL);
reg_val = osd_reg_read(reg_addr);
osd_logi("reg[0x%x]: 0x%08x\n",
reg_addr, reg_val);
reg_addr = REG_INDEX_VCBUS(VD2_BLEND_SRC_CTRL);
reg_val = osd_reg_read(reg_addr);
osd_logi("reg[0x%x]: 0x%08x\n",
reg_addr, reg_val);
reg_addr = REG_INDEX_VCBUS(VD3_BLEND_SRC_CTRL);
reg_val = osd_reg_read(reg_addr);
osd_logi("reg[0x%x]: 0x%08x\n",
reg_addr, reg_val);
reg_addr = REG_INDEX_VCBUS(OSD1_BLEND_SRC_CTRL);
reg_val = osd_reg_read(reg_addr);
osd_logi("reg[0x%x]: 0x%08x\n",
reg_addr, reg_val);
reg_addr = REG_INDEX_VCBUS(OSD2_BLEND_SRC_CTRL);
reg_val = osd_reg_read(reg_addr);
osd_logi("reg[0x%x]: 0x%08x\n",
reg_addr, reg_val);
reg_addr = REG_INDEX_VCBUS(VD1_POSTBLEND_ALPHA);
reg_val = osd_reg_read(reg_addr);
osd_logi("reg[0x%x]: 0x%08x\n",
reg_addr, reg_val);
reg_addr = REG_INDEX_VCBUS(VD2_POSTBLEND_ALPHA);
reg_val = osd_reg_read(reg_addr);
osd_logi("reg[0x%x]: 0x%08x\n",
reg_addr, reg_val);
reg_addr = REG_INDEX_VCBUS(VD3_POSTBLEND_ALPHA);
reg_val = osd_reg_read(reg_addr);
osd_logi("reg[0x%x]: 0x%08x\n",
reg_addr, reg_val);
reg_addr = REG_INDEX_VCBUS(VPP_POSTBLND_CTRL);
reg_val = osd_reg_read(reg_addr);
osd_logi("reg[0x%x]: 0x%08x\n",
reg_addr, reg_val);
}
static void dump_vpp_post_misc_reg(void)
{
int i;
u32 reg_addr, reg_val = 0;
osd_logi("vpp post misc regs:\n");
reg_addr = REG_INDEX_VCBUS(VPP_POSTBLND_CTRL);
reg_val = osd_reg_read(reg_addr);
osd_logi("reg[0x%x]: 0x%08x\n",
reg_addr, reg_val);
reg_addr = REG_INDEX_VCBUS(VPP_OBUF_RAM_CTRL);
reg_val = osd_reg_read(reg_addr);
osd_logi("reg[0x%x]: 0x%08x\n",
reg_addr, reg_val);
reg_addr = REG_INDEX_VCBUS(VPP_4P4S_CTRL);
reg_val = osd_reg_read(reg_addr);
osd_logi("reg[0x%x]: 0x%08x\n",
reg_addr, reg_val);
reg_addr = REG_INDEX_VCBUS(VPP_4S4P_CTRL);
reg_val = osd_reg_read(reg_addr);
osd_logi("reg[0x%x]: 0x%08x\n",
reg_addr, reg_val);
reg_addr = REG_INDEX_VCBUS(VPP_POST_VD1_WIN_CUT_CTRL);
reg_val = osd_reg_read(reg_addr);
osd_logi("reg[0x%x]: 0x%08x\n",
reg_addr, reg_val);
reg_addr = REG_INDEX_VCBUS(VPP_POST_WIN_CUT_CTRL);
reg_val = osd_reg_read(reg_addr);
osd_logi("reg[0x%x]: 0x%08x\n",
reg_addr, reg_val);
reg_addr = REG_INDEX_VCBUS(VPP_POST_PAD_HSIZE);
reg_val = osd_reg_read(reg_addr);
osd_logi("reg[0x%x]: 0x%08x\n",
reg_addr, reg_val);
reg_addr = REG_INDEX_VCBUS(VPP_POST_PAD_CTRL);
reg_val = osd_reg_read(reg_addr);
osd_logi("reg[0x%x]: 0x%08x\n",
reg_addr, reg_val);
for (i = 0; i < SLICE_NUM; i++) {
reg_addr = REG_INDEX_VCBUS(VPP_OUT_H_V_SIZE);
reg_addr = get_reg_slice_vpost(reg_addr, i);
reg_val = osd_reg_read(reg_addr);
osd_logi("reg[0x%x]: 0x%08x\n",
reg_addr, reg_val);
reg_addr = REG_INDEX_VCBUS(VPP_OFIFO_SIZE);
reg_addr = get_reg_slice_vpost(reg_addr, i);
reg_val = osd_reg_read(reg_addr);
osd_logi("reg[0x%x]: 0x%08x\n",
reg_addr, reg_val);
reg_addr = REG_INDEX_VCBUS(VPP_SLC_DEAL_CTRL);
reg_addr = get_reg_slice_vpost(reg_addr, i);
reg_val = osd_reg_read(reg_addr);
osd_logi("reg[0x%x]: 0x%08x\n",
reg_addr, reg_val);
reg_addr = REG_INDEX_VCBUS(VPP_HWIN_SIZE);
reg_addr = get_reg_slice_vpost(reg_addr, i);
reg_val = osd_reg_read(reg_addr);
osd_logi("reg[0x%x]: 0x%08x\n",
reg_addr, reg_val);
reg_addr = REG_INDEX_VCBUS(VPP_ALIGN_FIFO_SIZE);
reg_addr = get_reg_slice_vpost(reg_addr, i);
reg_val = osd_reg_read(reg_addr);
osd_logi("reg[0x%x]: 0x%08x\n",
reg_addr, reg_val);
}
}
static void dump_vpp_post_reg(void)
{
dump_vpp_blend_reg();
dump_vpp_post_misc_reg();
}
#endif
static void osd_debug_dump_value(void)
{
u32 index = 0;
struct hw_para_s *hwpara = NULL;
struct pandata_s *pdata = NULL;
osd_get_hw_para(&hwpara);
if (hwpara == NULL)
return;
osd_logi("--- OSD ---\n");
osd_logi("scan_mode: %s\n", (hwpara->scan_mode == SCAN_MODE_INTERLACE) ? "interlace" : "progressive");
osd_logi("order: %d\n", hwpara->order);
osd_logi("bot_type: %d\n", hwpara->bot_type);
osd_logi("field_out_en: %d\n", hwpara->field_out_en);
for (index = 0; index < HW_OSD_COUNT; index++) {
osd_logi("\n--- OSD%d ---\n", index);
osd_logi("enable: %d\n", hwpara->enable[index]);
osd_logi("2x-scale enable.h:%d .v: %d\n",
hwpara->scale[index].h_enable,
hwpara->scale[index].v_enable);
osd_logi("free-scale-mode: %d\n",
hwpara->free_scale_mode[index]);
osd_logi("free-scale enable.h:%d .v: %d\n",
hwpara->free_scale[index].h_enable,
hwpara->free_scale[index].v_enable);
pdata = &hwpara->pandata[index];
osd_logi("pan data:\n");
osd_logi("\tx_start: %10d, x_end: %10d\n",
pdata->x_start, pdata->x_end);
osd_logi("\ty_start: %10d, y_end: %10d\n",
pdata->y_start, pdata->y_end);
pdata = &hwpara->dispdata[index];
osd_logi("disp data:\n");
osd_logi("\tx_start: 0x%08x, x_end: 0x%08x\n",
pdata->x_start, pdata->x_end);
osd_logi("\ty_start: 0x%08x, y_end: 0x%08x\n",
pdata->y_start, pdata->y_end);
pdata = &hwpara->scaledata[index];
osd_logi("2x-scale data:\n");
osd_logi("\tx_start: 0x%08x, x_end: 0x%08x\n",
pdata->x_start, pdata->x_end);
osd_logi("\ty_start: 0x%08x, y_end: 0x%08x\n",
pdata->y_start, pdata->y_end);
pdata = &hwpara->free_scale_data[index];
osd_logi("free-scale src data:\n");
osd_logi("\tx_start: 0x%08x, x_end: 0x%08x\n",
pdata->x_start, pdata->x_end);
osd_logi("\ty_start: 0x%08x, y_end: 0x%08x\n",
pdata->y_start, pdata->y_end);
pdata = &hwpara->free_dst_data[index];
osd_logi("free-scale dst data:\n");
osd_logi("\tx_start: 0x%08x, x_end: 0x%08x\n",
pdata->x_start, pdata->x_end);
osd_logi("\ty_start: 0x%08x, y_end: 0x%08x\n",
pdata->y_start, pdata->y_end);
}
}
static void osd_debug_dump_register_all(void)
{
u32 reg = 0;
#ifndef AML_C3_DISPLAY
reg = VPU_VIU_VENC_MUX_CTRL;
osd_logi("reg[0x%x]: 0x%08x\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
reg = VPP_MISC;
osd_logi("reg[0x%x]: 0x%08x\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
reg = VPP_OFIFO_SIZE;
osd_logi("reg[0x%x]: 0x%08x\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
#ifndef AML_S5_DISPLAY
reg = VPP_HOLD_LINES;
osd_logi("reg[0x%x]: 0x%08x\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
#endif
#endif
#ifdef AML_S5_DISPLAY
reg = VPP_INTF_OSD3_CTRL;
osd_logi("reg[0x%x]: 0x%08x(2mux1)\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
reg = OSD_PROC_1MUX3_SEL;
osd_logi("reg[0x%x]: 0x%08x(1mux3)\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
reg = OSD_PI_BYPASS_EN;
osd_logi("reg[0x%x]: 0x%08x(PI)\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
reg = OSD_SYS_5MUX4_SEL;
osd_logi("reg[0x%x]: 0x%08x(5mux4)\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
#endif
if (osd_hw.osd_ver == OSD_HIGH_ONE) {
#ifdef AML_OSD_HIGH_VERSION
#ifndef AML_S5_DISPLAY
reg = OSD_PATH_MISC_CTRL;
osd_logi("reg[0x%x]: 0x%08x\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
#endif
reg = VIU_OSD_BLEND_CTRL;
osd_logi("reg[0x%x]: 0x%08x\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
reg = VIU_OSD_BLEND_DIN0_SCOPE_H;
osd_logi("reg[0x%x]: 0x%08x\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
reg = VIU_OSD_BLEND_DIN0_SCOPE_V;
osd_logi("reg[0x%x]: 0x%08x\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
reg = VIU_OSD_BLEND_DIN1_SCOPE_H;
osd_logi("reg[0x%x]: 0x%08x\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
reg = VIU_OSD_BLEND_DIN1_SCOPE_V;
osd_logi("reg[0x%x]: 0x%08x\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
reg = VIU_OSD_BLEND_DIN2_SCOPE_H;
osd_logi("reg[0x%x]: 0x%08x\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
reg = VIU_OSD_BLEND_DIN2_SCOPE_V;
osd_logi("reg[0x%x]: 0x%08x\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
reg = VIU_OSD_BLEND_DIN3_SCOPE_H;
osd_logi("reg[0x%x]: 0x%08x\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
reg = VIU_OSD_BLEND_DIN3_SCOPE_V;
osd_logi("reg[0x%x]: 0x%08x\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
reg = VIU_OSD_BLEND_DUMMY_DATA0;
osd_logi("reg[0x%x]: 0x%08x\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
reg = VIU_OSD_BLEND_DUMMY_ALPHA;
osd_logi("reg[0x%x]: 0x%08x\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
reg = VIU_OSD_BLEND_BLEND0_SIZE;
osd_logi("reg[0x%x]: 0x%08x\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
reg = VIU_OSD_BLEND_BLEND1_SIZE;
osd_logi("reg[0x%x]: 0x%08x\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
#ifndef AML_S5_DISPLAY
reg = VPP_OSD1_IN_SIZE;
osd_logi("reg[0x%x]: 0x%08x\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
#else
reg = OSD_BLEND_DOUT0_SIZE;
osd_logi("reg[0x%x]: 0x%08x\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
reg = OSD_BLEND_DOUT1_SIZE;
osd_logi("reg[0x%x]: 0x%08x\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
#endif
reg = VPP_OSD1_BLD_H_SCOPE;
osd_logi("reg[0x%x]: 0x%08x\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
reg = VPP_OSD1_BLD_V_SCOPE;
osd_logi("reg[0x%x]: 0x%08x\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
reg = VPP_OSD2_BLD_H_SCOPE;
osd_logi("reg[0x%x]: 0x%08x\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
reg = VPP_OSD2_BLD_V_SCOPE;
osd_logi("reg[0x%x]: 0x%08x\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
reg = OSD1_BLEND_SRC_CTRL;
osd_logi("reg[0x%x]: 0x%08x\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
reg = OSD2_BLEND_SRC_CTRL;
osd_logi("reg[0x%x]: 0x%08x\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
reg = VPP_POSTBLEND_H_SIZE;
osd_logi("reg[0x%x]: 0x%08x\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
reg = VPP_OUT_H_V_SIZE;
osd_logi("reg[0x%x]: 0x%08x\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
#endif
}
#ifdef AML_C3_DISPLAY
reg = hw_osd_reg_array[0].osd_sc_ctrl0;
osd_logi("reg[0x%04x]: 0x%08x\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
reg = hw_osd_reg_array[0].osd_sci_wh_m1;
osd_logi("reg[0x%04x]: 0x%08x\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
reg = hw_osd_reg_array[0].osd_sco_h_start_end;
osd_logi("reg[0x%04x]: 0x%08x\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
reg = hw_osd_reg_array[0].osd_sco_v_start_end;
osd_logi("reg[0x%04x]: 0x%08x\n\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
reg = hw_osd_reg_array[0].osd_fifo_ctrl_stat;
osd_logi("reg[0x%04x]: 0x%08x\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
reg = hw_osd_reg_array[0].osd_ctrl_stat;
osd_logi("reg[0x%04x]: 0x%08x\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
reg = hw_osd_reg_array[0].osd_blk0_cfg_w0;
osd_logi("reg[0x%04x]: 0x%08x\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
reg = hw_osd_reg_array[0].osd_blk0_cfg_w1;
osd_logi("reg[0x%04x]: 0x%08x\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
reg = hw_osd_reg_array[0].osd_blk0_cfg_w2;
osd_logi("reg[0x%04x]: 0x%08x\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
reg = hw_osd_reg_array[0].osd_blk0_cfg_w3;
osd_logi("reg[0x%04x]: 0x%08x\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
reg = hw_osd_reg_array[0].osd_blk0_cfg_w4;
osd_logi("reg[0x%04x]: 0x%08x\n\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
#else
u32 index = 0;
reg = hw_osd_reg_array[0].osd_sc_ctrl0;
osd_logi("reg[0x%x]: 0x%08x\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
reg = hw_osd_reg_array[0].osd_sci_wh_m1;
osd_logi("reg[0x%x]: 0x%08x\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
reg = hw_osd_reg_array[0].osd_sco_h_start_end;
osd_logi("reg[0x%x]: 0x%08x\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
reg = hw_osd_reg_array[0].osd_sco_v_start_end;
osd_logi("reg[0x%x]: 0x%08x\n\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
reg = VPP_POSTBLEND_H_SIZE;
osd_logi("reg[0x%x]: 0x%08x\n\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
for (index = 0; index < 2; index++) {
reg = hw_osd_reg_array[index].osd_fifo_ctrl_stat;
osd_logi("reg[0x%x]: 0x%08x\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
reg = hw_osd_reg_array[index].osd_ctrl_stat;
osd_logi("reg[0x%x]: 0x%08x\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
reg = hw_osd_reg_array[index].osd_blk0_cfg_w0;
osd_logi("reg[0x%x]: 0x%08x\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
reg = hw_osd_reg_array[index].osd_blk0_cfg_w1;
osd_logi("reg[0x%x]: 0x%08x\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
reg = hw_osd_reg_array[index].osd_blk0_cfg_w2;
osd_logi("reg[0x%x]: 0x%08x\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
reg = hw_osd_reg_array[index].osd_blk0_cfg_w3;
osd_logi("reg[0x%x]: 0x%08x\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
reg = hw_osd_reg_array[index].osd_blk0_cfg_w4;
osd_logi("reg[0x%x]: 0x%08x\n\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
}
#endif
#ifdef AML_T7_DISPLAY
if (!strcmp(env_get("display_layer"), "osd2") ||
!strcmp(env_get("display_layer"), "viu2_osd0")) {
reg = hw_osd_reg_array[2].osd_sc_ctrl0;
osd_logi("reg[0x%x]: 0x%08x\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
reg = hw_osd_reg_array[2].osd_sci_wh_m1;
osd_logi("reg[0x%x]: 0x%08x\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
reg = hw_osd_reg_array[2].osd_sco_h_start_end;
osd_logi("reg[0x%x]: 0x%08x\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
reg = hw_osd_reg_array[2].osd_sco_v_start_end;
osd_logi("reg[0x%x]: 0x%08x\n\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
reg = hw_osd_reg_array[2].osd_fifo_ctrl_stat;
osd_logi("reg[0x%x]: 0x%08x\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
reg = hw_osd_reg_array[2].osd_ctrl_stat;
osd_logi("reg[0x%x]: 0x%08x\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
reg = hw_osd_reg_array[2].osd_blk0_cfg_w0;
osd_logi("reg[0x%x]: 0x%08x\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
reg = hw_osd_reg_array[2].osd_blk0_cfg_w1;
osd_logi("reg[0x%x]: 0x%08x\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
reg = hw_osd_reg_array[2].osd_blk0_cfg_w2;
osd_logi("reg[0x%x]: 0x%08x\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
reg = hw_osd_reg_array[2].osd_blk0_cfg_w3;
osd_logi("reg[0x%x]: 0x%08x\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
reg = hw_osd_reg_array[2].osd_blk0_cfg_w4;
osd_logi("reg[0x%x]: 0x%08x\n\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
}
if (!strcmp(env_get("display_layer"), "osd3") ||
!strcmp(env_get("display_layer"), "viu3_osd0")) {
reg = hw_osd_reg_array[3].osd_sc_ctrl0;
osd_logi("reg[0x%x]: 0x%08x\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
reg = hw_osd_reg_array[3].osd_sci_wh_m1;
osd_logi("reg[0x%x]: 0x%08x\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
reg = hw_osd_reg_array[3].osd_sco_h_start_end;
osd_logi("reg[0x%x]: 0x%08x\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
reg = hw_osd_reg_array[3].osd_sco_v_start_end;
osd_logi("reg[0x%x]: 0x%08x\n\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
reg = hw_osd_reg_array[3].osd_fifo_ctrl_stat;
osd_logi("reg[0x%x]: 0x%08x\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
reg = hw_osd_reg_array[3].osd_ctrl_stat;
osd_logi("reg[0x%x]: 0x%08x\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
reg = hw_osd_reg_array[3].osd_blk0_cfg_w0;
osd_logi("reg[0x%x]: 0x%08x\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
reg = hw_osd_reg_array[3].osd_blk0_cfg_w1;
osd_logi("reg[0x%x]: 0x%08x\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
reg = hw_osd_reg_array[3].osd_blk0_cfg_w2;
osd_logi("reg[0x%x]: 0x%08x\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
reg = hw_osd_reg_array[3].osd_blk0_cfg_w3;
osd_logi("reg[0x%x]: 0x%08x\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
reg = hw_osd_reg_array[3].osd_blk0_cfg_w4;
osd_logi("reg[0x%x]: 0x%08x\n\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
}
#endif
#ifdef CONFIG_AML_MESON_G12A
/* for viu2_osd */
if (!strcmp(env_get("display_layer"), "viu2_osd0")) {
reg = hw_osd_reg_array[2].osd_fifo_ctrl_stat;
osd_logi("reg[0x%x]: 0x%08x\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
reg = hw_osd_reg_array[2].osd_ctrl_stat;
osd_logi("reg[0x%x]: 0x%08x\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
reg = hw_osd_reg_array[2].osd_blk0_cfg_w0;
osd_logi("reg[0x%x]: 0x%08x\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
reg = hw_osd_reg_array[2].osd_blk0_cfg_w1;
osd_logi("reg[0x%x]: 0x%08x\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
reg = hw_osd_reg_array[2].osd_blk0_cfg_w2;
osd_logi("reg[0x%x]: 0x%08x\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
reg = hw_osd_reg_array[2].osd_blk0_cfg_w3;
osd_logi("reg[0x%x]: 0x%08x\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
reg = hw_osd_reg_array[2].osd_blk0_cfg_w4;
osd_logi("reg[0x%x]: 0x%08x\n\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
}
#endif
#ifdef AML_S5_DISPLAY
osd_logi("--- slice2ppc ---\n");
reg = OSD_2SLICE2PPC_IN_SIZE;
osd_logi("reg[0x%x]: 0x%08x\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
reg = OSD_2SLICE2PPC_MODE;
osd_logi("reg[0x%x]: 0x%08x\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
reg = OSD_SYS_HWIN0_CUT;
osd_logi("reg[0x%x]: 0x%08x\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
reg = OSD_SYS_HWIN1_CUT;
osd_logi("reg[0x%x]: 0x%08x\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
reg = OSD_SYS_PAD_CTRL;
osd_logi("reg[0x%x]: 0x%08x\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
reg = OSD_SYS_PAD_DUMMY_DATA0;
osd_logi("reg[0x%x]: 0x%08x\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
reg = OSD_SYS_PAD_DUMMY_DATA1;
osd_logi("reg[0x%x]: 0x%08x\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
reg = OSD_SYS_PAD_H_SIZE;
osd_logi("reg[0x%x]: 0x%08x\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
reg = OSD_SYS_PAD_V_SIZE;
osd_logi("reg[0x%x]: 0x%08x\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
reg = OSD_SYS_2SLICE_HWIN_CUT;
osd_logi("reg[0x%x]: 0x%08x\n\n", REG_INDEX_VCBUS(reg), osd_reg_read(reg));
dump_vpp_post_reg();
#endif
}
static void osd_test_colorbar(void)
{
#ifndef AML_C3_DISPLAY
u32 encp_video_adv = 0;
encp_video_adv = osd_reg_read(ENCP_VIDEO_MODE_ADV);
/* start test mode */
osd_logi("--- OSD TEST COLORBAR ---\n");
osd_reg_write(ENCP_VIDEO_MODE_ADV, 0);
osd_reg_write(VENC_VIDEO_TST_EN, 1);
/* TST_MODE COLORBAR */
osd_logi("- COLORBAR -\n");
osd_reg_write(VENC_VIDEO_TST_MDSEL, 1);
msleep(OSD_TEST_DURATION);
/* TST_MODE THINLINE */
osd_logi("- THINLINE -\n");
osd_reg_write(VENC_VIDEO_TST_MDSEL, 2);
msleep(OSD_TEST_DURATION);
/* TST_MODE DOTGRID */
osd_logi("- DOTGRID -\n");
osd_reg_write(VENC_VIDEO_TST_MDSEL, 3);
msleep(OSD_TEST_DURATION);
/* stop test mode */
osd_reg_write(ENCP_VIDEO_MODE_ADV, encp_video_adv);
osd_reg_write(VENC_VIDEO_TST_EN, 0);
osd_reg_write(VENC_VIDEO_TST_MDSEL, 0);
#endif
}
#ifndef AML_C3_DISPLAY
static void osd_reset(void)
{
osd_set_free_scale_enable_hw(0, 0);
osd_enable_hw(0, 1);
}
#endif
static void osd_test_dummydata(void)
{
#ifndef AML_C3_DISPLAY
u32 dummy_data = 0;
dummy_data = osd_reg_read(VPP_DUMMY_DATA1);
osd_reset();
osd_logi("--- OSD TEST DUMMYDATA ---\n");
if (osd_hw.osd_ver == OSD_HIGH_ONE) {
#ifdef AML_OSD_HIGH_VERSION
osd_reg_write(VPP_POST_BLEND_BLEND_DUMMY_DATA, 0xff);
msleep(OSD_TEST_DURATION);
osd_reg_write(VPP_POST_BLEND_BLEND_DUMMY_DATA, 0xff00);
msleep(OSD_TEST_DURATION);
osd_reg_write(VPP_POST_BLEND_BLEND_DUMMY_DATA, 0xff0000);
msleep(OSD_TEST_DURATION);
osd_reg_write(VPP_POST_BLEND_BLEND_DUMMY_DATA, dummy_data);
msleep(OSD_TEST_DURATION);
#endif
} else if (get_cpu_id().family_id ==
MESON_CPU_MAJOR_ID_GXTVBB) {
osd_reg_write(VPP_DUMMY_DATA1, 0xFF0000); /* R */
msleep(OSD_TEST_DURATION);
osd_reg_write(VPP_DUMMY_DATA1, 0xFF00); /* G */
msleep(OSD_TEST_DURATION);
osd_reg_write(VPP_DUMMY_DATA1, 0xFF); /* B */
msleep(OSD_TEST_DURATION);
osd_reg_write(VPP_DUMMY_DATA1, dummy_data);
msleep(OSD_TEST_DURATION);
} else {
osd_reg_write(VPP_DUMMY_DATA1, 0xFF);
msleep(OSD_TEST_DURATION);
osd_reg_write(VPP_DUMMY_DATA1, 0);
msleep(OSD_TEST_DURATION);
osd_reg_write(VPP_DUMMY_DATA1, 0xFF00);
msleep(OSD_TEST_DURATION);
osd_reg_write(VPP_DUMMY_DATA1, dummy_data);
msleep(OSD_TEST_DURATION);
}
#endif
}
static void osd_debug_auto_test(void)
{
osd_test_colorbar();
osd_test_dummydata();
}
void osd_debug(void)
{
osd_debug_dump_value();
osd_logi("\n");
osd_debug_dump_register_all();
}
void osd_test(void)
{
osd_debug_auto_test();
}