static ssize_t hifi_dsp_debug_level_store(struct file *file, const char __user *buf, size_t size, loff_t *data) { ssize_t ret = 0; char level_str[MAX_LEVEL_STR_LEN] = {0}; loff_t pos = 0; if (NULL == buf) { loge("Input param buf is invalid\n"); return -EINVAL; } ret = simple_write_to_buffer(level_str, MAX_LEVEL_STR_LEN - 1 , &pos, buf, size); if (ret != size) { loge("Input param buf read error, return value: %zd\n", ret); return -EINVAL; } if (!strchr("kdiwe", level_str[0])) { loge("Input param buf is error(valid: d,i,w,e): %s.\n", level_str); return -EINVAL; } if (level_str[1] != '\n') { loge("Input param buf is error, last char is not \\n .\n"); return -EINVAL; } if (strchr("k", level_str[0])) { hifi_kill_dsp(); return size; } g_om_data.dsp_debug_level = hifi_get_debug_level_num(level_str[0]); hifi_set_dsp_debug_level(g_om_data.dsp_debug_level); return size; }
static ssize_t hifi_dsp_debug_level_store(struct file *file, const char *buf, size_t size, loff_t *data) { BUG_ON(NULL == buf); if ((!*buf) || (strchr("k", *buf))) { loge("go to kill hifi.\n"); hifi_kill_dsp(); return -EINVAL; } if ((!*buf) || (!strchr("diwe", *buf))) { loge("Input param buf is error(valid: d,i,w,e): %s.\n", buf); return -EINVAL; } if (*(buf + 1) != '\n') { loge("Input param buf is error, last char is not \\n .\n"); return -EINVAL; } g_om_data.dsp_debug_level = hifi_get_debug_level_num(*buf); hifi_set_dsp_debug_level(g_om_data.dsp_debug_level); return size; }
void hifi_om_init(struct platform_device *dev, unsigned char* hifi_priv_base_virt, unsigned char* hifi_priv_base_phy) { BUG_ON(NULL == dev); #ifdef PLATFORM_HI3XXX BUG_ON(NULL == hifi_priv_base_virt); BUG_ON(NULL == hifi_priv_base_phy); #endif memset(&g_om_data, 0, sizeof(struct hifi_om_s)); g_om_data.debug_level = 2; /*info level*/ #ifdef PLATFORM_HI3XXX g_om_data.dsp_time_stamp = (unsigned int*)ioremap_wc(SYS_TIME_STAMP_REG, 0x4); if (NULL == g_om_data.dsp_time_stamp) { printk("time stamp reg ioremap_wc Error.\n");//can't use logx return; } #endif g_om_data.dsp_loaded = hifi_check_img_loaded(); IN_FUNCTION; #ifdef PLATFORM_HI3XXX g_om_data.dsp_debug_level = 2; /*info level*/ g_om_data.first_dump_log = true; g_om_data.is_watchdog_coming = false; g_om_data.dsp_panic_mark = (unsigned int*)(hifi_priv_base_virt + (DRV_DSP_PANIC_MARK - HIFI_BASE_ADDR)); g_om_data.dsp_bin_addr = (char*)(hifi_priv_base_virt + (HIFI_RUN_LOCATION - HIFI_BASE_ADDR)); g_om_data.dsp_exception_no = (unsigned int*)(hifi_priv_base_virt + (DRV_DSP_EXCEPTION_NO - HIFI_BASE_ADDR)); g_om_data.dsp_log_cur_addr = (unsigned int*)(hifi_priv_base_virt + (DRV_DSP_UART_TO_MEM_CUR_ADDR - HIFI_BASE_ADDR)); g_om_data.dsp_log_addr = NULL; g_om_data.dsp_debug_level_addr = (unsigned int*)(hifi_priv_base_virt + (DRV_DSP_UART_LOG_LEVEL - HIFI_BASE_ADDR)); g_om_data.dsp_debug_kill_addr = (unsigned int*)(hifi_priv_base_virt + (DRV_DSP_KILLME_ADDR - HIFI_BASE_ADDR)); *(g_om_data.dsp_exception_no) = ~0; g_om_data.pre_exception_no = ~0; s_dsp_dump_info[NORMAL_BIN].data_addr = g_om_data.dsp_bin_addr; s_dsp_dump_info[PANIC_BIN].data_addr = g_om_data.dsp_bin_addr; hifi_set_dsp_debug_level(g_om_data.dsp_debug_level); sema_init(&g_om_data.dsp_dump_sema, 1); g_om_data.kdumpdsp_task = kthread_create(hifi_dump_dsp_thread, 0, "dspdumplog"); if (IS_ERR(g_om_data.kdumpdsp_task)) { loge("creat hifi dump log thread fail.\n"); } else { wake_up_process(g_om_data.kdumpdsp_task); } #endif g_om_data.dsp_hifidebug_show_tag = false; hifi_create_procfs(); #ifdef PLATFORM_HI6XXX g_om_data.hifi_mntn_wq = create_singlethread_workqueue("hifi_misc_mntn_workqueue"); INIT_WORK(&(g_om_data.hifi_mntn_work.work_stru), hifi_handle_mntn_work); #endif OUT_FUNCTION; return; }