示例#1
0
static int start_kicker_thread_with_default_setting(void)
{
	int ret = 0;

#if defined(LGE_USE_WDOG_SPINLOCK_IRQ)
	spin_lock_irqsave(&lock, lock_flag);
#else
	spin_lock(&lock);
#endif

	g_kinterval = 20;  // default interval: 20s

	g_need_config = 0; // Note, we DO NOT want to call configure function

	wdt_start = 1;     // Start once only
#if defined(LGE_USE_WDOG_SPINLOCK_IRQ)
	spin_unlock_irqrestore(&lock, lock_flag);
#else
  spin_unlock(&lock);	
#endif
	start_kicker();


	return ret;
}
static int __init test_init(void)
{
	//enable_clock(12, "Vfifo");
	
	register_cpu_notifier(&cpu_nfb);
	start_kicker();
	return 0;
}
示例#3
0
static int start_kicker_thread_with_default_setting(void)
{
	int ret = 0;

	spin_lock(&lock);

	g_kinterval = 20;  // default interval: 20s

	g_need_config = 0; // Note, we DO NOT want to call configure function

	wdt_start = 1;     // Start once only
    spin_unlock(&lock);	
	start_kicker();

    printk("[WDK] fwq start_kicker_thread_with_default_setting done\n" );
	return ret;
}
示例#4
0
static int wk_proc_cmd_write(struct file *file, const char *buf, unsigned long count, void *data)
{
	int ret;
	//static int wdt_start = 0; // Adjust this variable to file view scope 
	int timeout;
	int mode;
	int kinterval;

	if (count == 0)
		return -1;

	if(count > 255) 
		count = 255;

	ret = copy_from_user(cmd_buf, buf, count);
	if (ret < 0)
		return -1;
	
	cmd_buf[count] = '\0';

	dbgmsg("Write %s\n", cmd_buf);

	sscanf(cmd_buf, "%d %d %d %d", &mode, &kinterval, &timeout, &debug_sleep);

	printk("[WDK] mode=%d interval=%d timeout=%d\n", mode, kinterval, timeout);

	if (timeout < kinterval) {
		errmsg("The interval(%d) value should be smaller than timeout value(%d)\n", kinterval, timeout);
		return -1;
	}

	if ((timeout <  MIN_KICK_INTERVAL) || (timeout > MAX_KICK_INTERVAL)) {
		errmsg("The timeout(%d) is invalid (%d - %d)\n", kinterval, MIN_KICK_INTERVAL, MAX_KICK_INTERVAL);
		return -1;
	}

	if ((kinterval <  MIN_KICK_INTERVAL) || (kinterval > MAX_KICK_INTERVAL)) {
		errmsg("The interval(%d) is invalid (%d - %d)\n",kinterval,  MIN_KICK_INTERVAL, MAX_KICK_INTERVAL);
		return -1;
	}

	if (!((mode == WK_WDT_NORMAL_MODE) || 
	      (mode == WK_WDT_EXP_MODE))) {
		errmsg("Tha watchdog kicker wdt mode is not correct\n");
		errmsg("WK_WDT_NORMAL_MODE = %d\n", WK_WDT_NORMAL_MODE);
		errmsg("WK_WDT_EXP_MODE = %d\n", WK_WDT_EXP_MODE);
		return -1;
	}
		
#if defined(LGE_USE_WDOG_SPINLOCK_IRQ)
  spin_lock_irqsave(&lock, lock_flag);
#else
  spin_lock(&lock);
#endif

	g_kinterval = kinterval;
//                                                                            
#if 1 //CONFIG_MTK_AEE_FEATURE auto enable or disable WDT isr or hw mode
//                                                                            
	g_wk_wdt_mode = WK_WDT_EXP_MODE;
	msg("Enable wdt with interrupt mode only %d\n", g_wk_wdt_mode);
#else
	g_wk_wdt_mode = mode;
#endif
	g_timeout = timeout;
  g_need_config = 1;
#if defined(LGE_USE_WDOG_SPINLOCK_IRQ)
  spin_unlock_irqrestore(&lock, lock_flag);
#else
  spin_unlock(&lock);
#endif
	/* Start once only */
	if (wdt_start == 0) {
		start_kicker();
	}
#if defined(LGE_USE_WDOG_SPINLOCK_IRQ)
	spin_lock_irqsave(&lock, lock_flag);
#else	
	spin_lock(&lock);
#endif
	wdt_start = 1;
#if defined(LGE_USE_WDOG_SPINLOCK_IRQ)
	spin_unlock_irqrestore(&lock, lock_flag);
#else
  spin_unlock(&lock);
#endif
	return count;
}