ra8-firmware 0.1.0
Bare-metal firmware for the Renesas RA8 family (RA8D2 / RA8P1)
Loading...
Searching...
No Matches
ra8_drw_regs.h
Go to the documentation of this file.
1
74
75#pragma once
76
77#ifdef __cplusplus
78extern "C" {
79#endif
80
81#include <stdint.h>
82
83#include "ra8_attributes.h"
84
94typedef enum : uintptr_t {
95 k_ra8_drw_base_addr = 0x40444000UL,
96 k_ra8_drw_ns_base_addr = 0x50444000UL,
98
107typedef enum : uint16_t {
161
166typedef enum : uint16_t {
169
170/* =============================================================================
171 * STATUS register (R only, alias of CONTROL @ +0x00)
172 *
173 * HUM Ch 62.2.5 "STATUS : Status Control Register" p 3695.
174 * =============================================================================
175 */
176
205
206/* =============================================================================
207 * IRQCTL register (W only)
208 *
209 * HUM Ch 62.2.3 "IRQCTL : Interrupt Control Register" p 3693.
210 * =============================================================================
211 */
212
235
236/* =============================================================================
237 * CACHECTL register (W only)
238 *
239 * HUM Ch 62.2.4 "CACHECTL : Cache Control Register" p 3694.
240 * =============================================================================
241 */
242
264
265/* =============================================================================
266 * CONTROL2 (Surface Control) register
267 *
268 * HUM Ch 62.2.2 p 3690-3693.
269 * =============================================================================
270 */
271
281typedef enum : uint32_t {
292 k_ra8_drw_control2_bdf = (1UL << 10U),
293 k_ra8_drw_control2_bsi = (1UL << 11U),
294 k_ra8_drw_control2_bdi = (1UL << 12U),
295 k_ra8_drw_control2_bc2 = (1UL << 13U),
310 k_ra8_drw_control2_bsia = (1UL << 28U),
311 k_ra8_drw_control2_bdia = (1UL << 29U),
315
316/* =============================================================================
317 * CONTROL (Geometry Control) register
318 *
319 * HUM Ch 62.2.1 p 3689-3690.
320 * =============================================================================
321 */
322
340typedef enum : uint32_t {
374
375/* =============================================================================
376 * HWREVISION (R only, alias of CONTROL2)
377 *
378 * HUM Ch 62.2.6 p 3696.
379 * =============================================================================
380 */
381
391typedef enum : uint32_t {
393 k_ra8_drw_hwrev_dlr = (1UL << 17U),
394 k_ra8_drw_hwrev_fbcache = (1UL << 18U),
395 k_ra8_drw_hwrev_txcache = (1UL << 19U),
397 k_ra8_drw_hwrev_texclut = (1UL << 21U),
398 k_ra8_drw_hwrev_rleunit = (1UL << 23U),
401 k_ra8_drw_hwrev_acblend = (1UL << 27U),
404
405/* =============================================================================
406 * Pixel formats
407 *
408 * HUM Ch 62.2.2 p 3692 (WRITEFORMAT[2:0] table) and Ch 62.3.1.1 p 3707.
409 * =============================================================================
410 */
411
434
469
484
499
500/* =============================================================================
501 * Performance counters
502 *
503 * HUM Ch 62.2.33 p 3706.
504 * =============================================================================
505 */
506
533
542
543/* =============================================================================
544 * Display list encoding
545 *
546 * A display list is a stream of 32-bit words the DRW's display-list reader
547 * (DLR) fetches from RAM after DLISTSTART is written (HUM Ch 62.6 "Display
548 * List Mode" p 3724). The HUM documents the concept but not the word layout;
549 * the layout below is the one the DLR consumes, decoded from the vendored TES
550 * D/AVE 2D reference (its software DLR model d2_executedlist_intern and
551 * register map: register index == byte offset / 4) and bench-verified on an
552 * EK-RA8D2 (issue #247).
553 *
554 * Each entry is a TAG word followed by one value word per register it writes.
555 * The tag packs up to four register indices, one per byte. The first byte
556 * position >= 1 whose bit 7 is set marks the entry's boundary: byte 1 -> one
557 * register, byte 2 -> two, byte 3 -> three, none set -> four. A word whose low
558 * byte is 0xFF is an end-of-list marker with an argument in byte 1 (2 = wait
559 * for the pipeline and cache then continue; 3 = terminate).
560 * =============================================================================
561 */
562
585
606
607/* =============================================================================
608 * SIZE / PITCH / DBWER misc bit fields
609 * =============================================================================
610 */
611
634
648
667
676typedef enum : uint32_t {
677 k_ra8_drw_dbwer_bwe = (1UL << 2U),
679
693
708static inline volatile uint32_t* ra8_drw_reg32(ra8_drw_off_t off)
709{
710 return (volatile uint32_t*)(k_ra8_drw_base_addr + (uintptr_t)(uint16_t)off);
711}
712
713#ifdef __cplusplus
714}
715#endif
Annotation-attribute framework macros for ra8-firmware.
#define RA8_HW_REGISTER_ACCESS
Mark an MMIO accessor function (returns volatile register pointer).
ra8_drw_off_t
Absolute register offsets inside the DRW window.
@ k_ra8_drw_off_color1
W: Base color RGBA.
@ k_ra8_drw_off_origin
W: Framebuffer base address.
@ k_ra8_drw_off_l6start
W: Limiter 6 start.
@ 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_lvxaddi
W: V limiter X integer.
@ 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_l5yadd
W: Limiter 5 Y-axis increment.
@ k_ra8_drw_off_l6xadd
W: Limiter 6 X-axis increment.
@ k_ra8_drw_off_lvyaddi
W: V limiter Y integer.
@ 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_lvstarti
W: V limiter start integer.
@ k_ra8_drw_off_luyadd
W: U limiter Y increment.
@ k_ra8_drw_off_l4start
W: Limiter 4 start.
@ k_ra8_drw_off_l1band
W: Limiter 1 band width.
@ 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_dliststart
W: Display list start address.
@ k_ra8_drw_off_texcladdr
W: CLUT start address.
@ k_ra8_drw_off_control
W: Geometry control.
@ k_ra8_drw_off_lvstartf
W: V limiter start fraction.
@ k_ra8_drw_off_l2xadd
W: Limiter 2 X-axis increment.
@ k_ra8_drw_off_lvyxaddf
W: V limiter X/Y fraction.
@ 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_l2band
W: Limiter 2 band width.
@ k_ra8_drw_off_l5xadd
W: Limiter 5 X-axis increment.
@ k_ra8_drw_off_perfcount1
RW: Performance counter 1.
@ k_ra8_drw_off_perftrigger
W: Performance trigger select.
@ k_ra8_drw_off_l1xadd
W: Limiter 1 X-axis increment.
@ k_ra8_drw_off_l5start
W: Limiter 5 start.
@ k_ra8_drw_off_pitch
W: FB pitch + spanstore delay.
@ k_ra8_drw_off_colkey
W: Color key value.
@ k_ra8_drw_off_luxadd
W: U limiter X increment.
@ k_ra8_drw_off_l2start
W: Limiter 2 start.
@ k_ra8_drw_off_l4xadd
W: Limiter 4 X-axis increment.
@ k_ra8_drw_off_l6yadd
W: Limiter 6 Y-axis increment.
@ k_ra8_drw_off_lustart
W: U limiter start.
@ k_ra8_drw_off_control2
W: Surface control.
@ k_ra8_drw_off_l3yadd
W: Limiter 3 Y-axis increment.
ra8_drw_hwrev_mask_t
HWREVISION feature-set bit masks (read-only).
@ k_ra8_drw_hwrev_rev_mask
REV[11:0].
@ k_ra8_drw_hwrev_fbcache
FB cache present.
@ k_ra8_drw_hwrev_txcache
Texture cache present.
@ k_ra8_drw_hwrev_colorkey
Color key unit.
@ k_ra8_drw_hwrev_reset_value
Power-on value.
@ k_ra8_drw_hwrev_texclut256
CLUT is 256 entries.
@ k_ra8_drw_hwrev_texclut
Texture CLUT present.
@ k_ra8_drw_hwrev_dlr
Display list reader.
@ k_ra8_drw_hwrev_acblend
Full alpha blend.
@ k_ra8_drw_hwrev_perfcount
2 perf counters.
@ k_ra8_drw_hwrev_rleunit
RLE unit present.
ra8_drw_blocksize_t
Total DRW window size, used by static-assert clients.
@ k_ra8_drw_block_bytes
260 bytes – matches FSP R_DRW_Type.
ra8_drw_geom_layout_t
Bit positions / masks shared by SIZE and PITCH.
@ k_ra8_drw_color_b_pos
COLORnB[7:0].
@ k_ra8_drw_perftrigger2_pos
Counter-2 selector pos.
@ k_ra8_drw_size_height_pos
SIZEY in upper half-word.
@ k_ra8_drw_color_g_pos
COLORnG[7:0].
@ k_ra8_drw_color_a_pos
COLORnA[7:0].
@ k_ra8_drw_lvyxaddf_lvyaddf_pos
LVYXADDF.LVYADDF in [31:16].
@ k_ra8_drw_pitch_ssd_pos
SSD in upper half-word.
@ k_ra8_drw_color_r_pos
COLORnR[7:0].
ra8_drw_writealpha_t
WRITEALPHA[1:0] writeback alpha source select.
@ k_ra8_drw_writealpha_fb
Use framebuffer alpha.
@ k_ra8_drw_writealpha_zero
Force 0.0.
@ k_ra8_drw_writealpha_pixel_cov
Use source coverage.
@ k_ra8_drw_writealpha_color2
Use COLOR2 alpha.
ra8_drw_writeformat_t
Framebuffer pixel format codes (3-bit field).
@ k_ra8_drw_writefmt_rgb565
16 bpp RGB565.
@ k_ra8_drw_writefmt_argb8888
32 bpp ARGB8888.
@ k_ra8_drw_writefmt_a8
8 bpp A(8).
@ k_ra8_drw_writefmt_argb4444
16 bpp ARGB4444.
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_readfmt_argb1555
16 bpp ARGB1555.
@ k_ra8_drw_readfmt_clut1
1 bpp CLUT1/I1.
@ k_ra8_drw_readfmt_argb8888
32 bpp ARGB8888.
@ k_ra8_drw_readfmt_argb4444
16 bpp ARGB4444.
@ k_ra8_drw_readfmt_aclut44
8 bpp 4+4 ACLUT.
@ k_ra8_drw_readfmt_clut4
4 bpp CLUT4/I4.
@ k_ra8_drw_readfmt_rgb565
16 bpp RGB565 texture.
@ k_ra8_drw_readfmt_clut2
2 bpp CLUT2/I2.
@ k_ra8_drw_readfmt_clut8
8 bpp CLUT8/I8.
@ k_ra8_drw_readfmt_a8
8 bpp A(8) texture.
ra8_drw_perfcounter_id_t
Selector for the two PERFCOUNTk registers.
@ k_ra8_drw_perfctr_1
PERFCOUNT1 @ +0xCC.
@ k_ra8_drw_perfctr_2
PERFCOUNT2 @ +0xD0.
ra8_drw_subpixel_t
DRW limiter sub-pixel constants (Q12.4 fixed-point space).
@ k_ra8_drw_subpixel_shift
1 pixel == 16 sub-pixels.
@ k_ra8_drw_subpixel_unit
1 pixel value (1 << 4).
ra8_drw_perftrigger_t
Internal events that increment a PERFCOUNT register.
@ k_ra8_drw_perfev_disabled
Disable counter.
@ k_ra8_drw_perfev_active_cycles
2D engine active cycles.
@ k_ra8_drw_perfev_fb_read_miss
FB cache read misses.
@ k_ra8_drw_perfev_fb_write_hit
FB cache write hits.
@ k_ra8_drw_perfev_dlist_active
Display list reader active.
@ k_ra8_drw_perfev_invisible_idle
Invisible while FIFO empty.
@ k_ra8_drw_perfev_tex_read_hit
Texture cache read hits.
@ k_ra8_drw_perfev_tex_read
Texture read accesses.
@ k_ra8_drw_perfev_fb_write_miss
FB cache write misses.
@ k_ra8_drw_perfev_fb_read_hit
FB cache read hits.
@ k_ra8_drw_perfev_every_cycle
Free-running timer mode.
@ k_ra8_drw_perfev_invisible
Invisible (alpha 0) pixels.
@ k_ra8_drw_perfev_tex_read_miss
Texture cache read misses.
@ k_ra8_drw_perfev_fb_read
FB read access count.
@ k_ra8_drw_perfev_fb_write
FB write access count.
ra8_drw_rlepixel_t
RLEPIXELWIDTH[1:0] – bytes per RLE-encoded texel.
@ k_ra8_drw_rle_1byte
1 byte per texel (8-bit CLUT/I/A/ACLUT44).
@ k_ra8_drw_rle_4byte
4 bytes per texel (32-bit ARGB8888).
@ k_ra8_drw_rle_3byte
3 bytes per texel (24-bit RGB888).
@ k_ra8_drw_rle_2byte
2 bytes per texel (16-bit RGB565/ARGB).
ra8_drw_control2_mask_t
CONTROL2 (Surface Control) field masks for every documented bit.
@ 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_writealpha_mask
WRITEALPHA mask.
@ 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_control2_writeformat_mask
WRITEFORMAT mask.
ra8_drw_dbwer_mask_t
DBWER (DRW Bufferable Write Enable) field masks.
@ k_ra8_drw_dbwer_bwe
Enable bufferable writes.
ra8_drw_dim_limits_t
Hardware bounds documented by HUM Ch 62.
@ k_ra8_drw_clut_entries_max
HUM 62.2.6 TEXCLUT256 = 1.
@ k_ra8_drw_max_height_px
HUM 62.2.29 SIZEY max.
@ k_ra8_drw_min_dim_px
Zero-sized rect rejected.
@ k_ra8_drw_max_texpitch_tx
HUM 62.2.15 TEXPITCH max.
@ k_ra8_drw_max_texumask
HUM 62.2.16 TEXUMASK clamp.
@ k_ra8_drw_max_texvmask
HUM 62.2.16 TEXVMASK clamp.
@ k_ra8_drw_max_width_px
HUM 62.2.29 SIZEX max.
ra8_drw_dlr_word_t
Display-list tag and end-of-list word constants.
@ k_ra8_drw_dlr_eol_byte
End-of-list low byte marker.
@ k_ra8_drw_dlr_arg_terminate
Arg: terminate the list.
@ k_ra8_drw_dlr_arg_wait
Arg: wait pipe+cache, go on.
@ k_ra8_drw_dlr_tag_one_index
1-register entry tag base.
@ k_ra8_drw_dlr_eol_arg_pos
End-of-list argument shift.
ra8_drw_cachectl_mask_t
CACHECTL register bit masks (write-only).
@ k_ra8_drw_cachectl_all_flush
RA8 DRW cachectl all flush.
@ k_ra8_drw_cachectl_cenabletx
Texture cache enable.
@ 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_cachectl_cenablefx
FB cache enable.
ra8_drw_dlr_index_t
Register indices a display-list entry addresses (byte offset / 4).
@ k_ra8_drw_dlr_idx_color1
COLOR1 (HUM Ch 62.2.7, 0x64/4).
@ k_ra8_drw_dlr_idx_control
CONTROL (HUM Ch 62.2.1, 0x00/4).
@ k_ra8_drw_dlr_idx_color2
COLOR2 (HUM Ch 62.2.8, 0x68/4).
@ k_ra8_drw_dlr_idx_origin
ORIGIN (HUM Ch 62.2.31, 0x80/4).
@ k_ra8_drw_dlr_idx_control2
CONTROL2 (HUM Ch 62.2.2, 0x04/4).
@ k_ra8_drw_dlr_idx_size
SIZE (HUM Ch 62.2.29, 0x78/4).
@ k_ra8_drw_dlr_idx_cachectl
CACHECTL (HUM Ch 62.2.4, 0xC4/4).
@ k_ra8_drw_dlr_idx_pitch
PITCH (HUM Ch 62.2.30, 0x7C/4).
ra8_drw_pixel_stride_t
Framebuffer pixel stride in bytes per WRITEFORMAT class.
@ k_ra8_drw_bytes_px_8bpp
A8.
@ k_ra8_drw_bytes_px_32bpp
ARGB8888.
@ k_ra8_drw_bytes_px_16bpp
RGB565 / ARGB4444.
ra8_drw_addr_t
Memory-mapped base addresses for the DRW block.
@ k_ra8_drw_ns_base_addr
DRW Non-Secure base.
@ k_ra8_drw_base_addr
DRW Secure base.
ra8_drw_control_mask_t
CONTROL (Geometry Control) field masks for every documented bit.
@ k_ra8_drw_control_lim4en
Enable limiter 4.
@ k_ra8_drw_control_line_quad
RA8 DRW control line quad.
@ k_ra8_drw_control_quad1en
QUAD1 (L1,L2).
@ k_ra8_drw_control_lim1en
Enable limiter 1.
@ k_ra8_drw_control_lim3en
Enable limiter 3.
@ k_ra8_drw_control_lim2threshold
Threshold mode L2.
@ k_ra8_drw_control_spanstore
Span-store opt.
@ k_ra8_drw_control_unioncd
Union C,D -> final.
@ k_ra8_drw_control_union56
Union L5,L6 -> D.
@ k_ra8_drw_control_lim6en
Enable limiter 6.
@ k_ra8_drw_control_quad2en
QUAD2 (L3,L4).
@ k_ra8_drw_control_band1en
Band post-proc L1.
@ k_ra8_drw_control_quad_box
RA8 DRW control quad box.
@ k_ra8_drw_control_triangle
RA8 DRW control triangle.
@ k_ra8_drw_control_spanabort
Convex-shape opt.
@ k_ra8_drw_control_quad3en
QUAD3 (L5,L6).
@ k_ra8_drw_control_lim1threshold
Threshold mode L1.
@ k_ra8_drw_control_lim2en
Enable limiter 2.
@ k_ra8_drw_control_band2en
Band post-proc L2.
@ k_ra8_drw_control_lim5threshold
Threshold mode L5.
@ k_ra8_drw_control_union12
Union L1,L2 -> A.
@ k_ra8_drw_control_lim6threshold
Threshold mode L6.
@ k_ra8_drw_control_lim5en
Enable limiter 5.
@ k_ra8_drw_control_unionab
Union A,B -> C.
@ k_ra8_drw_control_lim4threshold
Threshold mode L4.
@ k_ra8_drw_control_lim3threshold
Threshold mode L3.
@ k_ra8_drw_control_union34
Union L3,L4 -> B.
ra8_drw_status_mask_t
STATUS register bit masks (read-only).
@ k_ra8_drw_status_buserr_mask
RA8 DRW status buserr mask.
@ k_ra8_drw_status_buserrmfb
FB bus error.
@ k_ra8_drw_status_buserrmdl
Display list bus error.
@ k_ra8_drw_status_enumirq
Enumeration finished IRQ.
@ k_ra8_drw_status_cachedirty
FB cache dirty.
@ k_ra8_drw_status_busywrite
FB writeback busy.
@ k_ra8_drw_status_buserrmtxmrl
Texture/RLE bus error.
@ k_ra8_drw_status_busy_mask
RA8 DRW status busy mask.
@ k_ra8_drw_status_irq_mask
RA8 DRW status IRQ mask.
@ k_ra8_drw_status_dlistactive
Display list reader busy.
@ k_ra8_drw_status_busirq
Bus error IRQ.
@ k_ra8_drw_status_dlistirq
Display list finished IRQ.
@ k_ra8_drw_status_busyenum
Enumeration unit busy.
ra8_drw_irqctl_mask_t
IRQCTL register bit masks (write-only).
@ k_ra8_drw_irqctl_all_en
RA8 DRW irqctl all en.
@ k_ra8_drw_irqctl_busirqen
BUSIRQ unmask.
@ k_ra8_drw_irqctl_all_clr
RA8 DRW irqctl all clr.
@ k_ra8_drw_irqctl_enumirqen
ENUMIRQ unmask.
@ k_ra8_drw_irqctl_busirqclr
Clear BUSIRQ.
@ k_ra8_drw_irqctl_dlistirqen
DLISTIRQ unmask.
@ k_ra8_drw_irqctl_enumirqclr
Clear ENUMIRQ.
@ k_ra8_drw_irqctl_dlistirqclr
Clear DLISTIRQ.