/* * This file is part of the coreboot project. * * Copyright 2015 MediaTek Inc. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 2 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #ifndef SOC_MEDIATEK_MT8173_RTC_H #define SOC_MEDIATEK_MT8173_RTC_H #include #include "mt6391.h" /* * Default values for RTC initialization * Year (YEA) : 1970 ~ 2037 * Month (MTH) : 1 ~ 12 * Day of Month (DOM): 1 ~ 31 */ enum { RTC_DEFAULT_YEA = 2010, RTC_DEFAULT_MTH = 1, RTC_DEFAULT_DOM = 1, RTC_DEFAULT_DOW = 5 }; enum { RTC_2SEC_REBOOT_ENABLE = 1, RTC_2SEC_MODE = 2 }; /* RTC registers */ enum { RTC_BBPU = 0xE000, RTC_IRQ_STA = 0xE002, RTC_IRQ_EN = 0xE004, RTC_CII_EN = 0xE006 }; enum { RTC_TC_SEC = 0xE00A, RTC_TC_MIN = 0xE00C, RTC_TC_HOU = 0xE00E, RTC_TC_DOM = 0xE010, RTC_TC_DOW = 0xE012, RTC_TC_MTH = 0xE014, RTC_TC_YEA = 0xE016 }; enum { RTC_AL_SEC = 0xE018, RTC_AL_MIN = 0xE01A, RTC_AL_HOU = 0xE01C, RTC_AL_DOM = 0xE01E, RTC_AL_DOW = 0xE020, RTC_AL_MTH = 0xE022, RTC_AL_YEA = 0xE024, RTC_AL_MASK = 0xE008 }; enum { RTC_OSC32CON = 0xE026, RTC_CON = 0xE03E, RTC_WRTGR = 0xE03C }; enum { RTC_POWERKEY1 = 0xE028, RTC_POWERKEY2 = 0xE02A }; enum { RTC_PDN1 = 0xE02C, RTC_PDN2 = 0xE02E, RTC_SPAR0 = 0xE030, RTC_SPAR1 = 0xE032, RTC_PROT = 0xE036, RTC_DIFF = 0xE038, RTC_CALI = 0xE03A }; enum { RTC_OSC32CON_UNLOCK1 = 0x1A57, RTC_OSC32CON_UNLOCK2 = 0x2B68 }; enum { RTC_PROT_UNLOCK1 = 0x586A, RTC_PROT_UNLOCK2 = 0x9136 }; enum { RTC_BBPU_PWREN = 1U << 0, RTC_BBPU_BBPU = 1U << 2, RTC_BBPU_AUTO = 1U << 3, RTC_BBPU_CLRPKY = 1U << 4, RTC_BBPU_RELOAD = 1U << 5, RTC_BBPU_CBUSY = 1U << 6, RTC_CBUSY_TIMEOUT_US = 800 }; enum { RTC_BBPU_KEY = 0x43 << 8 }; enum { RTC_IRQ_STA_AL = 1U << 0, RTC_IRQ_STA_TC = 1U << 1, RTC_IRQ_STA_LP = 1U << 3 }; enum { RTC_IRQ_EN_AL = 1U << 0, RTC_IRQ_EN_TC = 1U << 1, RTC_IRQ_EN_ONESHOT = 1U << 2, RTC_IRQ_EN_LP = 1U << 3, RTC_IRQ_EN_ONESHOT_AL = RTC_IRQ_EN_ONESHOT | RTC_IRQ_EN_AL }; enum { RTC_OSC32CON_AMPEN = 1U << 8, RTC_OSC32CON_LNBUFEN = 1U << 11 }; enum { RTC_POWERKEY1_KEY = 0xa357, RTC_POWERKEY2_KEY = 0x67d2 }; enum { RTC_CON_LPEN = 1U << 2, RTC_CON_LPRST = 1U << 3, RTC_CON_CDBO = 1U << 4, RTC_CON_F32KOB = 1U << 5, RTC_CON_GPO = 1U << 6, RTC_CON_GOE = 1U << 7, RTC_CON_GSR = 1U << 8, RTC_CON_GSMT = 1U << 9, RTC_CON_GPEN = 1U << 10, RTC_CON_GPU = 1U << 11, RTC_CON_GE4 = 1U << 12, RTC_CON_GE8 = 1U << 13, RTC_CON_GPI = 1U << 14, RTC_CON_LPSTA_RAW = 1U << 15 }; enum { RTC_CALI_BBPU_2SEC_EN = 1U << 8, RTC_CALI_BBPU_2SEC_MODE_SHIFT = 9, RTC_CALI_BBPU_2SEC_MODE_MSK = 3U << RTC_CALI_BBPU_2SEC_MODE_SHIFT, RTC_CALI_BBPU_2SEC_STAT = 1U << 11 }; enum { RTC_SPAR0_32K_LESS = 1U << 6 }; enum { RTC_MIN_YEAR = 1968, RTC_BASE_YEAR = 1900, RTC_MIN_YEAR_OFFSET = RTC_MIN_YEAR - RTC_BASE_YEAR, RTC_NUM_YEARS = 128 }; enum { RTC_STATE_REBOOT = 0, RTC_STATE_RECOVER = 1, RTC_STATE_INIT = 2 }; void rtc_boot(void); #endif /* SOC_MEDIATEK_MT8173_RTC_H */