LCOV - code coverage report
Current view: top level - zephyr/drivers/clock_control - clock_control_bflb_common.h Coverage Total Hit
Test: new.info Lines: 0.0 % 8 0
Test Date: 2025-09-05 16:43:28

            Line data    Source code
       1            0 : /*
       2              :  * Copyright (c) 2025 MASSDRIVER EI (massdriver.space)
       3              :  *
       4              :  * SPDX-License-Identifier: Apache-2.0
       5              :  */
       6              : 
       7              : /* Contains short functions relevant to timing and clocks common to all Bouffalolab platforms */
       8              : 
       9              : #ifndef ZEPHYR_INCLUDE_DRIVERS_CLOCK_CONTROL_BFLB_COMMON_H_
      10              : #define ZEPHYR_INCLUDE_DRIVERS_CLOCK_CONTROL_BFLB_COMMON_H_
      11              : 
      12              : /* Common main clock mux (clock_bflb_set_root_clock) */
      13              : /* XCLK is RC32M, main clock is XCLK */
      14            0 : #define BFLB_MAIN_CLOCK_RC32M     0
      15              : /* XCLK is Crystal, main clock is XCLK */
      16            0 : #define BFLB_MAIN_CLOCK_XTAL      1
      17              : /* XCLK is RC32M, main clock is PLL */
      18            0 : #define BFLB_MAIN_CLOCK_PLL_RC32M 2
      19              : /* XCLK is Crystal, main clock is PLL */
      20            0 : #define BFLB_MAIN_CLOCK_PLL_XTAL  3
      21              : 
      22              : /* Function that busy waits for a few cycles */
      23            0 : static inline void clock_bflb_settle(void)
      24              : {
      25              :         __asm__ volatile (".rept 20 ; nop ; .endr");
      26              : }
      27              : 
      28            0 : static inline void clock_bflb_set_root_clock(uint32_t clock)
      29              : {
      30              :         uint32_t tmp;
      31              : 
      32              :         /* invalid value, fallback to internal 32M */
      33              :         if (clock > BFLB_MAIN_CLOCK_PLL_XTAL) {
      34              :                 clock = BFLB_MAIN_CLOCK_RC32M;
      35              :         }
      36              :         tmp = sys_read32(HBN_BASE + HBN_GLB_OFFSET);
      37              :         tmp = (tmp & HBN_ROOT_CLK_SEL_UMSK) | (clock << HBN_ROOT_CLK_SEL_POS);
      38              :         sys_write32(tmp, HBN_BASE + HBN_GLB_OFFSET);
      39              : 
      40              :         clock_bflb_settle();
      41              : }
      42              : 
      43            0 : static inline uint32_t clock_bflb_get_root_clock(void)
      44              : {
      45              :         uint32_t tmp;
      46              : 
      47              :         tmp = sys_read32(HBN_BASE + HBN_GLB_OFFSET);
      48              :         return ((tmp & HBN_ROOT_CLK_SEL_MSK) >> HBN_ROOT_CLK_SEL_POS);
      49              : }
      50              : 
      51              : #endif /* ZEPHYR_INCLUDE_DRIVERS_CLOCK_CONTROL_BFLB_COMMON_H_ */
        

Generated by: LCOV version 2.0-1