blob: a6af33346a3f526ddac4c8acc50541d1179697b0 [file] [log] [blame]
lijuang39831732016-01-08 17:49:02 +08001/* Copyright (c) 2015-2016, The Linux Foundation. All rights reserved.
Aparna Mallavarapu921b9b72015-05-08 09:43:29 +05302
3 * Redistribution and use in source and binary forms, with or without
4 * modification, are permitted provided that the following conditions are
5 * met:
6 * * Redistributions of source code must retain the above copyright
7 * notice, this list of conditions and the following disclaimer.
8 * * Redistributions in binary form must reproduce the above
9 * copyright notice, this list of conditions and the following
10 * disclaimer in the documentation and/or other materials provided
11 * with the distribution.
12 * * Neither the name of The Linux Foundation. nor the names of its
13 * contributors may be used to endorse or promote products derived
14 * from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
17 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
18 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
20 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
23 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
24 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
25 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
26 * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
28
29#include <stdlib.h>
30#include <debug.h>
31#include <platform.h>
32#include <platform/iomap.h>
33#include <reg.h>
34#include <wdog.h>
35#include <target.h>
Aparna Mallavarapuda91ea92015-07-10 12:03:46 +053036#include <scm.h>
37#include <dload_util.h>
lijuang39831732016-01-08 17:49:02 +080038#include <kernel/thread.h>
39
40#define WDOG_FEED_FREQUENCY 1000
41
42static int wdog_feed_handler(void *param) {
43 while(1) {
44 writel(1, APPS_WDOG_RESET_REG);
45 thread_sleep(WDOG_FEED_FREQUENCY);
46 }
47 return 0;
48}
49
50static void wdog_feed_func_thread(void)
51{
52 static bool is_thread_start;
53 thread_t *thr;
54
55 if (!is_thread_start) {
56 thr = thread_create("wdogfeed", wdog_feed_handler,
57 0, DEFAULT_PRIORITY, DEFAULT_STACK_SIZE);
58 if (!thr) {
59 dprintf(CRITICAL, "ERROR: create feed dog thread failed!!\n");
60 return;
61 }
62 thread_resume(thr);
63 is_thread_start = true;
64 }
65}
Aparna Mallavarapu921b9b72015-05-08 09:43:29 +053066
67void msm_wdog_init()
68{
Aparna Mallavarapu921b9b72015-05-08 09:43:29 +053069 /* Set Bite and Bark times 10s */
70 writel(0x77FD3, APPS_WDOG_BARK_VAL_REG);
71 writel(0x77FD3, APPS_WDOG_BITE_VAL_REG);
72
73 /* Reset WDOG */
74 writel(1, APPS_WDOG_RESET_REG);
75
76 /* Enable WDOG */
77 writel((readl(APPS_WDOG_CTL_REG) | 0x1), APPS_WDOG_CTL_REG);
78
lijuang39831732016-01-08 17:49:02 +080079 wdog_feed_func_thread();
Aparna Mallavarapuda91ea92015-07-10 12:03:46 +053080
lijuang39831732016-01-08 17:49:02 +080081 set_download_mode(NORMAL_DLOAD);
Aparna Mallavarapu921b9b72015-05-08 09:43:29 +053082}