aboutsummaryrefslogtreecommitdiff
path: root/src/arch
diff options
context:
space:
mode:
Diffstat (limited to 'src/arch')
-rw-r--r--src/arch/riscv/bootblock.S19
-rw-r--r--src/arch/riscv/rom_media.c12
2 files changed, 6 insertions, 25 deletions
diff --git a/src/arch/riscv/bootblock.S b/src/arch/riscv/bootblock.S
index 1461a9cbc5..8ddc8ec0f5 100644
--- a/src/arch/riscv/bootblock.S
+++ b/src/arch/riscv/bootblock.S
@@ -58,25 +58,6 @@ _start:
.stack_size:
.quad 0xf00
-.globl _cbfs_master_header
-_cbfs_master_header:
- .balignl 16,0xdeadbeef
- .align 8
- // this assembler SUCKS
- .long 0x4F524243
- .long 0xdeadbeef
- .long 0xdeadbeef
- .long 0xdeadbeef
- .long 0xdeadbeef
- .long 0xdeadbeef
- .long 0xdeadbeef
- /* The CBFS master header is inserted by cbfstool at the first
- * aligned offset after the above anchor string is found.
- * Hence, we leave some space for it.
- * Assumes 64-byte alignment.
- */
- .space 128
-
reset:
init_stack_loop:
diff --git a/src/arch/riscv/rom_media.c b/src/arch/riscv/rom_media.c
index 8e858cb9bc..e00e0fbba2 100644
--- a/src/arch/riscv/rom_media.c
+++ b/src/arch/riscv/rom_media.c
@@ -60,12 +60,12 @@ static int rom_media_close(struct cbfs_media *media) {
}
static int init_rom_media_cbfs(struct cbfs_media *media) {
- //extern unsigned long _cbfs_master_header;
- // On X86, we always keep a reference of pointer to CBFS header in
- // 0xfffffffc, and the pointer is still a memory-mapped address.
- // Since the CBFS core always use ROM offset, we need to figure out
- // header->romsize even before media is initialized.
- struct cbfs_header *header = (struct cbfs_header*) CONFIG_CBFS_HEADER_ROM_OFFSET; //&_cbfs_master_header;
+ /* this assumes that the CBFS resides at 0x0,
+ * which is true for the default configuration
+ */
+ int32_t *cbfs_header_ptr = (int32_t*)(uintptr_t)(CONFIG_CBFS_SIZE - 4);
+ uint64_t cbfs_header_offset = CONFIG_CBFS_SIZE + *cbfs_header_ptr;
+ struct cbfs_header *header = (struct cbfs_header*) cbfs_header_offset;
if (CBFS_HEADER_MAGIC != ntohl(header->magic)) {
printk(BIOS_ERR, "Invalid CBFS master header at %p\n", header);
printk(BIOS_ERR, "Expected %08lx and got %08lx\n", (unsigned long) CBFS_HEADER_MAGIC, (unsigned long) ntohl(header->magic));