tizen 2.4 release
[profile/mobile/platform/kernel/u-boot-tm1.git] / arch / arm / cpu / armv7 / sc9630 / sec_mcu.c
1 /******************************************************************************
2     David.Jia   2007.10.29      share_version_union
3
4 ******************************************************************************/
5
6 #include <common.h>
7 #include <asm/arch/sci_types.h>
8 #include <asm/arch/chip_drv_common_io.h>
9 #include <asm/arch/adi_hal_internal.h>
10 #include <asm/arch/sprd_reg.h>
11 #include <asm/arch/chip_drvapi.h>
12
13 static void AhbClkConfig()
14 {
15     uint32 ahb_cfg, i;
16     ahb_cfg  = REG32(REG_AP_CLK_AP_AHB_CFG);
17     ahb_cfg &=~3;
18     ahb_cfg |= 2;  //ahb select 128M           0:26M 1:76M 2:128M 3:192M
19     REG32(REG_AP_CLK_AP_AHB_CFG) = ahb_cfg;
20
21     ahb_cfg  = REG32(REG_AON_CLK_PUB_AHB_CFG);
22     ahb_cfg &=~3;
23     ahb_cfg |= 2;  //pub ahb select 128M      0:26M 1:76M 2:128M 3:153M
24     REG32(REG_AON_CLK_PUB_AHB_CFG) = ahb_cfg;
25
26     for (i=0; i<0x100; i++);
27 }
28
29 static void ApbClkConfig()
30 {
31     uint32 apb_cfg, i;
32     apb_cfg  = REG32(REG_AP_CLK_AP_APB_CFG);
33     apb_cfg &=~3;
34     apb_cfg |= 1;  //apb select 64M            0:26M 1:64M 2:96M 3:128M
35     REG32(REG_AP_CLK_AP_APB_CFG) = apb_cfg;
36
37     apb_cfg = REG32(REG_AON_CLK_AON_APB_CFG);
38     apb_cfg &=~3;
39     apb_cfg |= 1;  //aon apb select 76M        0:26M 1:76M 2:96M 3:128M
40     REG32(REG_AON_CLK_AON_APB_CFG) = apb_cfg;
41
42     for (i=0; i<0x100; i++);
43 }
44
45 static void SetMPllClk (uint32 clk)
46 {
47     uint32 mpll_cfg, pll_sft_cnt, i;
48 #if !defined(CONFIG_ARCH_SCX35L)
49     REG32(REG_AON_APB_PLL_SOFT_CNT_DONE) &= ~1;
50
51     mpll_cfg  = REG32(REG_AON_APB_MPLL_CFG);
52     mpll_cfg &=~(3<<24);
53     mpll_cfg |= (1<<24);
54     clk /= 4000000;
55     mpll_cfg &=~(0x7ff);
56     mpll_cfg |= clk&0x7ff;
57     REG32(REG_AON_APB_MPLL_CFG) = mpll_cfg;
58
59     for (i=0; i<0x1000; i++){}
60
61     REG32(REG_AON_APB_PLL_SOFT_CNT_DONE) |=  1;
62 #endif
63 }
64
65 static void McuClkConfig(uint32 arm_clk)
66 {
67     uint32 ca7_ckg_cfg, i;
68
69     SetMPllClk(arm_clk);
70
71     ca7_ckg_cfg  =  REG32(REG_AP_AHB_CA7_CKG_CFG);
72     ca7_ckg_cfg &= ~(7<<4);  //ap clk div = 0;
73     ca7_ckg_cfg &= ~7;
74     ca7_ckg_cfg |=  6; //a7 core select mcu MPLL       0:26M 1:(DPLL)533M 2:(CPLL)624M 3:(TDPLL)768M 4:(WIFIPLL)880M 5:(WPLL)921M 6:(MPLL)1200M
75     REG32(REG_AP_AHB_CA7_CKG_CFG) = ca7_ckg_cfg;
76
77     for (i=0; i<0x100; i++){}
78 }
79
80 void SecClkConfig()
81 {
82     uint32 ca7_ckg_cfg, i;
83     REG32(REG_AP_APB_APB_EB) |= BIT_AP_CKG_EB;          // CKG enable
84     //AxiClkConfig
85     ca7_ckg_cfg  = REG32(REG_AP_AHB_CA7_CKG_CFG);
86     ca7_ckg_cfg &= ~(7<<8);
87     ca7_ckg_cfg |= 1<<8;                                                        //AXI=ARM/2
88     REG32(REG_AP_AHB_CA7_CKG_CFG) = ca7_ckg_cfg;
89     for (i=0; i<0x100; i++){}
90
91     //DbgClkConfig
92     ca7_ckg_cfg  =  REG32(REG_AP_AHB_CA7_CKG_CFG);
93     ca7_ckg_cfg &= ~(7<<16);
94     ca7_ckg_cfg |=  3<<16;                                                      //DBG=ARM/4
95     REG32(REG_AP_AHB_CA7_CKG_CFG) = ca7_ckg_cfg;
96     for (i=0; i<0x100; i++){}
97     McuClkConfig(ARM_CLK_1000M);
98
99     AhbClkConfig();
100     ApbClkConfig();
101 }
102