hc
2023-05-26 a23f51ed7a39e452c1037343a84d7db1ca2c5bd7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
/*
 * (C) Copyright 2014
 * Vikas Manocha, ST Micoelectronics, vikas.manocha@st.com.
 *
 * SPDX-License-Identifier:    GPL-2.0+
 */
 
#include <asm/io.h>
#include <asm/arch/hardware.h>
#include <asm/arch/stv0991_cgu.h>
#include<asm/arch/stv0991_periph.h>
 
static struct stv0991_cgu_regs *const stv0991_cgu_regs = \
               (struct stv0991_cgu_regs *) (CGU_BASE_ADDR);
 
void enable_pll1(void)
{
   /* pll1 already configured for 1000Mhz, just need to enable it */
   writel(readl(&stv0991_cgu_regs->pll1_ctrl) & ~(0x01),
           &stv0991_cgu_regs->pll1_ctrl);
}
 
void clock_setup(int peripheral)
{
   switch (peripheral) {
   case UART_CLOCK_CFG:
       writel(UART_CLK_CFG, &stv0991_cgu_regs->uart_freq);
       break;
   case ETH_CLOCK_CFG:
       enable_pll1();
       writel(ETH_CLK_CFG, &stv0991_cgu_regs->eth_freq);
 
       /* Clock selection for ethernet tx_clk & rx_clk*/
       writel((readl(&stv0991_cgu_regs->eth_ctrl) & ETH_CLK_MASK)
               | ETH_CLK_CTRL, &stv0991_cgu_regs->eth_ctrl);
       break;
   case QSPI_CLOCK_CFG:
       writel(QSPI_CLK_CTRL, &stv0991_cgu_regs->qspi_freq);
       break;
   default:
       break;
   }
}