diff options
author | Keith Short <keithshort@chromium.org> | 2020-08-03 14:33:52 -0600 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2020-08-13 14:26:57 +0000 |
commit | b95587bb7a412d696f0800236bb8977d392e83b0 (patch) | |
tree | bab5fe73c9259598597a6cf6df24ba4b4b57d69f /include/init_rom.h | |
parent | e0bf946ced052fe5e857b42da666ba252b03da95 (diff) | |
download | chrome-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.h | 53 |
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 */ |