summaryrefslogtreecommitdiff
path: root/firmware/target/mips/ingenic_x1000/fiiom3k
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/target/mips/ingenic_x1000/fiiom3k')
-rw-r--r--firmware/target/mips/ingenic_x1000/fiiom3k/spl-fiiom3k.c35
1 files changed, 34 insertions, 1 deletions
diff --git a/firmware/target/mips/ingenic_x1000/fiiom3k/spl-fiiom3k.c b/firmware/target/mips/ingenic_x1000/fiiom3k/spl-fiiom3k.c
index 0ebe11e24d..7f4441c109 100644
--- a/firmware/target/mips/ingenic_x1000/fiiom3k/spl-fiiom3k.c
+++ b/firmware/target/mips/ingenic_x1000/fiiom3k/spl-fiiom3k.c
@@ -21,7 +21,7 @@
21 21
22#include "spl-x1000.h" 22#include "spl-x1000.h"
23#include "gpio-x1000.h" 23#include "gpio-x1000.h"
24#include "nand-x1000.h" 24#include "clk-x1000.h"
25#include "system.h" 25#include "system.h"
26#include <string.h> 26#include <string.h>
27 27
@@ -130,3 +130,36 @@ int spl_get_boot_option(void)
130 /* Default is to boot Rockbox */ 130 /* Default is to boot Rockbox */
131 return SPL_BOOTOPT_ROCKBOX; 131 return SPL_BOOTOPT_ROCKBOX;
132} 132}
133
134void spl_handle_pre_boot(int bootopt)
135{
136 /* Move system to EXCLK so we can manipulate the PLLs */
137 clk_set_ccr_mux(CLKMUX_SCLK_A(EXCLK) | CLKMUX_CPU(SCLK_A) |
138 CLKMUX_AHB0(SCLK_A) | CLKMUX_AHB2(SCLK_A));
139 clk_set_ccr_div(1, 1, 1, 1, 1);
140
141 /* Enable APLL @ 1008 MHz (24 MHz EXCLK * 42 = 1008 MHz) */
142 jz_writef(CPM_APCR, BS(1), PLLM(41), PLLN(0), PLLOD(0), ENABLE(1));
143 while(jz_readf(CPM_APCR, ON) == 0);
144
145 /* System clock setup -- common to Rockbox and FiiO firmware
146 * ----
147 * CPU at 1 GHz, L2 cache at 500 MHz
148 * AHB0 and AHB2 and 200 MHz
149 * PCLK at 100 MHz
150 * DDR at 200 MHz
151 */
152 clk_set_ccr_div(1, 2, 5, 5, 10);
153 clk_set_ccr_mux(CLKMUX_SCLK_A(APLL) | CLKMUX_CPU(SCLK_A) |
154 CLKMUX_AHB0(SCLK_A) | CLKMUX_AHB2(SCLK_A));
155
156 if(bootopt == SPL_BOOTOPT_ROCKBOX) {
157 /* We don't use MPLL in Rockbox, so switch DDR memory to APLL */
158 clk_set_ddr(X1000_CLK_SCLK_A, 5);
159
160 /* Turn off MPLL */
161 jz_writef(CPM_MPCR, ENABLE(0));
162 } else {
163 /* TODO: Original firmware needs a lot of other clocks turned on */
164 }
165}