42static const char*
const s_tag =
"ra8_io_blockdev_mram";
56typedef enum : uint32_t {
142 if (base < extra_start) {
145 if (base >= extra_end) {
148 if (span > extra_end - base) {
193 (void)
memcpy(buf, (
const uint8_t*)(st->
base + (uintptr_t)off), n);
358 uint32_t block_count,
370 state->
base = base_addr;
static const char * s_tag
Logging / check tag.
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_CHECK_NULL_PTR(ptr, tag, message)
Reject nullptr pointer, returning k_ra8_err_null_ptr.
Error Code Definitions for ra8-firmware.
@ k_ra8_err_not_supported
Requested feature not compiled in, not wired, or not supported by this MCU variant.
@ k_ra8_err_out_of_range
Sensor or peripheral output out of valid range.
@ k_ra8_err_invalid_arg
Invalid function argument.
@ k_ra8_ok
Success – operation completed with all postconditions satisfied.
ra8_err_codes_t ra8_err_t
Canonical error-return type used by every ra8-firmware API.
Code MRAM + Extra MRAM + Option-Setting driver – DANGEROUS, brick-capable.
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_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.
Flash / MRAM controller register layout for the Renesas RA8D2.
@ k_ra8_flash_extra_start
First legal Program target (FSBL setting).
@ k_ra8_flash_extra_size
Covers through 0x02E179F0 (last, reserved).
@ k_ra8_mram_block_size_bytes
One programmable block.
@ k_ra8_mram_write_size_bytes
Minimum programmable unit.
void * memcpy(void *dst, const void *src, size_t n)
Copy memory area between non-overlapping regions.
ra8_io block-device fabric – one LBA vtable across every storage medium.
struct ra8_io_blockdev_iface ra8_io_blockdev_iface_t
@ k_ra8_io_erase_value_ones
Block reads back as 0xFF after erase.
@ k_ra8_io_block_size_bytes
Bytes per logical block (the only size).
Backend implementation contract for the ra8_io block-device fabric.
static ra8_err_t internal_mram_erase(void *ctx, uint32_t lba, uint32_t count)
MRAM backend: erase count blocks at lba to all-ones.
static ra8_err_t internal_mram_write(void *ctx, uint32_t lba, uint32_t count, const uint8_t *buf)
MRAM backend: program count blocks from buf at lba.
ra8_io_mram_const_t
MRAM-backend layout constants.
@ k_ra8_io_mram_min_blocks
Smallest legal device size.
@ k_ra8_io_mram_erase_block_bytes
MRAM erase/program unit in bytes (32).
@ k_ra8_io_mram_erase_unit_blocks
Logical-block erase granularity: 1 (MRAM erases in 32-byte sub-units).
@ k_ra8_io_mram_program_bytes
MRAM minimum program granularity in bytes (32).
@ k_ra8_io_mram_zero_len
Sentinel for an empty length.
static ra8_err_t internal_mram_get_caps(const void *ctx, ra8_io_blockdev_caps_t *out)
MRAM backend: report medium capabilities.
static ra8_err_t internal_mram_window_ok(uintptr_t base, uint32_t block_count)
Validate that an MRAM window is erase-aligned and inside data MRAM.
static ra8_err_t internal_mram_bounds(const ra8_io_blockdev_mram_state_t *st, uint32_t lba, uint32_t count)
Reject an out-of-range [lba, lba+count) block range.
ra8_err_t ra8_io_blockdev_mram_init(ra8_io_blockdev_t *bd, ra8_io_blockdev_mram_state_t *state, uintptr_t base_addr, uint32_t block_count, bool read_only)
Bind a hard-fenced MRAM block-device backend into a caller handle.
static const ra8_io_blockdev_iface_t s_mram_iface
MRAM backend vtable.
static ra8_err_t internal_mram_read(void *ctx, uint32_t lba, uint32_t count, uint8_t *buf)
MRAM backend: read count blocks at lba into buf.
ra8_io block-device backend over the on-chip extra/data MRAM region.
Static properties a backend reports about its medium.
uint32_t erase_unit_blocks
Erase granularity, in logical blocks.
uint32_t block_count
Total addressable logical blocks.
bool must_erase_before_write
true => program needs a prior erase.
bool read_only
true => writes/erases are rejected.
uint8_t erase_value
Post-erase byte (ra8_io_erase_value_t).
uint16_t logical_block_bytes
Logical block size (always 512).
uint32_t program_size_bytes
Minimum program granularity in bytes.
Caller-owned private state for an MRAM block device.
uint32_t block_count
Number of 512-byte logical blocks (private).
uintptr_t base
First MRAM byte address of the window (private).
bool read_only
true => writes and erases are rejected (private).
Caller-allocated block-device handle binding a backend to its context.
const ra8_io_blockdev_iface_t * iface
Bound backend vtable (private).
void * ctx
Backend-private context (private).