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 #ifndef SOC_MEDIATEK_MT8183_RTC_H
4 #define SOC_MEDIATEK_MT8183_RTC_H
5 
6 #include <soc/pmic_wrap_common.h>
7 #include <soc/rtc_common.h>
8 #include <stdbool.h>
9 
10 /* RTC registers */
11 enum {
12  RTC_BBPU = 0x0588,
13  RTC_IRQ_STA = 0x058A,
14  RTC_IRQ_EN = 0x058C,
15  RTC_CII_EN = 0x058E
16 };
17 
18 enum {
19  RTC_TC_SEC = 0x0592,
20  RTC_TC_MIN = 0x0594,
21  RTC_TC_HOU = 0x0596,
22  RTC_TC_DOM = 0x0598,
23  RTC_TC_DOW = 0x059A,
24  RTC_TC_MTH = 0x059C,
25  RTC_TC_YEA = 0x059E
26 };
27 
28 enum {
29  RTC_AL_SEC = 0x05A0,
30  RTC_AL_MIN = 0x05A2,
31  RTC_AL_HOU = 0x05A4,
32  RTC_AL_DOM = 0x05A6,
33  RTC_AL_DOW = 0x05A8,
34  RTC_AL_MTH = 0x05AA,
35  RTC_AL_YEA = 0x05AC,
36  RTC_AL_MASK = 0x0590
37 };
38 
39 enum {
40  RTC_OSC32CON = 0x05AE,
41  RTC_CON = 0x05C4,
42  RTC_WRTGR = 0x05C2
43 };
44 
45 enum {
46  RTC_POWERKEY1 = 0x05B0,
47  RTC_POWERKEY2 = 0x05B2
48 };
49 
50 enum {
51  RTC_PDN1 = 0x05B4,
52  RTC_PDN2 = 0x05B6,
53  RTC_SPAR0 = 0x05B8,
54  RTC_SPAR1 = 0x05BA,
55  RTC_PROT = 0x05BC,
56  RTC_DIFF = 0x05BE,
57  RTC_CALI = 0x05C0
58 };
59 
60 enum {
61  RTC_BBPU_PWREN = 1U << 0,
62  RTC_BBPU_CLR = 1U << 1,
63  RTC_BBPU_INIT = 1U << 2,
64  RTC_BBPU_AUTO = 1U << 3,
65  RTC_BBPU_CLRPKY = 1U << 4,
66  RTC_BBPU_RELOAD = 1U << 5,
67  RTC_BBPU_CBUSY = 1U << 6,
68 
70 };
71 
72 enum {
76  RTC_CON_LPRST = 1U << 3,
77  RTC_CON_CDBO = 1U << 4,
78  RTC_CON_F32KOB = 1U << 5,
79  RTC_CON_GPO = 1U << 6,
80  RTC_CON_GOE = 1U << 7,
81  RTC_CON_GSR = 1U << 8,
82  RTC_CON_GSMT = 1U << 9,
83  RTC_CON_GPEN = 1U << 10,
84  RTC_CON_GPU = 1U << 11,
85  RTC_CON_GE4 = 1U << 12,
86  RTC_CON_GE8 = 1U << 13,
87  RTC_CON_GPI = 1U << 14,
88  RTC_CON_LPSTA_RAW = 1U << 15
89 };
90 
91 enum {
92  RTC_XOSCCALI_MASK = 0x1F << 0,
93  RTC_XOSC32_ENB = 1U << 5,
94  RTC_EMB_HW_MODE = 0U << 6,
99  RTC_EMBCK_SRC_SEL = 1U << 8,
101  RTC_GPS_CKOUT_EN = 1U << 10,
102  RTC_REG_XOSC32_ENB = 1U << 15
103 };
104 
105 enum {
110  RTC_LPD_OPT_MASK = 3U << 13
111 };
112 
113 /* PMIC TOP Register Definition */
114 enum {
115  PMIC_RG_SCK_TOP_CON0 = 0x050C
116 };
117 
118 /* PMIC TOP Register Definition */
119 enum {
129 };
130 
131 enum {
134 };
135 
136 /* PMIC DCXO Register Definition */
137 enum {
149  PMIC_RG_DCXO_ELR0 = 0x07C4
150 };
151 
152 enum {
153  PMIC_RG_TOP_TMA_KEY = 0x03A8
154 };
155 
156 /* PMIC Frequency Meter Definition */
157 enum {
163 
164  FQMTR_TIMEOUT_US = 8000
165 };
166 
167 enum {
175  PMIC_FQMTR_CKSEL_MASK = 7U << 0
176 };
177 
178 enum {
180 };
181 
182 enum {
193  PMIC_FQMTR_CON0_FQMTR_EN = 1U << 15
194 };
195 
196 enum {
198  RTC_FQMTR_HIGH_BASE = 794 + 2
199 };
200 
201 enum {
203  RTC_XOSCCALI_END = 0x1f
204 };
205 
206 /* external API */
207 void rtc_bbpu_power_on(void);
208 int rtc_init(int recover);
209 bool rtc_gpio_init(void);
210 void rtc_boot(void);
211 u16 rtc_get_frequency_meter(u16 val, u16 measure_src, u16 window_size);
212 void mt6358_dcxo_disable_unused(void);
213 
214 static inline s32 rtc_read(u16 addr, u16 *rdata)
215 {
216  s32 ret;
217 
218  ret = pwrap_read(addr, rdata);
219  if (ret < 0)
220  rtc_info("pwrap_read failed: ret=%d\n", ret);
221 
222  return ret;
223 }
224 
225 static inline s32 rtc_write(u16 addr, u16 wdata)
226 {
227  s32 ret;
228 
229  ret = pwrap_write(addr, wdata);
230  if (ret < 0)
231  rtc_info("pwrap_write failed: ret=%d\n", ret);
232 
233  return ret;
234 }
235 
236 #endif /* SOC_MEDIATEK_MT8183_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
static s32 rtc_read(u16 addr, u16 *rdata)
Definition: rtc.h:214
@ 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
void mt6358_dcxo_disable_unused(void)
Definition: rtc.c:326
@ PMIC_RG_FQMTR_32K_CK_PDN_SHIFT
Definition: rtc.h:132
@ PMIC_RG_FQMTR_CK_PDN_SHIFT
Definition: rtc.h:133
static s32 rtc_write(u16 addr, u16 wdata)
Definition: rtc.h:225
@ 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
uint16_t u16
Definition: stdint.h:48
int32_t s32
Definition: stdint.h:50
u8 val
Definition: sys.c:300