blob: 8af40f99223b854c630b7371c987c61fb35eb775 [file] [log] [blame]
/*
* Copyright (C) 2019 MediaTek Inc.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
#include "mtk_drm_ddp_comp.h"
#include "mtk_dump.h"
static const char * const ddp_comp_str[] = {DECLARE_DDP_COMP(DECLARE_STR)};
const char *mtk_dump_comp_str(struct mtk_ddp_comp *comp)
{
if (comp->id < 0) {
DDPPR_ERR("%s: Invalid ddp comp id:%d\n", __func__, comp->id);
comp->id = 0;
}
return ddp_comp_str[comp->id];
}
const char *mtk_dump_comp_str_id(unsigned int id)
{
if (likely(id < DDP_COMPONENT_ID_MAX))
return ddp_comp_str[id];
return "invalid";
}
int mtk_dump_reg(struct mtk_ddp_comp *comp)
{
switch (comp->id) {
case DDP_COMPONENT_OVL0:
case DDP_COMPONENT_OVL0_2L:
case DDP_COMPONENT_OVL1_2L:
case DDP_COMPONENT_OVL2_2L:
case DDP_COMPONENT_OVL3_2L:
mtk_ovl_dump(comp);
break;
case DDP_COMPONENT_RDMA0:
case DDP_COMPONENT_RDMA1:
case DDP_COMPONENT_RDMA4:
case DDP_COMPONENT_RDMA5:
mtk_rdma_dump(comp);
break;
case DDP_COMPONENT_WDMA0:
case DDP_COMPONENT_WDMA1:
mtk_wdma_dump(comp);
break;
case DDP_COMPONENT_RSZ0:
case DDP_COMPONENT_RSZ1:
mtk_rsz_dump(comp);
break;
case DDP_COMPONENT_DSI0:
case DDP_COMPONENT_DSI1:
mtk_dsi_dump(comp);
break;
#ifdef CONFIG_MTK_HDMI_SUPPORT
case DDP_COMPONENT_DP_INTF0:
mtk_dp_intf_dump(comp);
break;
#endif
case DDP_COMPONENT_COLOR0:
case DDP_COMPONENT_COLOR1:
case DDP_COMPONENT_COLOR2:
mtk_color_dump(comp);
break;
case DDP_COMPONENT_CCORR0:
case DDP_COMPONENT_CCORR1:
mtk_ccorr_dump(comp);
break;
case DDP_COMPONENT_AAL0:
case DDP_COMPONENT_AAL1:
mtk_aal_dump(comp);
break;
case DDP_COMPONENT_DMDP_AAL0:
mtk_dmdp_aal_dump(comp);
break;
case DDP_COMPONENT_DITHER0:
case DDP_COMPONENT_DITHER1:
mtk_dither_dump(comp);
break;
case DDP_COMPONENT_GAMMA0:
case DDP_COMPONENT_GAMMA1:
mtk_gamma_dump(comp);
break;
case DDP_COMPONENT_POSTMASK0:
case DDP_COMPONENT_POSTMASK1:
mtk_postmask_dump(comp);
break;
case DDP_COMPONENT_DSC0:
mtk_dsc_dump(comp);
break;
case DDP_COMPONENT_MERGE0:
case DDP_COMPONENT_MERGE1:
mtk_merge_dump(comp);
break;
default:
return 0;
}
return 0;
}
int mtk_dump_analysis(struct mtk_ddp_comp *comp)
{
switch (comp->id) {
case DDP_COMPONENT_OVL0:
case DDP_COMPONENT_OVL1:
case DDP_COMPONENT_OVL0_2L:
case DDP_COMPONENT_OVL1_2L:
case DDP_COMPONENT_OVL2_2L:
case DDP_COMPONENT_OVL3_2L:
mtk_ovl_analysis(comp);
break;
case DDP_COMPONENT_RDMA0:
case DDP_COMPONENT_RDMA1:
case DDP_COMPONENT_RDMA4:
case DDP_COMPONENT_RDMA5:
mtk_rdma_analysis(comp);
break;
case DDP_COMPONENT_WDMA0:
case DDP_COMPONENT_WDMA1:
mtk_wdma_analysis(comp);
break;
case DDP_COMPONENT_RSZ0:
case DDP_COMPONENT_RSZ1:
mtk_rsz_analysis(comp);
break;
case DDP_COMPONENT_DSI0:
case DDP_COMPONENT_DSI1:
mtk_dsi_analysis(comp);
break;
#ifdef CONFIG_MTK_HDMI_SUPPORT
case DDP_COMPONENT_DP_INTF0:
mtk_dp_intf_analysis(comp);
break;
#endif
case DDP_COMPONENT_POSTMASK0:
case DDP_COMPONENT_POSTMASK1:
mtk_postmask_analysis(comp);
break;
case DDP_COMPONENT_DSC0:
mtk_dsc_analysis(comp);
break;
case DDP_COMPONENT_MERGE0:
case DDP_COMPONENT_MERGE1:
mtk_merge_analysis(comp);
default:
return 0;
}
return 0;
}
void mtk_serial_dump_reg(void __iomem *base, unsigned int offset,
unsigned int num)
{
unsigned int max_size = 54, i = 0, s = 0, l = 0;
char buf[max_size];
if (num > 4)
num = 4;
l = snprintf(buf, max_size, "0x%03x:", offset);
for (i = 0; i < num; i++) {
s = snprintf(buf + l, max_size, "0x%08x ",
readl(base + offset + i * 0x4));
l += s;
}
DDPDUMP("%s\n", buf);
}
void mtk_cust_dump_reg(void __iomem *base, int off1, int off2, int off3,
int off4)
{
unsigned int max_size = 84, i = 0, s = 0, l = 0;
int off[] = {off1, off2, off3, off4};
char buf[max_size];
for (i = 0; i < 4; i++) {
if (off[i] < 0)
break;
s = snprintf(buf + l, max_size, "0x%03x:0x%08x ", off[i],
readl(base + off[i]));
if (s < 0) {
/* Handle snprintf() error */
return;
}
l += s;
}
DDPDUMP("%s\n", buf);
}