Marc Jones (marc.jones(a)se-eng.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/7891
-gerrit
commit 8dd5989b4a167846fc8d76cd9e1baf99bf5e6162
Author: Gabe Black <gabeblack(a)google.com>
Date: Wed Apr 30 21:41:23 2014 -0700
elog: Use the RTC driver interface instead of reading CMOS directly.
Use the RTC driver interface to find the timestamp for events instead of
reading the CMOS based RTC directly on x86 or punting on ARM. This makes
timestamps available on both architectures, assuming an RTC driver is
available.
BUG=None
TEST=Built and booted on nyan_big and link and verified that the timestamps
in the event log were accurate.
BRANCH=nyan
Original-Change-Id: Id45da53bc7ddfac8dd0978e7f2a3b8bc2c7ea753
Original-Signed-off-by: Gabe Black <gabeblack(a)google.com>
Original-Reviewed-on: https://chromium-review.googlesource.com/197798
Original-Reviewed-by: David Hendricks <dhendrix(a)chromium.org>
Original-Tested-by: Gabe Black <gabeblack(a)chromium.org>
Original-Commit-Queue: Gabe Black <gabeblack(a)chromium.org>
(cherry picked from commit 493b05e06dd461532c9366fb09025efb3568a975)
Signed-off-by: Marc Jones <marc.jones(a)se-eng.com>
Change-Id: I4fad296ecfeff8987e4a18054661190239245f32
---
src/drivers/elog/elog.c | 25 +++++++++++--------------
1 file changed, 11 insertions(+), 14 deletions(-)
diff --git a/src/drivers/elog/elog.c b/src/drivers/elog/elog.c
index 92d5af3..85198e2 100644
--- a/src/drivers/elog/elog.c
+++ b/src/drivers/elog/elog.c
@@ -25,6 +25,8 @@
#if CONFIG_ARCH_X86
#include <pc80/mc146818rtc.h>
#endif
+#include <bcd.h>
+#include <rtc.h>
#include <smbios.h>
#include <spi-generic.h>
#include <spi_flash.h>
@@ -637,20 +639,15 @@ int elog_init(void)
*/
static void elog_fill_timestamp(struct event_header *event)
{
-#if CONFIG_ARCH_X86
- event->second = cmos_read(RTC_CLK_SECOND);
- event->minute = cmos_read(RTC_CLK_MINUTE);
- event->hour = cmos_read(RTC_CLK_HOUR);
- event->day = cmos_read(RTC_CLK_DAYOFMONTH);
- event->month = cmos_read(RTC_CLK_MONTH);
- event->year = cmos_read(RTC_CLK_YEAR);
-#else
- /*
- * FIXME: We need to abstract the CMOS stuff on non-x86 platforms.
- * Until then, use bogus data here to force the values to 0.
- */
- event->month = 0xff;
-#endif
+ struct rtc_time time;
+
+ rtc_get(&time);
+ event->second = bin2bcd(time.sec);
+ event->minute = bin2bcd(time.min);
+ event->hour = bin2bcd(time.hour);
+ event->day = bin2bcd(time.mday);
+ event->month = bin2bcd(time.mon);
+ event->year = bin2bcd(time.year) & 0xff;
/* Basic sanity check of expected ranges */
if (event->month > 0x12 || event->day > 0x31 || event->hour > 0x23 ||
Marc Jones (marc.jones(a)se-eng.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/7889
-gerrit
commit 5803eb9e7f73f16d2412bb4db37c194602ed0883
Author: Marc Jones <marc.jones(a)se-eng.com>
Date: Mon Dec 29 21:31:44 2014 -0700
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 as lost state now uses the RTC driver instead of accessing the those
registers directly.
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
Original-Change-Id: Ifa807898e583254e57167fd44932ea86627a02ee
Original-Signed-off-by: Gabe Black <gabeblack(a)google.com>
Original-Reviewed-on: https://chromium-review.googlesource.com/197795
Original-Reviewed-by: David Hendricks <dhendrix(a)chromium.org>
Original-Tested-by: Gabe Black <gabeblack(a)chromium.org>
Original-Commit-Queue: Gabe Black <gabeblack(a)chromium.org>
This is the first half of the patch.
(cherry picked from commit 9e0fd75142d29afe34f6c6b9ce0099f478ca5a93)
Signed-off-by: Marc Jones <marc.jones(a)se-eng.com>
Change-Id: I159f9b4872a0bb932961b4168b180c087dfb1883
---
src/drivers/pc80/Kconfig | 5 ++
src/drivers/pc80/Makefile.inc | 7 +-
src/drivers/pc80/mc146818rtc.c | 149 +++++++++++++++++++++++++++--------------
src/include/bcd.h | 35 ++++++++++
src/include/rtc.h | 37 ++++++++++
5 files changed, 179 insertions(+), 54 deletions(-)
diff --git a/src/drivers/pc80/Kconfig b/src/drivers/pc80/Kconfig
index 5fad3a5..5b05f46 100644
--- a/src/drivers/pc80/Kconfig
+++ b/src/drivers/pc80/Kconfig
@@ -22,3 +22,8 @@ config LPC_TPM
Enable this option to enable TPM support in coreboot.
If unsure, say N.
+
+config DRIVERS_MC146818
+ bool
+ default y if ARCH_X86
+ default n if !ARCH_X86
diff --git a/src/drivers/pc80/Makefile.inc b/src/drivers/pc80/Makefile.inc
index fe6d11f..2926c56 100644
--- a/src/drivers/pc80/Makefile.inc
+++ b/src/drivers/pc80/Makefile.inc
@@ -1,5 +1,5 @@
-romstage-y += mc146818rtc.c
-ramstage-y += mc146818rtc.c
+romstage-$(CONFIG_DRIVERS_MC146818) += mc146818rtc.c
+ramstage-$(CONFIG_DRIVERS_MC146818) += mc146818rtc.c
ramstage-y += isa-dma.c
ramstage-y += i8254.c
ramstage-y += i8259.c
@@ -7,7 +7,10 @@ ramstage-$(CONFIG_UDELAY_IO) += udelay_io.c
ramstage-y += keyboard.c
ramstage-$(CONFIG_SPKMODEM) += spkmodem.c
+ifeq ($(CONFIG_DRIVERS_MC146818),y)
romstage-$(CONFIG_USE_OPTION_TABLE) += mc146818rtc_early.c
+endif
+
romstage-$(CONFIG_LPC_TPM) += tpm.c
romstage-$(CONFIG_SPKMODEM) += spkmodem.c
diff --git a/src/drivers/pc80/mc146818rtc.c b/src/drivers/pc80/mc146818rtc.c
index 014a8c9..9e77bd2 100644
--- a/src/drivers/pc80/mc146818rtc.c
+++ b/src/drivers/pc80/mc146818rtc.c
@@ -1,28 +1,52 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright 2014 The Chromium OS Authors. All rights reserved.
+ *
+ * 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
+ */
+
+#include <bcd.h>
#include <stdint.h>
#include <version.h>
#include <console/console.h>
#include <pc80/mc146818rtc.h>
#include <boot/coreboot_tables.h>
+#include <rtc.h>
#include <string.h>
#if CONFIG_USE_OPTION_TABLE
#include "option_table.h"
#include <cbfs.h>
#endif
+#if CONFIG_HAVE_ACPI_RESUME
#include <arch/acpi.h>
+#endif
-static void cmos_update_date(u8 has_century)
+static void cmos_reset_date(u8 has_century)
{
/* Now setup a default date equals to the build date */
- cmos_write(0, RTC_CLK_SECOND);
- cmos_write(0, RTC_CLK_MINUTE);
- cmos_write(1, RTC_CLK_HOUR);
- cmos_write(coreboot_build_date.weekday + 1, RTC_CLK_DAYOFWEEK);
- cmos_write(coreboot_build_date.day, RTC_CLK_DAYOFMONTH);
- cmos_write(coreboot_build_date.month, RTC_CLK_MONTH);
- cmos_write(coreboot_build_date.year, RTC_CLK_YEAR);
- if (has_century)
- cmos_write(coreboot_build_date.century, RTC_CLK_ALTCENTURY);
+ struct rtc_time time = {
+ .sec = 0,
+ .min = 0,
+ .hour = 1,
+ .mday = bcd2bin(coreboot_build_date.day),
+ .mon = bcd2bin(coreboot_build_date.month),
+ .year = 2000 + bcd2bin(coreboot_build_date.year),
+ .wday = bcd2bin(coreboot_build_date.weekday)
+ };
+ rtc_set(&time, has_century);
}
#if CONFIG_USE_OPTION_TABLE
@@ -50,15 +74,8 @@ static void cmos_set_checksum(int range_start, int range_end, int cks_loc)
}
#endif
-#if CONFIG_ARCH_X86
#define RTC_CONTROL_DEFAULT (RTC_24H)
#define RTC_FREQ_SELECT_DEFAULT (RTC_REF_CLCK_32KHZ | RTC_RATE_1024HZ)
-#else
-#if CONFIG_ARCH_ALPHA
-#define RTC_CONTROL_DEFAULT (RTC_SQWE | RTC_24H)
-#define RTC_FREQ_SELECT_DEFAULT (RTC_REF_CLCK_32KHZ | RTC_RATE_1024HZ)
-#endif
-#endif
#ifndef __SMM__
void cmos_init(int invalid)
@@ -69,16 +86,15 @@ void cmos_init(int invalid)
unsigned char x;
#endif
-#ifndef __PRE_RAM__
- /*
- * Avoid clearing pending interrupts and resetting the RTC control
+#if CONFIG_HAVE_ACPI_RESUME
+ /* Avoid clearing pending interrupts and resetting the RTC control
* register in the resume path because the Linux kernel relies on
- * this to know if it should restart the RTC timer queue if the wake
+ * this to know if it should restart the RTC timerqueue if the wake
* was due to the RTC alarm.
*/
- if (acpi_is_wakeup_s3())
+ if (acpi_get_sleep_type() == 3)
return;
-#endif /* __PRE_RAM__ */
+#endif
printk(BIOS_DEBUG, "RTC Init\n");
@@ -107,7 +123,7 @@ void cmos_init(int invalid)
cmos_write(0, i);
#endif
if (cmos_invalid)
- cmos_update_date(RTC_HAS_NO_ALTCENTURY);
+ cmos_reset_date(RTC_HAS_NO_ALTCENTURY);
printk(BIOS_WARNING, "RTC:%s%s%s%s\n",
invalid?" Clear requested":"",
@@ -142,14 +158,13 @@ void cmos_init(int invalid)
#if CONFIG_USE_OPTION_TABLE
/*
- * This routine returns the value of the requested bits.
+ * This routine returns the value of the requested bits
* input bit = bit count from the beginning of the cmos image
* length = number of bits to include in the value
- * ret = a character pointer to where the value is to be returned
- * returns CB_SUCCESS = successful, cb_err code if an error occurred
+ * vret = a character pointer to where the value is to be returned
+ * returns 0 = successful, -1 = an error occurred
*/
-static enum cb_err get_cmos_value(unsigned long bit, unsigned long length,
- void *vret)
+static int get_cmos_value(unsigned long bit, unsigned long length, void *vret)
{
unsigned char *ret;
unsigned long byte,byte_bit;
@@ -174,10 +189,10 @@ static enum cb_err get_cmos_value(unsigned long bit, unsigned long length,
ret[i] = cmos_read(byte);
}
}
- return CB_SUCCESS;
+ return 0;
}
-enum cb_err get_option(void *dest, const char *name)
+int get_option(void *dest, const char *name)
{
struct cmos_option_table *ct;
struct cmos_entries *ce;
@@ -193,7 +208,7 @@ enum cb_err get_option(void *dest, const char *name)
if (!ct) {
printk(BIOS_ERR, "RTC: cmos_layout.bin could not be found. "
"Options are disabled\n");
- return CB_CMOS_LAYOUT_NOT_FOUND;
+ return -2;
}
ce = (struct cmos_entries*)((unsigned char *)ct + ct->header_length);
for(; ce->tag == LB_TAG_OPTION;
@@ -205,18 +220,18 @@ enum cb_err get_option(void *dest, const char *name)
}
if (!found) {
printk(BIOS_DEBUG, "WARNING: No CMOS option '%s'.\n", name);
- return CB_CMOS_OPTION_NOT_FOUND;
+ return -2;
}
- if (get_cmos_value(ce->bit, ce->length, dest) != CB_SUCCESS)
- return CB_CMOS_ACCESS_ERROR;
- if (!cmos_checksum_valid(LB_CKS_RANGE_START, LB_CKS_RANGE_END, LB_CKS_LOC))
- return CB_CMOS_CHECKSUM_INVALID;
- return CB_SUCCESS;
+ if (get_cmos_value(ce->bit, ce->length, dest))
+ return -3;
+ if (!cmos_checksum_valid(LB_CKS_RANGE_START, LB_CKS_RANGE_END,
+ LB_CKS_LOC))
+ return -4;
+ return 0 ;
}
-static enum cb_err set_cmos_value(unsigned long bit, unsigned long length,
- void *vret)
+static int set_cmos_value(unsigned long bit, unsigned long length, void *vret)
{
unsigned char *ret;
unsigned long byte,byte_bit;
@@ -239,7 +254,7 @@ static enum cb_err set_cmos_value(unsigned long bit, unsigned long length,
chksum_update_needed = 1;
} else { /* more that one byte so transfer the whole bytes */
if (byte_bit || length % 8)
- return CB_ERR_ARG;
+ return -1;
for (i = 0; length; i++, length -= 8, byte++)
cmos_write(ret[i], byte);
@@ -252,11 +267,11 @@ static enum cb_err set_cmos_value(unsigned long bit, unsigned long length,
cmos_set_checksum(LB_CKS_RANGE_START, LB_CKS_RANGE_END,
LB_CKS_LOC);
}
- return CB_SUCCESS;
+ return 0;
}
-enum cb_err set_option(const char *name, void *value)
+int set_option(const char *name, void *value)
{
struct cmos_option_table *ct;
struct cmos_entries *ce;
@@ -273,7 +288,7 @@ enum cb_err set_option(const char *name, void *value)
if (!ct) {
printk(BIOS_ERR, "cmos_layout.bin could not be found. "
"Options are disabled\n");
- return CB_CMOS_LAYOUT_NOT_FOUND;
+ return -2;
}
ce = (struct cmos_entries*)((unsigned char *)ct + ct->header_length);
for(; ce->tag == LB_TAG_OPTION;
@@ -285,22 +300,21 @@ enum cb_err set_option(const char *name, void *value)
}
if (!found) {
printk(BIOS_DEBUG, "WARNING: No CMOS option '%s'.\n", name);
- return CB_CMOS_OPTION_NOT_FOUND;
+ return -2;
}
length = ce->length;
if (ce->config == 's') {
length = MAX(strlen((const char *)value) * 8, ce->length - 8);
/* make sure the string is null terminated */
- if (set_cmos_value(ce->bit + ce->length - 8, 8, &(u8[]){0})
- != CB_SUCCESS)
- return (CB_CMOS_ACCESS_ERROR);
+ if ((set_cmos_value(ce->bit + ce->length - 8, 8, &(u8[]){0})))
+ return -3;
}
- if (set_cmos_value(ce->bit, length, value) != CB_SUCCESS)
- return (CB_CMOS_ACCESS_ERROR);
+ if ((set_cmos_value(ce->bit, length, value)))
+ return -3;
- return CB_SUCCESS;
+ return 0;
}
#endif /* CONFIG_USE_OPTION_TABLE */
@@ -323,5 +337,36 @@ void cmos_check_update_date(u8 has_century)
* if the date is valid.
*/
if (century > 0x99 || year > 0x99) /* Invalid date */
- cmos_update_date(has_century);
+ cmos_reset_date(has_century);
+}
+
+int rtc_set(const struct rtc_time *time, u8 has_century)
+{
+ cmos_write(bin2bcd(time->sec), RTC_CLK_SECOND);
+ cmos_write(bin2bcd(time->min), RTC_CLK_MINUTE);
+ cmos_write(bin2bcd(time->hour), RTC_CLK_HOUR);
+ cmos_write(bin2bcd(time->mday), RTC_CLK_DAYOFMONTH);
+ cmos_write(bin2bcd(time->mon), RTC_CLK_MONTH);
+ cmos_write(bin2bcd(time->year % 100), RTC_CLK_YEAR);
+ if (has_century)
+ cmos_write(bin2bcd(time->year / 100),
+ RTC_CLK_ALTCENTURY);
+ cmos_write(bin2bcd(time->wday + 1), RTC_CLK_DAYOFWEEK);
+ return 0;
+}
+
+int rtc_get(struct rtc_time *time, u8 has_century)
+{
+ time->sec = bcd2bin(cmos_read(RTC_CLK_SECOND));
+ time->min = bcd2bin(cmos_read(RTC_CLK_MINUTE));
+ time->hour = bcd2bin(cmos_read(RTC_CLK_HOUR));
+ time->mday = bcd2bin(cmos_read(RTC_CLK_DAYOFMONTH));
+ time->mon = bcd2bin(cmos_read(RTC_CLK_MONTH));
+ time->year = bcd2bin(cmos_read(RTC_CLK_YEAR));
+ if (has_century)
+ time->year += bcd2bin(cmos_read(RTC_CLK_ALTCENTURY)) * 100;
+ else
+ time->year += 2000;
+ time->wday = bcd2bin(cmos_read(RTC_CLK_DAYOFWEEK)) - 1;
+ return 0;
}
diff --git a/src/include/bcd.h b/src/include/bcd.h
new file mode 100644
index 0000000..a085027
--- /dev/null
+++ b/src/include/bcd.h
@@ -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_ */
diff --git a/src/include/rtc.h b/src/include/rtc.h
new file mode 100644
index 0000000..ed32b69
--- /dev/null
+++ b/src/include/rtc.h
@@ -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, u8 has_century);
+int rtc_get(struct rtc_time *time, u8 has_century);
+
+#endif /* _RTC_H_ */
Edward O'Callaghan (eocallaghan(a)alterapraxis.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/7985
-gerrit
commit d193de310c011aa153b964e614dd09d10bf6ba13
Author: Edward O'Callaghan <eocallaghan(a)alterapraxis.com>
Date: Tue Dec 30 15:34:43 2014 +1100
mainboard/lenovo/t530/Kconfig: No Super I/O on this board
Disable Super I/O related topics showing in menuconfig.
Change-Id: I246bc935147baf6ff2dfcb306079cc2d4c7cb153
Signed-off-by: Edward O'Callaghan <eocallaghan(a)alterapraxis.com>
---
src/mainboard/lenovo/t530/Kconfig | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/mainboard/lenovo/t530/Kconfig b/src/mainboard/lenovo/t530/Kconfig
index d3cf1c5..2dcfa90 100644
--- a/src/mainboard/lenovo/t530/Kconfig
+++ b/src/mainboard/lenovo/t530/Kconfig
@@ -8,6 +8,7 @@ config BOARD_SPECIFIC_OPTIONS # dummy
select SOUTHBRIDGE_INTEL_C216
select EC_LENOVO_PMH7
select EC_LENOVO_H8
+ select NO_UART_ON_SUPERIO
select BOARD_ROMSIZE_KB_12288
select HAVE_ACPI_TABLES
select HAVE_OPTION_TABLE
Edward O'Callaghan (eocallaghan(a)alterapraxis.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/7929
-gerrit
commit e375dc315f732f049026f7c7bd79ad5d69f34791
Author: Edward O'Callaghan <eocallaghan(a)alterapraxis.com>
Date: Fri Dec 26 13:58:56 2014 +1100
soc/samsung/exynos: Layout common code framework
Layout the framework to merge common components between Exynos
families.
Change-Id: Ic8896e791dac9757c2bd19f390d0a5821f96fc06
Signed-off-by: Edward O'Callaghan <eocallaghan(a)alterapraxis.com>
---
src/soc/samsung/Kconfig | 1 +
src/soc/samsung/Makefile.inc | 1 +
src/soc/samsung/exynos/Kconfig | 11 ++++++
src/soc/samsung/exynos/Makefile.inc | 19 ++++++++++
src/soc/samsung/exynos/bootblock.c | 55 +++++++++++++++++++++++++++
src/soc/samsung/exynos/cbmem.c | 27 +++++++++++++
src/soc/samsung/exynos/mct.c | 36 ++++++++++++++++++
src/soc/samsung/exynos/monotonic_timer.c | 34 +++++++++++++++++
src/soc/samsung/exynos/wakeup.c | 57 ++++++++++++++++++++++++++++
src/soc/samsung/exynos/wakeup.h | 43 +++++++++++++++++++++
src/soc/samsung/exynos5250/Kconfig | 8 +---
src/soc/samsung/exynos5250/Makefile.inc | 14 ++-----
src/soc/samsung/exynos5250/bootblock.c | 55 ---------------------------
src/soc/samsung/exynos5250/cbmem.c | 27 -------------
src/soc/samsung/exynos5250/mct.c | 36 ------------------
src/soc/samsung/exynos5250/monotonic_timer.c | 34 -----------------
src/soc/samsung/exynos5250/wakeup.c | 57 ----------------------------
src/soc/samsung/exynos5250/wakeup.h | 43 ---------------------
src/soc/samsung/exynos5420/Kconfig | 9 +----
src/soc/samsung/exynos5420/Makefile.inc | 14 ++-----
src/soc/samsung/exynos5420/bootblock.c | 55 ---------------------------
src/soc/samsung/exynos5420/cbmem.c | 27 -------------
src/soc/samsung/exynos5420/mct.c | 36 ------------------
src/soc/samsung/exynos5420/monotonic_timer.c | 34 -----------------
src/soc/samsung/exynos5420/wakeup.c | 57 ----------------------------
src/soc/samsung/exynos5420/wakeup.h | 43 ---------------------
26 files changed, 292 insertions(+), 541 deletions(-)
diff --git a/src/soc/samsung/Kconfig b/src/soc/samsung/Kconfig
index 9241d27..8bb0aa2 100644
--- a/src/soc/samsung/Kconfig
+++ b/src/soc/samsung/Kconfig
@@ -1,2 +1,3 @@
+source src/soc/samsung/exynos/Kconfig
source src/soc/samsung/exynos5250/Kconfig
source src/soc/samsung/exynos5420/Kconfig
diff --git a/src/soc/samsung/Makefile.inc b/src/soc/samsung/Makefile.inc
index 496b5f7..7a4123f 100644
--- a/src/soc/samsung/Makefile.inc
+++ b/src/soc/samsung/Makefile.inc
@@ -1,2 +1,3 @@
+subdirs-$(CONFIG_CPU_SAMSUNG_EXYNOS) += exynos
subdirs-$(CONFIG_CPU_SAMSUNG_EXYNOS5250) += exynos5250
subdirs-$(CONFIG_CPU_SAMSUNG_EXYNOS5420) += exynos5420
diff --git a/src/soc/samsung/exynos/Kconfig b/src/soc/samsung/exynos/Kconfig
new file mode 100644
index 0000000..63f1a45
--- /dev/null
+++ b/src/soc/samsung/exynos/Kconfig
@@ -0,0 +1,11 @@
+config CPU_SAMSUNG_EXYNOS
+ select ARCH_BOOTBLOCK_ARMV7
+ select ARCH_ROMSTAGE_ARMV7
+ select ARCH_RAMSTAGE_ARMV7
+ select CPU_HAS_BOOTBLOCK_INIT
+ select HAVE_MONOTONIC_TIMER
+ select HAVE_UART_SPECIAL
+ select RELOCATABLE_MODULES
+ select DYNAMIC_CBMEM
+ bool
+ default n
diff --git a/src/soc/samsung/exynos/Makefile.inc b/src/soc/samsung/exynos/Makefile.inc
new file mode 100644
index 0000000..490c816
--- /dev/null
+++ b/src/soc/samsung/exynos/Makefile.inc
@@ -0,0 +1,19 @@
+bootblock-y += bootblock.c
+bootblock-y += mct.c
+##bootblock-y += mct.c power.c
+bootblock-y += wakeup.c
+
+# Clock is required for UART
+bootblock-$(CONFIG_BOOTBLOCK_CONSOLE) += monotonic_timer.c
+
+romstage-y += mct.c
+romstage-y += monotonic_timer.c
+romstage-y += cbmem.c
+#romstage-y += power.c
+romstage-y += wakeup.c
+
+ramstage-y += mct.c
+ramstage-y += monotonic_timer.c
+ramstage-y += cbmem.c
+#ramstage-y += power.c
+#ramstage-y += usb.c
diff --git a/src/soc/samsung/exynos/bootblock.c b/src/soc/samsung/exynos/bootblock.c
new file mode 100644
index 0000000..5d2d2b7
--- /dev/null
+++ b/src/soc/samsung/exynos/bootblock.c
@@ -0,0 +1,55 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright 2013 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
+ */
+
+#include <bootblock_common.h>
+#include <arch/cache.h>
+
+#include "clk.h"
+#include "wakeup.h"
+#include "cpu.h"
+
+/* convenient shorthand (in MB) */
+#define SRAM_START (EXYNOS5_SRAM_BASE >> 20)
+#define SRAM_SIZE 1
+#define SRAM_END (SRAM_START + SRAM_SIZE) /* plus one... */
+
+void bootblock_cpu_init(void)
+{
+ /* kick off the multi-core timer.
+ * We want to do this as early as we can.
+ */
+ mct_start();
+
+ if (get_wakeup_state() == WAKEUP_DIRECT) {
+ wakeup();
+ /* Never returns. */
+ }
+
+ /* set up dcache and MMU */
+ mmu_init();
+ mmu_disable_range(0, SRAM_START);
+ mmu_config_range(SRAM_START, SRAM_SIZE, DCACHE_WRITEBACK);
+ mmu_config_range(SRAM_END, 4096 - SRAM_END, DCACHE_OFF);
+ dcache_mmu_enable();
+
+ /* For most ARM systems, we have to initialize firmware media source
+ * (ex, SPI, SD/MMC, or eMMC) now; but for Exynos platform, that is
+ * already handled by iROM so there's no need to setup again.
+ */
+}
diff --git a/src/soc/samsung/exynos/cbmem.c b/src/soc/samsung/exynos/cbmem.c
new file mode 100644
index 0000000..4650320
--- /dev/null
+++ b/src/soc/samsung/exynos/cbmem.c
@@ -0,0 +1,27 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright 2013 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
+ */
+
+#include <stddef.h>
+#include <cbmem.h>
+#include "cpu.h"
+
+void *cbmem_top(void)
+{
+ return (void *)(get_fb_base_kb() * KiB);
+}
diff --git a/src/soc/samsung/exynos/mct.c b/src/soc/samsung/exynos/mct.c
new file mode 100644
index 0000000..bbb90e4
--- /dev/null
+++ b/src/soc/samsung/exynos/mct.c
@@ -0,0 +1,36 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright 2012 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
+ */
+
+#include <stdint.h>
+#include <arch/io.h>
+#include "clk.h"
+
+uint64_t mct_raw_value(void)
+{
+ uint64_t upper = readl(&exynos_mct->g_cnt_u);
+ uint64_t lower = readl(&exynos_mct->g_cnt_l);
+
+ return (upper << 32) | lower;
+}
+
+void mct_start(void)
+{
+ writel(readl(&exynos_mct->g_tcon) | (0x1 << 8),
+ &exynos_mct->g_tcon);
+}
diff --git a/src/soc/samsung/exynos/monotonic_timer.c b/src/soc/samsung/exynos/monotonic_timer.c
new file mode 100644
index 0000000..89ac416
--- /dev/null
+++ b/src/soc/samsung/exynos/monotonic_timer.c
@@ -0,0 +1,34 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright 2013 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
+ */
+
+#include <stdint.h>
+#include <timer.h>
+
+#include "clk.h"
+
+static const uint32_t clocks_per_usec = MCT_HZ/1000000;
+
+void timer_monotonic_get(struct mono_time *mt)
+{
+ /* We don't have to call mct_start() here
+ * because it was already called in the bootblock
+ */
+
+ mono_time_set_usecs(mt, mct_raw_value() / clocks_per_usec);
+}
diff --git a/src/soc/samsung/exynos/wakeup.c b/src/soc/samsung/exynos/wakeup.c
new file mode 100644
index 0000000..a240717
--- /dev/null
+++ b/src/soc/samsung/exynos/wakeup.c
@@ -0,0 +1,57 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright 2013 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
+ */
+
+#include <arch/cache.h>
+#include <console/console.h>
+#include "power.h"
+#include "wakeup.h"
+
+void wakeup(void)
+{
+ if (wakeup_need_reset())
+ power_reset();
+
+ power_init(); /* Ensure ps_hold_setup() for early wakeup. */
+ dcache_mmu_disable();
+ power_exit_wakeup();
+ /* Should never return. If we do, reset. */
+ power_reset();
+}
+
+int get_wakeup_state(void)
+{
+ uint32_t status = power_read_reset_status();
+
+ /* DIDLE/LPA can be resumed without clock reset (ex, bootblock),
+ * and SLEEP requires resetting clock (should be done in ROM stage).
+ */
+
+ if (status == S5P_CHECK_DIDLE || status == S5P_CHECK_LPA)
+ return WAKEUP_DIRECT;
+
+ if (status == S5P_CHECK_SLEEP)
+ return WAKEUP_NEED_CLOCK_RESET;
+
+ return IS_NOT_WAKEUP;
+}
+
+void wakeup_enable_uart(void)
+{
+ power_release_uart_retention();
+}
diff --git a/src/soc/samsung/exynos/wakeup.h b/src/soc/samsung/exynos/wakeup.h
new file mode 100644
index 0000000..91025c3
--- /dev/null
+++ b/src/soc/samsung/exynos/wakeup.h
@@ -0,0 +1,43 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright 2013 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 CPU_SAMSUNG_EXYNOS_WAKEUP_H
+#define CPU_SAMSUNG_EXYNOS_WAKEUP_H
+
+/* Power Down Modes */
+#define S5P_CHECK_SLEEP 0x00000BAD
+#define S5P_CHECK_DIDLE 0xBAD00000
+#define S5P_CHECK_LPA 0xABAD0000
+
+enum {
+ // A normal boot (not suspend/resume)
+ IS_NOT_WAKEUP,
+ // A wake up event that can be resumed any time
+ WAKEUP_DIRECT,
+ // A wake up event that must be resumed only after
+ // clock and memory controllers are re-initialized
+ WAKEUP_NEED_CLOCK_RESET,
+};
+
+int wakeup_need_reset(void);
+int get_wakeup_state(void);
+void wakeup(void);
+void wakeup_enable_uart(void);
+
+#endif /* CPU_SAMSUNG_EXYNOS_WAKEUP_H */
diff --git a/src/soc/samsung/exynos5250/Kconfig b/src/soc/samsung/exynos5250/Kconfig
index 8d7c867..2193126 100644
--- a/src/soc/samsung/exynos5250/Kconfig
+++ b/src/soc/samsung/exynos5250/Kconfig
@@ -1,13 +1,7 @@
config CPU_SAMSUNG_EXYNOS5250
- select ARCH_BOOTBLOCK_ARMV7
- select ARCH_ROMSTAGE_ARMV7
- select ARCH_RAMSTAGE_ARMV7
- select CPU_HAS_BOOTBLOCK_INIT
- select HAVE_MONOTONIC_TIMER
- select HAVE_UART_SPECIAL
- select DYNAMIC_CBMEM
bool
default n
+ select CPU_SAMSUNG_EXYNOS
if CPU_SAMSUNG_EXYNOS5250
diff --git a/src/soc/samsung/exynos5250/Makefile.inc b/src/soc/samsung/exynos5250/Makefile.inc
index 735ce2e..cce65e5 100644
--- a/src/soc/samsung/exynos5250/Makefile.inc
+++ b/src/soc/samsung/exynos5250/Makefile.inc
@@ -1,14 +1,11 @@
bootblock-y += spi.c alternate_cbfs.c
-bootblock-y += bootblock.c
-bootblock-y += pinmux.c mct.c power.c
+bootblock-y += pinmux.c power.c
# Clock is required for UART
bootblock-$(CONFIG_BOOTBLOCK_CONSOLE) += clock_init.c
bootblock-$(CONFIG_BOOTBLOCK_CONSOLE) += clock.c
-bootblock-$(CONFIG_BOOTBLOCK_CONSOLE) += monotonic_timer.c
ifeq ($(CONFIG_DRIVERS_UART),y)
bootblock-$(CONFIG_BOOTBLOCK_CONSOLE) += uart.c
endif
-bootblock-y += wakeup.c
bootblock-y += gpio.c
bootblock-$(CONFIG_BOOTBLOCK_CONSOLE) += timer.c
@@ -19,16 +16,12 @@ romstage-y += pinmux.c # required by s3c24x0_i2c and uart.
romstage-y += dmc_common.c
romstage-y += dmc_init_ddr3.c
romstage-y += power.c
-romstage-y += mct.c
-romstage-y += monotonic_timer.c
romstage-$(CONFIG_DRIVERS_UART) += uart.c
-romstage-y += wakeup.c
romstage-y += gpio.c
romstage-y += timer.c
romstage-y += trustzone.c
romstage-y += i2c.c
#romstage-y += wdt.c
-romstage-y += cbmem.c
ramstage-y += spi.c alternate_cbfs.c
ramstage-y += clock.c
@@ -38,15 +31,14 @@ ramstage-y += power.c
ramstage-$(CONFIG_DRIVERS_UART) += uart.c
ramstage-y += cpu.c
ramstage-y += tmu.c
-ramstage-y += mct.c
-ramstage-y += monotonic_timer.c
ramstage-y += timer.c
ramstage-y += gpio.c
ramstage-y += i2c.c
ramstage-y += dp-reg.c
ramstage-y += fb.c
ramstage-y += usb.c
-ramstage-y += cbmem.c
+
+CPPFLAGS_common += -Isrc/soc/samsung/exynos/
$(objcbfs)/bootblock.raw.elf: $(objcbfs)/bootblock.elf
cp $< $@
diff --git a/src/soc/samsung/exynos5250/bootblock.c b/src/soc/samsung/exynos5250/bootblock.c
deleted file mode 100644
index 5d2d2b7..0000000
--- a/src/soc/samsung/exynos5250/bootblock.c
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright 2013 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
- */
-
-#include <bootblock_common.h>
-#include <arch/cache.h>
-
-#include "clk.h"
-#include "wakeup.h"
-#include "cpu.h"
-
-/* convenient shorthand (in MB) */
-#define SRAM_START (EXYNOS5_SRAM_BASE >> 20)
-#define SRAM_SIZE 1
-#define SRAM_END (SRAM_START + SRAM_SIZE) /* plus one... */
-
-void bootblock_cpu_init(void)
-{
- /* kick off the multi-core timer.
- * We want to do this as early as we can.
- */
- mct_start();
-
- if (get_wakeup_state() == WAKEUP_DIRECT) {
- wakeup();
- /* Never returns. */
- }
-
- /* set up dcache and MMU */
- mmu_init();
- mmu_disable_range(0, SRAM_START);
- mmu_config_range(SRAM_START, SRAM_SIZE, DCACHE_WRITEBACK);
- mmu_config_range(SRAM_END, 4096 - SRAM_END, DCACHE_OFF);
- dcache_mmu_enable();
-
- /* For most ARM systems, we have to initialize firmware media source
- * (ex, SPI, SD/MMC, or eMMC) now; but for Exynos platform, that is
- * already handled by iROM so there's no need to setup again.
- */
-}
diff --git a/src/soc/samsung/exynos5250/cbmem.c b/src/soc/samsung/exynos5250/cbmem.c
deleted file mode 100644
index 4650320..0000000
--- a/src/soc/samsung/exynos5250/cbmem.c
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright 2013 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
- */
-
-#include <stddef.h>
-#include <cbmem.h>
-#include "cpu.h"
-
-void *cbmem_top(void)
-{
- return (void *)(get_fb_base_kb() * KiB);
-}
diff --git a/src/soc/samsung/exynos5250/mct.c b/src/soc/samsung/exynos5250/mct.c
deleted file mode 100644
index bbb90e4..0000000
--- a/src/soc/samsung/exynos5250/mct.c
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright 2012 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
- */
-
-#include <stdint.h>
-#include <arch/io.h>
-#include "clk.h"
-
-uint64_t mct_raw_value(void)
-{
- uint64_t upper = readl(&exynos_mct->g_cnt_u);
- uint64_t lower = readl(&exynos_mct->g_cnt_l);
-
- return (upper << 32) | lower;
-}
-
-void mct_start(void)
-{
- writel(readl(&exynos_mct->g_tcon) | (0x1 << 8),
- &exynos_mct->g_tcon);
-}
diff --git a/src/soc/samsung/exynos5250/monotonic_timer.c b/src/soc/samsung/exynos5250/monotonic_timer.c
deleted file mode 100644
index 89ac416..0000000
--- a/src/soc/samsung/exynos5250/monotonic_timer.c
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright 2013 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
- */
-
-#include <stdint.h>
-#include <timer.h>
-
-#include "clk.h"
-
-static const uint32_t clocks_per_usec = MCT_HZ/1000000;
-
-void timer_monotonic_get(struct mono_time *mt)
-{
- /* We don't have to call mct_start() here
- * because it was already called in the bootblock
- */
-
- mono_time_set_usecs(mt, mct_raw_value() / clocks_per_usec);
-}
diff --git a/src/soc/samsung/exynos5250/wakeup.c b/src/soc/samsung/exynos5250/wakeup.c
deleted file mode 100644
index a240717..0000000
--- a/src/soc/samsung/exynos5250/wakeup.c
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright 2013 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
- */
-
-#include <arch/cache.h>
-#include <console/console.h>
-#include "power.h"
-#include "wakeup.h"
-
-void wakeup(void)
-{
- if (wakeup_need_reset())
- power_reset();
-
- power_init(); /* Ensure ps_hold_setup() for early wakeup. */
- dcache_mmu_disable();
- power_exit_wakeup();
- /* Should never return. If we do, reset. */
- power_reset();
-}
-
-int get_wakeup_state(void)
-{
- uint32_t status = power_read_reset_status();
-
- /* DIDLE/LPA can be resumed without clock reset (ex, bootblock),
- * and SLEEP requires resetting clock (should be done in ROM stage).
- */
-
- if (status == S5P_CHECK_DIDLE || status == S5P_CHECK_LPA)
- return WAKEUP_DIRECT;
-
- if (status == S5P_CHECK_SLEEP)
- return WAKEUP_NEED_CLOCK_RESET;
-
- return IS_NOT_WAKEUP;
-}
-
-void wakeup_enable_uart(void)
-{
- power_release_uart_retention();
-}
diff --git a/src/soc/samsung/exynos5250/wakeup.h b/src/soc/samsung/exynos5250/wakeup.h
deleted file mode 100644
index 690c6a3..0000000
--- a/src/soc/samsung/exynos5250/wakeup.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright 2013 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 CPU_SAMSUNG_EXYNOS5250_WAKEUP_H
-#define CPU_SAMSUNG_EXYNOS5250_WAKEUP_H
-
-/* Power Down Modes */
-#define S5P_CHECK_SLEEP 0x00000BAD
-#define S5P_CHECK_DIDLE 0xBAD00000
-#define S5P_CHECK_LPA 0xABAD0000
-
-enum {
- // A normal boot (not suspend/resume)
- IS_NOT_WAKEUP,
- // A wake up event that can be resumed any time
- WAKEUP_DIRECT,
- // A wake up event that must be resumed only after
- // clock and memory controllers are re-initialized
- WAKEUP_NEED_CLOCK_RESET,
-};
-
-int wakeup_need_reset(void);
-int get_wakeup_state(void);
-void wakeup(void);
-void wakeup_enable_uart(void);
-
-#endif /* CPU_SAMSUNG_EXYNOS5250_WAKEUP_H */
diff --git a/src/soc/samsung/exynos5420/Kconfig b/src/soc/samsung/exynos5420/Kconfig
index 904091e..77d9cba 100644
--- a/src/soc/samsung/exynos5420/Kconfig
+++ b/src/soc/samsung/exynos5420/Kconfig
@@ -1,14 +1,7 @@
config CPU_SAMSUNG_EXYNOS5420
- select ARCH_BOOTBLOCK_ARMV7
- select ARCH_ROMSTAGE_ARMV7
- select ARCH_RAMSTAGE_ARMV7
- select CPU_HAS_BOOTBLOCK_INIT
- select HAVE_MONOTONIC_TIMER
- select HAVE_UART_SPECIAL
- select RELOCATABLE_MODULES
- select DYNAMIC_CBMEM
bool
default n
+ select CPU_SAMSUNG_EXYNOS
if CPU_SAMSUNG_EXYNOS5420
diff --git a/src/soc/samsung/exynos5420/Makefile.inc b/src/soc/samsung/exynos5420/Makefile.inc
index ac22620..e6d894c 100644
--- a/src/soc/samsung/exynos5420/Makefile.inc
+++ b/src/soc/samsung/exynos5420/Makefile.inc
@@ -1,14 +1,11 @@
bootblock-y += spi.c alternate_cbfs.c
-bootblock-y += bootblock.c
-bootblock-y += pinmux.c mct.c power.c
+bootblock-y += pinmux.c power.c
# Clock is required for UART
bootblock-$(CONFIG_BOOTBLOCK_CONSOLE) += clock_init.c
bootblock-$(CONFIG_BOOTBLOCK_CONSOLE) += clock.c
-bootblock-$(CONFIG_BOOTBLOCK_CONSOLE) += monotonic_timer.c
ifeq ($(CONFIG_DRIVERS_UART),y)
bootblock-$(CONFIG_BOOTBLOCK_CONSOLE) += uart.c
endif
-bootblock-y += wakeup.c
bootblock-y += gpio.c
bootblock-$(CONFIG_BOOTBLOCK_CONSOLE) += timer.c
@@ -20,15 +17,11 @@ romstage-y += pinmux.c # required by s3c24x0_i2c and uart.
romstage-y += dmc_common.c
romstage-y += dmc_init_ddr3.c
romstage-y += power.c
-romstage-y += mct.c
-romstage-y += monotonic_timer.c
romstage-$(CONFIG_DRIVERS_UART) += uart.c
-romstage-y += wakeup.c
romstage-y += gpio.c
romstage-y += timer.c
romstage-y += i2c.c
#romstage-y += wdt.c
-romstage-y += cbmem.c
romstage-y += trustzone.c
ramstage-y += spi.c alternate_cbfs.c
@@ -39,14 +32,13 @@ ramstage-y += power.c
ramstage-$(CONFIG_DRIVERS_UART) += uart.c
ramstage-y += cpu.c
ramstage-y += tmu.c
-ramstage-y += mct.c
-ramstage-y += monotonic_timer.c
ramstage-y += timer.c
ramstage-y += gpio.c
ramstage-y += i2c.c
ramstage-y += dp.c dp_lowlevel.c fimd.c
ramstage-y += usb.c
-ramstage-y += cbmem.c
+
+CPPFLAGS_common += -Isrc/soc/samsung/exynos/
$(objcbfs)/bootblock.raw.elf: $(objcbfs)/bootblock.elf
cp $< $@
diff --git a/src/soc/samsung/exynos5420/bootblock.c b/src/soc/samsung/exynos5420/bootblock.c
deleted file mode 100644
index 5d2d2b7..0000000
--- a/src/soc/samsung/exynos5420/bootblock.c
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright 2013 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
- */
-
-#include <bootblock_common.h>
-#include <arch/cache.h>
-
-#include "clk.h"
-#include "wakeup.h"
-#include "cpu.h"
-
-/* convenient shorthand (in MB) */
-#define SRAM_START (EXYNOS5_SRAM_BASE >> 20)
-#define SRAM_SIZE 1
-#define SRAM_END (SRAM_START + SRAM_SIZE) /* plus one... */
-
-void bootblock_cpu_init(void)
-{
- /* kick off the multi-core timer.
- * We want to do this as early as we can.
- */
- mct_start();
-
- if (get_wakeup_state() == WAKEUP_DIRECT) {
- wakeup();
- /* Never returns. */
- }
-
- /* set up dcache and MMU */
- mmu_init();
- mmu_disable_range(0, SRAM_START);
- mmu_config_range(SRAM_START, SRAM_SIZE, DCACHE_WRITEBACK);
- mmu_config_range(SRAM_END, 4096 - SRAM_END, DCACHE_OFF);
- dcache_mmu_enable();
-
- /* For most ARM systems, we have to initialize firmware media source
- * (ex, SPI, SD/MMC, or eMMC) now; but for Exynos platform, that is
- * already handled by iROM so there's no need to setup again.
- */
-}
diff --git a/src/soc/samsung/exynos5420/cbmem.c b/src/soc/samsung/exynos5420/cbmem.c
deleted file mode 100644
index 4650320..0000000
--- a/src/soc/samsung/exynos5420/cbmem.c
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright 2013 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
- */
-
-#include <stddef.h>
-#include <cbmem.h>
-#include "cpu.h"
-
-void *cbmem_top(void)
-{
- return (void *)(get_fb_base_kb() * KiB);
-}
diff --git a/src/soc/samsung/exynos5420/mct.c b/src/soc/samsung/exynos5420/mct.c
deleted file mode 100644
index bbb90e4..0000000
--- a/src/soc/samsung/exynos5420/mct.c
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright 2012 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
- */
-
-#include <stdint.h>
-#include <arch/io.h>
-#include "clk.h"
-
-uint64_t mct_raw_value(void)
-{
- uint64_t upper = readl(&exynos_mct->g_cnt_u);
- uint64_t lower = readl(&exynos_mct->g_cnt_l);
-
- return (upper << 32) | lower;
-}
-
-void mct_start(void)
-{
- writel(readl(&exynos_mct->g_tcon) | (0x1 << 8),
- &exynos_mct->g_tcon);
-}
diff --git a/src/soc/samsung/exynos5420/monotonic_timer.c b/src/soc/samsung/exynos5420/monotonic_timer.c
deleted file mode 100644
index 89ac416..0000000
--- a/src/soc/samsung/exynos5420/monotonic_timer.c
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright 2013 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
- */
-
-#include <stdint.h>
-#include <timer.h>
-
-#include "clk.h"
-
-static const uint32_t clocks_per_usec = MCT_HZ/1000000;
-
-void timer_monotonic_get(struct mono_time *mt)
-{
- /* We don't have to call mct_start() here
- * because it was already called in the bootblock
- */
-
- mono_time_set_usecs(mt, mct_raw_value() / clocks_per_usec);
-}
diff --git a/src/soc/samsung/exynos5420/wakeup.c b/src/soc/samsung/exynos5420/wakeup.c
deleted file mode 100644
index a240717..0000000
--- a/src/soc/samsung/exynos5420/wakeup.c
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright 2013 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
- */
-
-#include <arch/cache.h>
-#include <console/console.h>
-#include "power.h"
-#include "wakeup.h"
-
-void wakeup(void)
-{
- if (wakeup_need_reset())
- power_reset();
-
- power_init(); /* Ensure ps_hold_setup() for early wakeup. */
- dcache_mmu_disable();
- power_exit_wakeup();
- /* Should never return. If we do, reset. */
- power_reset();
-}
-
-int get_wakeup_state(void)
-{
- uint32_t status = power_read_reset_status();
-
- /* DIDLE/LPA can be resumed without clock reset (ex, bootblock),
- * and SLEEP requires resetting clock (should be done in ROM stage).
- */
-
- if (status == S5P_CHECK_DIDLE || status == S5P_CHECK_LPA)
- return WAKEUP_DIRECT;
-
- if (status == S5P_CHECK_SLEEP)
- return WAKEUP_NEED_CLOCK_RESET;
-
- return IS_NOT_WAKEUP;
-}
-
-void wakeup_enable_uart(void)
-{
- power_release_uart_retention();
-}
diff --git a/src/soc/samsung/exynos5420/wakeup.h b/src/soc/samsung/exynos5420/wakeup.h
deleted file mode 100644
index 27ce8e2..0000000
--- a/src/soc/samsung/exynos5420/wakeup.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright 2013 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 CPU_SAMSUNG_EXYNOS5420_WAKEUP_H
-#define CPU_SAMSUNG_EXYNOS5420_WAKEUP_H
-
-/* Power Down Modes */
-#define S5P_CHECK_SLEEP 0x00000BAD
-#define S5P_CHECK_DIDLE 0xBAD00000
-#define S5P_CHECK_LPA 0xABAD0000
-
-enum {
- // A normal boot (not suspend/resume)
- IS_NOT_WAKEUP,
- // A wake up event that can be resumed any time
- WAKEUP_DIRECT,
- // A wake up event that must be resumed only after
- // clock and memory controllers are re-initialized
- WAKEUP_NEED_CLOCK_RESET,
-};
-
-int wakeup_need_reset(void);
-int get_wakeup_state(void);
-void wakeup(void);
-void wakeup_enable_uart(void);
-
-#endif /* CPU_SAMSUNG_EXYNOS5420_WAKEUP_H */