9
#include <drivers/at91sam7s256.h>
10
#include <drivers/watchdog.h>
11
#include <framework/mod/options.h>
14
#define CONFIG_SYS_CLK_MUL OPTION_GET(NUMBER, sys_clk_mul)
15
#define CONFIG_SYS_CLK_DIV OPTION_GET(NUMBER, sys_clk_div)
17
static void initialize_main_clock(void) {
18
REG_STORE(AT91C_CKGR_MOR,
19
AT91C_CKGR_MOSCEN | (AT91C_CKGR_OSCOUNT & (6 << 8)));
20
while (!(REG_LOAD(AT91C_PMC_SR) & AT91C_PMC_MOSCS)) {}
22
REG_STORE(AT91C_CKGR_PLLR,
23
(AT91C_CKGR_MUL & (CONFIG_SYS_CLK_MUL << AT91C_CKGR_MUL_OFFSET))
24
| (AT91C_CKGR_DIV & (CONFIG_SYS_CLK_DIV << AT91C_CKGR_DIV_OFFSET))
25
| (28 << AT91C_CKGR_PLLCOUNT_OFFSET));
26
while (!(REG_LOAD(AT91C_PMC_SR) & AT91C_PMC_LOCK)) {}
28
REG_STORE(AT91C_PMC_MCKR, AT91C_PMC_PRES_CLK_2);
29
while (!(REG_LOAD(AT91C_PMC_SR) & AT91C_PMC_MCKRDY)) {}
31
REG_STORE(AT91C_PMC_MCKR, AT91C_PMC_CSS_PLL_CLK | AT91C_PMC_PRES_CLK_2);
32
while (!(REG_LOAD(AT91C_PMC_SR) & AT91C_PMC_MCKRDY)) {}
35
static void initialize_memory_controller(void) {
37
REG_STORE(AT91C_MC_FMR, AT91C_MC_FWS_1FWS | (AT91C_MC_FMCN & (72 < 16)));
40
void platform_init(void) {
42
initialize_main_clock();
43
initialize_memory_controller();