source: SVN/rincon/u-boot/cpu/74xx_7xx/speed.c @ 55

Last change on this file since 55 was 55, checked in by Tim Harvey, 22 months ago

rincon: added latest u-boot source

restored form server backup

Signed-off-by: Tim Harvey <tharvey@…>

File size: 4.5 KB
Line 
1/*
2 * (C) Copyright 2000-2002
3 * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
4 *
5 * See file CREDITS for list of people who contributed to this
6 * project.
7 *
8 * This program is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public License as
10 * published by the Free Software Foundation; either version 2 of
11 * the License, or (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
21 * MA 02111-1307 USA
22 */
23
24#include <common.h>
25#include <74xx_7xx.h>
26#include <asm/processor.h>
27
28#ifdef CONFIG_AMIGAONEG3SE
29#include "../board/MAI/AmigaOneG3SE/via686.h"
30#endif
31
32DECLARE_GLOBAL_DATA_PTR;
33
34extern unsigned long get_board_bus_clk (void);
35
36static const int hid1_multipliers_x_10[] = {
37        25,     /* 0000 - 2.5x */
38        75,     /* 0001 - 7.5x */
39        70,     /* 0010 - 7x */
40        10,     /* 0011 - bypass */
41        20,     /* 0100 - 2x */
42        65,     /* 0101 - 6.5x */
43        100,    /* 0110 - 10x */
44        45,     /* 0111 - 4.5x */
45        30,     /* 1000 - 3x */
46        55,     /* 1001 - 5.5x */
47        40,     /* 1010 - 4x */
48        50,     /* 1011 - 5x */
49        80,     /* 1100 - 8x */
50        60,     /* 1101 - 6x */
51        35,     /* 1110 - 3.5x */
52        0       /* 1111 - off */
53};
54
55/* PLL_CFG[0:4] table for cpu 7448/7447A/7455/7457 */
56static const int hid1_74xx_multipliers_x_10[] = {
57        115,    /* 00000 - 11.5x  */
58        170,    /* 00001 - 17x    */
59        75,     /* 00010 -  7.5x  */
60        150,    /* 00011 - 15x    */
61        70,     /* 00100 -  7x    */
62        180,    /* 00101 - 18x    */
63        10,     /* 00110 - bypass */
64        200,    /* 00111 - 20x    */
65        20,     /* 01000 -  2x    */
66        210,    /* 01001 - 21x    */
67        65,     /* 01010 -  6.5x  */
68        130,    /* 01011 - 13x    */
69        85,     /* 01100 -  8.5x  */
70        240,    /* 01101 - 24x    */
71        95,     /* 01110 -  9.5x  */
72        90,     /* 01111 -  9x    */
73        30,     /* 10000 -  3x    */
74        105,    /* 10001 - 10.5x  */
75        55,     /* 10010 -  5.5x  */
76        110,    /* 10011 - 11x    */
77        40,     /* 10100 -  4x    */
78        100,    /* 10101 - 10x    */
79        50,     /* 10110 -  5x    */
80        120,    /* 10111 - 12x    */
81        80,     /* 11000 -  8x    */
82        140,    /* 11001 - 14x    */
83        60,     /* 11010 -  6x    */
84        160,    /* 11011 - 16x    */
85        135,    /* 11100 - 13.5x  */
86        280,    /* 11101 - 28x    */
87        0,      /* 11110 - off    */
88        125     /* 11111 - 12.5x  */
89};
90
91static const int hid1_fx_multipliers_x_10[] = {
92        00,     /* 0000 - off */
93        00,     /* 0001 - off */
94        10,     /* 0010 - bypass */
95        10,     /* 0011 - bypass */
96        20,     /* 0100 - 2x */
97        25,     /* 0101 - 2.5x */
98        30,     /* 0110 - 3x */
99        35,     /* 0111 - 3.5x */
100        40,     /* 1000 - 4x */
101        45,     /* 1001 - 4.5x */
102        50,     /* 1010 - 5x */
103        55,     /* 1011 - 5.5x */
104        60,     /* 1100 - 6x */
105        65,     /* 1101 - 6.5x */
106        70,     /* 1110 - 7x */
107        75,     /* 1111 - 7.5 */
108        80,     /* 10000 - 8x */
109        85,     /* 10001 - 8.5x */
110        90,     /* 10010 - 9x */
111        95,     /* 10011 - 9.5x */
112        100,    /* 10100 - 10x */
113        110,    /* 10101 - 11x */
114        120,    /* 10110 - 12x */
115};
116
117
118/* ------------------------------------------------------------------------- */
119
120/*
121 * Measure CPU clock speed (core clock GCLK1, GCLK2)
122 *
123 * (Approx. GCLK frequency in Hz)
124 */
125
126int get_clocks (void)
127{
128        ulong clock = 0;
129
130#ifdef CFG_BUS_CLK
131        gd->bus_clk = CFG_BUS_CLK;      /* bus clock is a fixed frequency */
132#else
133        gd->bus_clk = get_board_bus_clk ();     /* bus clock is configurable */
134#endif
135
136        /* calculate the clock frequency based upon the CPU type */
137        switch (get_cpu_type()) {
138        case CPU_7447A:
139        case CPU_7448:
140        case CPU_7455:
141        case CPU_7457:
142                /*
143                 * Make sure division is done before multiplication to prevent 32-bit
144                 * arithmetic overflows which will cause a negative number
145                 */
146                clock = (gd->bus_clk / 10) *
147                        hid1_74xx_multipliers_x_10[(get_hid1 () >> 12) & 0x1F];
148                break;
149
150        case CPU_750GX:
151        case CPU_750FX:
152                clock = gd->bus_clk *
153                        hid1_fx_multipliers_x_10[get_hid1 () >> 27] / 10;
154                break;
155
156        case CPU_7450:
157        case CPU_740:
158        case CPU_740P:
159        case CPU_745:
160        case CPU_750CX:
161        case CPU_750:
162        case CPU_750P:
163        case CPU_755:
164        case CPU_7400:
165        case CPU_7410:
166                /*
167                 * Make sure division is done before multiplication to prevent 32-bit
168                 * arithmetic overflows which will cause a negative number
169                 */
170                clock = (gd->bus_clk / 10) *
171                        hid1_multipliers_x_10[get_hid1 () >> 28];
172                break;
173
174        case CPU_UNKNOWN:
175               printf ("get_gclk_freq(): unknown CPU type\n");
176               clock = 0;
177               return (1);
178        }
179
180        gd->cpu_clk = clock;
181
182        return (0);
183}
184
185/* ------------------------------------------------------------------------- */
Note: See TracBrowser for help on using the repository browser.