1*43829ea9SMatthew Barth{
2*43829ea9SMatthew Barth    "comments": "List of fans with the attributes used to monitor them.",
3*43829ea9SMatthew Barth    "fans": [
4*43829ea9SMatthew Barth        {
5*43829ea9SMatthew Barth            "comments": [
6*43829ea9SMatthew Barth                "The first fan in the system that has two sensor(dual rotor) feedbacks",
7*43829ea9SMatthew Barth                "that are allowed to deviate from any given target by 15% for up-to 30",
8*43829ea9SMatthew Barth                "seconds before being marked nonfunctional in inventory. The first",
9*43829ea9SMatthew Barth                "sensor object contains the target property and the second sensor",
10*43829ea9SMatthew Barth                "object's feedback speed is adjusted by a factor of 1.45 and offset",
11*43829ea9SMatthew Barth                "by -909 to accomodate how its hardware reacts to any given target. It",
12*43829ea9SMatthew Barth                "takes 1 sensor to mark this fan nonfunctional and once marked",
13*43829ea9SMatthew Barth                "nonfunctional, the nonfunctional sensor(s) must be within 15% of the",
14*43829ea9SMatthew Barth                "target for 5 seconds before being updated to functional again.",
15*43829ea9SMatthew Barth                "Each sensor has an error logged after 0 seconds being marked",
16*43829ea9SMatthew Barth                "nonfunctional and the fan has an error logged if its been not",
17*43829ea9SMatthew Barth                "present for 20 seconds.",
18*43829ea9SMatthew Barth                "In addition, this fan is not monitored for the first 30 seconds after",
19*43829ea9SMatthew Barth                "a poweron to allow the fan to spin-up."
20*43829ea9SMatthew Barth            ],
21*43829ea9SMatthew Barth            "inventory": "/system/chassis/motherboard/fan0",
22*43829ea9SMatthew Barth            "functional_delay": 5,
23*43829ea9SMatthew Barth            "allowed_out_of_range_time": 30,
24*43829ea9SMatthew Barth            "deviation": 15,
25*43829ea9SMatthew Barth            "num_sensors_nonfunc_for_fan_nonfunc": 1,
26*43829ea9SMatthew Barth            "monitor_start_delay": 30,
27*43829ea9SMatthew Barth            "fan_missing_error_delay": 20,
28*43829ea9SMatthew Barth            "nonfunc_rotor_error_delay": 0,
29*43829ea9SMatthew Barth            "sensors": [
30*43829ea9SMatthew Barth                {
31*43829ea9SMatthew Barth                    "name": "fan0_0",
32*43829ea9SMatthew Barth                    "has_target": true
33*43829ea9SMatthew Barth                },
34*43829ea9SMatthew Barth                {
35*43829ea9SMatthew Barth                    "name": "fan0_1",
36*43829ea9SMatthew Barth                    "has_target": false,
37*43829ea9SMatthew Barth                    "factor": 1.45,
38*43829ea9SMatthew Barth                    "offset": -909
39*43829ea9SMatthew Barth                }
40*43829ea9SMatthew Barth            ]
41*43829ea9SMatthew Barth        },
42*43829ea9SMatthew Barth        {
43*43829ea9SMatthew Barth            "comments": [
44*43829ea9SMatthew Barth                "The second fan in the system has one sensor(single rotor) feedback",
45*43829ea9SMatthew Barth                "that is only monitored with the `WaterCooled` property is false. The",
46*43829ea9SMatthew Barth                "sensor is monitored using a 'count' method where a counter is",
47*43829ea9SMatthew Barth                "incremented each tick the fan deviates 15% from a target and",
48*43829ea9SMatthew Barth                "decrements back to zero each tick the fan is within spec. When the",
49*43829ea9SMatthew Barth                "sensor reaches the threshold of 25 ticks, the fan is marked",
50*43829ea9SMatthew Barth                "nonfunctional and only returns to being functional when the counter",
51*43829ea9SMatthew Barth                "is decremented back to 0. This differs from the default 'timebased'",
52*43829ea9SMatthew Barth                "method where the fan must deviate contiguously for a set amount of",
53*43829ea9SMatthew Barth                "time to be marked nonfunctional. It takes 1 sensor to mark this fan",
54*43829ea9SMatthew Barth                "nonfunctional.",
55*43829ea9SMatthew Barth                "Each sensor has an error logged after 0 seconds being marked",
56*43829ea9SMatthew Barth                "nonfunctional and the fan has an error logged if its been not present",
57*43829ea9SMatthew Barth                "for 20 seconds.",
58*43829ea9SMatthew Barth                "In addition, this fan is not monitored for the first 30 seconds after",
59*43829ea9SMatthew Barth                "a poweron to allow the fan to spin-up."
60*43829ea9SMatthew Barth            ],
61*43829ea9SMatthew Barth            "inventory": "/system/chassis/motherboard/fan1",
62*43829ea9SMatthew Barth            "method": "count",
63*43829ea9SMatthew Barth            "deviation": 15,
64*43829ea9SMatthew Barth            "num_sensors_nonfunc_for_fan_nonfunc": 1,
65*43829ea9SMatthew Barth            "monitor_start_delay": 30,
66*43829ea9SMatthew Barth            "fan_missing_error_delay": 20,
67*43829ea9SMatthew Barth            "nonfunc_rotor_error_delay": 0,
68*43829ea9SMatthew Barth            "sensors": [
69*43829ea9SMatthew Barth                {
70*43829ea9SMatthew Barth                    "name": "fan1_0",
71*43829ea9SMatthew Barth                    "has_target": true,
72*43829ea9SMatthew Barth                    "threshold": 25
73*43829ea9SMatthew Barth                }
74*43829ea9SMatthew Barth            ],
75*43829ea9SMatthew Barth            "condition": {
76*43829ea9SMatthew Barth                "name": "propertiesMatch",
77*43829ea9SMatthew Barth                "properties": [
78*43829ea9SMatthew Barth                    {
79*43829ea9SMatthew Barth                        "object": "/xyz/openbmc_project/inventory/system/chassis",
80*43829ea9SMatthew Barth                        "interface": "xyz.openbmc_project.Inventory.Decorator.CoolingType",
81*43829ea9SMatthew Barth                        "property": {
82*43829ea9SMatthew Barth                            "name": "WaterCooled",
83*43829ea9SMatthew Barth                            "type": "bool",
84*43829ea9SMatthew Barth                            "value": false
85*43829ea9SMatthew Barth                        }
86*43829ea9SMatthew Barth                    }
87*43829ea9SMatthew Barth                ]
88*43829ea9SMatthew Barth            }
89*43829ea9SMatthew Barth        },
90*43829ea9SMatthew Barth        {
91*43829ea9SMatthew Barth            "comments": [
92*43829ea9SMatthew Barth                "The third fan in the system that has one sensor(single rotor)",
93*43829ea9SMatthew Barth                "feedback using the default 'timebased' method that allows it to",
94*43829ea9SMatthew Barth                "deviate from any given target by 15% for up-to 30 seconds before",
95*43829ea9SMatthew Barth                "being marked nonfunctional in inventory. Instead of using the default",
96*43829ea9SMatthew Barth                "'xyz.openbmc_project.Control.FanSpeed' target interface, the sensor",
97*43829ea9SMatthew Barth                "uses the 'xyz.openbmc_project.Control.FanPwm' target interface and",
98*43829ea9SMatthew Barth                "applies a factor of 21 and offset of 1600 to accomodate the",
99*43829ea9SMatthew Barth                "difference in target PWM versus the RPM feedback of the sensor to",
100*43829ea9SMatthew Barth                "determine if the fan sensor is nonfunctional or not. It takes 1",
101*43829ea9SMatthew Barth                "sensor to mark this fan nonfunctional and when marked nonfunctional,",
102*43829ea9SMatthew Barth                "it is immediately marked functional again once within 15% of the",
103*43829ea9SMatthew Barth                "target.",
104*43829ea9SMatthew Barth                "Each sensor has an error logged after 0 seconds being marked",
105*43829ea9SMatthew Barth                "nonfunctional and the fan has an error logged if its been not present",
106*43829ea9SMatthew Barth                "for 20 seconds.",
107*43829ea9SMatthew Barth                "In addition, this fan is not monitored for the first 30 seconds after",
108*43829ea9SMatthew Barth                "a poweron to allow the fan to spin-up. "
109*43829ea9SMatthew Barth            ],
110*43829ea9SMatthew Barth            "inventory": "/system/chassis/motherboard/fan2",
111*43829ea9SMatthew Barth            "method": "timebased",
112*43829ea9SMatthew Barth            "allowed_out_of_range_time": 30,
113*43829ea9SMatthew Barth            "deviation": 15,
114*43829ea9SMatthew Barth            "num_sensors_nonfunc_for_fan_nonfunc": 1,
115*43829ea9SMatthew Barth            "monitor_start_delay": 30,
116*43829ea9SMatthew Barth            "fan_missing_error_delay": 20,
117*43829ea9SMatthew Barth            "nonfunc_rotor_error_delay": 0,
118*43829ea9SMatthew Barth            "sensors": [
119*43829ea9SMatthew Barth                {
120*43829ea9SMatthew Barth                    "name": "fan2_0",
121*43829ea9SMatthew Barth                    "target_interface": "xyz.openbmc_project.Control.FanPwm",
122*43829ea9SMatthew Barth                    "has_target": true,
123*43829ea9SMatthew Barth                    "factor": 21,
124*43829ea9SMatthew Barth                    "offset": 1600
125*43829ea9SMatthew Barth                }
126*43829ea9SMatthew Barth            ]
127*43829ea9SMatthew Barth        }
128*43829ea9SMatthew Barth    ],
129*43829ea9SMatthew Barth    "sensor_trust_groups": [
130*43829ea9SMatthew Barth        {
131*43829ea9SMatthew Barth            "comments": [
132*43829ea9SMatthew Barth                "OPTIONAL - A section to create `trust groups` consisting of fan tach",
133*43829ea9SMatthew Barth                "sensors that can be used to trust the tach feedback reading or",
134*43829ea9SMatthew Barth                "disregard it when determining if the fan is functional or not. Here,",
135*43829ea9SMatthew Barth                "the fan sensor feedbacks within the group are only trusted when any",
136*43829ea9SMatthew Barth                "one of them shows a non-zero feedback speed. At any time all fan",
137*43829ea9SMatthew Barth                "sensor feedbacks report a speed of 0, the monitoring of each sensor",
138*43829ea9SMatthew Barth                "in the group is cancelled, only to resume being monitored when any",
139*43829ea9SMatthew Barth                "one of them reports a non-zero feedback speed."
140*43829ea9SMatthew Barth            ],
141*43829ea9SMatthew Barth            "class": "NonzeroSpeed",
142*43829ea9SMatthew Barth            "group": [
143*43829ea9SMatthew Barth                {
144*43829ea9SMatthew Barth                    "name": "fan0_0"
145*43829ea9SMatthew Barth                },
146*43829ea9SMatthew Barth                {
147*43829ea9SMatthew Barth                    "name": "fan1_0"
148*43829ea9SMatthew Barth                },
149*43829ea9SMatthew Barth                {
150*43829ea9SMatthew Barth                    "name": "fan2_0"
151*43829ea9SMatthew Barth                }
152*43829ea9SMatthew Barth            ]
153*43829ea9SMatthew Barth        }
154*43829ea9SMatthew Barth    ],
155*43829ea9SMatthew Barth    "fault_handling": {
156*43829ea9SMatthew Barth        "comments": [
157*43829ea9SMatthew Barth            "OPTIONAL - A section to handle faults caused by missing or",
158*43829ea9SMatthew Barth            "nonfunctional fans. An error is logged when 1 rotor is nonfunctional",
159*43829ea9SMatthew Barth            "across all the fans being monitored. The system is immediately hard",
160*43829ea9SMatthew Barth            "powered off after a poweron is started when 1 fan has been missing for",
161*43829ea9SMatthew Barth            "25 seconds.",
162*43829ea9SMatthew Barth            "An EPOW shutdown is issued when 2 or more nonfunctional fan sensors",
163*43829ea9SMatthew Barth            "exist, which (specific to EPOW) has a service mode delay of 300 seconds",
164*43829ea9SMatthew Barth            "and then a meltdown delay of 300 seconds."
165*43829ea9SMatthew Barth        ],
166*43829ea9SMatthew Barth        "num_nonfunc_rotors_before_error": 1,
167*43829ea9SMatthew Barth        "power_off_config": [
168*43829ea9SMatthew Barth            {
169*43829ea9SMatthew Barth                "type": "hard",
170*43829ea9SMatthew Barth                "cause": "missing_fan_frus",
171*43829ea9SMatthew Barth                "count": 1,
172*43829ea9SMatthew Barth                "delay": 25,
173*43829ea9SMatthew Barth                "state": "at_pgood"
174*43829ea9SMatthew Barth            },
175*43829ea9SMatthew Barth            {
176*43829ea9SMatthew Barth                "type": "epow",
177*43829ea9SMatthew Barth                "cause": "nonfunc_fan_rotors",
178*43829ea9SMatthew Barth                "count": 2,
179*43829ea9SMatthew Barth                "service_mode_delay": 300,
180*43829ea9SMatthew Barth                "meltdown_delay": 300
181*43829ea9SMatthew Barth            }
182*43829ea9SMatthew Barth        ]
183*43829ea9SMatthew Barth    }
184*43829ea9SMatthew Barth}
185