zephyr/soc/arm/beetle/soc_pll.h

65 lines
1.6 KiB
C

/*
* Copyright (c) 2016 Linaro Limited.
*
* SPDX-License-Identifier: Apache-2.0
*/
/**
* @file SoC configuration macros for the ARM LTD Beetle SoC PLL.
*
*/
#ifndef _ARM_BEETLE_SOC_PLL_H_
#define _ARM_BEETLE_SOC_PLL_H_
/*
* This header provides the defines to configure the Beetle PLL.
*
* BEETLE PLL main register is the PLLCTRL in the System Control
*
* The PLLCTRL relevant bits are:
* - PLL_OUTPUTDIV [9:8]
* - PLL_INPUTDIV [20:16]
* - PLL_FEEDDIV [30:24]
*
* The formula to calculate the output frequency of the PLL is:
* Fout = Fin * PLL_FEEDDIV / (PLL_INPUTDIV * PLL_OUTPUTDIV)
* The Fin = 24Mhz on Beetle
*
* PLL_OUTPUTDIV | 0 1 2 3
* -----------------------
* | 1 2 4 8
*
* PLL_INPUTDIV = R[20:16] + 1
*
* PLL_FEEDDIV = 2*(R[30:24] + 1)
*
* BEETLE PLL has a non bypassable divider by 2 in output
*
* BEETLE PLL derived clock is prescaled [1-16]
*/
/* BEETLE PLL Masks */
#define PLL_MAINCLK_ENABLE_Msk 0x1
#define PLL_MAINCLK_DISABLE_Msk 0x1
#define PLL_MAINCLK_PRESCALER_Msk 0xF0
/* BEETLE PLL Configuration */
#define BEETLE_PLL_CONFIGURATION 0x17000200
/* BEETLE PLL Supported Frequencies */
/* BEETLE_PLL_48Mhz */
#define BEETLE_PLL_FREQUENCY_48MHZ 48000000
#define BEETLE_PLL_PRESCALER_48MHZ 0x21
/* BEETLE_PLL_36Mhz */
#define BEETLE_PLL_FREQUENCY_36MHZ 36000000
#define BEETLE_PLL_PRESCALER_36MHZ 0x31
/* BEETLE_PLL_24Mhz */
#define BEETLE_PLL_FREQUENCY_24MHZ 24000000
#define BEETLE_PLL_PRESCALER_24MHZ 0x51
/* BEETLE_PLL_12Mhz */
#define BEETLE_PLL_FREQUENCY_12MHZ 12000000
#define BEETLE_PLL_PRESCALER_12MHZ 0xB1
#endif /* _ARM_BEETLE_SOC_PLL_H_ */