From 30765fcae378671743988f0dc002d0253bb2ad18 Mon Sep 17 00:00:00 2001 From: Xiaoyu Ye Date: Wed, 15 Aug 2018 18:13:19 -0700 Subject: [PATCH] ASoC: wcd934x-dsp-cntl: add debugfs node to perform debug dumps Currently, for any WDSP errors, the driver collects the debug dumps/information based on trigger from userspace. This is protected under CONFIG_DEBUG_FS and should not be run unless stress tests are executed and this functionality is explicitly enabled since performing debug dumps could possible leave the WDSP in bad state. Add debug node to control dumping debug information and not rely only on CONFIG_DEBUG_FS To enable debug dumps: echo 1 > /sys/kernel/debug/wdsp0/debug_dump_enable To disable debug dumps: echo 0 > /sys/kernel/debug/wdsp0/debug_dump_enable Change-Id: I67d8781839d9caee16e6bf6a5befd9010ccaafc0 Signed-off-by: Bhalchandra Gajare Signed-off-by: Xiaoyu Ye --- asoc/codecs/wcd934x/wcd934x-dsp-cntl.c | 20 +++++++++++++++----- asoc/codecs/wcd934x/wcd934x-dsp-cntl.h | 1 + 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/asoc/codecs/wcd934x/wcd934x-dsp-cntl.c b/asoc/codecs/wcd934x/wcd934x-dsp-cntl.c index de4f3997d476..f18cc81a91f8 100644 --- a/asoc/codecs/wcd934x/wcd934x-dsp-cntl.c +++ b/asoc/codecs/wcd934x/wcd934x-dsp-cntl.c @@ -757,7 +757,8 @@ static int wcd_cntl_do_boot(struct wcd_dsp_cntl *cntl) if (!ret) { dev_err(codec->dev, "%s: WDSP boot timed out\n", __func__); - wcd_cntl_collect_debug_dumps(cntl, true); + if (cntl->dbg_dmp_enable) + wcd_cntl_collect_debug_dumps(cntl, true); ret = -ETIMEDOUT; goto err_boot; } else { @@ -976,6 +977,8 @@ static void wcd_cntl_debugfs_init(char *dir, struct wcd_dsp_cntl *cntl) cntl->entry, &cntl->debug_mode); debugfs_create_bool("ramdump_enable", 0644, cntl->entry, &cntl->ramdump_enable); + debugfs_create_bool("debug_dump_enable", 0644, + cntl->entry, &cntl->dbg_dmp_enable); done: return; } @@ -1038,16 +1041,23 @@ static ssize_t wcd_miscdev_write(struct file *filep, const char __user *ubuf, } else if (val[0] == '0') { if (cntl->boot_reqs == 0) { dev_err(cntl->codec->dev, - "%s: WDSP already disabled\n", __func__); + "%s: WDSP already disabled\n", + __func__); ret = -EINVAL; goto done; } cntl->boot_reqs--; vote = false; } else if (!strcmp(val, "DEBUG_DUMP")) { - dev_dbg(cntl->codec->dev, - "%s: Collect dumps for debug use\n", __func__); - wcd_cntl_collect_debug_dumps(cntl, false); + if (cntl->dbg_dmp_enable) { + dev_dbg(cntl->codec->dev, + "%s: Collect dumps for debug use\n", __func__); + wcd_cntl_collect_debug_dumps(cntl, false); + } + /* + * simply ignore the request from userspace + * if dbg_dump_enable is not set from debugfs + */ goto done; } else { dev_err(cntl->codec->dev, "%s: Invalid value %s\n", diff --git a/asoc/codecs/wcd934x/wcd934x-dsp-cntl.h b/asoc/codecs/wcd934x/wcd934x-dsp-cntl.h index 0127a0df2dba..5ce4fd85da13 100644 --- a/asoc/codecs/wcd934x/wcd934x-dsp-cntl.h +++ b/asoc/codecs/wcd934x/wcd934x-dsp-cntl.h @@ -91,6 +91,7 @@ struct wcd_dsp_cntl { struct dentry *entry; u32 debug_mode; bool ramdump_enable; + bool dbg_dmp_enable; /* WDSP manager drivers data */ struct device *m_dev;