blob: 02c9a44143eb11e2efa3486188f056e95cf8a34d [file] [log] [blame]
George Keishinge7e91712021-09-03 11:28:44 -05001#!/usr/bin/env python3
Chris Austenb29d2e82016-06-07 12:25:35 -05002
Patrick Williams20f38712022-12-08 06:18:26 -06003HOME_PATH = "./"
4CACHE_PATH = "/var/cache/obmc/"
Chris Austenb29d2e82016-06-07 12:25:35 -05005FLASH_DOWNLOAD_PATH = "/tmp"
6GPIO_BASE = 320
7SYSTEM_NAME = "Palmetto"
8
9
Gunnar Millsdca35792018-03-26 10:05:38 -050010# System states
11# state can change to next state in 2 ways:
12# - a process emits a GotoSystemState signal with state name to goto
13# - objects specified in EXIT_STATE_DEPEND have started
Chris Austenb29d2e82016-06-07 12:25:35 -050014SYSTEM_STATES = [
Patrick Williams20f38712022-12-08 06:18:26 -060015 "BASE_APPS",
16 "BMC_STARTING",
17 "BMC_READY",
18 "HOST_POWERING_ON",
19 "HOST_POWERED_ON",
20 "HOST_BOOTING",
21 "HOST_BOOTED",
22 "HOST_POWERED_OFF",
Chris Austenb29d2e82016-06-07 12:25:35 -050023]
24
25EXIT_STATE_DEPEND = {
Patrick Williams20f38712022-12-08 06:18:26 -060026 "BASE_APPS": {
27 "/org/openbmc/sensors": 0,
Gunnar Millsdca35792018-03-26 10:05:38 -050028 },
Patrick Williams20f38712022-12-08 06:18:26 -060029 "BMC_STARTING": {
30 "/org/openbmc/control/chassis0": 0,
31 "/org/openbmc/control/power0": 0,
32 "/org/openbmc/control/led/identify": 0,
33 "/org/openbmc/control/host0": 0,
34 "/org/openbmc/control/flash/bios": 0,
35 },
Chris Austenb29d2e82016-06-07 12:25:35 -050036}
37
Gunnar Millsdca35792018-03-26 10:05:38 -050038# method will be called when state is entered
Chris Austenb29d2e82016-06-07 12:25:35 -050039ENTER_STATE_CALLBACK = {
Patrick Williams20f38712022-12-08 06:18:26 -060040 "HOST_POWERED_ON": {
41 "boot": {
42 "bus_name": "org.openbmc.control.Host",
43 "obj_name": "/org/openbmc/control/host0",
44 "interface_name": "org.openbmc.control.Host",
Gunnar Millsdca35792018-03-26 10:05:38 -050045 }
46 },
Patrick Williams20f38712022-12-08 06:18:26 -060047 "BMC_READY": {
48 "setOn": {
49 "bus_name": "org.openbmc.control.led",
50 "obj_name": "/org/openbmc/control/led/identify",
51 "interface_name": "org.openbmc.Led",
Gunnar Millsdca35792018-03-26 10:05:38 -050052 },
Patrick Williams20f38712022-12-08 06:18:26 -060053 "init": {
54 "bus_name": "org.openbmc.control.Flash",
55 "obj_name": "/org/openbmc/control/flash/bios",
56 "interface_name": "org.openbmc.Flash",
Gunnar Millsdca35792018-03-26 10:05:38 -050057 },
Patrick Williams20f38712022-12-08 06:18:26 -060058 },
Chris Austenb29d2e82016-06-07 12:25:35 -050059}
60
61APPS = {
Patrick Williams20f38712022-12-08 06:18:26 -060062 "startup_hacks": {
63 "system_state": "BASE_APPS",
64 "start_process": True,
65 "monitor_process": False,
66 "process_name": "startup_hacks.sh",
Gunnar Millsdca35792018-03-26 10:05:38 -050067 },
Patrick Williams20f38712022-12-08 06:18:26 -060068 "inventory": {
69 "system_state": "BMC_STARTING",
70 "start_process": True,
71 "monitor_process": True,
72 "process_name": "inventory_items.py",
73 "args": [SYSTEM_NAME],
Gunnar Millsdca35792018-03-26 10:05:38 -050074 },
Patrick Williams20f38712022-12-08 06:18:26 -060075 "pcie_present": {
76 "system_state": "HOST_POWERED_ON",
77 "start_process": False,
78 "monitor_process": False,
79 "process_name": "pcie_slot_present.exe",
Gunnar Millsdca35792018-03-26 10:05:38 -050080 },
Patrick Williams20f38712022-12-08 06:18:26 -060081 "virtual_sensors": {
82 "system_state": "BMC_STARTING",
83 "start_process": True,
84 "monitor_process": True,
85 "process_name": "hwmon.py",
86 "args": [SYSTEM_NAME],
Gunnar Millsdca35792018-03-26 10:05:38 -050087 },
Patrick Williams20f38712022-12-08 06:18:26 -060088 "sensor_manager": {
89 "system_state": "BASE_APPS",
90 "start_process": True,
91 "monitor_process": True,
92 "process_name": "sensor_manager2.py",
93 "args": [SYSTEM_NAME],
Gunnar Millsdca35792018-03-26 10:05:38 -050094 },
Patrick Williams20f38712022-12-08 06:18:26 -060095 "host_watchdog": {
96 "system_state": "BMC_STARTING",
97 "start_process": True,
98 "monitor_process": True,
99 "process_name": "host_watchdog.exe",
Gunnar Millsdca35792018-03-26 10:05:38 -0500100 },
Patrick Williams20f38712022-12-08 06:18:26 -0600101 "power_control": {
102 "system_state": "BMC_STARTING",
103 "start_process": True,
104 "monitor_process": True,
105 "process_name": "power_control.exe",
106 "args": ["3000", "10"],
Gunnar Millsdca35792018-03-26 10:05:38 -0500107 },
Patrick Williams20f38712022-12-08 06:18:26 -0600108 "power_button": {
109 "system_state": "BMC_STARTING",
110 "start_process": False,
111 "monitor_process": False,
112 "process_name": "button_power.exe",
Gunnar Millsdca35792018-03-26 10:05:38 -0500113 },
Patrick Williams20f38712022-12-08 06:18:26 -0600114 "led_control": {
115 "system_state": "BMC_STARTING",
116 "start_process": True,
117 "monitor_process": True,
118 "process_name": "led_controller.exe",
Gunnar Millsdca35792018-03-26 10:05:38 -0500119 },
Patrick Williams20f38712022-12-08 06:18:26 -0600120 "flash_control": {
121 "system_state": "BMC_STARTING",
122 "start_process": True,
123 "monitor_process": True,
124 "process_name": "flash_bios.exe",
Gunnar Millsdca35792018-03-26 10:05:38 -0500125 },
Patrick Williams20f38712022-12-08 06:18:26 -0600126 "bmc_flash_control": {
127 "system_state": "BMC_STARTING",
128 "start_process": True,
129 "monitor_process": True,
130 "process_name": "bmc_update.py",
Gunnar Millsdca35792018-03-26 10:05:38 -0500131 },
Patrick Williams20f38712022-12-08 06:18:26 -0600132 "download_manager": {
133 "system_state": "BMC_STARTING",
134 "start_process": True,
135 "monitor_process": True,
136 "process_name": "download_manager.py",
137 "args": [SYSTEM_NAME],
Gunnar Millsdca35792018-03-26 10:05:38 -0500138 },
Patrick Williams20f38712022-12-08 06:18:26 -0600139 "host_control": {
140 "system_state": "BMC_STARTING",
141 "start_process": True,
142 "monitor_process": True,
143 "process_name": "control_host.exe",
Gunnar Millsdca35792018-03-26 10:05:38 -0500144 },
Patrick Williams20f38712022-12-08 06:18:26 -0600145 "chassis_control": {
146 "system_state": "BMC_STARTING",
147 "start_process": True,
148 "monitor_process": True,
149 "process_name": "chassis_control.py",
Gunnar Millsdca35792018-03-26 10:05:38 -0500150 },
Patrick Williams20f38712022-12-08 06:18:26 -0600151 "bmc_control": {
152 "system_state": "BMC_STARTING",
153 "start_process": True,
154 "monitor_process": True,
155 "process_name": "control_bmc.exe",
156 },
Chris Austenb29d2e82016-06-07 12:25:35 -0500157}
158
159CACHED_INTERFACES = {
Gunnar Millsdca35792018-03-26 10:05:38 -0500160 "org.openbmc.InventoryItem": True,
161 "org.openbmc.control.Chassis": True,
162}
Patrick Williams20f38712022-12-08 06:18:26 -0600163INVENTORY_ROOT = "/org/openbmc/inventory"
Chris Austenb29d2e82016-06-07 12:25:35 -0500164
165FRU_INSTANCES = {
Patrick Williams20f38712022-12-08 06:18:26 -0600166 "<inventory_root>/system": {
167 "fru_type": "SYSTEM",
168 "is_fru": True,
169 },
170 "<inventory_root>/system/chassis": {
171 "fru_type": "SYSTEM",
172 "is_fru": True,
173 },
174 "<inventory_root>/system/chassis/motherboard": {
175 "fru_type": "MAIN_PLANAR",
176 "is_fru": True,
177 },
178 "<inventory_root>/system/chassis/fan0": {
179 "fru_type": "FAN",
180 "is_fru": True,
181 },
182 "<inventory_root>/system/chassis/fan1": {
183 "fru_type": "FAN",
184 "is_fru": True,
185 },
186 "<inventory_root>/system/chassis/fan2": {
187 "fru_type": "FAN",
188 "is_fru": True,
189 },
190 "<inventory_root>/system/chassis/fan3": {
191 "fru_type": "FAN",
192 "is_fru": True,
193 },
194 "<inventory_root>/system/chassis/fan4": {
195 "fru_type": "FAN",
196 "is_fru": True,
197 },
198 "<inventory_root>/system/chassis/motherboard/bmc": {
199 "fru_type": "BMC",
200 "is_fru": False,
201 "manufacturer": "ASPEED",
202 },
203 "<inventory_root>/system/chassis/motherboard/cpu": {
204 "fru_type": "CPU",
205 "is_fru": True,
206 },
207 "<inventory_root>/system/chassis/motherboard/cpu/core0": {
208 "fru_type": "CORE",
209 "is_fru": False,
210 },
211 "<inventory_root>/system/chassis/motherboard/cpu/core1": {
212 "fru_type": "CORE",
213 "is_fru": False,
214 },
215 "<inventory_root>/system/chassis/motherboard/cpu/core2": {
216 "fru_type": "CORE",
217 "is_fru": False,
218 },
219 "<inventory_root>/system/chassis/motherboard/cpu/core3": {
220 "fru_type": "CORE",
221 "is_fru": False,
222 },
223 "<inventory_root>/system/chassis/motherboard/cpu/core4": {
224 "fru_type": "CORE",
225 "is_fru": False,
226 },
227 "<inventory_root>/system/chassis/motherboard/cpu/core5": {
228 "fru_type": "CORE",
229 "is_fru": False,
230 },
231 "<inventory_root>/system/chassis/motherboard/cpu/core6": {
232 "fru_type": "CORE",
233 "is_fru": False,
234 },
235 "<inventory_root>/system/chassis/motherboard/cpu/core7": {
236 "fru_type": "CORE",
237 "is_fru": False,
238 },
239 "<inventory_root>/system/chassis/motherboard/cpu/core8": {
240 "fru_type": "CORE",
241 "is_fru": False,
242 },
243 "<inventory_root>/system/chassis/motherboard/cpu/core9": {
244 "fru_type": "CORE",
245 "is_fru": False,
246 },
247 "<inventory_root>/system/chassis/motherboard/cpu/core10": {
248 "fru_type": "CORE",
249 "is_fru": False,
250 },
251 "<inventory_root>/system/chassis/motherboard/cpu/core11": {
252 "fru_type": "CORE",
253 "is_fru": False,
254 },
255 "<inventory_root>/system/chassis/motherboard/membuf": {
256 "fru_type": "MEMORY_BUFFER",
257 "is_fru": False,
258 },
259 "<inventory_root>/system/chassis/motherboard/dimm0": {
260 "fru_type": "DIMM",
261 "is_fru": True,
262 },
263 "<inventory_root>/system/chassis/motherboard/dimm1": {
264 "fru_type": "DIMM",
265 "is_fru": True,
266 },
267 "<inventory_root>/system/chassis/motherboard/dimm2": {
268 "fru_type": "DIMM",
269 "is_fru": True,
270 },
271 "<inventory_root>/system/chassis/motherboard/dimm3": {
272 "fru_type": "DIMM",
273 "is_fru": True,
274 },
275 "<inventory_root>/system/chassis/io_board/pcie_slot0": {
276 "fru_type": "PCIE_CARD",
277 "is_fru": True,
278 },
279 "<inventory_root>/system/chassis/io_board/pcie_slot1": {
280 "fru_type": "PCIE_CARD",
281 "is_fru": True,
282 },
283 "<inventory_root>/system/systemevent": {
284 "fru_type": "SYSTEM_EVENT",
285 "is_fru": False,
286 },
287 "<inventory_root>/system/chassis/motherboard/refclock": {
288 "fru_type": "MAIN_PLANAR",
289 "is_fru": False,
290 },
291 "<inventory_root>/system/chassis/motherboard/pcieclock": {
292 "fru_type": "MAIN_PLANAR",
293 "is_fru": False,
294 },
295 "<inventory_root>/system/chassis/motherboard/todclock": {
296 "fru_type": "MAIN_PLANAR",
297 "is_fru": False,
298 },
299 "<inventory_root>/system/chassis/motherboard/apss": {
300 "fru_type": "MAIN_PLANAR",
301 "is_fru": False,
302 },
Chris Austenb29d2e82016-06-07 12:25:35 -0500303}
304
305ID_LOOKUP = {
Patrick Williams20f38712022-12-08 06:18:26 -0600306 "FRU": {
307 0x0D: "<inventory_root>/system/chassis",
308 0x34: "<inventory_root>/system/chassis/motherboard",
309 0x01: "<inventory_root>/system/chassis/motherboard/cpu",
310 0x02: "<inventory_root>/system/chassis/motherboard/membuf",
311 0x03: "<inventory_root>/system/chassis/motherboard/dimm0",
312 0x04: "<inventory_root>/system/chassis/motherboard/dimm1",
313 0x05: "<inventory_root>/system/chassis/motherboard/dimm2",
314 0x06: "<inventory_root>/system/chassis/motherboard/dimm3",
315 0x35: "<inventory_root>/system",
Gunnar Millsdca35792018-03-26 10:05:38 -0500316 },
Patrick Williams20f38712022-12-08 06:18:26 -0600317 "FRU_STR": {
318 "PRODUCT_15": "<inventory_root>/system",
319 "CHASSIS_2": "<inventory_root>/system/chassis",
320 "BOARD_1": "<inventory_root>/system/chassis/motherboard/cpu",
321 "BOARD_2": "<inventory_root>/system/chassis/motherboard/membuf",
322 "BOARD_14": "<inventory_root>/system/chassis/motherboard",
323 "PRODUCT_3": "<inventory_root>/system/chassis/motherboard/dimm0",
324 "PRODUCT_4": "<inventory_root>/system/chassis/motherboard/dimm1",
325 "PRODUCT_5": "<inventory_root>/system/chassis/motherboard/dimm2",
326 "PRODUCT_6": "<inventory_root>/system/chassis/motherboard/dimm3",
Gunnar Millsdca35792018-03-26 10:05:38 -0500327 },
Patrick Williams20f38712022-12-08 06:18:26 -0600328 "SENSOR": {
329 0x34: "<inventory_root>/system/chassis/motherboard",
330 0x37: "<inventory_root>/system/chassis/motherboard/refclock",
331 0x38: "<inventory_root>/system/chassis/motherboard/pcieclock",
332 0x39: "<inventory_root>/system/chassis/motherboard/todclock",
333 0x3A: "<inventory_root>/system/chassis/apss",
334 0x2F: "<inventory_root>/system/chassis/motherboard/cpu",
335 0x22: "<inventory_root>/system/chassis/motherboard/cpu/core1",
336 0x23: "<inventory_root>/system/chassis/motherboard/cpu/core2",
337 0x24: "<inventory_root>/system/chassis/motherboard/cpu/core3",
338 0x25: "<inventory_root>/system/chassis/motherboard/cpu/core4",
339 0x26: "<inventory_root>/system/chassis/motherboard/cpu/core5",
340 0x27: "<inventory_root>/system/chassis/motherboard/cpu/core6",
341 0x28: "<inventory_root>/system/chassis/motherboard/cpu/core9",
342 0x29: "<inventory_root>/system/chassis/motherboard/cpu/core10",
343 0x2A: "<inventory_root>/system/chassis/motherboard/cpu/core11",
344 0x2B: "<inventory_root>/system/chassis/motherboard/cpu/core12",
345 0x2C: "<inventory_root>/system/chassis/motherboard/cpu/core13",
346 0x2D: "<inventory_root>/system/chassis/motherboard/cpu/core14",
347 0x2E: "<inventory_root>/system/chassis/motherboard/membuf",
348 0x1E: "<inventory_root>/system/chassis/motherboard/dimm0",
349 0x1F: "<inventory_root>/system/chassis/motherboard/dimm1",
350 0x20: "<inventory_root>/system/chassis/motherboard/dimm2",
351 0x21: "<inventory_root>/system/chassis/motherboard/dimm3",
352 0x09: "/org/openbmc/sensors/host/BootCount",
353 0x05: "/org/openbmc/sensors/host/BootProgress",
354 0x08: "/org/openbmc/sensors/host/cpu0/OccStatus",
355 0x32: "/org/openbmc/sensors/host/OperatingSystemStatus",
356 0x33: "/org/openbmc/sensors/host/PowerCap",
Gunnar Millsdca35792018-03-26 10:05:38 -0500357 },
Patrick Williams20f38712022-12-08 06:18:26 -0600358 "GPIO_PRESENT": {
359 "SLOT0_PRESENT": "<inventory_root>/system/chassis/io_board/pcie_slot0",
360 "SLOT1_PRESENT": "<inventory_root>/system/chassis/io_board/pcie_slot1",
361 },
Chris Austenb29d2e82016-06-07 12:25:35 -0500362}
363
364GPIO_CONFIG = {}
Patrick Williams20f38712022-12-08 06:18:26 -0600365GPIO_CONFIG["FSI_CLK"] = {"gpio_pin": "A4", "direction": "out"}
366GPIO_CONFIG["FSI_DATA"] = {"gpio_pin": "A5", "direction": "out"}
367GPIO_CONFIG["FSI_ENABLE"] = {"gpio_pin": "D0", "direction": "out"}
368GPIO_CONFIG["POWER_PIN"] = {"gpio_pin": "E1", "direction": "out"}
369GPIO_CONFIG["CRONUS_SEL"] = {"gpio_pin": "A6", "direction": "out"}
370GPIO_CONFIG["PGOOD"] = {"gpio_pin": "C7", "direction": "in"}
371GPIO_CONFIG["BMC_THROTTLE"] = {"gpio_pin": "J3", "direction": "out"}
372GPIO_CONFIG["IDBTN"] = {"gpio_pin": "Q7", "direction": "out"}
373GPIO_CONFIG["POWER_BUTTON"] = {"gpio_pin": "E0", "direction": "both"}
374GPIO_CONFIG["PCIE_RESET"] = {"gpio_pin": "B5", "direction": "out"}
375GPIO_CONFIG["USB_RESET"] = {"gpio_pin": "B6", "direction": "out"}
376GPIO_CONFIG["SLOT0_RISER_PRESENT"] = {"gpio_pin": "N0", "direction": "in"}
377GPIO_CONFIG["SLOT1_RISER_PRESENT"] = {"gpio_pin": "N1", "direction": "in"}
378GPIO_CONFIG["SLOT2_RISER_PRESENT"] = {"gpio_pin": "N2", "direction": "in"}
379GPIO_CONFIG["SLOT0_PRESENT"] = {"gpio_pin": "N3", "direction": "in"}
380GPIO_CONFIG["SLOT1_PRESENT"] = {"gpio_pin": "N4", "direction": "in"}
381GPIO_CONFIG["SLOT2_PRESENT"] = {"gpio_pin": "N5", "direction": "in"}
382GPIO_CONFIG["MEZZ0_PRESENT"] = {"gpio_pin": "O0", "direction": "in"}
383GPIO_CONFIG["MEZZ1_PRESENT"] = {"gpio_pin": "O1", "direction": "in"}
Gunnar Millsdca35792018-03-26 10:05:38 -0500384
Chris Austenb29d2e82016-06-07 12:25:35 -0500385
386def convertGpio(name):
Gunnar Millsdca35792018-03-26 10:05:38 -0500387 name = name.upper()
388 c = name[0:1]
389 offset = int(name[1:])
Joy Onyerikwu004ad3c2018-06-11 16:29:56 -0500390 a = ord(c) - 65
391 base = a * 8 + GPIO_BASE
392 return base + offset
Gunnar Millsdca35792018-03-26 10:05:38 -0500393
Chris Austenb29d2e82016-06-07 12:25:35 -0500394
395HWMON_CONFIG = {
Patrick Williams20f38712022-12-08 06:18:26 -0600396 "2-004c": {
397 "names": {
398 "temp1_input": {
399 "object_path": "temperature/ambient",
400 "poll_interval": 5000,
401 "scale": 1000,
402 "units": "C",
403 },
Gunnar Millsdca35792018-03-26 10:05:38 -0500404 }
405 },
Patrick Williams20f38712022-12-08 06:18:26 -0600406 "3-0050": {
407 "names": {
408 "caps_curr_powercap": {
409 "object_path": "powercap/curr_cap",
410 "poll_interval": 10000,
411 "scale": 1,
412 "units": "W",
413 },
414 "caps_curr_powerreading": {
415 "object_path": "powercap/system_power",
416 "poll_interval": 10000,
417 "scale": 1,
418 "units": "W",
419 },
420 "caps_max_powercap": {
421 "object_path": "powercap/max_cap",
422 "poll_interval": 10000,
423 "scale": 1,
424 "units": "W",
425 },
426 "caps_min_powercap": {
427 "object_path": "powercap/min_cap",
428 "poll_interval": 10000,
429 "scale": 1,
430 "units": "W",
431 },
432 "caps_norm_powercap": {
433 "object_path": "powercap/n_cap",
434 "poll_interval": 10000,
435 "scale": 1,
436 "units": "W",
437 },
438 "caps_user_powerlimit": {
439 "object_path": "powercap/user_cap",
440 "poll_interval": 10000,
441 "scale": 1,
442 "units": "W",
443 },
Gunnar Millsdca35792018-03-26 10:05:38 -0500444 }
Patrick Williams20f38712022-12-08 06:18:26 -0600445 },
Chris Austenb29d2e82016-06-07 12:25:35 -0500446}
447
448# Miscellaneous non-poll sensor with system specific properties.
449# The sensor id is the same as those defined in ID_LOOKUP['SENSOR'].
450MISC_SENSORS = {
Patrick Williams20f38712022-12-08 06:18:26 -0600451 0x09: {"class": "BootCountSensor"},
452 0x05: {"class": "BootProgressSensor"},
453 0x08: {
454 "class": "OccStatusSensor",
455 "os_path": "/sys/class/i2c-adapter/i2c-3/3-0050/online",
456 },
457 0x32: {"class": "OperatingSystemStatusSensor"},
458 0x33: {
459 "class": "PowerCap",
460 "os_path": "/sys/class/hwmon/hwmon1/user_powercap",
461 },
Chris Austenb29d2e82016-06-07 12:25:35 -0500462}