]> git.kernelconcepts.de Git - karo-tx-uboot.git/blob - arch/arm/include/asm/arch-mx5/clock.h
arm: mx5: print some more clocks in the 'clock' command
[karo-tx-uboot.git] / arch / arm / include / asm / arch-mx5 / clock.h
1 /*
2  * (C) Copyright 2009
3  * Stefano Babic, DENX Software Engineering, sbabic@denx.de.
4  *
5  * SPDX-License-Identifier:     GPL-2.0+
6  */
7
8 #ifndef __ASM_ARCH_CLOCK_H
9 #define __ASM_ARCH_CLOCK_H
10
11 #include <common.h>
12
13 #ifdef CONFIG_SYS_MX5_HCLK
14 #define MXC_HCLK        CONFIG_SYS_MX5_HCLK
15 #else
16 #define MXC_HCLK        24000000
17 #endif
18
19 #ifdef CONFIG_SYS_MX5_CLK32
20 #define MXC_CLK32       CONFIG_SYS_MX5_CLK32
21 #else
22 #define MXC_CLK32       32768
23 #endif
24
25 enum mxc_clock {
26         MXC_ARM_CLK = 0,
27         MXC_AHB_CLK,
28         MXC_IPG_CLK,
29         MXC_IPG_PERCLK,
30         MXC_UART_CLK,
31         MXC_CSPI_CLK,
32         MXC_ESDHC_CLK,
33         MXC_ESDHC2_CLK,
34         MXC_ESDHC3_CLK,
35         MXC_ESDHC4_CLK,
36         MXC_FEC_CLK,
37         MXC_SATA_CLK,
38         MXC_DDR_CLK,
39         MXC_NFC_CLK,
40         MXC_PERIPH_CLK,
41         MXC_I2C_CLK,
42         MXC_AXI_A_CLK,
43         MXC_AXI_B_CLK,
44         MXC_EMI_SLOW_CLK,
45 };
46
47
48 struct clk {
49         const char *name;
50         int id;
51         /* Source clock this clk depends on */
52         struct clk *parent;
53         /* Secondary clock to enable/disable with this clock */
54         struct clk *secondary;
55         /* Current clock rate */
56         unsigned long rate;
57         /* Reference count of clock enable/disable */
58         __s8 usecount;
59         /* Register bit position for clock's enable/disable control. */
60         u8 enable_shift;
61         /* Register address for clock's enable/disable control. */
62         void *enable_reg;
63         u32 flags;
64         /*
65          * Function ptr to recalculate the clock's rate based on parent
66          * clock's rate
67          */
68         void (*recalc) (struct clk *);
69         /*
70          * Function ptr to set the clock to a new rate. The rate must match a
71          * supported rate returned from round_rate. Leave blank if clock is not
72         * programmable
73          */
74         int (*set_rate) (struct clk *, unsigned long);
75         /*
76          * Function ptr to round the requested clock rate to the nearest
77          * supported rate that is less than or equal to the requested rate.
78          */
79         unsigned long (*round_rate) (struct clk *, unsigned long);
80         /*
81          * Function ptr to enable the clock. Leave blank if clock can not
82          * be gated.
83          */
84         int (*enable) (struct clk *);
85         /*
86          * Function ptr to disable the clock. Leave blank if clock can not
87          * be gated.
88          */
89         void (*disable) (struct clk *);
90         /* Function ptr to set the parent clock of the clock. */
91         int (*set_parent) (struct clk *, struct clk *);
92 };
93
94 u32 imx_get_uartclk(void);
95 u32 imx_get_fecclk(void);
96 unsigned int mxc_get_clock(enum mxc_clock clk);
97 int mxc_set_clock(u32 ref, u32 freq, enum mxc_clock clk);
98 int adjust_core_voltage(u32 freq);
99 void set_usb_phy_clk(void);
100 void enable_usb_phy1_clk(unsigned char enable);
101 void enable_usb_phy2_clk(unsigned char enable);
102 void set_usboh3_clk(void);
103 void enable_usboh3_clk(unsigned char enable);
104 void mxc_set_sata_internal_clock(void);
105 int enable_i2c_clk(unsigned char enable, unsigned i2c_num);
106 void enable_nfc_clk(unsigned char enable);
107 void ipu_clk_enable(void);
108 void ipu_clk_disable(void);
109 void ipu_di_clk_enable(int di);
110 void ipu_di_clk_disable(int di);
111 #ifdef CONFIG_MX53
112 void ldb_clk_enable(int ldb);
113 void ldb_clk_disable(int ldb);
114 #else
115 static inline void ldb_clk_enable(int ldb)
116 {
117 }
118 static inline void ldb_clk_disable(int ldb)
119 {
120 }
121 #endif /* CONFIG_MX53 */
122
123 #endif /* __ASM_ARCH_CLOCK_H */