summaryrefslogtreecommitdiffstats
path: root/hw
diff options
context:
space:
mode:
authormillerjo@us.ibm.com <millerjo@us.ibm.com>2014-08-06 14:10:26 -0500
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>2014-08-08 16:07:26 +1000
commit6f1019e652c517cb825c09a03f52f420dc5e9002 (patch)
tree89dc1bc35fae4a610f78dbb77e64eebb154da7cb /hw
parent82b53f9d1d22a184f5929e95032bab5ea4c0e6a8 (diff)
downloadblackbird-skiboot-6f1019e652c517cb825c09a03f52f420dc5e9002.tar.gz
blackbird-skiboot-6f1019e652c517cb825c09a03f52f420dc5e9002.zip
Add fake RTC to generic platform
Adds a fake RTC that can be initialized via a named reserve in the device tree that may, at some point, be on NVRAM. Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Diffstat (limited to 'hw')
-rw-r--r--hw/Makefile.inc2
-rw-r--r--hw/fake-rtc.c69
2 files changed, 70 insertions, 1 deletions
diff --git a/hw/Makefile.inc b/hw/Makefile.inc
index 14bf8e78..f1ffe55c 100644
--- a/hw/Makefile.inc
+++ b/hw/Makefile.inc
@@ -4,7 +4,7 @@ SUBDIRS += hw
HW_OBJS = xscom.o chiptod.o gx.o cec.o lpc.o lpc-uart.o psi.o
HW_OBJS += homer.o slw.o occ.o nx.o fsi-master.o centaur.o
HW_OBJS += p7ioc.o p7ioc-inits.o p7ioc-phb.o p5ioc2.o p5ioc2-phb.o
-HW_OBJS += phb3.o sfc-ctrl.o
+HW_OBJS += phb3.o sfc-ctrl.o fake-rtc.o
HW=hw/built-in.o
include $(SRC)/hw/fsp/Makefile.inc
diff --git a/hw/fake-rtc.c b/hw/fake-rtc.c
new file mode 100644
index 00000000..2aadfa09
--- /dev/null
+++ b/hw/fake-rtc.c
@@ -0,0 +1,69 @@
+/* Copyright 2013-2014 IBM Corp.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <skiboot.h>
+#include <opal.h>
+#include <mem_region.h>
+
+//#define DBG(fmt...) printf("FAKERTC: " fmt)
+#define DBG(fmt...) do { } while(0)
+
+uint32_t *fake_ymd;
+uint64_t *fake_hmsm;
+
+static int64_t fake_rtc_write(uint32_t ymd, uint64_t hmsm)
+{
+ *fake_ymd = ymd;
+ *fake_hmsm = hmsm;
+
+ return OPAL_SUCCESS;
+}
+
+static int64_t fake_rtc_read(uint32_t *ymd, uint64_t *hmsm)
+{
+ if (!ymd || !hmsm)
+ return OPAL_PARAMETER;
+
+ *ymd = *fake_ymd;
+ *hmsm = *fake_hmsm;
+
+ return OPAL_SUCCESS;
+}
+
+void fake_rtc_init(void)
+{
+ struct mem_region *rtc_region = NULL;
+ uint32_t *rtc = NULL;
+
+ /* Read initial values from reserved memory */
+ rtc_region = find_mem_region("ibm,fake-rtc");
+
+ /* Should we register anyway? */
+ if (!rtc_region) {
+ DBG("No initial RTC value found\n");
+ return;
+ }
+
+ rtc = (uint32_t *) rtc_region->start;
+
+ fake_ymd = rtc;
+ fake_hmsm = ((uint64_t *) &rtc[1]);
+
+ DBG("Init fake RTC to 0x%x 0x%llx\n", *fake_ymd, *fake_hmsm);
+
+ opal_register(OPAL_RTC_READ, fake_rtc_read, 2);
+ opal_register(OPAL_RTC_WRITE, fake_rtc_write, 2);
+}
OpenPOWER on IntegriCloud