77typedef enum : uint64_t {
86typedef enum : uint64_t {
103typedef enum : uint64_t {
111typedef enum : uint8_t {
116typedef enum : uint32_t {
124typedef enum : uint32_t {
152typedef enum : uint32_t {
158typedef enum : uint32_t {
166typedef enum : uint8_t {
173typedef enum : uint32_t {
223 return s_mram.regs[off / 4U];
248 s_mram.msaddr = (uint32_t)value;
251 s_mram.regs[off / 4U] = (uint32_t)value;
288 if (
s_mram.payload_len == 0U) {
406 return s_mram.pgm_regs[off / 4U];
431 s_mram.pgm_regs[off / 4U] = (uint32_t)value;
458 if (
s_mram.rejected != 0U) {
461 (void)
priv_emu_io_errf(
" Extra-MRAM : %u MACI program commands, %u REJECTED "
462 "(MSADDR outside HUM Table 59.15 option-setting window)\n",
467 if (
s_mram.programs == 0U) {
Decentralized peripheral-block registry for the board emulator core.
void board_periph_register_block(const board_periph_block_t *block)
Register a peripheral block's descriptor with the core registry.
mram_pgm_window_t
Legal MSADDR window for the MACI Program command (HUM Table 59.15).
@ k_mram_pgm_lo
First legal Program MSADDR.
@ k_mram_pgm_hi
Last legal Program MSADDR.
static RA8_INTERNAL void internal_mram_block_register(void)
Register the MRAM + MACI blocks before main (host constructor).
static mram_state_t s_mram
mram_reg_map_t
MRMS program-mode register sub-window (ra8_flash_regs.h).
@ k_mram_off_mentryr
MENTRYR : program-mode entry.
@ k_mram_reg_base
MRMS program-mode sub-window base.
@ k_mram_reg_span
Covers MSADDR / MSTATR / MENTRYR.
@ k_mram_off_mstatr
MSTATR : extra-MRAM status.
@ k_mram_off_msaddr
MSADDR : MACI start address.
maci_state_t
MACI collection state.
@ k_maci_collect
Opener complete, collecting words.
@ k_maci_idle
No command in progress.
@ k_maci_opener1
Saw an opener (0xE8/0x40), expecting N.
static const board_periph_block_t s_k_mrpgm_block
Code-MRAM program-control block descriptor (self-registered).
mram_lit_t
Sizing + report-order constants.
@ k_mram_byte_mask
One byte.
@ k_mram_hi_shift
High-byte shift.
@ k_mram_payload_max
Max config-set bytes.
@ k_mram_block_order
Report order slot.
@ k_mram_reg_words
Shadow words.
static RA8_INTERNAL void internal_mram_report(void)
End-of-run MRAM section: MACI program-command count (only if used).
static const board_periph_block_t s_k_mram_reg_block
MRMS controller-register block descriptor (self-registered).
mrpgm_status_t
MRCPS ready snapshot: address buffer empty, not busy, not full, no errors.
@ k_mrcps_ready
ABUFEMP set; PRGBSYC / ABUFFULL / error bits clear.
maci_map_t
MACI command-issuing area window (ra8_flash_regs.h).
@ k_maci_base
MACI command-issuing area base.
@ k_maci_span
One command port (byte+halfword).
static RA8_INTERNAL uint64_t internal_mram_reg_read(uc_engine *uc, uint64_t addr, unsigned size)
MMIO read inside the MRMS controller window.
mram_status_t
Register bit values the driver polls / writes.
@ k_mram_mstatr_mrdy
MSTATR.MRDY (command complete).
@ k_mram_mstatr_ilgcom
MSTATR.ILGCOMERR (illegal cmd).
@ k_mram_mstatr_ilglerr
MSTATR.ILGLERR (illegal).
@ k_mram_mentryr_pe_bit
MENTRYR.MENTRY status bit.
mram_mastat_t
MASTAT bits latched when the sequencer rejects a command.
@ k_mram_mastat_cmdlk
Command-locked state latched.
@ k_mram_off_mastat
MASTAT : extra-MRAM access status.
@ k_mram_mastat_mreae
Extra MRAM access error.
static const board_periph_block_t s_k_maci_block
MACI command-area block descriptor (self-registered).
static RA8_INTERNAL uint64_t internal_mrpgm_read(uc_engine *uc, uint64_t addr, unsigned size)
MMIO read inside the code-MRAM program-control window (MRCPS ready).
maci_cmd_t
MACI command opcodes the extra-MRAM program / config-set stream uses.
@ k_maci_cmd_word_n
N halfword count written after the opener.
@ k_maci_cmd_config_set
Config-Set opener: OFS area (HUM 59.7.4.8).
@ k_maci_cmd_final
Trailer byte that starts command processing.
@ k_maci_cmd_program
Program opener: extra-MRAM data (HUM 59.7.4.5).
static RA8_INTERNAL uint64_t internal_maci_read(uc_engine *uc, uint64_t addr, unsigned size)
MMIO read inside the MACI command area (driver never reads it).
static RA8_INTERNAL void internal_maci_commit(uc_engine *uc)
Commit the collected command payload to the mapped MRAM region.
static RA8_INTERNAL void internal_mram_reg_write(uc_engine *uc, uint64_t addr, unsigned size, uint64_t value)
MMIO write inside the MRMS controller window (latch MSADDR / P-E mode).
static RA8_INTERNAL void internal_mram_reset(void)
Reset the MRAM model: clear the shadow + collection state.
static RA8_INTERNAL void internal_mrpgm_write(uc_engine *uc, uint64_t addr, unsigned size, uint64_t value)
MMIO write inside the code-MRAM program-control window (shadow the gate).
mrpgm_map_t
Code-MRAM program-control sub-window (R_MRMS 0x3000 page).
@ k_mrpgm_off_mrcps
MRCPS : Code MRAM Program Status.
@ k_mrpgm_base
0x4013C000 + 0x3000 code-MRAM P/E page.
@ k_mrpgm_words
Shadow word count.
@ k_mrpgm_span
Covers MRCPC0/1 / MRCPS / MRCFLR.
static RA8_INTERNAL void internal_maci_reject(void)
Latch the command-locked state the sequencer enters on rejection.
static RA8_INTERNAL void internal_maci_write(uc_engine *uc, uint64_t addr, unsigned size, uint64_t value)
MMIO write inside the MACI command-issuing area (the command stream).
Bounded raw-descriptor I/O seam for the RA8 emulator.
emu_io_result_t priv_emu_io_errf(const char *format,...)
Format bounded text and write it to the injected error descriptor.
uc_err emu_mem_write(uc_engine *uc, uint64_t address, const void *bytes, size_t count)
Write guest memory through the central access seam.
#define RA8_INTERNAL
Marker that a function is intended to be static (file-local).
void * memset(void *dst, int value, size_t n)
Fill memory with a constant byte value.
A modelled peripheral block's self-description for the core registry.
MRAM model state: register shadow + MACI collection + counters.
uint32_t payload_len
Bytes collected this command.
uint32_t programs
Config-set program commands.
uint8_t maci_state
maci_state_t collection state.
uint8_t payload[k_mram_payload_max]
Collected config-set bytes.
uint8_t pe_active
1 => program/erase mode entered.
uint32_t msaddr
Latched MACI target address.
uint32_t regs[k_mram_reg_words]
0x4013E000 window shadow.
uint32_t rejected
Programs refused: MSADDR illegal.
uint32_t pgm_regs[k_mrpgm_words]
0x4013F000 code-MRAM P/E shadow.