xref: /aosp_15_r20/external/coreboot/src/soc/mediatek/common/include/soc/rtc_common.h (revision b9411a12aaaa7e1e6a6fb7c5e057f44ee179a49c)
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 #ifndef SOC_MEDIATEK_RTC_COMMON_H
4 #define SOC_MEDIATEK_RTC_COMMON_H
5 
6 #include <commonlib/bsd/bcd.h>
7 #include <console/console.h>
8 #include <rtc.h>
9 #include <stdbool.h>
10 
11 #define RTCTAG			"[RTC]"
12 #define rtc_info(fmt, arg ...)	printk(BIOS_INFO, RTCTAG "%s,%d: " fmt, \
13 				__func__, __LINE__, ## arg)
14 
15 /*
16  * Default values for RTC initialization
17  * Year (YEA)        : 1970 ~ 2037
18  * Month (MTH)       : 1 ~ 12
19  * Day of Month (DOM): 1 ~ 31
20  */
21 
22 enum {
23 	RTC_DEFAULT_YEA = 2010,
24 	RTC_DEFAULT_MTH = 1,
25 	RTC_DEFAULT_DOM = 1,
26 	RTC_DEFAULT_DOW = 5
27 };
28 
29 enum {
30 	RTC_2SEC_REBOOT_ENABLE  = 1,
31 	RTC_2SEC_MODE   = 2
32 };
33 
34 enum {
35 	RTC_OSC32CON_UNLOCK1 = 0x1A57,
36 	RTC_OSC32CON_UNLOCK2 = 0x2B68
37 };
38 
39 enum {
40 	RTC_PROT_UNLOCK1 = 0x586A,
41 	RTC_PROT_UNLOCK2 = 0x9136
42 };
43 
44 enum {
45 	RTC_BBPU_KEY	= 0x43 << 8
46 };
47 
48 enum {
49 	RTC_IRQ_STA_AL	= 1U << 0,
50 	RTC_IRQ_STA_TC	= 1U << 1,
51 	RTC_IRQ_STA_LP	= 1U << 3
52 };
53 
54 enum {
55 	RTC_IRQ_EN_AL		= 1U << 0,
56 	RTC_IRQ_EN_TC		= 1U << 1,
57 	RTC_IRQ_EN_ONESHOT	= 1U << 2,
58 	RTC_IRQ_EN_LP		= 1U << 3,
59 	RTC_IRQ_EN_ONESHOT_AL	= RTC_IRQ_EN_ONESHOT | RTC_IRQ_EN_AL
60 };
61 
62 enum {
63 	RTC_POWERKEY1_KEY	= 0xA357,
64 	RTC_POWERKEY2_KEY	= 0x67D2
65 };
66 
67 enum {
68 	RTC_SPAR0_32K_LESS	= 1U << 6
69 };
70 
71 enum {
72 	RTC_MIN_YEAR	= 1968,
73 	RTC_BASE_YEAR	= 1900,
74 	RTC_MIN_YEAR_OFFSET = RTC_MIN_YEAR - RTC_BASE_YEAR,
75 
76 	RTC_NUM_YEARS	= 128
77 };
78 
79 enum {
80 	RTC_STATE_REBOOT	= 0,
81 	RTC_STATE_RECOVER	= 1,
82 	RTC_STATE_INIT		= 2
83 };
84 
85 /* RTC error code */
86 enum {
87 	RTC_STATUS_OK	= 0,
88 	RTC_STATUS_POWERKEY_INIT_FAIL,
89 	RTC_STATUS_WRITEIF_UNLOCK_FAIL,
90 	RTC_STATUS_OSC_SETTING_FAIL,
91 	RTC_STATUS_GPIO_INIT_FAIL,
92 	RTC_STATUS_HW_INIT_FAIL,
93 	RTC_STATUS_REG_INIT_FAIL,
94 	RTC_STATUS_LPD_INIT_FAIL
95 };
96 
97 /* external API */
98 bool rtc_write_trigger(void);
99 bool rtc_writeif_unlock(void);
100 bool rtc_xosc_write(u16 val);
101 bool rtc_lpen(u16 con);
102 bool rtc_reg_init(void);
103 void rtc_osc_init(void);
104 bool rtc_powerkey_init(void);
105 void rtc_boot_common(void);
106 
107 #endif /* SOC_MEDIATEK_RTC_COMMON_H */
108