summaryrefslogtreecommitdiff
path: root/include/init_rom.h
diff options
context:
space:
mode:
authorKeith Short <keithshort@chromium.org>2020-08-03 14:33:52 -0600
committerCommit Bot <commit-bot@chromium.org>2020-08-13 14:26:57 +0000
commitb95587bb7a412d696f0800236bb8977d392e83b0 (patch)
treebab5fe73c9259598597a6cf6df24ba4b4b57d69f /include/init_rom.h
parente0bf946ced052fe5e857b42da666ba252b03da95 (diff)
downloadchrome-ec-b95587bb7a412d696f0800236bb8977d392e83b0.tar.gz
init_rom: Add init_rom layer
Create a thin init_rom layer for accessing data objects linked into the .init_rom section with the CONFIG_CHIP_INIT_ROM_REGION opton and __init_rom attribute. BUG=b:160330682 BRANCH=none TEST=make buildall TEST=Using the next CL, verify BMI260 config data can be read using both memory mapped and indirect access. Signed-off-by: Keith Short <keithshort@chromium.org> Change-Id: I6cd311637e87cd10ac394ff75c4bfc16bbade3b0 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2335739 Reviewed-by: caveh jalali <caveh@chromium.org> Reviewed-by: Abe Levkoy <alevkoy@chromium.org> Commit-Queue: caveh jalali <caveh@chromium.org>
Diffstat (limited to 'include/init_rom.h')
-rw-r--r--include/init_rom.h53
1 files changed, 53 insertions, 0 deletions
diff --git a/include/init_rom.h b/include/init_rom.h
new file mode 100644
index 0000000000..6d54e6aec4
--- /dev/null
+++ b/include/init_rom.h
@@ -0,0 +1,53 @@
+/* Copyright 2020 The Chromium OS Authors. All rights reserved.
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+/*
+ * Routines for accessing data objects store in the .init_rom region.
+ * Enabled with the CONFIG_CHIP_INIT_ROM_REGION config option. Data
+ * objects are placed into the .init_rom region using the __init_rom attribute.
+ */
+
+#ifndef __CROS_EC_INIT_ROM_H
+#define __CROS_EC_INIT_ROM_H
+
+#include "stdbool.h"
+
+/**
+ * Get the memory mapped address of an .init_rom data object.
+ *
+ * @param offset Address of the data object assigned by the linker.
+ * This is effectively a flash offset when
+ * CONFIG_CHIP_INIT_ROM_REGION is enabled, otherwise
+ * it is a regular address.
+ * @param size Size of the data object.
+ *
+ * @return Pointer to data object in memory. Return NULL if the object
+ * is not memory mapped.
+ */
+const void *init_rom_map(const void *addr, int size);
+
+/**
+ * Unmaps an .init_rom data object. Must be called when init_rom_map() is
+ * successful.
+ *
+ * @param offset Address of the data object assigned by the linker.
+ * @param size Size of the data object.
+ */
+void init_rom_unmap(const void *addr, int size);
+
+/**
+ * Copy an .init_rom data object into a RAM location. This routine must be used
+ * if init_rom_get_addr() returns NULL. This routine automatically handles
+ * locking of the flash.
+ *
+ * @param offset Flash offset of the data object.
+ * @param size Size of the data object.
+ * @param data Destination buffer for data.
+ *
+ * @return 0 on success.
+ */
+int init_rom_copy(int offset, int size, char *data);
+
+#endif /* __CROS_EC_INIT_ROM_H */