ra8-firmware 0.1.0
Bare-metal firmware for the Renesas RA8 family (RA8D2 / RA8P1)
Loading...
Searching...
No Matches
ra8_lpm.h
Go to the documentation of this file.
1
64
65#pragma once
66
67#ifdef __cplusplus
68extern "C" {
69#endif
70
71#include <stdint.h>
72
73#include "ra8_err.h"
74#include "ra8_lpm_regs.h"
75
103
117
132
144typedef enum : uint32_t {
147
160
161/* =============================================================================
162 * Lifecycle
163 * =============================================================================
164 */
165
193[[nodiscard]] ra8_err_t ra8_lpm_init(const ra8_lpm_config_t* cfg);
194
217[[nodiscard]] ra8_err_t ra8_lpm_deinit(void);
218
219/* =============================================================================
220 * PRCR unlock / relock
221 * =============================================================================
222 */
223
246[[nodiscard]] ra8_err_t ra8_lpm_prcr_unlock(void);
247
264[[nodiscard]] ra8_err_t ra8_lpm_prcr_relock(void);
265
266/* =============================================================================
267 * Wake-up source programming
268 * =============================================================================
269 */
270
295[[nodiscard]] ra8_err_t ra8_lpm_set_wakeup_sources(uint32_t wupen0, uint32_t wupen1);
296
315[[nodiscard]] ra8_err_t ra8_lpm_arm_wupen0_bits(uint32_t bits);
316
335[[nodiscard]] ra8_err_t ra8_lpm_clear_wupen0_bits(uint32_t bits);
336
355[[nodiscard]] ra8_err_t ra8_lpm_arm_wupen1_bits(uint32_t bits);
356
375[[nodiscard]] ra8_err_t ra8_lpm_clear_wupen1_bits(uint32_t bits);
376
377/* =============================================================================
378 * Deep-standby cancel programming
379 * =============================================================================
380 */
381
402[[nodiscard]] ra8_err_t ra8_lpm_arm_dpsier(ra8_lpm_dpsier_idx_t idx, uint8_t value);
403
424
444[[nodiscard]] ra8_err_t ra8_lpm_set_dpsiegr(ra8_lpm_dpsier_idx_t idx, uint8_t value);
445
446/* =============================================================================
447 * Snooze controller (Standby + Snooze pattern on RA8D2)
448 * =============================================================================
449 */
450
481[[nodiscard]] ra8_err_t
482ra8_lpm_snooze_set_request_sources(bool ulpt0_underflow, bool ulpt1_underflow, bool acmphs0);
483
511[[nodiscard]] ra8_err_t
512ra8_lpm_snooze_set_end_sources(bool ulpt0, bool ulpt1, bool usbfs, bool usbhs);
513
514/* =============================================================================
515 * RAM and LDO retention
516 * =============================================================================
517 */
518
538
559[[nodiscard]] ra8_err_t ra8_lpm_set_ldo_standby(const ra8_lpm_ldo_cfg_t* cfg);
560
561/* =============================================================================
562 * Clock-shutdown matrix
563 * =============================================================================
564 */
565
594[[nodiscard]] ra8_err_t ra8_lpm_set_clock_stop(ra8_lpm_clock_t clock, bool stop);
595
661[[nodiscard]] ra8_err_t ra8_lpm_graphics_power_on(uint32_t timeout_iters);
662
683[[nodiscard]] ra8_err_t ra8_lpm_get_clock_stop(ra8_lpm_clock_t clock, bool* stop);
684
685/* =============================================================================
686 * OPCCR (Operating Power Control)
687 * =============================================================================
688 */
689
709[[nodiscard]] ra8_err_t ra8_lpm_get_opccr(uint8_t* opccr);
710
729[[nodiscard]] ra8_err_t ra8_lpm_wait_for_opccr(uint32_t poll_limit);
730
731/* =============================================================================
732 * Sleep entry
733 * =============================================================================
734 */
735
800
816[[nodiscard]] ra8_err_t ra8_lpm_enter_deep_standby(void);
817
818/* =============================================================================
819 * Status / diagnostics
820 * =============================================================================
821 */
822
855[[nodiscard]] ra8_err_t ra8_lpm_get_status(uint32_t* out);
856
880[[nodiscard]] ra8_err_t ra8_lpm_get_exit_cause(uint64_t* out);
881
903[[nodiscard]] ra8_err_t
904ra8_lpm_get_dpsi_state(uint8_t enables[4], uint8_t flags[4], uint8_t edges[3]);
905
906#ifdef __cplusplus
907}
908#endif
Error Code Definitions for ra8-firmware.
ra8_err_codes_t ra8_err_t
Canonical error-return type used by every ra8-firmware API.
Definition ra8_err.h:546
ra8_err_t ra8_lpm_wait_for_opccr(uint32_t poll_limit)
Wait for OPCCR.OPCMTSF to clear (mode-transition complete).
Definition ra8_lpm.c:714
ra8_err_t ra8_lpm_get_opccr(uint8_t *opccr)
Read OPCCR raw byte (OPCM[1:0] + OPCMTSF).
Definition ra8_lpm.c:706
ra8_err_t ra8_lpm_init(const ra8_lpm_config_t *cfg)
Initialise the LPM block from a config descriptor.
Definition ra8_lpm.c:358
ra8_lpm_pd_timeout_t
Poll bound for ra8_lpm_graphics_power_on flag waits.
Definition ra8_lpm.h:144
@ k_ra8_lpm_pd_timeout_default
Default power-gate poll bound.
Definition ra8_lpm.h:145
ra8_err_t ra8_lpm_clear_wupen1_bits(uint32_t bits)
AND-out WUPEN1 bits to disarm specific wake-up sources.
Definition ra8_lpm.c:489
ra8_err_t ra8_lpm_snooze_set_request_sources(bool ulpt0_underflow, bool ulpt1_underflow, bool acmphs0)
Configure ULPT-driven snooze request sources.
Definition ra8_lpm.c:553
ra8_err_t ra8_lpm_get_exit_cause(uint64_t *out)
Snapshot WUPEN0 / WUPEN1 into a single 64-bit word.
Definition ra8_lpm.c:814
ra8_lpm_clock_t
Selector for ra8_lpm_set_clock_stop / ra8_lpm_get_clock_stop.
Definition ra8_lpm.h:152
@ k_ra8_lpm_clock_loco
Low-Speed On-Chip Oscillator.
Definition ra8_lpm.h:155
@ k_ra8_lpm_clock_sub
Sub-clock Oscillator.
Definition ra8_lpm.h:157
@ k_ra8_lpm_clock_moco
Middle-Speed On-Chip Oscillator.
Definition ra8_lpm.h:153
@ k_ra8_lpm_clock_main
Main Oscillator.
Definition ra8_lpm.h:156
@ k_ra8_lpm_clock_count
RA8 lpm clock count.
Definition ra8_lpm.h:158
@ k_ra8_lpm_clock_hoco
High-Speed On-Chip Oscillator.
Definition ra8_lpm.h:154
ra8_err_t ra8_lpm_set_ram_retention(const ra8_lpm_ram_retention_t *cfg)
Programme PDRAMSCR0 / PDRAMSCR1 from a retention descriptor.
Definition ra8_lpm.c:606
ra8_err_t ra8_lpm_prcr_relock(void)
Re-lock PRCR.PRC1 after protected writes.
Definition ra8_lpm.c:441
ra8_err_t ra8_lpm_set_dpsiegr(ra8_lpm_dpsier_idx_t idx, uint8_t value)
Programme DPSIEGR0..2 (deep-standby IRQ edge polarity).
Definition ra8_lpm.c:535
ra8_err_t ra8_lpm_enter_deep_standby(void)
Convenience wrapper – enter Deep Software Standby mode 1.
Definition ra8_lpm.c:786
ra8_err_t ra8_lpm_enter_sleep(ra8_sleep_mode_t mode)
Programme LPSCR for mode and enter the requested sleep.
Definition ra8_lpm.c:735
ra8_err_t ra8_lpm_get_clock_stop(ra8_lpm_clock_t clock, bool *stop)
Read the per-oscillator stop bit.
Definition ra8_lpm.c:688
ra8_err_t ra8_lpm_snooze_set_end_sources(bool ulpt0, bool ulpt1, bool usbfs, bool usbhs)
Configure end-of-snooze sources via DPSIER3 (ULPT/USB hooks).
Definition ra8_lpm.c:575
ra8_err_t ra8_lpm_arm_wupen0_bits(uint32_t bits)
OR-in additional WUPEN0 bits without disturbing other sources.
Definition ra8_lpm.c:465
ra8_err_t ra8_lpm_graphics_power_on(uint32_t timeout_iters)
Power the graphics domain on (DRW / GLCDC / MIPI DSI+CSI / VIN).
ra8_err_t ra8_lpm_clear_dpsifr(ra8_lpm_dpsier_idx_t idx)
Clear DPSIFR0..3 so a stale flag does not cancel deep standby.
Definition ra8_lpm.c:522
ra8_err_t ra8_lpm_arm_wupen1_bits(uint32_t bits)
OR-in additional WUPEN1 bits without disturbing other sources.
Definition ra8_lpm.c:481
ra8_err_t ra8_lpm_deinit(void)
Restore SBYCR / DPSBYCR / LPSCR / SSCR1 to cold-reset defaults.
Definition ra8_lpm.c:394
ra8_err_t ra8_lpm_get_status(uint32_t *out)
Read LPM status (SBYCR | DPSBYCR | LPSCR | SSCR1) packed.
Definition ra8_lpm.c:796
ra8_err_t ra8_lpm_prcr_unlock(void)
Unlock PRCR.PRC1 to permit writes to LPM control registers.
Definition ra8_lpm.c:430
ra8_err_t ra8_lpm_set_clock_stop(ra8_lpm_clock_t clock, bool stop)
Set or clear the per-oscillator stop bit before sleep entry.
Definition ra8_lpm.c:661
ra8_err_t ra8_lpm_arm_dpsier(ra8_lpm_dpsier_idx_t idx, uint8_t value)
Programme the per-byte DPSIER0..3 enable byte directly.
Definition ra8_lpm.c:502
ra8_err_t ra8_lpm_set_wakeup_sources(uint32_t wupen0, uint32_t wupen1)
Programme the raw WUPEN0 / WUPEN1 masks.
Definition ra8_lpm.c:456
ra8_err_t ra8_lpm_get_dpsi_state(uint8_t enables[4], uint8_t flags[4], uint8_t edges[3])
Read DPSIER0..3 + DPSIFR0..3 + DPSIEGR0..2 into a buffer.
Definition ra8_lpm.c:828
ra8_err_t ra8_lpm_clear_wupen0_bits(uint32_t bits)
AND-out WUPEN0 bits to disarm specific wake-up sources.
Definition ra8_lpm.c:473
ra8_err_t ra8_lpm_set_ldo_standby(const ra8_lpm_ldo_cfg_t *cfg)
Programme PLL1LDOCR / PLL2LDOCR / HOCOLDOCR SKEEP bits.
Definition ra8_lpm.c:626
Low Power Mode (LPM) register layout for the Renesas RA8D2.
ra8_lpm_sscr1_ss2lp_t
SSCR1.SS2LP encoding (HUM Ch 11.2.19 p 456).
ra8_sleep_mode_t
Software-selectable sleep modes (LPSCR.LPMD encoding).
ra8_lpm_dcssmode_t
DPSBYCR.DCSSMODE encoding (HUM Ch 11.2.21 p 458).
ra8_lpm_dpsier_idx_t
Selector for DPSIER0..3 / DPSIFR0..3 / DPSIEGR0..2 helpers (HUM Ch 11.2.22..36 p 459....
ra8_lpm_ldo_state_t
LDOCR.SKEEP encoding for ra8_lpm_set_ldo_standby.
Configuration descriptor for ra8_lpm_init.
Definition ra8_lpm.h:96
bool opa_bus_keep
SBYCR.OPE – keep bus signals driven.
Definition ra8_lpm.h:98
ra8_lpm_dcssmode_t dcdc_softstart
DCSSMODE encoding (k_ra8_lpm_dcssmode_*).
Definition ra8_lpm.h:100
bool io_port_keep
DPSBYCR.IOKEEP – retain IOs across DSBY.
Definition ra8_lpm.h:97
bool sscr_fast_return
SSCR1.SS2FR – speed up wake from SSTBY.
Definition ra8_lpm.h:99
ra8_lpm_sscr1_ss2lp_t sscr_low_power
SSCR1.SS2LP encoding.
Definition ra8_lpm.h:101
LDO standby retention selection (HUM 11.2.1 p 436).
Definition ra8_lpm.h:112
ra8_lpm_ldo_state_t pll2
PLL2 LDO state in standby.
Definition ra8_lpm.h:114
ra8_lpm_ldo_state_t pll1
PLL1 LDO state in standby.
Definition ra8_lpm.h:113
ra8_lpm_ldo_state_t hoco
HOCO LDO state in standby.
Definition ra8_lpm.h:115
RAM retention configuration (HUM 11.2.16 / 11.2.17).
Definition ra8_lpm.h:127
bool cpu0_tcm_keep
PDRAMSCR1.RKEEP0.
Definition ra8_lpm.h:129
bool cpu1_tcm_keep
PDRAMSCR1.RKEEP1 (dual-core only).
Definition ra8_lpm.h:130
uint16_t pdramscr0_bits
Raw PDRAMSCR0 RKEEP[12:0] value.
Definition ra8_lpm.h:128