hc
2024-05-14 bedbef8ad3e75a304af6361af235302bcc61d06b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
/*
 * (C) Copyright 2016 Google, Inc
 *
 * SPDX-License-Identifier:     GPL-2.0+
 */
 
#ifndef _ASM_ARCH_WDT_H
#define _ASM_ARCH_WDT_H
 
#define WDT_BASE            0x1e785000
 
/*
 * Special value that needs to be written to counter_restart register to
 * (re)start the timer
 */
#define WDT_COUNTER_RESTART_VAL        0x4755
 
/* Control register */
#define WDT_CTRL_RESET_MODE_SHIFT    5
#define WDT_CTRL_RESET_MODE_MASK    3
 
#define WDT_CTRL_EN            (1 << 0)
#define WDT_CTRL_RESET            (1 << 1)
#define WDT_CTRL_CLK1MHZ        (1 << 4)
#define WDT_CTRL_2ND_BOOT        (1 << 7)
 
/* Values for Reset Mode */
#define WDT_CTRL_RESET_SOC        0
#define WDT_CTRL_RESET_CHIP        1
#define WDT_CTRL_RESET_CPU        2
#define WDT_CTRL_RESET_MASK        3
 
/* Reset Mask register */
#define WDT_RESET_ARM            (1 << 0)
#define WDT_RESET_COPROC        (1 << 1)
#define WDT_RESET_SDRAM            (1 << 2)
#define WDT_RESET_AHB            (1 << 3)
#define WDT_RESET_I2C            (1 << 4)
#define WDT_RESET_MAC1            (1 << 5)
#define WDT_RESET_MAC2            (1 << 6)
#define WDT_RESET_GCRT            (1 << 7)
#define WDT_RESET_USB20            (1 << 8)
#define WDT_RESET_USB11_HOST        (1 << 9)
#define WDT_RESET_USB11_EHCI2        (1 << 10)
#define WDT_RESET_VIDEO            (1 << 11)
#define WDT_RESET_HAC            (1 << 12)
#define WDT_RESET_LPC            (1 << 13)
#define WDT_RESET_SDSDIO        (1 << 14)
#define WDT_RESET_MIC            (1 << 15)
#define WDT_RESET_CRT2C            (1 << 16)
#define WDT_RESET_PWM            (1 << 17)
#define WDT_RESET_PECI            (1 << 18)
#define WDT_RESET_JTAG            (1 << 19)
#define WDT_RESET_ADC            (1 << 20)
#define WDT_RESET_GPIO            (1 << 21)
#define WDT_RESET_MCTP            (1 << 22)
#define WDT_RESET_XDMA            (1 << 23)
#define WDT_RESET_SPI            (1 << 24)
#define WDT_RESET_MISC            (1 << 25)
 
#ifndef __ASSEMBLY__
struct ast_wdt {
   u32 counter_status;
   u32 counter_reload_val;
   u32 counter_restart;
   u32 ctrl;
   u32 timeout_status;
   u32 clr_timeout_status;
   u32 reset_width;
   /* On pre-ast2500 SoCs this register is reserved. */
   u32 reset_mask;
};
 
/**
 * Given flags parameter passed to wdt_reset or wdt_start uclass functions,
 * gets Reset Mode value from it.
 *
 * @flags: flags parameter passed into wdt_reset or wdt_start
 * @return Reset Mode value
 */
u32 ast_reset_mode_from_flags(ulong flags);
 
/**
 * Given flags parameter passed to wdt_reset or wdt_start uclass functions,
 * gets Reset Mask value from it. Reset Mask is only supported on ast2500
 *
 * @flags: flags parameter passed into wdt_reset or wdt_start
 * @return Reset Mask value
 */
u32 ast_reset_mask_from_flags(ulong flags);
 
/**
 * Given Reset Mask and Reset Mode values, converts them to flags,
 * suitable for passing into wdt_start or wdt_reset uclass functions.
 *
 * On ast2500 Reset Mask is 25 bits wide and Reset Mode is 2 bits wide, so they
 * can both be packed into single 32 bits wide value.
 *
 * @reset_mode: Reset Mode
 * @reset_mask: Reset Mask
 */
ulong ast_flags_from_reset_mode_mask(u32 reset_mode, u32 reset_mask);
#endif  /* __ASSEMBLY__ */
 
#endif /* _ASM_ARCH_WDT_H */