[][add reset option to disable reset for debug]
[Description]
Add reset option for quickly debug purpose
-- echo 0 to disable reset when err occur
-- echo 2 to recovery reset after echo 0
-- echo 1 force to reset
[Release-log]
Change-Id: I98b8eea32bf3de9a4f1e705a6a87f2f798560bc6
Reviewed-on: https://gerrit.mediatek.inc/c/openwrt/feeds/mtk_openwrt_feeds/+/6263896
diff --git a/target/linux/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_eth_dbg.c b/target/linux/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_eth_dbg.c
index 38d2b53..0d5ca16 100755
--- a/target/linux/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_eth_dbg.c
+++ b/target/linux/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_eth_dbg.c
@@ -319,10 +319,42 @@
size_t len, loff_t *off)
{
struct mtk_eth *eth = file->private_data;
+ char buf[8] = "";
+ int count = len;
+ unsigned long dbg_level = 0;
+
+ len = min(count, sizeof(buf) - 1);
+ if (copy_from_user(buf, ptr, len))
+ return -EFAULT;
+
+ buf[len] = '\0';
+ if (kstrtoul(buf, 0, &dbg_level))
+ return -EINVAL;
- atomic_inc(&force);
- schedule_work(ð->pending_work);
- return len;
+ switch(dbg_level)
+ {
+ case 0:
+ if (atomic_read(&reset_lock) == 0)
+ atomic_inc(&reset_lock);
+ break;
+ case 1:
+ if (atomic_read(&force) == 0)
+ atomic_inc(&force);
+ schedule_work(ð->pending_work);
+ break;
+ case 2:
+ if (atomic_read(&reset_lock) == 1)
+ atomic_dec(&reset_lock);
+ break;
+ default:
+ pr_info("Usage: echo [level] > /sys/kernel/debug/mtketh/reset\n");
+ pr_info("Commands: [level] \n");
+ pr_info(" 0 disable reset \n");
+ pr_info(" 1 force reset \n");
+ pr_info(" 2 enable reset\n");
+ break;
+ }
+ return count;
}
static const struct file_operations fops_reg_w = {