[Skiboot] [PATCH 1/2] mambo: Add Fake NVRAM driver
Jack Miller
distroguy at gmail.com
Tue Nov 29 14:18:22 AEDT 2016
Implement a fake NVRAM device based on arbitrary memory reserves.
This allows NVRAM images to be preloaded without the FSP.
Signed-off-by: Jack Miller <jack at codezen.org>
Tested-by: Chris Smart <chris at distroguy.com>
---
core/platform.c | 3 +++
hw/Makefile.inc | 1 +
hw/fake-nvram.c | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
include/skiboot.h | 5 +++++
4 files changed, 71 insertions(+)
create mode 100644 hw/fake-nvram.c
diff --git a/core/platform.c b/core/platform.c
index ba0636d942426138..4e1c69144d541a59 100644
--- a/core/platform.c
+++ b/core/platform.c
@@ -136,6 +136,9 @@ static struct platform generic_platform = {
.bmc = &generic_bmc,
.probe = generic_platform_probe,
.init = generic_platform_init,
+ .nvram_info = fake_nvram_info,
+ .nvram_start_read = fake_nvram_start_read,
+ .nvram_write = fake_nvram_write,
.cec_power_down = generic_cec_power_down,
};
diff --git a/hw/Makefile.inc b/hw/Makefile.inc
index a433c2b6fefc91ec..f2dc328e85ab64f6 100644
--- a/hw/Makefile.inc
+++ b/hw/Makefile.inc
@@ -6,6 +6,7 @@ HW_OBJS += nx.o nx-rng.o nx-crypto.o nx-842.o
HW_OBJS += p7ioc.o p7ioc-inits.o p7ioc-phb.o
HW_OBJS += phb3.o sfc-ctrl.o fake-rtc.o bt.o p8-i2c.o prd.o
HW_OBJS += dts.o lpc-rtc.o npu.o npu-hw-procedures.o xive.o phb4.o
+HW_OBJS += fake-nvram.o
HW=hw/built-in.o
# FIXME hack this for now
diff --git a/hw/fake-nvram.c b/hw/fake-nvram.c
new file mode 100644
index 0000000000000000..99bee9fb4879e0b4
--- /dev/null
+++ b/hw/fake-nvram.c
@@ -0,0 +1,62 @@
+/* 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>
+#include <lock.h>
+
+static struct mem_region *nvram_region = NULL;
+static struct lock fake_nvram_lock = LOCK_UNLOCKED;
+
+int fake_nvram_info(uint32_t *total_size)
+{
+ nvram_region = find_mem_region("ibm,fake-nvram");
+
+ if(!nvram_region)
+ return OPAL_HARDWARE;
+
+ *total_size = nvram_region->len;
+
+ return OPAL_SUCCESS;
+}
+
+int fake_nvram_start_read(void *dst, uint32_t src, uint32_t len)
+{
+ if(!nvram_region)
+ return -ENODEV;
+
+ lock(&fake_nvram_lock);
+ memcpy(dst, (void *) (nvram_region->start + src), len);
+ unlock(&fake_nvram_lock);
+
+ nvram_read_complete(true);
+
+ return 0;
+}
+
+int fake_nvram_write(uint32_t offset, void *src, uint32_t size)
+{
+ if(!nvram_region)
+ return OPAL_HARDWARE;
+
+ lock(&fake_nvram_lock);
+ memcpy((void *) (nvram_region->start + offset), src, size);
+ unlock(&fake_nvram_lock);
+
+ return 0;
+}
+
diff --git a/include/skiboot.h b/include/skiboot.h
index 3f7c077812ed782b..2ea64de36bd1ed6b 100644
--- a/include/skiboot.h
+++ b/include/skiboot.h
@@ -292,4 +292,9 @@ extern void enter_pm_state(bool winkle);
extern uint32_t reset_patch_start;
extern uint32_t reset_patch_end;
+/* Fallback fake NVRAM */
+extern int fake_nvram_info(uint32_t *total_size);
+extern int fake_nvram_start_read(void *dst, uint32_t src, uint32_t len);
+extern int fake_nvram_write(uint32_t offset, void *src, uint32_t size);
+
#endif /* __SKIBOOT_H */
--
2.9.3
More information about the Skiboot
mailing list