| #!/usr/bin/env python3 | 
 |  | 
 | HOME_PATH = "./" | 
 | CACHE_PATH = "/var/cache/obmc/" | 
 | FLASH_DOWNLOAD_PATH = "/tmp" | 
 | GPIO_BASE = 320 | 
 | SYSTEM_NAME = "Palmetto" | 
 |  | 
 |  | 
 | # System states | 
 | # state can change to next state in 2 ways: | 
 | # - a process emits a GotoSystemState signal with state name to goto | 
 | # - objects specified in EXIT_STATE_DEPEND have started | 
 | SYSTEM_STATES = [ | 
 |     "BASE_APPS", | 
 |     "BMC_STARTING", | 
 |     "BMC_READY", | 
 |     "HOST_POWERING_ON", | 
 |     "HOST_POWERED_ON", | 
 |     "HOST_BOOTING", | 
 |     "HOST_BOOTED", | 
 |     "HOST_POWERED_OFF", | 
 | ] | 
 |  | 
 | EXIT_STATE_DEPEND = { | 
 |     "BASE_APPS": { | 
 |         "/org/openbmc/sensors": 0, | 
 |     }, | 
 |     "BMC_STARTING": { | 
 |         "/org/openbmc/control/chassis0": 0, | 
 |         "/org/openbmc/control/power0": 0, | 
 |         "/org/openbmc/control/led/identify": 0, | 
 |         "/org/openbmc/control/host0": 0, | 
 |         "/org/openbmc/control/flash/bios": 0, | 
 |     }, | 
 | } | 
 |  | 
 | # method will be called when state is entered | 
 | ENTER_STATE_CALLBACK = { | 
 |     "HOST_POWERED_ON": { | 
 |         "boot": { | 
 |             "bus_name": "org.openbmc.control.Host", | 
 |             "obj_name": "/org/openbmc/control/host0", | 
 |             "interface_name": "org.openbmc.control.Host", | 
 |         } | 
 |     }, | 
 |     "BMC_READY": { | 
 |         "setOn": { | 
 |             "bus_name": "org.openbmc.control.led", | 
 |             "obj_name": "/org/openbmc/control/led/identify", | 
 |             "interface_name": "org.openbmc.Led", | 
 |         }, | 
 |         "init": { | 
 |             "bus_name": "org.openbmc.control.Flash", | 
 |             "obj_name": "/org/openbmc/control/flash/bios", | 
 |             "interface_name": "org.openbmc.Flash", | 
 |         }, | 
 |     }, | 
 | } | 
 |  | 
 | APPS = { | 
 |     "startup_hacks": { | 
 |         "system_state": "BASE_APPS", | 
 |         "start_process": True, | 
 |         "monitor_process": False, | 
 |         "process_name": "startup_hacks.sh", | 
 |     }, | 
 |     "inventory": { | 
 |         "system_state": "BMC_STARTING", | 
 |         "start_process": True, | 
 |         "monitor_process": True, | 
 |         "process_name": "inventory_items.py", | 
 |         "args": [SYSTEM_NAME], | 
 |     }, | 
 |     "pcie_present": { | 
 |         "system_state": "HOST_POWERED_ON", | 
 |         "start_process": False, | 
 |         "monitor_process": False, | 
 |         "process_name": "pcie_slot_present.exe", | 
 |     }, | 
 |     "virtual_sensors": { | 
 |         "system_state": "BMC_STARTING", | 
 |         "start_process": True, | 
 |         "monitor_process": True, | 
 |         "process_name": "hwmon.py", | 
 |         "args": [SYSTEM_NAME], | 
 |     }, | 
 |     "sensor_manager": { | 
 |         "system_state": "BASE_APPS", | 
 |         "start_process": True, | 
 |         "monitor_process": True, | 
 |         "process_name": "sensor_manager2.py", | 
 |         "args": [SYSTEM_NAME], | 
 |     }, | 
 |     "host_watchdog": { | 
 |         "system_state": "BMC_STARTING", | 
 |         "start_process": True, | 
 |         "monitor_process": True, | 
 |         "process_name": "host_watchdog.exe", | 
 |     }, | 
 |     "power_control": { | 
 |         "system_state": "BMC_STARTING", | 
 |         "start_process": True, | 
 |         "monitor_process": True, | 
 |         "process_name": "power_control.exe", | 
 |         "args": ["3000", "10"], | 
 |     }, | 
 |     "power_button": { | 
 |         "system_state": "BMC_STARTING", | 
 |         "start_process": False, | 
 |         "monitor_process": False, | 
 |         "process_name": "button_power.exe", | 
 |     }, | 
 |     "led_control": { | 
 |         "system_state": "BMC_STARTING", | 
 |         "start_process": True, | 
 |         "monitor_process": True, | 
 |         "process_name": "led_controller.exe", | 
 |     }, | 
 |     "flash_control": { | 
 |         "system_state": "BMC_STARTING", | 
 |         "start_process": True, | 
 |         "monitor_process": True, | 
 |         "process_name": "flash_bios.exe", | 
 |     }, | 
 |     "bmc_flash_control": { | 
 |         "system_state": "BMC_STARTING", | 
 |         "start_process": True, | 
 |         "monitor_process": True, | 
 |         "process_name": "bmc_update.py", | 
 |     }, | 
 |     "download_manager": { | 
 |         "system_state": "BMC_STARTING", | 
 |         "start_process": True, | 
 |         "monitor_process": True, | 
 |         "process_name": "download_manager.py", | 
 |         "args": [SYSTEM_NAME], | 
 |     }, | 
 |     "host_control": { | 
 |         "system_state": "BMC_STARTING", | 
 |         "start_process": True, | 
 |         "monitor_process": True, | 
 |         "process_name": "control_host.exe", | 
 |     }, | 
 |     "chassis_control": { | 
 |         "system_state": "BMC_STARTING", | 
 |         "start_process": True, | 
 |         "monitor_process": True, | 
 |         "process_name": "chassis_control.py", | 
 |     }, | 
 |     "bmc_control": { | 
 |         "system_state": "BMC_STARTING", | 
 |         "start_process": True, | 
 |         "monitor_process": True, | 
 |         "process_name": "control_bmc.exe", | 
 |     }, | 
 | } | 
 |  | 
 | CACHED_INTERFACES = { | 
 |     "org.openbmc.InventoryItem": True, | 
 |     "org.openbmc.control.Chassis": True, | 
 | } | 
 | INVENTORY_ROOT = "/org/openbmc/inventory" | 
 |  | 
 | FRU_INSTANCES = { | 
 |     "<inventory_root>/system": { | 
 |         "fru_type": "SYSTEM", | 
 |         "is_fru": True, | 
 |     }, | 
 |     "<inventory_root>/system/chassis": { | 
 |         "fru_type": "SYSTEM", | 
 |         "is_fru": True, | 
 |     }, | 
 |     "<inventory_root>/system/chassis/motherboard": { | 
 |         "fru_type": "MAIN_PLANAR", | 
 |         "is_fru": True, | 
 |     }, | 
 |     "<inventory_root>/system/chassis/fan0": { | 
 |         "fru_type": "FAN", | 
 |         "is_fru": True, | 
 |     }, | 
 |     "<inventory_root>/system/chassis/fan1": { | 
 |         "fru_type": "FAN", | 
 |         "is_fru": True, | 
 |     }, | 
 |     "<inventory_root>/system/chassis/fan2": { | 
 |         "fru_type": "FAN", | 
 |         "is_fru": True, | 
 |     }, | 
 |     "<inventory_root>/system/chassis/fan3": { | 
 |         "fru_type": "FAN", | 
 |         "is_fru": True, | 
 |     }, | 
 |     "<inventory_root>/system/chassis/fan4": { | 
 |         "fru_type": "FAN", | 
 |         "is_fru": True, | 
 |     }, | 
 |     "<inventory_root>/system/chassis/motherboard/bmc": { | 
 |         "fru_type": "BMC", | 
 |         "is_fru": False, | 
 |         "manufacturer": "ASPEED", | 
 |     }, | 
 |     "<inventory_root>/system/chassis/motherboard/cpu": { | 
 |         "fru_type": "CPU", | 
 |         "is_fru": True, | 
 |     }, | 
 |     "<inventory_root>/system/chassis/motherboard/cpu/core0": { | 
 |         "fru_type": "CORE", | 
 |         "is_fru": False, | 
 |     }, | 
 |     "<inventory_root>/system/chassis/motherboard/cpu/core1": { | 
 |         "fru_type": "CORE", | 
 |         "is_fru": False, | 
 |     }, | 
 |     "<inventory_root>/system/chassis/motherboard/cpu/core2": { | 
 |         "fru_type": "CORE", | 
 |         "is_fru": False, | 
 |     }, | 
 |     "<inventory_root>/system/chassis/motherboard/cpu/core3": { | 
 |         "fru_type": "CORE", | 
 |         "is_fru": False, | 
 |     }, | 
 |     "<inventory_root>/system/chassis/motherboard/cpu/core4": { | 
 |         "fru_type": "CORE", | 
 |         "is_fru": False, | 
 |     }, | 
 |     "<inventory_root>/system/chassis/motherboard/cpu/core5": { | 
 |         "fru_type": "CORE", | 
 |         "is_fru": False, | 
 |     }, | 
 |     "<inventory_root>/system/chassis/motherboard/cpu/core6": { | 
 |         "fru_type": "CORE", | 
 |         "is_fru": False, | 
 |     }, | 
 |     "<inventory_root>/system/chassis/motherboard/cpu/core7": { | 
 |         "fru_type": "CORE", | 
 |         "is_fru": False, | 
 |     }, | 
 |     "<inventory_root>/system/chassis/motherboard/cpu/core8": { | 
 |         "fru_type": "CORE", | 
 |         "is_fru": False, | 
 |     }, | 
 |     "<inventory_root>/system/chassis/motherboard/cpu/core9": { | 
 |         "fru_type": "CORE", | 
 |         "is_fru": False, | 
 |     }, | 
 |     "<inventory_root>/system/chassis/motherboard/cpu/core10": { | 
 |         "fru_type": "CORE", | 
 |         "is_fru": False, | 
 |     }, | 
 |     "<inventory_root>/system/chassis/motherboard/cpu/core11": { | 
 |         "fru_type": "CORE", | 
 |         "is_fru": False, | 
 |     }, | 
 |     "<inventory_root>/system/chassis/motherboard/membuf": { | 
 |         "fru_type": "MEMORY_BUFFER", | 
 |         "is_fru": False, | 
 |     }, | 
 |     "<inventory_root>/system/chassis/motherboard/dimm0": { | 
 |         "fru_type": "DIMM", | 
 |         "is_fru": True, | 
 |     }, | 
 |     "<inventory_root>/system/chassis/motherboard/dimm1": { | 
 |         "fru_type": "DIMM", | 
 |         "is_fru": True, | 
 |     }, | 
 |     "<inventory_root>/system/chassis/motherboard/dimm2": { | 
 |         "fru_type": "DIMM", | 
 |         "is_fru": True, | 
 |     }, | 
 |     "<inventory_root>/system/chassis/motherboard/dimm3": { | 
 |         "fru_type": "DIMM", | 
 |         "is_fru": True, | 
 |     }, | 
 |     "<inventory_root>/system/chassis/io_board/pcie_slot0": { | 
 |         "fru_type": "PCIE_CARD", | 
 |         "is_fru": True, | 
 |     }, | 
 |     "<inventory_root>/system/chassis/io_board/pcie_slot1": { | 
 |         "fru_type": "PCIE_CARD", | 
 |         "is_fru": True, | 
 |     }, | 
 |     "<inventory_root>/system/systemevent": { | 
 |         "fru_type": "SYSTEM_EVENT", | 
 |         "is_fru": False, | 
 |     }, | 
 |     "<inventory_root>/system/chassis/motherboard/refclock": { | 
 |         "fru_type": "MAIN_PLANAR", | 
 |         "is_fru": False, | 
 |     }, | 
 |     "<inventory_root>/system/chassis/motherboard/pcieclock": { | 
 |         "fru_type": "MAIN_PLANAR", | 
 |         "is_fru": False, | 
 |     }, | 
 |     "<inventory_root>/system/chassis/motherboard/todclock": { | 
 |         "fru_type": "MAIN_PLANAR", | 
 |         "is_fru": False, | 
 |     }, | 
 |     "<inventory_root>/system/chassis/motherboard/apss": { | 
 |         "fru_type": "MAIN_PLANAR", | 
 |         "is_fru": False, | 
 |     }, | 
 | } | 
 |  | 
 | ID_LOOKUP = { | 
 |     "FRU": { | 
 |         0x0D: "<inventory_root>/system/chassis", | 
 |         0x34: "<inventory_root>/system/chassis/motherboard", | 
 |         0x01: "<inventory_root>/system/chassis/motherboard/cpu", | 
 |         0x02: "<inventory_root>/system/chassis/motherboard/membuf", | 
 |         0x03: "<inventory_root>/system/chassis/motherboard/dimm0", | 
 |         0x04: "<inventory_root>/system/chassis/motherboard/dimm1", | 
 |         0x05: "<inventory_root>/system/chassis/motherboard/dimm2", | 
 |         0x06: "<inventory_root>/system/chassis/motherboard/dimm3", | 
 |         0x35: "<inventory_root>/system", | 
 |     }, | 
 |     "FRU_STR": { | 
 |         "PRODUCT_15": "<inventory_root>/system", | 
 |         "CHASSIS_2": "<inventory_root>/system/chassis", | 
 |         "BOARD_1": "<inventory_root>/system/chassis/motherboard/cpu", | 
 |         "BOARD_2": "<inventory_root>/system/chassis/motherboard/membuf", | 
 |         "BOARD_14": "<inventory_root>/system/chassis/motherboard", | 
 |         "PRODUCT_3": "<inventory_root>/system/chassis/motherboard/dimm0", | 
 |         "PRODUCT_4": "<inventory_root>/system/chassis/motherboard/dimm1", | 
 |         "PRODUCT_5": "<inventory_root>/system/chassis/motherboard/dimm2", | 
 |         "PRODUCT_6": "<inventory_root>/system/chassis/motherboard/dimm3", | 
 |     }, | 
 |     "SENSOR": { | 
 |         0x34: "<inventory_root>/system/chassis/motherboard", | 
 |         0x37: "<inventory_root>/system/chassis/motherboard/refclock", | 
 |         0x38: "<inventory_root>/system/chassis/motherboard/pcieclock", | 
 |         0x39: "<inventory_root>/system/chassis/motherboard/todclock", | 
 |         0x3A: "<inventory_root>/system/chassis/apss", | 
 |         0x2F: "<inventory_root>/system/chassis/motherboard/cpu", | 
 |         0x22: "<inventory_root>/system/chassis/motherboard/cpu/core1", | 
 |         0x23: "<inventory_root>/system/chassis/motherboard/cpu/core2", | 
 |         0x24: "<inventory_root>/system/chassis/motherboard/cpu/core3", | 
 |         0x25: "<inventory_root>/system/chassis/motherboard/cpu/core4", | 
 |         0x26: "<inventory_root>/system/chassis/motherboard/cpu/core5", | 
 |         0x27: "<inventory_root>/system/chassis/motherboard/cpu/core6", | 
 |         0x28: "<inventory_root>/system/chassis/motherboard/cpu/core9", | 
 |         0x29: "<inventory_root>/system/chassis/motherboard/cpu/core10", | 
 |         0x2A: "<inventory_root>/system/chassis/motherboard/cpu/core11", | 
 |         0x2B: "<inventory_root>/system/chassis/motherboard/cpu/core12", | 
 |         0x2C: "<inventory_root>/system/chassis/motherboard/cpu/core13", | 
 |         0x2D: "<inventory_root>/system/chassis/motherboard/cpu/core14", | 
 |         0x2E: "<inventory_root>/system/chassis/motherboard/membuf", | 
 |         0x1E: "<inventory_root>/system/chassis/motherboard/dimm0", | 
 |         0x1F: "<inventory_root>/system/chassis/motherboard/dimm1", | 
 |         0x20: "<inventory_root>/system/chassis/motherboard/dimm2", | 
 |         0x21: "<inventory_root>/system/chassis/motherboard/dimm3", | 
 |         0x09: "/org/openbmc/sensors/host/BootCount", | 
 |         0x05: "/org/openbmc/sensors/host/BootProgress", | 
 |         0x08: "/org/openbmc/sensors/host/cpu0/OccStatus", | 
 |         0x32: "/org/openbmc/sensors/host/OperatingSystemStatus", | 
 |         0x33: "/org/openbmc/sensors/host/PowerCap", | 
 |     }, | 
 |     "GPIO_PRESENT": { | 
 |         "SLOT0_PRESENT": "<inventory_root>/system/chassis/io_board/pcie_slot0", | 
 |         "SLOT1_PRESENT": "<inventory_root>/system/chassis/io_board/pcie_slot1", | 
 |     }, | 
 | } | 
 |  | 
 | GPIO_CONFIG = {} | 
 | GPIO_CONFIG["FSI_CLK"] = {"gpio_pin": "A4", "direction": "out"} | 
 | GPIO_CONFIG["FSI_DATA"] = {"gpio_pin": "A5", "direction": "out"} | 
 | GPIO_CONFIG["FSI_ENABLE"] = {"gpio_pin": "D0", "direction": "out"} | 
 | GPIO_CONFIG["POWER_PIN"] = {"gpio_pin": "E1", "direction": "out"} | 
 | GPIO_CONFIG["CRONUS_SEL"] = {"gpio_pin": "A6", "direction": "out"} | 
 | GPIO_CONFIG["PGOOD"] = {"gpio_pin": "C7", "direction": "in"} | 
 | GPIO_CONFIG["BMC_THROTTLE"] = {"gpio_pin": "J3", "direction": "out"} | 
 | GPIO_CONFIG["IDBTN"] = {"gpio_pin": "Q7", "direction": "out"} | 
 | GPIO_CONFIG["POWER_BUTTON"] = {"gpio_pin": "E0", "direction": "both"} | 
 | GPIO_CONFIG["PCIE_RESET"] = {"gpio_pin": "B5", "direction": "out"} | 
 | GPIO_CONFIG["USB_RESET"] = {"gpio_pin": "B6", "direction": "out"} | 
 | GPIO_CONFIG["SLOT0_RISER_PRESENT"] = {"gpio_pin": "N0", "direction": "in"} | 
 | GPIO_CONFIG["SLOT1_RISER_PRESENT"] = {"gpio_pin": "N1", "direction": "in"} | 
 | GPIO_CONFIG["SLOT2_RISER_PRESENT"] = {"gpio_pin": "N2", "direction": "in"} | 
 | GPIO_CONFIG["SLOT0_PRESENT"] = {"gpio_pin": "N3", "direction": "in"} | 
 | GPIO_CONFIG["SLOT1_PRESENT"] = {"gpio_pin": "N4", "direction": "in"} | 
 | GPIO_CONFIG["SLOT2_PRESENT"] = {"gpio_pin": "N5", "direction": "in"} | 
 | GPIO_CONFIG["MEZZ0_PRESENT"] = {"gpio_pin": "O0", "direction": "in"} | 
 | GPIO_CONFIG["MEZZ1_PRESENT"] = {"gpio_pin": "O1", "direction": "in"} | 
 |  | 
 |  | 
 | def convertGpio(name): | 
 |     name = name.upper() | 
 |     c = name[0:1] | 
 |     offset = int(name[1:]) | 
 |     a = ord(c) - 65 | 
 |     base = a * 8 + GPIO_BASE | 
 |     return base + offset | 
 |  | 
 |  | 
 | HWMON_CONFIG = { | 
 |     "2-004c": { | 
 |         "names": { | 
 |             "temp1_input": { | 
 |                 "object_path": "temperature/ambient", | 
 |                 "poll_interval": 5000, | 
 |                 "scale": 1000, | 
 |                 "units": "C", | 
 |             }, | 
 |         } | 
 |     }, | 
 |     "3-0050": { | 
 |         "names": { | 
 |             "caps_curr_powercap": { | 
 |                 "object_path": "powercap/curr_cap", | 
 |                 "poll_interval": 10000, | 
 |                 "scale": 1, | 
 |                 "units": "W", | 
 |             }, | 
 |             "caps_curr_powerreading": { | 
 |                 "object_path": "powercap/system_power", | 
 |                 "poll_interval": 10000, | 
 |                 "scale": 1, | 
 |                 "units": "W", | 
 |             }, | 
 |             "caps_max_powercap": { | 
 |                 "object_path": "powercap/max_cap", | 
 |                 "poll_interval": 10000, | 
 |                 "scale": 1, | 
 |                 "units": "W", | 
 |             }, | 
 |             "caps_min_powercap": { | 
 |                 "object_path": "powercap/min_cap", | 
 |                 "poll_interval": 10000, | 
 |                 "scale": 1, | 
 |                 "units": "W", | 
 |             }, | 
 |             "caps_norm_powercap": { | 
 |                 "object_path": "powercap/n_cap", | 
 |                 "poll_interval": 10000, | 
 |                 "scale": 1, | 
 |                 "units": "W", | 
 |             }, | 
 |             "caps_user_powerlimit": { | 
 |                 "object_path": "powercap/user_cap", | 
 |                 "poll_interval": 10000, | 
 |                 "scale": 1, | 
 |                 "units": "W", | 
 |             }, | 
 |         } | 
 |     }, | 
 | } | 
 |  | 
 | # Miscellaneous non-poll sensor with system specific properties. | 
 | # The sensor id is the same as those defined in ID_LOOKUP['SENSOR']. | 
 | MISC_SENSORS = { | 
 |     0x09: {"class": "BootCountSensor"}, | 
 |     0x05: {"class": "BootProgressSensor"}, | 
 |     0x08: { | 
 |         "class": "OccStatusSensor", | 
 |         "os_path": "/sys/class/i2c-adapter/i2c-3/3-0050/online", | 
 |     }, | 
 |     0x32: {"class": "OperatingSystemStatusSensor"}, | 
 |     0x33: { | 
 |         "class": "PowerCap", | 
 |         "os_path": "/sys/class/hwmon/hwmon1/user_powercap", | 
 |     }, | 
 | } |