b07780d13d
Nxstyle fixes to pass CI Signed-off-by: Alin Jerpelea <alin.jerpelea@sony.com>
616 lines
20 KiB
C
616 lines
20 KiB
C
/****************************************************************************
|
|
* arch/arm/src/am335x/am335x_clockconfig.c
|
|
*
|
|
* 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.
|
|
*
|
|
****************************************************************************/
|
|
|
|
/****************************************************************************
|
|
* Included Files
|
|
****************************************************************************/
|
|
|
|
#include <nuttx/config.h>
|
|
|
|
#include "arm_arch.h"
|
|
#include "hardware/am335x_prcm.h"
|
|
#include "am335x_config.h"
|
|
#include "am335x_clockconfig.h"
|
|
|
|
/****************************************************************************
|
|
* Private Functions
|
|
****************************************************************************/
|
|
|
|
/****************************************************************************
|
|
* Name: am335x_power_domain_transition_enable
|
|
****************************************************************************/
|
|
|
|
static void am335x_interface_clocks_enable(void)
|
|
{
|
|
/* Enable all the Interconnect Modules */
|
|
|
|
putreg32(CM_CLKCTRL_MODULEMODE_ENABLE, AM335X_CM_PER_L3_CLKCTRL);
|
|
while ((getreg32(AM335X_CM_PER_L3_CLKCTRL) &
|
|
(CM_CLKCTRL_MODULEMODE_MASK | CM_CLKCTRL_IDLEST_MASK))
|
|
!= (CM_CLKCTRL_MODULEMODE_ENABLE | CM_CLKCTRL_IDLEST_FUNC))
|
|
{
|
|
}
|
|
|
|
putreg32(CM_CLKCTRL_MODULEMODE_ENABLE, AM335X_CM_PER_L4LS_CLKCTRL);
|
|
while ((getreg32(AM335X_CM_PER_L4LS_CLKCTRL) &
|
|
(CM_CLKCTRL_MODULEMODE_MASK | CM_CLKCTRL_IDLEST_MASK))
|
|
!= (CM_CLKCTRL_MODULEMODE_ENABLE | CM_CLKCTRL_IDLEST_FUNC))
|
|
{
|
|
}
|
|
|
|
putreg32(CM_CLKCTRL_MODULEMODE_ENABLE, AM335X_CM_PER_L4FW_CLKCTRL);
|
|
while ((getreg32(AM335X_CM_PER_L4FW_CLKCTRL) &
|
|
(CM_CLKCTRL_MODULEMODE_MASK | CM_CLKCTRL_IDLEST_MASK))
|
|
!= (CM_CLKCTRL_MODULEMODE_ENABLE | CM_CLKCTRL_IDLEST_FUNC))
|
|
{
|
|
}
|
|
|
|
putreg32(CM_CLKCTRL_MODULEMODE_ENABLE, AM335X_CM_WKUP_L4WKUP_CLKCTRL);
|
|
while ((getreg32(AM335X_CM_WKUP_L4WKUP_CLKCTRL) &
|
|
(CM_CLKCTRL_MODULEMODE_MASK | CM_CLKCTRL_IDLEST_MASK))
|
|
!= (CM_CLKCTRL_MODULEMODE_ENABLE | CM_CLKCTRL_IDLEST_FUNC))
|
|
{
|
|
}
|
|
|
|
putreg32(CM_CLKCTRL_MODULEMODE_ENABLE, AM335X_CM_PER_L3_INSTR_CLKCTRL);
|
|
while ((getreg32(AM335X_CM_PER_L3_INSTR_CLKCTRL) &
|
|
(CM_CLKCTRL_MODULEMODE_MASK | CM_CLKCTRL_IDLEST_MASK))
|
|
!= (CM_CLKCTRL_MODULEMODE_ENABLE | CM_CLKCTRL_IDLEST_FUNC))
|
|
{
|
|
}
|
|
|
|
putreg32(CM_CLKCTRL_MODULEMODE_ENABLE, AM335X_CM_PER_L4HS_CLKCTRL);
|
|
while ((getreg32(AM335X_CM_PER_L4HS_CLKCTRL) &
|
|
(CM_CLKCTRL_MODULEMODE_MASK | CM_CLKCTRL_IDLEST_MASK))
|
|
!= (CM_CLKCTRL_MODULEMODE_ENABLE | CM_CLKCTRL_IDLEST_FUNC))
|
|
{
|
|
}
|
|
|
|
putreg32(CM_CLKCTRL_MODULEMODE_ENABLE, AM335X_CM_PER_OCPWP_CLKCTRL);
|
|
while ((getreg32(AM335X_CM_PER_OCPWP_CLKCTRL) &
|
|
(CM_CLKCTRL_MODULEMODE_MASK | CM_CLKCTRL_IDLEST_MASK))
|
|
!= (CM_CLKCTRL_MODULEMODE_ENABLE | CM_CLKCTRL_IDLEST_FUNC))
|
|
{
|
|
}
|
|
}
|
|
|
|
/****************************************************************************
|
|
* Name: am335x_power_domain_transition_enable
|
|
****************************************************************************/
|
|
|
|
static void am335x_power_domain_transition_enable(void)
|
|
{
|
|
putreg32(CM_CLKSTCTRL_CLKTRCTRL_SW_WKUP, AM335X_CM_PER_L3_CLKSTCTRL);
|
|
|
|
putreg32(CM_CLKSTCTRL_CLKTRCTRL_SW_WKUP, AM335X_CM_PER_L4LS_CLKSTCTRL);
|
|
|
|
putreg32(CM_CLKSTCTRL_CLKTRCTRL_SW_WKUP, AM335X_CM_WKUP_CLKSTCTRL);
|
|
|
|
putreg32(CM_CLKSTCTRL_CLKTRCTRL_SW_WKUP, AM335X_CM_PER_L4FW_CLKSTCTRL);
|
|
|
|
putreg32(CM_CLKSTCTRL_CLKTRCTRL_SW_WKUP, AM335X_CM_PER_L3S_CLKSTCTRL);
|
|
|
|
putreg32(CM_CLKSTCTRL_CLKTRCTRL_SW_WKUP, AM335X_CM_PER_OCPWP_L3_CLKSTCTRL);
|
|
|
|
#if defined(CONFIG_AM335X_LCDC)
|
|
putreg32(CM_CLKSTCTRL_CLKTRCTRL_SW_WKUP, AM335X_CM_PER_LCDC_CLKSTCTRL);
|
|
#endif
|
|
|
|
#if defined(CONFIG_AM335X_CPSW)
|
|
putreg32(CM_CLKSTCTRL_CLKTRCTRL_SW_WKUP, AM335X_CM_PER_CPSW_CLKSTCTRL);
|
|
#endif
|
|
}
|
|
|
|
/****************************************************************************
|
|
* Name: am335x_peripheral_enable
|
|
****************************************************************************/
|
|
|
|
static void am335x_peripheral_enable(void)
|
|
{
|
|
uint32_t wkup = CM_WKUP_CLKSTCTRL_L4_WKUP_GCLK;
|
|
uint32_t per_ocpwp_l3 = CM_PER_OCPWP_L3_CLKSTCTRL_OCPWP_L3_GCLK;
|
|
uint32_t per_l3 = CM_PER_L3_CLKSTCTRL_L3_GCLK;
|
|
uint32_t per_l3s = CM_PER_L3S_CLKSTCTRL_L3S_GCLK;
|
|
uint32_t per_l4ls = CM_PER_L4LS_CLKSTCTRL_L4LS_GCLK;
|
|
uint32_t per_lcdc = 0;
|
|
uint32_t per_cpsw = 0;
|
|
|
|
putreg32(CM_CLKCTRL_MODULEMODE_ENABLE, AM335X_CM_WKUP_GPIO0_CLKCTRL);
|
|
while ((getreg32(AM335X_CM_WKUP_GPIO0_CLKCTRL) &
|
|
(CM_CLKCTRL_MODULEMODE_MASK | CM_CLKCTRL_IDLEST_MASK))
|
|
!= (CM_CLKCTRL_MODULEMODE_ENABLE | CM_CLKCTRL_IDLEST_FUNC))
|
|
{
|
|
}
|
|
|
|
putreg32(CM_CLKCTRL_MODULEMODE_ENABLE, AM335X_CM_WKUP_TIMER1_CLKCTRL);
|
|
while ((getreg32(AM335X_CM_WKUP_TIMER1_CLKCTRL) &
|
|
(CM_CLKCTRL_MODULEMODE_MASK | CM_CLKCTRL_IDLEST_MASK))
|
|
!= (CM_CLKCTRL_MODULEMODE_ENABLE | CM_CLKCTRL_IDLEST_FUNC))
|
|
{
|
|
}
|
|
|
|
wkup |= CM_WKUP_CLKSTCTRL_TIMER1_GCLK;
|
|
|
|
putreg32(CM_CLKCTRL_MODULEMODE_ENABLE, AM335X_CM_WKUP_WDT1_CLKCTRL);
|
|
while ((getreg32(AM335X_CM_WKUP_WDT1_CLKCTRL) &
|
|
(CM_CLKCTRL_MODULEMODE_MASK | CM_CLKCTRL_IDLEST_MASK))
|
|
!= (CM_CLKCTRL_MODULEMODE_ENABLE | CM_CLKCTRL_IDLEST_FUNC))
|
|
{
|
|
}
|
|
|
|
wkup |= CM_WKUP_CLKSTCTRL_WDT1_GCLK;
|
|
|
|
#ifdef CONFIG_AM335X_TIMER0
|
|
putreg32(CM_CLKCTRL_MODULEMODE_ENABLE, AM335X_CM_WKUP_TIMER0_CLKCTRL);
|
|
while ((getreg32(AM335X_CM_WKUP_TIMER0_CLKCTRL) &
|
|
(CM_CLKCTRL_MODULEMODE_MASK | CM_CLKCTRL_IDLEST_MASK))
|
|
!= (CM_CLKCTRL_MODULEMODE_ENABLE | CM_CLKCTRL_IDLEST_FUNC))
|
|
{
|
|
}
|
|
|
|
wkup |= CM_WKUP_CLKSTCTRL_TIMER0_GCLK;
|
|
#endif
|
|
|
|
#ifdef CONFIG_AM335X_UART0
|
|
putreg32(CM_CLKCTRL_MODULEMODE_ENABLE, AM335X_CM_WKUP_UART0_CLKCTRL);
|
|
while ((getreg32(AM335X_CM_WKUP_UART0_CLKCTRL) &
|
|
(CM_CLKCTRL_MODULEMODE_MASK | CM_CLKCTRL_IDLEST_MASK))
|
|
!= (CM_CLKCTRL_MODULEMODE_ENABLE | CM_CLKCTRL_IDLEST_FUNC))
|
|
{
|
|
}
|
|
|
|
wkup |= CM_WKUP_CLKSTCTRL_UART0_GFCLK;
|
|
#endif
|
|
|
|
#ifdef CONFIG_AM335X_I2C0
|
|
putreg32(CM_CLKCTRL_MODULEMODE_ENABLE, AM335X_CM_WKUP_I2C0_CLKCTRL);
|
|
while ((getreg32(AM335X_CM_WKUP_I2C0_CLKCTRL) &
|
|
(CM_CLKCTRL_MODULEMODE_MASK | CM_CLKCTRL_IDLEST_MASK))
|
|
!= (CM_CLKCTRL_MODULEMODE_ENABLE | CM_CLKCTRL_IDLEST_FUNC))
|
|
{
|
|
}
|
|
|
|
wkup |= CM_WKUP_CLKSTCTRL_I2C0_GFCLK;
|
|
#endif
|
|
|
|
#ifdef CONFIG_AM335X_TSC
|
|
putreg32(CM_CLKCTRL_MODULEMODE_ENABLE, AM335X_CM_WKUP_ADC_TSC_CLKCTRL);
|
|
while ((getreg32(AM335X_CM_WKUP_ADC_TSC_CLKCTRL) &
|
|
(CM_CLKCTRL_MODULEMODE_MASK | CM_CLKCTRL_IDLEST_MASK))
|
|
!= (CM_CLKCTRL_MODULEMODE_ENABLE | CM_CLKCTRL_IDLEST_FUNC))
|
|
{
|
|
}
|
|
|
|
wkup |= CM_WKUP_CLKSTCTRL_ADC_FCLK;
|
|
#endif
|
|
|
|
putreg32(CM_CLKCTRL_MODULEMODE_ENABLE, AM335X_CM_PER_GPMC_CLKCTRL);
|
|
while ((getreg32(AM335X_CM_PER_GPMC_CLKCTRL) &
|
|
(CM_CLKCTRL_MODULEMODE_MASK | CM_CLKCTRL_IDLEST_MASK))
|
|
!= (CM_CLKCTRL_MODULEMODE_ENABLE | CM_CLKCTRL_IDLEST_FUNC))
|
|
{
|
|
}
|
|
|
|
putreg32(CM_CLKCTRL_MODULEMODE_ENABLE, AM335X_CM_PER_ELM_CLKCTRL);
|
|
while ((getreg32(AM335X_CM_PER_ELM_CLKCTRL) &
|
|
(CM_CLKCTRL_MODULEMODE_MASK | CM_CLKCTRL_IDLEST_MASK))
|
|
!= (CM_CLKCTRL_MODULEMODE_ENABLE | CM_CLKCTRL_IDLEST_FUNC))
|
|
{
|
|
}
|
|
|
|
putreg32(CM_CLKCTRL_MODULEMODE_ENABLE, AM335X_CM_PER_GPIO1_CLKCTRL);
|
|
while ((getreg32(AM335X_CM_PER_GPIO1_CLKCTRL) &
|
|
(CM_CLKCTRL_MODULEMODE_MASK | CM_CLKCTRL_IDLEST_MASK))
|
|
!= (CM_CLKCTRL_MODULEMODE_ENABLE | CM_CLKCTRL_IDLEST_FUNC))
|
|
{
|
|
}
|
|
|
|
putreg32(CM_CLKCTRL_MODULEMODE_ENABLE, AM335X_CM_PER_GPIO2_CLKCTRL);
|
|
while ((getreg32(AM335X_CM_PER_GPIO2_CLKCTRL) &
|
|
(CM_CLKCTRL_MODULEMODE_MASK | CM_CLKCTRL_IDLEST_MASK))
|
|
!= (CM_CLKCTRL_MODULEMODE_ENABLE | CM_CLKCTRL_IDLEST_FUNC))
|
|
{
|
|
}
|
|
|
|
putreg32(CM_CLKCTRL_MODULEMODE_ENABLE, AM335X_CM_PER_GPIO3_CLKCTRL);
|
|
while ((getreg32(AM335X_CM_PER_GPIO3_CLKCTRL) &
|
|
(CM_CLKCTRL_MODULEMODE_MASK | CM_CLKCTRL_IDLEST_MASK))
|
|
!= (CM_CLKCTRL_MODULEMODE_ENABLE | CM_CLKCTRL_IDLEST_FUNC))
|
|
{
|
|
}
|
|
|
|
#ifdef CONFIG_AM335X_TIMER2
|
|
putreg32(CM_CLKCTRL_MODULEMODE_ENABLE, AM335X_CM_PER_TIMER2_CLKCTRL);
|
|
while ((getreg32(AM335X_CM_PER_TIMER2_CLKCTRL) &
|
|
(CM_CLKCTRL_MODULEMODE_MASK | CM_CLKCTRL_IDLEST_MASK))
|
|
!= (CM_CLKCTRL_MODULEMODE_ENABLE | CM_CLKCTRL_IDLEST_FUNC))
|
|
{
|
|
}
|
|
|
|
per_l4ls |= CM_PER_L4LS_CLKSTCTRL_TIMER2_GCLK;
|
|
#endif
|
|
|
|
#ifdef CONFIG_AM335X_TIMER3
|
|
putreg32(CM_CLKCTRL_MODULEMODE_ENABLE, AM335X_CM_PER_TIMER3_CLKCTRL);
|
|
while ((getreg32(AM335X_CM_PER_TIMER3_CLKCTRL) &
|
|
(CM_CLKCTRL_MODULEMODE_MASK | CM_CLKCTRL_IDLEST_MASK))
|
|
!= (CM_CLKCTRL_MODULEMODE_ENABLE | CM_CLKCTRL_IDLEST_FUNC))
|
|
{
|
|
}
|
|
|
|
per_l4ls |= CM_PER_L4LS_CLKSTCTRL_TIMER3_GCLK;
|
|
#endif
|
|
|
|
#ifdef CONFIG_AM335X_TIMER4
|
|
putreg32(CM_CLKCTRL_MODULEMODE_ENABLE, AM335X_CM_PER_TIMER4_CLKCTRL);
|
|
while ((getreg32(AM335X_CM_PER_TIMER4_CLKCTRL) &
|
|
(CM_CLKCTRL_MODULEMODE_MASK | CM_CLKCTRL_IDLEST_MASK))
|
|
!= (CM_CLKCTRL_MODULEMODE_ENABLE | CM_CLKCTRL_IDLEST_FUNC))
|
|
{
|
|
}
|
|
|
|
per_l4ls |= CM_PER_L4LS_CLKSTCTRL_TIMER4_GCLK;
|
|
#endif
|
|
|
|
#ifdef CONFIG_AM335X_TIMER5
|
|
putreg32(CM_CLKCTRL_MODULEMODE_ENABLE, AM335X_CM_PER_TIMER5_CLKCTRL);
|
|
while ((getreg32(AM335X_CM_PER_TIMER5_CLKCTRL) &
|
|
(CM_CLKCTRL_MODULEMODE_MASK | CM_CLKCTRL_IDLEST_MASK))
|
|
!= (CM_CLKCTRL_MODULEMODE_ENABLE | CM_CLKCTRL_IDLEST_FUNC))
|
|
{
|
|
}
|
|
|
|
per_l4ls |= CM_PER_L4LS_CLKSTCTRL_TIMER5_GCLK;
|
|
#endif
|
|
|
|
#ifdef CONFIG_AM335X_TIMER6
|
|
putreg32(CM_CLKCTRL_MODULEMODE_ENABLE, AM335X_CM_PER_TIMER6_CLKCTRL);
|
|
while ((getreg32(AM335X_CM_PER_TIMER6_CLKCTRL) &
|
|
(CM_CLKCTRL_MODULEMODE_MASK | CM_CLKCTRL_IDLEST_MASK))
|
|
!= (CM_CLKCTRL_MODULEMODE_ENABLE | CM_CLKCTRL_IDLEST_FUNC))
|
|
{
|
|
}
|
|
|
|
per_l4ls |= CM_PER_L4LS_CLKSTCTRL_TIMER6_GCLK;
|
|
#endif
|
|
|
|
#ifdef CONFIG_AM335X_TIMER7
|
|
putreg32(CM_CLKCTRL_MODULEMODE_ENABLE, AM335X_CM_PER_TIMER7_CLKCTRL);
|
|
while ((getreg32(AM335X_CM_PER_TIMER7_CLKCTRL) &
|
|
(CM_CLKCTRL_MODULEMODE_MASK | CM_CLKCTRL_IDLEST_MASK))
|
|
!= (CM_CLKCTRL_MODULEMODE_ENABLE | CM_CLKCTRL_IDLEST_FUNC))
|
|
{
|
|
}
|
|
|
|
per_l4ls |= CM_PER_L4LS_CLKSTCTRL_TIMER7_GCLK;
|
|
#endif
|
|
|
|
#ifdef CONFIG_AM335X_UART1
|
|
putreg32(CM_CLKCTRL_MODULEMODE_ENABLE, AM335X_CM_PER_UART1_CLKCTRL);
|
|
while ((getreg32(AM335X_CM_PER_UART1_CLKCTRL) &
|
|
(CM_CLKCTRL_MODULEMODE_MASK | CM_CLKCTRL_IDLEST_MASK))
|
|
!= (CM_CLKCTRL_MODULEMODE_ENABLE | CM_CLKCTRL_IDLEST_FUNC))
|
|
{
|
|
}
|
|
|
|
per_l4ls |= CM_PER_L4LS_CLKSTCTRL_UART_GCLK;
|
|
#endif
|
|
|
|
#ifdef CONFIG_AM335X_UART2
|
|
putreg32(CM_CLKCTRL_MODULEMODE_ENABLE, AM335X_CM_PER_UART2_CLKCTRL);
|
|
while ((getreg32(AM335X_CM_PER_UART2_CLKCTRL) &
|
|
(CM_CLKCTRL_MODULEMODE_MASK | CM_CLKCTRL_IDLEST_MASK))
|
|
!= (CM_CLKCTRL_MODULEMODE_ENABLE | CM_CLKCTRL_IDLEST_FUNC))
|
|
{
|
|
}
|
|
|
|
per_l4ls |= CM_PER_L4LS_CLKSTCTRL_UART_GCLK;
|
|
#endif
|
|
|
|
#ifdef CONFIG_AM335X_UART3
|
|
putreg32(CM_CLKCTRL_MODULEMODE_ENABLE, AM335X_CM_PER_UART3_CLKCTRL);
|
|
while ((getreg32(AM335X_CM_PER_UART3_CLKCTRL) &
|
|
(CM_CLKCTRL_MODULEMODE_MASK | CM_CLKCTRL_IDLEST_MASK))
|
|
!= (CM_CLKCTRL_MODULEMODE_ENABLE | CM_CLKCTRL_IDLEST_FUNC))
|
|
{
|
|
}
|
|
|
|
per_l4ls |= CM_PER_L4LS_CLKSTCTRL_UART_GCLK;
|
|
#endif
|
|
|
|
#ifdef CONFIG_AM335X_UART4
|
|
putreg32(CM_CLKCTRL_MODULEMODE_ENABLE, AM335X_CM_PER_UART4_CLKCTRL);
|
|
while ((getreg32(AM335X_CM_PER_UART4_CLKCTRL) &
|
|
(CM_CLKCTRL_MODULEMODE_MASK | CM_CLKCTRL_IDLEST_MASK))
|
|
!= (CM_CLKCTRL_MODULEMODE_ENABLE | CM_CLKCTRL_IDLEST_FUNC))
|
|
{
|
|
}
|
|
|
|
per_l4ls |= CM_PER_L4LS_CLKSTCTRL_UART_GCLK;
|
|
#endif
|
|
|
|
#ifdef CONFIG_AM335X_UART5
|
|
putreg32(CM_CLKCTRL_MODULEMODE_ENABLE, AM335X_CM_PER_UART5_CLKCTRL);
|
|
while ((getreg32(AM335X_CM_PER_UART5_CLKCTRL) &
|
|
(CM_CLKCTRL_MODULEMODE_MASK | CM_CLKCTRL_IDLEST_MASK))
|
|
!= (CM_CLKCTRL_MODULEMODE_ENABLE | CM_CLKCTRL_IDLEST_FUNC))
|
|
{
|
|
}
|
|
|
|
per_l4ls |= CM_PER_L4LS_CLKSTCTRL_UART_GCLK;
|
|
#endif
|
|
|
|
#if defined(CONFIG_AM335X_CAN0)
|
|
putreg32(CM_CLKCTRL_MODULEMODE_ENABLE, AM335X_CM_PER_DCAN0_CLKCTRL);
|
|
while ((getreg32(AM335X_CM_PER_DCAN0_CLKCTRL) &
|
|
(CM_CLKCTRL_MODULEMODE_MASK | CM_CLKCTRL_IDLEST_MASK))
|
|
!= (CM_CLKCTRL_MODULEMODE_ENABLE | CM_CLKCTRL_IDLEST_FUNC))
|
|
{
|
|
}
|
|
|
|
per_l4ls |= CM_PER_L4LS_CLKSTCTRL_CAN_CLK;
|
|
#endif
|
|
|
|
#if defined(CONFIG_AM335X_CAN1)
|
|
putreg32(CM_CLKCTRL_MODULEMODE_ENABLE, AM335X_CM_PER_DCAN1_CLKCTRL);
|
|
while ((getreg32(AM335X_CM_PER_DCAN1_CLKCTRL) &
|
|
(CM_CLKCTRL_MODULEMODE_MASK | CM_CLKCTRL_IDLEST_MASK))
|
|
!= (CM_CLKCTRL_MODULEMODE_ENABLE | CM_CLKCTRL_IDLEST_FUNC))
|
|
{
|
|
}
|
|
|
|
per_l4ls |= CM_PER_L4LS_CLKSTCTRL_CAN_CLK;
|
|
#endif
|
|
|
|
#if defined(CONFIG_AM335X_SPI0)
|
|
putreg32(CM_CLKCTRL_MODULEMODE_ENABLE, AM335X_CM_PER_SPI0_CLKCTRL);
|
|
while ((getreg32(AM335X_CM_PER_SPI0_CLKCTRL) &
|
|
(CM_CLKCTRL_MODULEMODE_MASK | CM_CLKCTRL_IDLEST_MASK))
|
|
!= (CM_CLKCTRL_MODULEMODE_ENABLE | CM_CLKCTRL_IDLEST_FUNC))
|
|
{
|
|
}
|
|
|
|
per_l4ls |= CM_PER_L4LS_CLKSTCTRL_SPI_GCLK;
|
|
#endif
|
|
|
|
#if defined(CONFIG_AM335X_SPI1)
|
|
putreg32(CM_CLKCTRL_MODULEMODE_ENABLE, AM335X_CM_PER_SPI1_CLKCTRL);
|
|
while ((getreg32(AM335X_CM_PER_SPI1_CLKCTRL) &
|
|
(CM_CLKCTRL_MODULEMODE_MASK | CM_CLKCTRL_IDLEST_MASK))
|
|
!= (CM_CLKCTRL_MODULEMODE_ENABLE | CM_CLKCTRL_IDLEST_FUNC))
|
|
{
|
|
}
|
|
|
|
per_l4ls |= CM_PER_L4LS_CLKSTCTRL_SPI_GCLK;
|
|
#endif
|
|
|
|
#if defined(CONFIG_AM335X_I2C1)
|
|
putreg32(CM_CLKCTRL_MODULEMODE_ENABLE, AM335X_CM_PER_I2C1_CLKCTRL);
|
|
while ((getreg32(AM335X_CM_PER_I2C1_CLKCTRL) &
|
|
(CM_CLKCTRL_MODULEMODE_MASK | CM_CLKCTRL_IDLEST_MASK))
|
|
!= (CM_CLKCTRL_MODULEMODE_ENABLE | CM_CLKCTRL_IDLEST_FUNC))
|
|
{
|
|
}
|
|
|
|
per_l4ls |= CM_PER_L4LS_CLKSTCTRL_I2C_FCLK;
|
|
#endif
|
|
|
|
#if defined(CONFIG_AM335X_I2C2)
|
|
putreg32(CM_CLKCTRL_MODULEMODE_ENABLE, AM335X_CM_PER_I2C2_CLKCTRL);
|
|
while ((getreg32(AM335X_CM_PER_I2C2_CLKCTRL) &
|
|
(CM_CLKCTRL_MODULEMODE_MASK | CM_CLKCTRL_IDLEST_MASK))
|
|
!= (CM_CLKCTRL_MODULEMODE_ENABLE | CM_CLKCTRL_IDLEST_FUNC))
|
|
{
|
|
}
|
|
|
|
per_l4ls |= CM_PER_L4LS_CLKSTCTRL_I2C_FCLK;
|
|
#endif
|
|
|
|
#if defined(CONFIG_AM335X_USB0) || defined(CONFIG_AM335X_USB1)
|
|
putreg32(CM_CLKCTRL_MODULEMODE_ENABLE, AM335X_CM_PER_USB0_CLKCTRL);
|
|
while ((getreg32(AM335X_CM_PER_USB0_CLKCTRL) &
|
|
(CM_CLKCTRL_MODULEMODE_MASK | CM_CLKCTRL_IDLEST_MASK))
|
|
!= (CM_CLKCTRL_MODULEMODE_ENABLE | CM_CLKCTRL_IDLEST_FUNC))
|
|
{
|
|
}
|
|
|
|
#endif
|
|
|
|
#if defined(CONFIG_AM335X_MMC0)
|
|
putreg32(CM_CLKCTRL_MODULEMODE_ENABLE, AM335X_CM_PER_MMC0_CLKCTRL);
|
|
while ((getreg32(AM335X_CM_PER_MMC0_CLKCTRL) &
|
|
(CM_CLKCTRL_MODULEMODE_MASK | CM_CLKCTRL_IDLEST_MASK))
|
|
!= (CM_CLKCTRL_MODULEMODE_ENABLE | CM_CLKCTRL_IDLEST_FUNC))
|
|
{
|
|
}
|
|
|
|
per_l4ls |= CM_PER_L3_CLKSTCTRL_MMC_FCLK;
|
|
#endif
|
|
|
|
#if defined(CONFIG_AM335X_MMC1)
|
|
putreg32(CM_CLKCTRL_MODULEMODE_ENABLE, AM335X_CM_PER_MMC1_CLKCTRL);
|
|
while ((getreg32(AM335X_CM_PER_MMC1_CLKCTRL) &
|
|
(CM_CLKCTRL_MODULEMODE_MASK | CM_CLKCTRL_IDLEST_MASK))
|
|
!= (CM_CLKCTRL_MODULEMODE_ENABLE | CM_CLKCTRL_IDLEST_FUNC))
|
|
{
|
|
}
|
|
|
|
per_l4ls |= CM_PER_L3_CLKSTCTRL_MMC_FCLK;
|
|
#endif
|
|
|
|
#if defined(CONFIG_AM335X_MMC2)
|
|
putreg32(CM_CLKCTRL_MODULEMODE_ENABLE, AM335X_CM_PER_MMC2_CLKCTRL);
|
|
while ((getreg32(AM335X_CM_PER_MMC2_CLKCTRL) &
|
|
(CM_CLKCTRL_MODULEMODE_MASK | CM_CLKCTRL_IDLEST_MASK))
|
|
!= (CM_CLKCTRL_MODULEMODE_ENABLE | CM_CLKCTRL_IDLEST_FUNC))
|
|
{
|
|
}
|
|
|
|
per_l4ls |= CM_PER_L3_CLKSTCTRL_MMC_FCLK;
|
|
#endif
|
|
|
|
#if defined(CONFIG_AM335X_LCDC)
|
|
putreg32(CM_CLKCTRL_MODULEMODE_ENABLE, AM335X_CM_PER_LCDC_CLKCTRL);
|
|
while ((getreg32(AM335X_CM_PER_LCDC_CLKCTRL) &
|
|
(CM_CLKCTRL_MODULEMODE_MASK | CM_CLKCTRL_IDLEST_MASK))
|
|
!= (CM_CLKCTRL_MODULEMODE_ENABLE | CM_CLKCTRL_IDLEST_FUNC))
|
|
{
|
|
}
|
|
|
|
per_lcdc |= CM_PER_LCDC_CLKSTCTRL_LCDC_L4_OCP_GCLK |
|
|
CM_PER_LCDC_CLKSTCTRL_LCDC_L3_OCP_GCLK;
|
|
per_l4ls |= CM_PER_L4LS_CLKSTCTRL_LCDC_GCLK;
|
|
#endif
|
|
|
|
#if defined(CONFIG_AM335X_CPSW)
|
|
putreg32(CM_CLKCTRL_MODULEMODE_ENABLE, AM335X_CM_PER_CPGMAC0_CLKCTRL);
|
|
while ((getreg32(AM335X_CM_PER_CPGMAC0_CLKCTRL) &
|
|
(CM_CLKCTRL_MODULEMODE_MASK | CM_CLKCTRL_IDLEST_MASK))
|
|
!= (CM_CLKCTRL_MODULEMODE_ENABLE | CM_CLKCTRL_IDLEST_FUNC))
|
|
{
|
|
}
|
|
|
|
per_cpsw |= CM_PER_CPSW_CLKSTCTRL_CPSW_125MHZ_GCLK;
|
|
#endif
|
|
|
|
#if defined(CONFIG_AM335X_DMA)
|
|
putreg32(CM_CLKCTRL_MODULEMODE_ENABLE, AM335X_CM_PER_TPCC_CLKCTRL);
|
|
while ((getreg32(AM335X_CM_PER_TPCC_CLKCTRL) &
|
|
(CM_CLKCTRL_MODULEMODE_MASK | CM_CLKCTRL_IDLEST_MASK))
|
|
!= (CM_CLKCTRL_MODULEMODE_ENABLE | CM_CLKCTRL_IDLEST_FUNC))
|
|
{
|
|
}
|
|
|
|
putreg32(CM_CLKCTRL_MODULEMODE_ENABLE, AM335X_CM_PER_TPTC0_CLKCTRL);
|
|
while ((getreg32(AM335X_CM_PER_TPTC0_CLKCTRL) &
|
|
(CM_CLKCTRL_MODULEMODE_MASK | CM_CLKCTRL_IDLEST_MASK))
|
|
!= (CM_CLKCTRL_MODULEMODE_ENABLE | CM_CLKCTRL_IDLEST_FUNC))
|
|
{
|
|
}
|
|
|
|
putreg32(CM_CLKCTRL_MODULEMODE_ENABLE, AM335X_CM_PER_TPTC1_CLKCTRL);
|
|
while ((getreg32(AM335X_CM_PER_TPTC1_CLKCTRL) &
|
|
(CM_CLKCTRL_MODULEMODE_MASK | CM_CLKCTRL_IDLEST_MASK))
|
|
!= (CM_CLKCTRL_MODULEMODE_ENABLE | CM_CLKCTRL_IDLEST_FUNC))
|
|
{
|
|
}
|
|
|
|
putreg32(CM_CLKCTRL_MODULEMODE_ENABLE, AM335X_CM_PER_TPTC2_CLKCTRL);
|
|
while ((getreg32(AM335X_CM_PER_TPTC2_CLKCTRL) &
|
|
(CM_CLKCTRL_MODULEMODE_MASK | CM_CLKCTRL_IDLEST_MASK))
|
|
!= (CM_CLKCTRL_MODULEMODE_ENABLE | CM_CLKCTRL_IDLEST_FUNC))
|
|
{
|
|
}
|
|
#endif
|
|
|
|
putreg32(CM_CLKCTRL_MODULEMODE_ENABLE, AM335X_CM_WKUP_CONTROL_CLKCTRL);
|
|
while ((getreg32(AM335X_CM_WKUP_CONTROL_CLKCTRL) &
|
|
(CM_CLKCTRL_MODULEMODE_MASK | CM_CLKCTRL_IDLEST_MASK))
|
|
!= (CM_CLKCTRL_MODULEMODE_ENABLE | CM_CLKCTRL_IDLEST_FUNC))
|
|
{
|
|
}
|
|
|
|
while ((getreg32(AM335X_CM_PER_LCDC_CLKSTCTRL) & per_lcdc) != per_lcdc)
|
|
{
|
|
}
|
|
|
|
while ((getreg32(AM335X_CM_PER_CPSW_CLKSTCTRL) & per_cpsw) != per_cpsw)
|
|
{
|
|
}
|
|
|
|
while ((getreg32(AM335X_CM_WKUP_CLKSTCTRL) & wkup) != wkup)
|
|
{
|
|
}
|
|
|
|
while ((getreg32(AM335X_CM_PER_L3S_CLKSTCTRL) & per_l3s) != per_l3s)
|
|
{
|
|
}
|
|
|
|
while ((getreg32(AM335X_CM_PER_L3_CLKSTCTRL) & per_l3) != per_l3)
|
|
{
|
|
}
|
|
|
|
while ((getreg32(AM335X_CM_PER_OCPWP_L3_CLKSTCTRL) & per_ocpwp_l3) !=
|
|
per_ocpwp_l3)
|
|
{
|
|
}
|
|
|
|
while ((getreg32(AM335X_CM_PER_L4LS_CLKSTCTRL) & per_l4ls) != per_l4ls)
|
|
{
|
|
}
|
|
}
|
|
|
|
/****************************************************************************
|
|
* Name: am335x_dmtimer1ms_clockconfig
|
|
****************************************************************************/
|
|
|
|
static void am335x_dmtimer1ms_clockconfig(void)
|
|
{
|
|
putreg32(CM_DPLL_DMTIMER1_CLKSEL_CLK_M_OSC,
|
|
AM335X_CM_DPLL_CLKSEL_TIMER1MS_CLK);
|
|
|
|
while ((getreg32(AM335X_CM_DPLL_CLKSEL_TIMER1MS_CLK) &
|
|
CM_DPLL_DMTIMER1MS_CLKSEL_MASK)
|
|
!= CM_DPLL_DMTIMER1_CLKSEL_CLK_M_OSC)
|
|
{
|
|
}
|
|
}
|
|
|
|
/****************************************************************************
|
|
* Public Functions
|
|
****************************************************************************/
|
|
|
|
/****************************************************************************
|
|
* Name: am335x_clockconfig
|
|
*
|
|
* Description:
|
|
* Called to initialize the AM335X. This does whatever setup is needed to
|
|
* put the SoC in a usable state. This includes the initialization of
|
|
* clocking using the settings in board.h.
|
|
*
|
|
****************************************************************************/
|
|
|
|
void am335x_clockconfig(void)
|
|
{
|
|
/* Don't change the current basic clock configuration if we are running
|
|
* from SDRAM. In this case, some bootloader logic has already configured
|
|
* clocking and SDRAM. We are pretty much committed to using things the
|
|
* way that the bootloader has left them.
|
|
*
|
|
* Clocking will be configured at 792 MHz initially when started via
|
|
* U-Boot. The Linux kernel will uses the CPU frequency scaling code
|
|
* which will switch the processor frequency between 400 MHz and 1GHz based
|
|
* on load and temperature. For now, NuttX simply leaves the clocking at
|
|
* 792MHz.
|
|
*/
|
|
|
|
am335x_interface_clocks_enable();
|
|
|
|
am335x_power_domain_transition_enable();
|
|
|
|
am335x_peripheral_enable();
|
|
|
|
am335x_dmtimer1ms_clockconfig();
|
|
|
|
#ifndef CONFIG_AM335X_BOOT_SDRAM
|
|
# warning Missing logic
|
|
#endif
|
|
}
|