southbridge/intel/bd82x6x: refactor rtc failure checking
In order to prepare for checking RTC failure in the early boot paths move the rtc failure calculation to early_pch_common.c and add a helper function to determine if failure occurred. BUG=b:63054105 Change-Id: I710d99551cfb6455244f66b47fcbecc790ae770f Signed-off-by: Aaron Durbin <adurbin@chromium.org> Reviewed-on: https://review.coreboot.org/21558 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Furquan Shaikh <furquan@google.com>
This commit is contained in:
parent
cfe7ad1e8f
commit
976200388b
@ -52,6 +52,6 @@ else
|
|||||||
romstage-y += early_me_mrc.c early_usb_mrc.c
|
romstage-y += early_me_mrc.c early_usb_mrc.c
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ramstage-y += madt.c
|
ramstage-y += madt.c early_pch_common.c
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
@ -17,10 +17,13 @@
|
|||||||
#include <arch/io.h>
|
#include <arch/io.h>
|
||||||
#include <timestamp.h>
|
#include <timestamp.h>
|
||||||
#include <cpu/x86/tsc.h>
|
#include <cpu/x86/tsc.h>
|
||||||
|
#include <device/pci_def.h>
|
||||||
#include "pch.h"
|
#include "pch.h"
|
||||||
#include <arch/acpi.h>
|
#include <arch/acpi.h>
|
||||||
#include <console/console.h>
|
#include <console/console.h>
|
||||||
|
#include <rules.h>
|
||||||
|
|
||||||
|
#if ENV_ROMSTAGE
|
||||||
uint64_t get_initial_timestamp(void)
|
uint64_t get_initial_timestamp(void)
|
||||||
{
|
{
|
||||||
tsc_t base_time = {
|
tsc_t base_time = {
|
||||||
@ -56,3 +59,14 @@ int southbridge_detect_s3_resume(void)
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
int rtc_failure(void)
|
||||||
|
{
|
||||||
|
#if defined(__SIMPLE_DEVICE__)
|
||||||
|
device_t dev = PCI_DEV(0, 0x1f, 0);
|
||||||
|
#else
|
||||||
|
device_t dev = dev_find_slot(0, PCI_DEVFN(0x1f, 0));
|
||||||
|
#endif
|
||||||
|
return !!(pci_read_config8(dev, GEN_PMCON_3) & RTC_BATTERY_DEAD);
|
||||||
|
}
|
||||||
|
@ -277,18 +277,14 @@ static void pch_power_options(device_t dev)
|
|||||||
|
|
||||||
static void pch_rtc_init(struct device *dev)
|
static void pch_rtc_init(struct device *dev)
|
||||||
{
|
{
|
||||||
u8 reg8;
|
int rtc_failed = rtc_failure();
|
||||||
int rtc_failed;
|
|
||||||
|
|
||||||
reg8 = pci_read_config8(dev, GEN_PMCON_3);
|
|
||||||
rtc_failed = reg8 & RTC_BATTERY_DEAD;
|
|
||||||
if (rtc_failed) {
|
if (rtc_failed) {
|
||||||
reg8 &= ~RTC_BATTERY_DEAD;
|
if (IS_ENABLED(CONFIG_ELOG))
|
||||||
pci_write_config8(dev, GEN_PMCON_3, reg8);
|
elog_add_event(ELOG_TYPE_RTC_RESET);
|
||||||
#if IS_ENABLED(CONFIG_ELOG)
|
pci_update_config8(dev, GEN_PMCON_3, ~RTC_BATTERY_DEAD, 0);
|
||||||
elog_add_event(ELOG_TYPE_RTC_RESET);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
printk(BIOS_DEBUG, "rtc_failed = 0x%x\n", rtc_failed);
|
printk(BIOS_DEBUG, "rtc_failed = 0x%x\n", rtc_failed);
|
||||||
|
|
||||||
cmos_init(rtc_failed);
|
cmos_init(rtc_failed);
|
||||||
|
@ -103,6 +103,9 @@ void
|
|||||||
early_usb_init (const struct southbridge_usb_port *portmap);
|
early_usb_init (const struct southbridge_usb_port *portmap);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Return non-zero when RTC failure happened. */
|
||||||
|
int rtc_failure(void);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define MAINBOARD_POWER_OFF 0
|
#define MAINBOARD_POWER_OFF 0
|
||||||
|
Loading…
x
Reference in New Issue
Block a user