summaryrefslogtreecommitdiff
path: root/firmware/target
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/target')
-rw-r--r--firmware/target/arm/imx233/clkctrl-imx233.c9
-rw-r--r--firmware/target/arm/imx233/clkctrl-imx233.h5
2 files changed, 10 insertions, 4 deletions
diff --git a/firmware/target/arm/imx233/clkctrl-imx233.c b/firmware/target/arm/imx233/clkctrl-imx233.c
index ccccaae59d..cfee4aea37 100644
--- a/firmware/target/arm/imx233/clkctrl-imx233.c
+++ b/firmware/target/arm/imx233/clkctrl-imx233.c
@@ -103,7 +103,9 @@ void imx233_clkctrl_set_clock_divisor(enum imx233_clock_t clk, int div)
103 __FIELD_SET(HW_CLKCTRL_EMI, DIV_EMI, div); 103 __FIELD_SET(HW_CLKCTRL_EMI, DIV_EMI, div);
104 break; 104 break;
105 case CLK_HBUS: 105 case CLK_HBUS:
106 __FIELD_SET(HW_CLKCTRL_HBUS, DIV, div); 106 /* disable frac enable at the same time */
107 HW_CLKCTRL_HBUS = div << HW_CLKCTRL_HBUS__DIV_BP |
108 (HW_CLKCTRL_HBUS & ~(HW_CLKCTRL_HBUS__DIV_FRAC_EN | HW_CLKCTRL_HBUS__DIV_BM));
107 break; 109 break;
108 case CLK_XBUS: 110 case CLK_XBUS:
109 __FIELD_SET(HW_CLKCTRL_XBUS, DIV, div); 111 __FIELD_SET(HW_CLKCTRL_XBUS, DIV, div);
@@ -137,8 +139,9 @@ void imx233_clkctrl_set_fractional_divisor(enum imx233_clock_t clk, int fracdiv)
137 switch(clk) 139 switch(clk)
138 { 140 {
139 case CLK_HBUS: 141 case CLK_HBUS:
140 __FIELD_SET(HW_CLKCTRL_HBUS, DIV, fracdiv); 142 /* set frac enable at the same time */
141 __REG_SET(HW_CLKCTRL_HBUS) = HW_CLKCTRL_HBUS__DIV_FRAC_EN; 143 HW_CLKCTRL_HBUS = fracdiv << HW_CLKCTRL_HBUS__DIV_BP | HW_CLKCTRL_HBUS__DIV_FRAC_EN |
144 (HW_CLKCTRL_HBUS & ~HW_CLKCTRL_HBUS__DIV_BM);
142 return; 145 return;
143 case CLK_PIX: REG = &HW_CLKCTRL_FRAC_PIX; break; 146 case CLK_PIX: REG = &HW_CLKCTRL_FRAC_PIX; break;
144 case CLK_IO: REG = &HW_CLKCTRL_FRAC_IO; break; 147 case CLK_IO: REG = &HW_CLKCTRL_FRAC_IO; break;
diff --git a/firmware/target/arm/imx233/clkctrl-imx233.h b/firmware/target/arm/imx233/clkctrl-imx233.h
index ec3412d0f3..665674108c 100644
--- a/firmware/target/arm/imx233/clkctrl-imx233.h
+++ b/firmware/target/arm/imx233/clkctrl-imx233.h
@@ -124,7 +124,7 @@ enum imx233_clock_t
124 CLK_HBUS, /* freq, div, frac */ 124 CLK_HBUS, /* freq, div, frac */
125 CLK_PLL, /* freq, enable */ 125 CLK_PLL, /* freq, enable */
126 CLK_XTAL, /* freq */ 126 CLK_XTAL, /* freq */
127 CLK_EMI, /* freq, div, frac, bypass (NOTE: don't modify directly EMI) */ 127 CLK_EMI, /* freq, div, frac, bypass */
128 CLK_XBUS, /* freq, div */ 128 CLK_XBUS, /* freq, div */
129}; 129};
130 130
@@ -139,6 +139,7 @@ enum imx233_xtal_clk_t
139/* Auto-Slow monitoring */ 139/* Auto-Slow monitoring */
140enum imx233_as_monitor_t 140enum imx233_as_monitor_t
141{ 141{
142 AS_NONE = 0, /* Do not monitor any activity */
142 AS_CPU_INSTR = 1 << 21, /* Monitor CPU instruction access to AHB */ 143 AS_CPU_INSTR = 1 << 21, /* Monitor CPU instruction access to AHB */
143 AS_CPU_DATA = 1 << 22, /* Monitor CPU data access to AHB */ 144 AS_CPU_DATA = 1 << 22, /* Monitor CPU data access to AHB */
144 AS_TRAFFIC = 1 << 23, /* Monitor AHB master activity */ 145 AS_TRAFFIC = 1 << 23, /* Monitor AHB master activity */
@@ -147,6 +148,7 @@ enum imx233_as_monitor_t
147 AS_APBHDMA = 1 << 26, /* Monitor APBH DMA activity */ 148 AS_APBHDMA = 1 << 26, /* Monitor APBH DMA activity */
148 AS_PXP = 1 << 27, /* Monitor PXP activity */ 149 AS_PXP = 1 << 27, /* Monitor PXP activity */
149 AS_DCP = 1 << 28, /* Monitor DCP activity */ 150 AS_DCP = 1 << 28, /* Monitor DCP activity */
151 AS_ALL = 0xff << 21, /* Monitor all activity */
150}; 152};
151 153
152enum imx233_as_div_t 154enum imx233_as_div_t
@@ -183,6 +185,7 @@ void imx233_clkctrl_set_auto_slow_divisor(enum imx233_as_div_t div);
183enum imx233_as_div_t imx233_clkctrl_get_auto_slow_divisor(void); 185enum imx233_as_div_t imx233_clkctrl_get_auto_slow_divisor(void);
184void imx233_clkctrl_enable_auto_slow(bool enable); 186void imx233_clkctrl_enable_auto_slow(bool enable);
185bool imx233_clkctrl_is_auto_slow_enabled(void); 187bool imx233_clkctrl_is_auto_slow_enabled(void);
188/* can use a mask of clocks */
186void imx233_clkctrl_enable_auto_slow_monitor(enum imx233_as_monitor_t monitor, bool enable); 189void imx233_clkctrl_enable_auto_slow_monitor(enum imx233_as_monitor_t monitor, bool enable);
187bool imx233_clkctrl_is_auto_slow_monitor_enabled(enum imx233_as_monitor_t monitor); 190bool imx233_clkctrl_is_auto_slow_monitor_enabled(enum imx233_as_monitor_t monitor);
188 191