47typedef enum : uint32_t {
62typedef enum : uint16_t {
177 for (uint32_t i = 0U; i < 32U; ++i) {
178 if ((x & (uint32_t)(1UL << i)) != 0U) {
265 const bool in_extra =
267 if (!in_ofs && !in_extra) {
276 const uint8_t opener =
379 uint32_t base_idx = words_per * 3U;
383 base_idx = words_per;
385 base_idx = words_per * 2U;
390 for (uint32_t w = 0U; w < words_per; ++w) {
420 for (uint32_t w = 0U; w < sec_words; ++w) {
453 if (cur + 1U > max) {
526#if defined(RA8_OFF_TARGET) && defined(UNIT_TEST)
548 uint16_t enc_bit = 0U;
559 uint16_t dec_bit = 0U;
568 uint32_t* out_code_dec,
569 uint32_t* out_extra_ted,
570 uint32_t* out_extra_dec)
604 const bool prefetch_was =
g_flash_rt.prefetch_on;
688 const uint32_t base = done + (i * 2U);
691 words[i] = (uint16_t)((uint16_t)lo | ((uint16_t)hi << 8U));
704 const uint32_t end_excl = (uint32_t)((uint64_t)mram_addr + (uint64_t)len);
717 if ((mram_addr & ~page_mask) != ((end_excl - 1U) & ~page_mask)) {
757 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU,
758 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU,
759 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU,
Annotation-attribute framework macros for ra8-firmware.
#define RA8_INTERNAL
Marker that a function is intended to be static (file-local).
Validation and Error-Checking Macros for ra8-firmware.
#define RA8_VALIDATE_INIT(initialized, tag, message)
Precondition: module must be initialized.
#define RA8_CHECK_NULL_PTR(ptr, tag, message)
Reject nullptr pointer, returning k_ra8_err_null_ptr.
Error Code Definitions for ra8-firmware.
@ k_ra8_err_out_of_range
Sensor or peripheral output out of valid range.
@ k_ra8_err_invalid_arg
Invalid function argument.
@ k_ra8_err_hw_timeout
Hardware timed out waiting for a flag or handshake.
@ k_ra8_ok
Success – operation completed with all postconditions satisfied.
@ k_ra8_err_hw_error
Generic hardware fault detected (error flag set, fault interrupt).
ra8_err_codes_t ra8_err_t
Canonical error-return type used by every ra8-firmware API.
void priv_ra8_flash_internal_maci_cmd8(uint8_t byte)
Send a single byte through the MACI command-issuing area.
ra8_flash_runtime_t g_flash_rt
Single shared ra8_flash runtime-state instance.
void priv_ra8_flash_internal_set_prefetch(bool enable)
Set MRCPFB.MPFBEN to enable/disable the prefetch buffer.
ra8_err_t priv_ra8_flash_internal_wait_mrdy(uint32_t limit)
Spin until MSTATR.MRDY rises or limit elapses.
void priv_ra8_flash_internal_maci_cmd16(uint16_t half)
Send a halfword through the MACI command-issuing area.
const char * g_flash_tag
Shared log tag string for the ra8_flash module.
Code MRAM + Extra MRAM + Option-Setting driver – DANGEROUS, brick-capable.
static void internal_pack_config_words(const uint8_t *src, uint32_t len, uint32_t done, uint16_t words[k_ra8_mram_config_set_word_count])
Pack one config-set's worth of source bytes into 8 halfwords.
ra8_err_t ra8_flash_set_ecc_decoder_enable(bool enable)
Toggle MRCDECC.DECECEN (read-side ECC decoder).
ra8_err_t ra8_flash_arc_read(ra8_flash_arc_id_t counter, uint32_t *out_count)
Read the current value of an anti-rollback counter.
ra8_err_t ra8_flash_set_security_attribution(uint16_t new_msar)
Update MSAR (MRAM Security Attribution).
static uint32_t internal_arc_nsec_count(ra8_flash_arc_id_t id)
Sum the population count of one of the four ARC_NSEC slots.
ra8_err_t ra8_flash_get_startup_area(uint8_t *out_btflg, uint8_t *out_fspr)
Read the current start-up area selection.
flash_const_t
ARC bit-to-word shift and blank-flash fill byte.
@ k_flash_blank_byte
Erased-flash fill byte.
@ k_flash_bits_to_words_shift
Divide a bit count by 32 -> words.
ra8_err_t ra8_flash_set_ecc_encoder_enable(bool enable)
Toggle MRCEECC.ECCEN (program-side ECC encoder).
ra8_err_t ra8_flash_extra_mram_erase(uint32_t mram_addr)
Erase one 32-byte block of extra-MRAM via MACI.
ra8_err_t ra8_flash_get_ecc_error_addr(uint32_t *out_code_ted, uint32_t *out_code_dec, uint32_t *out_extra_ted, uint32_t *out_extra_dec)
Snapshot the latched ECC fault addresses.
ra8_err_t ra8_flash_set_update_transfer(uint8_t list_select)
Trigger the MRAM update transfer (MCTRCNTR).
ra8_err_t ra8_flash_zeroize_huk(void)
Trigger the W-HUK zeroize via MREZC.
ra8_flash_cfg_word_const_t
Bit patterns for the configuration-set word vector.
@ k_ra8_flash_btflg_alternate
BTFLG cleared selects alternate.
@ k_ra8_flash_cfg_word_all_ones
Word filler when no bits drive low.
@ k_ra8_flash_btflg_word_keep
Bits 12:0 kept as ones (unused).
@ k_ra8_flash_btflg_default
BTFLG bit 15 selects default boot.
ra8_err_t ra8_flash_update_clock_freq(uint16_t mrcfreq_mhz, uint8_t mrefreq_mhz)
Re-issue the keyed MRCFREQ / MREFREQ to track a clock change.
ra8_err_t ra8_flash_config_set_write(uint32_t target_addr, const uint16_t *words)
Issue an 8-halfword MACI program command to the OFS or extra-MRAM area.
static uint32_t internal_popcount32(uint32_t x)
Pop-count helper for 32-bit words used by the ARC reader.
ra8_err_t ra8_flash_get_program_error_addr(uint32_t *out_addr)
Snapshot the program-error address (MRCPEA).
static uint8_t internal_arc_to_mcntselr(ra8_flash_arc_id_t id)
Translate logical ARC id to MCNTSELR field value.
ra8_err_t ra8_flash_get_update_status(uint8_t *out_busy, uint8_t *out_done, uint8_t *out_err)
Poll the MRAM update-transfer status.
ra8_err_t ra8_flash_arc_increment(ra8_flash_arc_id_t counter)
Increment the selected anti-rollback counter.
ra8_err_t ra8_flash_set_startup_area(ra8_flash_startup_t target, bool temporary)
Switch the start-up area between default and alternate banks.
static ra8_err_t internal_arc_cmd(uint8_t mcntselr, uint8_t cmd)
Issue a single MACI counter command (read or increment).
ra8_err_t ra8_flash_msuinitr_kick(void)
Kick MSUINITR to re-load the OFS sequencer.
ra8_err_t ra8_flash_extra_mram_write(uint32_t mram_addr, const uint8_t *src, uint32_t len)
Program 1..32 contiguous bytes into the general-purpose extra-MRAM window.
static ra8_err_t internal_arc_read_locked(ra8_flash_arc_id_t id, uint32_t *out_count)
static uint32_t internal_arc_max_count(ra8_flash_arc_id_t id)
Compute the maximum count for an ARC id.
ra8_err_t ra8_flash_enter_pe_mode(void)
Enter MRAM P/E mode.
ra8_err_t ra8_flash_exit_pe_mode(void)
Exit MRAM P/E mode (return to read mode).
Test-access surface for ra8_flash internal helpers (MC/DC).
@ k_ra8_flash_mrefreq_key
RA8 flash mrefreq key.
@ k_ra8_flash_mrcfreq_key
RA8 flash mrcfreq key.
@ k_ra8_flash_freq_key_shift
KEY[7:0] @ [31:24] in MRCFREQ/MREFREQ.
@ k_ra8_flash_pe_spin_limit
P/E entry spin limit.
@ k_ra8_flash_max_mrcfreq_mhz
MRCMHZ <= 250.
@ k_ra8_flash_max_list_select
MCTRLSR.LIST max value.
@ k_ra8_flash_maci_spin_limit
MACI command spin limit.
@ k_ra8_flash_zeroize_spin
W-HUK zeroize spin.
@ k_ra8_flash_max_mrefreq_mhz
MREMHZ <= 125.
Flash / MRAM controller register layout for the Renesas RA8D2.
static volatile uint8_t * ra8_mram_reg8(uint16_t off)
Pointer to a byte-wide MRMS register at offset off.
@ k_ra8_mctrstatr_mask_done
TRMD.
@ k_ra8_mctrstatr_mask_busy
TRBUSY.
@ k_ra8_mctrstatr_mask_err
Reserved-future error.
@ k_ra8_mrceecc_mask_eccen
Encoder enable bit.
@ k_ra8_mrceecc_key_shift
Pre-shifted KEY[15:8]=0xC0.
@ k_ra8_mastat_mask_cmdlk
Command lock latched.
@ k_ra8_mctrcntr_mask_start
RA8 mctrcntr mask start.
@ k_ra8_mctrcntr_key
RA8 mctrcntr key.
@ k_ra8_flash_extra_start
First legal Program target (FSBL setting).
@ k_ra8_flash_extra_size
Covers through 0x02E179F0 (last, reserved).
@ k_ra8_flash_ofs_start
Start of OFS config_set window.
@ k_ra8_flash_extra_locked_start
First permanent-OTP structure.
@ k_ra8_flash_ofs_size
4 KiB OFS block.
@ k_ra8_flash_ofs_arc_nsec_addr
RA8 flash ofs arc nsec address.
@ k_ra8_flash_ofs_arccs_addr
RA8 flash ofs arccs address.
@ k_ra8_flash_ofs_arc_sec_addr
RA8 flash ofs arc sec address.
@ k_ra8_mctrlsr_mask_list_sel
RA8 mctrlsr mask list sel.
static volatile uint16_t * ra8_mram_reg16(uint16_t off)
Pointer to a halfword-wide MRMS register at offset off.
@ k_ra8_arc_nsec_single
RA8 arc nsec single.
@ k_ra8_arc_arccs_mask
RA8 arc arccs mask.
@ k_ra8_arc_sec_max_bits
RA8 arc sec maximum bits.
@ k_ra8_arc_nsec_multiple
RA8 arc nsec multiple.
@ k_ra8_arc_oembl_max_bits
RA8 arc oembl maximum bits.
@ k_ra8_arc_arcns_single
RA8 arc arcns single.
@ k_ra8_mrezs_mask_whukexe
W-HUK Zeroization Executing.
@ k_ra8_mcntselr_oembl
ARC_OEMBL (OEM bootloader).
@ k_ra8_mcntselr_nsec_0
ARC_NSEC index 0; +1/+2/+3 follow.
@ k_ra8_mcntselr_sec
ARC_SEC.
@ k_ra8_mcntselr_mask
CNTSEL[2:0].
@ k_ra8_msuasmon_mask_btflg
Boot-swap flag.
@ k_ra8_msuasmon_mask_fspr
Protection flag.
@ k_ra8_mstatr_mask_any_err
Composite error mask.
@ k_ra8_msuinitr_full_init
KEY=0xAA, SUINIT=1.
@ k_ra8_msuinitr_mask_suinit
SUINIT status bit.
static volatile uint32_t * ra8_mram_reg32(uint16_t off)
Pointer to a word-wide MRMS register at offset off.
@ k_ra8_mrezc_full_zero
RA8 mrezc full zero.
@ k_ra8_maci_cmd_word_count_n
N = 8 halfwords (one 16-byte unit).
@ k_ra8_maci_cmd_increment_counter
Increment an anti-rollback count.
@ k_ra8_maci_cmd_final
Trailer byte: starts command processing.
@ k_ra8_maci_cmd_program
Program opener: extra-MRAM DATA area.
@ k_ra8_maci_cmd_read_counter
Read an anti-rollback counter.
@ k_ra8_maci_cmd_config_set
Config-Set opener: OFS config area.
@ k_ra8_msuacr_swap_default
RA8 msuacr swap default.
@ k_ra8_msuacr_key
RA8 msuacr key.
@ k_ra8_msuacr_swap_alternate
RA8 msuacr swap alternate.
@ k_ra8_mram_arc_max_words
Max 32-bit words per ARC.
@ k_ra8_mram_block_size_bytes
One programmable block.
@ k_ra8_mram_config_set_word_count
8 halfwords per MACI write.
@ k_ra8_mram_write_size_bytes
Minimum programmable unit.
@ k_ra8_mram_config_set_bytes
Bytes per config-set (8 halfwords).
@ k_ra8_mram_off_mrcrtea
RA8 MRAM off mrcrtea.
@ k_ra8_mram_off_msuinitr
RA8 MRAM off msuinitr.
@ k_ra8_mram_off_mrcfreq
RA8 MRAM off mrcfreq.
@ k_ra8_mram_off_mrefreq
RA8 MRAM off mrefreq.
@ k_ra8_mram_off_mrceecc
RA8 MRAM off mrceecc.
@ k_ra8_mram_off_mcntdtr0
RA8 MRAM off mcntdtr0.
@ k_ra8_mram_off_mrertea
RA8 MRAM off mrertea.
@ k_ra8_mram_off_mctrstatr
RA8 MRAM off mctrstatr.
@ k_ra8_mram_off_msuacr
RA8 MRAM off msuacr.
@ k_ra8_mram_off_msar
RA8 MRAM off msar.
@ k_ra8_mram_off_mrcpea
RA8 MRAM off mrcpea.
@ k_ra8_mram_off_mctrlsr
RA8 MRAM off mctrlsr.
@ k_ra8_mram_off_mctrcntr
RA8 MRAM off mctrcntr.
@ k_ra8_mram_off_mcntdtr1
RA8 MRAM off mcntdtr1.
@ k_ra8_mram_off_mrcdecc
RA8 MRAM off mrcdecc.
@ k_ra8_mram_off_mrezc
RA8 MRAM off mrezc.
@ k_ra8_mram_off_mrerdea
RA8 MRAM off mrerdea.
@ k_ra8_mram_off_mrezs
RA8 MRAM off mrezs.
@ k_ra8_mram_off_mastat
RA8 MRAM off mastat.
@ k_ra8_mram_off_msaddr
RA8 MRAM off msaddr.
@ k_ra8_mram_off_mcntselr
RA8 MRAM off mcntselr.
@ k_ra8_mram_off_mstatr
RA8 MRAM off mstatr.
@ k_ra8_mram_off_msuasmon
RA8 MRAM off msuasmon.
@ k_ra8_mram_off_mrcrdea
RA8 MRAM off mrcrdea.
@ k_ra8_mrcdecc_mask_dececen
Decoder enable (ECCSELC).
@ k_ra8_mrcdecc_key_shift
Pre-shifted KEY[15:8]=0x8C.
@ k_ra8_msaddr_config_set_startup
RA8 msaddr config set startup.
ra8_flash_arc_id_t
Anti-rollback counter identifier.
@ k_ra8_flash_arc_nsec_3
Non-secure ARC #3.
@ k_ra8_flash_arc_nsec_0
Non-secure ARC #0.
@ k_ra8_flash_arc_sec
Secure ARC.
@ k_ra8_flash_arc_nsec_2
Non-secure ARC #2.
@ k_ra8_flash_arc_oembl
OEM bootloader ARC.
@ k_ra8_flash_arc_count
Sentinel.
@ k_ra8_flash_arc_nsec_1
Non-secure ARC #1.
ra8_flash_startup_t
Boot-area selection for ra8_flash_set_startup_area.
@ k_ra8_flash_startup_btflg
Validation sentinel.
@ k_ra8_flash_startup_alternate
Alternate startup area (BTFLG=0).
@ k_ra8_flash_startup_default
Default startup area (BTFLG=1).
Bounded wait-flag primitives for RA8D2 HAL drivers.
Lightweight Logging Interface for ra8-firmware.