]>
Commit | Line | Data |
---|---|---|
83d290c5 | 1 | /* SPDX-License-Identifier: GPL-2.0+ */ |
11f4dc15 SG |
2 | /* |
3 | * Copyright (c) 2015 Google, Inc | |
4 | * Written by Simon Glass <[email protected]> | |
11f4dc15 SG |
5 | */ |
6 | ||
7 | #ifndef __CPU_H | |
8 | #define __CPU_H | |
9 | ||
10 | /** | |
11 | * struct cpu_platdata - platform data for a CPU | |
50d188b9 MS |
12 | * @cpu_id: Platform-specific way of identifying the CPU. |
13 | * @ucode_version: Microcode version, if CPU_FEAT_UCODE is set | |
14 | * @device_id: Driver-defined device identifier | |
15 | * @family: DMTF CPU Family identifier | |
16 | * @id: DMTF CPU Processor identifier | |
b8596947 BM |
17 | * @timebase_freq: the current frequency at which the cpu timer timebase |
18 | * registers are updated (in Hz) | |
11f4dc15 SG |
19 | * |
20 | * This can be accessed with dev_get_parent_platdata() for any UCLASS_CPU | |
21 | * device. | |
11f4dc15 SG |
22 | */ |
23 | struct cpu_platdata { | |
24 | int cpu_id; | |
740d5d34 SG |
25 | int ucode_version; |
26 | ulong device_id; | |
50d188b9 MS |
27 | u16 family; |
28 | u32 id[2]; | |
b8596947 | 29 | u32 timebase_freq; |
11f4dc15 SG |
30 | }; |
31 | ||
32 | /* CPU features - mostly just a placeholder for now */ | |
33 | enum { | |
34 | CPU_FEAT_L1_CACHE = 0, /* Supports level 1 cache */ | |
35 | CPU_FEAT_MMU = 1, /* Supports virtual memory */ | |
740d5d34 SG |
36 | CPU_FEAT_UCODE = 2, /* Requires/uses microcode */ |
37 | CPU_FEAT_DEVICE_ID = 3, /* Provides a device ID */ | |
11f4dc15 SG |
38 | |
39 | CPU_FEAT_COUNT, | |
40 | }; | |
41 | ||
42 | /** | |
43 | * struct cpu_info - Information about a CPU | |
44 | * | |
45 | * @cpu_freq: Current CPU frequency in Hz | |
46 | * @features: Flags for supported CPU features | |
47 | */ | |
48 | struct cpu_info { | |
49 | ulong cpu_freq; | |
50 | ulong features; | |
51 | }; | |
52 | ||
53 | struct cpu_ops { | |
54 | /** | |
55 | * get_desc() - Get a description string for a CPU | |
56 | * | |
57 | * @dev: Device to check (UCLASS_CPU) | |
58 | * @buf: Buffer to place string | |
59 | * @size: Size of string space | |
60 | * @return 0 if OK, -ENOSPC if buffer is too small, other -ve on error | |
61 | */ | |
62 | int (*get_desc)(struct udevice *dev, char *buf, int size); | |
63 | ||
64 | /** | |
65 | * get_info() - Get information about a CPU | |
66 | * | |
67 | * @dev: Device to check (UCLASS_CPU) | |
68 | * @info: Returns CPU info | |
69 | * @return 0 if OK, -ve on error | |
70 | */ | |
71 | int (*get_info)(struct udevice *dev, struct cpu_info *info); | |
780bfdd3 BM |
72 | |
73 | /** | |
74 | * get_count() - Get number of CPUs | |
75 | * | |
76 | * @dev: Device to check (UCLASS_CPU) | |
77 | * @return CPU count if OK, -ve on error | |
78 | */ | |
79 | int (*get_count)(struct udevice *dev); | |
94eaa79c AG |
80 | |
81 | /** | |
82 | * get_vendor() - Get vendor name of a CPU | |
83 | * | |
84 | * @dev: Device to check (UCLASS_CPU) | |
85 | * @buf: Buffer to place string | |
86 | * @size: Size of string space | |
87 | * @return 0 if OK, -ENOSPC if buffer is too small, other -ve on error | |
88 | */ | |
89 | int (*get_vendor)(struct udevice *dev, char *buf, int size); | |
11f4dc15 SG |
90 | }; |
91 | ||
92 | #define cpu_get_ops(dev) ((struct cpu_ops *)(dev)->driver->ops) | |
93 | ||
94 | /** | |
95 | * cpu_get_desc() - Get a description string for a CPU | |
11f4dc15 SG |
96 | * @dev: Device to check (UCLASS_CPU) |
97 | * @buf: Buffer to place string | |
98 | * @size: Size of string space | |
50d188b9 MS |
99 | * |
100 | * Return: 0 if OK, -ENOSPC if buffer is too small, other -ve on error | |
11f4dc15 SG |
101 | */ |
102 | int cpu_get_desc(struct udevice *dev, char *buf, int size); | |
103 | ||
104 | /** | |
105 | * cpu_get_info() - Get information about a CPU | |
11f4dc15 SG |
106 | * @dev: Device to check (UCLASS_CPU) |
107 | * @info: Returns CPU info | |
50d188b9 MS |
108 | * |
109 | * Return: 0 if OK, -ve on error | |
11f4dc15 SG |
110 | */ |
111 | int cpu_get_info(struct udevice *dev, struct cpu_info *info); | |
112 | ||
780bfdd3 BM |
113 | /** |
114 | * cpu_get_count() - Get number of CPUs | |
780bfdd3 | 115 | * @dev: Device to check (UCLASS_CPU) |
50d188b9 MS |
116 | * |
117 | * Return: CPU count if OK, -ve on error | |
780bfdd3 BM |
118 | */ |
119 | int cpu_get_count(struct udevice *dev); | |
120 | ||
94eaa79c AG |
121 | /** |
122 | * cpu_get_vendor() - Get vendor name of a CPU | |
94eaa79c AG |
123 | * @dev: Device to check (UCLASS_CPU) |
124 | * @buf: Buffer to place string | |
125 | * @size: Size of string space | |
50d188b9 MS |
126 | * |
127 | * Return: 0 if OK, -ENOSPC if buffer is too small, other -ve on error | |
94eaa79c AG |
128 | */ |
129 | int cpu_get_vendor(struct udevice *dev, char *buf, int size); | |
130 | ||
57370de3 MS |
131 | /** |
132 | * cpu_probe_all() - Probe all available CPUs | |
133 | * | |
134 | * Return: 0 if OK, -ve on error | |
135 | */ | |
136 | int cpu_probe_all(void); | |
137 | ||
11f4dc15 | 138 | #endif |