@@ -364,7 +364,8 @@ uint64_t z_nrf_grtc_timer_startup_value_get(void)
364364 return grtc_start_value ;
365365}
366366
367- #if defined(CONFIG_POWEROFF ) && defined(CONFIG_NRF_GRTC_START_SYSCOUNTER )
367+ #if defined(CONFIG_POWEROFF )
368+ #if defined(CONFIG_NRF_GRTC_START_SYSCOUNTER )
368369int z_nrf_grtc_wakeup_prepare (uint64_t wake_time_us )
369370{
370371 nrfx_err_t err_code ;
@@ -426,6 +427,91 @@ int z_nrf_grtc_wakeup_prepare(uint64_t wake_time_us)
426427 k_spin_unlock (& lock , key );
427428 return 0 ;
428429}
430+ #else
431+ int z_nrf_grtc_wakeup_prepare (uint64_t wake_time_us )
432+ {
433+ //nrfx_err_t err_code;
434+ //static uint8_t systemoff_channel;
435+ //uint64_t now = counter();
436+ //nrfx_grtc_sleep_config_t sleep_cfg;
437+ /* Minimum time that ensures valid execution of system-off procedure. */
438+ //uint32_t minimum_latency_us;
439+ uint32_t chan ;
440+ //int ret;
441+
442+ // nrfx_grtc_sleep_configuration_get(&sleep_cfg);
443+ // minimum_latency_us =
444+ // (sleep_cfg.waketime + sleep_cfg.timeout) * USEC_PER_SEC / LFCLK_FREQUENCY_HZ +
445+ // CONFIG_NRF_GRTC_SYSCOUNTER_SLEEP_MINIMUM_LATENCY;
446+ // sleep_cfg.auto_mode = false;
447+ // nrfx_grtc_sleep_configure(&sleep_cfg);
448+
449+ // if (minimum_latency_us > wake_time_us) {
450+ // return -EINVAL;
451+ // }
452+
453+ //k_spinlock_key_t key = k_spin_lock(&lock);
454+
455+ // err_code = nrfx_grtc_channel_alloc(&systemoff_channel);
456+ // if (err_code != NRFX_SUCCESS) {
457+ // k_spin_unlock(&lock, key);
458+ // return -ENOMEM;
459+ // }
460+ //(void)nrfx_grtc_syscounter_cc_int_disable(systemoff_channel);
461+ // ret = compare_set(systemoff_channel,
462+ // now + wake_time_us * sys_clock_hw_cycles_per_sec() / USEC_PER_SEC, NULL,
463+ // NULL);
464+ // if (ret < 0) {
465+ // k_spin_unlock(&lock, key);
466+ // return ret;
467+ // }
468+ // for (uint32_t grtc_chan_mask = NRFX_GRTC_CONFIG_ALLOWED_CC_CHANNELS_MASK;
469+ for (uint32_t grtc_chan_mask = NRFX_GRTC_CONFIG_ALLOWED_CC_CHANNELS_MASK ;
470+ grtc_chan_mask > 0 ; grtc_chan_mask &= ~BIT (chan )) {
471+ /* Clear all GRTC channels except the systemoff_channel. */
472+ chan = u32_count_trailing_zeros (grtc_chan_mask );
473+ // if (chan != systemoff_channel) {
474+ nrfx_grtc_syscounter_cc_disable (chan );
475+ //}
476+ }
477+ #if 0
478+ #if defined(CONFIG_SOC_NRF54H20_CPUAPP )
479+ for (uint32_t grtc_chan_mask = 0x70 ;
480+ grtc_chan_mask > 0 ; grtc_chan_mask &= ~BIT (chan )) {
481+ /* Clear all GRTC channels except the systemoff_channel. */
482+ chan = u32_count_trailing_zeros (grtc_chan_mask );
483+ // if (chan != systemoff_channel) {
484+ nrfx_grtc_syscounter_cc_disable (chan );
485+ // }
486+ }
487+ #endif
488+ #if defined(CONFIG_SOC_NRF54H20_CPURAD )
489+ //for (uint32_t grtc_chan_mask = NRFX_GRTC_CONFIG_ALLOWED_CC_CHANNELS_MASK;
490+ for (uint32_t grtc_chan_mask = 0xFF80 ;
491+ grtc_chan_mask > 0 ; grtc_chan_mask &= ~BIT (chan )) {
492+ /* Clear all GRTC channels except the systemoff_channel. */
493+ chan = u32_count_trailing_zeros (grtc_chan_mask );
494+ //if (chan != systemoff_channel) {
495+ nrfx_grtc_syscounter_cc_disable (chan );
496+ //}
497+ }
498+ #endif
499+ #endif
500+ // /* Make sure that wake_time_us was not triggered yet. */
501+ // if (nrfx_grtc_syscounter_compare_event_check(systemoff_channel)) {
502+ // k_spin_unlock(&lock, key);
503+ // return -EINVAL;
504+ // }
505+
506+ // /* This mechanism ensures that stored CC value is latched. */
507+ //uint32_t wait_time =
508+ // nrfy_grtc_timeout_get(NRF_GRTC) * CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC / 32768 +
509+ // MAX_CC_LATCH_WAIT_TIME_US;
510+ k_busy_wait (1000 );
511+ // k_spin_unlock(&lock, key);
512+ return 0 ;
513+ }
514+ #endif /* CONFIG_NRF_GRTC_START_SYSCOUNTER */
429515#endif /* CONFIG_POWEROFF */
430516
431517uint32_t sys_clock_cycle_get_32 (void )
0 commit comments