drivers/pc80/rtc: Move sanitize_cmos()
Implementation depends on USE_OPTION_TABLE. Change-Id: If7f8f478db3214842b6cc60cd77b4ea81cab6e3a Signed-off-by: Kyösti Mälkki <kyosti.malkki@gmail.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/38195 Reviewed-by: Angel Pons <th3fanbus@gmail.com> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
This commit is contained in:
parent
da41b6182d
commit
b2680a12e4
|
@ -12,36 +12,10 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <cbfs.h>
|
#include <option.h>
|
||||||
#include <pc80/mc146818rtc.h>
|
#include <pc80/mc146818rtc.h>
|
||||||
#include <fallback.h>
|
#include <fallback.h>
|
||||||
|
|
||||||
#if CONFIG(USE_OPTION_TABLE)
|
|
||||||
#include <option_table.h>
|
|
||||||
|
|
||||||
int cmos_lb_cks_valid(void)
|
|
||||||
{
|
|
||||||
return cmos_checksum_valid(LB_CKS_RANGE_START, LB_CKS_RANGE_END, LB_CKS_LOC);
|
|
||||||
}
|
|
||||||
|
|
||||||
void sanitize_cmos(void)
|
|
||||||
{
|
|
||||||
if (cmos_error() || !cmos_lb_cks_valid() || CONFIG(STATIC_OPTION_TABLE)) {
|
|
||||||
size_t length = 128;
|
|
||||||
const unsigned char *cmos_default =
|
|
||||||
cbfs_boot_map_with_leak("cmos.default",
|
|
||||||
CBFS_COMPONENT_CMOS_DEFAULT, &length);
|
|
||||||
if (cmos_default) {
|
|
||||||
size_t i;
|
|
||||||
u8 control_state = cmos_disable_rtc();
|
|
||||||
for (i = 14; i < MIN(128, length); i++)
|
|
||||||
cmos_write_inner(cmos_default[i], i);
|
|
||||||
cmos_restore_rtc(control_state);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if CONFIG_MAX_REBOOT_CNT > 15
|
#if CONFIG_MAX_REBOOT_CNT > 15
|
||||||
#error "CONFIG_MAX_REBOOT_CNT too high"
|
#error "CONFIG_MAX_REBOOT_CNT too high"
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -233,3 +233,31 @@ enum cb_err cmos_set_option(const char *name, void *value)
|
||||||
rdev_munmap(&rdev, ct);
|
rdev_munmap(&rdev, ct);
|
||||||
return CB_SUCCESS;
|
return CB_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int cmos_lb_cks_valid(void)
|
||||||
|
{
|
||||||
|
return cmos_checksum_valid(LB_CKS_RANGE_START, LB_CKS_RANGE_END, LB_CKS_LOC);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void cmos_load_defaults(void)
|
||||||
|
{
|
||||||
|
size_t length = 128;
|
||||||
|
size_t i;
|
||||||
|
|
||||||
|
const unsigned char *cmos_default =
|
||||||
|
cbfs_boot_map_with_leak("cmos.default",
|
||||||
|
CBFS_COMPONENT_CMOS_DEFAULT, &length);
|
||||||
|
if (!cmos_default)
|
||||||
|
return;
|
||||||
|
|
||||||
|
u8 control_state = cmos_disable_rtc();
|
||||||
|
for (i = 14; i < MIN(128, length); i++)
|
||||||
|
cmos_write_inner(cmos_default[i], i);
|
||||||
|
cmos_restore_rtc(control_state);
|
||||||
|
}
|
||||||
|
|
||||||
|
void sanitize_cmos(void)
|
||||||
|
{
|
||||||
|
if (cmos_error() || !cmos_lb_cks_valid() || CONFIG(STATIC_OPTION_TABLE))
|
||||||
|
cmos_load_defaults();
|
||||||
|
}
|
||||||
|
|
|
@ -16,6 +16,8 @@
|
||||||
|
|
||||||
#include <types.h>
|
#include <types.h>
|
||||||
|
|
||||||
|
void sanitize_cmos(void);
|
||||||
|
|
||||||
enum cb_err cmos_set_option(const char *name, void *val);
|
enum cb_err cmos_set_option(const char *name, void *val);
|
||||||
enum cb_err cmos_get_option(void *dest, const char *name);
|
enum cb_err cmos_get_option(void *dest, const char *name);
|
||||||
|
|
||||||
|
|
|
@ -217,7 +217,6 @@ static inline void cmos_post_log(void) {}
|
||||||
|
|
||||||
#endif /* CONFIG_ARCH_X86 */
|
#endif /* CONFIG_ARCH_X86 */
|
||||||
|
|
||||||
void sanitize_cmos(void);
|
|
||||||
void cmos_post_init(void);
|
void cmos_post_init(void);
|
||||||
|
|
||||||
#endif /* PC80_MC146818RTC_H */
|
#endif /* PC80_MC146818RTC_H */
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
#include <bootblock_common.h>
|
#include <bootblock_common.h>
|
||||||
#include <console/console.h>
|
#include <console/console.h>
|
||||||
#include <delay.h>
|
#include <delay.h>
|
||||||
|
#include <option.h>
|
||||||
#include <pc80/mc146818rtc.h>
|
#include <pc80/mc146818rtc.h>
|
||||||
#include <program_loading.h>
|
#include <program_loading.h>
|
||||||
#include <symbols.h>
|
#include <symbols.h>
|
||||||
|
|
Loading…
Reference in New Issue