source: mainline/kernel/arch/sparc64/src/cpu/cpu.c@ b63f8569

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since b63f8569 was cc85fb9, checked in by Jakub Jermar <jakub@…>, 18 years ago

Indentation and formatting fixes.

  • Property mode set to 100644
File size: 3.7 KB
RevLine 
[2cf87e50]1/*
[df4ed85]2 * Copyright (c) 2005 Jakub Jermar
[2cf87e50]3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *
9 * - Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * - Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * - The name of the author may not be used to endorse or promote products
15 * derived from this software without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
28
[1bb2e7a]29/** @addtogroup sparc64
[b45c443]30 * @{
31 */
32/** @file
33 */
34
[2cf87e50]35#include <cpu.h>
36#include <arch.h>
[45b26dad]37#include <genarch/ofw/ofw_tree.h>
38#include <arch/drivers/tick.h>
[b3f8fb7]39#include <print.h>
[2cf87e50]40
[7e7c8747]41/** Perform sparc64 specific initialization of the processor structure for the
42 * current processor.
43 */
[2cf87e50]44void cpu_arch_init(void)
45{
[45b26dad]46 ofw_tree_node_t *node;
47 uint32_t mid;
48 uint32_t clock_frequency = 0;
49 upa_config_t upa_config;
50
51 upa_config.value = upa_config_read();
[a9ac978]52 CPU->arch.mid = upa_config.mid;
53
[84060e2]54 /*
55 * Detect processor frequency.
56 */
[45b26dad]57 node = ofw_tree_find_child_by_device_type(ofw_tree_lookup("/"), "cpu");
58 while (node) {
59 ofw_tree_property_t *prop;
60
61 prop = ofw_tree_getprop(node, "upa-portid");
62 if (prop && prop->value) {
63 mid = *((uint32_t *) prop->value);
[a9ac978]64 if (mid == CPU->arch.mid) {
[7e7c8747]65 prop = ofw_tree_getprop(node,
[cc85fb9]66 "clock-frequency");
[45b26dad]67 if (prop && prop->value)
[7e7c8747]68 clock_frequency = *((uint32_t *)
[cc85fb9]69 prop->value);
[45b26dad]70 }
71 }
72 node = ofw_tree_find_peer_by_device_type(node, "cpu");
73 }
74
75 CPU->arch.clock_frequency = clock_frequency;
76 tick_init();
[2cf87e50]77}
78
[45b26dad]79/** Read version information from the current processor. */
[2cf87e50]80void cpu_identify(void)
81{
82 CPU->arch.ver.value = ver_read();
83}
84
[45b26dad]85/** Print version information for a processor.
[a9ac978]86 *
87 * This function is called by the bootstrap processor.
[45b26dad]88 *
[7e7c8747]89 * @param m Processor structure of the CPU for which version information is to
90 * be printed.
[45b26dad]91 */
[2cf87e50]92void cpu_print_report(cpu_t *m)
93{
94 char *manuf, *impl;
95
[a9ac978]96 switch (m->arch.ver.manuf) {
97 case MANUF_FUJITSU:
[2cf87e50]98 manuf = "Fujitsu";
99 break;
[a9ac978]100 case MANUF_ULTRASPARC:
[2cf87e50]101 manuf = "UltraSPARC";
102 break;
[a9ac978]103 case MANUF_SUN:
[2cf87e50]104 manuf = "Sun";
105 break;
[a9ac978]106 default:
[2cf87e50]107 manuf = "Unknown";
108 break;
109 }
110
111 switch (CPU->arch.ver.impl) {
[a9ac978]112 case IMPL_ULTRASPARCI:
[2cf87e50]113 impl = "UltraSPARC I";
114 break;
[a9ac978]115 case IMPL_ULTRASPARCII:
[2cf87e50]116 impl = "UltraSPARC II";
117 break;
[a9ac978]118 case IMPL_ULTRASPARCII_I:
[2cf87e50]119 impl = "UltraSPARC IIi";
120 break;
[a9ac978]121 case IMPL_ULTRASPARCII_E:
[2cf87e50]122 impl = "UltraSPARC IIe";
123 break;
[a9ac978]124 case IMPL_ULTRASPARCIII:
[2cf87e50]125 impl = "UltraSPARC III";
126 break;
[a9ac978]127 case IMPL_ULTRASPARCIV_PLUS:
[2cf87e50]128 impl = "UltraSPARC IV+";
129 break;
[a9ac978]130 case IMPL_SPARC64V:
[2cf87e50]131 impl = "SPARC 64V";
132 break;
[a9ac978]133 default:
[2cf87e50]134 impl = "Unknown";
135 break;
136 }
137
[7e7c8747]138 printf("cpu%d: manuf=%s, impl=%s, mask=%d (%dMHz)\n", m->id, manuf,
139 impl, m->arch.ver.mask, m->arch.clock_frequency / 1000000);
[2cf87e50]140}
[b45c443]141
[1bb2e7a]142/** @}
[b45c443]143 */
Note: See TracBrowser for help on using the repository browser.