| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521 |
- #include "cmdq_mdp_common.h"
- #include "cmdq_core.h"
- #include "cmdq_reg.h"
- #include "cmdq_mmp.h"
- #include "cmdq_mdp.h"
- #ifdef CMDQ_MET_READY
- #include <linux/met_drv.h>
- #endif
- void cmdq_mdp_enable(uint64_t engineFlag,
- enum CMDQ_CLK_ENUM gateId, enum CMDQ_ENG_ENUM engine, const char *name)
- {
- #ifdef CMDQ_PWR_AWARE
- CMDQ_VERBOSE("Test for ENG %d\n", engine);
- if (engineFlag & (1LL << engine)) {
- CMDQ_MSG("Enable %s clock\n", name);
- cmdq_core_enable_ccf_clk(gateId);
- }
- #endif
- }
- int cmdq_mdp_loop_reset_impl(const unsigned long resetReg,
- const uint32_t resetWriteValue,
- const unsigned long resetStateReg,
- const uint32_t resetMask,
- const uint32_t resetPollingValue,
- const char *name, const int32_t maxLoopCount)
- {
- int loop = 0;
- CMDQ_REG_SET32(resetReg, resetWriteValue);
- while (loop < maxLoopCount) {
- if (resetPollingValue == (CMDQ_REG_GET32(resetStateReg) & resetMask))
- break;
- loop++;
- }
- /* return polling result */
- if (loop >= maxLoopCount) {
- CMDQ_ERR
- ("%s failed, Reg:0x%lx, writeValue:0x%08x, stateReg:0x%lx, mask:0x%08x, pollingValue:0x%08x\n",
- __func__, resetReg, resetWriteValue, resetStateReg, resetMask,
- resetPollingValue);
- return -EFAULT;
- }
- return 0;
- }
- /* CCF */
- /* int cmdq_mdp_loop_reset(enum cg_clk_id clkId, */
- int cmdq_mdp_loop_reset(enum CMDQ_CLK_ENUM clkId,
- const unsigned long resetReg,
- const unsigned long resetStateReg,
- const uint32_t resetMask,
- const uint32_t resetValue, const char *name, const bool pollInitResult)
- {
- #ifdef CMDQ_PWR_AWARE
- int resetStatus = 0;
- int initStatus = 0;
- /* CCF */
- /* if (clock_is_on(clkId)) { */
- if (cmdq_core_clock_is_on(clkId)) {
- CMDQ_PROF_START(current->pid, __func__);
- CMDQ_PROF_MMP(cmdq_mmp_get_event()->MDP_reset,
- MMProfileFlagStart, resetReg, resetStateReg);
- /* loop reset */
- resetStatus = cmdq_mdp_loop_reset_impl(resetReg, 0x1,
- resetStateReg, resetMask, resetValue,
- name, CMDQ_MAX_LOOP_COUNT);
- if (pollInitResult) {
- /* loop init */
- initStatus = cmdq_mdp_loop_reset_impl(resetReg, 0x0,
- resetStateReg, resetMask, 0x0,
- name, CMDQ_MAX_LOOP_COUNT);
- }
- /* always clear to init state no matter what polling result */
- else
- CMDQ_REG_SET32(resetReg, 0x0);
- CMDQ_PROF_MMP(cmdq_mmp_get_event()->MDP_reset,
- MMProfileFlagEnd, resetReg, resetStateReg);
- CMDQ_PROF_END(current->pid, __func__);
- /* retrun failed if loop failed */
- if ((0 > resetStatus) || (0 > initStatus)) {
- CMDQ_ERR("Reset MDP %s failed, resetStatus:%d, initStatus:%d\n",
- name, resetStatus, initStatus);
- return -EFAULT;
- }
- }
- #endif
- return 0;
- };
- /* CCF */
- /* void cmdq_mdp_loop_off(enum cg_clk_id clkId, */
- void cmdq_mdp_loop_off(enum CMDQ_CLK_ENUM clkId,
- const unsigned long resetReg,
- const unsigned long resetStateReg,
- const uint32_t resetMask,
- const uint32_t resetValue, const char *name, const bool pollInitResult)
- {
- #ifdef CMDQ_PWR_AWARE
- int resetStatus = 0;
- int initStatus = 0;
- /* CCF */
- /* if (clock_is_on(clkId)) { */
- if (cmdq_core_clock_is_on(clkId)) {
- /* loop reset */
- resetStatus = cmdq_mdp_loop_reset_impl(resetReg, 0x1,
- resetStateReg, resetMask, resetValue,
- name, CMDQ_MAX_LOOP_COUNT);
- if (pollInitResult) {
- /* loop init */
- initStatus = cmdq_mdp_loop_reset_impl(resetReg, 0x0,
- resetStateReg, resetMask, 0x0,
- name, CMDQ_MAX_LOOP_COUNT);
- }
- /* always clear to init state no matter what polling result */
- else
- CMDQ_REG_SET32(resetReg, 0x0);
- /* retrun failed if loop failed */
- if ((0 > resetStatus) || (0 > initStatus)) {
- CMDQ_ERR("Disable %s engine failed, resetStatus:%d, initStatus:%d\n",
- name, resetStatus, initStatus);
- CMDQ_AEE("MDP", "Disable %s engine failed, resetStatus:%d, initStatus:%d\n",
- name, resetStatus, initStatus);
- return;
- }
- CMDQ_MSG("Disable %s clock\n", name);
- /* CCF */
- /* disable_clock(clkId, (char *)name); */
- cmdq_core_disable_ccf_clk(clkId);
- }
- #endif
- }
- void cmdq_mdp_dump_venc(const unsigned long base, const char *label)
- {
- CMDQ_ERR("======== cmdq_mdp_dump_venc + ========\n");
- CMDQ_ERR("[0x%lx] to [0x%lx]\n", base, base + 0x1000 * 4);
- print_hex_dump(KERN_ERR, "[CMDQ][ERR][VENC]", DUMP_PREFIX_ADDRESS, 16, 4,
- (void *)base, 0x1000, false);
- CMDQ_ERR("======== cmdq_mdp_dump_venc - ========\n");
- }
- const char *cmdq_mdp_get_rdma_state(uint32_t state)
- {
- switch (state) {
- case 0x1:
- return "idle";
- case 0x2:
- return "wait sof";
- case 0x4:
- return "reg update";
- case 0x8:
- return "clear0";
- case 0x10:
- return "clear1";
- case 0x20:
- return "int0";
- case 0x40:
- return "int1";
- case 0x80:
- return "data running";
- case 0x100:
- return "wait done";
- case 0x200:
- return "warm reset";
- case 0x400:
- return "wait reset";
- default:
- return "";
- }
- }
- void cmdq_mdp_dump_rdma(const unsigned long base, const char *label)
- {
- uint32_t value[15] = { 0 };
- uint32_t state = 0;
- uint32_t grep = 0;
- value[0] = CMDQ_REG_GET32(base + 0x030);
- value[1] = CMDQ_REG_GET32(base + 0xF00);
- value[2] = CMDQ_REG_GET32(base + 0x060);
- value[3] = CMDQ_REG_GET32(base + 0x070);
- value[4] = CMDQ_REG_GET32(base + 0x078);
- value[5] = CMDQ_REG_GET32(base + 0x080);
- value[6] = CMDQ_REG_GET32(base + 0x100);
- value[7] = CMDQ_REG_GET32(base + 0x118);
- value[8] = CMDQ_REG_GET32(base + 0x130);
- value[9] = CMDQ_REG_GET32(base + 0x400);
- value[10] = CMDQ_REG_GET32(base + 0x408);
- value[11] = CMDQ_REG_GET32(base + 0x410);
- value[12] = CMDQ_REG_GET32(base + 0x420);
- value[13] = CMDQ_REG_GET32(base + 0x430);
- value[14] = CMDQ_REG_GET32(base + 0x4D0);
- CMDQ_ERR("=============== [CMDQ] %s Status ====================================\n", label);
- CMDQ_ERR
- ("RDMA_SRC_CON: 0x%08x, RDMA_SRC_BASE_0: 0x%08x, RDMA_MF_BKGD_SIZE_IN_BYTE: 0x%08x\n",
- value[0], value[1], value[2]);
- CMDQ_ERR("RDMA_MF_SRC_SIZE: 0x%08x, RDMA_MF_CLIP_SIZE: 0x%08x, RDMA_MF_OFFSET_1: 0x%08x\n",
- value[3], value[4], value[5]);
- CMDQ_ERR("RDMA_SRC_END_0: 0x%08x, RDMA_SRC_OFFSET_0: 0x%08x, RDMA_SRC_OFFSET_W_0: 0x%08x\n",
- value[6], value[7], value[8]);
- CMDQ_ERR("RDMA_MON_STA_0: 0x%08x, RDMA_MON_STA_1: 0x%08x, RDMA_MON_STA_2: 0x%08x\n",
- value[9], value[10], value[11]);
- CMDQ_ERR("RDMA_MON_STA_4: 0x%08x, RDMA_MON_STA_6: 0x%08x, RDMA_MON_STA_26: 0x%08x\n",
- value[12], value[13], value[14]);
- /* parse state */
- CMDQ_ERR("RDMA ack:%d req:%d\n", (value[9] & (1 << 11)) >> 11,
- (value[9] & (1 << 10)) >> 10);
- state = (value[10] >> 8) & 0x7FF;
- grep = (value[10] >> 20) & 0x1;
- CMDQ_ERR("RDMA state: 0x%x (%s)\n", state, cmdq_mdp_get_rdma_state(state));
- CMDQ_ERR("RDMA horz_cnt: %d vert_cnt:%d\n", value[14] & 0xFFF, (value[14] >> 16) & 0xFFF);
- CMDQ_ERR("RDMA grep:%d => suggest to ask SMI help:%d\n", grep, grep);
- }
- const char *cmdq_mdp_get_rsz_state(const uint32_t state)
- {
- switch (state) {
- case 0x5:
- return "downstream hang"; /* 0,1,0,1 */
- case 0xa:
- return "upstream hang"; /* 1,0,1,0 */
- default:
- return "";
- }
- }
- void cmdq_mdp_dump_rsz(const unsigned long base, const char *label)
- {
- uint32_t value[8] = { 0 };
- uint32_t request[4] = { 0 };
- uint32_t state = 0;
- value[0] = CMDQ_REG_GET32(base + 0x004);
- value[1] = CMDQ_REG_GET32(base + 0x00C);
- value[2] = CMDQ_REG_GET32(base + 0x010);
- value[3] = CMDQ_REG_GET32(base + 0x014);
- value[4] = CMDQ_REG_GET32(base + 0x018);
- CMDQ_REG_SET32(base + 0x040, 0x00000001);
- value[5] = CMDQ_REG_GET32(base + 0x044);
- CMDQ_REG_SET32(base + 0x040, 0x00000002);
- value[6] = CMDQ_REG_GET32(base + 0x044);
- CMDQ_REG_SET32(base + 0x040, 0x00000003);
- value[7] = CMDQ_REG_GET32(base + 0x044);
- CMDQ_ERR("=============== [CMDQ] %s Status ====================================\n", label);
- CMDQ_ERR("RSZ_CONTROL: 0x%08x, RSZ_INPUT_IMAGE: 0x%08x RSZ_OUTPUT_IMAGE: 0x%08x\n",
- value[0], value[1], value[2]);
- CMDQ_ERR("RSZ_HORIZONTAL_COEFF_STEP: 0x%08x, RSZ_VERTICAL_COEFF_STEP: 0x%08x\n",
- value[3], value[4]);
- CMDQ_ERR("RSZ_DEBUG_1: 0x%08x, RSZ_DEBUG_2: 0x%08x, RSZ_DEBUG_3: 0x%08x\n",
- value[5], value[6], value[7]);
- /* parse state */
- /* .valid=1/request=1: upstream module sends data */
- /* .ready=1: downstream module receives data */
- state = value[6] & 0xF;
- request[0] = state & (0x1); /* out valid */
- request[1] = state & (0x1 << 1) >> 1; /* out ready */
- request[2] = state & (0x1 << 2) >> 2; /* in valid */
- request[3] = state & (0x1 << 3) >> 3; /* in ready */
- CMDQ_ERR("RSZ inRdy,inRsq,outRdy,outRsq: %d,%d,%d,%d (%s)\n",
- request[3], request[2], request[1], request[0], cmdq_mdp_get_rsz_state(state));
- }
- void cmdq_mdp_dump_rot(const unsigned long base, const char *label)
- {
- uint32_t value[32] = { 0 };
- value[0] = CMDQ_REG_GET32(base + 0x000);
- value[1] = CMDQ_REG_GET32(base + 0x008);
- value[2] = CMDQ_REG_GET32(base + 0x00C);
- value[3] = CMDQ_REG_GET32(base + 0x024);
- value[4] = CMDQ_REG_GET32(base + 0xF00);
- value[5] = CMDQ_REG_GET32(base + 0x02C);
- value[6] = CMDQ_REG_GET32(base + 0x004);
- value[7] = CMDQ_REG_GET32(base + 0x030);
- value[8] = CMDQ_REG_GET32(base + 0x078);
- value[9] = CMDQ_REG_GET32(base + 0x070);
- CMDQ_REG_SET32(base + 0x018, 0x00000100);
- value[10] = CMDQ_REG_GET32(base + 0x0D0);
- CMDQ_REG_SET32(base + 0x018, 0x00000200);
- value[11] = CMDQ_REG_GET32(base + 0x0D0);
- CMDQ_REG_SET32(base + 0x018, 0x00000300);
- value[12] = CMDQ_REG_GET32(base + 0x0D0);
- CMDQ_REG_SET32(base + 0x018, 0x00000400);
- value[13] = CMDQ_REG_GET32(base + 0x0D0);
- CMDQ_REG_SET32(base + 0x018, 0x00000500);
- value[14] = CMDQ_REG_GET32(base + 0x0D0);
- CMDQ_REG_SET32(base + 0x018, 0x00000600);
- value[15] = CMDQ_REG_GET32(base + 0x0D0);
- CMDQ_REG_SET32(base + 0x018, 0x00000700);
- value[16] = CMDQ_REG_GET32(base + 0x0D0);
- CMDQ_REG_SET32(base + 0x018, 0x00000800);
- value[17] = CMDQ_REG_GET32(base + 0x0D0);
- CMDQ_REG_SET32(base + 0x018, 0x00000900);
- value[18] = CMDQ_REG_GET32(base + 0x0D0);
- CMDQ_REG_SET32(base + 0x018, 0x00000A00);
- value[19] = CMDQ_REG_GET32(base + 0x0D0);
- CMDQ_REG_SET32(base + 0x018, 0x00000B00);
- value[20] = CMDQ_REG_GET32(base + 0x0D0);
- CMDQ_REG_SET32(base + 0x018, 0x00000C00);
- value[21] = CMDQ_REG_GET32(base + 0x0D0);
- CMDQ_REG_SET32(base + 0x018, 0x00000D00);
- value[22] = CMDQ_REG_GET32(base + 0x0D0);
- CMDQ_REG_SET32(base + 0x018, 0x00000E00);
- value[23] = CMDQ_REG_GET32(base + 0x0D0);
- CMDQ_REG_SET32(base + 0x018, 0x00000F00);
- value[24] = CMDQ_REG_GET32(base + 0x0D0);
- CMDQ_REG_SET32(base + 0x018, 0x00001000);
- value[25] = CMDQ_REG_GET32(base + 0x0D0);
- CMDQ_REG_SET32(base + 0x018, 0x00001100);
- value[26] = CMDQ_REG_GET32(base + 0x0D0);
- CMDQ_REG_SET32(base + 0x018, 0x00001200);
- value[27] = CMDQ_REG_GET32(base + 0x0D0);
- CMDQ_REG_SET32(base + 0x018, 0x00001300);
- value[28] = CMDQ_REG_GET32(base + 0x0D0);
- CMDQ_REG_SET32(base + 0x018, 0x00001400);
- value[29] = CMDQ_REG_GET32(base + 0x0D0);
- value[30] = CMDQ_REG_GET32(base + 0x01C);
- CMDQ_ERR("=============== [CMDQ] %s Status ====================================\n", label);
- CMDQ_ERR("ROT_CTRL: 0x%08x, ROT_MAIN_BUF_SIZE: 0x%08x, ROT_SUB_BUF_SIZE: 0x%08x\n",
- value[0], value[1], value[2]);
- CMDQ_ERR("ROT_TAR_SIZE: 0x%08x, ROT_BASE_ADDR: 0x%08x, ROT_OFST_ADDR: 0x%08x\n",
- value[3], value[4], value[5]);
- CMDQ_ERR("ROT_DMA_PERF: 0x%08x, ROT_STRIDE: 0x%08x, ROT_IN_SIZE: 0x%08x\n",
- value[6], value[7], value[8]);
- CMDQ_ERR("ROT_EOL: 0x%08x, ROT_DBUGG_1: 0x%08x, ROT_DEBUBG_2: 0x%08x\n",
- value[9], value[10], value[11]);
- CMDQ_ERR("ROT_DBUGG_3: 0x%08x, ROT_DBUGG_4: 0x%08x, ROT_DEBUBG_5: 0x%08x\n",
- value[12], value[13], value[14]);
- CMDQ_ERR("ROT_DBUGG_6: 0x%08x, ROT_DBUGG_7: 0x%08x, ROT_DEBUBG_8: 0x%08x\n",
- value[15], value[16], value[17]);
- CMDQ_ERR("ROT_DBUGG_9: 0x%08x, ROT_DBUGG_A: 0x%08x, ROT_DEBUBG_B: 0x%08x\n",
- value[18], value[19], value[20]);
- CMDQ_ERR("ROT_DBUGG_C: 0x%08x, ROT_DBUGG_D: 0x%08x, ROT_DEBUBG_E: 0x%08x\n",
- value[21], value[22], value[23]);
- CMDQ_ERR("ROT_DBUGG_F: 0x%08x, ROT_DBUGG_10: 0x%08x, ROT_DEBUBG_11: 0x%08x\n",
- value[24], value[25], value[26]);
- CMDQ_ERR("ROT_DEBUG_12: 0x%08x, ROT_DBUGG_13: 0x%08x, ROT_DBUGG_14: 0x%08x\n",
- value[27], value[28], value[29]);
- CMDQ_ERR("VIDO_INT: 0x%08x\n", value[30]);
- }
- void cmdq_mdp_dump_tdshp(const unsigned long base, const char *label)
- {
- uint32_t value[8] = { 0 };
- value[0] = CMDQ_REG_GET32(base + 0x114);
- value[1] = CMDQ_REG_GET32(base + 0x11C);
- value[2] = CMDQ_REG_GET32(base + 0x104);
- value[3] = CMDQ_REG_GET32(base + 0x108);
- value[4] = CMDQ_REG_GET32(base + 0x10C);
- value[5] = CMDQ_REG_GET32(base + 0x120);
- value[6] = CMDQ_REG_GET32(base + 0x128);
- value[7] = CMDQ_REG_GET32(base + 0x110);
- CMDQ_ERR("=============== [CMDQ] %s Status ====================================\n", label);
- CMDQ_ERR("TDSHP INPUT_CNT: 0x%08x, OUTPUT_CNT: 0x%08x\n", value[0], value[1]);
- CMDQ_ERR("TDSHP INTEN: 0x%08x, INTSTA: 0x%08x, 0x10C: 0x%08x\n", value[2], value[3],
- value[4]);
- CMDQ_ERR("TDSHP CFG: 0x%08x, IN_SIZE: 0x%08x, OUT_SIZE: 0x%08x\n", value[7], value[5],
- value[6]);
- }
- const char *cmdq_mdp_get_wdma_state(uint32_t state)
- {
- switch (state) {
- case 0x1:
- return "idle";
- case 0x2:
- return "clear";
- case 0x4:
- return "prepare";
- case 0x8:
- return "prepare";
- case 0x10:
- return "data running";
- case 0x20:
- return "eof wait";
- case 0x40:
- return "soft reset wait";
- case 0x80:
- return "eof done";
- case 0x100:
- return "sof reset done";
- case 0x200:
- return "frame complete";
- default:
- return "";
- }
- }
- void cmdq_mdp_dump_wdma(const unsigned long base, const char *label)
- {
- uint32_t value[40] = { 0 };
- uint32_t state = 0;
- uint32_t grep = 0; /* grep bit = 1, WDMA has sent request to SMI, and not receive done yet */
- uint32_t isFIFOFull = 0; /* 1 for WDMA FIFO full */
- value[0] = CMDQ_REG_GET32(base + 0x014);
- value[1] = CMDQ_REG_GET32(base + 0x018);
- value[2] = CMDQ_REG_GET32(base + 0x028);
- value[3] = CMDQ_REG_GET32(base + 0xF00);
- value[4] = CMDQ_REG_GET32(base + 0x078);
- value[5] = CMDQ_REG_GET32(base + 0x080);
- value[6] = CMDQ_REG_GET32(base + 0x0A0);
- value[7] = CMDQ_REG_GET32(base + 0x0A8);
- CMDQ_REG_SET32(base + 0x014, (value[0] & (0x0FFFFFFF)));
- value[8] = CMDQ_REG_GET32(base + 0x014);
- value[9] = CMDQ_REG_GET32(base + 0x0AC);
- CMDQ_REG_SET32(base + 0x014, 0x10000000 | (value[0] & (0x0FFFFFFF)));
- value[10] = CMDQ_REG_GET32(base + 0x014);
- value[11] = CMDQ_REG_GET32(base + 0x0AC);
- CMDQ_REG_SET32(base + 0x014, 0x20000000 | (value[0] & (0x0FFFFFFF)));
- value[12] = CMDQ_REG_GET32(base + 0x014);
- value[13] = CMDQ_REG_GET32(base + 0x0AC);
- CMDQ_REG_SET32(base + 0x014, 0x30000000 | (value[0] & (0x0FFFFFFF)));
- value[14] = CMDQ_REG_GET32(base + 0x014);
- value[15] = CMDQ_REG_GET32(base + 0x0AC);
- CMDQ_REG_SET32(base + 0x014, 0x40000000 | (value[0] & (0x0FFFFFFF)));
- value[16] = CMDQ_REG_GET32(base + 0x014);
- value[17] = CMDQ_REG_GET32(base + 0x0AC);
- CMDQ_REG_SET32(base + 0x014, 0x50000000 | (value[0] & (0x0FFFFFFF)));
- value[18] = CMDQ_REG_GET32(base + 0x014);
- value[19] = CMDQ_REG_GET32(base + 0x0AC);
- CMDQ_REG_SET32(base + 0x014, 0x60000000 | (value[0] & (0x0FFFFFFF)));
- value[20] = CMDQ_REG_GET32(base + 0x014);
- value[21] = CMDQ_REG_GET32(base + 0x0AC);
- CMDQ_REG_SET32(base + 0x014, 0x70000000 | (value[0] & (0x0FFFFFFF)));
- value[22] = CMDQ_REG_GET32(base + 0x014);
- value[23] = CMDQ_REG_GET32(base + 0x0AC);
- CMDQ_REG_SET32(base + 0x014, 0x80000000 | (value[0] & (0x0FFFFFFF)));
- value[24] = CMDQ_REG_GET32(base + 0x014);
- value[25] = CMDQ_REG_GET32(base + 0x0AC);
- CMDQ_REG_SET32(base + 0x014, 0x90000000 | (value[0] & (0x0FFFFFFF)));
- value[26] = CMDQ_REG_GET32(base + 0x014);
- value[27] = CMDQ_REG_GET32(base + 0x0AC);
- CMDQ_REG_SET32(base + 0x014, 0xA0000000 | (value[0] & (0x0FFFFFFF)));
- value[28] = CMDQ_REG_GET32(base + 0x014);
- value[29] = CMDQ_REG_GET32(base + 0x0AC);
- CMDQ_REG_SET32(base + 0x014, 0xB0000000 | (value[0] & (0x0FFFFFFF)));
- value[30] = CMDQ_REG_GET32(base + 0x014);
- value[31] = CMDQ_REG_GET32(base + 0x0AC);
- CMDQ_REG_SET32(base + 0x014, 0xC0000000 | (value[0] & (0x0FFFFFFF)));
- value[32] = CMDQ_REG_GET32(base + 0x014);
- value[33] = CMDQ_REG_GET32(base + 0x0AC);
- CMDQ_REG_SET32(base + 0x014, 0xD0000000 | (value[0] & (0x0FFFFFFF)));
- value[34] = CMDQ_REG_GET32(base + 0x014);
- value[35] = CMDQ_REG_GET32(base + 0x0AC);
- CMDQ_REG_SET32(base + 0x014, 0xE0000000 | (value[0] & (0x0FFFFFFF)));
- value[36] = CMDQ_REG_GET32(base + 0x014);
- value[37] = CMDQ_REG_GET32(base + 0x0AC);
- CMDQ_REG_SET32(base + 0x014, 0xF0000000 | (value[0] & (0x0FFFFFFF)));
- value[38] = CMDQ_REG_GET32(base + 0x014);
- value[39] = CMDQ_REG_GET32(base + 0x0AC);
- CMDQ_ERR("=============== [CMDQ] %s Status ====================================\n", label);
- CMDQ_ERR("[CMDQ]WDMA_CFG: 0x%08x, WDMA_SRC_SIZE: 0x%08x, WDMA_DST_W_IN_BYTE = 0x%08x\n",
- value[0], value[1], value[2]);
- CMDQ_ERR
- ("[CMDQ]WDMA_DST_ADDR0: 0x%08x, WDMA_DST_UV_PITCH: 0x%08x, WDMA_DST_ADDR_OFFSET0 = 0x%08x\n",
- value[3], value[4], value[5]);
- CMDQ_ERR("[CMDQ]WDMA_STATUS: 0x%08x, WDMA_INPUT_CNT: 0x%08x\n", value[6], value[7]);
- /* Dump Addtional WDMA debug info */
- CMDQ_ERR("WDMA_DEBUG_0 +014: 0x%08x , +0ac: 0x%08x\n", value[8], value[9]);
- CMDQ_ERR("WDMA_DEBUG_1 +014: 0x%08x , +0ac: 0x%08x\n", value[10], value[11]);
- CMDQ_ERR("WDMA_DEBUG_2 +014: 0x%08x , +0ac: 0x%08x\n", value[12], value[13]);
- CMDQ_ERR("WDMA_DEBUG_3 +014: 0x%08x , +0ac: 0x%08x\n", value[14], value[15]);
- CMDQ_ERR("WDMA_DEBUG_4 +014: 0x%08x , +0ac: 0x%08x\n", value[16], value[17]);
- CMDQ_ERR("WDMA_DEBUG_5 +014: 0x%08x , +0ac: 0x%08x\n", value[18], value[19]);
- CMDQ_ERR("WDMA_DEBUG_6 +014: 0x%08x , +0ac: 0x%08x\n", value[20], value[21]);
- CMDQ_ERR("WDMA_DEBUG_7 +014: 0x%08x , +0ac: 0x%08x\n", value[22], value[23]);
- CMDQ_ERR("WDMA_DEBUG_8 +014: 0x%08x , +0ac: 0x%08x\n", value[24], value[25]);
- CMDQ_ERR("WDMA_DEBUG_9 +014: 0x%08x , +0ac: 0x%08x\n", value[26], value[27]);
- CMDQ_ERR("WDMA_DEBUG_A +014: 0x%08x , +0ac: 0x%08x\n", value[28], value[29]);
- CMDQ_ERR("WDMA_DEBUG_B +014: 0x%08x , +0ac: 0x%08x\n", value[30], value[31]);
- CMDQ_ERR("WDMA_DEBUG_C +014: 0x%08x , +0ac: 0x%08x\n", value[32], value[33]);
- CMDQ_ERR("WDMA_DEBUG_D +014: 0x%08x , +0ac: 0x%08x\n", value[34], value[35]);
- CMDQ_ERR("WDMA_DEBUG_E +014: 0x%08x , +0ac: 0x%08x\n", value[36], value[37]);
- CMDQ_ERR("WDMA_DEBUG_F +014: 0x%08x , +0ac: 0x%08x\n", value[38], value[39]);
- /* parse WDMA state */
- state = value[6] & 0x3FF;
- grep = (value[6] >> 13) & 0x1;
- isFIFOFull = (value[6] >> 12) & 0x1;
- CMDQ_ERR("WDMA state:0x%x (%s)\n", state, cmdq_mdp_get_wdma_state(state));
- CMDQ_ERR("WDMA in_req:%d in_ack:%d\n", (value[6] >> 15) & 0x1, (value[6] >> 14) & 0x1);
- /* note WDMA send request(i.e command) to SMI first, then SMI takes request data from WDMA FIFO */
- /* if SMI dose not process request and upstream HWs */
- /* such as MDP_RSZ send data to WDMA, WDMA FIFO will full finally */
- CMDQ_ERR("WDMA grep:%d, FIFO full:%d\n", grep, isFIFOFull);
- CMDQ_ERR("WDMA suggest: Need SMI help:%d, Need check WDMA config:%d\n", (grep),
- ((0 == grep) && (1 == isFIFOFull)));
- }
|