arch/arm64: porting config clock use scmi form arm imx95

Signed-off-by: lipengfei28 <lipengfei28@xiaomi.com>
This commit is contained in:
lipengfei28 2025-08-01 15:39:25 +08:00 committed by Xiang Xiao
parent 909d9f1351
commit c90349348e
5 changed files with 1141 additions and 4 deletions

View file

@ -525,6 +525,14 @@ config IMX9_SCMI
default y
depends on IMX9_MU
if IMX9_SCMI
config IMX9_CLK_OVER_SCMI
bool "Configure CLK over SCMI"
default y
endif
menu "LPI2C Peripherals"
menuconfig IMX9_LPI2C1

View file

@ -31,10 +31,10 @@ endif
CHIP_CSRCS = imx9_boot.c imx9_timer.c
ifeq ($(CONFIG_ARCH_CHIP_IMX93),y)
CHIP_CSRCS += imx9_ccm.c imx9_clockconfig.c imx9_gpio.c imx9_iomuxc.c
CHIP_CSRCS += imx9_ccm.c imx9_gpio.c imx9_iomuxc.c
endif
CHIP_CSRCS += imx9_lpuart.c imx9_lowputc.c
CHIP_CSRCS += imx9_lpuart.c imx9_lowputc.c imx9_clockconfig.c
ifeq ($(CONFIG_IMX9_GPIO_IRQ),y)
CHIP_CSRCS += imx9_gpioirq.c

View file

@ -0,0 +1,828 @@
/****************************************************************************
* arch/arm64/src/imx9/hardware/imx95/imx95_clock.h
*
* SPDX-License-Identifier: Apache-2.0
* SPDX-FileCopyrightText: 2024 NXP
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership. The
* ASF licenses this file to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*
****************************************************************************/
#ifndef __ARCH_ARM_SRC_IMX9_HARDWARE_IMX95_IMX95_CLOCK_H
#define __ARCH_ARM_SRC_IMX9_HARDWARE_IMX95_IMX95_CLOCK_H
/****************************************************************************
* Included Files
****************************************************************************/
#include <nuttx/config.h>
#include <stdbool.h>
#include <stdint.h>
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
typedef enum
{
EXT = 0,
OSC_32K = 1,
OSC_24M = 2,
FRO = 3,
SYS_PLL1_CTL = 4,
SYS_PLL1_DFS0_CTL = 5,
SYS_PLL1_DFS0 = 6,
SYS_PLL1_DFS0_DIV2 = 7,
SYS_PLL1_DFS1_CTL = 8,
SYS_PLL1_DFS1 = 9,
SYS_PLL1_DFS1_DIV2 = 10,
SYS_PLL1_DFS2_CTL = 11,
SYS_PLL1_DFS2 = 12,
SYS_PLL1_DFS2_DIV2 = 13,
AUDIO_PLL1_CTL = 14,
AUDIO_PLL1 = 15,
AUDIO_PLL2_CTL = 16,
AUDIO_PLL2 = 17,
VIDEO_PLL1_CTL = 18,
VIDEO_PLL1 = 19,
VIDEO_PLL2_CTL = 20,
VIDEO_PLL2 = 21,
VIDEO_PLL3_CTL = 22,
VIDEO_PLL3 = 23,
ARM_PLL_CTL = 24,
ARM_PLL_DFS0_CTL = 25,
ARM_PLL_DFS0 = 26,
ARM_PLL_DFS1_CTL = 27,
ARM_PLL_DFS1 = 28,
ARM_PLL_DFS2_CTL = 29,
ARM_PLL_DFS2 = 30,
ARM_PLL_DFS3_CTL = 31,
ARM_PLL_DFS3 = 32,
DRAM_PLL_CTL = 33,
DRAM_PLL = 34,
HSIO_PLL_CTL = 35,
HSIO_PLL = 36,
LDB_PLL_CTL = 37,
LDB_PLL = 38,
} clock_id_e;
#define CCM_CR_COUNT 122
#define ROOT_CLOCK_OFFSET 41
typedef uint32_t clock_config_t;
#define CLOCK_DIV_SHIFT (16)
#define CLOCK_DIV_MASK (0xff << CLOCK_DIV_SHIFT)
#define CLOCK_DIV(n) (((n) << CLOCK_DIV_SHIFT) & CLOCK_DIV_MASK)
#define GET_DIV(n) (((n) & CLOCK_DIV_MASK) >> CLOCK_DIV_SHIFT)
#define ROOT_SHIFT (8)
#define ROOT_MASK (0x7f << ROOT_SHIFT)
#define ROOT(n) (((n) << ROOT_SHIFT) & ROOT_MASK)
#define GET_ROOT(n) (((n) & ROOT_MASK) >> ROOT_SHIFT)
#define ID_SHIFT (3)
#define ID_MASK (0x1f << ID_SHIFT)
#define ID(n) (((n) << ID_SHIFT) & ID_MASK)
#define GET_ID(n) (((n) & ID_MASK) >> ID_SHIFT)
#define MUX_SHIFT (0)
#define MUX_MASK (0x07 << MUX_SHIFT)
#define MUX(n) (((n) << MUX_SHIFT) & MUX_MASK)
/* ADC_gROOT */
#define ADC_OSC_24M ROOT(0U) | MUX(0U) | ID(OSC_24M)
#define ADC_DFS0_DIV2 ROOT(0U) | MUX(1U) | ID(SYS_PLL1_DFS0_DIV2)
#define ADC_DFS1_DIV2 ROOT(0U) | MUX(2U) | ID(SYS_PLL1_DFS1_DIV2)
#define ADC_FRO ROOT(0U) | MUX(3U) | ID(FRO)
/* TMU_gROOT */
#define TMU_OSC_24M ROOT(1U) | MUX(0U) | ID(OSC_24M)
#define TMU_DFS0_DIV2 ROOT(1U) | MUX(1U) | ID(SYS_PLL1_DFS0_DIV2)
#define TMU_DFS1_DIV2 ROOT(1U) | MUX(2U) | ID(SYS_PLL1_DFS1_DIV2)
#define TMU_FRO ROOT(1U) | MUX(3U) | ID(FRO)
/* BUS_AON_gROOT */
#define BUS_AON_OSC_24M ROOT(2U) | MUX(0U) | ID(OSC_24M)
#define BUS_AON_DFS0_DIV2 ROOT(2U) | MUX(1U) | ID(SYS_PLL1_DFS0_DIV2)
#define BUS_AON_DFS1_DIV2 ROOT(2U) | MUX(2U) | ID(SYS_PLL1_DFS1_DIV2)
#define BUS_AON_FRO ROOT(2U) | MUX(3U) | ID(FRO)
/* CAN1_gROOT */
#define CAN1_OSC_24M ROOT(3U) | MUX(0U) | ID(OSC_24M)
#define CAN1_DFS0_DIV2 ROOT(3U) | MUX(1U) | ID(SYS_PLL1_DFS0_DIV2)
#define CAN1_DFS1_DIV2 ROOT(3U) | MUX(2U) | ID(SYS_PLL1_DFS1_DIV2)
#define CAN1_FRO ROOT(3U) | MUX(3U) | ID(FRO)
/* I3C1_gROOT */
#define I3C1_OSC_24M ROOT(4U) | MUX(0U) | ID(OSC_24M)
#define I3C1_DFS0_DIV2 ROOT(4U) | MUX(1U) | ID(SYS_PLL1_DFS0_DIV2)
#define I3C1_DFS1_DIV2 ROOT(4U) | MUX(2U) | ID(SYS_PLL1_DFS1_DIV2)
#define I3C1_FRO ROOT(4U) | MUX(3U) | ID(FRO)
/* I3C1_SLOW_gROOT */
#define I3C1_SL_OSC_24M ROOT(5U) | MUX(0U) | ID(OSC_24M)
#define I3C1_SL_DFS0_DIV2 ROOT(5U) | MUX(1U) | ID(SYS_PLL1_DFS0_DIV2)
#define I3C1_SL_DFS1_DIV2 ROOT(5U) | MUX(2U) | ID(SYS_PLL1_DFS1_DIV2)
#define I3C1_SL_FRO ROOT(5U) | MUX(3U) | ID(FRO)
/* LPI2C1_gROOT */
#define LPI2C1_OSC_24M ROOT(6U) | MUX(0U) | ID(OSC_24M)
#define LPI2C1_DFS0_DIV2 ROOT(6U) | MUX(1U) | ID(SYS_PLL1_DFS0_DIV2)
#define LPI2C1_DFS1_DIV2 ROOT(6U) | MUX(2U) | ID(SYS_PLL1_DFS1_DIV2)
#define LPI2C1_FRO ROOT(6U) | MUX(3U) | ID(FRO)
/* LPI2C2_gROOT */
#define LPI2C2_OSC_24M ROOT(7U) | MUX(0U) | ID(OSC_24M)
#define LPI2C2_DFS0_DIV2 ROOT(7U) | MUX(1U) | ID(SYS_PLL1_DFS0_DIV2)
#define LPI2C2_DFS1_DIV2 ROOT(7U) | MUX(2U) | ID(SYS_PLL1_DFS1_DIV2)
#define LPI2C2_FRO ROOT(7U) | MUX(3U) | ID(FRO)
/* LPSPI1_gROOT */
#define LPSPI1_OSC_24M ROOT(8U) | MUX(0U) | ID(OSC_24M)
#define LPSPI1_DFS0_DIV2 ROOT(8U) | MUX(1U) | ID(SYS_PLL1_DFS0_DIV2)
#define LPSPI1_DFS1_DIV2 ROOT(8U) | MUX(2U) | ID(SYS_PLL1_DFS1_DIV2)
#define LPSPI1_FRO ROOT(8U) | MUX(3U) | ID(FRO)
/* LPSPI2_gROOT */
#define LPSPI2_OSC_24M ROOT(9U) | MUX(0U) | ID(OSC_24M)
#define LPSPI2_DFS0_DIV2 ROOT(9U) | MUX(1U) | ID(SYS_PLL1_DFS0_DIV2)
#define LPSPI2_DFS1_DIV2 ROOT(9U) | MUX(2U) | ID(SYS_PLL1_DFS1_DIV2)
#define LPSPI2_FRO ROOT(9U) | MUX(3U) | ID(FRO)
/* LPTMR1_gROOT */
#define LPTMR1_OSC_24M ROOT(10U) | MUX(0U) | ID(OSC_24M)
#define LPTMR1_DFS0_DIV2 ROOT(10U) | MUX(1U) | ID(SYS_PLL1_DFS0_DIV2)
#define LPTMR1_DFS1_DIV2 ROOT(10U) | MUX(2U) | ID(SYS_PLL1_DFS1_DIV2)
#define LPTMR1_FRO ROOT(10U) | MUX(3U) | ID(FRO)
/* LPUART1_gROOT */
#define LPUART1_OSC_24M ROOT(11U) | MUX(0U) | ID(OSC_24M)
#define LPUART1_DFS0_DIV2 ROOT(11U) | MUX(1U) | ID(SYS_PLL1_DFS0_DIV2)
#define LPUART1_DFS1_DIV2 ROOT(11U) | MUX(2U) | ID(SYS_PLL1_DFS1_DIV2)
#define LPUART1_FRO ROOT(11U) | MUX(3U) | ID(FRO)
/* LPUART2_gROOT */
#define LPUART2_OSC_24M ROOT(12U) | MUX(0U) | ID(OSC_24M)
#define LPUART2_DFS0_DIV2 ROOT(12U) | MUX(1U) | ID(SYS_PLL1_DFS0_DIV2)
#define LPUART2_DFS1_DIV2 ROOT(12U) | MUX(2U) | ID(SYS_PLL1_DFS1_DIV2)
#define LPUART2_FRO ROOT(12U) | MUX(3U) | ID(FRO)
/* M33_gROOT */
#define M33_OSC_24M ROOT(13U) | MUX(0U) | ID(OSC_24M)
#define M33_DFS0 ROOT(13U) | MUX(1U) | ID(SYS_PLL1_DFS0)
#define M33_DFS1_DIV2 ROOT(13U) | MUX(2U) | ID(SYS_PLL1_DFS1_DIV2)
#define M33_FRO ROOT(13U) | MUX(3U) | ID(FRO)
/* M33_SYSTICK_gROOT */
#define M33_TICK_OSC_24M ROOT(14U) | MUX(0U) | ID(OSC_24M)
#define M33_TICK_DFS0_DIV2 ROOT(14U) | MUX(1U) | ID(SYS_PLL1_DFS0_DIV2)
#define M33_TICK_DFS1_DIV2 ROOT(14U) | MUX(2U) | ID(SYS_PLL1_DFS1_DIV2)
#define M33_TICK_FRO ROOT(14U) | MUX(3U) | ID(FRO)
/* MQS1_gROOT */
#define MQS1_OSC_24M ROOT(15U) | MUX(0U) | ID(OSC_24M)
#define MQS1_AUDIO_PLL1 ROOT(15U) | MUX(1U) | ID(AUDIO_PLL1)
#define MQS1_AUDIO_PLL2 ROOT(15U) | MUX(2U) | ID(AUDIO_PLL2)
#define MQS1_EXT ROOT(15U) | MUX(3U) | ID(EXT)
/* PDM_gROOT */
#define PDM_OSC_24M ROOT(16U) | MUX(0U) | ID(OSC_24M)
#define PDM_AUDIO_PLL1 ROOT(16U) | MUX(1U) | ID(AUDIO_PLL1)
#define PDM_AUDIO_PLL2 ROOT(16U) | MUX(2U) | ID(AUDIO_PLL2)
#define PDM_EXT ROOT(16U) | MUX(3U) | ID(EXT)
/* SAI1_gROOT */
#define SAI1_OSC_24M ROOT(17U) | MUX(0U) | ID(OSC_24M)
#define SAI1_AUDIO_PLL1 ROOT(17U) | MUX(1U) | ID(AUDIO_PLL1)
#define SAI1_AUDIO_PLL2 ROOT(17U) | MUX(2U) | ID(AUDIO_PLL2)
#define SAI1_EXT ROOT(17U) | MUX(3U) | ID(EXT)
/* SENTINEL_gROOT */
#define SENTINEL_OSC_24M ROOT(18U) | MUX(0U) | ID(OSC_24M)
#define SENTINEL_DFS0 ROOT(18U) | MUX(1U) | ID(SYS_PLL1_DFS0)
#define SENTINEL_DFS1_DIV2 ROOT(18U) | MUX(2U) | ID(SYS_PLL1_DFS1_DIV2)
#define SENTINEL_FRO ROOT(18U) | MUX(3U) | ID(FRO)
/* TPM2_gROOT */
#define TPM2_OSC_24M ROOT(19U) | MUX(0U) | ID(OSC_24M)
#define TPM2_DFS0 ROOT(19U) | MUX(1U) | ID(SYS_PLL1_DFS0)
#define TPM2_AUDIO_PLL1 ROOT(19U) | MUX(2U) | ID(AUDIO_PLL1)
#define TPM2_EXT ROOT(19U) | MUX(3U) | ID(EXT)
/* TSTMR1_gROOT */
#define TSTMR1_OSC_24M ROOT(20U) | MUX(0U) | ID(OSC_24M)
#define TSTMR1_DFS0_DIV2 ROOT(20U) | MUX(1U) | ID(SYS_PLL1_DFS0_DIV2)
#define TSTMR1_DFS1_DIV2 ROOT(20U) | MUX(2U) | ID(SYS_PLL1_DFS1_DIV2)
#define TSTMR1_FRO ROOT(20U) | MUX(3U) | ID(FRO)
/* CAM_APB_gROOT */
#define CAM_APB_OSC_24M ROOT(21U) | MUX(0U) | ID(OSC_24M)
#define CAM_APB_DFS0_DIV2 ROOT(21U) | MUX(1U) | ID(SYS_PLL1_DFS0_DIV2)
#define CAM_APB_DFS1_DIV2 ROOT(21U) | MUX(2U) | ID(SYS_PLL1_DFS1_DIV2)
#define CAM_APB_FRO ROOT(21U) | MUX(3U) | ID(FRO)
/* CAM_AXI_gROOT */
#define CAM_AXI_OSC_24M ROOT(22U) | MUX(0U) | ID(OSC_24M)
#define CAM_AXI_DFS0 ROOT(22U) | MUX(1U) | ID(SYS_PLL1_DFS0)
#define CAM_AXI_DFS1 ROOT(22U) | MUX(2U) | ID(SYS_PLL1_DFS1)
#define CAM_AXI_DFS2 ROOT(22U) | MUX(3U) | ID(SYS_PLL1_DFS2)
/* CAM_CM0_gROOT */
#define CAM_CM0_OSC_24M ROOT(23U) | MUX(0U) | ID(OSC_24M)
#define CAM_CM0_DFS0 ROOT(23U) | MUX(1U) | ID(SYS_PLL1_DFS0)
#define CAM_CM0_DFS1 ROOT(23U) | MUX(2U) | ID(SYS_PLL1_DFS1)
#define CAM_CM0_DFS2 ROOT(23U) | MUX(3U) | ID(SYS_PLL1_DFS2)
/* CAM_ISI_gROOT */
#define CAM_ISI_OSC_24M ROOT(24U) | MUX(0U) | ID(OSC_24M)
#define CAM_ISI_DFS0 ROOT(24U) | MUX(1U) | ID(SYS_PLL1_DFS0)
#define CAM_ISI_DFS1 ROOT(24U) | MUX(2U) | ID(SYS_PLL1_DFS1)
#define CAM_ISI_DFS2 ROOT(24U) | MUX(3U) | ID(SYS_PLL1_DFS2)
/* MIPI_PHY_CFG_gROOT */
#define MIPI_PHY_OSC_24M ROOT(25U) | MUX(0U) | ID(OSC_24M)
#define MIPI_PHY_AUDIO_PLL1 ROOT(25U) | MUX(1U) | ID(AUDIO_PLL1)
#define MIPI_PHY_VIDEO_PLL1 ROOT(25U) | MUX(2U) | ID(VIDEO_PLL1)
/* MIPI_PHY_PLL_BYPASS_gROOT */
#define MIPI_PHY_BPS_OSC_24M ROOT(26U) | MUX(0U) | ID(OSC_24M)
#define MIPI_PHY_BPS_AUDIO_PLL1 ROOT(26U) | MUX(1U) | ID(AUDIO_PLL1)
#define MIPI_PHY_BPS_VIDEO_PLL1 ROOT(26U) | MUX(2U) | ID(VIDEO_PLL1)
/* MIPI_PHY_PLL_REF_gROOT */
#define MIPI_PHY_REF_OSC_24M ROOT(27U) | MUX(0U) | ID(OSC_24M)
#define MIPI_PHY_REF_AUDIO_PLL1 ROOT(27U) | MUX(1U) | ID(AUDIO_PLL1)
#define MIPI_PHY_REF_VIDEO_PLL1 ROOT(27U) | MUX(2U) | ID(VIDEO_PLL1)
/* MIPI_TEST_BYTE_gROOT */
#define MIPI_TEST_OSC_24M ROOT(28U) | MUX(0U) | ID(OSC_24M)
#define MIPI_TEST_AUDIO_PLL1 ROOT(28U) | MUX(1U) | ID(AUDIO_PLL1)
#define MIPI_TEST_VIDEO_PLL1 ROOT(28U) | MUX(2U) | ID(VIDEO_PLL1)
/* ARM_A55_gROOT */
#define ARM_A55_OSC_24M ROOT(29U) | MUX(0U) | ID(OSC_24M)
#define ARM_A55_DFS0 ROOT(29U) | MUX(1U) | ID(SYS_PLL1_DFS0)
#define ARM_A55_DFS1 ROOT(29U) | MUX(2U) | ID(SYS_PLL1_DFS1)
#define ARM_A55_DFS2 ROOT(29U) | MUX(3U) | ID(SYS_PLL1_DFS2)
/* ARM_A55_MTR_BUS_gROOT */
#define ARM_A55_MTR_OSC_24M ROOT(30U) | MUX(0U) | ID(OSC_24M)
#define ARM_A55_MTR_DFS0_DIV2 ROOT(30U) | MUX(1U) | ID(SYS_PLL1_DFS0_DIV2)
#define ARM_A55_MTR_DFS1_DIV2 ROOT(30U) | MUX(2U) | ID(SYS_PLL1_DFS1_DIV2)
#define ARM_A55_MTR_FRO ROOT(30U) | MUX(3U) | ID(FRO)
/* ARM_A55_PERIPH_gROOT */
#define ARM_A55_PERIPH_OSC_24M ROOT(31U) | MUX(0U) | ID(OSC_24M)
#define ARM_A55_PERIPH_DFS0 ROOT(31U) | MUX(1U) | ID(SYS_PLL1_DFS0)
#define ARM_A55_PERIPH_DFS1 ROOT(31U) | MUX(2U) | ID(SYS_PLL1_DFS1)
#define ARM_A55_PERIPH_DFS2 ROOT(31U) | MUX(3U) | ID(SYS_PLL1_DFS2)
/* DRAM_ALT_gROOT */
#define DRAM_ALT_OSC_24M ROOT(32U) | MUX(0U) | ID(OSC_24M)
#define DRAM_ALT_DFS0 ROOT(32U) | MUX(1U) | ID(SYS_PLL1_DFS0)
#define DRAM_ALT_DFS1 ROOT(32U) | MUX(2U) | ID(SYS_PLL1_DFS1)
#define DRAM_ALT_DFS2 ROOT(32U) | MUX(3U) | ID(SYS_PLL1_DFS2)
/* DRAM_APB_gROOT */
#define DRAM_APB_OSC_24M ROOT(33U) | MUX(0U) | ID(OSC_24M)
#define DRAM_APB_DFS0_DIV2 ROOT(33U) | MUX(1U) | ID(SYS_PLL1_DFS0_DIV2)
#define DRAM_APB_DFS1_DIV2 ROOT(33U) | MUX(2U) | ID(SYS_PLL1_DFS1_DIV2)
#define DRAM_APB_FRO ROOT(33U) | MUX(3U) | ID(FRO)
/* DISP_APB_gROOT */
#define DISP_APB_OSC_24M ROOT(34U) | MUX(0U) | ID(OSC_24M)
#define DISP_APB_DFS0_DIV2 ROOT(34U) | MUX(1U) | ID(SYS_PLL1_DFS0_DIV2)
#define DISP_APB_DFS1_DIV2 ROOT(34U) | MUX(2U) | ID(SYS_PLL1_DFS1_DIV2)
#define DISP_APB_FRO ROOT(34U) | MUX(3U) | ID(FRO)
/* DISP_AXI_gROOT */
#define DISP_AXI_OSC_24M ROOT(35U) | MUX(0U) | ID(OSC_24M)
#define DISP_AXI_DFS0 ROOT(35U) | MUX(1U) | ID(SYS_PLL1_DFS0)
#define DISP_AXI_DFS1 ROOT(35U) | MUX(2U) | ID(SYS_PLL1_DFS1)
#define DISP_AXI_DFS2 ROOT(35U) | MUX(3U) | ID(SYS_PLL1_DFS2)
/* DISP_DP_gROOT */
#define DISP_DP_OSC_24M ROOT(36U) | MUX(0U) | ID(OSC_24M)
#define DISP_DP_DFS0 ROOT(36U) | MUX(1U) | ID(SYS_PLL1_DFS0)
#define DISP_DP_DFS1 ROOT(36U) | MUX(2U) | ID(SYS_PLL1_DFS1)
#define DISP_DP_DFS2 ROOT(36U) | MUX(3U) | ID(SYS_PLL1_DFS2)
/* DISP_OCRAM_gROOT */
#define DISP_OCRAM_OSC_24M ROOT(37U) | MUX(0U) | ID(OSC_24M)
#define DISP_OCRAM_DFS0 ROOT(37U) | MUX(1U) | ID(SYS_PLL1_DFS0)
#define DISP_OCRAM_DFS1 ROOT(37U) | MUX(2U) | ID(SYS_PLL1_DFS1)
#define DISP_OCRAM_DFS2 ROOT(37U) | MUX(3U) | ID(SYS_PLL1_DFS2)
/* DISP_USB31_gROOT */
#define DISP_USB31_OSC_24M ROOT(38U) | MUX(0U) | ID(OSC_24M)
#define DISP_USB31_DFS0 ROOT(38U) | MUX(1U) | ID(SYS_PLL1_DFS0)
#define DISP_USB31_DFS1 ROOT(38U) | MUX(2U) | ID(SYS_PLL1_DFS1)
#define DISP_USB31_DFS2 ROOT(38U) | MUX(3U) | ID(SYS_PLL1_DFS2)
/* DISP1_PIX_gROOT */
#define DISP1_PIX_OSC_24M ROOT(39U) | MUX(0U) | ID(OSC_24M)
#define DISP1_PIX_AUDIO_PLL1 ROOT(39U) | MUX(1U) | ID(AUDIO_PLL1)
#define DISP1_PIX_VIDEO_PLL1 ROOT(39U) | MUX(2U) | ID(VIDEO_PLL1)
/* GPU_APB_gROOT */
#define GPU_APB_OSC_24M ROOT(42U) | MUX(0U) | ID(OSC_24M)
#define GPU_APB_DFS0_DIV2 ROOT(42U) | MUX(1U) | ID(SYS_PLL1_DFS0_DIV2)
#define GPU_APB_DFS1_DIV2 ROOT(42U) | MUX(2U) | ID(SYS_PLL1_DFS1_DIV2)
#define GPU_APB_FRO ROOT(42U) | MUX(3U) | ID(FRO)
/* GPU_gROOT */
#define GPU_OSC_24M ROOT(43U) | MUX(0U) | ID(OSC_24M)
#define GPU_DFS0 ROOT(43U) | MUX(1U) | ID(SYS_PLL1_DFS0)
#define GPU_DFS1 ROOT(43U) | MUX(2U) | ID(SYS_PLL1_DFS1)
#define GPU_DFS2 ROOT(43U) | MUX(3U) | ID(SYS_PLL1_DFS2)
/* HSIO_ACSCAN_480M_gROOT */
#define HSIO_ACSCAN_480_OSC_24M ROOT(44U) | MUX(0U) | ID(OSC_24M)
#define HSIO_ACSCAN_480_AUDIO ROOT(44U) | MUX(1U) | ID(AUDIO_PLL1)
#define HSIO_ACSCAN_480_VIDEO ROOT(44U) | MUX(2U) | ID(VIDEO_PLL1)
#define HSIO_ACSCAN_480_DFS2 ROOT(44U) | MUX(3U) | ID(SYS_PLL1_DFS2)
/* HSIO_ACSCAN_80M_gROOT */
#define HSIO_ACSCAN_80_OSC_24M ROOT(45U) | MUX(0U) | ID(OSC_24M)
#define HSIO_ACSCAN_80_DFS0_DIV2 ROOT(45U) | MUX(1U) | ID(SYS_PLL1_DFS0_DIV2)
#define HSIO_ACSCAN_80_DFS1_DIV2 ROOT(45U) | MUX(2U) | ID(SYS_PLL1_DFS1_DIV2)
#define HSIO_ACSCAN_80_FRO ROOT(45U) | MUX(3U) | ID(FRO)
/* HSIO_gROOT */
#define HSIO_OSC_24M ROOT(46U) | MUX(0U) | ID(OSC_24M)
#define HSIO_DFS0 ROOT(46U) | MUX(1U) | ID(SYS_PLL1_DFS0)
#define HSIO_DFS1 ROOT(46U) | MUX(2U) | ID(SYS_PLL1_DFS1)
#define HSIO_DFS2 ROOT(46U) | MUX(3U) | ID(SYS_PLL1_DFS2)
/* HSIO_PCIE_AUX_gROOT */
#define HSIO_PCIE_AUX_OSC_24M ROOT(47U) | MUX(0U) | ID(OSC_24M)
#define HSIO_PCIE_AUX_DFS0_DIV2 ROOT(47U) | MUX(1U) | ID(SYS_PLL1_DFS0_DIV2)
#define HSIO_PCIE_AUX_DFS1_DIV2 ROOT(47U) | MUX(2U) | ID(SYS_PLL1_DFS1_DIV2)
#define HSIO_PCIE_AUX_FRO ROOT(47U) | MUX(3U) | ID(FRO)
/* HSIO_PCIE_TEST_160M_gROOT */
#define HSIO_PCIE_160_OSC_24M ROOT(48U) | MUX(0U) | ID(OSC_24M)
#define HSIO_PCIE_160_DFS0 ROOT(48U) | MUX(1U) | ID(SYS_PLL1_DFS0)
#define HSIO_PCIE_160_DFS1 ROOT(48U) | MUX(2U) | ID(SYS_PLL1_DFS1)
#define HSIO_PCIE_160_DFS2 ROOT(48U) | MUX(3U) | ID(SYS_PLL1_DFS2)
/* HSIO_PCIE_TEST_400M_gROOT */
#define HSIO_PCIE_400_OSC_24M ROOT(49U) | MUX(0U) | ID(OSC_24M)
#define HSIO_PCIE_400_DFS0 ROOT(49U) | MUX(1U) | ID(SYS_PLL1_DFS0)
#define HSIO_PCIE_400_DFS1 ROOT(49U) | MUX(2U) | ID(SYS_PLL1_DFS1)
#define HSIO_PCIE_400_DFS2 ROOT(49U) | MUX(3U) | ID(SYS_PLL1_DFS2)
/* HSIO_PCIE_TEST_500M_gROOT */
#define HSIO_PCIE_500_OSC_24M ROOT(50U) | MUX(0U) | ID(OSC_24M)
#define HSIO_PCIE_500_DFS0 ROOT(50U) | MUX(1U) | ID(SYS_PLL1_DFS0)
#define HSIO_PCIE_500_DFS1 ROOT(50U) | MUX(2U) | ID(SYS_PLL1_DFS1)
#define HSIO_PCIE_500_DFS2 ROOT(50U) | MUX(3U) | ID(SYS_PLL1_DFS2)
/* HSIO_USB_TEST_50M_gROOT */
#define HSIO_USB_50_OSC_24M ROOT(51U) | MUX(0U) | ID(OSC_24M)
#define HSIO_USB_50_DFS0_DIV2 ROOT(51U) | MUX(1U) | ID(SYS_PLL1_DFS0_DIV2)
#define HSIO_USB_50_DFS1_DIV2 ROOT(51U) | MUX(2U) | ID(SYS_PLL1_DFS1_DIV2)
#define HSIO_USB_50_FRO ROOT(51U) | MUX(3U) | ID(FRO)
/* HSIO_USB_TEST_60M_gROOT */
#define HSIO_USB_60_OSC_24M ROOT(52U) | MUX(0U) | ID(OSC_24M)
#define HSIO_USB_60_DFS0_DIV2 ROOT(52U) | MUX(1U) | ID(SYS_PLL1_DFS0_DIV2)
#define HSIO_USB_60_DFS1_DIV2 ROOT(52U) | MUX(2U) | ID(SYS_PLL1_DFS1_DIV2)
#define HSIO_USB_60_FRO ROOT(52U) | MUX(3U) | ID(FRO)
/* BUS_M7_gROOT */
#define BUS_M7_OSC_24M ROOT(53U) | MUX(0U) | ID(OSC_24M)
#define BUS_M7_DFS0_DIV2 ROOT(53U) | MUX(1U) | ID(SYS_PLL1_DFS0_DIV2)
#define BUS_M7_DFS1_DIV2 ROOT(53U) | MUX(2U) | ID(SYS_PLL1_DFS1_DIV2)
#define BUS_M7_FRO ROOT(53U) | MUX(3U) | ID(FRO)
/* M7_gROOT */
#define M7_OSC_24M ROOT(54U) | MUX(0U) | ID(OSC_24M)
#define M7_DFS0 ROOT(54U) | MUX(1U) | ID(SYS_PLL1_DFS0)
#define M7_DFS1 ROOT(54U) | MUX(2U) | ID(SYS_PLL1_DFS1)
#define M7_DFS2 ROOT(54U) | MUX(3U) | ID(SYS_PLL1_DFS2)
/* M7_SYSTICK_gROOT */
#define M7_SYSTICK_OSC_24M ROOT(55U) | MUX(0U) | ID(OSC_24M)
#define M7_SYSTICK_DFS0_DIV2 ROOT(55U) | MUX(1U) | ID(SYS_PLL1_DFS0_DIV2)
#define M7_SYSTICK_DFS1_DIV2 ROOT(55U) | MUX(2U) | ID(SYS_PLL1_DFS1_DIV2)
#define M7_SYSTICK_FRO ROOT(55U) | MUX(3U) | ID(FRO)
/* BUS_NETCMIX_gROOT */
#define BUS_NETCMIX_OSC_24M ROOT(56U) | MUX(0U) | ID(OSC_24M)
#define BUS_NETCMIX_DFS0_DIV2 ROOT(56U) | MUX(1U) | ID(SYS_PLL1_DFS0_DIV2)
#define BUS_NETCMIX_DFS1_DIV2 ROOT(56U) | MUX(2U) | ID(SYS_PLL1_DFS1_DIV2)
#define BUS_NETCMIX_FRO ROOT(56U) | MUX(3U) | ID(FRO)
/* ENET_gROOT */
#define ENET_OSC_24M ROOT(57U) | MUX(0U) | ID(OSC_24M)
#define ENET_DFS0 ROOT(57U) | MUX(1U) | ID(SYS_PLL1_DFS0)
#define ENET_DFS1 ROOT(57U) | MUX(2U) | ID(SYS_PLL1_DFS1)
#define ENET_DFS2 ROOT(57U) | MUX(3U) | ID(SYS_PLL1_DFS2)
/* ENET_PHY_TEST_200M_gROOT */
#define ENET_PHY_200_OSC_24M ROOT(58U) | MUX(0U) | ID(OSC_24M)
#define ENET_PHY_200_DFS0 ROOT(58U) | MUX(1U) | ID(SYS_PLL1_DFS0)
#define ENET_PHY_200_DFS1_DIV2 ROOT(58U) | MUX(2U) | ID(SYS_PLL1_DFS1_DIV2)
#define ENET_PHY_200_FRO ROOT(58U) | MUX(3U) | ID(FRO)
/* ENET_PHY_TEST_500M_gROOT */
#define ENET_PHY_500_OSC_24M ROOT(59U) | MUX(0U) | ID(OSC_24M)
#define ENET_PHY_500_DFS0 ROOT(59U) | MUX(1U) | ID(SYS_PLL1_DFS0)
#define ENET_PHY_500_DFS1 ROOT(59U) | MUX(2U) | ID(SYS_PLL1_DFS1)
#define ENET_PHY_500_DFS2 ROOT(59U) | MUX(3U) | ID(SYS_PLL1_DFS2)
/* ENET_PHY_TEST_667M_gROOT */
#define ENET_PHY_667_OSC_24M ROOT(60U) | MUX(0U) | ID(OSC_24M)
#define ENET_PHY_667_DFS0 ROOT(60U) | MUX(1U) | ID(SYS_PLL1_DFS0)
#define ENET_PHY_667_DFS1 ROOT(60U) | MUX(2U) | ID(SYS_PLL1_DFS1)
#define ENET_PHY_667_DFS2 ROOT(60U) | MUX(3U) | ID(SYS_PLL1_DFS2)
/* ENET_REF_gROOT */
#define ENET_REF_OSC_24M ROOT(61U) | MUX(0U) | ID(OSC_24M)
#define ENET_REF_DFS0 ROOT(61U) | MUX(1U) | ID(SYS_PLL1_DFS0)
#define ENET_REF_DFS1_DIV2 ROOT(61U) | MUX(2U) | ID(SYS_PLL1_DFS1_DIV2)
#define ENET_REF_FRO ROOT(61U) | MUX(3U) | ID(FRO)
/* ENET_TIMER1_gROOT */
#define ENET_TIMER1_OSC_24M ROOT(62U) | MUX(0U) | ID(OSC_24M)
#define ENET_TIMER1_DFS0_DIV2 ROOT(62U) | MUX(1U) | ID(SYS_PLL1_DFS0_DIV2)
#define ENET_TIMER1_DFS1_DIV2 ROOT(62U) | MUX(2U) | ID(SYS_PLL1_DFS1_DIV2)
#define ENET_TIMER1_FRO ROOT(62U) | MUX(3U) | ID(FRO)
/* MQS2_gROOT */
#define MQS2_OSC_24M ROOT(63U) | MUX(0U) | ID(OSC_24M)
#define MQS2_AUDIO_PLL1 ROOT(63U) | MUX(1U) | ID(AUDIO_PLL1)
#define MQS2_AUDIO_PLL2 ROOT(63U) | MUX(2U) | ID(AUDIO_PLL2)
#define MQS2_EXT ROOT(63U) | MUX(3U) | ID(EXT)
/* SAI2_gROOT */
#define SAI2_OSC_24M ROOT(64U) | MUX(0U) | ID(OSC_24M)
#define SAI2_AUDIO_PLL1 ROOT(64U) | MUX(1U) | ID(AUDIO_PLL1)
#define SAI2_AUDIO_PLL2 ROOT(64U) | MUX(2U) | ID(AUDIO_PLL2)
#define SAI2_EXT ROOT(64U) | MUX(3U) | ID(EXT)
/* NOC_APB_gROOT */
#define NOC_APB_OSC_24M ROOT(65U) | MUX(0U) | ID(OSC_24M)
#define NOC_APB_DFS0_DIV2 ROOT(65U) | MUX(1U) | ID(SYS_PLL1_DFS0_DIV2)
#define NOC_APB_DFS1_DIV2 ROOT(65U) | MUX(2U) | ID(SYS_PLL1_DFS1_DIV2)
#define NOC_APB_FRO ROOT(65U) | MUX(3U) | ID(FRO)
/* NOC_gROOT */
#define NOC_OSC_24M ROOT(66U) | MUX(0U) | ID(OSC_24M)
#define NOC_DFS0 ROOT(66U) | MUX(1U) | ID(SYS_PLL1_DFS0)
#define NOC_DFS1 ROOT(66U) | MUX(2U) | ID(SYS_PLL1_DFS1)
#define NOC_DFS2 ROOT(66U) | MUX(3U) | ID(SYS_PLL1_DFS2)
/* NPU_APB_gROOT */
#define NPU_APB_OSC_24M ROOT(67U) | MUX(0U) | ID(OSC_24M)
#define NPU_APB_DFS0_DIV2 ROOT(67U) | MUX(1U) | ID(SYS_PLL1_DFS0_DIV2)
#define NPU_APB_DFS1_DIV2 ROOT(67U) | MUX(2U) | ID(SYS_PLL1_DFS1_DIV2)
#define NPU_APB_FRO ROOT(67U) | MUX(3U) | ID(FRO)
/* NPU_gROOT */
#define NPU_OSC_24M ROOT(68U) | MUX(0U) | ID(OSC_24M)
#define NPU_DFS0 ROOT(68U) | MUX(1U) | ID(SYS_PLL1_DFS0)
#define NPU_DFS1 ROOT(68U) | MUX(2U) | ID(SYS_PLL1_DFS1)
#define NPU_DFS2 ROOT(68U) | MUX(3U) | ID(SYS_PLL1_DFS2)
/* CCM_CKO1_gROOT */
#define CCM_CKO1_OSC_24M ROOT(69U) | MUX(0U) | ID(OSC_24M)
#define CCM_CKO1_DFS0 ROOT(69U) | MUX(1U) | ID(SYS_PLL1_DFS0)
#define CCM_CKO1_OSC_32K ROOT(69U) | MUX(2U) | ID(OSC_32K)
#define CCM_CKO1_AUDIO_PLL1 ROOT(69U) | MUX(3U) | ID(AUDIO_PLL1)
/* CCM_CKO2_gROOT */
#define CCM_CKO2_OSC_24M ROOT(70U) | MUX(0U) | ID(OSC_24M)
#define CCM_CKO2_DFS0 ROOT(70U) | MUX(1U) | ID(SYS_PLL1_DFS0)
#define CCM_CKO2_OSC_32K ROOT(70U) | MUX(2U) | ID(OSC_32K)
#define CCM_CKO2_VIDEO_PLL1 ROOT(70U) | MUX(3U) | ID(VIDEO_PLL1)
/* CCM_CKO3_gROOT */
#define CCM_CKO3_OSC_24M ROOT(71U) | MUX(0U) | ID(OSC_24M)
#define CCM_CKO3_DFS0 ROOT(71U) | MUX(1U) | ID(SYS_PLL1_DFS0)
#define CCM_CKO3_OSC_32K ROOT(71U) | MUX(2U) | ID(OSC_32K)
#define CCM_CKO3_AUDIO_PLL2 ROOT(71U) | MUX(3U) | ID(AUDIO_PLL2)
/* CCM_CKO4_gROOT */
#define CCM_CKO4_OSC_24M ROOT(72U) | MUX(0U) | ID(OSC_24M)
#define CCM_CKO4_DFS0 ROOT(72U) | MUX(1U) | ID(SYS_PLL1_DFS0)
#define CCM_CKO4_OSC_32K ROOT(72U) | MUX(2U) | ID(OSC_32K)
#define CCM_CKO4_VIDEO_PLL1 ROOT(72U) | MUX(3U) | ID(VIDEO_PLL1)
/* VPU_APB_gROOT */
#define VPU_APB_OSC_24M ROOT(73U) | MUX(0U) | ID(OSC_24M)
#define VPU_APB_DFS0_DIV2 ROOT(73U) | MUX(1U) | ID(SYS_PLL1_DFS0_DIV2)
#define VPU_APB_DFS1_DIV2 ROOT(73U) | MUX(2U) | ID(SYS_PLL1_DFS1_DIV2)
#define VPU_APB_FRO ROOT(73U) | MUX(3U) | ID(FRO)
/* VPU_gROOT */
#define VPU_OSC_24M ROOT(74U) | MUX(0U) | ID(OSC_24M)
#define VPU_DFS0 ROOT(74U) | MUX(1U) | ID(SYS_PLL1_DFS0)
#define VPU_DFS1 ROOT(74U) | MUX(2U) | ID(SYS_PLL1_DFS1)
#define VPU_DFS2 ROOT(74U) | MUX(3U) | ID(SYS_PLL1_DFS2)
/* VPU_DSP_gROOT */
#define VPU_DSP_OSC_24M ROOT(75U) | MUX(0U) | ID(OSC_24M)
#define VPU_DSP_DFS0 ROOT(75U) | MUX(1U) | ID(SYS_PLL1_DFS0)
#define VPU_DSP_DFS1 ROOT(75U) | MUX(2U) | ID(SYS_PLL1_DFS1)
#define VPU_DSP_DFS2 ROOT(75U) | MUX(3U) | ID(SYS_PLL1_DFS2)
/* VPU_JPEG_gROOT */
#define VPU_JPEG_OSC_24M ROOT(76U) | MUX(0U) | ID(OSC_24M)
#define VPU_JPEG_DFS0 ROOT(76U) | MUX(1U) | ID(SYS_PLL1_DFS0)
#define VPU_JPEG_DFS1 ROOT(76U) | MUX(2U) | ID(SYS_PLL1_DFS1)
#define VPU_JPEG_DFS2 ROOT(76U) | MUX(3U) | ID(SYS_PLL1_DFS2)
/* AUDIO_XCVR_gROOT */
#define AUDIO_XCVR_OSC_24M ROOT(77U) | MUX(0U) | ID(OSC_24M)
#define AUDIO_XCVR_DFS0 ROOT(77U) | MUX(1U) | ID(SYS_PLL1_DFS0)
#define AUDIO_XCVR_DFS1_DIV2 ROOT(77U) | MUX(2U) | ID(SYS_PLL1_DFS1_DIV2)
#define AUDIO_XCVR_FRO ROOT(77U) | MUX(3U) | ID(FRO)
/* BUS_WAKEUP_gROOT */
#define BUS_WAKEUP_OSC_24M ROOT(78U) | MUX(0U) | ID(OSC_24M)
#define BUS_WAKEUP_DFS0_DIV2 ROOT(78U) | MUX(1U) | ID(SYS_PLL1_DFS0_DIV2)
#define BUS_WAKEUP_DFS1_DIV2 ROOT(78U) | MUX(2U) | ID(SYS_PLL1_DFS1_DIV2)
#define BUS_WAKEUP_FRO ROOT(78U) | MUX(3U) | ID(FRO)
/* CAN2_gROOT */
#define CAN2_OSC_24M ROOT(79U) | MUX(0U) | ID(OSC_24M)
#define CAN2_DFS0_DIV2 ROOT(79U) | MUX(1U) | ID(SYS_PLL1_DFS0_DIV2)
#define CAN2_DFS1_DIV2 ROOT(79U) | MUX(2U) | ID(SYS_PLL1_DFS1_DIV2)
#define CAN2_FRO ROOT(79U) | MUX(3U) | ID(FRO)
/* CAN3_gROOT */
#define CAN3_OSC_24M ROOT(80U) | MUX(0U) | ID(OSC_24M)
#define CAN3_DFS0_DIV2 ROOT(80U) | MUX(1U) | ID(SYS_PLL1_DFS0_DIV2)
#define CAN3_DFS1_DIV2 ROOT(80U) | MUX(2U) | ID(SYS_PLL1_DFS1_DIV2)
#define CAN3_FRO ROOT(80U) | MUX(3U) | ID(FRO)
/* CAN4_gROOT */
#define CAN4_OSC_24M ROOT(81U) | MUX(0U) | ID(OSC_24M)
#define CAN4_DFS0_DIV2 ROOT(81U) | MUX(1U) | ID(SYS_PLL1_DFS0_DIV2)
#define CAN4_DFS1_DIV2 ROOT(81U) | MUX(2U) | ID(SYS_PLL1_DFS1_DIV2)
#define CAN4_FRO ROOT(81U) | MUX(3U) | ID(FRO)
/* CAN5_gROOT */
#define CAN5_OSC_24M ROOT(82U) | MUX(0U) | ID(OSC_24M)
#define CAN5_DFS0_DIV2 ROOT(82U) | MUX(1U) | ID(SYS_PLL1_DFS0_DIV2)
#define CAN5_DFS1_DIV2 ROOT(82U) | MUX(2U) | ID(SYS_PLL1_DFS1_DIV2)
#define CAN5_FRO ROOT(82U) | MUX(3U) | ID(FRO)
/* FLEXIO1_gROOT */
#define FLEXIO1_OSC_24M ROOT(83U) | MUX(0U) | ID(OSC_24M)
#define FLEXIO1_DFS0_DIV2 ROOT(83U) | MUX(1U) | ID(SYS_PLL1_DFS0_DIV2)
#define FLEXIO1_DFS1_DIV2 ROOT(83U) | MUX(2U) | ID(SYS_PLL1_DFS1_DIV2)
#define FLEXIO1_FRO ROOT(83U) | MUX(3U) | ID(FRO)
/* FLEXIO2_gROOT */
#define FLEXIO2_OSC_24M ROOT(84U) | MUX(0U) | ID(OSC_24M)
#define FLEXIO2_DFS0_DIV2 ROOT(84U) | MUX(1U) | ID(SYS_PLL1_DFS0_DIV2)
#define FLEXIO2_DFS1_DIV2 ROOT(84U) | MUX(2U) | ID(SYS_PLL1_DFS1_DIV2)
#define FLEXIO2_FRO ROOT(84U) | MUX(3U) | ID(FRO)
/* FLEXSPI1_gROOT */
#define FLEXSPI1_OSC_24M ROOT(85U) | MUX(0U) | ID(OSC_24M)
#define FLEXSPI1_DFS0 ROOT(85U) | MUX(1U) | ID(SYS_PLL1_DFS0)
#define FLEXSPI1_DFS1 ROOT(85U) | MUX(2U) | ID(SYS_PLL1_DFS1)
#define FLEXSPI1_DFS2 ROOT(85U) | MUX(3U) | ID(SYS_PLL1_DFS2)
/* I3C2_gROOT */
#define I3C2_OSC_24M ROOT(86U) | MUX(0U) | ID(OSC_24M)
#define I3C2_DFS0_DIV2 ROOT(86U) | MUX(1U) | ID(SYS_PLL1_DFS0_DIV2)
#define I3C2_DFS1_DIV2 ROOT(86U) | MUX(2U) | ID(SYS_PLL1_DFS1_DIV2)
#define I3C2_FRO ROOT(86U) | MUX(3U) | ID(FRO)
/* I3C2_SLOW_gROOT */
#define I3C2_SLOW_OSC_24M ROOT(87U) | MUX(0U) | ID(OSC_24M)
#define I3C2_SLOW_DFS0_DIV2 ROOT(87U) | MUX(1U) | ID(SYS_PLL1_DFS0_DIV2)
#define I3C2_SLOW_DFS1_DIV2 ROOT(87U) | MUX(2U) | ID(SYS_PLL1_DFS1_DIV2)
#define I3C2_SLOW_FRO ROOT(87U) | MUX(3U) | ID(FRO)
/* LPI2C3_gROOT */
#define LPI2C3_OSC_24M ROOT(88U) | MUX(0U) | ID(OSC_24M)
#define LPI2C3_DFS0_DIV2 ROOT(88U) | MUX(1U) | ID(SYS_PLL1_DFS0_DIV2)
#define LPI2C3_DFS1_DIV2 ROOT(88U) | MUX(2U) | ID(SYS_PLL1_DFS1_DIV2)
#define LPI2C3_FRO ROOT(88U) | MUX(3U) | ID(FRO)
/* LPI2C4_gROOT */
#define LPI2C4_OSC_24M ROOT(89U) | MUX(0U) | ID(OSC_24M)
#define LPI2C4_DFS0_DIV2 ROOT(89U) | MUX(1U) | ID(SYS_PLL1_DFS0_DIV2)
#define LPI2C4_DFS1_DIV2 ROOT(89U) | MUX(2U) | ID(SYS_PLL1_DFS1_DIV2)
#define LPI2C4_FRO ROOT(89U) | MUX(3U) | ID(FRO)
/* LPI2C5_gROOT */
#define LPI2C5_OSC_24M ROOT(90U) | MUX(0U) | ID(OSC_24M)
#define LPI2C5_DFS0_DIV2 ROOT(90U) | MUX(1U) | ID(SYS_PLL1_DFS0_DIV2)
#define LPI2C5_DFS1_DIV2 ROOT(90U) | MUX(2U) | ID(SYS_PLL1_DFS1_DIV2)
#define LPI2C5_FRO ROOT(90U) | MUX(3U) | ID(FRO)
/* LPI2C6_gROOT */
#define LPI2C6_OSC_24M ROOT(91U) | MUX(0U) | ID(OSC_24M)
#define LPI2C6_DFS0_DIV2 ROOT(91U) | MUX(1U) | ID(SYS_PLL1_DFS0_DIV2)
#define LPI2C6_DFS1_DIV2 ROOT(91U) | MUX(2U) | ID(SYS_PLL1_DFS1_DIV2)
#define LPI2C6_FRO ROOT(91U) | MUX(3U) | ID(FRO)
/* LPI2C7_gROOT */
#define LPI2C7_OSC_24M ROOT(92U) | MUX(0U) | ID(OSC_24M)
#define LPI2C7_DFS0_DIV2 ROOT(92U) | MUX(1U) | ID(SYS_PLL1_DFS0_DIV2)
#define LPI2C7_DFS1_DIV2 ROOT(92U) | MUX(2U) | ID(SYS_PLL1_DFS1_DIV2)
#define LPI2C7_FRO ROOT(92U) | MUX(3U) | ID(FRO)
/* LPI2C8_gROOT */
#define LPI2C8_OSC_24M ROOT(93U) | MUX(0U) | ID(OSC_24M)
#define LPI2C8_DFS0_DIV2 ROOT(93U) | MUX(1U) | ID(SYS_PLL1_DFS0_DIV2)
#define LPI2C8_DFS1_DIV2 ROOT(93U) | MUX(2U) | ID(SYS_PLL1_DFS1_DIV2)
#define LPI2C8_FRO ROOT(93U) | MUX(3U) | ID(FRO)
/* LPSPI3_gROOT */
#define LPSPI3_OSC_24M ROOT(94U) | MUX(0U) | ID(OSC_24M)
#define LPSPI3_DFS0_DIV2 ROOT(94U) | MUX(1U) | ID(SYS_PLL1_DFS0_DIV2)
#define LPSPI3_DFS1_DIV2 ROOT(94U) | MUX(2U) | ID(SYS_PLL1_DFS1_DIV2)
#define LPSPI3_FRO ROOT(94U) | MUX(3U) | ID(FRO)
/* LPSPI4_gROOT */
#define LPSPI4_OSC_24M ROOT(95U) | MUX(0U) | ID(OSC_24M)
#define LPSPI4_DFS0_DIV2 ROOT(95U) | MUX(1U) | ID(SYS_PLL1_DFS0_DIV2)
#define LPSPI4_DFS1_DIV2 ROOT(95U) | MUX(2U) | ID(SYS_PLL1_DFS1_DIV2)
#define LPSPI4_FRO ROOT(95U) | MUX(3U) | ID(FRO)
/* LPSPI5_gROOT */
#define LPSPI5_OSC_24M ROOT(96U) | MUX(0U) | ID(OSC_24M)
#define LPSPI5_DFS0_DIV2 ROOT(96U) | MUX(1U) | ID(SYS_PLL1_DFS0_DIV2)
#define LPSPI5_DFS1_DIV2 ROOT(96U) | MUX(2U) | ID(SYS_PLL1_DFS1_DIV2)
#define LPSPI5_FRO ROOT(96U) | MUX(3U) | ID(FRO)
/* LPSPI6_gROOT */
#define LPSPI6_OSC_24M ROOT(97U) | MUX(0U) | ID(OSC_24M)
#define LPSPI6_DFS0_DIV2 ROOT(97U) | MUX(1U) | ID(SYS_PLL1_DFS0_DIV2)
#define LPSPI6_DFS1_DIV2 ROOT(97U) | MUX(2U) | ID(SYS_PLL1_DFS1_DIV2)
#define LPSPI6_FRO ROOT(97U) | MUX(3U) | ID(FRO)
/* LPSPI7_gROOT */
#define LPSPI7_OSC_24M ROOT(98U) | MUX(0U) | ID(OSC_24M)
#define LPSPI7_DFS0_DIV2 ROOT(98U) | MUX(1U) | ID(SYS_PLL1_DFS0_DIV2)
#define LPSPI7_DFS1_DIV2 ROOT(98U) | MUX(2U) | ID(SYS_PLL1_DFS1_DIV2)
#define LPSPI7_FRO ROOT(98U) | MUX(3U) | ID(FRO)
/* LPSPI8_gROOT */
#define LPSPI8_OSC_24M ROOT(99U) | MUX(0U) | ID(OSC_24M)
#define LPSPI8_DFS0_DIV2 ROOT(99U) | MUX(1U) | ID(SYS_PLL1_DFS0_DIV2)
#define LPSPI8_DFS1_DIV2 ROOT(99U) | MUX(2U) | ID(SYS_PLL1_DFS1_DIV2)
#define LPSPI8_FRO ROOT(99U) | MUX(3U) | ID(FRO)
/* LPTMR2_gROOT */
#define LPTMR2_OSC_24M ROOT(100U) | MUX(0U) | ID(OSC_24M)
#define LPTMR2_DFS0_DIV2 ROOT(100U) | MUX(1U) | ID(SYS_PLL1_DFS0_DIV2)
#define LPTMR2_DFS1_DIV2 ROOT(100U) | MUX(2U) | ID(SYS_PLL1_DFS1_DIV2)
#define LPTMR2_FRO ROOT(100U) | MUX(3U) | ID(FRO)
/* LPUART3_gROOT */
#define LPUART3_OSC_24M ROOT(101U) | MUX(0U) | ID(OSC_24M)
#define LPUART3_DFS0_DIV2 ROOT(101U) | MUX(1U) | ID(SYS_PLL1_DFS0_DIV2)
#define LPUART3_DFS1_DIV2 ROOT(101U) | MUX(2U) | ID(SYS_PLL1_DFS1_DIV2)
#define LPUART3_FRO ROOT(101U) | MUX(3U) | ID(FRO)
/* LPUART4_gROOT */
#define LPUART4_OSC_24M ROOT(102U) | MUX(0U) | ID(OSC_24M)
#define LPUART4_DFS0_DIV2 ROOT(102U) | MUX(1U) | ID(SYS_PLL1_DFS0_DIV2)
#define LPUART4_DFS1_DIV2 ROOT(102U) | MUX(2U) | ID(SYS_PLL1_DFS1_DIV2)
#define LPUART4_FRO ROOT(102U) | MUX(3U) | ID(FRO)
/* LPUART5_gROOT */
#define LPUART5_OSC_24M ROOT(103U) | MUX(0U) | ID(OSC_24M)
#define LPUART5_DFS0_DIV2 ROOT(103U) | MUX(1U) | ID(SYS_PLL1_DFS0_DIV2)
#define LPUART5_DFS1_DIV2 ROOT(103U) | MUX(2U) | ID(SYS_PLL1_DFS1_DIV2)
#define LPUART5_FRO ROOT(103U) | MUX(3U) | ID(FRO)
/* LPUART6_gROOT */
#define LPUART6_OSC_24M ROOT(104U) | MUX(0U) | ID(OSC_24M)
#define LPUART6_DFS0_DIV2 ROOT(104U) | MUX(1U) | ID(SYS_PLL1_DFS0_DIV2)
#define LPUART6_DFS1_DIV2 ROOT(104U) | MUX(2U) | ID(SYS_PLL1_DFS1_DIV2)
#define LPUART6_FRO ROOT(104U) | MUX(3U) | ID(FRO)
/* LPUART7_gROOT */
#define LPUART7_OSC_24M ROOT(105U) | MUX(0U) | ID(OSC_24M)
#define LPUART7_DFS0_DIV2 ROOT(105U) | MUX(1U) | ID(SYS_PLL1_DFS0_DIV2)
#define LPUART7_DFS1_DIV2 ROOT(105U) | MUX(2U) | ID(SYS_PLL1_DFS1_DIV2)
#define LPUART7_FRO ROOT(105U) | MUX(3U) | ID(FRO)
/* LPUART8_gROOT */
#define LPUART8_OSC_24M ROOT(106U) | MUX(0U) | ID(OSC_24M)
#define LPUART8_DFS0_DIV2 ROOT(106U) | MUX(1U) | ID(SYS_PLL1_DFS0_DIV2)
#define LPUART8_DFS1_DIV2 ROOT(106U) | MUX(2U) | ID(SYS_PLL1_DFS1_DIV2)
#define LPUART8_FRO ROOT(106U) | MUX(3U) | ID(FRO)
/* SAI3_gROOT */
#define SAI3_OSC_24M ROOT(107U) | MUX(0U) | ID(OSC_24M)
#define SAI3_AUDIO_PLL1 ROOT(107U) | MUX(1U) | ID(AUDIO_PLL1)
#define SAI3_AUDIO_PLL2 ROOT(107U) | MUX(2U) | ID(AUDIO_PLL2)
#define SAI3_EXT ROOT(107U) | MUX(3U) | ID(EXT)
/* SAI4_gROOT */
#define SAI4_OSC_24M ROOT(108U) | MUX(0U) | ID(OSC_24M)
#define SAI4_AUDIO_PLL1 ROOT(108U) | MUX(1U) | ID(AUDIO_PLL1)
#define SAI4_AUDIO_PLL2 ROOT(108U) | MUX(2U) | ID(AUDIO_PLL2)
#define SAI4_EXT ROOT(108U) | MUX(3U) | ID(EXT)
/* SAI5_gROOT */
#define SAI5_OSC_24M ROOT(109U) | MUX(0U) | ID(OSC_24M)
#define SAI5_AUDIO_PLL1 ROOT(109U) | MUX(1U) | ID(AUDIO_PLL1)
#define SAI5_AUDIO_PLL2 ROOT(109U) | MUX(2U) | ID(AUDIO_PLL2)
#define SAI5_EXT ROOT(109U) | MUX(3U) | ID(EXT)
/* SPDIF_gROOT */
#define SPDIF_OSC_24M ROOT(110U) | MUX(0U) | ID(OSC_24M)
#define SPDIF_AUDIO_PLL1 ROOT(110U) | MUX(1U) | ID(AUDIO_PLL1)
#define SPDIF_AUDIO_PLL2 ROOT(110U) | MUX(2U) | ID(AUDIO_PLL2)
#define SPDIF_EXT ROOT(110U) | MUX(3U) | ID(EXT)
/* SWO_TRACE_gROOT */
#define SWO_TRACE_OSC_24M ROOT(111U) | MUX(0U) | ID(OSC_24M)
#define SWO_TRACE_DFS0_DIV2 ROOT(111U) | MUX(1U) | ID(SYS_PLL1_DFS0_DIV2)
#define SWO_TRACE_DFS1_DIV2 ROOT(111U) | MUX(2U) | ID(SYS_PLL1_DFS1_DIV2)
#define SWO_TRACE_FRO ROOT(111U) | MUX(3U) | ID(FRO)
/* TPM4_gROOT */
#define TPM4_OSC_24M ROOT(112U) | MUX(0U) | ID(OSC_24M)
#define TPM4_DFS0 ROOT(112U) | MUX(1U) | ID(SYS_PLL1_DFS0)
#define TPM4_AUDIO_PLL1 ROOT(112U) | MUX(2U) | ID(AUDIO_PLL1)
#define TPM4_EXT ROOT(112U) | MUX(3U) | ID(EXT)
/* TPM5_gROOT */
#define TPM5_OSC_24M ROOT(113U) | MUX(0U) | ID(OSC_24M)
#define TPM5_DFS0 ROOT(113U) | MUX(1U) | ID(SYS_PLL1_DFS0)
#define TPM5_AUDIO_PLL1 ROOT(113U) | MUX(2U) | ID(AUDIO_PLL1)
#define TPM5_EXT ROOT(113U) | MUX(3U) | ID(EXT)
/* TPM6_gROOT */
#define TPM6_OSC_24M ROOT(114U) | MUX(0U) | ID(OSC_24M)
#define TPM6_DFS0 ROOT(114U) | MUX(1U) | ID(SYS_PLL1_DFS0)
#define TPM6_AUDIO_PLL1 ROOT(114U) | MUX(2U) | ID(AUDIO_PLL1)
#define TPM6_EXT ROOT(114U) | MUX(3U) | ID(EXT)
/* TSTMR2_gROOT */
#define TSTMR2_OSC_24M ROOT(115U) | MUX(0U) | ID(OSC_24M)
#define TSTMR2_DFS0_DIV2 ROOT(115U) | MUX(1U) | ID(SYS_PLL1_DFS0_DIV2)
#define TSTMR2_DFS1_DIV2 ROOT(115U) | MUX(2U) | ID(SYS_PLL1_DFS1_DIV2)
#define TSTMR2_FRO ROOT(115U) | MUX(3U) | ID(FRO)
/* USB_PHY_BURUNIN_gROOT */
#define USB_PHY_OSC_24M ROOT(116U) | MUX(0U) | ID(OSC_24M)
#define USB_PHY_DFS0_DIV2 ROOT(116U) | MUX(1U) | ID(SYS_PLL1_DFS0_DIV2)
#define USB_PHY_DFS1_DIV2 ROOT(116U) | MUX(2U) | ID(SYS_PLL1_DFS1_DIV2)
#define USB_PHY_FRO ROOT(116U) | MUX(3U) | ID(FRO)
/* USDHC1_gROOT */
#define USDHC1_OSC_24M ROOT(117U) | MUX(0U) | ID(OSC_24M)
#define USDHC1_DFS0 ROOT(117U) | MUX(1U) | ID(SYS_PLL1_DFS0)
#define USDHC1_DFS1 ROOT(117U) | MUX(2U) | ID(SYS_PLL1_DFS1)
#define USDHC1_DFS2 ROOT(117U) | MUX(3U) | ID(SYS_PLL1_DFS2)
/* USDHC2_gROOT */
#define USDHC2_OSC_24M ROOT(118U) | MUX(0U) | ID(OSC_24M)
#define USDHC2_DFS0 ROOT(118U) | MUX(1U) | ID(SYS_PLL1_DFS0)
#define USDHC2_DFS1 ROOT(118U) | MUX(2U) | ID(SYS_PLL1_DFS1)
#define USDHC2_DFS2 ROOT(118U) | MUX(3U) | ID(SYS_PLL1_DFS2)
/* USDHC3_gROOT */
#define USDHC3_OSC_24M ROOT(119U) | MUX(0U) | ID(OSC_24M)
#define USDHC3_DFS0 ROOT(119U) | MUX(1U) | ID(SYS_PLL1_DFS0)
#define USDHC3_DFS1 ROOT(119U) | MUX(2U) | ID(SYS_PLL1_DFS1)
#define USDHC3_DFS2 ROOT(119U) | MUX(3U) | ID(SYS_PLL1_DFS2)
/* V2X_PK_gROOT */
#define V2X_PK_OSC_24M ROOT(120U) | MUX(0U) | ID(OSC_24M)
#define V2X_PK_DFS0 ROOT(120U) | MUX(1U) | ID(SYS_PLL1_DFS0)
#define V2X_PK_DFS1 ROOT(120U) | MUX(2U) | ID(SYS_PLL1_DFS1)
#define V2X_PK_DFS2 ROOT(120U) | MUX(3U) | ID(SYS_PLL1_DFS2)
/* WAKEUP_AXI_gROOT */
#define WAKEUP_AXI_OSC_24M ROOT(121U) | MUX(0U) | ID(OSC_24M)
#define WAKEUP_AXI_DFS0 ROOT(121U) | MUX(1U) | ID(SYS_PLL1_DFS0)
#define WAKEUP_AXI_DFS1 ROOT(121U) | MUX(2U) | ID(SYS_PLL1_DFS1)
#define WAKEUP_AXI_DFS2 ROOT(121U) | MUX(3U) | ID(SYS_PLL1_DFS2)
/* XSPI_SLV_gROOT */
#define XSPI_SLV_OSC_24M ROOT(122U) | MUX(0U) | ID(OSC_24M)
#define XSPI_SLV_DFS0 ROOT(122U) | MUX(1U) | ID(SYS_PLL1_DFS0)
#define XSPI_SLV_DFS1 ROOT(122U) | MUX(2U) | ID(SYS_PLL1_DFS1)
#define XSPI_SLV_DFS2 ROOT(122U) | MUX(3U) | ID(SYS_PLL1_DFS2)
#endif /* __ARCH_ARM_SRC_IMX9_HARDWARE_IMX93_IMX93_EDMA_H */

View file

@ -36,11 +36,16 @@
#include <arch/board/board.h>
#include "arm64_internal.h"
#include "imx9_ccm.h"
#include "imx9_clockconfig.h"
#ifndef CONFIG_IMX9_CLK_OVER_SCMI
#include "imx9_ccm.h"
#include "hardware/imx9_ccm.h"
#endif
#include "imx9_clockconfig.h"
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
@ -176,6 +181,129 @@ static int pll_pfd_init(uintptr_t reg, int pfd, struct pfd_parms_s *pfdparm)
#endif /* CONFIG_IMX9_CFG_PLLS */
#endif
#ifdef CONFIG_IMX9_CLK_OVER_SCMI
/****************************************************************************
* Name: imx9_sm_getipfreq
*
* Description:
* This function get the clock rate
*
* Input Parameters:
* clk - The clock to be get the rate
*
* Returned Value:
* rate is returned on success; a negated errno value is returned on
* any failure.
*
****************************************************************************/
static int imx9_sm_getipfreq(scmi_clock_t *clk)
{
scmi_clock_rate_t rate =
{
0, 0
};
uint32_t channel = clk->channel;
uint32_t clock_id = clk->clk_id;
int status;
status = imx9_scmi_get_clock_rate(channel, clock_id, &rate);
if (status < 0)
{
return status;
}
return rate.lower;
}
/****************************************************************************
* Name: imx9_sm_setrootclock
*
* Description:
* This function set root for clock
*
* Input Parameters:
* clk - The clock to be set root
*
* Returned Value:
* Zero (OK) is returned on success; a negated errno value is returned on
* any failure.
*
****************************************************************************/
static int imx9_sm_setrootclock(scmi_clock_t *clk)
{
scmi_clock_rate_t rate =
{
0, 0
};
uint32_t channel = clk->channel;
uint32_t clock_id = clk->clk_id;
uint32_t pclk_id = clk->pclk_id;
uint32_t div = clk->div;
uint32_t attributes = clk->attributes;
uint32_t oem_config_val = clk->oem_config_val;
uint32_t flags = clk->flags;
uint32_t old_pclk_id = 0; /* parent clock id */
uint64_t src_rate, root_rate;
int status;
if (div == 0)
{
return -EINVAL;
}
status = imx9_scmi_get_clock_parent(channel, clock_id, &old_pclk_id);
if (status != 0)
{
return status;
}
if (old_pclk_id != pclk_id)
{
status = imx9_scmi_set_clock_parent(channel, clock_id, pclk_id);
if (status != 0)
{
return status;
}
}
status = imx9_scmi_get_clock_rate(channel, pclk_id, &rate);
if (status != 0)
{
return status;
}
src_rate = rate.upper;
src_rate = (src_rate << 32);
src_rate |= rate.lower;
root_rate = src_rate / div;
rate.lower = root_rate & SCMI_CLOCK_RATE_MASK;
rate.upper = (root_rate >> 32) & SCMI_CLOCK_RATE_MASK;
status = imx9_scmi_set_clock_rate(channel, clock_id, flags, rate);
if (status != 0)
{
return status;
}
status = imx9_scmi_set_clock_config(channel, clock_id, attributes,
oem_config_val);
if (status != 0)
{
return status;
}
return OK;
}
#else
static uint32_t calculate_vco_freq(const struct pll_parms_s *parm, bool frac)
{
/* Base clock is common for all VCO:s */
@ -514,6 +642,131 @@ int imx9_get_clock(int clkname, uint32_t *frequency)
return OK;
}
#endif /* CONFIG_IMX9_CLK_OVER_SCMI */
#ifdef CONFIG_IMX9_CLK_OVER_SCMI
/****************************************************************************
* Name: imx9_configure_clock
*
* Description:
* This function config and enable the clock
*
* Input Parameters:
* config - The clock config
* enabled - If enable the clock
*
* Returned Value:
* Zero (OK) is returned on success; a negated errno value is returned on
* any failure.
*
****************************************************************************/
int imx9_configure_clock(clock_config_t config, bool enabled)
{
scmi_clock_t clk =
{
0
};
clk.clk_id = GET_ROOT(config) + ROOT_CLOCK_OFFSET;
clk.pclk_id = GET_ID(config);
clk.channel = SCMI_PLATFORM_A2P;
clk.div = GET_DIV(config);
if (clk.div == 0)
{
/* Make sure div is always 1 */
clk.div = 1;
}
clk.attributes = SCMI_CLOCK_CONFIG_SET_ENABLE(enabled);
clk.flags = SCMI_CLOCK_RATE_FLAGS_ROUND(SCMI_CLOCK_ROUND_AUTO);
return imx9_sm_setrootclock(&clk);
}
/****************************************************************************
* Name: imx9_get_rootclock
*
* Description:
* This function returns the clock frequency of the specified root
* functional clock.
*
* Input Parameters:
* clkroot - Identifies the peripheral clock of interest
* frequency - The location where the peripheral clock frequency will be
* returned
*
* Returned Value:
* Zero (OK) is returned on success; a negated errno value is returned on
* any failure.
*
****************************************************************************/
int imx9_get_rootclock(int clkroot, uint32_t *frequency)
{
if (clkroot < CCM_CR_COUNT)
{
int ret = 0;
scmi_clock_t clk =
{
0
};
clk.clk_id = (uint32_t)(clkroot + ROOT_CLOCK_OFFSET);
clk.channel = SCMI_PLATFORM_A2P;
ret = imx9_sm_getipfreq(&clk);
if (ret < 0)
{
return ret;
}
else
{
*frequency = ret;
return OK;
}
}
return -ENODEV;
}
/****************************************************************************
* Name: imx9_set_clock_freq
*
* Description:
* This function set the clock frequency of the specified clock.
*
* Input Parameters:
* clkid - Identifies the peripheral clock of interest
* frequency - The location where the peripheral clock frequency will be
* set
*
* Returned Value:
* Zero (OK) is returned on success; a negated errno value is returned on
* any failure.
*
****************************************************************************/
int imx9_set_clock_freq(int clock_id, uint32_t frequency)
{
scmi_clock_rate_t rate =
{
0, 0
};
rate.lower = frequency;
return imx9_scmi_set_clock_rate(SCMI_PLATFORM_A2P, clock_id,
SCMI_CLOCK_RATE_FLAGS_ROUND(
SCMI_CLOCK_ROUND_AUTO), rate);
}
#else
/****************************************************************************
* Name: imx9_get_rootclock
*
@ -562,3 +815,5 @@ int imx9_get_rootclock(int clkroot, uint32_t *frequency)
return -ENODEV;
}
#endif /* CONFIG_IMX9_CLK_OVER_SCMI */

View file

@ -31,10 +31,18 @@
#include <stdint.h>
#ifdef CONFIG_IMX9_CLK_OVER_SCMI
#include "hardware/imx95/imx95_clock.h"
#include "imx9_scmi.h"
#endif
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
#ifndef CONFIG_IMX9_CLK_OVER_SCMI
#define PLL_PARMS(_rdiv, _odiv, _mfi, _mfn, _mfd) \
{ \
.rdiv = (_rdiv), \
@ -146,7 +154,45 @@ void imx9_clockconfig(void);
****************************************************************************/
int imx9_get_clock(int clkname, uint32_t *frequency);
#else
/****************************************************************************
* Name: imx9_configure_clock
*
* Description:
* This function config and enable the clock
*
* Input Parameters:
* clk_config - The clock config
* enabled - If enable the clock
*
* Returned Value:
* Zero (OK) is returned on success; a negated errno value is returned on
* any failure.
*
****************************************************************************/
int imx9_configure_clock(clock_config_t clk_config, bool enabled);
/****************************************************************************
* Name: imx9_set_clock_freq
*
* Description:
* This function set the clock frequency of the specified clock.
*
* Input Parameters:
* clkid - Identifies the peripheral clock of interest
* frequency - The location where the peripheral clock frequency will be
* set
*
* Returned Value:
* Zero (OK) is returned on success; a negated errno value is returned on
* any failure.
*
****************************************************************************/
int imx9_set_clock_freq(int clock_id, uint32_t frequency);
#endif
/****************************************************************************
* Name: imx9_get_rootclock
*