|  | // Copyright lowRISC contributors. | 
|  | // Licensed under the Apache License, Version 2.0, see LICENSE for details. | 
|  | // SPDX-License-Identifier: Apache-2.0 | 
|  |  | 
|  | #ifndef _TOP_${top["name"].upper()}_MEMORY_H_ | 
|  | #define _TOP_${top["name"].upper()}_MEMORY_H_ | 
|  |  | 
|  | /** | 
|  | * @file | 
|  | * @brief Assembler-only Top-Specific Definitions. | 
|  | * | 
|  | * This file contains preprocessor definitions for use within assembly code. | 
|  | * | 
|  | * These are not shared with C/C++ code because these are only allowed to be | 
|  | * preprocessor definitions, no data or type declarations are allowed. The | 
|  | * assembler is also stricter about literals (not allowing suffixes for | 
|  | * signed/unsigned which are sensible to use for unsigned values in C/C++). | 
|  | */ | 
|  |  | 
|  | // Include guard for assembler | 
|  | #ifdef __ASSEMBLER__ | 
|  |  | 
|  | /** | 
|  | * Memory base address for rom in top earlgrey. | 
|  | */ | 
|  | #define TOP_EARLGREY_ROM_BASE_ADDR 0x00008000 | 
|  |  | 
|  | /** | 
|  | * Memory size for rom in top earlgrey. | 
|  | */ | 
|  | #define TOP_EARLGREY_ROM_SIZE_BYTES 0x4000 | 
|  |  | 
|  | % for m in top["memory"]: | 
|  | /** | 
|  | * Memory base address for ${m["name"]} in top ${top["name"]}. | 
|  | */ | 
|  | #define TOP_${top["name"].upper()}_${m["name"].upper()}_BASE_ADDR ${m["base_addr"]} | 
|  |  | 
|  | /** | 
|  | * Memory size for ${m["name"]} in top ${top["name"]}. | 
|  | */ | 
|  | #define TOP_${top["name"].upper()}_${m["name"].upper()}_SIZE_BYTES ${m["size"]} | 
|  |  | 
|  | % endfor | 
|  |  | 
|  | % for (inst_name, if_name), region in helper.devices(): | 
|  | <% | 
|  | if_desc = inst_name if if_name is None else '{} device on {}'.format(if_name, inst_name) | 
|  | hex_base_addr = "0x{:X}".format(region.base_addr) | 
|  | base_addr_name = region.base_addr_name().as_c_define() | 
|  | %>\ | 
|  | /** | 
|  | * Peripheral base address for ${if_desc} in top ${top["name"]}. | 
|  | * | 
|  | * This should be used with #mmio_region_from_addr to access the memory-mapped | 
|  | * registers associated with the peripheral (usually via a DIF). | 
|  | */ | 
|  | #define ${base_addr_name} ${hex_base_addr} | 
|  | % endfor | 
|  | #endif  // __ASSEMBLER__ | 
|  |  | 
|  | #endif  // _TOP_${top["name"].upper()}_MEMORY_H_ |