diff options
Diffstat (limited to 'c/src/lib/libbsp/arm/altera-cyclone-v/hwlib/include/alt_clock_manager.h')
-rw-r--r-- | c/src/lib/libbsp/arm/altera-cyclone-v/hwlib/include/alt_clock_manager.h | 1434 |
1 files changed, 0 insertions, 1434 deletions
diff --git a/c/src/lib/libbsp/arm/altera-cyclone-v/hwlib/include/alt_clock_manager.h b/c/src/lib/libbsp/arm/altera-cyclone-v/hwlib/include/alt_clock_manager.h deleted file mode 100644 index d6d96544f7..0000000000 --- a/c/src/lib/libbsp/arm/altera-cyclone-v/hwlib/include/alt_clock_manager.h +++ /dev/null @@ -1,1434 +0,0 @@ -/*! \file - * Contains definitions for the Altera Hardware Libraries Clock Manager - * Application Programming Interface - */ - -/****************************************************************************** -* -* Copyright 2013 Altera Corporation. All Rights Reserved. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* -* 1. Redistributions of source code must retain the above copyright notice, -* this list of conditions and the following disclaimer. -* -* 2. Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following disclaimer in the documentation -* and/or other materials provided with the distribution. -* -* 3. The name of the author may not be used to endorse or promote products -* derived from this software without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER "AS IS" AND ANY EXPRESS OR -* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE DISCLAIMED. IN NO -* EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT -* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING -* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY -* OF SUCH DAMAGE. -* -******************************************************************************/ - -#ifndef __ALT_CLK_MGR_H__ -#define __ALT_CLK_MGR_H__ - -#include "hwlib.h" -#include "alt_clock_group.h" - -#ifdef __cplusplus -extern "C" -{ -#endif /* __cplusplus */ - -/*! \addtogroup CLK_MGR The Clock Manager API - * - * This module defines the Clock Manager API for accessing, configuring, and - * controlling the HPS clock resources. - * - * @{ - */ - -/******************************************************************************/ -/*! - * This type definition is an opaque type definition for clock frequency values - * in Hz. - */ -typedef uint32_t alt_freq_t; - -/******************************************************************************/ -/*! - * This type definition enumerates the names of the clock and PLL resources - * managed by the Clock Manager. - */ -typedef enum ALT_CLK_e -{ - /* Clock Input Pins */ - ALT_CLK_IN_PIN_OSC1, - /*!< \b OSC_CLK_1_HPS - * External oscillator input: - * * Input Pin - * * Clock source to Main PLL - * * Clock source to SDRAM PLL - * and Peripheral PLL if selected via - * register write - * * Clock source for clock in safe mode - */ - - ALT_CLK_IN_PIN_OSC2, - /*!< \b OSC_CLK_2_HPS - * External Oscillator input: - * * Input Pin - * * Optional clock source to SDRAM PLL - * and Peripheral PLL if selected - * * Typically used for Ethernet - * reference clock - */ - - - /* FPGA Clock Sources External to HPS */ - ALT_CLK_F2H_PERIPH_REF, - /*<! Alternate clock source from FPGA - * for HPS Peripheral PLL. */ - - ALT_CLK_F2H_SDRAM_REF, - /*<! Alternate clock source from FPGA - * for HPS SDRAM PLL. */ - - - /* Other Clock Sources External to HPS */ - ALT_CLK_IN_PIN_JTAG, - /*!< \b JTAG_TCK_HPS - * * Input Pin - * * External HPS JTAG clock input. - */ - - ALT_CLK_IN_PIN_ULPI0, - /*!< \b ULPI0_CLK - * ULPI Clock provided by external USB0 - * PHY - * * Input Pin - */ - - ALT_CLK_IN_PIN_ULPI1, - /*!< \b ULPI1_CLK - * ULPI Clock provided by external USB1 - * PHY - * * Input Pin - */ - - ALT_CLK_IN_PIN_EMAC0_RX, - /*!< \b EMAC0:RX_CLK - * Rx Reference Clock for EMAC0 - * * Input Pin - */ - - ALT_CLK_IN_PIN_EMAC1_RX, - /*!< \b EMAC1:RX_CLK - * Rx Reference Clock for EMAC1 - * * Input Pin - */ - - - /* PLLs */ - ALT_CLK_MAIN_PLL, - /*!< \b main_pll_ref_clkin - * Main PLL input reference clock, - * used to designate the Main PLL in - * PLL clock selections. - */ - - ALT_CLK_PERIPHERAL_PLL, - /*!< \b periph_pll_ref_clkin - * Peripheral PLL input reference - * clock, used to designate the - * Peripheral PLL in PLL clock - * selections. - */ - - ALT_CLK_SDRAM_PLL, - /*!< \b sdram_pll_ref_clkin - * SDRAM PLL input reference clock, - * used to designate the SDRAM PLL in - * PLL clock selections. - */ - - /* OSC1 Clock Group - The OSC1 clock group contains those clocks which are derived - * directly from the osc_clk_1_HPS pin */ - ALT_CLK_OSC1, - /*!< \b osc1_clk - * OSC1 Clock Group - The - * OSC1 clock group contains - * those clocks which are - * derived directly from the - * osc_clk_1_HPS pin. - * * alias for ALT_CLK_IN_PIN_OSC1 - */ - - /* Main Clock Group - The following clocks are derived from the Main PLL. */ - ALT_CLK_MAIN_PLL_C0, - /*!< \b Main PLL C0 Output */ - - ALT_CLK_MAIN_PLL_C1, - /*!< \b Main PLL C1 Output */ - - ALT_CLK_MAIN_PLL_C2, - /*!< \b Main PLL C2 Output */ - - ALT_CLK_MAIN_PLL_C3, - /*!< \b Main PLL C3 Output */ - - ALT_CLK_MAIN_PLL_C4, - /*!< \b Main PLL C4 Output */ - - ALT_CLK_MAIN_PLL_C5, - /*!< \b Main PLL C5 Output */ - - ALT_CLK_MPU, - /*!< \b mpu_clk - * Main PLL C0 Output. Clock for MPU - * subsystem, including CPU0 and CPU1. - * * Alias for \e ALT_CLK_MAIN_PLL_C0 - */ - - ALT_CLK_MPU_L2_RAM, - /*!< \b mpu_l2_ram_clk - * Clock for MPU level 2 (L2) RAM - */ - - ALT_CLK_MPU_PERIPH, - /*!< \b mpu_periph_clk - * Clock for MPU snoop control unit - * (SCU) peripherals, such as the - * general interrupt controller (GIC) - */ - - ALT_CLK_L3_MAIN, - /*!< \b main_clk - * Main PLL C1 Output - * * Alias for \e ALT_CLK_MAIN_PLL_C1 - */ - - ALT_CLK_L3_MP, - /*!< \b l3_mp_clk - * Clock for L3 Master Peripheral Switch - */ - - ALT_CLK_L3_SP, - /*!< \b l3_sp_clk - * Clock for L3 Slave Peripheral Switch - */ - - ALT_CLK_L4_MAIN, - /*!< \b l4_main_clk - * Clock for L4 main bus - * * Clock for DMA - * * Clock for SPI masters - */ - - ALT_CLK_L4_MP, - /*!< \b l4_mp_clk - * Clock for L4 master peripherals (MP) bus - */ - - ALT_CLK_L4_SP, - /*!< \b l4_sp_clk - * Clock for L4 slave peripherals (SP) bus - */ - - ALT_CLK_DBG_BASE, - /*!< \b dbg_base_clk - * Main PLL C2 Output - * * Alias for \e ALT_CLK_MAIN_PLL_C2 - */ - - ALT_CLK_DBG_AT, - /*!< \b dbg_at_clk - * Clock for CoreSight debug Advanced - * Microcontroller Bus Architecture - * (AMBA) Trace Bus (ATB) - */ - - ALT_CLK_DBG_TRACE, - /*!< \b dbg_trace_clk - * Clock for CoreSight debug Trace - * Port Interface Unit (TPIU) - */ - - ALT_CLK_DBG_TIMER, - /*!< \b dbg_timer_clk - * Clock for the trace timestamp - * generator - */ - - ALT_CLK_DBG, - /*!< \b dbg_clk - * Clock for Debug Access Port (DAP) - * and debug Advanced Peripheral Bus - * (APB) - */ - - ALT_CLK_MAIN_QSPI, - /*!< \b main_qspi_clk - * Main PLL C3 Output. Quad SPI flash - * internal logic clock. - * * Alias for \e ALT_CLK_MAIN_PLL_C3 - */ - - ALT_CLK_MAIN_NAND_SDMMC, - /*!< \b main_nand_sdmmc_clk - * Main PLL C4 Output. Input clock to - * flash controller clocks block. - * * Alias for \e ALT_CLK_MAIN_PLL_C4 - */ - - ALT_CLK_CFG, - /*!< \b cfg_clk - * FPGA manager configuration clock. - */ - - ALT_CLK_H2F_USER0, - /*!< \b h2f_user0_clock - * Clock to FPGA fabric - */ - - - /* Peripherals Clock Group - The following clocks are derived from the Peripheral PLL */ - ALT_CLK_PERIPHERAL_PLL_C0, - /*!< \b Peripheral PLL C0 Output */ - - ALT_CLK_PERIPHERAL_PLL_C1, - /*!< \b Peripheral PLL C1 Output */ - - ALT_CLK_PERIPHERAL_PLL_C2, - /*!< \b Peripheral PLL C2 Output */ - - ALT_CLK_PERIPHERAL_PLL_C3, - /*!< \b Peripheral PLL C3 Output */ - - ALT_CLK_PERIPHERAL_PLL_C4, - /*!< \b Peripheral PLL C4 Output */ - - ALT_CLK_PERIPHERAL_PLL_C5, - /*!< \b Peripheral PLL C5 Output */ - - ALT_CLK_USB_MP, - /*!< \b usb_mp_clk - * Clock for USB - */ - - ALT_CLK_SPI_M, - /*!< \b spi_m_clk - * Clock for L4 SPI master bus - */ - - ALT_CLK_QSPI, - /*!< \b qspi_clk - * Clock for Quad SPI - */ - - ALT_CLK_NAND_X, - /*!< \b nand_x_clk - * NAND flash controller master and - * slave clock - */ - - ALT_CLK_NAND, - /*!< \b nand_clk - * Main clock for NAND flash - * controller - */ - - ALT_CLK_SDMMC, - /*!< \b sdmmc_clk - * Clock for SD/MMC logic input clock - */ - - ALT_CLK_EMAC0, - /*!< \b emac0_clk - * EMAC 0 clock - Peripheral PLL C0 - * Output - * * Alias for \e ALT_CLK_PERIPHERAL_PLL_C0 - */ - - ALT_CLK_EMAC1, - /*!< \b emac1_clk - * EMAC 1 clock - Peripheral PLL C1 - * Output - * * Alias for \e ALT_CLK_PERIPHERAL_PLL_C1 - */ - - ALT_CLK_CAN0, - /*!< \b can0_clk - * Controller area network (CAN) - * controller 0 clock - */ - - ALT_CLK_CAN1, - /*!< \b can1_clk - * Controller area network (CAN) - * controller 1 clock - */ - - ALT_CLK_GPIO_DB, - /*!< \b gpio_db_clk - * Debounce clock for GPIO0, GPIO1, - * and GPIO2 - */ - - ALT_CLK_H2F_USER1, - /*!< \b h2f_user1_clock - * Clock to FPGA fabric - Peripheral - * PLL C5 Output - * * Alias for \e ALT_CLK_PERIPHERAL_PLL_C5 - */ - - - /* SDRAM Clock Group - The following clocks are derived from the SDRAM PLL */ - ALT_CLK_SDRAM_PLL_C0, - /*!< \b SDRAM PLL C0 Output */ - - ALT_CLK_SDRAM_PLL_C1, - /*!< \b SDRAM PLL C1 Output */ - - ALT_CLK_SDRAM_PLL_C2, - /*!< \b SDRAM PLL C2 Output */ - - ALT_CLK_SDRAM_PLL_C3, - /*!< \b SDRAM PLL C3 Output */ - - ALT_CLK_SDRAM_PLL_C4, - /*!< \b SDRAM PLL C4 Output */ - - ALT_CLK_SDRAM_PLL_C5, - /*!< \b SDRAM PLL C5 Output */ - - ALT_CLK_DDR_DQS, - /*!< \b ddr_dqs_clk - * Clock for MPFE, single-port - * controller, CSR access, and PHY - - * SDRAM PLL C0 Output - * * Alias for \e ALT_CLK_SDRAM_PLL_C0 - */ - - ALT_CLK_DDR_2X_DQS, - /*!< \b ddr_2x_dqs_clk - * Clock for PHY - SDRAM PLL C1 Output - * * Alias for \e ALT_CLK_SDRAM_PLL_C1 - */ - - ALT_CLK_DDR_DQ, - /*!< \b ddr_dq_clk - * Clock for PHY - SDRAM PLL C2 Output - * * Alias for \e ALT_CLK_SDRAM_PLL_C2 - */ - - ALT_CLK_H2F_USER2, - /*!< \b h2f_user2_clock - * Clock to FPGA fabric - SDRAM PLL C5 - * Output - * * Alias for \e ALT_CLK_SDRAM_PLL_C5 - */ - - /* Clock Output Pins */ - ALT_CLK_OUT_PIN_EMAC0_TX, - /*!< \b EMAC0:TX_CLK - * Tx Reference Clock for EMAC0 - * * Output Pin - */ - - ALT_CLK_OUT_PIN_EMAC1_TX, - /*!< \b EMAC1:TX_CLK - * Tx Reference Clock for EMAC1 - * * Output Pin - */ - - ALT_CLK_OUT_PIN_SDMMC, - /*!< \b SDMMC:CLK - * SD/MMC Card Clock - * * Output Pin - */ - - ALT_CLK_OUT_PIN_I2C0_SCL, - /*!< \b I2C0:SCL - * I2C Clock for I2C0 - * * Output Pin - */ - - ALT_CLK_OUT_PIN_I2C1_SCL, - /*!< \b I2C1:SCL - * I2C Clock for I2C1 - * * Output Pin - */ - - ALT_CLK_OUT_PIN_I2C2_SCL, - /*!< \b I2C2:SCL - * I2C Clock for I2C2/2 wire - * * Output Pin - */ - - ALT_CLK_OUT_PIN_I2C3_SCL, - /*!< \b I2C3:SCL - * I2C Clock for I2C1/2 wire - * * Output Pin - */ - - ALT_CLK_OUT_PIN_SPIM0, - /*!< \b SPIM0:CLK - * SPI Clock - * * Output Pin - */ - - ALT_CLK_OUT_PIN_SPIM1, - /*!< \b SPIM1:CLK - * SPI Clock - * * Output Pin - */ - - ALT_CLK_OUT_PIN_QSPI, - /*!< \b QSPI:CLK - * QSPI Flash Clock - * * Output Pin - */ - - ALT_CLK_UNKNOWN -} ALT_CLK_t; - -/******************************************************************************/ -/*! \addtogroup CLK_MGR_STATUS Clock Manager Status - * - * This functional group provides status information on various aspects and - * properties of the Clock Manager state. - * - * @{ - */ -/******************************************************************************/ -/*! - * This type definition defines the lock condition status codes for each of the - * PLLs. If the PLL lock status condition is enabled (See: alt_clk_irq_enable()) - * then it contributes to the overall \b clkmgr_IRQ signal assertion state. - */ -typedef enum ALT_CLK_PLL_LOCK_STATUS_e -{ - ALT_MAIN_PLL_LOCK_ACHV = 0x00000001, /*!< This condition is set if the Main - * PLL has achieved lock at least once - * since this condition was last - * cleared. - */ - ALT_PERIPH_PLL_LOCK_ACHV = 0x00000002, /*!< This condition is set if the Peripheral - * PLL has achieved lock at least once - * since this condition was last - * cleared. - */ - ALT_SDR_PLL_LOCK_ACHV = 0x00000004, /*!< This condition is set if the SDRAM - * PLL has achieved lock at least once - * since this condition was last - * cleared. - */ - ALT_MAIN_PLL_LOCK_LOST = 0x00000008, /*!< This condition is set if the Main - * PLL has lost lock at least once - * since this condition was last - * cleared. - */ - ALT_PERIPH_PLL_LOCK_LOST = 0x00000010, /*!< This condition is set if the Peripheral - * PLL has lost lock at least once - * since this condition was last - * cleared. - */ - ALT_SDR_PLL_LOCK_LOST = 0x00000020 /*!< This condition is set if the SDRAM - * PLL has lost lock at least once - * since this condition was last - * cleared. - */ -} ALT_CLK_PLL_LOCK_STATUS_t; - -/******************************************************************************/ -/*! - * Clear the selected PLL lock status conditions. - * - * This function clears assertions of one or more of the PLL lock status - * conditions. - * - * NOTE: This function is used to clear \b clkmgr_IRQ interrupt signal source - * assertion conditions. - * - * \param lock_stat_mask - * Specifies the PLL lock status conditions to clear. \e lock_stat_mask - * is a mask of logically OR'ed \ref ALT_CLK_PLL_LOCK_STATUS_t - * values designating the PLL lock conditions to clear. - * - * \retval ALT_E_SUCCESS Successful status. - * \retval ALT_E_BAD_ARG The \e lock_stat_mask argument contains an - * unknown condition value. - */ -ALT_STATUS_CODE alt_clk_lock_status_clear(ALT_CLK_PLL_LOCK_STATUS_t lock_stat_mask); - -/******************************************************************************/ -/*! - * Returns the PLL lock status condition values. - * - * This function returns the value of the PLL lock status conditions. - * - * \returns The current values of the PLL lock status conditions as defined by - * the \ref ALT_CLK_PLL_LOCK_STATUS_t mask bits. If the corresponding bit is set - * then the condition is asserted. - */ -uint32_t alt_clk_lock_status_get(void); - -/******************************************************************************/ -/*! - * Returns ALT_E_TRUE if the designated PLL is currently locked and ALT_E_FALSE - * otherwise. - * - * \param pll - * The PLL to return the lock status of. - * - * \retval ALT_E_TRUE The specified PLL is currently locked. - * \retval ALT_E_FALSE The specified PLL is currently not locked. - * \retval ALT_E_BAD_ARG The \e pll argument designates a non PLL clock - * value. - * \internal - * NOTE: This function uses the - * * \b hps::clkmgr::inter::mainplllocked - * * \b hps::clkmgr::inter::perplllocked, - * * \b hps::clkmgr::inter::sdrplllocked - * - * bits to determine if the PLL is locked or not. - * \endinternal - */ -ALT_STATUS_CODE alt_clk_pll_is_locked(ALT_CLK_t pll); - -/*! @} */ - -/******************************************************************************/ -/*! \addtogroup CLK_MGR_SAFE_MODE Safe Mode Options - * - * When safe mode is enabled, clocks in the HPS are directly generated from the - * \b osc1_clk clock. Safe mode is enabled by the assertion of a safe mode - * request from the reset manager or by a cold reset. Assertion of the safe mode - * request from the reset manager sets the safe mode bit in the clock manager - * control register. No other control register bits are affected by the safe - * mode request from the reset manager. - * - * While in safe mode, clock manager register settings which control clock - * behavior are not changed. However, the output of the registers which control - * the clock manager state are forced to the safe mode values such that the - * following conditions occur: - * * All PLLs are bypassed to the \b osc1_clk clock, including their counters. - * * Clock dividers select their default reset values. - * * The flash controllers source clock selections are set to the peripheral - * PLL. - * * All clocks are enabled. - * * Safe mode is optionally applied to debug clocks. - * - * A write by software is the only way to clear the safe mode bit. All registers - * and clocks need to be configured correctly and all software-managed clocks - * need to be gated off before clearing safe mode. Software can then gate clocks - * on as required. - * - * On cold reset, all clocks are put in safe mode. - * - * On warm reset, safe mode is optionally and independently applied to debug - * clocks and normal (i.e.non-debug) clocks based on clock manager register - * settings. The default response for warm reset is to put all clocks in safe - * mode. - * - * The APIs in this group provide control of the Clock Manager safe mode warm - * reset response behavior. - * @{ - */ - -/******************************************************************************/ -/*! - * This type definition enumerates the safe mode clock domains under control of - * the Clock Manager. - */ -typedef enum ALT_CLK_SAFE_DOMAIN_e -{ - /*! - * This enumeration literal specifies the normal safe mode domain. The - * normal domain consists of all clocks except debug clocks. - */ - ALT_CLK_DOMAIN_NORMAL, - /*! - * This enumeration literal specifies the debug safe mode domain. The debug - * domain consists of all debug clocks. - */ - ALT_CLK_DOMAIN_DEBUG -} ALT_CLK_SAFE_DOMAIN_t; - -/******************************************************************************/ -/*! - * Clear the safe mode status of the Clock Manager following a reset. - * - * NOTE: Safe mode should only be cleared once clocks have been correctly - * configured. - * - * \retval ALT_E_SUCCESS The operation was succesful. - * \retval ALT_E_ERROR The operation failed. - */ -ALT_STATUS_CODE alt_clk_safe_mode_clear(void); - -/******************************************************************************/ -/*! - * Return whether the specified safe mode clock domain is in safe mode or not. - * - * \param clk_domain - * The safe mode clock domain to check whether in safe mode or not. - * - * \retval TRUE The safe mode clock domain is in safe mode. - * \retval FALSE The safe mode clock domain is not in safe mode. - */ -bool alt_clk_is_in_safe_mode(ALT_CLK_SAFE_DOMAIN_t clk_domain); - -/*! @} */ - -/******************************************************************************/ -/*! \addtogroup CLK_MGR_BYPASS PLL Bypass Control - * - * When a PLL is in bypass, the PLL clock logic is kept in reset. In this - * manner, the PLL clock can be free running while it stabilizes and achieves - * lock. The bypass logic isolates PLL configuration registers from the clock - * while changes are made to the PLL settings. - * - * The bypass controls are used by software to change the source clock input - * reference (for Peripheral and SDRAM PLLs) and is recommended when changing - * settings that may affect the ability of the VCO to maintain lock. When a PLL - * is taken in or out of bypass the PLL output clocks will pause momentarily - * while the clocks are in transition, There will be no glitches or clocks - * shorter than the either the old or the new clock period. - * - * In summary, the PLL bypass controls permit: - * * Each PLL to be individually bypassed. - * * Bypass of all PLL clock outputs to \b osc1_clk or alternatively the PLLs - * reference clock input source reference clock selection. - * * Isolation of a the PLL VCO frequency registers (multiplier and divider), - phase shift registers (negative phase) , and post scale counters. - * * Glitch free clock transitions. - * @{ - */ -/******************************************************************************/ -/*! - * Disable bypass mode for the specified PLL. This operation takes the PLL out - * of bypass mode. - * - * \param pll - * The PLL to take out of bypass mode. - * - * \retval ALT_E_SUCCESS The operation was succesful. - * \retval ALT_E_ERROR The operation failed. - * \retval ALT_E_BAD_ARG The \e pll argument specified a non PLL clock - * value. - */ -ALT_STATUS_CODE alt_clk_pll_bypass_disable(ALT_CLK_t pll); - -/******************************************************************************/ -/*! - * Enable bypass mode for the specified PLL. - * - * \param pll - * The PLL to put into bypass mode. - * - * \param use_input_mux - * If TRUE then use the PLLs reference clock input source selection - * to directly drive the bypass clock. If FALSE then use bypass - * clock directly driven by the \b osc1_clk. - * - * \retval ALT_E_SUCCESS The operation was succesful. - * \retval ALT_E_ERROR The operation failed. - * \retval ALT_E_BAD_ARG The \e pll argument specified a non PLL - * clock value. - * \retval ALT_E_INV_OPTION TRUE is an invalid option for - * \e use_input_mux with the \e pll selection. - */ -ALT_STATUS_CODE alt_clk_pll_bypass_enable(ALT_CLK_t pll, - bool use_input_mux); - -/******************************************************************************/ -/*! - * Return whether the specified PLL is in bypass or not. - * - * \internal - * This function must also test the \b clkmgr.ctrl.safemode bit in - * addition to the PLLs bypass bit to tell whether the bypass mode is - * effect or not. - * \endinternal - * - * \param pll - * The PLL to check whether in bypass mode or not. - * - * \retval ALT_E_TRUE The PLL is in bypass mode. - * \retval ALT_E_FALSE The PLL is not in bypass mode. - * \retval ALT_E_BAD_ARG The \e pll argument designates a non PLL clock - * value. - */ -ALT_STATUS_CODE alt_clk_pll_is_bypassed(ALT_CLK_t pll); - -/*! @} */ - -/******************************************************************************/ -/*! \addtogroup CLK_MGR_GATE Clock Gating Control - * - * This functional group provides gating control of selected clock signals. - * - * When a clock is enabled, then its clock signal propogates to its respective - * clocked IP block(s). When a clock is disabled, then its clock signal is - * prevented from propogating to its respective clocked IP block(s). - * - * The following clocks may be gated: - * - * * Main PLL Group - * - l4_main_clk - * - l3_mp_clk - * - l4_mp_clk - * - l4_sp_clk - * - dbg_at_clk - * - dbg_clk - * - dbg_trace_clk - * - dbg_timer_clk - * - cfg_clk - * - s2f_user0_clk - * - * * SDRAM PLL Group - * - ddr_dqs_clk - * - ddr_2x_clk - * - ddr_dq_clk - * - s2f_user2_clk - * - * * Peripheral PLL Group - * - emac0_clk - * - emac1_clk - * - usb_mp_clk - * - spi_m_clk - * - can0_clk - * - can1_clk - * - gpio_db_clk - * - s2f_user1_clk - * - sdmmc_clk - * - nand_clk - * - nand_x_clk - * - qspi_clk - * - * @{ - */ -/******************************************************************************/ -/*! - * Disable the specified clock. Once the clock is disabled, its clock signal does - * not propogate to its clocked elements. - * - * \param clk - * The clock to disable. - * - * \retval ALT_E_SUCCESS The operation was succesful. - * \retval ALT_E_ERROR The operation failed. - * \retval ALT_E_BAD_ARG The \e clk argument designates a non gated clock - * value. - */ -ALT_STATUS_CODE alt_clk_clock_disable(ALT_CLK_t clk); - -/******************************************************************************/ -/*! - * Enable the specified clock. Once the clock is enabled, its clock signal - * propogates to its elements. - * - * \param clk - * The clock to enable. - * - * \retval ALT_E_SUCCESS The operation was succesful. - * \retval ALT_E_ERROR The operation failed. - * \retval ALT_E_BAD_ARG The \e clk argument designates a non gated clock - * value. - */ -ALT_STATUS_CODE alt_clk_clock_enable(ALT_CLK_t clk); - -/******************************************************************************/ -/*! - * Return whether the specified clock is enabled or not. - * - * \param clk - * The clock to check whether enabled or not. - * - * \retval ALT_E_TRUE The clock is enabled. - * \retval ALT_E_FALSE The clock is not enabled. - * \retval ALT_E_BAD_ARG The \e clk argument designates a non gated clock - * value. - */ -ALT_STATUS_CODE alt_clk_is_enabled(ALT_CLK_t clk); - -/*! @} */ - -/******************************************************************************/ -/*! \addtogroup CLK_MGR_CLK_SEL Clock Source Selection - * - * This API group provide access and control to the input reference clock source - * selection for a clock or PLL. - * - * \internal - * These are the clocks that have software configurable input reference clock - * source selection available. Each clock below is listed with its valid - * input reference clock source selections. - * - * + Valid reference clock input selections for \b sdram_pll_ref_clkin - * - osc_clk_1 - * - osc_clk_2 - * - f2h_sdram_ref_clk - * - * + Valid reference clock input selections for \b periph_pll_ref_clkin - * - osc_clk_1 - * - osc_clk_2, - * - f2h_periph_ref_clk - * - * + Valid reference clock input selections for \b l4_mp_clk - * - periph_base_clk - * - main_clk - * - * + Valid reference clock input selections for \b l4_sp_clk - * - periph_base_clk - * - main_clk - * - * + Valid reference clock input selections for \b sdmmc_clk - * - f2h_periph_ref_clk - * - main_nand_sdmmc_clk - * - periph_nand_sdmmc_clk - * - * + Valid reference clock input selections for \b nand_clk - * - f2h_periph_ref_clk - * - main_nand_sdmmc_clk - * - periph_nand_sdmmc_clk - * - * + Valid reference clock input selections for \b qspi_clk - * - f2h_periph_ref_clk - * - main_qspi_clk - * - periph_qspi_clk - * - * \endinternal - * @{ - */ -/******************************************************************************/ -/*! - * Get the input reference clock source selection value for the specified clock - * or PLL. - * - * NOTE: This function returns a clock value even though \e clk may specify a - * clock that does not have a selectable input reference clock source. In - * this case, the clock value returned is the static clock source for the - * specified clock. For example calling alt_clk_source_get() with \e clk - * set to \ref ALT_CLK_MAIN_PLL will return \ref ALT_CLK_OSC1. - * - * \param clk - * The clock or PLL to retrieve the input reference clock source - * selection value for. - * - * \returns The clock's currently selected input reference clock source. - */ -ALT_CLK_t alt_clk_source_get(ALT_CLK_t clk); - -/******************************************************************************/ -/*! - * Set the specified clock's input reference clock source selection. - * - * \param clk - * The clock or PLL to set the input reference clock source - * selection for. - * - * \param ref_clk - * The input reference clock source selection value. - * - * \retval ALT_E_SUCCESS The operation was succesful. - * \retval ALT_E_ERROR The operation failed. - * \retval ALT_E_BAD_ARG The \e clk argument designates a clock that - * does not have a selectable input reference - * clock source. - * \retval ALT_E_INV_OPTION The \e ref_clk argument designates a clock that - * is an invalid reference clock source for the - * specified clock. - */ -ALT_STATUS_CODE alt_clk_source_set(ALT_CLK_t clk, - ALT_CLK_t ref_clk); - -/*! @} */ - -/******************************************************************************/ -/*! \addtogroup CLK_MGR_FREQ Clock Frequency Control - * - * This API group provides access and control of the output frequency of a clock - * or PLL. - * - * @{ - */ - -/******************************************************************************/ -/*! - * Set the external clock frequency value. - * - * The function is used to specify the frequency of the external clock source as - * a measure of Hz. The supplied frequency should be within the Fmin and Fmax - * values allowed for the external clock source. - * - * \param clk - * The external clock source. Valid external clocks are - * * \e ALT_CLK_OSC1 - * * \e ALT_CLK_OSC2 - * * \e ALT_CLK_F2H_PERIPH_REF - * * \e ALT_CLK_F2H_SDRAM_REF - * - * \param freq - * The frequency of the external clock in Hz. - * - * \retval ALT_E_SUCCESS The operation was succesful. - * \retval ALT_E_ERROR The operation failed. - * \retval ALT_E_BAD_ARG A bad argument value was passed. Either the \e clk - * argument is bad or not a valid external clock - * source - * \retval ALT_E_ARG_RANGE The frequency value violates the range constraints - * for the specified clock. - - */ -ALT_STATUS_CODE alt_clk_ext_clk_freq_set(ALT_CLK_t clk, - alt_freq_t freq); - -/******************************************************************************/ -/*! - * Get the external clock frequency value. - * - * This function returns the frequency of the external clock source as - * a measure of Hz. - * - * \param clk - * The external clock source. Valid external clocks are - * * \e ALT_CLK_OSC1 - * * \e ALT_CLK_OSC2 - * * \e ALT_CLK_F2H_PERIPH_REF - * * \e ALT_CLK_F2H_SDRAM_REF - * - * \retval freq - * The frequency of the external clock in Hz. - * - */ -alt_freq_t alt_clk_ext_clk_freq_get(ALT_CLK_t clk); - -/******************************************************************************/ -/*! - * This type definition defines a structure to contain the generalized - * configuration settings for a PLL. - */ -typedef struct ALT_CLK_PLL_CFG_s -{ - ALT_CLK_t ref_clk; /*!< PLL Reference Clock Source */ - uint32_t mult; /*!< VCO Frequency Configuration - - * Multiplier (M) value, range 1 to 4096 - */ - uint32_t div; /*!< VCO Frequency Configuration - - * Divider (N) value, range 1 to 64 - */ - uint32_t cntrs[6]; /*!< Post-Scale Counters (C0 - C5) - - * range 1 to 512 - */ - uint32_t pshift[6]; /*!< Phase Shift - 1/8 (45 degrees) of - * negative phase shift per increment, - * range 0 to 4096 - */ -} ALT_CLK_PLL_CFG_t; - -/******************************************************************************/ -/*! - * Get the current PLL configuration. - * - * \param pll - * The PLL to get the configuration from. - * - * \param pll_cfg - * [out] Pointer to an output parameter variable for the returned - * PLL configuration. - * - * \retval ALT_E_SUCCESS The operation was succesful. - * \retval ALT_E_ERROR The operation failed. - */ -ALT_STATUS_CODE alt_clk_pll_cfg_get(ALT_CLK_t pll, - ALT_CLK_PLL_CFG_t* pll_cfg); - -/******************************************************************************/ -/*! - * Set the PLL configuration using the configuration parameters specified in - * \e pll_cfg. - * - * \param pll - * The PLL to set the configuration for. - * - * \param pll_cfg - * Pointer to a ALT_CLK_PLL_CFG_t structure specifying the desired - * PLL configuration. - * - * \retval ALT_E_SUCCESS The operation was succesful. - * \retval ALT_E_ERROR The operation failed. - */ -ALT_STATUS_CODE alt_clk_pll_cfg_set(ALT_CLK_t pll, - const ALT_CLK_PLL_CFG_t* pll_cfg); - -/******************************************************************************/ -/*! - * Get the current PLL VCO frequency configuration. - * - * \param pll - * The PLL to get the VCO frequency configuration for. - * - * \param mult - * [out] Pointer to an output variable for the returned - * configured PLL VCO multiplier (M) value. - * - * \param div - * [out] Pointer to an output variable for the returned - * configured PLL VCO divider (N) value. - * - * \retval ALT_E_SUCCESS The operation was succesful. - * \retval ALT_E_ERROR The operation failed. - */ -ALT_STATUS_CODE alt_clk_pll_vco_cfg_get(ALT_CLK_t pll, - uint32_t* mult, - uint32_t* div); - -/******************************************************************************/ -/*! - * Set the PLL VCO frequency configuration using the supplied multiplier and - * divider arguments. - * - * \param pll - * The PLL to set the VCO frequency configuration for. - * - * \param mult - * The PLL VCO multiplier (M). Expected argument range 1 to 4096. - * - * \param div - * The PLL VCO divider (N). Expected argument range 1 to 64. - * - * \retval ALT_E_SUCCESS The operation was succesful. - * \retval ALT_E_ERROR The operation failed. - */ -ALT_STATUS_CODE alt_clk_pll_vco_cfg_set(ALT_CLK_t pll, - uint32_t mult, - uint32_t div); - -/******************************************************************************/ -/*! - * Get the VCO frequency of the specified PLL. - * - * \param pll - * The PLL to retrieve the VCO frequency from. - * - * \param freq - * [out] Pointer to the an output parameter variable to return the - * PLL VCO frequency value. The frequency value is returned as a - * measures of Hz. - * - * \retval ALT_E_SUCCESS The operation was succesful. - * \retval ALT_E_ERROR The operation failed. - * \retval ALT_E_BAD_ARG A bad argument value was passed. Either - * the \e pll argument is invalid or a bad - * \e freq pointer value was passed. - */ -ALT_STATUS_CODE alt_clk_pll_vco_freq_get(ALT_CLK_t pll, - alt_freq_t* freq); - -/******************************************************************************/ -/*! - * Get the PLL frequency guard band value. - * - * \param pll - * The PLL from which to return the current guard band value. - * - * \returns The current guard band range in effect for the PLL. - */ -uint32_t alt_clk_pll_guard_band_get(ALT_CLK_t pll); - -/******************************************************************************/ -/*! - * Set the PLL frequency guard band value. - * - * Once a PLL has achieved lock, any changes to the PLL VCO frequency that are - * within a specific guard band range (default value 20%) of the reference - * period should not cause the PLL to lose lock. - * - * Programmatic changes to the PLL frequency within this guard band range are - * permitted to be made without the risk of breaking lock during the transition - * to the new frequency. - * - * The clk_mgr_pll_guard_band_set() function changes the guard band from its - * current value to permit a more lenient or stringent policy to be in effect in - * the implementation of the functions configuring PLL VCO frequency. The - * rationale for changing the default guard band value might be to accommodate - * unexpected environmental conditions (noise, temperature, and other - * instability factors) that may affect the PLLs ability to maintain lock during - * a frequency change. - * - * \param pll - * The PLL to set the guard band value for. - * - * \param guard_band - * The guard band value. Value should be 0 <= \e guard_band <= 100. - * - * \retval ALT_E_SUCCESS The operation was succesful. - * \retval ALT_E_ERROR The operation failed. - * \retval ALT_E_ARG_RANGE The guard band value violates its range constraint. - */ -ALT_STATUS_CODE alt_clk_pll_guard_band_set(ALT_CLK_t pll, - uint32_t guard_band); - -/******************************************************************************/ -/*! - * Get the configured divider value for the specified clock. - * - * This function is used to get the configured values of both internal and - * external clock dividers. The internal divider (PLL counters C0-C5) values - * are retrieved by specifying the clock name that is the divider output - * (e.g. ALT_CLK_MPU is used to get the Main PLL C0 counter value). \n - * It returns the actual divider value, not the encoded bitfield stored - * in the register, due to the variety of different encodings. - * - * \param clk - * The clock divider to get the value from. - * - * \param div - * [out] Pointer to an output variable for the returned clock - * divider value. - * - * \retval ALT_E_SUCCESS The operation was succesful. - * \retval ALT_E_ERROR The operation failed. - * \retval ALT_E_BAD_ARG An invalid clock argument was specified or a - * clock that does not have a divider. - */ -ALT_STATUS_CODE alt_clk_divider_get(ALT_CLK_t clk, - uint32_t* div); - -/******************************************************************************/ -/*! - * Set the divider value for the specified clock. - * - * This function is used to set the values of both internal and external clock - * dividers. The internal divider (PLL counters C0-C5) values are set by - * specifying the clock name that is the divider output (e.g. ALT_CLK_MPU is - * used to set the Main PLL C0 counter value). - * - * \param clk - * The clock divider to set the value for. - * - * \param div - * The clock divider value. NOTE: The valid range of clock divider - * values depends on the clock being configured. This is the - * real divisor ratio, not how the divisor is coded into the - * register, and is always one or greater. - * - * \retval ALT_E_SUCCESS The operation was succesful. - * \retval ALT_E_ERROR The operation failed. - * \retval ALT_E_BAD_ARG An invalid clock argument was specified or a - * clock that does not have a divider. - * \retval ALT_E_ARG_RANGE The divider value violates the range constraints - * for the clock divider. - */ -ALT_STATUS_CODE alt_clk_divider_set(ALT_CLK_t clk, - uint32_t div); - -/******************************************************************************/ -/*! - * Get the output frequency of the specified clock. - * - * \param clk - * The clock to retrieve the output frequency from. - * - * \param freq - * [out] Pointer to the an output parameter variable to return the - * clock output frequency value. The frequency value is returned as - * a measures of Hz. - * - * \retval ALT_E_SUCCESS The operation was succesful. - * \retval ALT_E_ERROR The operation failed. - * \retval ALT_E_BAD_ARG A bad argument value was passed. Either - * the \e clk argument is invalid or a bad - * \e freq pointer value was passed. - */ -ALT_STATUS_CODE alt_clk_freq_get(ALT_CLK_t clk, - alt_freq_t* freq); - -/*! @} */ - -/******************************************************************************/ -/*! \addtogroup CLK_MGR_INT Clock Manager Interrupt Management - * - * The functions in this group provide management of interrupts originating from - * the Clock Manager. - * - * The following interrupt request (IRQ) signals are sourced from the Clock - * Manager: - * - * * \b clkmgr_IRQ - Clock Manager lock status interrupt output. The PLL lock - * status interrupt is the logical \e OR of six interrupt - * sources defining the loss or achievement of lock status for - * each PLL. The six PLL lock status conditions are: - * - Main PLL Achieved Lock - * - Main PLL Lost Lock - * - Peripheral PLL Achieved Lock - * - Peripheral PLL Lost Lock - * - SDRAM PLL Achieved Lock - * - SDRAM PLL Lost Lock - * - * They are enumeratated by the type \ref ALT_CLK_PLL_LOCK_STATUS_t. - * - * Each PLL lock condition may be individually disabled/enabled - * as a contributor to the determination of the \b clkmgr_IRQ - * assertion status. - * - * The alt_clk_lock_status_clear() function is used to clear - * the PLL lock conditions causing the \b clkmgr_IRQ - * assertion. - * - * * \b mpuwakeup_IRQ - MPU wakeup interrupt output. This interrupt notifies the - * MPU to "wake up" after a transition of the Main PLL into - * or out of bypass mode has been safely achieved. The need - * for the "wake up" notification is because the PLL clocks - * pause for a short number of clock cycles during bypass - * state transition. ARM recommeds that the CPUs are placed - * in standby if the clocks are ever paused. - * - * NOTE: \b mpuwakeup_IRQ appears to be an Altera private interrupt and may not - * be part of the public API although clearly it has important utility in - * implementing safe changes to PLL settings and transitions into and out - * of bypass mode. - * @{ - */ - -/******************************************************************************/ -/*! - * Disable the \b clkmgr_IRQ interrupt signal source lock status condition(s). - * - * This function disables one or more of the lock status conditions as - * contributors to the \b clkmgr_IRQ interrupt signal state. - * - * NOTE: A set bit for a PLL lock status condition in the mask value does not - * have the effect of enabling it as a contributor to the \b clkmgr_IRQ - * interrupt signal state. The function alt_clk_irq_enable is used to enable PLL - * lock status source condition(s). - * - * \param lock_stat_mask - * Specifies the PLL lock status conditions to disable as interrupt - * source contributors. \e lock_stat_mask is a mask of logically - * OR'ed ALT_CLK_PLL_LOCK_STATUS_t values that designate the PLL lock - * conditions to disable. - * - * \retval ALT_E_SUCCESS Successful status. - * \retval ALT_E_BAD_ARG The \e lock_stat_mask argument contains an - * unknown condition value. - */ -ALT_STATUS_CODE alt_clk_irq_disable(ALT_CLK_PLL_LOCK_STATUS_t lock_stat_mask); - -/******************************************************************************/ -/*! - * Enable the \b clkmgr_IRQ interrupt signal source lock status condition(s). - * - * This function enables one or more of the lock status conditions as - * contributors to the \b clkmgr_IRQ interrupt signal state. - * - * NOTE: A cleared bit for any PLL lock status condition in the mask value does - * not have the effect of disabling it as a contributor to the \b clkmgr_IRQ - * interrupt signal state. The function alt_clk_irq_disable is used to disable - * PLL lock status source condition(s). - * - * \param lock_stat_mask - * Specifies the PLL lock status conditions to enable as interrupt - * source contributors. \e lock_stat_mask is a mask of logically - * OR'ed ALT_CLK_PLL_LOCK_STATUS_t values that designate the PLL lock - * conditions to enable. - * - * \retval ALT_E_SUCCESS Successful status. - * \retval ALT_E_BAD_ARG The \e lock_stat_mask argument contains an - * unknown condition value. - */ -ALT_STATUS_CODE alt_clk_irq_enable(ALT_CLK_PLL_LOCK_STATUS_t lock_stat_mask); - -/*! @} */ - -/******************************************************************************/ -/*! \addtogroup CLK_MGR_GROUP_CFG Clock Group Configuration - * - * This API provides the ability to safely set the configuration of a clock - * group with a single function call. - * - * A clock group is defined as set of clocks and signals generated from a common - * PLL VCO. The PLL and its derived clocks are treated as a single clock - * group. The clocks sourced directly or indirectly from the PLL may or may not - * have these features: - * * Clock Gates - * * Clock Dividers - * * Clock Source Selection Options - * - * The use case for application of the Clock Group Configuration functions is the - * ability to safely configure an entire clock group from a known good clock - * group configuration using the run-time function alt_clk_group_cfg_raw_set(). - * - * A known good clock group configuration may be generated by one of the - * following methods: - * - * * As static design information generated by an ACDS clock configuration tool - * and passed to embedded software for dynamic loading. - * - * * By calling alt_clk_group_cfg_raw_get() at run-time from an SoC FPGA that has - * programmatically established a known good clock group configuration using - * the clock manager API configuration functions. - * - * @{ - */ - -/******************************************************************************/ -/*! - * Get the raw configuration state of the designated clock group. - * - * This function is used to capture the configuration state of the specified - * clock group in a private (raw) data structure. The raw data structure may be - * saved and used later to restore the clock group configuration using - * alt_clk_group_cfg_raw_get(). - * - * \param clk_group - * The clock group configuration to capture. - * - * \param clk_group_raw_cfg - * [out] A pointer to a private (raw) data structure to store the - * captured clock group configuration. - * - * \retval ALT_E_SUCCESS Successful status. - * \retval ALT_E_ERROR Details about error status code - */ -ALT_STATUS_CODE alt_clk_group_cfg_raw_get(ALT_CLK_GRP_t clk_group, - ALT_CLK_GROUP_RAW_CFG_t* clk_group_raw_cfg); - -/******************************************************************************/ -/*! - * Set the clock group configuration. - * - * This function is used to safely set the configuration state of a clock - * group from a raw clock group configuration specification. The raw clock - * group configuration specification may be a configuration previously - * captured with alt_clk_group_cfg_raw_get() or a group clock configuration - * generated by an external utility. - * - * \param clk_group_raw_cfg - * A pointer to the specification to use in the configuration of - * the clock group. - * - * \retval ALT_E_SUCCESS Successful status. - * \retval ALT_E_ERROR Details about error status code - * \retval ALT_E_BAD_VERSION The clock group configuration specification is - * invalid for this device. - */ -ALT_STATUS_CODE alt_clk_group_cfg_raw_set(const ALT_CLK_GROUP_RAW_CFG_t* clk_group_raw_cfg); - -ALT_STATUS_CODE alt_clk_clkmgr_init(void); - -/*! @} */ - -/*! @} */ -#ifdef __cplusplus -} - -#endif /* __cplusplus */ -#endif /* __ALT_CLK_MGR_H__ */ |