diff options
Diffstat (limited to 'firmware/target')
-rw-r--r-- | firmware/target/arm/imx233/clkctrl-imx233.c | 9 | ||||
-rw-r--r-- | firmware/target/arm/imx233/clkctrl-imx233.h | 5 |
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 */ |
140 | enum imx233_as_monitor_t | 140 | enum 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 | ||
152 | enum imx233_as_div_t | 154 | enum imx233_as_div_t |
@@ -183,6 +185,7 @@ void imx233_clkctrl_set_auto_slow_divisor(enum imx233_as_div_t div); | |||
183 | enum imx233_as_div_t imx233_clkctrl_get_auto_slow_divisor(void); | 185 | enum imx233_as_div_t imx233_clkctrl_get_auto_slow_divisor(void); |
184 | void imx233_clkctrl_enable_auto_slow(bool enable); | 186 | void imx233_clkctrl_enable_auto_slow(bool enable); |
185 | bool imx233_clkctrl_is_auto_slow_enabled(void); | 187 | bool imx233_clkctrl_is_auto_slow_enabled(void); |
188 | /* can use a mask of clocks */ | ||
186 | void imx233_clkctrl_enable_auto_slow_monitor(enum imx233_as_monitor_t monitor, bool enable); | 189 | void imx233_clkctrl_enable_auto_slow_monitor(enum imx233_as_monitor_t monitor, bool enable); |
187 | bool imx233_clkctrl_is_auto_slow_monitor_enabled(enum imx233_as_monitor_t monitor); | 190 | bool imx233_clkctrl_is_auto_slow_monitor_enabled(enum imx233_as_monitor_t monitor); |
188 | 191 | ||