]>
Commit | Line | Data |
---|---|---|
0db5bca8 WD |
1 | /* |
2 | * (C) Copyright 2003 | |
3 | * Martin Winistoerfer, martinwinistoerfer@gmx.ch. | |
4 | * | |
1a459660 | 5 | * SPDX-License-Identifier: GPL-2.0+ |
0db5bca8 WD |
6 | */ |
7 | ||
8 | /* | |
9 | * File: speed.c | |
8bde7f77 | 10 | * |
0db5bca8 | 11 | * Discription: Provides cpu speed calculation |
8bde7f77 | 12 | * |
0db5bca8 WD |
13 | */ |
14 | ||
15 | #include <common.h> | |
16 | #include <mpc5xx.h> | |
17 | #include <asm/processor.h> | |
18 | ||
d87080b7 WD |
19 | DECLARE_GLOBAL_DATA_PTR; |
20 | ||
0db5bca8 WD |
21 | /* |
22 | * Get cpu and bus clock | |
23 | */ | |
24 | int get_clocks (void) | |
25 | { | |
6d0f6bcf | 26 | volatile immap_t *immr = (immap_t *) CONFIG_SYS_IMMR; |
0db5bca8 WD |
27 | |
28 | #ifndef CONFIG_5xx_GCLK_FREQ | |
29 | uint divf = (immr->im_clkrst.car_plprcr & PLPRCR_DIVF_MSK); | |
30 | uint mf = ((immr->im_clkrst.car_plprcr & PLPRCR_MF_MSK) >> PLPRCR_MF_SHIFT); | |
31 | ulong vcoout; | |
32 | ||
6d0f6bcf | 33 | vcoout = (CONFIG_SYS_OSC_CLK / (divf + 1)) * (mf + 1) * 2; |
0db5bca8 WD |
34 | if(immr->im_clkrst.car_plprcr & PLPRCR_CSRC_MSK) { |
35 | gd->cpu_clk = vcoout / (2^(((immr->im_clkrst.car_sccr & SCCR_DFNL_MSK) >> SCCR_DFNL_SHIFT) + 1)); | |
36 | } else { | |
53677ef1 WD |
37 | gd->cpu_clk = vcoout / (2^(immr->im_clkrst.car_sccr & SCCR_DFNH_MSK)); |
38 | } | |
8bde7f77 | 39 | |
0db5bca8 WD |
40 | #else /* CONFIG_5xx_GCLK_FREQ */ |
41 | gd->bus_clk = CONFIG_5xx_GCLK_FREQ; | |
42 | #endif /* CONFIG_5xx_GCLK_FREQ */ | |
43 | ||
44 | if ((immr->im_clkrst.car_sccr & SCCR_EBDF11) == 0) { | |
45 | /* No Bus Divider active */ | |
46 | gd->bus_clk = gd->cpu_clk; | |
47 | } else { | |
48 | /* CLKOUT is GCLK / 2 */ | |
49 | gd->bus_clk = gd->cpu_clk / 2; | |
50 | } | |
51 | return (0); | |
52 | } |