coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
rtc.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 /*
4  * This file is created based on MT8186 Functional Specification
5  * Chapter number: 5.13
6  */
7 
8 #ifndef SOC_MEDIATEK_MT8186_RTC_H
9 #define SOC_MEDIATEK_MT8186_RTC_H
10 
11 #include <soc/pmic_wrap_common.h>
12 #include <soc/rtc_common.h>
13 #include <stdbool.h>
14 
15 /* RTC registers */
16 enum {
17  RTC_BBPU = 0x0588,
18  RTC_IRQ_STA = 0x058A,
19  RTC_IRQ_EN = 0x058C,
20  RTC_CII_EN = 0x058E,
21 };
22 
23 enum {
24  RTC_TC_SEC = 0x0592,
25  RTC_TC_MIN = 0x0594,
26  RTC_TC_HOU = 0x0596,
27  RTC_TC_DOM = 0x0598,
28  RTC_TC_DOW = 0x059A,
29  RTC_TC_MTH = 0x059C,
30  RTC_TC_YEA = 0x059E,
31 };
32 
33 enum {
34  RTC_AL_SEC = 0x05A0,
35  RTC_AL_MIN = 0x05A2,
36  RTC_AL_HOU = 0x05A4,
37  RTC_AL_DOM = 0x05A6,
38  RTC_AL_DOW = 0x05A8,
39  RTC_AL_MTH = 0x05AA,
40  RTC_AL_YEA = 0x05AC,
41  RTC_AL_MASK = 0x0590,
42 };
43 
44 enum {
45  RTC_OSC32CON = 0x05AE,
46  RTC_CON = 0x05C4,
47  RTC_WRTGR = 0x05C2,
48 };
49 
50 enum {
51  RTC_POWERKEY1 = 0x05B0,
52  RTC_POWERKEY2 = 0x05B2,
53 };
54 
55 enum {
56  RTC_PDN1 = 0x05B4,
57  RTC_PDN2 = 0x05B6,
58  RTC_SPAR0 = 0x05B8,
59  RTC_SPAR1 = 0x05BA,
60  RTC_PROT = 0x05BC,
61  RTC_DIFF = 0x05BE,
62  RTC_CALI = 0x05C0,
63 };
64 
65 enum {
66  RTC_BBPU_PWREN = 1U << 0,
67  RTC_BBPU_CLR = 1U << 1,
68  RTC_BBPU_INIT = 1U << 2,
69  RTC_BBPU_AUTO = 1U << 3,
70  RTC_BBPU_CLRPKY = 1U << 4,
71  RTC_BBPU_RELOAD = 1U << 5,
72  RTC_BBPU_CBUSY = 1U << 6,
73 
75 };
76 
77 enum {
81  RTC_CON_LPRST = 1U << 3,
82  RTC_CON_CDBO = 1U << 4,
83  RTC_CON_F32KOB = 1U << 5,
84  RTC_CON_GPO = 1U << 6,
85  RTC_CON_GOE = 1U << 7,
86  RTC_CON_GSR = 1U << 8,
87  RTC_CON_GSMT = 1U << 9,
88  RTC_CON_GPEN = 1U << 10,
89  RTC_CON_GPU = 1U << 11,
90  RTC_CON_GE4 = 1U << 12,
91  RTC_CON_GE8 = 1U << 13,
92  RTC_CON_GPI = 1U << 14,
93  RTC_CON_LPSTA_RAW = 1U << 15,
94 };
95 
96 enum {
97  RTC_XOSCCALI_MASK = 0x1F << 0,
98  RTC_XOSC32_ENB = 1U << 5,
99  RTC_EMB_HW_MODE = 0U << 6,
104  RTC_EMBCK_SRC_SEL = 1U << 8,
106  RTC_GPS_CKOUT_EN = 1U << 10,
107  RTC_REG_XOSC32_ENB = 1U << 15,
108 };
109 
110 enum {
115  RTC_LPD_OPT_MASK = 3U << 13,
116 };
117 
118 /* PMIC TOP Register Definition */
119 enum {
121 };
122 
123 /* PMIC TOP Register Definition */
124 enum {
134 };
135 
136 enum {
139 };
140 
141 /* PMIC DCXO Register Definition */
142 enum {
156 };
157 
158 enum {
160 };
161 
162 /* PMIC Frequency Meter Definition */
163 enum {
169 
171 };
172 
173 enum {
182 };
183 
184 enum {
186 };
187 
188 enum {
200 };
201 
202 enum {
205 };
206 
207 enum {
210 };
211 
212 /* external API */
213 void rtc_bbpu_power_on(void);
214 int rtc_init(int recover);
215 bool rtc_gpio_init(void);
216 void rtc_boot(void);
217 u16 rtc_get_frequency_meter(u16 val, u16 measure_src, u16 window_size);
218 
219 static inline s32 rtc_read(u16 addr, u16 *rdata)
220 {
221  s32 ret;
222 
223  ret = pwrap_read(addr, rdata);
224  if (ret)
225  rtc_info("pwrap_read failed: ret=%d\n", ret);
226 
227  return ret;
228 }
229 
230 static inline s32 rtc_write(u16 addr, u16 wdata)
231 {
232  s32 ret;
233 
234  ret = pwrap_write(addr, wdata);
235  if (ret)
236  rtc_info("pwrap_write failed: ret=%d\n", ret);
237 
238  return ret;
239 }
240 
241 #endif /* SOC_MEDIATEK_MT8186_RTC_H */
static u32 addr
Definition: cirrus.c:14
static s32 pwrap_read(u16 addr, u16 *rdata)
static s32 pwrap_write(u16 addr, u16 wdata)
#define rtc_info(fmt, arg ...)
Definition: rtc_common.h:12
void rtc_init(void)
Definition: rtc.c:29
void rtc_boot(void)
Definition: rtc_mt6359p.c:315
@ RTC_WRTGR
Definition: rtc.h:44
@ RTC_CON
Definition: rtc.h:43
@ RTC_OSC32CON
Definition: rtc.h:42
@ RTC_IRQ_EN
Definition: rtc.h:16
@ RTC_IRQ_STA
Definition: rtc.h:15
@ RTC_BBPU
Definition: rtc.h:14
@ RTC_CII_EN
Definition: rtc.h:17
@ RTC_CBUSY_TIMEOUT_US
Definition: rtc.h:70
@ RTC_BBPU_AUTO
Definition: rtc.h:65
@ RTC_BBPU_PWREN
Definition: rtc.h:63
@ RTC_BBPU_CLRPKY
Definition: rtc.h:66
@ RTC_BBPU_RELOAD
Definition: rtc.h:67
@ RTC_BBPU_CBUSY
Definition: rtc.h:68
@ RTC_CON_GPI
Definition: rtc.h:91
@ RTC_CON_GE8
Definition: rtc.h:90
@ RTC_CON_GSMT
Definition: rtc.h:86
@ RTC_CON_GE4
Definition: rtc.h:89
@ RTC_CON_GPU
Definition: rtc.h:88
@ RTC_CON_CDBO
Definition: rtc.h:81
@ RTC_CON_GPO
Definition: rtc.h:83
@ RTC_CON_F32KOB
Definition: rtc.h:82
@ RTC_CON_LPSTA_RAW
Definition: rtc.h:92
@ RTC_CON_GOE
Definition: rtc.h:84
@ RTC_CON_LPRST
Definition: rtc.h:80
@ RTC_CON_GSR
Definition: rtc.h:85
@ RTC_CON_GPEN
Definition: rtc.h:87
@ RTC_DIFF
Definition: rtc.h:58
@ RTC_CALI
Definition: rtc.h:59
@ RTC_SPAR1
Definition: rtc.h:56
@ RTC_PDN2
Definition: rtc.h:54
@ RTC_SPAR0
Definition: rtc.h:55
@ RTC_PDN1
Definition: rtc.h:53
@ RTC_PROT
Definition: rtc.h:57
@ RTC_AL_MTH
Definition: rtc.h:36
@ RTC_AL_DOM
Definition: rtc.h:34
@ RTC_AL_DOW
Definition: rtc.h:35
@ RTC_AL_MIN
Definition: rtc.h:32
@ RTC_AL_HOU
Definition: rtc.h:33
@ RTC_AL_MASK
Definition: rtc.h:38
@ RTC_AL_YEA
Definition: rtc.h:37
@ RTC_AL_SEC
Definition: rtc.h:31
@ RTC_TC_MTH
Definition: rtc.h:26
@ RTC_TC_SEC
Definition: rtc.h:21
@ RTC_TC_MIN
Definition: rtc.h:22
@ RTC_TC_DOW
Definition: rtc.h:25
@ RTC_TC_DOM
Definition: rtc.h:24
@ RTC_TC_YEA
Definition: rtc.h:27
@ RTC_TC_HOU
Definition: rtc.h:23
@ RTC_POWERKEY1
Definition: rtc.h:48
@ RTC_POWERKEY2
Definition: rtc.h:49
@ PMIC_RG_TOP_TMA_KEY
Definition: rtc.h:153
@ PMIC_RG_TOP_CKSEL_CON0_SET
Definition: rtc.h:127
@ PMIC_RG_TOP_CKSEL_CON0_CLR
Definition: rtc.h:128
@ PMIC_RG_TOP_CKPDN_CON0
Definition: rtc.h:120
@ PMIC_RG_TOP_CKPDN_CON0_CLR
Definition: rtc.h:122
@ PMIC_RG_TOP_CKPDN_CON1_SET
Definition: rtc.h:124
@ PMIC_RG_TOP_CKPDN_CON0_SET
Definition: rtc.h:121
@ PMIC_RG_TOP_CKPDN_CON1
Definition: rtc.h:123
@ PMIC_RG_TOP_CKSEL_CON0
Definition: rtc.h:126
@ PMIC_RG_TOP_CKPDN_CON1_CLR
Definition: rtc.h:125
@ PMIC_RG_SCK_TOP_CON0
Definition: rtc.h:115
void rtc_bbpu_power_on(void)
Definition: rtc_mt6359p.c:286
@ RTC_BBPU_CLR
Definition: rtc.h:62
@ RTC_BBPU_INIT
Definition: rtc.h:63
@ RTC_EMBCK_SRC_SEL
Definition: rtc.h:99
@ RTC_EMB_SW_EOSC32_MODE
Definition: rtc.h:97
@ RTC_REG_XOSC32_ENB
Definition: rtc.h:102
@ RTC_GPS_CKOUT_EN
Definition: rtc.h:101
@ RTC_XOSCCALI_MASK
Definition: rtc.h:92
@ RTC_EMB_HW_MODE
Definition: rtc.h:94
@ RTC_EMB_SW_DCXO_MODE
Definition: rtc.h:96
@ RTC_EMB_K_EOSC32_MODE
Definition: rtc.h:95
@ RTC_EMBCK_SEL_OPTION
Definition: rtc.h:100
@ RTC_XOSC32_ENB
Definition: rtc.h:93
@ RTC_EMBCK_SEL_MODE_MASK
Definition: rtc.h:98
@ PMIC_RG_DCXO_CW21
Definition: rtc.h:147
@ PMIC_RG_DCXO_CW23
Definition: rtc.h:148
@ PMIC_RG_DCXO_CW00
Definition: rtc.h:138
@ PMIC_RG_DCXO_CW13
Definition: rtc.h:144
@ PMIC_RG_DCXO_CW16
Definition: rtc.h:146
@ PMIC_RG_DCXO_ELR0
Definition: rtc.h:149
@ PMIC_RG_DCXO_CW00_CLR
Definition: rtc.h:139
@ PMIC_RG_DCXO_CW09
Definition: rtc.h:142
@ PMIC_RG_DCXO_CW11
Definition: rtc.h:143
@ PMIC_RG_DCXO_CW15
Definition: rtc.h:145
@ PMIC_RG_DCXO_CW07
Definition: rtc.h:141
@ PMIC_RG_DCXO_CW02
Definition: rtc.h:140
@ PMIC_RG_FQMTR_CON0
Definition: rtc.h:160
@ PMIC_RG_FQMTR_DATA
Definition: rtc.h:162
@ PMIC_RG_FQMTR_CKSEL
Definition: rtc.h:158
@ PMIC_RG_FQMTR_RST
Definition: rtc.h:159
@ FQMTR_TIMEOUT_US
Definition: rtc.h:164
@ PMIC_RG_FQMTR_WINSET
Definition: rtc.h:161
@ RTC_FQMTR_LOW_BASE
Definition: rtc.h:197
@ RTC_FQMTR_HIGH_BASE
Definition: rtc.h:198
@ RTC_CON_VBAT_LPSTA_RAW
Definition: rtc.h:73
@ RTC_CON_EOSC32_LPEN
Definition: rtc.h:74
@ RTC_CON_XOSC32_LPEN
Definition: rtc.h:75
@ PMIC_FQMTR_CON0_DCXO_F32K_CK
Definition: rtc.h:184
@ PMIC_FQMTR_CON0_BUSY
Definition: rtc.h:191
@ PMIC_FQMTR_CON0_FQM26M_CK
Definition: rtc.h:187
@ PMIC_FQMTR_CON0_XOSC32_CK
Definition: rtc.h:183
@ PMIC_FQMTR_CON0_EOSC32_CK
Definition: rtc.h:185
@ PMIC_FQMTR_CON0_TEST_CK
Definition: rtc.h:189
@ PMIC_FQMTR_CON0_DCXO26M_EN
Definition: rtc.h:192
@ PMIC_FQMTR_CON0_TCKSEL_MASK
Definition: rtc.h:190
@ PMIC_FQMTR_CON0_FQMTR_EN
Definition: rtc.h:193
@ PMIC_FQMTR_CON0_FQM32k_CK
Definition: rtc.h:188
@ PMIC_FQMTR_CON0_XOSC32_CK_DETECTON
Definition: rtc.h:186
@ PMIC_RG_FQMTR_32K_CK_PDN_SHIFT
Definition: rtc.h:132
@ PMIC_RG_FQMTR_CK_PDN_SHIFT
Definition: rtc.h:133
@ RTC_LPD_OPT_XOSC_LPD
Definition: rtc.h:108
@ RTC_LPD_OPT_EOSC_LPD
Definition: rtc.h:107
@ RTC_LPD_OPT_F32K_CK_ALIVE
Definition: rtc.h:109
@ RTC_LPD_OPT_MASK
Definition: rtc.h:110
@ RTC_LPD_OPT_XOSC_AND_EOSC_LPD
Definition: rtc.h:106
@ PMIC_FQMTR_RST_SHIFT
Definition: rtc.h:179
@ PMIC_FQMTR_FIX_CLK_EOSC_32K
Definition: rtc.h:170
@ PMIC_FQMTR_FIX_CLK_PMU_75K
Definition: rtc.h:174
@ PMIC_FQMTR_FIX_CLK_TCK_SEC
Definition: rtc.h:173
@ PMIC_FQMTR_CKSEL_MASK
Definition: rtc.h:175
@ PMIC_FQMTR_FIX_CLK_SMPS_CK
Definition: rtc.h:172
@ PMIC_FQMTR_FIX_CLK_26M
Definition: rtc.h:168
@ PMIC_FQMTR_FIX_CLK_XOSC_32K_DET
Definition: rtc.h:169
@ PMIC_FQMTR_FIX_CLK_RTC_32K
Definition: rtc.h:171
u16 rtc_get_frequency_meter(u16 val, u16 measure_src, u16 window_size)
Definition: rtc_mt6359p.c:87
@ RTC_XOSCCALI_START
Definition: rtc.h:202
@ RTC_XOSCCALI_END
Definition: rtc.h:203
bool rtc_gpio_init(void)
Definition: rtc_mt6359p.c:71
static s32 rtc_read(u16 addr, u16 *rdata)
Definition: rtc.h:219
static s32 rtc_write(u16 addr, u16 wdata)
Definition: rtc.h:230
@ PMIC_RG_DCXO_CW03
Definition: rtc.h:146
uint16_t u16
Definition: stdint.h:48
int32_t s32
Definition: stdint.h:50
u8 val
Definition: sys.c:300