Rev 3771 | Rev 3798 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 3771 | Rev 3783 | ||
---|---|---|---|
Line 38... | Line 38... | ||
38 | #include <arch.h> |
38 | #include <arch.h> |
39 | #include <genarch/ofw/ofw_tree.h> |
39 | #include <genarch/ofw/ofw_tree.h> |
40 | #include <arch/drivers/tick.h> |
40 | #include <arch/drivers/tick.h> |
41 | #include <print.h> |
41 | #include <print.h> |
42 | #include <arch/cpu_node.h> |
42 | #include <arch/cpu_node.h> |
- | 43 | #include <arch/sun4v/md.h> |
|
- | 44 | #include <arch/sun4v/hypercall.h> |
|
43 | 45 | ||
44 | /** Perform sparc64 specific initialization of the processor structure for the |
46 | /** Perform sparc64 specific initialization of the processor structure for the |
45 | * current processor. |
47 | * current processor. |
46 | */ |
48 | */ |
47 | void cpu_arch_init(void) |
49 | void cpu_arch_init(void) |
48 | { |
50 | { |
- | 51 | uint64_t myid; |
|
- | 52 | __hypercall_fast_ret1(0, 0, 0, 0, 0, CPU_MYID, &myid); |
|
- | 53 | ||
- | 54 | md_node_t node = md_get_root(); |
|
- | 55 | ||
49 | // TODO: detect the real frequency as soon as MD walkthrough is implemented |
56 | /* walk through MD, find the current CPU node & its clock-frequency */ |
- | 57 | while (true) { |
|
- | 58 | ||
- | 59 | if (!md_next_node(&node, "cpu")) { |
|
- | 60 | panic("Could not determine CPU frequency."); |
|
- | 61 | } |
|
- | 62 | ||
- | 63 | uint64_t id = 0; |
|
- | 64 | md_get_integer_property(node, "id", &id); |
|
- | 65 | if (id == myid) { |
|
50 | CPU->arch.clock_frequency = 5000; |
66 | uint64_t clock_frequency = 0; |
- | 67 | md_get_integer_property(node, "clock-frequency", |
|
- | 68 | &clock_frequency); |
|
- | 69 | CPU->arch.clock_frequency = clock_frequency; |
|
- | 70 | break; |
|
- | 71 | } |
|
- | 72 | } |
|
- | 73 | ||
51 | tick_init(); |
74 | tick_init(); |
52 | } |
75 | } |
53 | 76 | ||
- | 77 | /** |
|
54 | /** Implemented as an empty function as accessing the VER register is |
78 | * Implemented as an empty function as accessing the VER register is |
55 | * a hyperprivileged operation on sun4v. |
79 | * a hyperprivileged operation on sun4v. |
56 | */ |
80 | */ |
57 | void cpu_identify(void) |
81 | void cpu_identify(void) |
58 | { |
82 | { |
59 | } |
83 | } |