soc/intel/common/block: Update common rtc code

Move rtc init code into common area and update the implementation for
apollolake to avoid build break.

Change-Id: I702ce0efba25cb6fde33cc15698ae44312742367
Signed-off-by: Lijian Zhao <lijian.zhao@intel.com>
Reviewed-on: https://review.coreboot.org/21433
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Aaron Durbin <adurbin@chromium.org>
This commit is contained in:
Lijian Zhao 2017-09-06 16:47:17 -07:00 committed by Aaron Durbin
parent 0a712c3337
commit bfabe62a6e
4 changed files with 32 additions and 11 deletions

View File

@ -83,23 +83,16 @@ void lpc_configure_pads(void)
gpio_configure_pads(lpc_gpios, ARRAY_SIZE(lpc_gpios));
}
static void rtc_init(void)
int soc_get_rtc_failed(void)
{
int rtc_fail;
const struct chipset_power_state *ps = cbmem_find(CBMEM_ID_POWER_STATE);
if (!ps) {
printk(BIOS_ERR, "Could not find power state in cbmem, RTC init aborted\n");
return;
return 1;
}
rtc_fail = !!(ps->gen_pmcon1 & RPS);
/* Ensure the date is set including century byte. */
cmos_check_update_date();
if (IS_ENABLED(CONFIG_VBOOT_VBNV_CMOS))
init_vbnv_cmos(rtc_fail);
else
cmos_init(rtc_fail);
return !!(ps->gen_pmcon1 & RPS);
}
void lpc_init(struct device *dev)

View File

@ -18,4 +18,9 @@
void enable_rtc_upper_bank(void);
/* Expect return rtc failed bootlean in case of coin removal */
int soc_get_rtc_failed(void);
void rtc_init(void);
#endif /* SOC_INTEL_COMMON_BLOCK_RTC_H */

View File

@ -1 +1,3 @@
bootblock-$(CONFIG_SOC_INTEL_COMMON_BLOCK_RTC) += rtc.c
ramstage-$(CONFIG_SOC_INTEL_COMMON_BLOCK_RTC) += rtc.c

View File

@ -13,9 +13,11 @@
* GNU General Public License for more details.
*/
#include <soc/pcr_ids.h>
#include <intelblocks/pcr.h>
#include <intelblocks/rtc.h>
#include <soc/pcr_ids.h>
#include <pc80/mc146818rtc.h>
#include <vboot/vbnv.h>
/* RTC PCR configuration */
#define PCR_RTC_CONF 0x3400
@ -29,3 +31,22 @@ void enable_rtc_upper_bank(void)
/* Enable upper 128 bytes of CMOS */
pcr_or32(PID_RTC, PCR_RTC_CONF, PCR_RTC_CONF_UCMOS_EN);
}
__attribute__((weak)) int soc_get_rtc_failed(void)
{
return 0;
}
void rtc_init(void)
{
int rtc_failed;
rtc_failed = soc_get_rtc_failed();
/* Ensure the date is set including century byte. */
cmos_check_update_date();
if (IS_ENABLED(CONFIG_VBOOT_VBNV_CMOS))
init_vbnv_cmos(rtc_failed);
else
cmos_init(rtc_failed);
}