aboutsummaryrefslogtreecommitdiffstats
path: root/roms/skiboot/hw/fake-nvram.c
diff options
context:
space:
mode:
authorAngelos Mouzakitis <a.mouzakitis@virtualopensystems.com>2023-10-10 14:33:42 +0000
committerAngelos Mouzakitis <a.mouzakitis@virtualopensystems.com>2023-10-10 14:33:42 +0000
commitaf1a266670d040d2f4083ff309d732d648afba2a (patch)
tree2fc46203448ddcc6f81546d379abfaeb323575e9 /roms/skiboot/hw/fake-nvram.c
parente02cda008591317b1625707ff8e115a4841aa889 (diff)
Add submodule dependency filesHEADmaster
Change-Id: Iaf8d18082d3991dec7c0ebbea540f092188eb4ec
Diffstat (limited to 'roms/skiboot/hw/fake-nvram.c')
-rw-r--r--roms/skiboot/hw/fake-nvram.c49
1 files changed, 49 insertions, 0 deletions
diff --git a/roms/skiboot/hw/fake-nvram.c b/roms/skiboot/hw/fake-nvram.c
new file mode 100644
index 000000000..44adde4a3
--- /dev/null
+++ b/roms/skiboot/hw/fake-nvram.c
@@ -0,0 +1,49 @@
+// SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
+/* Copyright 2013-2017 IBM Corp. */
+
+#include <skiboot.h>
+#include <opal.h>
+#include <mem_region.h>
+#include <lock.h>
+
+static struct mem_region *nvram_region;
+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;
+}
+