hc
2023-03-13 2ec15ae1cb4be1b4fcb56c6d621123d7ebdaad6c
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
/*
 * (C) Copyright 2016 Rockchip Electronics Co., Ltd
 *
 * SPDX-License-Identifier:     GPL-2.0+
 */
 
#ifndef __ASM_ARCH_CRU_RK3399_H_
#define __ASM_ARCH_CRU_RK3399_H_
 
#include <common.h>
 
/* Private data for the clock driver - used by rockchip_get_cru() */
struct rk3399_clk_priv {
   struct rk3399_cru *cru;
   ulong armlclk_hz;
   ulong armlclk_enter_hz;
   ulong armlclk_init_hz;
   ulong armbclk_hz;
   ulong armbclk_enter_hz;
   ulong armbclk_init_hz;
   bool sync_kernel;
   bool set_armclk_rate;
};
 
struct rk3399_pmuclk_priv {
   struct rk3399_pmucru *pmucru;
};
 
struct rk3399_pmucru {
   u32 ppll_con[6];
   u32 reserved[0x1a];
   u32 pmucru_clksel[6];
   u32 pmucru_clkfrac_con[2];
   u32 reserved2[0x18];
   u32 pmucru_clkgate_con[3];
   u32 reserved3;
   u32 pmucru_softrst_con[2];
   u32 reserved4[2];
   u32 pmucru_rstnhold_con[2];
   u32 reserved5[2];
   u32 pmucru_gatedis_con[2];
};
check_member(rk3399_pmucru, pmucru_gatedis_con[1], 0x134);
 
struct rk3399_cru {
   u32 apll_l_con[6];
   u32 reserved[2];
   u32 apll_b_con[6];
   u32 reserved1[2];
   u32 dpll_con[6];
   u32 reserved2[2];
   u32 cpll_con[6];
   u32 reserved3[2];
   u32 gpll_con[6];
   u32 reserved4[2];
   u32 npll_con[6];
   u32 reserved5[2];
   u32 vpll_con[6];
   u32 reserved6[0x0a];
   u32 clksel_con[108];
   u32 reserved7[0x14];
   u32 clkgate_con[35];
   u32 reserved8[0x1d];
   u32 softrst_con[21];
   u32 reserved9[0x2b];
   u32 glb_srst_fst_value;
   u32 glb_srst_snd_value;
   u32 glb_cnt_th;
   u32 misc_con;
   u32 glb_rst_con;
   u32 glb_rst_st;
   u32 reserved10[0x1a];
   u32 sdmmc_con[2];
   u32 sdio0_con[2];
   u32 sdio1_con[2];
};
check_member(rk3399_cru, sdio1_con[1], 0x594);
#define MHz        1000000
#define KHz        1000
#define OSC_HZ        (24*MHz)
#define APLL_HZ        (600*MHz)
#define GPLL_HZ        (800 * MHz)
#define CPLL_HZ        (384*MHz)
#define NPLL_HZ        (600 * MHz)
#define PPLL_HZ        (676*MHz)
 
#define PMU_PCLK_HZ    (48*MHz)
 
#define ACLKM_CORE_HZ    (300*MHz)
#define ATCLK_CORE_HZ    (300*MHz)
#define PCLK_DBG_HZ    (100*MHz)
 
#define PERIHP_ACLK_HZ    (150 * MHz)
#define PERIHP_HCLK_HZ    (75 * MHz)
#define PERIHP_PCLK_HZ    (37500 * KHz)
 
#define PERILP0_ACLK_HZ    (300 * MHz)
#define PERILP0_HCLK_HZ    (100 * MHz)
#define PERILP0_PCLK_HZ    (50 * MHz)
 
#define PERILP1_HCLK_HZ    (100 * MHz)
#define PERILP1_PCLK_HZ    (50 * MHz)
 
#define PWM_CLOCK_HZ    PMU_PCLK_HZ
 
enum apll_frequencies {
   APLL_1600_MHZ,
   APLL_816_MHZ,
   APLL_600_MHZ,
};
 
enum cpu_cluster {
   CPU_CLUSTER_LITTLE,
   CPU_CLUSTER_BIG,
};
 
enum rk3399_pll_id {
   APLLL_ID = 0,
   APLLB_ID,
   DPLL_ID,
   CPLL_ID,
   GPLL_ID,
   NPLL_ID,
   VPLL_ID,
 
   PPLL_ID,
 
   END_PLL_ID
};
 
struct rk3399_clk_info {
   unsigned long id;
   char *name;
   bool is_cru;
};
 
#endif    /* __ASM_ARCH_CRU_RK3399_H_ */