commit | aef8fa0dd6506907cc863445c27d21c6700d52a4 | [log] [tgz] |
---|---|---|
author | Potin Lai <potin.lai@quantatw.com> | Wed Sep 21 19:10:30 2022 +0800 |
committer | Potin Lai <potin.lai@quantatw.com> | Mon Oct 03 09:29:40 2022 +0800 |
tree | 98526259e3403c90787348acdbb8dec3d549041f | |
parent | d4f5199251f2acbcf007c9bc163fd65d3695655b [diff] |
nvme_manager: decouple config dependency of PresentPin and PwrGoodPin Nvme::read() does not allow power good checking if config just have PwrGoodPin only available, for platform which doesn't have both PresentPin and PwrGoodPin in config will not able to do power checking. This patch move out GPIO pin reading to begin of each nvme read, and set defaule value to PresentPin and PwrGoodPin if the pin is not defined in the config file, so that the power checking can still be performed without PresentPin defined. default value of pins: - PresentPin: IS_PRESENT (0) - PwrGoodPin: POWERGD (1) Tested on Bletchley (only PwrGoodPin defined): - PwrGoodPin is low root@bletchley:~# busctl introspect xyz.openbmc_project.nvme.manager \ > /xyz/openbmc_project/sensors/temperature/nvme6 \ > xyz.openbmc_project.Sensor.Value NAME TYPE SIGNATURE RESULT/VALUE FLAGS .MaxValue property d 127 emits-change writable .MinValue property d -127 emits-change writable .Unit property s "xyz.openbmc_project.Sensor.Value.Uni... emits-change writable .Value property d -127 emits-change writable - PwrGoodPin is high root@bletchley:~# busctl introspect xyz.openbmc_project.nvme.manager \ > /xyz/openbmc_project/sensors/temperature/nvme6 \ > xyz.openbmc_project.Sensor.Value NAME TYPE SIGNATURE RESULT/VALUE FLAGS .MaxValue property d 127 emits-change writable .MinValue property d -127 emits-change writable .Unit property s "xyz.openbmc_project.Sensor.Value.Uni... emits-change writable .Value property d 38 emits-change writable Signed-off-by: Potin Lai <potin.lai@quantatw.com> Change-Id: I00fabf8f387c83bf139539bba9d5ba6aed693778
phosphor-nvme is the nvme manager service maintains for NVMe drive information update and related notification processing service. The service update information to xyz/openbmc_project/Nvme/Status.interface.yaml
, xyz/openbmc_project/Sensor/Value.interface.yaml
and other interfaces in xyz.openbmc_project.Inventory.Manager
.
The service xyz.openbmc_project.nvme.manager
provides object on D-Bus:
where object implements interface xyz.openbmc_project.Sensor.Value
.
NVMe drive export as sensor and sensor value is temperature of drive. It can get the sensor value of the drive through ipmitool command sdr elist
if the corresponding settings in the sensor map are configured correctly. For example:
To get sensor value:
### With ipmi command on BMC ipmitool sdr elist
The service also updates other NVMe drive information to D-bus xyz.openbmc_project.Inventory.Manager
. The service xyz.openbmc_project.Inventory.Manager
provides object on D-Bus:
where object implements interfaces:
Interface xyz.openbmc_project.Nvme.Status
with the following properties:
Property | Type | Description |
---|---|---|
SmartWarnings | string | Indicates smart warnings for the state |
StatusFlags | string | Indicates the status of the drives |
DriveLifeUsed | string | A vendor specific estimate of the percentage |
TemperatureFault | bool | If warning type about temperature happened |
BackupdrivesFault | bool | If warning type about backup drives happened |
CapacityFault | bool | If warning type about capacity happened |
DegradesFault | bool | If warning type about degrades happened |
MediaFault | bool | If warning type about media happened |
Interface xyz.openbmc_project.Inventory.Item
with the following properties:
Property | Type | Description |
---|---|---|
Present | bool | Whether or not the item is present |
Interface xyz.openbmc_project.Inventory.Decorator.Asset
with the following properties:
Property | Type | Description |
---|---|---|
SerialNumber | string | The item serial number |
Manufacturer | string | The item manufacturer |
Each property in the inventory manager can be obtained via the busctl get-property command. For example:
To get property Present:
### With busctl on BMC busctl get-property xyz.openbmc_project.Inventory.Manager /xyz/openbmc_project/inventory/system/chassis/motherboard/nvme0 xyz.openbmc_project.Inventory.Item Present
There is a JSON configuration file nvme_config.json
for drive index, bus ID, and the LED object path and bus name for each drive. For example,
{ "config": [ { "NVMeDriveIndex": 0, "NVMeDriveBusID": 16, "NVMeDriveFaultLEDGroupPath": "/xyz/openbmc_project/led/groups/led_u2_0_fault", "NVMeDriveLocateLEDGroupPath": "/xyz/openbmc_project/led/groups/led_u2_0_locate", "NVMeDriveLocateLEDControllerBusName":"xyz.openbmc_project.LED.Controller.led_u2_0_locate", "NVMeDriveLocateLEDControllerPath":"/xyz/openbmc_project/led/physical/led_u2_0_locate", "NVMeDrivePresentPin": 148, "NVMeDrivePwrGoodPin": 161 }, { "NVMeDriveIndex": 1, "NVMeDriveBusID": 17, "NVMeDriveFaultLEDGroupPath": "/xyz/openbmc_project/led/groups/led_u2_1_fault", "NVMeDriveLocateLEDGroupPath": "/xyz/openbmc_project/led/groups/led_u2_1_locate", "NVMeDriveLocateLEDControllerBusName":"xyz.openbmc_project.LED.Controller.led_u2_1_locate", "NVMeDriveLocateLEDControllerPath":"/xyz/openbmc_project/led/physical/led_u2_1_locate", "NVMeDrivePresentPin": 149, "NVMeDrivePwrGoodPin": 162 } ], "threshold":[ { "criticalHigh":70, "criticalLow":0, "maxValue":70, "minValue":0 } ] }
xyz.openbmc_project.nvme.manager
description above.This service will run automatically and look up NVMe drives every second.