static ssize_t debug_dump_read(struct file *file, char __user *buf, size_t size, loff_t *ppos) { dprec_logger_dump_reset(); dump_to_buffer = 1; /* dump all */ dpmgr_debug_path_status(-1); dump_to_buffer = 0; return simple_read_from_buffer(buf, size, ppos, dprec_logger_get_dump_addr(), dprec_logger_get_dump_len()); }
static void process_dbg_opt(const char *opt) { char *buf = dbg_buf + strlen(dbg_buf); static disp_session_config config; if (0 == strncmp(opt, "regr:", 5)) { char *p = (char *)opt + 5; unsigned long addr = (unsigned long) simple_strtoul(p, &p, 16); if(is_reg_addr_valid(1, addr)==1)// (addr >= 0xf0000000U && addr <= 0xff000000U) { unsigned int regVal = DISP_REG_GET(addr); DDPMSG("regr: 0x%lx = 0x%08X\n", addr, regVal); sprintf(buf, "regr: 0x%lx = 0x%08X\n", addr, regVal); } else { sprintf(buf, "regr, invalid address 0x%lx\n", addr); goto Error; } } else if (0 == strncmp(opt, "regw:", 5)) { char *p = (char *)opt + 5; unsigned long addr = (unsigned long) simple_strtoul(p, &p, 16); unsigned int val = (unsigned int) simple_strtoul(p + 1, &p, 16); if(is_reg_addr_valid(1, addr)==1)// (addr >= 0xf0000000U && addr <= 0xff000000U) { unsigned int regVal; DISP_CPU_REG_SET(addr, val); regVal = DISP_REG_GET(addr); DDPMSG("regw: 0x%lx, 0x%08X = 0x%08X\n", addr, val, regVal); sprintf(buf, "regw: 0x%lx, 0x%08X = 0x%08X\n", addr, val, regVal); } else { sprintf(buf, "regw, invalid address 0x%lx \n", addr); goto Error; } } else if (0 == strncmp(opt, "dbg_log:", 8)) { char *p = (char *)opt + 8; unsigned int enable = (unsigned int) simple_strtoul(p, &p, 10); if (enable) dbg_log_level = 1; else dbg_log_level = 0; sprintf(buf, "dbg_log: %d\n", dbg_log_level); } else if (0 == strncmp(opt, "irq_log:", 8)) { char *p = (char *)opt + 8; unsigned int enable = (unsigned int) simple_strtoul(p, &p, 10); if (enable) irq_log_level = 1; else irq_log_level = 0; sprintf(buf, "irq_log: %d\n", irq_log_level); } else if (0 == strncmp(opt, "met_on:", 7)) { char *p = (char *)opt + 7; int met_on = (int) simple_strtoul(p, &p, 10); int rdma0_mode = (int) simple_strtoul(p + 1, &p, 10); int rdma1_mode = (int) simple_strtoul(p + 1, &p, 10); // ddp_init_met_tag(met_on,rdma0_mode,rdma1_mode); DDPMSG("process_dbg_opt, met_on=%d,rdma0_mode %d, rdma1 %d \n", met_on,rdma0_mode,rdma1_mode); sprintf(buf, "met_on:%d,rdma0_mode:%d,rdma1_mode:%d\n", met_on,rdma0_mode,rdma1_mode); } else if (0 == strncmp(opt, "backlight:", 10)) { char *p = (char *)opt + 10; unsigned int level = (unsigned int) simple_strtoul(p, &p, 10); if (level) { disp_bls_set_backlight(level); sprintf(buf, "backlight: %d\n", level); } else { goto Error; } } else if (0 == strncmp(opt, "pwm0:", 5) || 0 == strncmp(opt, "pwm1:", 5)) { char *p = (char *)opt + 5; unsigned int level = (unsigned int)simple_strtoul(p, &p, 10); if (level) { disp_pwm_id_t pwm_id = DISP_PWM0; if (opt[3] == '1') pwm_id = DISP_PWM1; disp_pwm_set_backlight(pwm_id, level); sprintf(buf, "PWM 0x%x : %d\n", pwm_id, level); } else { goto Error; } } else if (0 == strncmp(opt, "aal_dbg:", 8)) { aal_dbg_en = (int)simple_strtoul(opt + 8, NULL, 10); sprintf(buf, "aal_dbg_en = 0x%x\n", aal_dbg_en); } else if (0 == strncmp(opt, "dump_reg:", 9)) { char *p = (char *)opt + 9; unsigned int module = (unsigned int) simple_strtoul(p, &p, 10); DDPMSG("process_dbg_opt, module=%d \n", module); if (module<DISP_MODULE_NUM) { ddp_dump_reg(module); sprintf(buf, "dump_reg: %d\n", module); } else { DDPMSG("process_dbg_opt2, module=%d \n", module); goto Error; } } else if (0 == strncmp(opt, "dump_path:", 10)) { char *p = (char *)opt + 10; unsigned int mutex_idx = (unsigned int) simple_strtoul(p, &p, 10); DDPMSG("process_dbg_opt, path mutex=%d \n", mutex_idx); dpmgr_debug_path_status(mutex_idx); sprintf(buf, "dump_path: %d\n", mutex_idx); } else if (0 == strncmp(opt, "debug:", 6)) { char *p = (char *)opt + 6; unsigned int enable = (unsigned int) simple_strtoul(p, &p, 10); if(enable==1) { DDPMSG("[DDP] debug=1, trigger AEE\n"); //aee_kernel_exception("DDP-TEST-ASSERT", "[DDP] DDP-TEST-ASSERT"); } else if(enable==2) { ddp_mem_test(); } else if(enable==3) { ddp_lcd_test(); } else if(enable==4) { //DDPAEE("test 4"); } else if(enable==5) { extern unsigned int gDDPError; if(gDDPError==0) gDDPError = 1; else gDDPError = 0; sprintf(buf, "bypass PQ: %d\n", gDDPError); DDPMSG("bypass PQ: %d\n", gDDPError); } else if(enable==6) { unsigned int i = 0; int * modules = ddp_get_scenario_list(DDP_SCENARIO_PRIMARY_DISP); int module_num = ddp_get_module_num(DDP_SCENARIO_PRIMARY_DISP); printk("dump path status:"); for(i=0;i<module_num;i++) { printk("%s-", ddp_get_module_name(modules[i])); } printk("\n"); ddp_dump_analysis(DISP_MODULE_CONFIG); ddp_dump_analysis(DISP_MODULE_MUTEX); for( i=0; i< module_num;i++) { ddp_dump_analysis(modules[i]); } ddp_dump_reg(DISP_MODULE_CONFIG); ddp_dump_reg(DISP_MODULE_MUTEX); for( i=0; i< module_num;i++) { ddp_dump_reg(modules[i]); } } else if(enable==7) { if(dbg_log_level<3) dbg_log_level++; else dbg_log_level=0; printk("DDP: dbg_log_level=%d\n", dbg_log_level); sprintf(buf, "dbg_log_level: %d\n", dbg_log_level); } #if 0 else if(enable==8) { DDPDUMP("clock_mm setting:%u \n", DISP_REG_GET(DISP_REG_CONFIG_C11)); if(DISP_REG_GET(DISP_REG_CONFIG_C11)&0xff000000!=0xff000000) { DDPDUMP("error, MM clock bit 24~bit31 should be 1, but real value=0x%x", DISP_REG_GET(DISP_REG_CONFIG_C11)); } } #endif else if(enable==9) { gOVLBackground = 0xFF0000FF; printk("DDP: gOVLBackground=%d\n", gOVLBackground); sprintf(buf, "gOVLBackground: %d\n", gOVLBackground); } else if(enable==10) { gOVLBackground = 0xFF000000; printk("DDP: gOVLBackground=%d\n", gOVLBackground); sprintf(buf, "gOVLBackground: %d\n", gOVLBackground); } else if(enable==11) { unsigned int i=0; for(i=0;i<DISP_REG_NUM;i++) { DDPDUMP("i=%d, module=%s, reg_va=0x%lx\n", i, ddp_get_reg_module_name(i), dispsys_reg[i]); } } else if(enable==12) { if(gUltraEnable==0) gUltraEnable = 1; else gUltraEnable = 0; printk("DDP: gUltraEnable=%d\n", gUltraEnable); sprintf(buf, "gUltraEnable: %d\n", gUltraEnable); } } else if (0 == strncmp(opt, "mmp", 3)) { init_ddp_mmp_events(); } else { dbg_buf[0]='\0'; goto Error; } return; Error: DDPERR("parse command error!\n%s\n\n%s", opt, STR_HELP); }
static void process_dbg_opt(const char *opt) { char *buf = dbg_buf + strlen(dbg_buf); if (0 == strncmp(opt, "regr:", 5)) { unsigned long addr; int ret; ret = sscanf(opt, "regr: 0x%lx\n", &addr); if (ret != 1) { pr_err("error to parse cmd %s\n", opt); return; } if (is_reg_addr_valid(1, addr) == 1) { unsigned int regVal = DISP_REG_GET(addr); DDPMSG(" regr : 0x%lx = 0x%08x\n ", addr, regVal); sprintf(buf, " regr : 0x%lx = 0x%08x\n ", addr, regVal); } else { sprintf(buf, " regr, invalid address 0x%lx\n ", addr); goto Error; } } else if (0 == strncmp(opt, "regw:", 5)) { unsigned long addr; unsigned int val; unsigned int ret; ret = sscanf(opt, "regw: 0x%lx,0x%08x\n", &addr, &val); if (ret != 2) { pr_err("error to parse cmd %s\n", opt); return; } if (is_reg_addr_valid(1, addr) == 1) { unsigned int regVal; DISP_CPU_REG_SET(addr, val); regVal = DISP_REG_GET(addr); DDPMSG(" regw : 0x%lx, 0x%08x = 0x%08x\n ", addr, val, regVal); sprintf(buf, " regw : 0x%lx, 0x%08x = 0x%08x\n ", addr, val, regVal); } else { sprintf(buf, " regw, invalid address 0x%lx\n ", addr); goto Error; } } else if (0 == strncmp(opt, "rdma_ultra:", 11)) { int ret; ret = sscanf(opt, "rdma_ultra: 0x%x\n", &gRDMAUltraSetting); if (ret != 1) { pr_err("error to parse cmd %s\n", opt); return; } DISP_CPU_REG_SET(DISP_REG_RDMA_MEM_GMC_SETTING_0, gRDMAUltraSetting); sprintf(buf, " rdma_ultra, gRDMAUltraSetting = 0x%x, reg = 0x%x\n ", gRDMAUltraSetting, DISP_REG_GET(DISP_REG_RDMA_MEM_GMC_SETTING_0)); } else if (0 == strncmp(opt, "rdma_fifo:", 10)) { int ret; ret = sscanf(opt, "rdma_fifo: 0x%x\n", &gRDMAFIFOLen); if (ret != 1) { pr_err("error to parse cmd %s\n", opt); return; } DISP_CPU_REG_SET_FIELD(FIFO_CON_FLD_OUTPUT_VALID_FIFO_THRESHOLD, DISP_REG_RDMA_FIFO_CON, gRDMAFIFOLen); sprintf(buf, " rdma_fifo, gRDMAFIFOLen = 0x%x, reg = 0x%x\n ", gRDMAFIFOLen, DISP_REG_GET(DISP_REG_RDMA_FIFO_CON)); } else if (0 == strncmp(opt, "g_regr:", 7)) { unsigned int reg_va_before; unsigned long reg_va; unsigned long reg_pa; int ret; ret = sscanf(opt, "g_regr: 0x%lx\n", ®_pa); if (ret != 1) { pr_err("error to parse cmd %s\n", opt); return; } if (reg_pa < 0x10000000 || reg_pa > 0x18000000) { sprintf(buf, " g_regr, invalid pa = 0x%lx\n ", reg_pa); } else { reg_va = (unsigned long)ioremap_nocache(reg_pa, sizeof(unsigned long)); reg_va_before = DISP_REG_GET(reg_va); pr_debug(" g_regr, pa = 0x%lx, va = 0x%lx, reg_val = 0x%x\n ", reg_pa, reg_va, reg_va_before); sprintf(buf, " g_regr, pa = 0x%lx, va = 0x%lx, reg_val = 0x%x\n ", reg_pa, reg_va, reg_va_before); iounmap((void *)reg_va); } } else if (0 == strncmp(opt, "g_regw:", 7)) { unsigned int reg_va_before; unsigned int reg_va_after; unsigned int val; unsigned long reg_va; unsigned long reg_pa; int ret; ret = sscanf(opt, "g_regw: 0x%lx\n", ®_pa); if (ret != 1) { pr_err("error to parse cmd %s\n", opt); return; } if (reg_pa < 0x10000000 || reg_pa > 0x18000000) { sprintf(buf, " g_regw, invalid pa = 0x%lx\n ", reg_pa); } else { ret = sscanf(opt, "g_regw,val: 0x%x\n", &val); if (ret != 1) { pr_err("error to parse cmd %s\n", opt); return; } reg_va = (unsigned long)ioremap_nocache(reg_pa, sizeof(unsigned long)); reg_va_before = DISP_REG_GET(reg_va); DISP_CPU_REG_SET(reg_va, val); reg_va_after = DISP_REG_GET(reg_va); pr_debug ("g_regw, pa = 0x%lx, va = 0x%lx, value = 0x%x, reg_val_before = 0x%x, reg_val_after = 0x%x\n ", reg_pa, reg_va, val, reg_va_before, reg_va_after); sprintf(buf, " g_regw, pa = 0x%lx, va = 0x%lx, value = 0x%x, reg_val_before = 0x%x, reg_val_after = 0x%x\n ", reg_pa, reg_va, val, reg_va_before, reg_va_after); iounmap((void *)reg_va); } } else if (0 == strncmp(opt, "dbg_log:", 8)) { unsigned int enable; int ret; ret = sscanf(opt, "dbg_log: %d\n", &enable); if (ret != 1) { pr_err("error to parse cmd %s\n", opt); return; } if (enable) dbg_log_level = 1; else dbg_log_level = 0; sprintf(buf, " dbg_log : %d\n ", dbg_log_level); } else if (0 == strncmp(opt, "irq_log:", 8)) { unsigned int enable; int ret; ret = sscanf(opt, "irq_log: %d\n", &enable); if (ret != 1) { pr_err("error to parse cmd %s\n", opt); return; } if (enable) irq_log_level = 1; else irq_log_level = 0; sprintf(buf, " irq_log : %d\n ", irq_log_level); } else if (0 == strncmp(opt, "met_on:", 7)) { int met_on; int rdma0_mode; int rdma1_mode; int ret; ret = sscanf(opt, "met_on : %d,%d,%d\n", &met_on, &rdma0_mode, &rdma1_mode); if (ret != 3) { pr_err("error to parse cmd %s\n", opt); return; } ddp_init_met_tag(met_on, rdma0_mode, rdma1_mode); DDPMSG(" process_dbg_opt, met_on = %d, rdma0_mode %d, rdma1 %d\n ", met_on, rdma0_mode, rdma1_mode); sprintf(buf, " met_on : %d, rdma0_mode : %d, rdma1_mode : %d\n ", met_on, rdma0_mode, rdma1_mode); } else if (0 == strncmp(opt, "backlight:", 10)) { unsigned int level; int ret; ret = sscanf(opt, "backlight: %d\n", &level); if (ret != 1) { pr_err("error to parse cmd %s\n", opt); return; } if (level) { disp_bls_set_backlight(level); sprintf(buf, " backlight : %d\n ", level); } else { goto Error; } } else if (0 == strncmp(opt, "pwm0:", 5) || 0 == strncmp(opt, "pwm1:", 5)) { unsigned int level; int ret; ret = sscanf(opt, "pwm: %d\n", &level); if (ret != 1) { pr_err("error to parse cmd %s\n", opt); return; } if (level) { disp_pwm_id_t pwm_id = DISP_PWM0; if (opt[3] == '1') pwm_id = DISP_PWM1; disp_pwm_set_backlight(pwm_id, level); sprintf(buf, " PWM 0x%x : %d\n ", pwm_id, level); } else { goto Error; } } else if (0 == strncmp(opt, "aal_dbg:", 8)) { int ret; ret = sscanf(opt, "aal_dbg: %d\n", &aal_dbg_en); if (ret != 1) { pr_err("error to parse cmd %s\n", opt); return; } sprintf(buf, " aal_dbg_en = 0x%x\n ", aal_dbg_en); } else if (0 == strncmp(opt, "dump_reg:", 9)) { unsigned int module; int ret; ret = sscanf(opt, "dump_reg: %d\n", &module); if (ret != 1) { pr_err("error to parse cmd %s\n", opt); return; } DDPMSG(" process_dbg_opt, module = %d\n ", module); if (module < DISP_MODULE_NUM) { ddp_dump_reg(module); sprintf(buf, " dump_reg : %d\n ", module); } else { DDPMSG(" process_dbg_opt2, module = %d\n ", module); goto Error; } } else if (0 == strncmp(opt, "dump_path:", 10)) { unsigned int mutex_idx; int ret; ret = sscanf(opt, "dump_path: %d\n", &mutex_idx); if (ret != 1) { pr_err("error to parse cmd %s\n", opt); return; } DDPMSG(" process_dbg_opt, path mutex = %d\n ", mutex_idx); dpmgr_debug_path_status(mutex_idx); sprintf(buf, " dump_path : %d\n ", mutex_idx); } else if (0 == strncmp(opt, "debug:", 6)) { unsigned int enable; int ret; ret = sscanf(opt, "debug: %d\n", &enable); if (ret != 1) { pr_err("error to parse cmd %s\n", opt); return; } disp_debug_api(enable, buf); } else if (0 == strncmp(opt, "mmp", 3)) { init_ddp_mmp_events(); } else { dbg_buf[0] = '\0'; goto Error; } return; Error: DDPERR(" parse command error !\n%s\n\n%s", opt, STR_HELP); }