From d0b019b1f07bd7d57c33e11db970c394a3e368f1 Mon Sep 17 00:00:00 2001 From: Mateusz Holenko Date: Wed, 5 Jun 2019 17:35:47 +0200 Subject: [PATCH] integration/builder: generate shadow_base address to mem.h and csv --- litex/soc/integration/builder.py | 7 ++++++- litex/soc/integration/cpu_interface.py | 4 +++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/litex/soc/integration/builder.py b/litex/soc/integration/builder.py index 0495ec2bc..8aecd3912 100755 --- a/litex/soc/integration/builder.py +++ b/litex/soc/integration/builder.py @@ -58,6 +58,7 @@ class Builder: cpu_type = self.soc.cpu_type memory_regions = self.soc.get_memory_regions() flash_boot_address = getattr(self.soc, "flash_boot_address", None) + shadow_base = getattr(self.soc, "shadow_base", None) csr_regions = self.soc.get_csr_regions() constants = self.soc.get_constants() @@ -102,7 +103,7 @@ class Builder: write_to_file( os.path.join(generated_dir, "mem.h"), - cpu_interface.get_mem_header(memory_regions, flash_boot_address)) + cpu_interface.get_mem_header(memory_regions, flash_boot_address, shadow_base)) write_to_file( os.path.join(generated_dir, "csr.h"), cpu_interface.get_csr_header(csr_regions, constants)) @@ -120,6 +121,10 @@ class Builder: csr_regions = self.soc.get_csr_regions() constants = self.soc.get_constants() + shadow_base = getattr(self.soc, "shadow_base", None) + if shadow_base: + constants.append(('shadow_base', shadow_base)) + csr_dir = os.path.dirname(os.path.realpath(self.csr_csv)) os.makedirs(csr_dir, exist_ok=True) write_to_file( diff --git a/litex/soc/integration/cpu_interface.py b/litex/soc/integration/cpu_interface.py index d20f06ebe..a09751ad3 100644 --- a/litex/soc/integration/cpu_interface.py +++ b/litex/soc/integration/cpu_interface.py @@ -70,13 +70,15 @@ def get_linker_regions(regions): return r -def get_mem_header(regions, flash_boot_address): +def get_mem_header(regions, flash_boot_address, shadow_base): r = generated_banner("//") r += "#ifndef __GENERATED_MEM_H\n#define __GENERATED_MEM_H\n\n" for name, base, size in regions: r += "#define {name}_BASE 0x{base:08x}L\n#define {name}_SIZE 0x{size:08x}\n\n".format(name=name.upper(), base=base, size=size) if flash_boot_address is not None: r += "#define FLASH_BOOT_ADDRESS 0x{:08x}L\n\n".format(flash_boot_address) + if shadow_base is not None: + r += "#define SHADOW_BASE 0x{:08x}L\n\n".format(shadow_base) r += "#endif\n" return r