rtc: Add an RTC API, and implement it for x86.
This CL adds an API for RTC drivers, and implements its two functions, rtc_get and rtc_set, for x86's RTC. The function which resets the clock when the CMOS has lost state now uses the RTC driver instead of accessing the those registers directly. The availability of "ALTCENTURY" is now set through a kconfig variable so it can be available to the RTC driver without having to have a specialized interface. BUG=None TEST=Built and booted on Link with the event log code modified to use the RTC interface. Verified that the event times were accurate. BRANCH=nyan Change-Id: Ifa807898e583254e57167fd44932ea86627a02ee Signed-off-by: Gabe Black <gabeblack@google.com> Reviewed-on: https://chromium-review.googlesource.com/197795 Reviewed-by: David Hendricks <dhendrix@chromium.org> Tested-by: Gabe Black <gabeblack@chromium.org> Commit-Queue: Gabe Black <gabeblack@chromium.org>
This commit is contained in:
parent
9a9ad24888
commit
9e0fd75142
14 changed files with 471 additions and 329 deletions
35
src/include/bcd.h
Normal file
35
src/include/bcd.h
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
/*
|
||||
* This file is part of the coreboot project.
|
||||
*
|
||||
* Copyright 2014 Google, 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.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA, 02110-1301 USA
|
||||
*/
|
||||
|
||||
#ifndef _BCD_H_
|
||||
#define _BCD_H_
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
static inline uint8_t bcd2bin(uint8_t val)
|
||||
{
|
||||
return ((val >> 4) & 0xf) * 10 + (val & 0xf);
|
||||
}
|
||||
|
||||
static inline uint8_t bin2bcd(uint8_t val)
|
||||
{
|
||||
return ((val / 10) << 4) | (val % 10);
|
||||
}
|
||||
|
||||
#endif /* _BCD_H_ */
|
||||
|
|
@ -91,9 +91,6 @@
|
|||
#define RTC_CLK_YEAR 9
|
||||
#define RTC_CLK_ALTCENTURY 0x32
|
||||
|
||||
#define RTC_HAS_ALTCENTURY 1
|
||||
#define RTC_HAS_NO_ALTCENTURY 0
|
||||
|
||||
/* On PCs, the checksum is built only over bytes 16..45 */
|
||||
#define PC_CKS_RANGE_START 16
|
||||
#define PC_CKS_RANGE_END 45
|
||||
|
|
@ -171,7 +168,7 @@ static inline void cmos_write32(u8 offset, u32 value)
|
|||
|
||||
#if !defined(__ROMCC__)
|
||||
void cmos_init(int invalid);
|
||||
void cmos_check_update_date(u8 has_century);
|
||||
void cmos_check_update_date(void);
|
||||
#if CONFIG_USE_OPTION_TABLE
|
||||
int set_option(const char *name, void *val);
|
||||
int get_option(void *dest, const char *name);
|
||||
|
|
|
|||
37
src/include/rtc.h
Normal file
37
src/include/rtc.h
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
/*
|
||||
* This file is part of the coreboot project.
|
||||
*
|
||||
* Copyright 2014 Google, 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.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA, 02110-1301 USA
|
||||
*/
|
||||
|
||||
#ifndef _RTC_H_
|
||||
#define _RTC_H_
|
||||
|
||||
struct rtc_time
|
||||
{
|
||||
int sec;
|
||||
int min;
|
||||
int hour;
|
||||
int mday;
|
||||
int mon;
|
||||
int year;
|
||||
int wday;
|
||||
};
|
||||
|
||||
int rtc_set(const struct rtc_time *time);
|
||||
int rtc_get(struct rtc_time *time);
|
||||
|
||||
#endif /* _RTC_H_ */
|
||||
Loading…
Add table
Add a link
Reference in a new issue