diff options
author | Tom Rini <trini@konsulko.com> | 2017-05-17 14:13:16 -0400 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2017-05-17 14:13:16 -0400 |
commit | ae1b939930b0fffc062bb99196ec22e19afcc7e8 (patch) | |
tree | cc8d8c87b15932f82d5ed3c4e26bb118de949aff /arch/x86/lib/early_cmos.c | |
parent | a9f47426ced2e5057930990f3cd602b8ab936f69 (diff) | |
parent | c2f17939f4b429c90a453e26927a7c578e5456b5 (diff) |
Merge git://git.denx.de/u-boot-x86
Diffstat (limited to 'arch/x86/lib/early_cmos.c')
-rw-r--r-- | arch/x86/lib/early_cmos.c | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/arch/x86/lib/early_cmos.c b/arch/x86/lib/early_cmos.c new file mode 100644 index 0000000000..fa0b3273a8 --- /dev/null +++ b/arch/x86/lib/early_cmos.c @@ -0,0 +1,51 @@ +/* + * Copyright (C) 2017, Bin Meng <bmeng.cn@gmail.com> + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +/* + * This library provides CMOS (inside RTC SRAM) access routines at a very + * early stage when driver model is not available yet. Only read access is + * provided. The 16-bit/32-bit read are compatible with driver model RTC + * uclass write ops, that data is stored in little-endian mode. + */ + +#include <common.h> +#include <asm/early_cmos.h> +#include <asm/io.h> + +u8 cmos_read8(u8 addr) +{ + outb(addr, CMOS_IO_PORT); + + return inb(CMOS_IO_PORT + 1); +} + +u16 cmos_read16(u8 addr) +{ + u16 value = 0; + u16 data; + int i; + + for (i = 0; i < sizeof(value); i++) { + data = cmos_read8(addr + i); + value |= data << (i << 3); + } + + return value; +} + +u32 cmos_read32(u8 addr) +{ + u32 value = 0; + u32 data; + int i; + + for (i = 0; i < sizeof(value); i++) { + data = cmos_read8(addr + i); + value |= data << (i << 3); + } + + return value; +} |