source: SVN/rincon/u-boot/cpu/mips/incaip_clock.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: 3.3 KB
Line 
1/*
2 * (C) Copyright 2003
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 <asm/inca-ip.h>
26
27
28/*******************************************************************************
29*
30* get_cpuclk - returns the frequency of the CPU.
31*
32* Gets the value directly from the INCA-IP hardware.
33*
34* RETURNS:
35*          150.000.000 for 150 MHz
36*          133.333.333 for 133 Mhz (= 400MHz/3)
37*          100.000.000 for 100 Mhz (= 400MHz/4)
38* NOTE:
39*   This functions should be used by the hardware driver to get the correct
40*   frequency of the CPU. Don't use the macros, which are set to init the CPU
41*   frequency in the ROM code.
42*/
43uint incaip_get_cpuclk (void)
44{
45        /*-------------------------------------------------------------------------*/
46        /* CPU Clock Input Multiplexer (MUX I)                                     */
47        /* Multiplexer MUX I selects the maximum input clock to the CPU.           */
48        /*-------------------------------------------------------------------------*/
49        if (*((volatile ulong *) INCA_IP_CGU_CGU_MUXCR) &
50            INCA_IP_CGU_CGU_MUXCR_MUXI) {
51                /* MUX I set to 150 MHz clock */
52                return 150000000;
53        } else {
54                /* MUX I set to 100/133 MHz clock */
55                if (*((volatile ulong *) INCA_IP_CGU_CGU_DIVCR) & 0x40) {
56                        /* Division value is 1/3, maximum CPU operating */
57                        /* frequency is 133.3 MHz                       */
58                        return 133333333;
59                } else {
60                        /* Division value is 1/4, maximum CPU operating */
61                        /* frequency is 100 MHz                         */
62                        return 100000000;
63                }
64        }
65}
66
67/*******************************************************************************
68*
69* get_fpiclk - returns the frequency of the FPI bus.
70*
71* Gets the value directly from the INCA-IP hardware.
72*
73* RETURNS: Frquency in Hz
74*
75* NOTE:
76*   This functions should be used by the hardware driver to get the correct
77*   frequency of the CPU. Don't use the macros, which are set to init the CPU
78*   frequency in the ROM code.
79*   The calculation for the
80*/
81uint incaip_get_fpiclk (void)
82{
83        uint clkCPU;
84
85        clkCPU = incaip_get_cpuclk ();
86
87        switch (*((volatile ulong *) INCA_IP_CGU_CGU_DIVCR) & 0xC) {
88        case 0x4:
89                return clkCPU >> 1;     /* devided by 2 */
90                break;
91        case 0x8:
92                return clkCPU >> 2;     /* devided by 4 */
93                break;
94        default:
95                return clkCPU;
96                break;
97        }
98}
99
100int incaip_set_cpuclk (void)
101{
102        extern void ebu_init(long);
103        extern void cgu_init(long);
104        extern void sdram_init(long);
105        char tmp[64];
106        ulong cpuclk;
107
108        if (getenv_r ("cpuclk", tmp, sizeof (tmp)) > 0) {
109                cpuclk = simple_strtoul (tmp, NULL, 10) * 1000000;
110                cgu_init (cpuclk);
111                ebu_init (cpuclk);
112                sdram_init (cpuclk);
113        }
114
115        return 0;
116}
Note: See TracBrowser for help on using the repository browser.