| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876 |
- /* Copyright Statement:
- *
- * This software/firmware and related documentation ("MediaTek Software") are
- * protected under relevant copyright laws. The information contained herein
- * is confidential and proprietary to MediaTek Inc. and/or its licensors.
- * Without the prior written permission of MediaTek inc. and/or its licensors,
- * any reproduction, modification, use or disclosure of MediaTek Software,
- * and information contained herein, in whole or in part, shall be strictly prohibited.
- */
- /* MediaTek Inc. (C) 2015. All rights reserved.
- *
- * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
- * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
- * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON
- * AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
- * NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
- * SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
- * SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH
- * THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
- * THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
- * CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
- * SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
- * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
- * CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
- * AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
- * OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO
- * MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
- */
- #define LOG_TAG "DUMP"
- #include <platform/ddp_info.h>
- #include <platform/ddp_log.h>
- #include <platform/ddp_path.h>
- #include <platform/ddp_dump.h>
- #include <platform/disp_drv_platform.h>
- #include "platform/ddp_reg.h"
- #include <platform/ddp_dsi.h>
- #include <platform/ddp_rdma.h>
- #include <platform/ddp_ovl.h>
- static char *ddp_signal_0(int bit)
- {
- switch (bit) {
- case 31:
- return "OVL0_MOUT1-WDMA0_SEL1";
- case 30:
- return "OVL0_MOUT0-COLOR0_SEL0";
- case 17:
- return "DSI0_SEL-DSI0";
- case 16:
- return "DITHER_MOUT2-WDMA0_SEL1";
- case 15:
- return "DITHER_MOUT1-UFOE_SEL1";
- case 14:
- return "DITHER_MOUT0-RMDA0";
- case 13:
- return "WDMA0_SEL-WDMA0";
- case 12:
- return "RDMA0_SOUT2-DBI0_SEL1";
- case 11:
- return "RDMA0_SOUT2-DSI0_SEL1";
- case 10:
- return "RDMA0_SOUT1-COLOR0_SEL0";
- case 9:
- return "RDMA0_SOUT0-UFOE0_SEL0";
- case 8:
- return "RDMA0-RDMA0_SOUT";
- case 7:
- return "OVL0-OVL_MOUT";
- case 6:
- return "GAMMA0-DITHER0";
- case 5:
- return "DITHER0-DITHER0_MOUT";
- case 4:
- return "COLOR0-CCORR0";
- case 3:
- return "CCORR0_AAL0";
- case 2:
- return "AAL0-GAMMA0";
- case 1:
- return "DBI0_SEL-DBI0";
- case 0:
- return "COLOR0_SEL-COLOR0";
- default:
- return NULL;
- }
- }
- static char *ddp_signal_1(int bit)
- {
- switch (bit) {
- case 12:
- return "UFOE_MOUT0-DSI0_SEL0";
- case 13:
- return "UFOE_MOUT1-DBI0_SEL0";
- case 14:
- return "UFOE_MOUT2-WDMA0_SEL2";
- case 15:
- return "UFOE_SEL-UFOE_MOUT";
- default:
- return NULL;
- }
- }
- static char *ddp_greq_name(int bit)
- {
- switch (bit) {
- case 0:
- return "OVL0";
- case 1:
- return "RDMA0";
- case 2:
- return "WDMA0";
- case 3:
- return "MDP_RDMA0";
- case 4:
- return "MDP_WDMA";
- case 5:
- return "MDP_WROT0";
- case 6:
- return "FAKE";
- default:
- return NULL;
- }
- }
- static char *ddp_get_mutex_module0_name(unsigned int bit)
- {
- switch (bit) {
- case 0: return "MDP_RDMA0";
- case 1: return "MDP_RSZ0";
- case 2: return "MDP_RSZ1";
- case 3: return "MDP_WDMA0";
- case 4: return "MDP_WROT0";
- case 5: return "MDP_TDSHP";
- case 6: return "DISP_OVL0";
- case 7: return "DISP_RDMA0";
- case 8: return "DISP_WDMA0";
- case 9: return "DISP_COLOR0";
- case 10: return "DISP_CCORR0";
- case 11: return "DISP_AAL0";
- case 12: return "DISP_GAMMA0";
- case 13: return "DISP_DITHER0";
- case 14: return "DISP_DSI0";
- case 15: return "DISP_DBI0";
- case 16: return "DISP_PWM0";
- default: return "mutex-unknown";
- }
- }
- char *ddp_get_fmt_name(DISP_MODULE_ENUM module, unsigned int fmt)
- {
- if (module == DISP_MODULE_WDMA0) {
- switch (fmt) {
- case 0:
- return "rgb565";
- case 1:
- return "rgb888";
- case 2:
- return "rgba8888";
- case 3:
- return "argb8888";
- case 4:
- return "uyvy";
- case 5:
- return "yuy2";
- case 7:
- return "y-only";
- case 8:
- return "iyuv";
- case 12:
- return "nv12";
- default:
- DDPDUMP("ddp_get_fmt_name, unknown fmt=%d, module=%d\n", fmt, module);
- return "unknown";
- }
- } else if (module == DISP_MODULE_OVL0) {
- switch (fmt) {
- case 0:
- return "rgb565";
- case 1:
- return "rgb888";
- case 2:
- return "rgba8888";
- case 3:
- return "argb8888";
- case 4:
- return "uyvy";
- case 5:
- return "yuyv";
- default:
- DDPDUMP("ddp_get_fmt_name, unknown fmt=%d, module=%d\n", fmt, module);
- return "unknown";
- }
- } else if (module == DISP_MODULE_RDMA0 || module == DISP_MODULE_RDMA1 || module == DISP_MODULE_RDMA2) {
- switch (fmt) {
- case 0:
- return "rgb565";
- case 1:
- return "rgb888";
- case 2:
- return "rgba8888";
- case 3:
- return "argb8888";
- case 4:
- return "uyvy";
- case 5:
- return "yuyv";
- default:
- DDPDUMP("ddp_get_fmt_name, unknown fmt=%d, module=%d\n", fmt, module);
- return "unknown";
- }
- } else {
- DDPDUMP("ddp_get_fmt_name, unknown module=%d\n", module);
- }
- return "unknown";
- }
- static char *ddp_clock_0(int bit)
- {
- switch (bit) {
- case 0:
- return "SMI_COMMON";
- case 1:
- return "SMI_LARB0";
- case 2:
- return "GALS_COMM0";
- case 3:
- return "GALS_COMM1";
- case 4:
- return "ISP_DL";
- case 5:
- return "MDP_RDMA0";
- case 6:
- return "MDP_RSZ0";
- case 7:
- return "MDP_RSZ1";
- case 8:
- return "MDP_TDSHP";
- case 9:
- return "MDP_WROT0";
- case 10:
- return "MDP_WDMA0";
- case 11:
- return "FAKE_ENG";
- case 12:
- return "DISP_OVL0";
- case 13:
- return "DISP_RDMA0";
- case 14:
- return "DISP_WDMA0";
- case 15:
- return "DISP_COLOR0";
- case 16:
- return "DISP_CCORR0";
- case 17:
- return "DISP_AAL0";
- case 18:
- return "DISP_GAMMA0";
- case 19:
- return "DISP_DITHER0";
- case 20:
- return "DSI0_MM_clock";
- case 21:
- return "DSI0_interface_clock";
- case 22:
- return "DBI0_MM_clock";
- case 23:
- return "DBI0_interface_clock";
- case 24:
- return "F26M_HRT_clock";
- default:
- return NULL;
- }
- }
- static void mutex_dump_reg(void)
- {
- DDPDUMP("==DISP MUTEX REGS==\n");
- DDPDUMP("(0x000)M_INTEN =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX_INTEN));
- DDPDUMP("(0x004)M_INTSTA =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX_INTSTA));
- DDPDUMP("(0x020)M0_EN =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX0_EN));
- DDPDUMP("(0x028)M0_RST =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX0_RST));
- DDPDUMP("(0x02c)M0_SOF =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX0_SOF));
- DDPDUMP("(0x030)M0_MOD0 =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX0_MOD0));
- DDPDUMP("(0x040)M1_EN =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX1_EN));
- DDPDUMP("(0x048)M1_RST =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX1_RST));
- DDPDUMP("(0x04c)M1_SOF =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX1_SOF));
- DDPDUMP("(0x050)M1_MOD0 =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX1_MOD0));
- DDPDUMP("(0x060)M2_EN =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX2_EN));
- DDPDUMP("(0x068)M2_RST =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX2_RST));
- DDPDUMP("(0x06c)M2_SOF =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX2_SOF));
- DDPDUMP("(0x070)M2_MOD0 =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX2_MOD0));
- DDPDUMP("(0x080)M3_EN =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX3_EN));
- DDPDUMP("(0x088)M3_RST =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX3_RST));
- DDPDUMP("(0x08C)M3_SOF =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX3_SOF));
- DDPDUMP("(0x090)M3_MOD0 =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX3_MOD0));
- DDPDUMP("(0x0a0)M4_EN =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX4_EN));
- DDPDUMP("(0x0a8)M4_RST =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX4_RST));
- DDPDUMP("(0x0ac)M4_SOF =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX4_SOF));
- DDPDUMP("(0x0b0)M4_MOD0 =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX4_MOD0));
- DDPDUMP("(0x0c0)M5_EN =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX5_EN));
- DDPDUMP("(0x0c8)M5_RST =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX5_RST));
- DDPDUMP("(0x0cc)M5_SOF =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX5_SOF));
- DDPDUMP("(0x0d0)M5_MOD0 =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX5_MOD0));
- DDPDUMP("(0x30c)DEBUG_OUT_SEL =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_DEBUG_OUT_SEL));
- return;
- }
- static void mutex_dump_analysis(void)
- {
- int i = 0;
- int j = 0;
- char mutex_module[512] = { '\0' };
- char *p = NULL;
- int len = 0;
- unsigned int val;
- DDPDUMP("== DISP Mutex Analysis ==\n");
- for (i = 0; i < 5; i++) {
- p = mutex_module;
- len = 0;
- if (DISP_REG_GET(DISP_REG_CONFIG_MUTEX_MOD0(i)) == 0)
- continue;
- val = DISP_REG_GET(DISP_REG_CONFIG_MUTEX_SOF(i));
- len = sprintf(p, "MUTEX%d :SOF=%s,EOF=%s,WAIT=%d,module=(",
- i,
- ddp_get_mutex_sof_name(REG_FLD_VAL_GET(SOF_FLD_MUTEX0_SOF, val)),
- ddp_get_mutex_sof_name(REG_FLD_VAL_GET(SOF_FLD_MUTEX0_EOF, val)),
- REG_FLD_VAL_GET(SOF_FLD_MUTEX0_SOF_WAIT, val));
- p += len;
- for (j = 0; j < 32; j++) {
- unsigned int regval = DISP_REG_GET(DISP_REG_CONFIG_MUTEX_MOD0(i));
- if ((regval & (1 << j))) {
- len = sprintf(p, "%s,", ddp_get_mutex_module0_name(j));
- p += len;
- }
- }
- /* for (j = 0; j < 32; j++) {
- unsigned int regval = DISP_REG_GET(DISP_REG_CONFIG_MUTEX_MOD1(i));
- if ((regval & (1 << j))) {
- len = sprintf(p, "%s,", ddp_get_mutex_module1_name(j));
- p += len;
- }
- }
- */
- DDPDUMP("%s)\n", mutex_module);
- }
- }
- static void mmsys_config_dump_reg(void)
- {
- DDPDUMP("== DISP MMSYS_Config REGS ==\n");
- DDPDUMP("MMSYS_INTEN=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MMSYS_INTEN));
- DDPDUMP("MMSYS_INTSTA=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MMSYS_INTSTA));
- DDPDUMP("MMSYS_MOUT_RST=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MMSYS_MOUT_RST));
- DDPDUMP("OVL0_MOUT_EN=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_DISP_OVL0_MOUT_EN));
- DDPDUMP("DITHER_MOUT_EN=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_DISP_DITHER_MOUT_EN));
- DDPDUMP("UFOE_MOUT_EN=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_DISP_UFOE_MOUT_EN));
- DDPDUMP("RDMA0_SIN=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_DISP_RDMA0_SOUT_SEL_IN));
- DDPDUMP("COLOR_SIN=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_DISP_COLOR_SEL_IN));
- DDPDUMP("DBI_SIN=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_DISP_DBI_SEL_IN));
- DDPDUMP("WDMA0_SIN=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_DISP_WDMA0_SEL_IN));
- DDPDUMP("DSI0_SIN=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_DISP_DSI0_SEL_IN));
- DDPDUMP("UFOE_SIN=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_DISP_UFOE_SEL_IN));
- DDPDUMP("MM_MISC=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MMSYS_MISC));
- DDPDUMP("MM_CG_CON0=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MMSYS_CG_CON0));
- DDPDUMP("MM_CG_CON1=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MMSYS_CG_CON1));
- DDPDUMP("MM_HW_DCM_DIS0=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MMSYS_HW_DCM_1ST_DIS0));
- DDPDUMP("MM_HW_DCM_DIS1=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MMSYS_HW_DCM_2ST_DIS0));
- DDPDUMP("MM_SW0_RST_B=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MMSYS_SW0_RST_B));
- DDPDUMP("MM_SW1_RST_B=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MMSYS_SW1_RST_B));
- DDPDUMP("MM_LCM_RST_B=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MMSYS_LCM_RST_B));
- DDPDUMP("MM_DBG_OUT_SEL=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MMSYS_DEBUG_OUT_SEL));
- DDPDUMP("MM_DUMMY0=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MMSYS_DUMMY0));
- DDPDUMP("MM_DUMMY1=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MMSYS_DUMMY1));
- DDPDUMP("MM_DUMMY2=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MMSYS_DUMMY2));
- DDPDUMP("MM_DUMMY3=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MMSYS_DUMMY3));
- DDPDUMP("DISP_VALID_0=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_DISP_DL_VALID_0));
- DDPDUMP("DISP_VALID_1=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_DISP_DL_VALID_1));
- DDPDUMP("DISP_READY_0=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_DISP_DL_READY_0));
- DDPDUMP("DISP_READY_1=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_DISP_DL_READY_1));
- }
- /* ------ clock:
- Before power on mmsys:
- CLK_CFG_0_CLR (address is 0x10000048) = 0x80000000 (bit 31).
- Before using DISP_PWM0 or DISP_PWM1:
- CLK_CFG_1_CLR(address is 0x10000058)=0x80 (bit 7).
- Before using DPI pixel clock:
- CLK_CFG_6_CLR(address is 0x100000A8)=0x80 (bit 7).
- Only need to enable the corresponding bits of MMSYS_CG_CON0 and MMSYS_CG_CON1 for the modules:
- smi_common, larb0, mdp_crop, fake_eng, mutex_32k, pwm0, pwm1, dsi0, dsi1, dpi.
- Other bits could keep 1. Suggest to keep smi_common and larb0 always clock on.
- --------valid & ready
- example:
- ovl0 -> ovl0_mout_ready=1 means engines after ovl_mout are ready for receiving data
- ovl0_mout_ready=0 means ovl0_mout can not receive data, maybe ovl0_mout or after engines config error
- ovl0 -> ovl0_mout_valid=1 means engines before ovl0_mout is OK,
- ovl0_mout_valid=0 means ovl can not transfer data to ovl0_mout, means ovl0 or before engines are not ready.
- */
- static void mmsys_config_dump_analysis(void)
- {
- unsigned int i = 0;
- unsigned int reg = 0;
- char clock_on[512] = { '\0' };
- char *pos = NULL;
- const char *name;
- /* int len = 0; */
- unsigned int valid[2], ready[2];
- unsigned int greq;
- valid[0] = DISP_REG_GET(DISP_REG_CONFIG_DISP_DL_VALID_0);
- valid[1] = DISP_REG_GET(DISP_REG_CONFIG_DISP_DL_VALID_1);
- ready[0] = DISP_REG_GET(DISP_REG_CONFIG_DISP_DL_READY_0);
- ready[1] = DISP_REG_GET(DISP_REG_CONFIG_DISP_DL_READY_1);
- greq = DISP_REG_GET(DISP_REG_CONFIG_SMI_LARB0_GREQ);
- DDPDUMP("== DISP MMSYS_CONFIG ANALYSIS ==\n");
- #if 0 /* TODO: mmsys clk?? */
- DDPDUMP("mmsys clock=0x%x, CG_CON0=0x%x, CG_CON1=0x%x\n",
- DISP_REG_GET(DISP_REG_CLK_CFG_0_MM_CLK),
- DISP_REG_GET(DISP_REG_CONFIG_MMSYS_CG_CON0),
- DISP_REG_GET(DISP_REG_CONFIG_MMSYS_CG_CON1));
- if ((DISP_REG_GET(DISP_REG_CLK_CFG_0_MM_CLK) >> 31) & 0x1)
- DDPERR("mmsys clock abnormal!!\n");
- #endif
- DDPDUMP("MMSYS_CG_CON0: 0x%08x\n", INREG32(DISP_REG_CONFIG_MMSYS_CG_CON0));
- DDPDUMP("MMSYS_CG_CON1: 0x%08x\n", INREG32(DISP_REG_CONFIG_MMSYS_CG_CON1));
- reg = DISP_REG_GET(DISP_REG_CONFIG_MMSYS_CG_CON0);
- for (i = 0; i < 32; i++) {
- if ((reg & (1 << i)) == 0) {
- name = ddp_clock_0(i);
- if (name)
- strncat(clock_on, name, (sizeof(clock_on) - strlen(clock_on) - 1));
- }
- }
- DDPDUMP("clock on modules:%s\n", clock_on);
- DDPDUMP("valid0=0x%x,valid1=0x%x,ready0=0x%x,ready1=0x%x,greq=0%x\n",
- valid[0], valid[1], ready[0], ready[1], greq);
- for (i = 0; i < 32; i++) {
- name = ddp_signal_0(i);
- if (!name)
- continue;
- pos = clock_on;
- if ((valid[0] & (1 << i)))
- pos += snprintf(pos, sizeof(clock_on), "%s,", "v");
- else
- pos += snprintf(pos, sizeof(clock_on), "%s,", "n");
- if ((ready[0] & (1 << i)))
- pos += snprintf(pos, sizeof(clock_on), "%s", "r");
- else
- pos += snprintf(pos, sizeof(clock_on), "%s", "n");
- pos += snprintf(pos, sizeof(clock_on), ": %s", name);
- DDPDUMP("%s\n", clock_on);
- }
- for (i = 0; i < 32; i++) {
- name = ddp_signal_1(i);
- if (!name)
- continue;
- pos = clock_on;
- if ((valid[1] & (1 << i)))
- pos += snprintf(pos, sizeof(clock_on), "%s,", "v");
- else
- pos += snprintf(pos, sizeof(clock_on), "%s,", "n");
- if ((ready[1] & (1 << i)))
- pos += snprintf(pos, sizeof(clock_on), "%s", "r");
- else
- pos += snprintf(pos, sizeof(clock_on), "%s", "n");
- pos += snprintf(pos, sizeof(clock_on), ": %s", name);
- DDPDUMP("%s\n", clock_on);
- }
- /* greq: 1 means SMI dose not grant, maybe SMI hang */
- if (greq)
- DDPDUMP("smi greq not grant module: (greq: 1 means SMI dose not grant, maybe SMI hang)");
- clock_on[0] = '\0';
- for (i = 0; i < 32; i++) {
- if (greq & (1 << i)) {
- name = ddp_greq_name(i);
- if (!name)
- continue;
- strncat(clock_on, name, (sizeof(clock_on) - strlen(clock_on) - 1));
- }
- }
- DDPDUMP("%s\n", clock_on);
- }
- static void gamma_dump_reg(void)
- {
- DDPDUMP("== DISP GAMMA REGS ==\n");
- DDPDUMP("(0x000)GA_EN=0x%x\n", DISP_REG_GET(DISP_REG_GAMMA_EN));
- DDPDUMP("(0x004)GA_RESET=0x%x\n", DISP_REG_GET(DISP_REG_GAMMA_RESET));
- DDPDUMP("(0x008)GA_INTEN=0x%x\n", DISP_REG_GET(DISP_REG_GAMMA_INTEN));
- DDPDUMP("(0x00c)GA_INTSTA=0x%x\n", DISP_REG_GET(DISP_REG_GAMMA_INTSTA));
- DDPDUMP("(0x010)GA_STATUS=0x%x\n", DISP_REG_GET(DISP_REG_GAMMA_STATUS));
- DDPDUMP("(0x020)GA_CFG=0x%x\n", DISP_REG_GET(DISP_REG_GAMMA_CFG));
- DDPDUMP("(0x024)GA_IN_COUNT=0x%x\n", DISP_REG_GET(DISP_REG_GAMMA_INPUT_COUNT));
- DDPDUMP("(0x028)GA_OUT_COUNT=0x%x\n", DISP_REG_GET(DISP_REG_GAMMA_OUTPUT_COUNT));
- DDPDUMP("(0x02c)GA_CHKSUM=0x%x\n", DISP_REG_GET(DISP_REG_GAMMA_CHKSUM));
- DDPDUMP("(0x030)GA_SIZE=0x%x\n", DISP_REG_GET(DISP_REG_GAMMA_SIZE));
- DDPDUMP("(0x0c0)GA_DUMMY_REG=0x%x\n", DISP_REG_GET(DISP_REG_GAMMA_DUMMY_REG));
- DDPDUMP("(0x800)GA_LUT=0x%x\n", DISP_REG_GET(DISP_REG_GAMMA_LUT));
- }
- static void gamma_dump_analysis(void)
- {
- DDPDUMP("== DISP GAMMA ANALYSIS ==\n");
- DDPDUMP("gamma: en=%d, w=%d, h=%d, in_p_cnt=%d, in_l_cnt=%d, out_p_cnt=%d, out_l_cnt=%d\n",
- DISP_REG_GET(DISP_REG_GAMMA_EN),
- (DISP_REG_GET(DISP_REG_GAMMA_SIZE) >> 16) & 0x1fff,
- DISP_REG_GET(DISP_REG_GAMMA_SIZE) & 0x1fff,
- DISP_REG_GET(DISP_REG_GAMMA_INPUT_COUNT) & 0x1fff,
- (DISP_REG_GET(DISP_REG_GAMMA_INPUT_COUNT) >> 16) & 0x1fff,
- DISP_REG_GET(DISP_REG_GAMMA_OUTPUT_COUNT) & 0x1fff,
- (DISP_REG_GET(DISP_REG_GAMMA_OUTPUT_COUNT) >> 16) & 0x1fff);
- }
- static void color_dump_reg(DISP_MODULE_ENUM module)
- {
- int index = 0;
- if (DISP_MODULE_COLOR0 == module) {
- index = 0;
- } else if (DISP_MODULE_COLOR1 == module) {
- DDPDUMP("error: DISP COLOR%d dose not exist!\n", index);
- return;
- }
- DDPDUMP("== DISP COLOR%d REGS ==\n", index);
- DDPDUMP("(0x400)COLOR_CFG_MAIN=0x%x\n", DISP_REG_GET(DISP_COLOR_CFG_MAIN));
- DDPDUMP("(0x404)COLOR_PXL_CNT_MAIN=0x%x\n", DISP_REG_GET(DISP_COLOR_PXL_CNT_MAIN));
- DDPDUMP("(0x408)COLOR_LINE_CNT_MAIN=0x%x\n", DISP_REG_GET(DISP_COLOR_LINE_CNT_MAIN));
- DDPDUMP("(0xc00)COLOR_START=0x%x\n", DISP_REG_GET(DISP_COLOR_START));
- DDPDUMP("(0xc28)DISP_COLOR_CK_ON=0x%x\n", DISP_REG_GET(DISP_COLOR_CK_ON));
- DDPDUMP("(0xc50)COLOR_INTER_IP_W=0x%x\n", DISP_REG_GET(DISP_COLOR_INTERNAL_IP_WIDTH));
- DDPDUMP("(0xc54)COLOR_INTER_IP_H=0x%x\n", DISP_REG_GET(DISP_COLOR_INTERNAL_IP_HEIGHT));
- return;
- }
- static void color_dump_analysis(DISP_MODULE_ENUM module)
- {
- int index = 0;
- if (DISP_MODULE_COLOR0 == module) {
- index = 0;
- } else if (DISP_MODULE_COLOR1 == module) {
- DDPDUMP("error: DISP COLOR%d dose not exist!\n", index);
- return;
- }
- DDPDUMP("== DISP COLOR%d ANALYSIS ==\n", index);
- DDPDUMP("color%d: bypass=%d, w=%d, h=%d, pixel_cnt=%d, line_cnt=%d,\n",
- index,
- (DISP_REG_GET(DISP_COLOR_CFG_MAIN) >> 7) & 0x1,
- DISP_REG_GET(DISP_COLOR_INTERNAL_IP_WIDTH),
- DISP_REG_GET(DISP_COLOR_INTERNAL_IP_HEIGHT),
- DISP_REG_GET(DISP_COLOR_PXL_CNT_MAIN) & 0xffff,
- (DISP_REG_GET(DISP_COLOR_LINE_CNT_MAIN) >> 16) & 0x1fff);
- return;
- }
- static void aal_dump_reg(void)
- {
- DDPDUMP("== DISP AAL REGS ==\n");
- DDPDUMP("(0x000)AAL_EN=0x%x\n", DISP_REG_GET(DISP_AAL_EN));
- DDPDUMP("(0x008)AAL_INTEN=0x%x\n", DISP_REG_GET(DISP_AAL_INTEN));
- DDPDUMP("(0x00c)AAL_INTSTA=0x%x\n", DISP_REG_GET(DISP_AAL_INTSTA));
- DDPDUMP("(0x020)AAL_CFG=0x%x\n", DISP_REG_GET(DISP_AAL_CFG));
- DDPDUMP("(0x024)AAL_IN_CNT=0x%x\n", DISP_REG_GET(DISP_AAL_IN_CNT));
- DDPDUMP("(0x028)AAL_OUT_CNT=0x%x\n", DISP_REG_GET(DISP_AAL_OUT_CNT));
- DDPDUMP("(0x030)AAL_SIZE=0x%x\n", DISP_REG_GET(DISP_AAL_SIZE));
- DDPDUMP("(0x20c)AAL_CABC_00=0x%x\n", DISP_REG_GET(DISP_AAL_CABC_00));
- DDPDUMP("(0x214)AAL_CABC_02=0x%x\n", DISP_REG_GET(DISP_AAL_CABC_02));
- DDPDUMP("(0x20c)AAL_STATUS_00=0x%x\n", DISP_REG_GET(DISP_AAL_STATUS_00));
- DDPDUMP("(0x210)AAL_STATUS_01=0x%x\n", DISP_REG_GET(DISP_AAL_STATUS_00 + 0x4));
- DDPDUMP("(0x2a0)AAL_STATUS_31=0x%x\n", DISP_REG_GET(DISP_AAL_STATUS_32 - 0x4));
- DDPDUMP("(0x2a4)AAL_STATUS_32=0x%x\n", DISP_REG_GET(DISP_AAL_STATUS_32));
- DDPDUMP("(0x3b0)AAL_DRE_MAPPING_00=0x%x\n", DISP_REG_GET(DISP_AAL_DRE_MAPPING_00));
- return;
- }
- static void aal_dump_analysis(void)
- {
- DDPDUMP("== DISP AAL ANALYSIS ==\n");
- DDPDUMP("aal: bypass=%d, relay=%d, en=%d, w=%d, h=%d, in(%d,%d),out(%d,%d)\n",
- DISP_REG_GET(DISP_AAL_EN) == 0x0,
- DISP_REG_GET(DISP_AAL_CFG) & 0x01,
- DISP_REG_GET(DISP_AAL_EN),
- (DISP_REG_GET(DISP_AAL_SIZE) >> 16) & 0x1fff,
- DISP_REG_GET(DISP_AAL_SIZE) & 0x1fff,
- DISP_REG_GET(DISP_AAL_IN_CNT) & 0x1fff,
- (DISP_REG_GET(DISP_AAL_IN_CNT) >> 16) & 0x1fff,
- DISP_REG_GET(DISP_AAL_OUT_CNT) & 0x1fff,
- (DISP_REG_GET(DISP_AAL_OUT_CNT) >> 16) & 0x1fff);
- }
- static void pwm_dump_reg(DISP_MODULE_ENUM module)
- {
- int index = 0;
- unsigned long reg_base = 0;
- if (module == DISP_MODULE_PWM0) {
- index = 0;
- reg_base = DISPSYS_PWM0_BASE;
- } else {
- index = 1;
- reg_base = DISPSYS_PWM0_BASE;
- }
- DDPDUMP("== DISP PWM%d REGS ==\n", index);
- DDPDUMP("(0x000)PWM_EN=0x%x\n", DISP_REG_GET(reg_base + DISP_PWM_EN_OFF));
- DDPDUMP("(0x008)PWM_CON_0=0x%x\n", DISP_REG_GET(reg_base + DISP_PWM_CON_0_OFF));
- DDPDUMP("(0x010)PWM_CON_1=0x%x\n", DISP_REG_GET(reg_base + DISP_PWM_CON_1_OFF));
- DDPDUMP("(0x028)PWM_DEBUG=0x%x\n", DISP_REG_GET(reg_base + 0x28));
- return;
- }
- static void pwm_dump_analysis(DISP_MODULE_ENUM module)
- {
- int index = 0;
- if (module == DISP_MODULE_PWM0) {
- index = 0;
- } else {
- index = 1;
- }
- DDPDUMP("== DISP PWM%d ANALYSIS ==\n", index);
- #if 0 /* TODO: clk reg?? */
- DDPDUMP("pwm clock=%d\n", (DISP_REG_GET(DISP_REG_CLK_CFG_1_CLR) >> 7) & 0x1);
- #endif
- return;
- }
- static void ccorr_dump_reg(void)
- {
- DDPDUMP("== DISP CCORR REGS ==\n");
- DDPDUMP("(00)EN=0x%x\n", DISP_REG_GET(DISP_REG_CCORR_EN));
- DDPDUMP("(20)CFG=0x%x\n", DISP_REG_GET(DISP_REG_CCORR_CFG));
- DDPDUMP("(24)IN_CNT=0x%x\n", DISP_REG_GET(DISP_REG_CCORR_IN_CNT));
- DDPDUMP("(28)OUT_CNT=0x%x\n", DISP_REG_GET(DISP_REG_CCORR_OUT_CNT));
- DDPDUMP("(30)SIZE=0x%x\n", DISP_REG_GET(DISP_REG_CCORR_SIZE));
- }
- static void ccorr_dump_analyze(void)
- {
- DDPDUMP("ccorr: en=%d, config=%d, w=%d, h=%d, in_p_cnt=%d, in_l_cnt=%d, out_p_cnt=%d, out_l_cnt=%d\n",
- DISP_REG_GET(DISP_REG_CCORR_EN), DISP_REG_GET(DISP_REG_CCORR_CFG),
- (DISP_REG_GET(DISP_REG_CCORR_SIZE) >> 16) & 0x1fff,
- DISP_REG_GET(DISP_REG_CCORR_SIZE) & 0x1fff,
- DISP_REG_GET(DISP_REG_CCORR_IN_CNT) & 0x1fff,
- (DISP_REG_GET(DISP_REG_CCORR_IN_CNT) >> 16) & 0x1fff,
- DISP_REG_GET(DISP_REG_CCORR_IN_CNT) & 0x1fff,
- (DISP_REG_GET(DISP_REG_CCORR_IN_CNT) >> 16) & 0x1fff);
- }
- static void dither_dump_reg(void)
- {
- DDPDUMP("== DISP DITHER REGS ==\n");
- DDPDUMP("(00)EN=0x%x\n", DISP_REG_GET(DISP_REG_DITHER_EN));
- DDPDUMP("(20)CFG=0x%x\n", DISP_REG_GET(DISP_REG_DITHER_CFG));
- DDPDUMP("(24)IN_CNT=0x%x\n", DISP_REG_GET(DISP_REG_DITHER_IN_CNT));
- DDPDUMP("(28)OUT_CNT=0x%x\n", DISP_REG_GET(DISP_REG_DITHER_OUT_CNT));
- DDPDUMP("(30)SIZE=0x%x\n", DISP_REG_GET(DISP_REG_DITHER_SIZE));
- }
- static void dither_dump_analyze(void)
- {
- DDPDUMP("dither: en=%d, config=%d, w=%d, h=%d, in_p_cnt=%d, in_l_cnt=%d, out_p_cnt=%d, out_l_cnt=%d\n",
- DISP_REG_GET(DISPSYS_DITHER0_BASE + 0x000), DISP_REG_GET(DISPSYS_DITHER0_BASE + 0x020),
- (DISP_REG_GET(DISP_REG_DITHER_SIZE) >> 16) & 0x1fff,
- DISP_REG_GET(DISP_REG_DITHER_SIZE) & 0x1fff,
- DISP_REG_GET(DISP_REG_DITHER_IN_CNT) & 0x1fff,
- (DISP_REG_GET(DISP_REG_DITHER_IN_CNT) >> 16) & 0x1fff,
- DISP_REG_GET(DISP_REG_DITHER_OUT_CNT) & 0x1fff,
- (DISP_REG_GET(DISP_REG_DITHER_OUT_CNT) >> 16) & 0x1fff);
- }
- static void dsi_dump_reg(DISP_MODULE_ENUM module)
- {
- DSI_DumpRegisters(module, NULL, 1);
- #if 0
- if (DISP_MODULE_DSI0) {
- int i = 0;
- DDPDUMP("== DISP DSI0 REGS ==\n");
- for (i = 0; i < 25 * 16; i += 16) {
- DDPDUMP("DSI0+%04x: 0x%08x 0x%08x 0x%08x 0x%08x\n", i,
- INREG32(DISPSYS_DSI0_BASE + i), INREG32(DISPSYS_DSI0_BASE + i + 0x4),
- INREG32(DISPSYS_DSI0_BASE + i + 0x8),
- INREG32(DISPSYS_DSI0_BASE + i + 0xc));
- }
- DDPDUMP("DSI0 CMDQ+0x200: 0x%08x 0x%08x 0x%08x 0x%08x\n",
- INREG32(DISPSYS_DSI0_BASE + 0x200), INREG32(DISPSYS_DSI0_BASE + 0x200 + 0x4),
- INREG32(DISPSYS_DSI0_BASE + 0x200 + 0x8),
- INREG32(DISPSYS_DSI0_BASE + 0x200 + 0xc));
- }
- #endif
- }
- static void dpi_dump_reg(void)
- {
- int i;
- DDPDUMP("-- Start dump DPI registers --\n");
- for (i = 0; i <= 0x40; i += 4)
- DDPDUMP("DPI+%04x: 0x%08x\n", i, INREG32(DISPSYS_DPI_BASE + i));
- for (i = 0x68; i <= 0x7C; i += 4)
- DDPDUMP("DPI+%04x: 0x%08x\n", i, INREG32(DISPSYS_DPI_BASE + i));
- DDPDUMP("DPI+Color Bar : 0x%04x : 0x%08x\n", 0xF00, INREG32(DISPSYS_DPI_BASE + 0xF00));
- DDPDUMP("DPI MMSYS_CG_CON0: 0x%08x\n", INREG32(DISP_REG_CONFIG_MMSYS_CG_CON0));
- DDPDUMP("DPI MMSYS_CG_CON1: 0x%08x\n", INREG32(DISP_REG_CONFIG_MMSYS_CG_CON1));
- }
- static void dpi_dump_analysis(void)
- {
- #if 0
- DDPDUMP("== DISP DPI ANALYSIS ==\n");
- /* TODO: mmsys clk?? */
- DDPDUMP("DPI clock=0x%x\n", DISP_REG_GET(DISP_REG_CLK_CFG_6_DPI));
- DDPDUMP("DPI clock_clear=%d\n", (DISP_REG_GET(DISP_REG_CLK_CFG_6_CLR) >> 7) & 0x1);
- #endif
- }
- int ddp_dump_reg(DISP_MODULE_ENUM module)
- {
- switch (module) {
- case DISP_MODULE_WDMA0:
- //wdma_dump_reg(module);
- break;
- case DISP_MODULE_RDMA0:
- case DISP_MODULE_RDMA1:
- case DISP_MODULE_RDMA2:
- RDMADump(module);
- break;
- case DISP_MODULE_OVL0:
- case DISP_MODULE_OVL1:
- case DISP_MODULE_OVL0_2L:
- case DISP_MODULE_OVL1_2L:
- OVLDump(module);
- break;
- case DISP_MODULE_GAMMA0:
- gamma_dump_reg();
- break;
- case DISP_MODULE_CONFIG:
- mmsys_config_dump_reg();
- break;
- case DISP_MODULE_MUTEX:
- mutex_dump_reg();
- break;
- case DISP_MODULE_COLOR0:
- case DISP_MODULE_COLOR1:
- color_dump_reg(module);
- break;
- case DISP_MODULE_AAL0:
- aal_dump_reg();
- break;
- case DISP_MODULE_PWM0:
- pwm_dump_reg(module);
- break;
- case DISP_MODULE_DSI0:
- case DISP_MODULE_DSI1:
- case DISP_MODULE_DSIDUAL:
- dsi_dump_reg(module);
- break;
- case DISP_MODULE_DPI:
- dpi_dump_reg();
- break;
- case DISP_MODULE_CCORR0:
- ccorr_dump_reg();
- break;
- case DISP_MODULE_DITHER0:
- dither_dump_reg();
- break;
- default:
- DDPDUMP("no dump_reg for module %s(%d)\n", ddp_get_module_name(module), module);
- }
- return 0;
- }
- int ddp_dump_analysis(DISP_MODULE_ENUM module)
- {
- switch (module) {
- case DISP_MODULE_WDMA0:
- //wdma_dump_analysis(module);
- break;
- case DISP_MODULE_RDMA0:
- case DISP_MODULE_RDMA1:
- case DISP_MODULE_RDMA2:
- rdma_dump_analysis(module);
- break;
- case DISP_MODULE_OVL0:
- case DISP_MODULE_OVL1:
- case DISP_MODULE_OVL0_2L:
- case DISP_MODULE_OVL1_2L:
- ovl_dump_analysis(module);
- break;
- case DISP_MODULE_GAMMA0:
- gamma_dump_analysis();
- break;
- case DISP_MODULE_CONFIG:
- mmsys_config_dump_analysis();
- break;
- case DISP_MODULE_MUTEX:
- mutex_dump_analysis();
- break;
- case DISP_MODULE_COLOR0:
- case DISP_MODULE_COLOR1:
- color_dump_analysis(module);
- break;
- case DISP_MODULE_AAL0:
- aal_dump_analysis();
- break;
- case DISP_MODULE_PWM0:
- pwm_dump_analysis(module);
- break;
- case DISP_MODULE_DSI0:
- case DISP_MODULE_DSI1:
- case DISP_MODULE_DSIDUAL:
- dsi_analysis(module);
- break;
- case DISP_MODULE_DPI:
- dpi_dump_analysis();
- break;
- case DISP_MODULE_CCORR0:
- ccorr_dump_analyze();
- break;
- case DISP_MODULE_DITHER0:
- dither_dump_analyze();
- break;
- default:
- DDPDUMP("no dump_analysis for module %s(%d)\n", ddp_get_module_name(module),
- module);
- }
- return 0;
- }
|