blob: 0df6fbc04d6d6729dd3d12f188ed3d4876decf09 [file] [log] [blame]
Xiaohu.Huanga2c5a042022-03-12 22:41:09 +08001/*
2 * Copyright (c) 2021-2022 Amlogic, Inc. All rights reserved.
3 *
4 * SPDX-License-Identifier: MIT
5 */
6
Xiaohu.Huanga2c5a042022-03-12 22:41:09 +08007#ifndef __WAKEUP_H__
8#define __WAKEUP_H__
9
10/*use timerB to wakeup AP FSM*/
xiaohu.huang38262102022-05-06 22:21:48 +080011static inline void wakeup_ap(void)
Xiaohu.Huanga2c5a042022-03-12 22:41:09 +080012{
13 uint32_t value;
14 //uint32_t time_out = 20;
15
16 /*set alarm timer*/
xiaohu.huang38262102022-05-06 22:21:48 +080017 REG32(FSM_TRIGER_SRC) = 1000; /*1ms*/
Xiaohu.Huanga2c5a042022-03-12 22:41:09 +080018
19 value = REG32(FSM_TRIGER_CTRL);
20 value &= ~((1 << 7) | (0x3) | (1 << 6));
21 value |= ((1 << 7) | (0 << 6) | (0x3));
22 REG32(FSM_TRIGER_CTRL) = value;
23 vTaskDelay(1);
24}
25
xiaohu.huang38262102022-05-06 22:21:48 +080026static inline void clear_wakeup_trigger(void)
Xiaohu.Huanga2c5a042022-03-12 22:41:09 +080027{
28 REG32(FSM_TRIGER_SRC) = 0;
29 REG32(FSM_TRIGER_CTRL) = 0;
30}
31
xiaohu.huang38262102022-05-06 22:21:48 +080032static inline void watchdog_reset_system(void)
Xiaohu.Huanga2c5a042022-03-12 22:41:09 +080033{
xiaohu.huang38262102022-05-06 22:21:48 +080034 int i = 0;
Xiaohu.Huanga2c5a042022-03-12 22:41:09 +080035
xiaohu.huang38262102022-05-06 22:21:48 +080036 printf("enter %s\n", __func__);
37 while (1) {
38 REG32(RESETCTRL_WATCHDOG_CTRL0) = 1 << 27 | 0 << 18;
39 /* Decive GCC for waiting some cycles */
40 for (i = 0; i < 100; i++)
41 REG32(RESETCTRL_WATCHDOG_CTRL0);
42 }
Xiaohu.Huanga2c5a042022-03-12 22:41:09 +080043}
44#endif