77 return (width < min_dim) || (height < min_dim);
102 return (width > max_w) || (height > max_h);
219 const uint32_t x = (uint32_t)(int32_t)rect->
x;
220 const uint32_t y = (uint32_t)(int32_t)rect->
y;
228 if ((rect->
x < 0) || (rect->
y < 0)) {
231 const uint32_t right = (uint32_t)(int32_t)rect->
x + (uint32_t)rect->
width_px;
274 if (((uint32_t)fmt & 0x4UL) != 0UL) {
300 const uint32_t code = (uint32_t)fmt;
633 if (poll_budget == 0UL) {
637 for (uint32_t i = 0UL; i < poll_budget; ++i) {
690 if (!flush_fb && !flush_texture) {
734 uint32_t set_bits = 0UL;
738 if (source_from_l5) {
771 uint32_t set_bits = 0UL;
811 const uint32_t clr_mask =
834 uint32_t set_bits = 0UL;
922 const uint32_t clr_mask =
964 for (uint32_t i = 0UL; i < count; ++i) {
static const char * s_tag
Logging / check tag.
Annotation-attribute framework macros for ra8-firmware.
#define RA8_ISR_SAFE
The function is callable from interrupt context.
#define RA8_INTERNAL
Marker that a function is intended to be static (file-local).
Validation and Error-Checking Macros for ra8-firmware.
#define RA8_RETURN_ON_ERROR(err, tag, message)
Early return on error, propagating the code upward.
#define RA8_CHECK_NULL_PTR(ptr, tag, message)
Reject nullptr pointer, returning k_ra8_err_null_ptr.
ra8_err_t ra8_drw_get_status(uint32_t *out_mask)
Read the DRW STATUS register into *out_mask.
void ra8_drw_dispatch(void)
Snapshot STATUS, ack pending DRW IRQs, and fire callback.
static uint32_t s_drw_color1
Software shadow of the write-only COLOR1 register.
ra8_err_t ra8_drw_clear_status(uint32_t mask)
Acknowledge a subset of pending DRW interrupts via IRQCTL.
ra8_err_t ra8_drw_attach_handler(ra8_drw_event_fn_t fn, void *ctx)
Register a software callback for DRW IRQ events.
bool priv_ra8_drw_internal_rect_off_surface(const ra8_drw_rect_t *rect)
Reject a rectangle that would rasterize outside the framebuffer.
static uint32_t internal_control2_rmw(uint32_t clear_mask, uint32_t set_mask)
Read-modify-write a CONTROL2 mask; preserve unrelated bits.
static uint32_t s_drw_bytes_px
Cached framebuffer bytes per pixel for the configured WRITEFORMAT.
ra8_err_t ra8_drw_set_pattern(uint8_t pattern_byte)
Set the per-byte PATTERN bitmap (HUM Ch 62.2.9 p 3698).
ra8_err_t ra8_drw_cache_flush(bool flush_fb, bool flush_texture)
Pulse FB and/or texture cache flush bits in CACHECTL.
static ra8_drw_event_fn_t s_drw_fn
Currently registered DRW event callback (or nullptr).
ra8_err_t ra8_drw_get_hwrevision(uint32_t *out)
Read the read-only HWREVISION register into *out.
ra8_err_t ra8_drw_reset(void)
Software reset: drain pipeline, ack IRQs, reset PERFCOUNTers.
ra8_err_t ra8_drw_clear_texture(void)
Disable the texture unit (clear CONTROL2.TEXTUREENABLE / RLE / CLUT).
static uint32_t s_drw_origin
Cached ORIGIN (framebuffer base) for the per-primitive render trigger.
bool priv_ra8_drw_internal_rect_above_max(uint16_t max_w, uint16_t max_h, uint16_t width, uint16_t height)
Pure rect-above-max predicate – see header for full contract.
uint32_t priv_ra8_drw_internal_origin(void)
Implementation of priv_ra8_drw_internal_origin() – shadow read.
void priv_program_rect_bbox(const ra8_drw_rect_t *rect)
Programme the bounding box that describes an axis-aligned rect.
ra8_err_t ra8_drw_init(const ra8_drw_config_t *cfg)
Power on the DRW block, install the supplied configuration, and arm the IRQ control register.
ra8_err_t ra8_drw_enter_stop(void)
Drop the DRW into MSTP-gated stop (clock removed).
ra8_err_t ra8_drw_load_clut(uint8_t start_index, const uint32_t *entries, uint32_t count)
Load a CLUT entry pair (TEXCLADDR, TEXCLDATA, TEXCLOFFSET).
static uint32_t internal_pack_blend_bits(const ra8_drw_blend_t *blend)
Pack ra8_drw_blend_t into a CONTROL2 set-bit slab.
static uint32_t internal_pack_readformat(ra8_drw_readformat_t fmt)
Pack a 4-bit READFORMAT value into CONTROL2.READFORMAT_H+L.
static void * s_drw_ctx
Opaque context paired with s_drw_fn.
ra8_err_t ra8_drw_wait_idle(uint32_t poll_budget)
Poll STATUS until all "busy" bits clear or budget runs out.
static void internal_drw_program_cache_options(const ra8_drw_config_t *cfg)
Program the optional CACHECTL and DBWER features from the config.
ra8_err_t ra8_drw_set_color_key(uint32_t key_rgb, bool enable)
Programme the COLKEY register and toggle COLKEYENABLE.
ra8_err_t ra8_drw_set_gradient(const ra8_drw_gradient_t *grad)
Programme the COLOR1 and COLOR2 registers from a 2-stop gradient.
uint32_t priv_ra8_drw_internal_rect_origin(const ra8_drw_rect_t *rect)
Framebuffer byte address of a rectangle's top-left pixel.
bool priv_ra8_drw_internal_rect_below_min(uint16_t min_dim, uint16_t width, uint16_t height)
Pure rect-below-min predicate – see header for full contract.
ra8_err_t ra8_drw_exit_stop(void)
Re-enable the DRW MSTP gate (clock restored).
ra8_err_t ra8_drw_deinit(void)
Tear down the DRW block: disable IRQs, drop the registered callback, and request MSTP gate.
void priv_ra8_drw_internal_color1_write(uint32_t argb8888)
Implementation of priv_ra8_drw_internal_color1_write() – MMIO + shadow.
static uint32_t internal_pack_surface_defaults(ra8_drw_writeformat_t fmt)
Build the CONTROL2 value a plain solid-fill surface needs at init.
static uint32_t s_drw_pitch_px
Cached framebuffer pitch in pixels.
ra8_err_t ra8_drw_set_irq_enables(uint32_t enable_mask)
Set the IRQCTL enable bits (ENUMIRQEN, DLISTIRQEN, BUSIRQEN).
static uint32_t s_drw_control2
Software shadow of the write-only CONTROL2 register.
static uint32_t internal_pack_writeformat(ra8_drw_writeformat_t fmt)
Fold the three-bit WRITEFORMAT field into a 32-bit CONTROL2 value (WRITEFORMAT2 lives at bit 8,...
ra8_err_t ra8_drw_set_texture(const ra8_drw_texture_t *tex)
Programme TEXORIGIN, TEXPITCH, TEXMASK, U/V limiters and the CONTROL2 texture / CLUT / RLE / colour-k...
static uint32_t internal_pack_texture_bits(const ra8_drw_texture_t *tex)
Pack ra8_drw_texture_t into a CONTROL2 set-bit slab.
ra8_err_t ra8_drw_set_pattern_enable(bool enable, bool source_from_l5)
Toggle CONTROL2.PATTERNENABLE / PATTERNSOURCEL5.
static uint32_t internal_bytes_per_px(ra8_drw_writeformat_t fmt)
Map a WRITEFORMAT code to its framebuffer pixel stride in bytes.
ra8_err_t ra8_drw_set_blend(const ra8_drw_blend_t *blend)
Configure the alpha-blend unit using ra8_drw_blend_t fields.
2D Drawing Engine (DRW / D/AVE 2D) HAL driver – public API
void(* ra8_drw_event_fn_t)(void *ctx, uint32_t status_mask)
DRW asynchronous event callback signature.
Test-access surface for ra8_drw internal helpers (MC/DC).
@ k_ra8_drw_internal_byte_mask
8-bit channel mask.
@ k_ra8_drw_internal_clut_max
CLUT entries (HUM 62.5.4).
@ k_ra8_drw_internal_color_alpha_mask
0x00RRGGBB low bits.
2D Drawing Engine (DRW / D/AVE 2D) register layout for the RA8D2
@ k_ra8_drw_off_color1
W: Base color RGBA.
@ k_ra8_drw_off_origin
W: Framebuffer base address.
@ k_ra8_drw_off_l1start
W: Limiter 1 start.
@ k_ra8_drw_off_texpitch
W: Texels per texture line.
@ k_ra8_drw_off_color2
W: Secondary color RGBA.
@ k_ra8_drw_off_l3xadd
W: Limiter 3 X-axis increment.
@ k_ra8_drw_off_l1yadd
W: Limiter 1 Y-axis increment.
@ k_ra8_drw_off_dbwer
RW: DRW bufferable write en.
@ k_ra8_drw_off_l4yadd
W: Limiter 4 Y-axis increment.
@ k_ra8_drw_off_pattern
W: Pattern bitmap.
@ k_ra8_drw_off_irqctl
W: Interrupt control.
@ k_ra8_drw_off_hwrevision
R: HW revision (alias).
@ k_ra8_drw_off_status
R: Engine status (alias).
@ k_ra8_drw_off_texcldata
W: CLUT entry data.
@ k_ra8_drw_off_l4start
W: Limiter 4 start.
@ k_ra8_drw_off_texcloffset
W: CLUT index offset.
@ k_ra8_drw_off_cachectl
W: Cache enable / flush.
@ k_ra8_drw_off_perfcount2
RW: Performance counter 2.
@ k_ra8_drw_off_l3start
W: Limiter 3 start.
@ k_ra8_drw_off_texorigin
W: Texture base address.
@ k_ra8_drw_off_size
W: Bounding box (W,H).
@ k_ra8_drw_off_texcladdr
W: CLUT start address.
@ k_ra8_drw_off_l2xadd
W: Limiter 2 X-axis increment.
@ k_ra8_drw_off_l2yadd
W: Limiter 2 Y-axis increment.
@ k_ra8_drw_off_texmask
W: Texture U/V mask.
@ k_ra8_drw_off_perfcount1
RW: Performance counter 1.
@ k_ra8_drw_off_l1xadd
W: Limiter 1 X-axis increment.
@ k_ra8_drw_off_pitch
W: FB pitch + spanstore delay.
@ k_ra8_drw_off_colkey
W: Color key value.
@ k_ra8_drw_off_l2start
W: Limiter 2 start.
@ k_ra8_drw_off_l4xadd
W: Limiter 4 X-axis increment.
@ k_ra8_drw_off_control2
W: Surface control.
@ k_ra8_drw_off_l3yadd
W: Limiter 3 Y-axis increment.
@ k_ra8_drw_size_height_pos
SIZEY in upper half-word.
@ k_ra8_drw_color_a_pos
COLORnA[7:0].
@ k_ra8_drw_writealpha_pixel_cov
Use source coverage.
ra8_drw_writeformat_t
Framebuffer pixel format codes (3-bit field).
@ k_ra8_drw_writefmt_argb8888
32 bpp ARGB8888.
@ k_ra8_drw_writefmt_a8
8 bpp A(8).
static volatile uint32_t * ra8_drw_reg32(ra8_drw_off_t off)
Pointer to a 32-bit register inside the DRW block.
ra8_drw_readformat_t
Texture pixel format codes (4-bit field).
@ k_ra8_drw_control2_bsf
Blend src factor.
@ k_ra8_drw_control2_textureenable
Texture source.
@ k_ra8_drw_control2_textureclampx
Texture clamp X.
@ k_ra8_drw_control2_clutenable
CLUT enable.
@ k_ra8_drw_control2_patternenable
Pattern source.
@ k_ra8_drw_control2_rleenable
RLE source.
@ k_ra8_drw_control2_readformatl_mask
READFORMAT_L mask.
@ k_ra8_drw_control2_bsi
Blend src inverted.
@ k_ra8_drw_control2_colkeyenable
Color key enable.
@ k_ra8_drw_control2_texturefilterx
Bilinear X.
@ k_ra8_drw_control2_writeformat_pos
WRITEFORMAT[1:0] @20.
@ k_ra8_drw_control2_writealpha_pos
WRITEALPHA[1:0] @22.
@ k_ra8_drw_control2_bdi
Blend dst inverted.
@ k_ra8_drw_control2_texturefiltery
Bilinear Y.
@ k_ra8_drw_control2_bdf
Blend dst factor.
@ k_ra8_drw_control2_textureclampy
Texture clamp Y.
@ k_ra8_drw_control2_bdfa
Blend dst fac alpha.
@ k_ra8_drw_control2_useacb
Alpha channel blend.
@ k_ra8_drw_control2_bc2
Use COLOR2 as DST.
@ k_ra8_drw_control2_readformath_pos
READFORMAT_H[3:2] @4.
@ k_ra8_drw_control2_writeformat2_bit
WRITEFORMAT[2].
@ k_ra8_drw_control2_readformatl_pos
READFORMAT_L[1:0] @18.
@ k_ra8_drw_control2_readformath_mask
READFORMAT_H mask.
@ k_ra8_drw_control2_bsfa
Blend src fac alpha.
@ k_ra8_drw_control2_patternsourcel5
Use L5 as pat index.
@ k_ra8_drw_control2_clutformat_565
CLUT in RGB565 mode.
@ k_ra8_drw_control2_bdia
Blend dst alpha inv.
@ k_ra8_drw_control2_bsia
Blend src alpha inv.
@ k_ra8_drw_control2_rlepixel_pos
RLEPIXELWIDTH @30.
@ k_ra8_drw_control2_rlepixel_mask
RLEPIXELWIDTH mask.
@ k_ra8_drw_dbwer_bwe
Enable bufferable writes.
@ k_ra8_drw_max_texpitch_tx
HUM 62.2.15 TEXPITCH max.
@ k_ra8_drw_cachectl_all_flush
RA8 DRW cachectl all flush.
@ k_ra8_drw_cachectl_all_en
RA8 DRW cachectl all en.
@ k_ra8_drw_cachectl_cflushtx
Texture cache flush.
@ k_ra8_drw_cachectl_cflushfx
FB cache flush.
@ k_ra8_drw_bytes_px_8bpp
A8.
@ k_ra8_drw_bytes_px_32bpp
ARGB8888.
@ k_ra8_drw_bytes_px_16bpp
RGB565 / ARGB4444.
@ k_ra8_drw_status_busy_mask
RA8 DRW status busy mask.
@ k_ra8_drw_irqctl_all_clr
RA8 DRW irqctl all clr.
Error Code Definitions for ra8-firmware.
@ 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.
ra8_err_codes_t ra8_err_t
Canonical error-return type used by every ra8-firmware API.
Lightweight Logging Interface for ra8-firmware.
#define ra8_log_warn(tag, message)
RA8 log warn.
#define ra8_log_info_val(tag, message, value)
RA8 log info val.
#define ra8_log_error(tag, message)
RA8 log error.
Low Power Mode (LPM) HAL driver – public API.
@ k_ra8_lpm_pd_timeout_default
Default power-gate poll bound.
ra8_err_t ra8_lpm_graphics_power_on(uint32_t timeout_iters)
Power the graphics domain on (DRW / GLCDC / MIPI DSI+CSI / VIN).
Ref-counted Module Stop Control wrapper for the RA8D2.
ra8_err_t ra8_mstp_enable(ra8_mstp_t id)
Reference-counted "ungate this peripheral" request.
ra8_err_t ra8_mstp_disable(ra8_mstp_t id)
Reference-counted "gate this peripheral" request.
@ k_ra8_mstp_drw
MSTPC6 2D Drawing.
Per-pixel + global alpha blending parameters.
bool dst_invert
CONTROL2.BDI.
bool dst_factor
CONTROL2.BDF (use DST alpha).
bool src_invert
CONTROL2.BSI.
bool use_color2_dst
CONTROL2.BC2 (COLOR2 as dst).
bool dst_factor_alpha
CONTROL2.BDFA.
bool dst_invert_alpha
CONTROL2.BDIA.
bool use_alpha_channel
CONTROL2.USEACB.
bool src_invert_alpha
CONTROL2.BSIA.
uint8_t global_alpha
COLOR1.A (0=fully transparent).
bool src_factor_alpha
CONTROL2.BSFA.
bool src_factor
CONTROL2.BSF (use SRC alpha).
Minimal DRW configuration captured by ra8_drw_init.
bool enable_caches
Enable FB + texture caches.
ra8_drw_writeformat_t format
FB pixel format.
uint16_t pitch_px
FB pitch in pixels.
uintptr_t framebuffer_addr
FB base addr (target ARGB).
bool enable_buffered_writes
Set DBWER.BWE on init.
COLOR1 + COLOR2 two-stop gradient.
uint32_t color2_argb8888
COLOR2 ARGB stop.
uint32_t color1_argb8888
COLOR1 ARGB stop.
Rectangle parameters for ra8_drw_fill_rect.
uint16_t height_px
Height in pixels.
int16_t x
Top-left X in pixels.
int16_t y
Top-left Y in pixels.
uint16_t width_px
Width in pixels.
Texture parameters for ra8_drw_blit_textured_rect.
bool clut_565
CONTROL2.CLUTFORMAT (RGB565).
bool clamp_y
CONTROL2.TEXTURECLAMPY.
bool enable_color_key
CONTROL2.COLKEYENABLE.
bool clamp_x
CONTROL2.TEXTURECLAMPX.
uint16_t pitch_px
TEXPITCH (texels per line).
uint8_t clut_offset
TEXCLOFFSET CLOFFSET[7:0].
ra8_drw_readformat_t format
READFORMAT_H+L 4-bit value.
bool filter_y
CONTROL2.TEXTUREFILTERY.
uintptr_t base_addr
TEXORIGIN – texel base.
bool enable_rle
CONTROL2.RLEENABLE.
uint32_t color_key_rgb
COLKEY value (0x00RRGGBB).
uint16_t u_mask
TEXMASK[15:0] (U mask).
bool filter_x
CONTROL2.TEXTUREFILTERX.
ra8_drw_rlepixel_t rle_pixel_width
CONTROL2.RLEPIXELWIDTH.
bool enable_clut
CONTROL2.CLUTENABLE.
uint16_t v_mask
TEXMASK[31:16] (V mask).