diff options
Diffstat (limited to 'meta-quanta/meta-gbs/recipes-phosphor')
83 files changed, 5435 insertions, 0 deletions
diff --git a/meta-quanta/meta-gbs/recipes-phosphor/configuration/gbs-yaml-config.bb b/meta-quanta/meta-gbs/recipes-phosphor/configuration/gbs-yaml-config.bb new file mode 100644 index 000000000..cd632e132 --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/configuration/gbs-yaml-config.bb @@ -0,0 +1,31 @@ +SUMMARY = "YAML configuration for gbs" +PR = "r1" +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10" + +inherit allarch + +SRC_URI = " \ + file://gbs-ipmi-fru.yaml \ + file://gbs-ipmi-sensors.yaml \ + file://gbs-ipmi-fru-properties.yaml \ + " + +S = "${WORKDIR}" + +do_install() { + install -m 0644 -D gbs-ipmi-fru.yaml \ + ${D}${datadir}/${BPN}/ipmi-fru-read.yaml + install -m 0644 -D gbs-ipmi-sensors.yaml \ + ${D}${datadir}/${BPN}/ipmi-sensors.yaml + install -m 0644 -D gbs-ipmi-fru-properties.yaml \ + ${D}${datadir}/${BPN}/ipmi-extra-properties.yaml +} + +FILES_${PN}-dev = " \ + ${datadir}/${BPN}/ipmi-fru-read.yaml \ + ${datadir}/${BPN}/ipmi-sensors.yaml \ + ${datadir}/${BPN}/ipmi-extra-properties.yaml \ + " + +ALLOW_EMPTY_${PN} = "1" diff --git a/meta-quanta/meta-gbs/recipes-phosphor/configuration/gbs-yaml-config/gbs-ipmi-fru-properties.yaml b/meta-quanta/meta-gbs/recipes-phosphor/configuration/gbs-yaml-config/gbs-ipmi-fru-properties.yaml new file mode 100644 index 000000000..2dce3030c --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/configuration/gbs-yaml-config/gbs-ipmi-fru-properties.yaml @@ -0,0 +1,183 @@ +/system/chassis/motherboard: + xyz.openbmc_project.Inventory.Decorator.Replaceable: + FieldReplaceable: 'true' + xyz.openbmc_project.Inventory.Decorator.Cacheable: + Cached: 'true' + xyz.openbmc_project.Inventory.Item: + Present: 'true' + +/system/chassis/hsbp: + xyz.openbmc_project.Inventory.Decorator.Replaceable: + FieldReplaceable: 'true' + xyz.openbmc_project.Inventory.Decorator.Cacheable: + Cached: 'true' + xyz.openbmc_project.Inventory.Item: + Present: 'true' + +/system/chassis/fan: + xyz.openbmc_project.Inventory.Decorator.Replaceable: + FieldReplaceable: 'true' + xyz.openbmc_project.Inventory.Decorator.Cacheable: + Cached: 'true' + xyz.openbmc_project.Inventory.Item: + Present: 'true' + +/system/chassis/PE0: + xyz.openbmc_project.Inventory.Decorator.Replaceable: + FieldReplaceable: 'true' + xyz.openbmc_project.Inventory.Decorator.Cacheable: + Cached: 'true' + xyz.openbmc_project.Inventory.Item: + Present: 'true' + +/system/chassis/PE0/PE0: + xyz.openbmc_project.Inventory.Decorator.Replaceable: + FieldReplaceable: 'true' + xyz.openbmc_project.Inventory.Decorator.Cacheable: + Cached: 'true' + xyz.openbmc_project.Inventory.Item: + Present: 'true' + +/system/chassis/PE1: + xyz.openbmc_project.Inventory.Decorator.Replaceable: + FieldReplaceable: 'true' + xyz.openbmc_project.Inventory.Decorator.Cacheable: + Cached: 'true' + xyz.openbmc_project.Inventory.Item: + Present: 'true' + +/system/chassis/PE1/PE1: + xyz.openbmc_project.Inventory.Decorator.Replaceable: + FieldReplaceable: 'true' + xyz.openbmc_project.Inventory.Decorator.Cacheable: + Cached: 'true' + xyz.openbmc_project.Inventory.Item: + Present: 'true' + +/system/chassis/motherboard/nvme0: + xyz.openbmc_project.Inventory.Decorator.Replaceable: + FieldReplaceable: 'true' + xyz.openbmc_project.Inventory.Decorator.Cacheable: + Cached: 'true' + xyz.openbmc_project.Inventory.Item: + Present: 'true' + +/system/chassis/motherboard/nvme1: + xyz.openbmc_project.Inventory.Decorator.Replaceable: + FieldReplaceable: 'true' + xyz.openbmc_project.Inventory.Decorator.Cacheable: + Cached: 'true' + xyz.openbmc_project.Inventory.Item: + Present: 'true' + +/system/chassis/motherboard/nvme2: + xyz.openbmc_project.Inventory.Decorator.Replaceable: + FieldReplaceable: 'true' + xyz.openbmc_project.Inventory.Decorator.Cacheable: + Cached: 'true' + xyz.openbmc_project.Inventory.Item: + Present: 'true' + +/system/chassis/motherboard/nvme3: + xyz.openbmc_project.Inventory.Decorator.Replaceable: + FieldReplaceable: 'true' + xyz.openbmc_project.Inventory.Decorator.Cacheable: + Cached: 'true' + xyz.openbmc_project.Inventory.Item: + Present: 'true' + +/system/chassis/motherboard/nvme4: + xyz.openbmc_project.Inventory.Decorator.Replaceable: + FieldReplaceable: 'true' + xyz.openbmc_project.Inventory.Decorator.Cacheable: + Cached: 'true' + xyz.openbmc_project.Inventory.Item: + Present: 'true' + +/system/chassis/motherboard/nvme5: + xyz.openbmc_project.Inventory.Decorator.Replaceable: + FieldReplaceable: 'true' + xyz.openbmc_project.Inventory.Decorator.Cacheable: + Cached: 'true' + xyz.openbmc_project.Inventory.Item: + Present: 'true' + +/system/chassis/motherboard/nvme6: + xyz.openbmc_project.Inventory.Decorator.Replaceable: + FieldReplaceable: 'true' + xyz.openbmc_project.Inventory.Decorator.Cacheable: + Cached: 'true' + xyz.openbmc_project.Inventory.Item: + Present: 'true' + +/system/chassis/motherboard/nvme7: + xyz.openbmc_project.Inventory.Decorator.Replaceable: + FieldReplaceable: 'true' + xyz.openbmc_project.Inventory.Decorator.Cacheable: + Cached: 'true' + xyz.openbmc_project.Inventory.Item: + Present: 'true' + +/system/chassis/motherboard/nvme8: + xyz.openbmc_project.Inventory.Decorator.Replaceable: + FieldReplaceable: 'true' + xyz.openbmc_project.Inventory.Decorator.Cacheable: + Cached: 'true' + xyz.openbmc_project.Inventory.Item: + Present: 'true' + +/system/chassis/motherboard/nvme9: + xyz.openbmc_project.Inventory.Decorator.Replaceable: + FieldReplaceable: 'true' + xyz.openbmc_project.Inventory.Decorator.Cacheable: + Cached: 'true' + xyz.openbmc_project.Inventory.Item: + Present: 'true' + +/system/chassis/motherboard/nvme10: + xyz.openbmc_project.Inventory.Decorator.Replaceable: + FieldReplaceable: 'true' + xyz.openbmc_project.Inventory.Decorator.Cacheable: + Cached: 'true' + xyz.openbmc_project.Inventory.Item: + Present: 'true' + +/system/chassis/motherboard/nvme11: + xyz.openbmc_project.Inventory.Decorator.Replaceable: + FieldReplaceable: 'true' + xyz.openbmc_project.Inventory.Decorator.Cacheable: + Cached: 'true' + xyz.openbmc_project.Inventory.Item: + Present: 'true' + +/system/chassis/motherboard/nvme12: + xyz.openbmc_project.Inventory.Decorator.Replaceable: + FieldReplaceable: 'true' + xyz.openbmc_project.Inventory.Decorator.Cacheable: + Cached: 'true' + xyz.openbmc_project.Inventory.Item: + Present: 'true' + +/system/chassis/motherboard/nvme13: + xyz.openbmc_project.Inventory.Decorator.Replaceable: + FieldReplaceable: 'true' + xyz.openbmc_project.Inventory.Decorator.Cacheable: + Cached: 'true' + xyz.openbmc_project.Inventory.Item: + Present: 'true' + +/system/chassis/motherboard/nvme14: + xyz.openbmc_project.Inventory.Decorator.Replaceable: + FieldReplaceable: 'true' + xyz.openbmc_project.Inventory.Decorator.Cacheable: + Cached: 'true' + xyz.openbmc_project.Inventory.Item: + Present: 'true' + +/system/chassis/motherboard/nvme15: + xyz.openbmc_project.Inventory.Decorator.Replaceable: + FieldReplaceable: 'true' + xyz.openbmc_project.Inventory.Decorator.Cacheable: + Cached: 'true' + xyz.openbmc_project.Inventory.Item: + Present: 'true' diff --git a/meta-quanta/meta-gbs/recipes-phosphor/configuration/gbs-yaml-config/gbs-ipmi-fru.yaml b/meta-quanta/meta-gbs/recipes-phosphor/configuration/gbs-yaml-config/gbs-ipmi-fru.yaml new file mode 100644 index 000000000..53cc486eb --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/configuration/gbs-yaml-config/gbs-ipmi-fru.yaml @@ -0,0 +1,228 @@ +0x00: + /system/chassis/motherboard: + entityID: 7 + entityInstance: 0x00 + interfaces: + xyz.openbmc_project.Inventory.Decorator.Asset: + BuildDate: + IPMIFruProperty: Mfg Date + IPMIFruSection: Board + Manufacturer: + IPMIFruProperty: Manufacturer + IPMIFruSection: Board + SerialNumber: + IPMIFruProperty: Serial Number + IPMIFruSection: Board + PartNumber: + IPMIFruProperty: Part Number + IPMIFruSection: Board + xyz.openbmc_project.Inventory.Item: + PrettyName: + IPMIFruProperty: Name + IPMIFruSection: Board + xyz.openbmc_project.Inventory.Decorator.Revision: + Version: + IPMIFruProperty: FRU File ID + IPMIFruSection: Board + xyz.openbmc_project.Inventory.Item.System: + +0x01: + /system/chassis/hsbp: + entityID: 7 + entityInstance: 0x01 + interfaces: + xyz.openbmc_project.Inventory.Decorator.Asset: + BuildDate: + IPMIFruProperty: Mfg Date + IPMIFruSection: Board + SerialNumber: + IPMIFruProperty: Serial Number + IPMIFruSection: Board + PartNumber: + IPMIFruProperty: Part Number + IPMIFruSection: Board + Manufacturer: + IPMIFruProperty: Manufacturer + IPMIFruSection: Board + xyz.openbmc_project.Inventory.Item: + PrettyName: + IPMIFruProperty: Name + IPMIFruSection: Board + xyz.openbmc_project.Inventory.Decorator.Revision: + Version: + IPMIFruProperty: FRU File ID + IPMIFruSection: Board + +0x02: + /system/chassis/fan: + entityID: 7 + entityInstance: 0x02 + interfaces: + xyz.openbmc_project.Inventory.Decorator.Asset: + BuildDate: + IPMIFruProperty: Mfg Date + IPMIFruSection: Board + SerialNumber: + IPMIFruProperty: Serial Number + IPMIFruSection: Board + PartNumber: + IPMIFruProperty: Part Number + IPMIFruSection: Board + Manufacturer: + IPMIFruProperty: Manufacturer + IPMIFruSection: Board + xyz.openbmc_project.Inventory.Item: + PrettyName: + IPMIFruProperty: Name + IPMIFruSection: Board + xyz.openbmc_project.Inventory.Decorator.Revision: + Version: + IPMIFruProperty: FRU File ID + IPMIFruSection: Board + +0x03: + /system/chassis/PE0: &ADD_IN_CARD_BOARD_DEFAULTS + entityID: 11 + entityInstance: 0x00 + interfaces: + xyz.openbmc_project.Inventory.Decorator.Asset: + BuildDate: + IPMIFruProperty: Mfg Date + IPMIFruSection: Board + SerialNumber: + IPMIFruProperty: Serial Number + IPMIFruSection: Board + PartNumber: + IPMIFruProperty: Part Number + IPMIFruSection: Board + Manufacturer: + IPMIFruProperty: Manufacturer + IPMIFruSection: Board + xyz.openbmc_project.Inventory.Item: + PrettyName: + IPMIFruProperty: Name + IPMIFruSection: Board + xyz.openbmc_project.Inventory.Decorator.Revision: + Version: + IPMIFruProperty: FRU File ID + IPMIFruSection: Board + /system/chassis/PE0/PE0: &ADD_IN_CARD_PRODUCT_DEFAULTS + entityID: 11 + entityInstance: 0x00 + interfaces: + xyz.openbmc_project.Inventory.Decorator.Asset: + BuildDate: + IPMIFruProperty: Mfg Date + IPMIFruSection: Product + SerialNumber: + IPMIFruProperty: Serial Number + IPMIFruSection: Product + Model: + IPMIFruProperty: Model Number + IPMIFruSection: Product + Manufacturer: + IPMIFruProperty: Manufacturer + IPMIFruSection: Product + xyz.openbmc_project.Inventory.Item: + PrettyName: + IPMIFruProperty: Name + IPMIFruSection: Product + +0x04: + /system/chassis/PE1: + entityInstance: 0x01 + <<: *ADD_IN_CARD_BOARD_DEFAULTS + /system/chassis/PE1/PE1: + entityInstance: 0x01 + <<: *ADD_IN_CARD_PRODUCT_DEFAULTS + +0x05: + /system/chassis/motherboard/nvme0: &NVME_BOARD_DEFAULTS + entityID: 4 + entityInstance: 0x60 + interfaces: + xyz.openbmc_project.Inventory.Decorator.Asset: + Manufacturer: + IPMIFruProperty: Manufacturer + IPMIFruSection: Product + SerialNumber: + IPMIFruProperty: Serial Number + IPMIFruSection: Product + Model: + IPMIFruProperty: Model Number + IPMIFruSection: Product + +0x06: + /system/chassis/motherboard/nvme1: + entityInstance: 0x61 + <<: *NVME_BOARD_DEFAULTS + +0x07: + /system/chassis/motherboard/nvme2: + entityInstance: 0x62 + <<: *NVME_BOARD_DEFAULTS + +0x08: + /system/chassis/motherboard/nvme3: + entityInstance: 0x63 + <<: *NVME_BOARD_DEFAULTS + +0x09: + /system/chassis/motherboard/nvme4: + entityInstance: 0x64 + <<: *NVME_BOARD_DEFAULTS + +0x0A: + /system/chassis/motherboard/nvme5: + entityInstance: 0x65 + <<: *NVME_BOARD_DEFAULTS + +0x0B: + /system/chassis/motherboard/nvme6: + entityInstance: 0x66 + <<: *NVME_BOARD_DEFAULTS + +0x0C: + /system/chassis/motherboard/nvme7: + entityInstance: 0x67 + <<: *NVME_BOARD_DEFAULTS + +0x0D: + /system/chassis/motherboard/nvme8: + entityInstance: 0x68 + <<: *NVME_BOARD_DEFAULTS + +0x0E: + /system/chassis/motherboard/nvme9: + entityInstance: 0x69 + <<: *NVME_BOARD_DEFAULTS + +0x0F: + /system/chassis/motherboard/nvme10: + entityInstance: 0x6A + <<: *NVME_BOARD_DEFAULTS + +0x10: + /system/chassis/motherboard/nvme11: + entityInstance: 0x6B + <<: *NVME_BOARD_DEFAULTS + +0x11: + /system/chassis/motherboard/nvme12: + entityInstance: 0x6C + <<: *NVME_BOARD_DEFAULTS + +0x12: + /system/chassis/motherboard/nvme13: + entityInstance: 0x6D + <<: *NVME_BOARD_DEFAULTS + +0x13: + /system/chassis/motherboard/nvme14: + entityInstance: 0x6E + <<: *NVME_BOARD_DEFAULTS + +0x14: + /system/chassis/motherboard/nvme15: + entityInstance: 0x6F + <<: *NVME_BOARD_DEFAULTS diff --git a/meta-quanta/meta-gbs/recipes-phosphor/configuration/gbs-yaml-config/gbs-ipmi-sensors.yaml b/meta-quanta/meta-gbs/recipes-phosphor/configuration/gbs-yaml-config/gbs-ipmi-sensors.yaml new file mode 100644 index 000000000..929a566a2 --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/configuration/gbs-yaml-config/gbs-ipmi-sensors.yaml @@ -0,0 +1,1254 @@ +0x10: &temperature + entityID: 0x07 + entityInstance: 0x1c + sensorType: 0x01 + path: /xyz/openbmc_project/sensors/temperature/i2cool_0 + sensorReadingType: 0x01 + multiplierM: 1 + offsetB: 0 + bExp: 0 + rExp: 0 + unit: xyz.openbmc_project.Sensor.Value.Unit.DegreesC + mutability: Mutability::Write|Mutability::Read + serviceInterface: org.freedesktop.DBus.Properties + readingType: readingData + sensorUnits1: 0x80 + interfaces: + xyz.openbmc_project.Sensor.Value: + Value: + Offsets: + 0xFF: + type: double + +0x11: + <<: *temperature + entityInstance: 0x1d + path: /xyz/openbmc_project/sensors/temperature/i2cool_1 + +0x12: + <<: *temperature + entityInstance: 0x1e + path: /xyz/openbmc_project/sensors/temperature/i2cool_2 + +0x13: + <<: *temperature + entityInstance: 0x1f + path: /xyz/openbmc_project/sensors/temperature/powerseq_temp + +0x14: + <<: *temperature + entityID: 0x03 + entityInstance: 0x00 + path: /xyz/openbmc_project/sensors/temperature/cputemp + +0x15: &nvme_temperature + entityID: 0x04 + entityInstance: 0x00 + sensorType: 0x01 + path: /xyz/openbmc_project/sensors/temperature/nvme0 + sensorReadingType: 0x01 + mutability: Mutability::Write|Mutability::Read + serviceInterface: org.freedesktop.DBus.Properties + readingType: readingData + sensorNamePattern: nameLeaf + sensorUnits1: 0x80 + unit: xyz.openbmc_project.Sensor.Value.Unit.DegreesC + interfaces: + xyz.openbmc_project.Sensor.Value: + Value: + Offsets: + 0xFF: + type: double + +0x16: + <<: *nvme_temperature + entityInstance: 0x01 + path: /xyz/openbmc_project/sensors/temperature/nvme1 + +0x17: + <<: *nvme_temperature + entityInstance: 0x02 + path: /xyz/openbmc_project/sensors/temperature/nvme2 + +0x18: + <<: *nvme_temperature + entityInstance: 0x03 + path: /xyz/openbmc_project/sensors/temperature/nvme3 + +0x19: + <<: *nvme_temperature + entityInstance: 0x04 + path: /xyz/openbmc_project/sensors/temperature/nvme4 + +0x1A: + <<: *nvme_temperature + entityInstance: 0x05 + path: /xyz/openbmc_project/sensors/temperature/nvme5 + +0x1B: + <<: *nvme_temperature + entityInstance: 0x06 + path: /xyz/openbmc_project/sensors/temperature/nvme6 + +0x1C: + <<: *nvme_temperature + entityInstance: 0x07 + path: /xyz/openbmc_project/sensors/temperature/nvme7 + +0x1D: + <<: *nvme_temperature + entityInstance: 0x08 + path: /xyz/openbmc_project/sensors/temperature/nvme8 + +0x1E: + <<: *nvme_temperature + entityInstance: 0x09 + path: /xyz/openbmc_project/sensors/temperature/nvme9 + +0x1F: + <<: *nvme_temperature + entityInstance: 0x0a + path: /xyz/openbmc_project/sensors/temperature/nvme10 + +0x20: + <<: *nvme_temperature + entityInstance: 0x0b + path: /xyz/openbmc_project/sensors/temperature/nvme11 + +0x21: + <<: *nvme_temperature + entityInstance: 0x0c + path: /xyz/openbmc_project/sensors/temperature/nvme12 + +0x22: + <<: *nvme_temperature + entityInstance: 0x0d + path: /xyz/openbmc_project/sensors/temperature/nvme13 + +0x23: + <<: *nvme_temperature + entityInstance: 0x0e + path: /xyz/openbmc_project/sensors/temperature/nvme14 + +0x24: + <<: *nvme_temperature + entityInstance: 0x0f + path: /xyz/openbmc_project/sensors/temperature/nvme15 + +# Virtual Sensors +0x25: + <<: *temperature + entityID: 0x1E + entityInstance: 0x00 + path: /xyz/openbmc_project/extsensors/margin/fleeting0 + +0x26: + <<: *temperature + entityID: 0x1E + entityInstance: 0x01 + path: /xyz/openbmc_project/extsensors/margin/fleeting1 + +0x30: &voltage + entityID: 0x07 + entityInstance: 0x00 + sensorType: 0x02 + path: /xyz/openbmc_project/sensors/voltage/p1v8_stby + sensorReadingType: 0x01 + multiplierM: 78 + offsetB: 0 + bExp: 0 + rExp: -4 + unit: xyz.openbmc_project.Sensor.Value.Unit.Volts + mutability: Mutability::Read + serviceInterface: org.freedesktop.DBus.Properties + readingType: readingData + sensorNamePattern: nameLeaf + interfaces: + xyz.openbmc_project.Sensor.Value: + Value: + Offsets: + 0xFF: + type: double + +0x31: + <<: *voltage + entityInstance: 0x01 + path: /xyz/openbmc_project/sensors/voltage/vddcr_soc_stby + multiplierM: 392 + rExp: -5 + +0x32: + <<: *voltage + entityInstance: 0x02 + path: /xyz/openbmc_project/sensors/voltage/p2v5_stby + multiplierM: 118 + rExp: -4 + +0x33: + <<: *voltage + entityInstance: 0x03 + path: /xyz/openbmc_project/sensors/voltage/p1v2_stby + multiplierM: 78 + rExp: -4 + +0x34: + <<: *voltage + entityInstance: 0x04 + path: /xyz/openbmc_project/sensors/voltage/p1v175_stby + multiplierM: 78 + rExp: -4 + +0x35: + <<: *voltage + entityInstance: 0x05 + path: /xyz/openbmc_project/sensors/voltage/p1v8 + multiplierM: 78 + rExp: -4 + +0x36: + <<: *voltage + entityInstance: 0x06 + path: /xyz/openbmc_project/sensors/voltage/p3v3 + multiplierM: 157 + rExp: -4 + +0x37: + <<: *voltage + entityInstance: 0x07 + path: /xyz/openbmc_project/sensors/voltage/pwrgd_pvpp + multiplierM: 235 + rExp: -4 + +0x38: + <<: *voltage + entityInstance: 0x08 + path: /xyz/openbmc_project/sensors/voltage/pwrgd_pvddio + multiplierM: 235 + rExp: -4 + +0x39: + <<: *voltage + entityInstance: 0x09 + path: /xyz/openbmc_project/sensors/voltage/pwrgd_cpuvr + multiplierM: 235 + rExp: -4 + +0x3A: + <<: *voltage + entityInstance: 0x0a + path: /xyz/openbmc_project/sensors/voltage/p3v3_stby + multiplierM: 157 + rExp: -4 + +0x3B: + <<: *voltage + entityInstance: 0x0b + path: /xyz/openbmc_project/sensors/voltage/p5v_stby + multiplierM: 235 + rExp: -4 + +# ADC sensor +0x46: + <<: *voltage + entityID: 0x28 + entityInstance: 0 + path: /xyz/openbmc_project/sensors/voltage/p3v_bat_adc + multiplierM: 157 + offsetB: 0 + bExp: 0 + rExp: -4 + +# VRM sensors +# PVDDCR_CPU +# VRM input voltage for various rails are around 13.5V. Use the same config. +0x3C: &voltage_13v5_in + entityID: 0x07 + sensorType: 0x02 + entityInstance: 0x0c + path: /xyz/openbmc_project/sensors/voltage/vddcr_cpu_in + sensorReadingType: 0x01 + multiplierM: 55 + offsetB: 0 + bExp: 0 + unit: xyz.openbmc_project.Sensor.Value.Unit.Volts + rExp: -3 + mutability: Mutability::Read + serviceInterface: org.freedesktop.DBus.Properties + readingType: readingData + interfaces: + xyz.openbmc_project.Sensor.Value: + Value: + Offsets: + 0xFF: + type: double + +0x3D: + <<: *voltage + entityInstance: 0x0d + path: /xyz/openbmc_project/sensors/voltage/vddcr_cpu_out + multiplierM: 78 + rExp: -4 + +0x50: ¤t + entityID: 0x07 + entityInstance: 0x14 + sensorType: 0x03 + path: /xyz/openbmc_project/sensors/current/vddcr_cpu_in + sensorReadingType: 0x01 + multiplierM: 86 + rExp: -3 + unit: xyz.openbmc_project.Sensor.Value.Unit.Amperes + mutability: Mutability::Read + serviceInterface: org.freedesktop.DBus.Properties + readingType: readingData + sensorNamePattern: nameLeaf + interfaces: + xyz.openbmc_project.Sensor.Value: + Value: + Offsets: + 0xFF: + type: double + +0x51: + <<: *current + entityInstance: 0x15 + path: /xyz/openbmc_project/sensors/current/vddcr_cpu_out + multiplierM: 1 + rExp: 0 + +0x27: + <<: *temperature + entityInstance: 0x28 + path: /xyz/openbmc_project/sensors/temperature/vddcr_cpu + +# PVDDCR_SOC0 +0x3E: + <<: *voltage_13v5_in + entityInstance: 0x0e + path: /xyz/openbmc_project/sensors/voltage/vddcr_soc_in + multiplierM: 55 + rExp: -3 + +0x3F: + <<: *voltage + entityInstance: 0x0f + path: /xyz/openbmc_project/sensors/voltage/vddcr_soc_out + multiplierM: 78 + rExp: -4 + +0x52: + <<: *current + entityInstance: 0x16 + path: /xyz/openbmc_project/sensors/current/vddcr_soc_in + multiplierM: 353 + rExp: -4 + +0x53: + <<: *current + entityInstance: 0x17 + path: /xyz/openbmc_project/sensors/current/vddcr_soc_out + multiplierM: 345 + rExp: -3 + +0x28: + <<: *temperature + entityInstance: 0x29 + path: /xyz/openbmc_project/sensors/temperature/vddcr_soc + +# PVDDIO_ABCD +0x40: + <<: *voltage + entityInstance: 0x10 + path: /xyz/openbmc_project/sensors/voltage/vddio_abcd_out + multiplierM: 78 + rExp: -4 + +0x41: + <<: *voltage_13v5_in + entityInstance: 0x11 + path: /xyz/openbmc_project/sensors/voltage/vddio_abcd_in + multiplierM: 55 + rExp: -3 + +0x55: + <<: *current + entityInstance: 0x19 + path: /xyz/openbmc_project/sensors/current/vddio_abcd_in + multiplierM: 353 + rExp: -4 + +0x54: + <<: *current + entityInstance: 0x18 + path: /xyz/openbmc_project/sensors/current/vddio_abcd_out + multiplierM: 345 + rExp: -3 + +0x29: + <<: *temperature + entityInstance: 0x2a + path: /xyz/openbmc_project/sensors/temperature/vddio_abcd + +# PVDDIO_EFGH +0x42: + <<: *voltage + entityInstance: 0x12 + path: /xyz/openbmc_project/sensors/voltage/vddio_efgh_out + multiplierM: 78 + rExp: -4 + +0x43: + <<: *voltage_13v5_in + entityInstance: 0x13 + path: /xyz/openbmc_project/sensors/voltage/vddio_efgh_in + multiplierM: 55 + rExp: -3 + +0x57: + <<: *current + entityInstance: 0x1b + path: /xyz/openbmc_project/sensors/current/vddio_efgh_in + multiplierM: 353 + rExp: -4 + +0x56: + <<: *current + entityInstance: 0x1a + path: /xyz/openbmc_project/sensors/current/vddio_efgh_out + multiplierM: 345 + rExp: -3 + +0x2A: + <<: *temperature + entityInstance: 0x2b + path: /xyz/openbmc_project/sensors/temperature/vddio_efgh + +# P12V_1 +0x47: + <<: *voltage + entityInstance: 0x20 + path: /xyz/openbmc_project/sensors/voltage/p12v_mobo_out + multiplierM: 55 + rExp: -3 + +0x48: + <<: *voltage_13v5_in + entityInstance: 0x21 + path: /xyz/openbmc_project/sensors/voltage/p12v_mobo_in + multiplierM: 255 + rExp: -3 + +0x5A: + <<: *current + entityInstance: 0x25 + path: /xyz/openbmc_project/sensors/current/p12v_mobo_in + multiplierM: 137 + rExp: -3 + +0x59: + <<: *current + entityInstance: 0x24 + path: /xyz/openbmc_project/sensors/current/p12v_mobo_out + multiplierM: 59 + rExp: -2 + +0x2B: + <<: *temperature + entityInstance: 0x2c + path: /xyz/openbmc_project/sensors/temperature/p12v_mobo + +# P12V_2 +0x49: + <<: *voltage + entityInstance: 0x22 + path: /xyz/openbmc_project/sensors/voltage/p12v_fan_out + multiplierM: 55 + rExp: -3 + +0x4A: + <<: *voltage_13v5_in + entityInstance: 0x23 + path: /xyz/openbmc_project/sensors/voltage/p12v_fan_in + multiplierM: 255 + rExp: -3 + +0x5C: + <<: *current + entityInstance: 0x27 + path: /xyz/openbmc_project/sensors/current/p12v_fan_in + multiplierM: 137 + rExp: -3 + +0x5B: + <<: *current + entityInstance: 0x26 + path: /xyz/openbmc_project/sensors/current/p12v_fan_out + multiplierM: 59 + rExp: -2 + +0x2C: + <<: *temperature + entityInstance: 0x2d + path: /xyz/openbmc_project/sensors/temperature/p12v_fan + +# Hotswap controller +0x44: + <<: *voltage + entityID: 0x0E + entityInstance: 0x00 + path: /xyz/openbmc_project/sensors/voltage/hotswap_vin + multiplierM: 259 + rExp: -3 + +0x45: + <<: *voltage + entityID: 0x0E + entityInstance: 0x01 + path: /xyz/openbmc_project/sensors/voltage/hotswap_vout + multiplierM: 259 + rExp: -3 + +0x58: + <<: *current + entityID: 0x0E + entityInstance: 0x02 + path: /xyz/openbmc_project/sensors/current/hotswap_iout + multiplierM: 216 + rExp: -3 + +0x70: + entityID: 0x0E + entityInstance: 0x03 + sensorType: 0x0B + path: /xyz/openbmc_project/sensors/power/hotswap_pout + sensorReadingType: 0x01 + multiplierM: 86 + offsetB: 0 + bExp: 0 + rExp: -1 + unit: xyz.openbmc_project.Sensor.Value.Unit.Watts + mutability: Mutability::Write|Mutability::Read + serviceInterface: org.freedesktop.DBus.Properties + readingType: readingData + sensorNamePattern: nameLeaf + interfaces: + xyz.openbmc_project.Sensor.Value: + Value: + Offsets: + 0xFF: + type: double + +0x2D: + <<: *temperature + entityInstance: 0x2e + path: /xyz/openbmc_project/sensors/temperature/hotswap + +# fan/pwm mapping +# fan0/1 on Mobo, fb_fan0/1/2 on fan board +# PWM0 => fan tach 0 +# PWM1 => fan tach 1 +# PWM2 => fan tach 2 +# PWM3 => fan tach 3 +# PWM4 => fan tach 4 +0x60: &fan_rpm_read + entityID: 0x1D + entityInstance: 0x00 + sensorType: 0x04 + path: /xyz/openbmc_project/sensors/fan_tach/fan0 + sensorReadingType: 0x01 + multiplierM: 81 + offsetB: 0 + bExp: 0 + rExp: 0 + unit: xyz.openbmc_project.Sensor.Value.Unit.RPMS + mutability: Mutability::Write|Mutability::Read + serviceInterface: org.freedesktop.DBus.Properties + readingType: readingData + sensorNamePattern: nameLeaf + interfaces: + xyz.openbmc_project.Sensor.Value: + Value: + Offsets: + 0xFF: + type: double + +0x61: + <<: *fan_rpm_read + entityInstance: 0x01 + path: /xyz/openbmc_project/sensors/fan_tach/fan1 + +0x62: + <<: *fan_rpm_read + entityInstance: 0x02 + path: /xyz/openbmc_project/sensors/fan_tach/fb_fan0 + +0x63: + <<: *fan_rpm_read + entityInstance: 0x03 + path: /xyz/openbmc_project/sensors/fan_tach/fb_fan1 + +0x64: + <<: *fan_rpm_read + entityInstance: 0x04 + path: /xyz/openbmc_project/sensors/fan_tach/fb_fan2 + +0x65: &fan_pwm + entityID: 0x1D + sensorType: 0x04 + entityInstance: 0x05 + path: /xyz/openbmc_project/sensors/fan_tach/fan0 + sensorReadingType: 0x01 + multiplierM: 1 + offsetB: 0 + bExp: 0 + mutability: Mutability::Write + serviceInterface: org.freedesktop.DBus.Properties + readingType: readingData + interfaces: + xyz.openbmc_project.Control.FanPwm: + Target: + Offsets: + 0xFF: + type: uint64_t + +0x66: + <<: *fan_pwm + entityInstance: 0x06 + path: /xyz/openbmc_project/sensors/fan_tach/fan1 + +0x67: + <<: *fan_pwm + entityInstance: 0x07 + path: /xyz/openbmc_project/sensors/fan_tach/fb_fan0 + +0x68: + <<: *fan_pwm + entityInstance: 0x08 + path: /xyz/openbmc_project/sensors/fan_tach/fb_fan1 + +0x69: + <<: *fan_pwm + entityInstance: 0x09 + path: /xyz/openbmc_project/sensors/fan_tach/fb_fan2 + +# NVME SSD locate/fault LEDs +0x71: &locateled + entityID: 0x04 + entityInstance: 0x10 + sensorType: 0x21 + path: /xyz/openbmc_project/led/groups/led_u2_0_locate + sensorReadingType: 0x6F + mutability: Mutability::Write|Mutability::Read + serviceInterface: org.freedesktop.DBus.Properties + readingType: assertion + sensorNamePattern: nameLeaf + interfaces: + xyz.openbmc_project.Led.Group: + Asserted: + Offsets: + 0x01: + type: bool + assert: true + +0x72: + <<: *locateled + entityInstance: 0x11 + path: /xyz/openbmc_project/led/groups/led_u2_1_locate + +0x73: + <<: *locateled + entityInstance: 0x12 + path: /xyz/openbmc_project/led/groups/led_u2_2_locate + +0x74: + <<: *locateled + entityInstance: 0x13 + path: /xyz/openbmc_project/led/groups/led_u2_3_locate + +0x75: + <<: *locateled + entityInstance: 0x14 + path: /xyz/openbmc_project/led/groups/led_u2_4_locate + +0x76: + <<: *locateled + entityInstance: 0x15 + path: /xyz/openbmc_project/led/groups/led_u2_5_locate + +0x77: + <<: *locateled + entityInstance: 0x16 + path: /xyz/openbmc_project/led/groups/led_u2_6_locate + +0x78: + <<: *locateled + entityInstance: 0x17 + path: /xyz/openbmc_project/led/groups/led_u2_7_locate + +0x79: + <<: *locateled + entityInstance: 0x18 + path: /xyz/openbmc_project/led/groups/led_u2_8_locate + +0x7A: + <<: *locateled + entityInstance: 0x19 + path: /xyz/openbmc_project/led/groups/led_u2_9_locate + +0x7B: + <<: *locateled + entityInstance: 0x1a + path: /xyz/openbmc_project/led/groups/led_u2_10_locate + +0x7C: + <<: *locateled + entityInstance: 0x1b + path: /xyz/openbmc_project/led/groups/led_u2_11_locate + +0x7D: + <<: *locateled + entityInstance: 0x1c + path: /xyz/openbmc_project/led/groups/led_u2_12_locate + +0x7E: + <<: *locateled + entityInstance: 0x1d + path: /xyz/openbmc_project/led/groups/led_u2_13_locate + +0x7F: + <<: *locateled + entityInstance: 0x1e + path: /xyz/openbmc_project/led/groups/led_u2_14_locate + +0x80: + <<: *locateled + entityInstance: 0x1f + path: /xyz/openbmc_project/led/groups/led_u2_15_locate + +0x81: &faultled + entityID: 0x04 + entityInstance: 0x20 + sensorType: 0x21 + path: /xyz/openbmc_project/led/groups/led_u2_0_fault + sensorReadingType: 0x6F + mutability: Mutability::Read + serviceInterface: org.freedesktop.DBus.Properties + readingType: assertion + sensorNamePattern: nameLeaf + interfaces: + xyz.openbmc_project.Led.Group: + Asserted: + Offsets: + 0x00: + type: bool + assert: true + +0x82: + <<: *faultled + entityInstance: 0x21 + path: /xyz/openbmc_project/led/groups/led_u2_1_fault + +0x83: + <<: *faultled + entityInstance: 0x22 + path: /xyz/openbmc_project/led/groups/led_u2_2_fault + +0x84: + <<: *faultled + entityInstance: 0x23 + path: /xyz/openbmc_project/led/groups/led_u2_3_fault + +0x85: + <<: *faultled + entityInstance: 0x24 + path: /xyz/openbmc_project/led/groups/led_u2_4_fault + +0x86: + <<: *faultled + entityInstance: 0x25 + path: /xyz/openbmc_project/led/groups/led_u2_5_fault + +0x87: + <<: *faultled + entityInstance: 0x26 + path: /xyz/openbmc_project/led/groups/led_u2_6_fault + +0x88: + <<: *faultled + entityInstance: 0x27 + path: /xyz/openbmc_project/led/groups/led_u2_7_fault + +0x89: + <<: *faultled + entityInstance: 0x28 + path: /xyz/openbmc_project/led/groups/led_u2_8_fault + +0x8A: + <<: *faultled + entityInstance: 0x29 + path: /xyz/openbmc_project/led/groups/led_u2_9_fault + +0x8B: + <<: *faultled + entityInstance: 0x2a + path: /xyz/openbmc_project/led/groups/led_u2_10_fault + +0x8C: + <<: *faultled + entityInstance: 0x2b + path: /xyz/openbmc_project/led/groups/led_u2_11_fault + +0x8D: + <<: *faultled + entityInstance: 0x2c + path: /xyz/openbmc_project/led/groups/led_u2_12_fault + +0x8E: + <<: *faultled + entityInstance: 0x2d + path: /xyz/openbmc_project/led/groups/led_u2_13_fault + +0x8F: + <<: *faultled + entityInstance: 0x2e + path: /xyz/openbmc_project/led/groups/led_u2_14_fault + +0x90: + <<: *faultled + entityInstance: 0x2f + path: /xyz/openbmc_project/led/groups/led_u2_15_fault + +# NVME SSD presence +0xB0: &present + entityID: 0x04 + entityInstance: 0x30 + sensorType: 0x25 + path: /xyz/openbmc_project/inventory/system/chassis/motherboard/nvme0 + sensorReadingType: 0x6F + mutability: Mutability::Write|Mutability::Read + serviceInterface: org.freedesktop.DBus.Properties + readingType: assertion + sensorNamePattern: nameLeaf + interfaces: + xyz.openbmc_project.Inventory.Item: + Present: + Offsets: + 0x00: + assert: true + type: bool + 0x01: + assert: false + type: bool + +0xB1: + <<: *present + entityInstance: 0x31 + path: /xyz/openbmc_project/inventory/system/chassis/motherboard/nvme1 + +0xB2: + <<: *present + entityInstance: 0x32 + path: /xyz/openbmc_project/inventory/system/chassis/motherboard/nvme2 + +0xB3: + <<: *present + entityInstance: 0x33 + path: /xyz/openbmc_project/inventory/system/chassis/motherboard/nvme3 + +0xB4: + <<: *present + entityInstance: 0x34 + path: /xyz/openbmc_project/inventory/system/chassis/motherboard/nvme4 + +0xB5: + <<: *present + entityInstance: 0x35 + path: /xyz/openbmc_project/inventory/system/chassis/motherboard/nvme5 + +0xB6: + <<: *present + entityInstance: 0x36 + path: /xyz/openbmc_project/inventory/system/chassis/motherboard/nvme6 + +0xB7: + <<: *present + entityInstance: 0x37 + path: /xyz/openbmc_project/inventory/system/chassis/motherboard/nvme7 + +0xB8: + <<: *present + entityInstance: 0x38 + path: /xyz/openbmc_project/inventory/system/chassis/motherboard/nvme8 + +0xB9: + <<: *present + entityInstance: 0x39 + path: /xyz/openbmc_project/inventory/system/chassis/motherboard/nvme9 + +0xBA: + <<: *present + entityInstance: 0x3a + path: /xyz/openbmc_project/inventory/system/chassis/motherboard/nvme10 + +0xBB: + <<: *present + entityInstance: 0x3b + path: /xyz/openbmc_project/inventory/system/chassis/motherboard/nvme11 + +0xBC: + <<: *present + entityInstance: 0x3c + path: /xyz/openbmc_project/inventory/system/chassis/motherboard/nvme12 + +0xBD: + <<: *present + entityInstance: 0x3d + path: /xyz/openbmc_project/inventory/system/chassis/motherboard/nvme13 + +0xBE: + <<: *present + entityInstance: 0x3e + path: /xyz/openbmc_project/inventory/system/chassis/motherboard/nvme14 + +0xBF: + <<: *present + entityInstance: 0x3f + path: /xyz/openbmc_project/inventory/system/chassis/motherboard/nvme15 + +0xC0: &nvme_pwrdis + entityID: 0x04 + entityInstance: 0x40 + sensorType: 0x21 + path: /xyz/openbmc_project/control/nvme/u2_0_pwr_dis + sensorReadingType: 0x6F + mutability: Mutability::Write|Mutability::Read + serviceInterface: org.freedesktop.DBus.Properties + readingType: assertion + sensorNamePattern: nameLeaf + interfaces: + xyz.openbmc_project.Control.Nvme.Power: + Asserted: + Offsets: + 0x08: + type: string + assert: xyz.openbmc_project.Control.Nvme.Power.SlotDisabled + deassert: xyz.openbmc_project.Control.Nvme.Power.SlotEnabled + +0xC1: + <<: *nvme_pwrdis + entityInstance: 0x41 + path: /xyz/openbmc_project/control/nvme/u2_1_pwr_dis + +0xC2: + <<: *nvme_pwrdis + entityInstance: 0x42 + path: /xyz/openbmc_project/control/nvme/u2_2_pwr_dis + +0xC3: + <<: *nvme_pwrdis + entityInstance: 0x43 + path: /xyz/openbmc_project/control/nvme/u2_3_pwr_dis + +0xC4: + <<: *nvme_pwrdis + entityInstance: 0x44 + path: /xyz/openbmc_project/control/nvme/u2_4_pwr_dis + +0xC5: + <<: *nvme_pwrdis + entityInstance: 0x45 + path: /xyz/openbmc_project/control/nvme/u2_5_pwr_dis + +0xC6: + <<: *nvme_pwrdis + entityInstance: 0x46 + path: /xyz/openbmc_project/control/nvme/u2_6_pwr_dis + +0xC7: + <<: *nvme_pwrdis + entityInstance: 0x47 + path: /xyz/openbmc_project/control/nvme/u2_7_pwr_dis + +0xC8: + <<: *nvme_pwrdis + entityInstance: 0x48 + path: /xyz/openbmc_project/control/nvme/u2_8_pwr_dis + +0xC9: + <<: *nvme_pwrdis + entityInstance: 0x49 + path: /xyz/openbmc_project/control/nvme/u2_9_pwr_dis + +0xCA: + <<: *nvme_pwrdis + entityInstance: 0x4A + path: /xyz/openbmc_project/control/nvme/u2_10_pwr_dis + +0xCB: + <<: *nvme_pwrdis + entityInstance: 0x4B + path: /xyz/openbmc_project/control/nvme/u2_11_pwr_dis + +0xCC: + <<: *nvme_pwrdis + entityInstance: 0x4C + path: /xyz/openbmc_project/control/nvme/u2_12_pwr_dis + +0xCD: + <<: *nvme_pwrdis + entityInstance: 0x4D + path: /xyz/openbmc_project/control/nvme/u2_13_pwr_dis + +0xCE: + <<: *nvme_pwrdis + entityInstance: 0x4E + path: /xyz/openbmc_project/control/nvme/u2_14_pwr_dis + +0xCF: + <<: *nvme_pwrdis + entityInstance: 0x4F + path: /xyz/openbmc_project/control/nvme/u2_15_pwr_dis + +0xD0: &nvme_pwren + entityID: 0x04 + entityInstance: 0x50 + sensorType: 0x21 + path: /xyz/openbmc_project/control/nvme/pwr_u2_0_en + sensorReadingType: 0x6F + mutability: Mutability::Write|Mutability::Read + serviceInterface: org.freedesktop.DBus.Properties + readingType: assertion + sensorNamePattern: nameLeaf + interfaces: + xyz.openbmc_project.Control.Nvme.Power: + Asserted: + Offsets: + 0x05: + type: string + assert: xyz.openbmc_project.Control.Nvme.Power.Off + deassert: xyz.openbmc_project.Control.Nvme.Power.On + +0xD1: + <<: *nvme_pwren + entityInstance: 0x51 + path: /xyz/openbmc_project/control/nvme/pwr_u2_1_en + +0xD2: + <<: *nvme_pwren + entityInstance: 0x52 + path: /xyz/openbmc_project/control/nvme/pwr_u2_2_en + +0xD3: + <<: *nvme_pwren + entityInstance: 0x53 + path: /xyz/openbmc_project/control/nvme/pwr_u2_3_en + +0xD4: + <<: *nvme_pwren + entityInstance: 0x54 + path: /xyz/openbmc_project/control/nvme/pwr_u2_4_en + +0xD5: + <<: *nvme_pwren + entityInstance: 0x55 + path: /xyz/openbmc_project/control/nvme/pwr_u2_5_en + +0xD6: + <<: *nvme_pwren + entityInstance: 0x56 + path: /xyz/openbmc_project/control/nvme/pwr_u2_6_en + +0xD7: + <<: *nvme_pwren + entityInstance: 0x57 + path: /xyz/openbmc_project/control/nvme/pwr_u2_7_en + +0xD8: + <<: *nvme_pwren + entityInstance: 0x58 + path: /xyz/openbmc_project/control/nvme/pwr_u2_8_en + +0xD9: + <<: *nvme_pwren + entityInstance: 0x59 + path: /xyz/openbmc_project/control/nvme/pwr_u2_9_en + +0xDA: + <<: *nvme_pwren + entityInstance: 0x5A + path: /xyz/openbmc_project/control/nvme/pwr_u2_10_en + +0xDB: + <<: *nvme_pwren + entityInstance: 0x5B + path: /xyz/openbmc_project/control/nvme/pwr_u2_11_en + +0xDC: + <<: *nvme_pwren + entityInstance: 0x5C + path: /xyz/openbmc_project/control/nvme/pwr_u2_12_en + +0xDD: + <<: *nvme_pwren + entityInstance: 0x5D + path: /xyz/openbmc_project/control/nvme/pwr_u2_13_en + +0xDE: + <<: *nvme_pwren + entityInstance: 0x5E + path: /xyz/openbmc_project/control/nvme/pwr_u2_14_en + +0xDF: + <<: *nvme_pwren + entityInstance: 0x5F + path: /xyz/openbmc_project/control/nvme/pwr_u2_15_en + +0xF0: + entityID: 0x20 + entityInstance: 0 + sensorType: 0x0C + path: /xyz/openbmc_project/metrics/memory/BmcECC + sensorReadingType: 0x6F + serviceInterface: org.freedesktop.DBus.Properties + readingType: assertion + mutability: Mutability::Read + sensorNamePattern: nameLeaf + interfaces: + xyz.openbmc_project.Memory.MemoryECC: + state: + Offsets: + 0x00: + type: string + assert: xyz.openbmc_project.Memory.MemoryECC.ECCStatus.CE + 0x01: + type: string + assert: xyz.openbmc_project.Memory.MemoryECC.ECCStatus.UE + 0x05: + type: string + assert: xyz.openbmc_project.Memory.MemoryECC.ECCStatus.LogFull + +#GPIO present connection +0xF1: &gpio_prsnt + entityID: 0x1F + entityInstance: 0 + interfaces: + xyz.openbmc_project.Inventory.Item: + Present: + Offsets: + 0x00: + assert: true + type: bool + 0x01: + assert: false + type: bool + mutability: Mutability::Write|Mutability::Read + path: /xyz/openbmc_project/inventory/system/chassis/cable/ss_cab0_prsnt + readingType: assertion + sensorNamePattern: nameLeaf + sensorReadingType: 0x6f + sensorType: 0x1B + serviceInterface: org.freedesktop.DBus.Properties + +0xF2: + <<: *gpio_prsnt + entityInstance: 1 + path: /xyz/openbmc_project/inventory/system/chassis/cable/ss_cab1_prsnt + +0xF3: + <<: *gpio_prsnt + entityInstance: 2 + path: /xyz/openbmc_project/inventory/system/chassis/cable/ss_cab2_prsnt + +0xF4: + <<: *gpio_prsnt + entityInstance: 3 + path: /xyz/openbmc_project/inventory/system/chassis/cable/ss_cab3_prsnt + +0xF5: + entityID: 0x1A + entityInstance: 0 + interfaces: + xyz.openbmc_project.Inventory.Item: + Present: + Offsets: + 0x00: + assert: true + type: bool + 0x01: + assert: false + type: bool + mutability: Mutability::Write|Mutability::Read + path: /xyz/openbmc_project/inventory/system/chassis/entity/sata0_prsnt + readingType: assertion + sensorNamePattern: nameLeaf + sensorReadingType: 0x6f + sensorType: 0x25 + serviceInterface: org.freedesktop.DBus.Properties + +0xF6: + <<: *gpio_prsnt + entityInstance: 4 + path: /xyz/openbmc_project/inventory/system/chassis/cable/hsbp_cab_prsnt + +0xF7: + <<: *gpio_prsnt + entityInstance: 5 + path: /xyz/openbmc_project/inventory/system/chassis/cable/fanbd_cab_prsnt + +0xF8: + <<: *gpio_prsnt + entityInstance: 6 + path: /xyz/openbmc_project/inventory/system/chassis/cable/bp12v_cab_prsnt + +0xF9: &card_prsnt + entityID: 0x0B + entityInstance: 0 + interfaces: + xyz.openbmc_project.Inventory.Item: + Present: + Offsets: + 0x00: + assert: true + type: bool + 0x01: + assert: false + type: bool + mutability: Mutability::Write|Mutability::Read + path: /xyz/openbmc_project/inventory/system/chassis/entity/pe_slot0_prsnt + readingType: assertion + sensorNamePattern: nameLeaf + sensorReadingType: 0x6f + sensorType: 0x25 + serviceInterface: org.freedesktop.DBus.Properties + +0xFA: + <<: *card_prsnt + entityInstance: 1 + path: /xyz/openbmc_project/inventory/system/chassis/entity/pe_slot1_prsnt + +0xFB: + entityID: 0x21 + entityInstance: 0 + interfaces: + xyz.openbmc_project.State.Watchdog: + ExpireAction: + Offsets: + 0x00: + assert: xyz.openbmc_project.State.Watchdog.Action.None + type: string + 0x01: + assert: xyz.openbmc_project.State.Watchdog.Action.HardReset + type: string + 0x02: + assert: xyz.openbmc_project.State.Watchdog.Action.PowerOff + type: string + 0x03: + assert: xyz.openbmc_project.State.Watchdog.Action.PowerCycle + type: string + mutability: Mutability::Write|Mutability::Read + path: /xyz/openbmc_project/watchdog/host0 + readingType: assertion + sensorNamePattern: nameLeaf + sensorReadingType: 0x6F + sensorType: 0x23 + serviceInterface: org.freedesktop.DBus.Properties diff --git a/meta-quanta/meta-gbs/recipes-phosphor/console/files/80-gbs-nuvoton-sol.rules b/meta-quanta/meta-gbs/recipes-phosphor/console/files/80-gbs-nuvoton-sol.rules new file mode 100644 index 000000000..3d0670bc3 --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/console/files/80-gbs-nuvoton-sol.rules @@ -0,0 +1 @@ +SUBSYSTEM=="tty", ATTRS{iomem_base}=="0xF0002000", ENV{SYSTEMD_WANTS}="obmc-console@ttyS1" SYMLINK+="ttyS1", TAG+="systemd" diff --git a/meta-quanta/meta-gbs/recipes-phosphor/console/files/obmc-console.conf b/meta-quanta/meta-gbs/recipes-phosphor/console/files/obmc-console.conf new file mode 100644 index 000000000..666e66aac --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/console/files/obmc-console.conf @@ -0,0 +1 @@ +baud = 115200 diff --git a/meta-quanta/meta-gbs/recipes-phosphor/console/obmc-console_%.bbappend b/meta-quanta/meta-gbs/recipes-phosphor/console/obmc-console_%.bbappend new file mode 100644 index 000000000..f78e3c22d --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/console/obmc-console_%.bbappend @@ -0,0 +1,13 @@ +FILESEXTRAPATHS_prepend_gbs := "${THISDIR}/files:" +SRC_URI_append_gbs = " file://80-gbs-nuvoton-sol.rules" + +do_install_append_gbs() { + install -m 0755 -d ${D}${sysconfdir}/${BPN} + rm -f ${D}${sysconfdir}/${BPN}/server.ttyVUART0.conf + install -m 0644 ${WORKDIR}/${BPN}.conf ${D}${sysconfdir}/ + ln -sr ${D}${sysconfdir}/${BPN}.conf ${D}${sysconfdir}/${BPN}/server.ttyS1.conf + + install -d ${D}/lib/udev/rules.d + rm -f ${D}/lib/udev/rules.d/80-obmc-console-uart.rules + install -m 0644 ${WORKDIR}/80-gbs-nuvoton-sol.rules ${D}/lib/udev/rules.d +} diff --git a/meta-quanta/meta-gbs/recipes-phosphor/dbus/phosphor-dbus-interfaces/0024-Add-the-pre-timeout-interrupt-defined-in-IPMI-spec.patch b/meta-quanta/meta-gbs/recipes-phosphor/dbus/phosphor-dbus-interfaces/0024-Add-the-pre-timeout-interrupt-defined-in-IPMI-spec.patch new file mode 100644 index 000000000..67fa59090 --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/dbus/phosphor-dbus-interfaces/0024-Add-the-pre-timeout-interrupt-defined-in-IPMI-spec.patch @@ -0,0 +1,57 @@ +From 6e9a19c43acac7d4254910906329d98d7b59085a Mon Sep 17 00:00:00 2001 +From: Ren Yu <yux.ren@intel.com> +Date: Fri, 24 May 2019 14:55:10 +0800 +Subject: [PATCH] Add the pre-timeout interrupt defined in IPMI spec + +The IPMI watchdog pre-timeout interrupt is used to set the different +pre-timeout interrupt source. Add them as a dbus property, +IPMI set/get watchdog commands will use it. + +Signed-off-by: Ren Yu <yux.ren@intel.com> +--- + xyz/openbmc_project/State/Watchdog.interface.yaml | 22 ++++++++++++++++++++++ + 1 file changed, 22 insertions(+) + +diff --git a/xyz/openbmc_project/State/Watchdog.interface.yaml b/xyz/openbmc_project/State/Watchdog.interface.yaml +index 2fc47d8..6dfa9b9 100644 +--- a/xyz/openbmc_project/State/Watchdog.interface.yaml ++++ b/xyz/openbmc_project/State/Watchdog.interface.yaml +@@ -33,6 +33,11 @@ properties: + description: > + The action the watchdog should perform when it expires. + default: 'HardReset' ++ - name: PreTimeoutInterrupt ++ type: enum[self.PreTimeoutInterruptAction] ++ description: > ++ The BMC generates the selected interrupt before the timer expires. ++ default: 'None' + - name: Interval + type: uint64 + description: > +@@ -73,6 +78,23 @@ enumerations: + description: > + Perform a power cycle of the system. + ++ - name: PreTimeoutInterruptAction ++ description: > ++ The type of PreTimeout Interrupt. ++ values: ++ - name: 'None' ++ description: > ++ Do nothing. ++ - name: 'SMI' ++ description: > ++ SMI. ++ - name: 'NMI' ++ description: > ++ NMI / Diagnostic Interrupt. ++ - name: 'MI' ++ description: > ++ Messaging Interrupt. ++ + - name: TimerUse + description: > + The type of timer use. +-- +2.7.4 + diff --git a/meta-quanta/meta-gbs/recipes-phosphor/dbus/phosphor-dbus-interfaces/0025-Add-PreInterruptFlag-properity-in-DBUS.patch b/meta-quanta/meta-gbs/recipes-phosphor/dbus/phosphor-dbus-interfaces/0025-Add-PreInterruptFlag-properity-in-DBUS.patch new file mode 100644 index 000000000..d7e66abd2 --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/dbus/phosphor-dbus-interfaces/0025-Add-PreInterruptFlag-properity-in-DBUS.patch @@ -0,0 +1,39 @@ +From b7c487750c05dcc081219ccdd4ef539beef6aa30 Mon Sep 17 00:00:00 2001 +From: Ren Yu <yux.ren@intel.com> +Date: Mon, 29 Jul 2019 10:51:12 +0800 +Subject: [PATCH] Add PreInterruptFlag properity in DBUS. + +PreTimeoutInterruptOccurFlag in DBUS would be set 'true' +when watchdog pre-timeout interrupt occurred. + +Tested: +Enable command(raw 0x06 0x31) that get message flag +can set right bit about watchdog, +need record PreTimeoutInterruptOccurFlag +at xyz.openbmmc_project.State.Watchdog when watchdog +pre-timeout interrupt occurred. + +Signed-off-by: Ren Yu <yux.ren@intel.com> +--- + xyz/openbmc_project/State/Watchdog.interface.yaml | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/xyz/openbmc_project/State/Watchdog.interface.yaml b/xyz/openbmc_project/State/Watchdog.interface.yaml +index bf4cca0..6579368 100644 +--- a/xyz/openbmc_project/State/Watchdog.interface.yaml ++++ b/xyz/openbmc_project/State/Watchdog.interface.yaml +@@ -59,6 +59,11 @@ properties: + description: > + The timer user at the time of expiration. + default: 'Reserved' ++ - name: PreTimeoutInterruptOccurFlag ++ type: boolean ++ description: > ++ PreTimeoutInterruptOccurFlag that preTimeoutInterrupt action occurred. ++ default: false + + enumerations: + - name: Action +-- +2.7.4 + diff --git a/meta-quanta/meta-gbs/recipes-phosphor/dbus/phosphor-dbus-interfaces_%.bbappend b/meta-quanta/meta-gbs/recipes-phosphor/dbus/phosphor-dbus-interfaces_%.bbappend new file mode 100644 index 000000000..0b5bff905 --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/dbus/phosphor-dbus-interfaces_%.bbappend @@ -0,0 +1,5 @@ +FILESEXTRAPATHS_prepend_gbs := "${THISDIR}/${PN}:" + +SRC_URI_append_gbs = " file://0024-Add-the-pre-timeout-interrupt-defined-in-IPMI-spec.patch \ + file://0025-Add-PreInterruptFlag-properity-in-DBUS.patch \ + " diff --git a/meta-quanta/meta-gbs/recipes-phosphor/fans/phosphor-pid-control/config.json b/meta-quanta/meta-gbs/recipes-phosphor/fans/phosphor-pid-control/config.json new file mode 100644 index 000000000..7c817d420 --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/fans/phosphor-pid-control/config.json @@ -0,0 +1,342 @@ +{ + "version" : "R02", + "sensors" : [ + { + "name": "fan0", + "type": "fan", + "readPath": "/xyz/openbmc_project/sensors/fan_tach/fan0", + "writePath": "/sys/devices/platform/ahb/ahb:apb/f0103000.pwm-fan-controller/hwmon/Fan_0_To_4_Hwmon/pwm1", + "min": 0, + "max": 255 + }, + { + "name": "fan1", + "type": "fan", + "readPath": "/xyz/openbmc_project/sensors/fan_tach/fan1", + "writePath": "/sys/devices/platform/ahb/ahb:apb/f0103000.pwm-fan-controller/hwmon/Fan_0_To_4_Hwmon/pwm2", + "min": 0, + "max": 255 + }, + { + "name": "fb_fan0", + "type": "fan", + "readPath": "/xyz/openbmc_project/sensors/fan_tach/fb_fan0", + "writePath": "/sys/devices/platform/ahb/ahb:apb/f0103000.pwm-fan-controller/hwmon/Fan_0_To_4_Hwmon/pwm3", + "min": 0, + "max": 255 + }, + { + "name": "fb_fan1", + "type": "fan", + "readPath": "/xyz/openbmc_project/sensors/fan_tach/fb_fan1", + "writePath": "/sys/devices/platform/ahb/ahb:apb/f0103000.pwm-fan-controller/hwmon/Fan_0_To_4_Hwmon/pwm4", + "min": 0, + "max": 255 + }, + { + "name": "fb_fan2", + "type": "fan", + "readPath": "/xyz/openbmc_project/sensors/fan_tach/fb_fan2", + "writePath": "/sys/devices/platform/ahb/ahb:apb/f0103000.pwm-fan-controller/hwmon/Fan_0_To_4_Hwmon/pwm5", + "min": 0, + "max": 255 + }, + { + "name": "fleeting0", + "type": "margin", + "readPath": "/xyz/openbmc_project/extsensors/margin/fleeting0", + "writePath": "", + "min": 0, + "max": 0, + "ignoreDbusMinMax": true, + "timeout": 0 + }, + { + "name": "fleeting1", + "type": "margin", + "readPath": "/xyz/openbmc_project/extsensors/margin/fleeting1", + "writePath": "", + "min": 0, + "max": 0, + "ignoreDbusMinMax": true, + "timeout": 0 + }, + { + "name": "cputemp", + "type": "margin", + "readPath": "/xyz/openbmc_project/extsensors/margin/cputemp", + "writePath": "", + "min": 0, + "max": 0, + "ignoreDbusMinMax": true, + "timeout": 0 + }, + { + "name": "zone0_vr", + "type": "margin", + "readPath": "/xyz/openbmc_project/extsensors/margin/zone0_vr", + "writePath": "", + "min": 0, + "max": 0, + "ignoreDbusMinMax": true, + "timeout": 0 + }, + { + "name": "nvme", + "type": "margin", + "readPath": "/xyz/openbmc_project/extsensors/margin/nvme", + "writePath": "", + "min": 0, + "max": 0, + "ignoreDbusMinMax": true, + "timeout": 0 + }, + { + "name": "p12v_fan", + "type": "margin", + "readPath": "/xyz/openbmc_project/extsensors/margin/p12v_fan", + "writePath": "", + "min": 0, + "max": 0, + "ignoreDbusMinMax": true, + "timeout": 0 + } + ], + "zones" : [ + { + "id": 0, + "minThermalOutput": 0.0, + "failsafePercent": 100.0, + "pids": [ + { + "name": "fan0", + "type": "fan", + "inputs": ["fan0"], + "setpoint": 0.0, + "pid": { + "samplePeriod": 0.1, + "proportionalCoeff": 0.0, + "integralCoeff": 0.0, + "feedFwdOffsetCoeff": 0.0, + "feedFwdGainCoeff": 0.0056, + "integralLimit_min": 0.0, + "integralLimit_max": 0.0, + "outLim_min": 10.0, + "outLim_max": 100.0, + "slewNeg": 0.0, + "slewPos": 0.0 + } + }, + { + "name": "fan1", + "type": "fan", + "inputs": ["fan1"], + "setpoint": 0.0, + "pid": { + "samplePeriod": 0.1, + "proportionalCoeff": 0.0, + "integralCoeff": 0.0, + "feedFwdOffsetCoeff": 0.0, + "feedFwdGainCoeff": 0.0056, + "integralLimit_min": 0.0, + "integralLimit_max": 0.0, + "outLim_min": 10.0, + "outLim_max": 100.0, + "slewNeg": 0.0, + "slewPos": 0.0 + } + }, + { + "name": "cputemp", + "type": "margin", + "inputs": ["cputemp"], + "setpoint": 10.0, + "pid": { + "samplePeriod": 1.0, + "proportionalCoeff": 714.0, + "integralCoeff": 9.0, + "feedFwdOffsetCoeff": 0.0, + "feedFwdGainCoeff": 0.0, + "integralLimit_min": 1786.0, + "integralLimit_max": 18000.0, + "outLim_min": 1786.0, + "outLim_max": 18000.0, + "slewNeg": 0.0, + "slewPos": 0.0, + "positiveHysteresis": 0.0, + "negativeHysteresis": 0.0 + } + }, + { + "name": "zone0_vr", + "type": "margin", + "inputs": ["zone0_vr"], + "setpoint": 10.0, + "pid": { + "samplePeriod": 1.0, + "proportionalCoeff": 536.0, + "integralCoeff": 9.0, + "feedFwdOffsetCoeff": 0.0, + "feedFwdGainCoeff": 0.0, + "integralLimit_min": 1786.0, + "integralLimit_max": 18000.0, + "outLim_min": 1786.0, + "outLim_max": 18000.0, + "slewNeg": 0.0, + "slewPos": 0.0, + "positiveHysteresis": 0.0, + "negativeHysteresis": 0.0 + } + }, + { + "name": "fleeting0", + "type": "margin", + "inputs": ["fleeting0"], + "setpoint": 10.0, + "pid": { + "samplePeriod": 1.0, + "proportionalCoeff": 536.0, + "integralCoeff": 9.0, + "feedFwdOffsetCoeff": 0.0, + "feedFwdGainCoeff": 0.0, + "integralLimit_min": 1786.0, + "integralLimit_max": 18000.0, + "outLim_min": 1786.0, + "outLim_max": 18000.0, + "slewNeg": 0.0, + "slewPos": 0.0, + "positiveHysteresis": 0.0, + "negativeHysteresis": 0.0 + } + }, + { + "name": "fleeting1", + "type": "margin", + "inputs": ["fleeting1"], + "setpoint": 10.0, + "pid": { + "samplePeriod": 1.0, + "proportionalCoeff": 536.0, + "integralCoeff": 18.0, + "feedFwdOffsetCoeff": 0.0, + "feedFwdGainCoeff": 0.0, + "integralLimit_min": 1786.0, + "integralLimit_max": 18000.0, + "outLim_min": 1786.0, + "outLim_max": 18000.0, + "slewNeg": 0.0, + "slewPos": 0.0, + "positiveHysteresis": 0.0, + "negativeHysteresis": 0.0 + } + } + ] + }, + { + "id": 1, + "minThermalOutput": 0.0, + "failsafePercent": 100.0, + "pids": [ + { + "name": "fb_fan0", + "type": "fan", + "inputs": ["fb_fan0"], + "setpoint": 0.0, + "pid": { + "samplePeriod": 0.1, + "proportionalCoeff": 0.0, + "integralCoeff": 0.0, + "feedFwdOffsetCoeff": 0.0, + "feedFwdGainCoeff": 0.0056, + "integralLimit_min": 0.0, + "integralLimit_max": 0.0, + "outLim_min": 10.0, + "outLim_max": 100.0, + "slewNeg": 0.0, + "slewPos": 0.0 + } + }, + { + "name": "fb_fan1", + "type": "fan", + "inputs": ["fb_fan1"], + "setpoint": 0.0, + "pid": { + "samplePeriod": 0.1, + "proportionalCoeff": 0.0, + "integralCoeff": 0.0, + "feedFwdOffsetCoeff": 0.0, + "feedFwdGainCoeff": 0.0056, + "integralLimit_min": 0.0, + "integralLimit_max": 0.0, + "outLim_min": 10.0, + "outLim_max": 100.0, + "slewNeg": 0.0, + "slewPos": 0.0 + } + }, + { + "name": "fb_fan2", + "type": "fan", + "inputs": ["fb_fan2"], + "setpoint": 0.0, + "pid": { + "samplePeriod": 0.1, + "proportionalCoeff": 0.0, + "integralCoeff": 0.0, + "feedFwdOffsetCoeff": 0.0, + "feedFwdGainCoeff": 0.0056, + "integralLimit_min": 0.0, + "integralLimit_max": 0.0, + "outLim_min": 10.0, + "outLim_max": 100.0, + "slewNeg": 0.0, + "slewPos": 0.0 + } + }, + { + "name": "nvme", + "type": "margin", + "inputs": ["nvme"], + "setpoint": 10.0, + "pid": { + "samplePeriod": 1.0, + "proportionalCoeff": 1786.0, + "integralCoeff": 36.0, + "feedFwdOffsetCoeff": 0.0, + "feedFwdGainCoeff": 0.0, + "integralLimit_min": 1786.0, + "integralLimit_max": 18000.0, + "outLim_min": 1786.0, + "outLim_max": 18000.0, + "slewNeg": 0.0, + "slewPos": 0.0, + "positiveHysteresis": 0.0, + "negativeHysteresis": 0.0 + } + }, + { + "name": "p12v_fan", + "type": "margin", + "inputs": ["p12v_fan"], + "setpoint": 10.0, + "pid": { + "samplePeriod": 1.0, + "proportionalCoeff": 268.0, + "integralCoeff": 4.0, + "feedFwdOffsetCoeff": 0.0, + "feedFwdGainCoeff": 0.0, + "integralLimit_min": 1786.0, + "integralLimit_max": 18000.0, + "outLim_min": 1786.0, + "outLim_max": 18000.0, + "slewNeg": 0.0, + "slewPos": 0.0, + "positiveHysteresis": 0.0, + "negativeHysteresis": 0.0 + } + } + ] + } + ] +} diff --git a/meta-quanta/meta-gbs/recipes-phosphor/fans/phosphor-pid-control/fan-default-speed.sh b/meta-quanta/meta-gbs/recipes-phosphor/fans/phosphor-pid-control/fan-default-speed.sh new file mode 100644 index 000000000..22cfab582 --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/fans/phosphor-pid-control/fan-default-speed.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +for i in {1..5}; +do + echo 255 > /sys/class/hwmon/*/pwm${i} +done diff --git a/meta-quanta/meta-gbs/recipes-phosphor/fans/phosphor-pid-control/fan-reboot-control.service b/meta-quanta/meta-gbs/recipes-phosphor/fans/phosphor-pid-control/fan-reboot-control.service new file mode 100644 index 000000000..681bdbe00 --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/fans/phosphor-pid-control/fan-reboot-control.service @@ -0,0 +1,12 @@ +[Unit] +Description=Set Fan to Default Duty as Rebooting +DefaultDependencies=no +After=shutdown.target + +[Service] +Type=oneshot +RemainAfterExit=true +ExecStart=/usr/bin/fan-default-speed.sh + +[Install] +WantedBy=shutdown.target diff --git a/meta-quanta/meta-gbs/recipes-phosphor/fans/phosphor-pid-control/fan-table-init.sh b/meta-quanta/meta-gbs/recipes-phosphor/fans/phosphor-pid-control/fan-table-init.sh new file mode 100644 index 000000000..5706a73fb --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/fans/phosphor-pid-control/fan-table-init.sh @@ -0,0 +1,23 @@ +#!/bin/bash + +# wait for fan dbus +mapper wait /xyz/openbmc_project/sensors/fan_tach/fan0 +mapper wait /xyz/openbmc_project/sensors/fan_tach/fan1 +mapper wait /xyz/openbmc_project/sensors/fan_tach/fb_fan0 +mapper wait /xyz/openbmc_project/sensors/fan_tach/fb_fan1 +mapper wait /xyz/openbmc_project/sensors/fan_tach/fb_fan2 + +/usr/bin/fan-default-speed.sh + +# generate fan table writePath +Fan_0_To_4_Hwmon="$(ls -la /sys/class/hwmon |grep pwm | head -n 1| tail -n +1|cut -d '/' -f 9)" + +if [[ "$Fan_0_To_4_Hwmon" != "" ]] +then + sed -i "s/Fan_0_To_4_Hwmon/$Fan_0_To_4_Hwmon/g" /usr/share/swampd/config.json +fi + +# start read margin temp wait +/usr/bin/read-margin-temp-wait.sh & + +exit 0 diff --git a/meta-quanta/meta-gbs/recipes-phosphor/fans/phosphor-pid-control/phosphor-pid-control.service b/meta-quanta/meta-gbs/recipes-phosphor/fans/phosphor-pid-control/phosphor-pid-control.service new file mode 100644 index 000000000..33a441928 --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/fans/phosphor-pid-control/phosphor-pid-control.service @@ -0,0 +1,15 @@ +[Unit] +Description=Swampd Margin-based Fan Control Daemon +After=xyz.openbmc_project.Hwmon@-ahb-apb-pwm\x2dfan\x2dcontroller\x40103000.service + +[Service] +Type=simple +ExecStartPre=/usr/bin/fan-table-init.sh +ExecStart=/usr/bin/swampd +Restart=always +RestartSec=5 +StartLimitInterval=0 +ExecStopPost=/usr/bin/fan-default-speed.sh + +[Install] +WantedBy=basic.target diff --git a/meta-quanta/meta-gbs/recipes-phosphor/fans/phosphor-pid-control_%.bbappend b/meta-quanta/meta-gbs/recipes-phosphor/fans/phosphor-pid-control_%.bbappend new file mode 100644 index 000000000..f87a49394 --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/fans/phosphor-pid-control_%.bbappend @@ -0,0 +1,31 @@ +FILESEXTRAPATHS_prepend_gbs := "${THISDIR}/${PN}:" +SRC_URI_append_gbs = " file://config.json" +SRC_URI_append_gbs = " file://fan-table-init.sh" +SRC_URI_append_gbs = " file://fan-default-speed.sh" +SRC_URI_append_gbs = " file://phosphor-pid-control.service" +SRC_URI_append_gbs = " file://fan-reboot-control.service" + +FILES_${PN}_append_gbs = " ${datadir}/swampd/config.json" +FILES_${PN}_append_gbs = " ${bindir}/fan-default-speed.sh" +FILES_${PN}_append_gbs = " ${bindir}/fan-table-init.sh" + +RDEPENDS_${PN} += "bash" + +SYSTEMD_SERVICE_${PN}_append_gbs = " phosphor-pid-control.service" +SYSTEMD_SERVICE_${PN}_append_gbs = " fan-reboot-control.service" + +do_install_append_gbs() { + install -d ${D}/${bindir} + install -m 0755 ${WORKDIR}/fan-default-speed.sh ${D}/${bindir} + install -m 0755 ${WORKDIR}/fan-table-init.sh ${D}/${bindir} + + install -d ${D}${datadir}/swampd + install -m 0644 -D ${WORKDIR}/config.json \ + ${D}${datadir}/swampd/config.json + + install -d ${D}${systemd_system_unitdir} + install -m 0644 ${WORKDIR}/phosphor-pid-control.service \ + ${D}${systemd_system_unitdir} + install -m 0644 ${WORKDIR}/fan-reboot-control.service \ + ${D}${systemd_system_unitdir} +} diff --git a/meta-quanta/meta-gbs/recipes-phosphor/gpio/phosphor-gpio-monitor/obmc/gpio/gpios-0.conf b/meta-quanta/meta-gbs/recipes-phosphor/gpio/phosphor-gpio-monitor/obmc/gpio/gpios-0.conf new file mode 100644 index 000000000..e26c8f50e --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/gpio/phosphor-gpio-monitor/obmc/gpio/gpios-0.conf @@ -0,0 +1,6 @@ +#The gpio 70 is a real gpio, which is used to +#store the sas cable 0 present signal +INVENTORY=/system/chassis/cable/ss_cab0_prsnt +DEVPATH=/dev/input/event0 +KEY=70 +NAME=ss_cab0_prsnt diff --git a/meta-quanta/meta-gbs/recipes-phosphor/gpio/phosphor-gpio-monitor/obmc/gpio/gpios-1.conf b/meta-quanta/meta-gbs/recipes-phosphor/gpio/phosphor-gpio-monitor/obmc/gpio/gpios-1.conf new file mode 100644 index 000000000..e6a18ee6c --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/gpio/phosphor-gpio-monitor/obmc/gpio/gpios-1.conf @@ -0,0 +1,6 @@ +#The gpio 71 is a real gpio, which is used to +#store the sas cable 1 present signal +INVENTORY=/system/chassis/cable/ss_cab1_prsnt +DEVPATH=/dev/input/event0 +KEY=71 +NAME=ss_cab1_prsnt diff --git a/meta-quanta/meta-gbs/recipes-phosphor/gpio/phosphor-gpio-monitor/obmc/gpio/gpios-2.conf b/meta-quanta/meta-gbs/recipes-phosphor/gpio/phosphor-gpio-monitor/obmc/gpio/gpios-2.conf new file mode 100644 index 000000000..490f97f49 --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/gpio/phosphor-gpio-monitor/obmc/gpio/gpios-2.conf @@ -0,0 +1,6 @@ +#The gpio 72 is a real gpio, which is used to +#store the sas cable 2 present signal +INVENTORY=/system/chassis/cable/ss_cab2_prsnt +DEVPATH=/dev/input/event0 +KEY=72 +NAME=ss_cab2_prsnt diff --git a/meta-quanta/meta-gbs/recipes-phosphor/gpio/phosphor-gpio-monitor/obmc/gpio/gpios-3.conf b/meta-quanta/meta-gbs/recipes-phosphor/gpio/phosphor-gpio-monitor/obmc/gpio/gpios-3.conf new file mode 100644 index 000000000..f3579ab97 --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/gpio/phosphor-gpio-monitor/obmc/gpio/gpios-3.conf @@ -0,0 +1,6 @@ +#The gpio 73 is a real gpio, which is used to +#store the sas cable 3 present signal +INVENTORY=/system/chassis/cable/ss_cab3_prsnt +DEVPATH=/dev/input/event0 +KEY=73 +NAME=ss_cab3_prsnt diff --git a/meta-quanta/meta-gbs/recipes-phosphor/gpio/phosphor-gpio-monitor/obmc/gpio/gpios-4.conf b/meta-quanta/meta-gbs/recipes-phosphor/gpio/phosphor-gpio-monitor/obmc/gpio/gpios-4.conf new file mode 100644 index 000000000..be6ed95af --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/gpio/phosphor-gpio-monitor/obmc/gpio/gpios-4.conf @@ -0,0 +1,6 @@ +#The gpio 57 is a real gpio, which is used to +#store the HSBP cable present signal +INVENTORY=/system/chassis/cable/hsbp_cab_prsnt +DEVPATH=/dev/input/event0 +KEY=57 +NAME=hsbp_cab_prsnt diff --git a/meta-quanta/meta-gbs/recipes-phosphor/gpio/phosphor-gpio-monitor/obmc/gpio/gpios-5.conf b/meta-quanta/meta-gbs/recipes-phosphor/gpio/phosphor-gpio-monitor/obmc/gpio/gpios-5.conf new file mode 100644 index 000000000..223ef4a7c --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/gpio/phosphor-gpio-monitor/obmc/gpio/gpios-5.conf @@ -0,0 +1,6 @@ +#The gpio 58 is a real gpio, which is used to +#store the fan board cable present signal +INVENTORY=/system/chassis/cable/fanbd_cab_prsnt +DEVPATH=/dev/input/event0 +KEY=58 +NAME=fanbd_cab_prsnt diff --git a/meta-quanta/meta-gbs/recipes-phosphor/gpio/phosphor-gpio-monitor/obmc/gpio/gpios-6.conf b/meta-quanta/meta-gbs/recipes-phosphor/gpio/phosphor-gpio-monitor/obmc/gpio/gpios-6.conf new file mode 100644 index 000000000..c32fb3c97 --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/gpio/phosphor-gpio-monitor/obmc/gpio/gpios-6.conf @@ -0,0 +1,6 @@ +#The gpio 69 is a real gpio, which is used to +#store the HSBP 12V standby cable present signal +INVENTORY=/system/chassis/cable/bp12v_cab_prsnt +DEVPATH=/dev/input/event0 +KEY=69 +NAME=bp12v_cab_prsnt diff --git a/meta-quanta/meta-gbs/recipes-phosphor/gpio/phosphor-gpio-monitor/obmc/gpio/gpios-7.conf b/meta-quanta/meta-gbs/recipes-phosphor/gpio/phosphor-gpio-monitor/obmc/gpio/gpios-7.conf new file mode 100644 index 000000000..1cc7da265 --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/gpio/phosphor-gpio-monitor/obmc/gpio/gpios-7.conf @@ -0,0 +1,6 @@ +#The gpio 5 is a real gpio, which is used to +#store the SATA0 present signal +INVENTORY=/system/chassis/entity/sata0_prsnt +DEVPATH=/dev/input/event0 +KEY=5 +NAME=sata0_prsnt diff --git a/meta-quanta/meta-gbs/recipes-phosphor/gpio/phosphor-gpio-monitor/obmc/gpio/gpios-8.conf b/meta-quanta/meta-gbs/recipes-phosphor/gpio/phosphor-gpio-monitor/obmc/gpio/gpios-8.conf new file mode 100644 index 000000000..38c72e11e --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/gpio/phosphor-gpio-monitor/obmc/gpio/gpios-8.conf @@ -0,0 +1,6 @@ +#The gpio 120 is a real gpio, which is used to +#store the PE0 present signal +INVENTORY=/system/chassis/entity/pe_slot0_prsnt +DEVPATH=/dev/input/event0 +KEY=120 +NAME=pe_slot0_prsnt diff --git a/meta-quanta/meta-gbs/recipes-phosphor/gpio/phosphor-gpio-monitor/obmc/gpio/gpios-9.conf b/meta-quanta/meta-gbs/recipes-phosphor/gpio/phosphor-gpio-monitor/obmc/gpio/gpios-9.conf new file mode 100644 index 000000000..007229d44 --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/gpio/phosphor-gpio-monitor/obmc/gpio/gpios-9.conf @@ -0,0 +1,6 @@ +#The gpio 121 is a real gpio, which is used to +#store the PE1 present signal +INVENTORY=/system/chassis/entity/pe_slot1_prsnt +DEVPATH=/dev/input/event0 +KEY=121 +NAME=pe_slot1_prsnt diff --git a/meta-quanta/meta-gbs/recipes-phosphor/gpio/phosphor-gpio-monitor/phosphor-gpio-presence@.service.replace b/meta-quanta/meta-gbs/recipes-phosphor/gpio/phosphor-gpio-monitor/phosphor-gpio-presence@.service.replace new file mode 100644 index 000000000..15341cbfb --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/gpio/phosphor-gpio-monitor/phosphor-gpio-presence@.service.replace @@ -0,0 +1,14 @@ +[Unit] +Description=Phosphor GPIO %I Presence +Wants=mapper-wait@-xyz-openbmc_project-inventory.service +After=mapper-wait@-xyz-openbmc_project-inventory.service +ConditionPathExists=/etc/default/obmc/gpio/gpios-%i.conf +StartLimitBurst=10 + +[Service] +Restart=on-failure +EnvironmentFile=/etc/default/obmc/gpio/gpios-%i.conf +ExecStart=/usr/bin/phosphor-gpio-presence --path=${DEVPATH} --inventory=${INVENTORY} --key=${KEY} --name=${NAME} --drivers=${DRIVERS} --extra-ifaces=${EXTRA_IFACES} + +[Install] +RequiredBy=multi-user.target diff --git a/meta-quanta/meta-gbs/recipes-phosphor/gpio/phosphor-gpio-monitor_%.bbappend b/meta-quanta/meta-gbs/recipes-phosphor/gpio/phosphor-gpio-monitor_%.bbappend new file mode 100644 index 000000000..d45636609 --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/gpio/phosphor-gpio-monitor_%.bbappend @@ -0,0 +1,32 @@ +inherit obmc-phosphor-systemd + +FILESEXTRAPATHS_prepend_gbs := "${THISDIR}/${PN}:" + +SRC_URI_append_gbs = " file://phosphor-gpio-presence@.service.replace" + +TMPL_PRESENT = "phosphor-gpio-presence@.service" +INSTFMT_PRESENT = "phosphor-gpio-presence@{0}.service" +PRESENT_TGT = "multi-user.target" +FMT_PRESENT = "../${TMPL_PRESENT}:${PRESENT_TGT}.requires/${INSTFMT_PRESENT}" +SYSTEMD_ENVIRONMENT_FILE_${PN}_append_gbs +="obmc/gpio/gpios-0.conf" +SYSTEMD_ENVIRONMENT_FILE_${PN}_append_gbs +="obmc/gpio/gpios-1.conf" +SYSTEMD_ENVIRONMENT_FILE_${PN}_append_gbs +="obmc/gpio/gpios-2.conf" +SYSTEMD_ENVIRONMENT_FILE_${PN}_append_gbs +="obmc/gpio/gpios-3.conf" +SYSTEMD_ENVIRONMENT_FILE_${PN}_append_gbs +="obmc/gpio/gpios-4.conf" +SYSTEMD_ENVIRONMENT_FILE_${PN}_append_gbs +="obmc/gpio/gpios-5.conf" +SYSTEMD_ENVIRONMENT_FILE_${PN}_append_gbs +="obmc/gpio/gpios-6.conf" +SYSTEMD_ENVIRONMENT_FILE_${PN}_append_gbs +="obmc/gpio/gpios-7.conf" +SYSTEMD_ENVIRONMENT_FILE_${PN}_append_gbs +="obmc/gpio/gpios-8.conf" +SYSTEMD_ENVIRONMENT_FILE_${PN}_append_gbs +="obmc/gpio/gpios-9.conf" +GBS_OBMC_PRESENT_INSTANCES = "0 1 2 3 4 5 6 7 8 9" + +SYSTEMD_LINK_${PN}-presence_append_gbs = " ${@compose_list(d, 'FMT_PRESENT', 'GBS_OBMC_PRESENT_INSTANCES')}" + +GBS_PRESENT_ENV_FMT = "obmc/gpio/gpios-{0}.conf" + +SYSTEMD_ENVIRONMENT_FILE_${PN}-presence_gbs = " ${@compose_list(d, 'GBS_PRESENT_ENV_FMT', 'GBS_OBMC_PRESENT_INSTANCES')}" + +do_install_append_gbs() { + install -d ${D}${systemd_system_unitdir} + install -m 0644 ${WORKDIR}/phosphor-gpio-presence@.service.replace ${D}${systemd_system_unitdir}/phosphor-gpio-presence@.service +} diff --git a/meta-quanta/meta-gbs/recipes-phosphor/host/phosphor-host-postd_%.bbappend b/meta-quanta/meta-gbs/recipes-phosphor/host/phosphor-host-postd_%.bbappend new file mode 100644 index 000000000..ef3ecb2e4 --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/host/phosphor-host-postd_%.bbappend @@ -0,0 +1,2 @@ +SNOOP_DEVICE_gbs = "npcm7xx-lpc-bpc0" +PACKAGECONFIG_append_gbs = " 7seg" diff --git a/meta-quanta/meta-gbs/recipes-phosphor/images/obmc-phosphor-image.bbappend b/meta-quanta/meta-gbs/recipes-phosphor/images/obmc-phosphor-image.bbappend new file mode 100644 index 000000000..3b83932e7 --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/images/obmc-phosphor-image.bbappend @@ -0,0 +1,23 @@ +OBMC_IMAGE_EXTRA_INSTALL_append_gbs = " phosphor-host-postd" +OBMC_IMAGE_EXTRA_INSTALL_append_gbs = " phosphor-sel-logger" +OBMC_IMAGE_EXTRA_INSTALL_append_gbs = " google-ipmi-sys" +OBMC_IMAGE_EXTRA_INSTALL_append_gbs = " google-ipmi-i2c" +OBMC_IMAGE_EXTRA_INSTALL_append_gbs = " gbs-hotswap-power-cycle" +OBMC_IMAGE_EXTRA_INSTALL_append_gbs = " loadsvf" +OBMC_IMAGE_EXTRA_INSTALL_append_gbs = " gbs-cpld-ver-check" +OBMC_IMAGE_EXTRA_INSTALL_append_gbs = " memtester" +OBMC_IMAGE_EXTRA_INSTALL_append_gbs = " net-tools" +OBMC_IMAGE_EXTRA_INSTALL_append_gbs = " gbs-boot-status-led" +OBMC_IMAGE_EXTRA_INSTALL_append_gbs = " phosphor-nvme" +OBMC_IMAGE_EXTRA_INSTALL_append_gbs = " gbs-detect-gpio-present" +OBMC_IMAGE_EXTRA_INSTALL_append_gbs = " phosphor-ecc" +OBMC_IMAGE_EXTRA_INSTALL_append_gbs = " gbs-sysinit" +OBMC_IMAGE_EXTRA_INSTALL_append_gbs = " gbs-ipmi-entity-association-map" +OBMC_IMAGE_EXTRA_INSTALL_append_gbs = " gbs-detect-fan-fail" +OBMC_IMAGE_EXTRA_INSTALL_append_gbs = " usb-network" +OBMC_IMAGE_EXTRA_INSTALL_append_gbs = " mac-address" +OBMC_IMAGE_EXTRA_INSTALL_append_gbs = " phosphor-image-signing" +OBMC_IMAGE_EXTRA_INSTALL_append_gbs = " openssl-bin" +OBMC_IMAGE_EXTRA_INSTALL_append_gbs = " phosphor-ipmi-blobs-binarystore" +OBMC_IMAGE_EXTRA_INSTALL_append_gbs = " gbs-nvme-pwr-ctrl" +OBMC_IMAGE_EXTRA_INSTALL_append_gbs = " read-margin-temp" diff --git a/meta-quanta/meta-gbs/recipes-phosphor/interfaces/bmcweb_%.bbappend b/meta-quanta/meta-gbs/recipes-phosphor/interfaces/bmcweb_%.bbappend new file mode 100755 index 000000000..87ecf4fa3 --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/interfaces/bmcweb_%.bbappend @@ -0,0 +1,3 @@ +EXTRA_OECMAKE_append_gbs = " \ + -DBMCWEB_ENABLE_REDFISH_DBUS_LOG_ENTRIES=ON \ + " diff --git a/meta-quanta/meta-gbs/recipes-phosphor/inventory/inventory-cleanup.bb b/meta-quanta/meta-gbs/recipes-phosphor/inventory/inventory-cleanup.bb new file mode 100644 index 000000000..0c4b56f72 --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/inventory/inventory-cleanup.bb @@ -0,0 +1,17 @@ +SUMMARY = "Copy the inventory cleanup yaml for inventory manager" +PR = "r1" +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10" + +inherit allarch +inherit phosphor-inventory-manager + +S = "${WORKDIR}" + +SRC_URI = "file://inventory-cleanup.yaml" + +do_install() { + install -D inventory-cleanup.yaml ${D}${base_datadir}/events.d/inventory-cleanup.yaml +} + +FILES_${PN} += "${base_datadir}/events.d/inventory-cleanup.yaml" diff --git a/meta-quanta/meta-gbs/recipes-phosphor/inventory/inventory-cleanup/inventory-cleanup.yaml b/meta-quanta/meta-gbs/recipes-phosphor/inventory/inventory-cleanup/inventory-cleanup.yaml new file mode 100644 index 000000000..78e03fee0 --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/inventory/inventory-cleanup/inventory-cleanup.yaml @@ -0,0 +1,16 @@ +description: > + GBS inventory fixups + +events: + - name: Add Chassis interface + description: > + Add the chassis interface on the chassis inventory path + type: startup + actions: + - name: createObjects + objs: + /system/chassis: + xyz.openbmc_project.Inventory.Item.Chassis: + Type: + value: "RackMount" + type: string diff --git a/meta-quanta/meta-gbs/recipes-phosphor/inventory/phosphor-inventory-manager/associations.json b/meta-quanta/meta-gbs/recipes-phosphor/inventory/phosphor-inventory-manager/associations.json new file mode 100644 index 000000000..b834fa876 --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/inventory/phosphor-inventory-manager/associations.json @@ -0,0 +1,487 @@ +[ + { + "path": "system/chassis/motherboard/nvme0", + "endpoints": + [ + { + "types": + { + "rType": "inventory", + "fType": "sensors" + }, + "paths": + [ + "/xyz/openbmc_project/sensors/temperature/nvme0" + ] + } + ] + }, + { + "path": "system/chassis/motherboard/nvme1", + "endpoints": + [ + { + "types": + { + "rType": "inventory", + "fType": "sensors" + }, + "paths": + [ + "/xyz/openbmc_project/sensors/temperature/nvme1" + ] + } + ] + }, + { + "path": "system/chassis/motherboard/nvme2", + "endpoints": + [ + { + "types": + { + "rType": "inventory", + "fType": "sensors" + }, + "paths": + [ + "/xyz/openbmc_project/sensors/temperature/nvme2" + ] + } + ] + }, + { + "path": "system/chassis/motherboard/nvme3", + "endpoints": + [ + { + "types": + { + "rType": "inventory", + "fType": "sensors" + }, + "paths": + [ + "/xyz/openbmc_project/sensors/temperature/nvme3" + ] + } + ] + }, + { + "path": "system/chassis/motherboard/nvme4", + "endpoints": + [ + { + "types": + { + "rType": "inventory", + "fType": "sensors" + }, + "paths": + [ + "/xyz/openbmc_project/sensors/temperature/nvme4" + ] + } + ] + }, + { + "path": "system/chassis/motherboard/nvme5", + "endpoints": + [ + { + "types": + { + "rType": "inventory", + "fType": "sensors" + }, + "paths": + [ + "/xyz/openbmc_project/sensors/temperature/nvme5" + ] + } + ] + }, + { + "path": "system/chassis/motherboard/nvme6", + "endpoints": + [ + { + "types": + { + "rType": "inventory", + "fType": "sensors" + }, + "paths": + [ + "/xyz/openbmc_project/sensors/temperature/nvme6" + ] + } + ] + }, + { + "path": "system/chassis/motherboard/nvme7", + "endpoints": + [ + { + "types": + { + "rType": "inventory", + "fType": "sensors" + }, + "paths": + [ + "/xyz/openbmc_project/sensors/temperature/nvme7" + ] + } + ] + }, + { + "path": "system/chassis/motherboard/nvme8", + "endpoints": + [ + { + "types": + { + "rType": "inventory", + "fType": "sensors" + }, + "paths": + [ + "/xyz/openbmc_project/sensors/temperature/nvme8" + ] + } + ] + }, + { + "path": "system/chassis/motherboard/nvme9", + "endpoints": + [ + { + "types": + { + "rType": "inventory", + "fType": "sensors" + }, + "paths": + [ + "/xyz/openbmc_project/sensors/temperature/nvme9" + ] + } + ] + }, + { + "path": "system/chassis/motherboard/nvme10", + "endpoints": + [ + { + "types": + { + "rType": "inventory", + "fType": "sensors" + }, + "paths": + [ + "/xyz/openbmc_project/sensors/temperature/nvme10" + ] + } + ] + }, + { + "path": "system/chassis/motherboard/nvme11", + "endpoints": + [ + { + "types": + { + "rType": "inventory", + "fType": "sensors" + }, + "paths": + [ + "/xyz/openbmc_project/sensors/temperature/nvme11" + ] + } + ] + }, + { + "path": "system/chassis/motherboard/nvme12", + "endpoints": + [ + { + "types": + { + "rType": "inventory", + "fType": "sensors" + }, + "paths": + [ + "/xyz/openbmc_project/sensors/temperature/nvme12" + ] + } + ] + }, + { + "path": "system/chassis/motherboard/nvme13", + "endpoints": + [ + { + "types": + { + "rType": "inventory", + "fType": "sensors" + }, + "paths": + [ + "/xyz/openbmc_project/sensors/temperature/nvme13" + ] + } + ] + }, + { + "path": "system/chassis/motherboard/nvme14", + "endpoints": + [ + { + "types": + { + "rType": "inventory", + "fType": "sensors" + }, + "paths": + [ + "/xyz/openbmc_project/sensors/temperature/nvme14" + ] + } + ] + }, + { + "path": "system/chassis/motherboard/nvme15", + "endpoints": + [ + { + "types": + { + "rType": "inventory", + "fType": "sensors" + }, + "paths": + [ + "/xyz/openbmc_project/sensors/temperature/nvme15" + ] + } + ] + }, + { + "path": "system/chassis/fan", + "endpoints": + [ + { + "types": + { + "rType": "inventory", + "fType": "sensors" + }, + "paths": + [ + "/xyz/openbmc_project/sensors/fan_tach/fan0", + "/xyz/openbmc_project/sensors/fan_tach/fan1", + "/xyz/openbmc_project/sensors/fan_tach/fb_fan0", + "/xyz/openbmc_project/sensors/fan_tach/fb_fan1", + "/xyz/openbmc_project/sensors/fan_tach/fb_fan2" + ] + } + ] + }, + { + "path": "system/chassis/motherboard", + "endpoints": + [ + { + "types": + { + "rType": "inventory", + "fType": "sensors" + }, + "paths": + [ + "/xyz/openbmc_project/sensors/temperature/i2cool_0", + "/xyz/openbmc_project/sensors/temperature/i2cool_1", + "/xyz/openbmc_project/sensors/temperature/i2cool_2", + "/xyz/openbmc_project/sensors/temperature/powerseq_temp", + "/xyz/openbmc_project/sensors/temperature/cputemp", + "/xyz/openbmc_project/sensors/temperature/nvme0", + "/xyz/openbmc_project/sensors/temperature/nvme1", + "/xyz/openbmc_project/sensors/temperature/nvme2", + "/xyz/openbmc_project/sensors/temperature/nvme3", + "/xyz/openbmc_project/sensors/temperature/nvme4", + "/xyz/openbmc_project/sensors/temperature/nvme5", + "/xyz/openbmc_project/sensors/temperature/nvme6", + "/xyz/openbmc_project/sensors/temperature/nvme7", + "/xyz/openbmc_project/sensors/temperature/nvme8", + "/xyz/openbmc_project/sensors/temperature/nvme9", + "/xyz/openbmc_project/sensors/temperature/nvme10", + "/xyz/openbmc_project/sensors/temperature/nvme11", + "/xyz/openbmc_project/sensors/temperature/nvme12", + "/xyz/openbmc_project/sensors/temperature/nvme13", + "/xyz/openbmc_project/sensors/temperature/nvme14", + "/xyz/openbmc_project/sensors/temperature/nvme15", + + "/xyz/openbmc_project/sensors/voltage/p1v8_stby", + "/xyz/openbmc_project/sensors/voltage/vddcr_soc_stby", + "/xyz/openbmc_project/sensors/voltage/p2v5_stby", + "/xyz/openbmc_project/sensors/voltage/p1v2_stby", + "/xyz/openbmc_project/sensors/voltage/p1v175_stby", + "/xyz/openbmc_project/sensors/voltage/p1v8", + "/xyz/openbmc_project/sensors/voltage/p3v3", + "/xyz/openbmc_project/sensors/voltage/pwrgd_pvpp", + "/xyz/openbmc_project/sensors/voltage/pwrgd_pvddio", + "/xyz/openbmc_project/sensors/voltage/pwrgd_cpuvr", + "/xyz/openbmc_project/sensors/voltage/p3v3_stby", + "/xyz/openbmc_project/sensors/voltage/p5v_stby", + "/xyz/openbmc_project/sensors/voltage/p3v_bat_adc", + + "/xyz/openbmc_project/sensors/voltage/vddcr_cpu_in", + "/xyz/openbmc_project/sensors/voltage/vddcr_cpu_out", + "/xyz/openbmc_project/sensors/current/vddcr_cpu_in", + "/xyz/openbmc_project/sensors/current/vddcr_cpu_out", + "/xyz/openbmc_project/sensors/temperature/vddcr_cpu", + + "/xyz/openbmc_project/sensors/voltage/vddcr_soc_in", + "/xyz/openbmc_project/sensors/voltage/vddcr_soc_out", + "/xyz/openbmc_project/sensors/current/vddcr_soc_in", + "/xyz/openbmc_project/sensors/current/vddcr_soc_out", + "/xyz/openbmc_project/sensors/temperature/vddcr_soc", + + "/xyz/openbmc_project/sensors/voltage/vddio_abcd_out", + "/xyz/openbmc_project/sensors/voltage/vddio_abcd_in", + "/xyz/openbmc_project/sensors/current/vddio_abcd_in", + "/xyz/openbmc_project/sensors/current/vddio_abcd_out", + "/xyz/openbmc_project/sensors/temperature/vddio_abcd", + + "/xyz/openbmc_project/sensors/voltage/vddio_efgh_out", + "/xyz/openbmc_project/sensors/voltage/vddio_efgh_in", + "/xyz/openbmc_project/sensors/current/vddio_efgh_in", + "/xyz/openbmc_project/sensors/current/vddio_efgh_out", + "/xyz/openbmc_project/sensors/temperature/vddio_efgh", + + "/xyz/openbmc_project/sensors/voltage/p12v_mobo_out", + "/xyz/openbmc_project/sensors/voltage/p12v_mobo_in", + "/xyz/openbmc_project/sensors/current/p12v_mobo_in", + "/xyz/openbmc_project/sensors/current/p12v_mobo_out", + "/xyz/openbmc_project/sensors/temperature/p12v_mobo", + + "/xyz/openbmc_project/sensors/voltage/p12v_fan_out", + "/xyz/openbmc_project/sensors/voltage/p12v_fan_in", + "/xyz/openbmc_project/sensors/current/p12v_fan_in", + "/xyz/openbmc_project/sensors/current/p12v_fan_out", + "/xyz/openbmc_project/sensors/temperature/p12v_fan", + + "/xyz/openbmc_project/sensors/voltage/hotswap_vin", + "/xyz/openbmc_project/sensors/voltage/hotswap_vout", + "/xyz/openbmc_project/sensors/current/hotswap_iout", + "/xyz/openbmc_project/sensors/power/hotswap_pout", + "/xyz/openbmc_project/sensors/temperature/hotswap" + ] + } + ] + }, + { + "path": "system/chassis", + "endpoints": + [ + { + "types": + { + "rType": "chassis", + "fType": "all_sensors" + }, + "paths": + [ + "/xyz/openbmc_project/sensors/temperature/i2cool_0", + "/xyz/openbmc_project/sensors/temperature/i2cool_1", + "/xyz/openbmc_project/sensors/temperature/i2cool_2", + "/xyz/openbmc_project/sensors/temperature/powerseq_temp", + "/xyz/openbmc_project/sensors/temperature/cputemp", + "/xyz/openbmc_project/sensors/temperature/nvme0", + "/xyz/openbmc_project/sensors/temperature/nvme1", + "/xyz/openbmc_project/sensors/temperature/nvme2", + "/xyz/openbmc_project/sensors/temperature/nvme3", + "/xyz/openbmc_project/sensors/temperature/nvme4", + "/xyz/openbmc_project/sensors/temperature/nvme5", + "/xyz/openbmc_project/sensors/temperature/nvme6", + "/xyz/openbmc_project/sensors/temperature/nvme7", + "/xyz/openbmc_project/sensors/temperature/nvme8", + "/xyz/openbmc_project/sensors/temperature/nvme9", + "/xyz/openbmc_project/sensors/temperature/nvme10", + "/xyz/openbmc_project/sensors/temperature/nvme11", + "/xyz/openbmc_project/sensors/temperature/nvme12", + "/xyz/openbmc_project/sensors/temperature/nvme13", + "/xyz/openbmc_project/sensors/temperature/nvme14", + "/xyz/openbmc_project/sensors/temperature/nvme15", + + "/xyz/openbmc_project/sensors/voltage/p1v8_stby", + "/xyz/openbmc_project/sensors/voltage/vddcr_soc_stby", + "/xyz/openbmc_project/sensors/voltage/p2v5_stby", + "/xyz/openbmc_project/sensors/voltage/p1v2_stby", + "/xyz/openbmc_project/sensors/voltage/p1v175_stby", + "/xyz/openbmc_project/sensors/voltage/p1v8", + "/xyz/openbmc_project/sensors/voltage/p3v3", + "/xyz/openbmc_project/sensors/voltage/pwrgd_pvpp", + "/xyz/openbmc_project/sensors/voltage/pwrgd_pvddio", + "/xyz/openbmc_project/sensors/voltage/pwrgd_cpuvr", + "/xyz/openbmc_project/sensors/voltage/p3v3_stby", + "/xyz/openbmc_project/sensors/voltage/p5v_stby", + "/xyz/openbmc_project/sensors/voltage/p3v_bat_adc", + + "/xyz/openbmc_project/sensors/voltage/vddcr_cpu_in", + "/xyz/openbmc_project/sensors/voltage/vddcr_cpu_out", + "/xyz/openbmc_project/sensors/current/vddcr_cpu_in", + "/xyz/openbmc_project/sensors/current/vddcr_cpu_out", + "/xyz/openbmc_project/sensors/temperature/vddcr_cpu", + + "/xyz/openbmc_project/sensors/voltage/vddcr_soc_in", + "/xyz/openbmc_project/sensors/voltage/vddcr_soc_out", + "/xyz/openbmc_project/sensors/current/vddcr_soc_in", + "/xyz/openbmc_project/sensors/current/vddcr_soc_out", + "/xyz/openbmc_project/sensors/temperature/vddcr_soc", + + "/xyz/openbmc_project/sensors/voltage/vddio_abcd_out", + "/xyz/openbmc_project/sensors/voltage/vddio_abcd_in", + "/xyz/openbmc_project/sensors/current/vddio_abcd_in", + "/xyz/openbmc_project/sensors/current/vddio_abcd_out", + "/xyz/openbmc_project/sensors/temperature/vddio_abcd", + + "/xyz/openbmc_project/sensors/voltage/vddio_efgh_out", + "/xyz/openbmc_project/sensors/voltage/vddio_efgh_in", + "/xyz/openbmc_project/sensors/current/vddio_efgh_in", + "/xyz/openbmc_project/sensors/current/vddio_efgh_out", + "/xyz/openbmc_project/sensors/temperature/vddio_efgh", + + "/xyz/openbmc_project/sensors/voltage/p12v_mobo_out", + "/xyz/openbmc_project/sensors/voltage/p12v_mobo_in", + "/xyz/openbmc_project/sensors/current/p12v_mobo_in", + "/xyz/openbmc_project/sensors/current/p12v_mobo_out", + "/xyz/openbmc_project/sensors/temperature/p12v_mobo", + + "/xyz/openbmc_project/sensors/voltage/p12v_fan_out", + "/xyz/openbmc_project/sensors/voltage/p12v_fan_in", + "/xyz/openbmc_project/sensors/current/p12v_fan_in", + "/xyz/openbmc_project/sensors/current/p12v_fan_out", + "/xyz/openbmc_project/sensors/temperature/p12v_fan", + + "/xyz/openbmc_project/sensors/voltage/hotswap_vin", + "/xyz/openbmc_project/sensors/voltage/hotswap_vout", + "/xyz/openbmc_project/sensors/current/hotswap_iout", + "/xyz/openbmc_project/sensors/power/hotswap_pout", + "/xyz/openbmc_project/sensors/temperature/hotswap", + + "/xyz/openbmc_project/sensors/fan_tach/fan0", + "/xyz/openbmc_project/sensors/fan_tach/fan1", + "/xyz/openbmc_project/sensors/fan_tach/fb_fan0", + "/xyz/openbmc_project/sensors/fan_tach/fb_fan1", + "/xyz/openbmc_project/sensors/fan_tach/fb_fan2" + ] + } + ] + } +] diff --git a/meta-quanta/meta-gbs/recipes-phosphor/inventory/phosphor-inventory-manager_%.bbappend b/meta-quanta/meta-gbs/recipes-phosphor/inventory/phosphor-inventory-manager_%.bbappend new file mode 100644 index 000000000..205822cb9 --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/inventory/phosphor-inventory-manager_%.bbappend @@ -0,0 +1,9 @@ +FILESEXTRAPATHS_prepend_gbs := "${THISDIR}/${PN}:" +PACKAGECONFIG_append_gbs = " associations" +SRC_URI_append_gbs = " file://associations.json" +DEPENDS_append_gbs = " inventory-cleanup" + +do_install_append_gbs() { + install -d ${D}${base_datadir} + install -m 0755 ${WORKDIR}/associations.json ${D}${base_datadir}/associations.json +} diff --git a/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-blobs-binarystore/config.json b/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-blobs-binarystore/config.json new file mode 100644 index 000000000..4ad11bc6e --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-blobs-binarystore/config.json @@ -0,0 +1,5 @@ +[{ + "blobBaseId": "/skm/hss/", + "sysFilePath": "/sys/class/i2c-adapter/i2c-5/5-0050/5-00500/nvmem", + "offsetBytes": 256 +}] diff --git a/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-blobs-binarystore_%.bbappend b/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-blobs-binarystore_%.bbappend new file mode 100644 index 000000000..1dba2ec35 --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-blobs-binarystore_%.bbappend @@ -0,0 +1,8 @@ +FILESEXTRAPATHS_prepend_gbs := "${THISDIR}/${PN}:" +SRC_URI_append_gbs = " file://config.json" +FILES_${PN}_append_gbs = " ${datadir}/binaryblob/config.json" + +do_install_append_gbs() { + install -d ${D}${datadir}/binaryblob/ + install ${WORKDIR}/config.json ${D}${datadir}/binaryblob/config.json +} diff --git a/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-config.bbappend b/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-config.bbappend new file mode 100644 index 000000000..ca7172498 --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-config.bbappend @@ -0,0 +1 @@ +FILESEXTRAPATHS_prepend_gbs := "${THISDIR}/${PN}:" diff --git a/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-config/dev_id.json b/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-config/dev_id.json new file mode 100644 index 000000000..bc98176b5 --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-config/dev_id.json @@ -0,0 +1,2 @@ +{"id": 32, "revision": 129, "addn_dev_support": 141, + "manuf_id": 7244, "prod_id": 14401, "aux": 0} diff --git a/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-config/entity-map.json b/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-config/entity-map.json new file mode 100644 index 000000000..cb08553b3 --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-config/entity-map.json @@ -0,0 +1,28 @@ +[ + { + "id": 1, + "containerEntityId" : 30, + "containerEntityInstance" : 0, + "isList" : false, + "isLinked" : false, + "entities" : [ + {"id" : 11, "instance" : 0}, + {"id" : 11, "instance" : 1}, + {"id" : 29, "instance" : 0}, + {"id" : 29, "instance" : 1} + ] + }, + { + "id": 2, + "containerEntityId" : 30, + "containerEntityInstance" : 1, + "isList" : false, + "isLinked" : false, + "entities" : [ + {"id" : 29, "instance" : 2}, + {"id" : 29, "instance" : 4}, + {"id" : 0, "instance" : 0}, + {"id" : 0, "instance" : 0} + ] + } +] diff --git a/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-flash_%.bbappend b/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-flash_%.bbappend new file mode 100644 index 000000000..9f4c89026 --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-flash_%.bbappend @@ -0,0 +1,5 @@ +NUVOTON_FLASH_PCIMBOX = "0xF0848000" + +EXTRA_OECONF_append_gbs = " --enable-nuvoton-p2a-mbox" + +IPMI_FLASH_BMC_ADDRESS_gbs = "${NUVOTON_FLASH_PCIMBOX}" diff --git a/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-fru/obmc/eeproms/system/chassis/fan b/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-fru/obmc/eeproms/system/chassis/fan new file mode 100644 index 000000000..9bb4f2c09 --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-fru/obmc/eeproms/system/chassis/fan @@ -0,0 +1,3 @@ +OF_NAME=fan_fru +SYSFS_PATH=/no-such-path/eeprom +FRUID=0x02 diff --git a/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-fru/obmc/eeproms/system/chassis/hsbp b/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-fru/obmc/eeproms/system/chassis/hsbp new file mode 100644 index 000000000..cb099974c --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-fru/obmc/eeproms/system/chassis/hsbp @@ -0,0 +1,3 @@ +OF_NAME=hsbp_fru +SYSFS_PATH=/no-such-path/eeprom +FRUID=0x01 diff --git a/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-fru/obmc/eeproms/system/chassis/motherboard b/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-fru/obmc/eeproms/system/chassis/motherboard new file mode 100644 index 000000000..0b36379f7 --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-fru/obmc/eeproms/system/chassis/motherboard @@ -0,0 +1,3 @@ +OF_NAME=mb_fru +SYSFS_PATH=/sys/bus/i2c/devices/5-0050/eeprom +FRUID=0x00 diff --git a/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-fru_%.bbappend b/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-fru_%.bbappend new file mode 100644 index 000000000..877129716 --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-fru_%.bbappend @@ -0,0 +1,26 @@ +inherit obmc-phosphor-systemd +DEPENDS_append_gbs = " gbs-yaml-config" + +FILESEXTRAPATHS_prepend_gbs := "${THISDIR}/${PN}:" + +EEPROM_NAMES = "motherboard hsbp fan" + +EEPROMFMT = "system/chassis/{0}" +EEPROM_ESCAPEDFMT = "system-chassis-{0}" +EEPROMS = "${@compose_list(d, 'EEPROMFMT', 'EEPROM_NAMES')}" +EEPROMS_ESCAPED = "${@compose_list(d, 'EEPROM_ESCAPEDFMT', 'EEPROM_NAMES')}" + +ENVFMT = "obmc/eeproms/{0}" +SYSTEMD_ENVIRONMENT_FILE_${PN}_append_gbs := " ${@compose_list(d, 'ENVFMT', 'EEPROMS')}" + +TMPL = "obmc-read-eeprom@.service" +TGT = "multi-user.target" +INSTFMT = "obmc-read-eeprom@{0}.service" +FMT = "../${TMPL}:${TGT}.wants/${INSTFMT}" + +SYSTEMD_LINK_${PN}_append_gbs := " ${@compose_list(d, 'FMT', 'EEPROMS_ESCAPED')}" + +EXTRA_OECONF_append_gbs = " \ + YAML_GEN=${STAGING_DIR_HOST}${datadir}/gbs-yaml-config/ipmi-fru-read.yaml \ + PROP_YAML=${STAGING_DIR_HOST}${datadir}/gbs-yaml-config/ipmi-extra-properties.yaml \ + " diff --git a/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-host/0063-Save-the-pre-timeout-interrupt-in-dbus-property.patch b/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-host/0063-Save-the-pre-timeout-interrupt-in-dbus-property.patch new file mode 100644 index 000000000..d815cde72 --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-host/0063-Save-the-pre-timeout-interrupt-in-dbus-property.patch @@ -0,0 +1,138 @@ +From 9deb72959477700216326c033c930236e58f965f Mon Sep 17 00:00:00 2001 +From: Ren Yu <yux.ren@intel.com> +Date: Tue, 28 May 2019 17:11:17 +0800 +Subject: [PATCH] Save the pre-timeout interrupt in dbus property + +Get the watchdog pre-timeout interrupt value from ipmi watchdog set command, +and store it into dbus property. + +Tested: +Config IPMI watchdog: BIOS FRB2 Power Cycle after 1 seconds: +ipmitool raw 0x06 0x24 0x01 0x13 0x0 0x2 0xa 0x00 +Start watchdog: +Ipmitool mc watchdog reset +Check the watchdog pre-timeout interrupt in below: +https://BMCIP/redfish/v1/Systems/system/LogServices/EventLog/Entries + +Signed-off-by: Ren Yu <yux.ren@intel.com> + +--- + app/watchdog.cpp | 47 ++++++++++++++++++++++++++++++++++++++++ + app/watchdog_service.cpp | 6 +++++ + app/watchdog_service.hpp | 9 ++++++++ + 3 files changed, 62 insertions(+) + +diff --git a/app/watchdog.cpp b/app/watchdog.cpp +index 03c373e..cb0b1fd 100644 +--- a/app/watchdog.cpp ++++ b/app/watchdog.cpp +@@ -80,6 +80,7 @@ ipmi::RspType<> ipmiAppResetWatchdogTimer() + + static constexpr uint8_t wd_dont_stop = 0x1 << 6; + static constexpr uint8_t wd_timeout_action_mask = 0x3; ++static constexpr uint8_t wdPreTimeoutInterruptMask = 0x3; + + static constexpr uint8_t wdTimerUseResTimer1 = 0x0; + static constexpr uint8_t wdTimerUseResTimer2 = 0x6; +@@ -127,6 +128,45 @@ WatchdogService::Action ipmiActionToWdAction(IpmiAction ipmi_action) + } + } + ++enum class IpmiPreTimeoutInterrupt : uint8_t ++{ ++ None = 0x0, ++ SMI = 0x1, ++ NMI = 0x2, ++ MI = 0x3, ++}; ++/** @brief Converts an IPMI Watchdog PreTimeoutInterrupt to DBUS defined action ++ * @param[in] ipmi_action The IPMI Watchdog PreTimeoutInterrupt ++ * @return The Watchdog PreTimeoutInterrupt that the ipmi_action maps to ++ */ ++WatchdogService::PreTimeoutInterruptAction ipmiPreTimeoutInterruptToWdAction( ++ IpmiPreTimeoutInterrupt ipmiPreTimeOutInterrupt) ++{ ++ switch (ipmiPreTimeOutInterrupt) ++ { ++ case IpmiPreTimeoutInterrupt::None: ++ { ++ return WatchdogService::PreTimeoutInterruptAction::None; ++ } ++ case IpmiPreTimeoutInterrupt::SMI: ++ { ++ return WatchdogService::PreTimeoutInterruptAction::SMI; ++ } ++ case IpmiPreTimeoutInterrupt::NMI: ++ { ++ return WatchdogService::PreTimeoutInterruptAction::NMI; ++ } ++ case IpmiPreTimeoutInterrupt::MI: ++ { ++ return WatchdogService::PreTimeoutInterruptAction::MI; ++ } ++ default: ++ { ++ throw std::domain_error("IPMI PreTimeoutInterrupt is invalid"); ++ } ++ } ++} ++ + enum class IpmiTimerUse : uint8_t + { + Reserved = 0x0, +@@ -250,6 +290,13 @@ ipmi::RspType<> + // Mark as initialized so that future resets behave correctly + wd_service.setInitialized(true); + ++ // pretimeOutAction ++ const auto ipmiPreTimeoutInterrupt = ++ static_cast<IpmiPreTimeoutInterrupt>(wdPreTimeoutInterruptMask & ++ (static_cast<uint8_t>(preTimeoutInterrupt))); ++ wd_service.setPreTimeoutInterrupt( ++ ipmiPreTimeoutInterruptToWdAction(ipmiPreTimeoutInterrupt)); ++ + lastCallSuccessful = true; + return ipmi::responseSuccess(); + } +diff --git a/app/watchdog_service.cpp b/app/watchdog_service.cpp +index 3534e89..4df1ab6 100644 +--- a/app/watchdog_service.cpp ++++ b/app/watchdog_service.cpp +@@ -198,3 +198,9 @@ void WatchdogService::setInterval(uint64_t interval) + { + setProperty("Interval", interval); + } ++ ++void WatchdogService::setPreTimeoutInterrupt( ++ PreTimeoutInterruptAction preTimeoutInterrupt) ++{ ++ setProperty("PreTimeoutInterrupt", convertForMessage(preTimeoutInterrupt)); ++} +\ No newline at end of file +diff --git a/app/watchdog_service.hpp b/app/watchdog_service.hpp +index 141bdb7..32b7461 100644 +--- a/app/watchdog_service.hpp ++++ b/app/watchdog_service.hpp +@@ -15,6 +15,8 @@ class WatchdogService + + using Action = + sdbusplus::xyz::openbmc_project::State::server::Watchdog::Action; ++ using PreTimeoutInterruptAction = sdbusplus::xyz::openbmc_project::State:: ++ server::Watchdog::PreTimeoutInterruptAction; + using TimerUse = + sdbusplus::xyz::openbmc_project::State::server::Watchdog::TimerUse; + +@@ -92,6 +94,13 @@ class WatchdogService + */ + void setInterval(uint64_t interval); + ++ /** @brief Sets the value of the PreTimeoutInterrupt property on the host ++ * watchdog ++ * ++ * @param[in] PreTimeoutInterrupt - The new PreTimeoutInterrupt value ++ */ ++ void setPreTimeoutInterrupt(PreTimeoutInterruptAction preTimeoutInterrupt); ++ + private: + /** @brief sdbusplus handle */ + sdbusplus::bus::bus bus; diff --git a/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-host/gbs-ipmid-whitelist.conf b/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-host/gbs-ipmid-whitelist.conf new file mode 100644 index 000000000..359c7dbeb --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-host/gbs-ipmid-whitelist.conf @@ -0,0 +1,79 @@ +#<NetFn>:<Command> +0x00:0x00 //<Chassis>:<Chassis Capabiliti> +0x00:0x01 //<Chassis>:<Get Chassis Status> +0x00:0x02 //<Chassis>:<Chassis Control> +0x00:0x04 //<Chassis>:<Chassis Identify> +0x00:0x05 //<Chassis>:<Set Chassis Capabilities> +0x00:0x06 //<Chassis>:<Set Power Restore Policy> +0x00:0x08 //<Chassis>:<Set System Boot Options> +0x00:0x09 //<Chassis>:<Get System Boot Options> +0x00:0x0F //<Chassis>:<Get POH Counter> +0x04:0x02 //<Sensor/Event>:<Platform Event> +0x04:0x20 //<Sensor/Event>:<Get Device SDR Info> +0x04:0x21 //<Sensor/Event>:<Get Device SDR> +0x04:0x22 //<Sensor/Event>:<Reserve Device SDR Repository> +0x04:0x27 //<Sensor/Event>:<Get Sensor Threshold> +0x04:0x29 //<Sensor/Event>:<Get Sensor Event Enable> +0x04:0x2B //<Sensor/Event>:<Get Sensor Event Status> +0x04:0x2D //<Sensor/Event>:<Get Sensor Reading> +0x04:0x2F //<Sensor/Event>:<Get Sensor Type> +0x04:0x30 //<Sensor/Event>:<Set Sensor Reading and Event Status> +0x06:0x01 //<App>:<Get Device ID> +0x06:0x02 //<App>:<Cold Reset> +0x06:0x03 //<App>:<Warm Reset> +0x06:0x04 //<App>:<Get Self Test Results> +0x06:0x06 //<App>:<Set ACPI Power State> +0x06:0x07 //<App>:<Get ACPI Power State> +0x06:0x08 //<App>:<Get Device GUID> +0x06:0x22 //<App>:<Reset Watchdog Timer> +0x06:0x24 //<App>:<Set Watchdog Timer> +0x06:0x25 //<App>:<Get Watchdog Timer> +0x06:0x35 //<App>:<Read Event Message Buffer> +0x06:0x3D //<App>:<Get Session Info> +0x06:0x40 //<App>:<Set Channel Access> +0x06:0x41 //<App>:<Get Channel Access> +0x06:0x42 //<App>:<Get Channel Info> +0x06:0x43 //<App>:<Set User Access> +0x06:0x44 //<App>:<Get User Access> +0x06:0x45 //<App>:<Set User Name> +0x06:0x46 //<App>:<Get User Name> +0x06:0x47 //<App>:<Set User Password> +0x06:0x48 //<App>:<Activate Payload> +0x06:0x49 //<App>:<Deactivate Payload> +0x06:0x4A //<App>:<Get Payload Activation Status> +0x06:0x4B //<App>:<Get Payload Instance Info> +0x06:0x54 //<App>:<Get Channel Cipher Suites> +0x06:0x58 //<App>:<Set System Info Parameters> +0x06:0x59 //<App>:<Get System Info Parameters> +0x0A:0x10 //<Storage>:<Get FRU Inventory Area Info> +0x0A:0x11 //<Storage>:<Read FRU Data> +0x0A:0x20 //<Storage>:<Get SDR Repository Info> +0x0A:0x22 //<Storage>:<Reserve SDR Repository> +0x0A:0x23 //<Storage>:<Get SDR> +0x0A:0x40 //<Storage>:<Get SEL Info> +0x0A:0x42 //<Storage>:<Reserve SEL> +0x0A:0x43 //<Storage>:<Get SEL Entry> +0x0A:0x44 //<Storage>:<Add SEL Entry> +0x0A:0x46 //<Storage>:<Delete SEL Entry> +0x0A:0x47 //<Storage>:<Clear SEL> +0x0A:0x48 //<Storage>:<Get SEL Time> +0x0A:0x49 //<Storage>:<Set SEL Time> +0x0C:0x01 //<Transport>:<Set LAN Configuration Parameters> +0x0C:0x02 //<Transport>:<Get LAN Configuration Parameters> +0x2C:0x00 //<Group Extension>:<Group Extension Command> +0x2C:0x01 //<Group Extension>:<Get DCMI Capabilities> +0x2C:0x02 //<Group Extension>:<Get Power Reading> +0x2C:0x03 //<Group Extension>:<Get Power Limit> +0x2C:0x06 //<Group Extension>:<Get Asset Tag> +0x2C:0x07 //<Group Extension>:<Get Sensor Info> +0x2C:0x09 //<Group Extension>:<Get Management Controller Identifier String> +0x2C:0x0A //<Group Extension>:<Set Management Controller Identifier String> +0x2C:0x10 //<Group Extension>:<Get Temperature Readings> +0x2C:0x12 //<Group Extension>:<Set DCMI Configuration Parameters> +0x2C:0x13 //<Group Extension>:<Get DCMI Configuration Parameters> +0x2C:0x3E //<Group Extension>:<Get HPM.x Capabilities> +0x2E:0x02 //<Google OEM>:<I2C via Proxy Adapter> +0x2E:0x04 //<Google OEM>:<Fan Manual Control Mode> +0x2E:0x30 //<Google OEM>:<Ethernet Statistics> +0x2E:0x32 //<Google OEM>:<Sys Commands> +0x2E:0x80 //<Google OEM>:<Blob Commands> diff --git a/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-host_%.bbappend b/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-host_%.bbappend new file mode 100644 index 000000000..bf2986c47 --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-host_%.bbappend @@ -0,0 +1,18 @@ +DEPENDS_append_gbs = " gbs-yaml-config" + +SRC_URI_remove_gbs = "git://github.com/openbmc/phosphor-host-ipmid" +SRC_URI_prepend_gbs = "git://github.com/quanta-bmc/phosphor-host-ipmid.git" + +SRCREV_gbs = "257ea262809c52e51f1f592e047d27125f0273b3" + +FILESEXTRAPATHS_prepend_gbs := "${THISDIR}/${PN}:" +SRC_URI_append_gbs = " file://gbs-ipmid-whitelist.conf \ + file://0063-Save-the-pre-timeout-interrupt-in-dbus-property.patch \ + " + +WHITELIST_CONF_gbs = "${WORKDIR}/gbs-ipmid-whitelist.conf" + +EXTRA_OECONF_append_gbs = " --with-journal-sel \ + SENSOR_YAML_GEN=${STAGING_DIR_HOST}${datadir}/gbs-yaml-config/ipmi-sensors.yaml \ + FRU_YAML_GEN=${STAGING_DIR_HOST}${datadir}/gbs-yaml-config/ipmi-fru-read.yaml \ + " diff --git a/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-kcs/99-ipmi-kcs.rules b/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-kcs/99-ipmi-kcs.rules new file mode 100644 index 000000000..1de5562c3 --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-kcs/99-ipmi-kcs.rules @@ -0,0 +1 @@ +KERNEL=="ipmi-kcs1", SYMLINK+="ipmi_kcs1" diff --git a/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-kcs_%.bbappend b/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-kcs_%.bbappend new file mode 100644 index 000000000..a7f60d4cc --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-kcs_%.bbappend @@ -0,0 +1,9 @@ +KCS_DEVICE_gbs = "ipmi_kcs1" + +FILESEXTRAPATHS_prepend_gbs := "${THISDIR}/${PN}:" +SRC_URI_append_gbs = " file://99-ipmi-kcs.rules" + +do_install_append_gbs() { + install -d ${D}/lib/udev/rules.d + install -m 0644 ${WORKDIR}/99-ipmi-kcs.rules ${D}/lib/udev/rules.d +} diff --git a/meta-quanta/meta-gbs/recipes-phosphor/leds/gbs-led-manager-config-native.bb b/meta-quanta/meta-gbs/recipes-phosphor/leds/gbs-led-manager-config-native.bb new file mode 100644 index 000000000..03b562002 --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/leds/gbs-led-manager-config-native.bb @@ -0,0 +1,19 @@ +SUMMARY = "Phosphor LED Group Management for GBS" +PR = "r1" +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10" + +inherit native + +PROVIDES += "virtual/phosphor-led-manager-config-native" + +SRC_URI += "file://led.yaml" +S = "${WORKDIR}" + +# Overwrite the example led layout yaml file prior +# to building the phosphor-led-manager package +do_install() { + SRC=${S} + DEST=${D}${datadir}/phosphor-led-manager + install -D ${SRC}/led.yaml ${DEST}/led.yaml +} diff --git a/meta-quanta/meta-gbs/recipes-phosphor/leds/gbs-led-manager-config/led.yaml b/meta-quanta/meta-gbs/recipes-phosphor/leds/gbs-led-manager-config/led.yaml new file mode 100644 index 000000000..411e0d4c6 --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/leds/gbs-led-manager-config/led.yaml @@ -0,0 +1,239 @@ +bmc_booted: + heartbeat: + Action: 'Blink' + DutyOn: 50 + Period: 1000 + +enclosure_identify: + attention: + Action: 'Blink' + DutyOn: 50 + Period: 1000 + +enclosure_fault: + bmc_fault: + Action: 'On' + DutyOn: 50 + Period: 0 + Priority: 'Blink' + +boot_status_inactive: + sys_boot_status: + Action: 'Blink' + DutyOn: 50 + Period: 1000 + +boot_status_standby: + sys_boot_status: + Action: 'On' + Period: 1000 + +led_u2_0_locate: + led_u2_0_locate: + Action: 'Blink' + DutyOn: 50 + Period: 250 + led_u2_0_fault: + Action: 'Blink' + DutyOn: 50 + Period: 250 +led_u2_1_locate: + led_u2_1_locate: + Action: 'Blink' + DutyOn: 50 + Period: 250 + led_u2_1_fault: + Action: 'Blink' + DutyOn: 50 + Period: 250 +led_u2_2_locate: + led_u2_2_locate: + Action: 'Blink' + DutyOn: 50 + Period: 250 + led_u2_2_fault: + Action: 'Blink' + DutyOn: 50 + Period: 250 +led_u2_3_locate: + led_u2_3_locate: + Action: 'Blink' + DutyOn: 50 + Period: 250 + led_u2_3_fault: + Action: 'Blink' + DutyOn: 50 + Period: 250 +led_u2_4_locate: + led_u2_4_locate: + Action: 'Blink' + DutyOn: 50 + Period: 250 + led_u2_4_fault: + Action: 'Blink' + DutyOn: 50 + Period: 250 +led_u2_5_locate: + led_u2_5_locate: + Action: 'Blink' + DutyOn: 50 + Period: 250 + led_u2_5_fault: + Action: 'Blink' + DutyOn: 50 + Period: 250 +led_u2_6_locate: + led_u2_6_locate: + Action: 'Blink' + DutyOn: 50 + Period: 250 + led_u2_6_fault: + Action: 'Blink' + DutyOn: 50 + Period: 250 +led_u2_7_locate: + led_u2_7_locate: + Action: 'Blink' + DutyOn: 50 + Period: 250 + led_u2_7_fault: + Action: 'Blink' + DutyOn: 50 + Period: 250 +led_u2_8_locate: + led_u2_8_locate: + Action: 'Blink' + DutyOn: 50 + Period: 250 + led_u2_8_fault: + Action: 'Blink' + DutyOn: 50 + Period: 250 +led_u2_9_locate: + led_u2_9_locate: + Action: 'Blink' + DutyOn: 50 + Period: 250 + led_u2_9_fault: + Action: 'Blink' + DutyOn: 50 + Period: 250 +led_u2_10_locate: + led_u2_10_locate: + Action: 'Blink' + DutyOn: 50 + Period: 250 + led_u2_10_fault: + Action: 'Blink' + DutyOn: 50 + Period: 250 +led_u2_11_locate: + led_u2_11_locate: + Action: 'Blink' + DutyOn: 50 + Period: 250 + led_u2_11_fault: + Action: 'Blink' + DutyOn: 50 + Period: 250 +led_u2_12_locate: + led_u2_12_locate: + Action: 'Blink' + DutyOn: 50 + Period: 250 + led_u2_12_fault: + Action: 'Blink' + DutyOn: 50 + Period: 250 +led_u2_13_locate: + led_u2_13_locate: + Action: 'Blink' + DutyOn: 50 + Period: 250 + led_u2_13_fault: + Action: 'Blink' + DutyOn: 50 + Period: 250 +led_u2_14_locate: + led_u2_14_locate: + Action: 'Blink' + DutyOn: 50 + Period: 250 + led_u2_14_fault: + Action: 'Blink' + DutyOn: 50 + Period: 250 +led_u2_15_locate: + led_u2_15_locate: + Action: 'Blink' + DutyOn: 50 + Period: 250 + led_u2_15_fault: + Action: 'Blink' + DutyOn: 50 + Period: 250 + +led_u2_0_fault: + led_u2_0_fault: + Action: 'On' + Period: 1000 +led_u2_1_fault: + led_u2_1_fault: + Action: 'On' + Period: 1000 +led_u2_2_fault: + led_u2_2_fault: + Action: 'On' + Period: 1000 +led_u2_3_fault: + led_u2_3_fault: + Action: 'On' + Period: 1000 +led_u2_4_fault: + led_u2_4_fault: + Action: 'On' + Period: 1000 +led_u2_5_fault: + led_u2_5_fault: + Action: 'On' + Period: 1000 +led_u2_6_fault: + led_u2_6_fault: + Action: 'On' + Period: 1000 +led_u2_7_fault: + led_u2_7_fault: + Action: 'On' + Period: 1000 +led_u2_8_fault: + led_u2_8_fault: + Action: 'On' + Period: 1000 +led_u2_9_fault: + led_u2_9_fault: + Action: 'On' + Period: 1000 +led_u2_10_fault: + led_u2_10_fault: + Action: 'On' + Period: 1000 +led_u2_11_fault: + led_u2_11_fault: + Action: 'On' + Period: 1000 +led_u2_12_fault: + led_u2_12_fault: + Action: 'On' + Period: 1000 +led_u2_13_fault: + led_u2_13_fault: + Action: 'On' + Period: 1000 +led_u2_14_fault: + led_u2_14_fault: + Action: 'On' + Period: 1000 +led_u2_15_fault: + led_u2_15_fault: + Action: 'On' + Period: 1000
\ No newline at end of file diff --git a/meta-quanta/meta-gbs/recipes-phosphor/network/phosphor-network_%.bbappend b/meta-quanta/meta-gbs/recipes-phosphor/network/phosphor-network_%.bbappend new file mode 100644 index 000000000..49959cc0e --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/network/phosphor-network_%.bbappend @@ -0,0 +1 @@ +EXTRA_OECONF_append_gbs = " --enable-nic-ethtool=yes" diff --git a/meta-quanta/meta-gbs/recipes-phosphor/packagegroups/packagegroup-gbs-apps.bb b/meta-quanta/meta-gbs/recipes-phosphor/packagegroups/packagegroup-gbs-apps.bb new file mode 100644 index 000000000..4c1bb123c --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/packagegroups/packagegroup-gbs-apps.bb @@ -0,0 +1,36 @@ +SUMMARY = "OpenBMC for GBS system - Applications" +PR = "r1" + +inherit packagegroup + +PROVIDES = "${PACKAGES}" +PACKAGES = " \ + ${PN}-chassis \ + ${PN}-fans \ + ${PN}-flash \ + " + +PROVIDES += "virtual/obmc-chassis-mgmt" +PROVIDES += "virtual/obmc-fan-mgmt" +PROVIDES += "virtual/obmc-flash-mgmt" + +RPROVIDES_${PN}-chassis += "virtual-obmc-chassis-mgmt" +RPROVIDES_${PN}-fans += "virtual-obmc-fan-mgmt" +RPROVIDES_${PN}-flash += "virtual-obmc-flash-mgmt" + +SUMMARY_${PN}-chassis = "GBS Chassis" +RDEPENDS_${PN}-chassis = " \ + x86-power-control \ + " + +SUMMARY_${PN}-fans = "GBS Fans" +RDEPENDS_${PN}-fans = " \ + phosphor-pid-control \ + " + +SUMMARY_${PN}-flash = "GBS Flash" +RDEPENDS_${PN}-flash = " \ + phosphor-ipmi-flash \ + gbs-bmc-update \ + gbs-bios-update \ + " diff --git a/meta-quanta/meta-gbs/recipes-phosphor/packagegroups/packagegroup-obmc-apps%.bbappend b/meta-quanta/meta-gbs/recipes-phosphor/packagegroups/packagegroup-obmc-apps%.bbappend new file mode 100644 index 000000000..935c3cebb --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/packagegroups/packagegroup-obmc-apps%.bbappend @@ -0,0 +1,2 @@ +RDEPENDS_${PN}-extras_remove_gbs = "obmc-ikvm" +RDEPENDS_${PN}-inventory_append_gbs = " virtual/obmc-gpio-presence" diff --git a/meta-quanta/meta-gbs/recipes-phosphor/sel-logger/phosphor-sel-logger_%.bbappend b/meta-quanta/meta-gbs/recipes-phosphor/sel-logger/phosphor-sel-logger_%.bbappend new file mode 100644 index 000000000..e0f8e08aa --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/sel-logger/phosphor-sel-logger_%.bbappend @@ -0,0 +1,5 @@ +SRC_URI_gbs := "git://github.com/quanta-bmc/phosphor-sel-logger.git" +SRCREV_gbs := "6ded68355db28958836aedb40c0d4780d84d2b43" + +# Enable threshold monitoring +EXTRA_OECMAKE_append_gbs = "-DSEL_LOGGER_MONITOR_THRESHOLD_EVENTS=ON" diff --git a/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon/0001-lev-add-poweron-monitor-feature.patch b/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon/0001-lev-add-poweron-monitor-feature.patch new file mode 100644 index 000000000..c279e0b81 --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon/0001-lev-add-poweron-monitor-feature.patch @@ -0,0 +1,257 @@ +From 2cea5d289b278db4468b16bf6b64102655811fd0 Mon Sep 17 00:00:00 2001 +From: Eddielu <Eddie.Lu@quantatw.com> +Date: Mon, 27 Jul 2020 20:30:22 +0800 +Subject: [PATCH] Update lev-add-poweron-monitor-feature patch. + +--- + Makefile.am | 2 ++ + mainloop.cpp | 102 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + sensor.cpp | 11 ++++++- + sensor.hpp | 13 ++++++++ + thresholds.hpp | 2 -- + 5 files changed, 127 insertions(+), 3 deletions(-) + +diff --git a/Makefile.am b/Makefile.am +index 706a6cc..c620fa4 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -46,6 +46,7 @@ libhwmon_la_LIBADD = \ + $(SDEVENTPLUS_LIBS) \ + $(PHOSPHOR_DBUS_INTERFACES_LIBS) \ + $(PHOSPHOR_LOGGING_LIBS) \ ++ $(PTHREAD_LIBS) \ + $(GPIOPLUS_LIBS) \ + $(STDPLUS_LIBS) \ + $(CODE_COVERAGE_LIBS) \ +@@ -55,6 +56,7 @@ libhwmon_la_CXXFLAGS = \ + $(SDEVENTPLUS_CFLAGS) \ + $(PHOSPHOR_DBUS_INTERFACES_CFLAGS) \ + $(PHOSPHOR_LOGGING_CFLAGS) \ ++ $(PTHREAD_CFLAGS) \ + $(STDPLUS_CFLAGS) \ + $(CODE_COVERAGE_CXXFLAGS) + +diff --git a/mainloop.cpp b/mainloop.cpp +index 3e7e0bf..4789a80 100644 +--- a/mainloop.cpp ++++ b/mainloop.cpp +@@ -41,6 +41,12 @@ + #include <string> + #include <unordered_set> + #include <xyz/openbmc_project/Sensor/Device/error.hpp> ++#include <boost/container/flat_map.hpp> ++#include <boost/algorithm/string/predicate.hpp> ++#include <sdbusplus/asio/connection.hpp> ++#include <sdbusplus/asio/object_server.hpp> ++#include <sdbusplus/message/types.hpp> ++#include <sdbusplus/timer.hpp> + + using namespace phosphor::logging; + +@@ -76,6 +82,12 @@ decltype( + Thresholds<CriticalObject>::alarmHi) Thresholds<CriticalObject>::alarmHi = + &CriticalObject::criticalAlarmHigh; + ++static std::unique_ptr<phosphor::Timer> cacheTimer = nullptr; ++static std::unique_ptr<sdbusplus::bus::match::match> powerMatch = nullptr; ++static bool powerStatusOn = false; ++static boost::asio::io_service io; ++static auto conn = std::make_shared<sdbusplus::asio::connection>(io); ++ + void updateSensorInterfaces(InterfaceMap& ifaces, SensorValueType value) + { + for (auto& iface : ifaces) +@@ -103,6 +115,84 @@ void updateSensorInterfaces(InterfaceMap& ifaces, SensorValueType value) + } + } + ++void powerStatusSet() ++{ ++ powerStatusOn = true; ++ return; ++} ++ ++void createTimer() ++{ ++ if (cacheTimer == nullptr) ++ { ++ cacheTimer = std::make_unique<phosphor::Timer>(powerStatusSet); ++ } ++} ++ ++bool isPowerOn(void) ++{ ++ if (!powerMatch) ++ { ++ throw std::runtime_error("Power Match Not Created"); ++ } ++ return powerStatusOn; ++} ++ ++void setupPowerMatch(sdbusplus::bus::bus& bus) ++{ ++ if (powerMatch) ++ { ++ return; ++ } ++ ++ powerMatch = std::make_unique<sdbusplus::bus::match::match>( ++ bus, ++ "type='signal',interface='org.freedesktop.DBus.Properties',path='/xyz/" ++ "openbmc_project/state/" ++ "host0',arg0='xyz.openbmc_project.State.Host'", ++ [](sdbusplus::message::message& message) { ++ std::string objectName; ++ boost::container::flat_map<std::string, std::variant<std::string>> ++ values; ++ message.read(objectName, values); ++ auto findState = values.find("CurrentHostState"); ++ if (findState != values.end()) ++ { ++ bool on = boost::ends_with( ++ std::get<std::string>(findState->second), "Running"); ++ if (!on) ++ { ++ cacheTimer->stop(); ++ powerStatusOn = false; ++ return; ++ } ++ cacheTimer->start(std::chrono::duration_cast<std::chrono::microseconds>( ++ std::chrono::seconds(10))); ++ } ++ else { ++ powerStatusOn = false; ++ } ++ }); ++ ++ conn->async_method_call( ++ [](boost::system::error_code ec, ++ const std::variant<std::string>& state) { ++ if (ec) ++ { ++ return; ++ } ++ powerStatusOn = ++ boost::ends_with(std::get<std::string>(state), "Running"); ++ }, ++ "xyz.openbmc_project.State.Host", ++ "/xyz/openbmc_project/state/host0", ++ "org.freedesktop.DBus.Properties", "Get", ++ "xyz.openbmc_project.State.Host", "CurrentHostState"); ++ ++ createTimer(); ++} ++ ++ + std::string MainLoop::getID(SensorSet::container_t::const_reference sensor) + { + std::string id; +@@ -384,6 +474,7 @@ void MainLoop::init() + _interval = std::strtoull(interval.c_str(), NULL, 10); + } + } ++ setupPowerMatch(_bus); + } + + void MainLoop::read() +@@ -428,6 +519,12 @@ void MainLoop::read() + + try + { ++ if(sensor->pwrOnMonitor() && !isPowerOn()) ++ { ++ statusIface->functional(false); ++ continue; ++ } ++ + if (sensor->hasFaultFile()) + { + auto fault = _ioAccess->read(sensorSysfsType, sensorSysfsNum, +@@ -490,6 +587,11 @@ void MainLoop::read() + } + } + ++ if(sensor->pwrOnMonitor() && !isPowerOn()) ++ { ++ statusIface->functional(false); ++ continue; ++ } + updateSensorInterfaces(obj, value); + } + catch (const std::system_error& e) +diff --git a/sensor.cpp b/sensor.cpp +index 09aeca6..b1cb470 100644 +--- a/sensor.cpp ++++ b/sensor.cpp +@@ -31,7 +31,7 @@ Sensor::Sensor(const SensorSet::key_type& sensor, + const hwmonio::HwmonIOInterface* ioAccess, + const std::string& devPath) : + _sensor(sensor), +- _ioAccess(ioAccess), _devPath(devPath), _scale(0), _hasFaultFile(false) ++ _ioAccess(ioAccess), _devPath(devPath), _scale(0), _hasFaultFile(false), _pwrOnMonitor(false) + { + auto chip = env::getEnv("GPIOCHIP", sensor); + auto access = env::getEnv("GPIO", sensor); +@@ -60,6 +60,15 @@ Sensor::Sensor(const SensorSet::key_type& sensor, + auto senRmRCs = env::getEnv("REMOVERCS", sensor); + // Add sensor removal return codes defined per sensor + addRemoveRCs(senRmRCs); ++ ++ auto pwrOnMon = env::getEnv("PWRONMON", sensor); ++ if (!pwrOnMon.empty()) ++ { ++ if (pwrOnMon == "ON") ++ { ++ _pwrOnMonitor = true; ++ } ++ } + } + + void Sensor::addRemoveRCs(const std::string& rcList) +diff --git a/sensor.hpp b/sensor.hpp +index 4b2d281..369a252 100644 +--- a/sensor.hpp ++++ b/sensor.hpp +@@ -135,6 +135,16 @@ class Sensor + return _hasFaultFile; + } + ++ /** ++ * @brief Get whether the sensor only need to be monitored in power on state or not. ++ * ++ * @return - Boolean on whether the sensor only need to be monitored in power on state ++ */ ++ inline bool pwrOnMonitor(void) const ++ { ++ return _pwrOnMonitor; ++ } ++ + private: + /** @brief Sensor object's identifiers */ + SensorSet::key_type _sensor; +@@ -156,6 +166,9 @@ class Sensor + + /** @brief Tracks whether the sensor has a fault file or not. */ + bool _hasFaultFile; ++ ++ /** @brief Whether the sensor only need to be monitored in power on state or not. */ ++ bool _pwrOnMonitor; + }; + + /** +diff --git a/thresholds.hpp b/thresholds.hpp +index 4d2fcff..972a469 100644 +--- a/thresholds.hpp ++++ b/thresholds.hpp +@@ -101,8 +101,6 @@ auto addThreshold(const std::string& sensorType, const std::string& sensorID, + auto hi = stod(tHi) * std::pow(10, scale); + (*iface.*Thresholds<T>::setLo)(lo); + (*iface.*Thresholds<T>::setHi)(hi); +- (*iface.*Thresholds<T>::alarmLo)(value <= lo); +- (*iface.*Thresholds<T>::alarmHi)(value >= hi); + auto type = Thresholds<T>::type; + obj[type] = iface; + } +-- +2.7.4 + diff --git a/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon/0002-lev-add-sensors-slow-readings.patch b/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon/0002-lev-add-sensors-slow-readings.patch new file mode 100644 index 000000000..0ab2f2048 --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon/0002-lev-add-sensors-slow-readings.patch @@ -0,0 +1,295 @@ +From 8eafa1b0513dd2f5898182487b4524a485bf1e21 Mon Sep 17 00:00:00 2001 +From: Eddielu <Eddie.Lu@quantatw.com> +Date: Mon, 27 Jul 2020 20:54:28 +0800 +Subject: [PATCH] Update add sensors slow readings patch. + +--- + mainloop.cpp | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++++++---- + mainloop.hpp | 3 +++ + meson.build | 1 + + sensor.cpp | 75 +++++++++++++++++++++++++++++++++++++++++++++++++++++------- + sensor.hpp | 20 ++++++++++++++-- + 5 files changed, 158 insertions(+), 14 deletions(-) + +diff --git a/mainloop.cpp b/mainloop.cpp +index 4789a80..98d0658 100644 +--- a/mainloop.cpp ++++ b/mainloop.cpp +@@ -34,6 +34,7 @@ + #include <cassert> + #include <cstdlib> + #include <functional> ++#include <future> + #include <iostream> + #include <memory> + #include <phosphor-logging/elog-errors.hpp> +@@ -299,7 +300,7 @@ std::optional<ObjectStateData> + { + // Add status interface based on _fault file being present + sensorObj->addStatus(info); +- valueInterface = sensorObj->addValue(retryIO, info); ++ valueInterface = sensorObj->addValue(retryIO, info, _timedoutMap); + } + catch (const std::system_error& e) + { +@@ -542,10 +543,74 @@ void MainLoop::read() + // RAII object for GPIO unlock / lock + auto locker = sensor::gpioUnlock(sensor->getGpio()); + +- // Retry for up to a second if device is busy +- // or has a transient error. +- value = _ioAccess->read(sensorSysfsType, sensorSysfsNum, input, ++ // For sensors with attribute ASYNC_READ_TIMEOUT, ++ // spawn a thread with timeout ++ auto asyncRead = ++ env::getEnv("ASYNC_READ_TIMEOUT", sensorSetKey); ++ if (!asyncRead.empty()) ++ { ++ // Default async read timeout ++ std::chrono::milliseconds asyncReadTimeout{ ++ std::stoi(asyncRead)}; ++ bool valueIsValid = false; ++ std::future<int64_t> asyncThread; ++ ++ auto asyncIter = _timedoutMap.find(sensorSetKey); ++ if (asyncIter == _timedoutMap.end()) ++ { ++ // If sensor not found in timedoutMap, spawn an async ++ // thread ++ asyncThread = std::async( ++ std::launch::async, ++ &hwmonio::HwmonIOInterface::read, _ioAccess, ++ sensorSysfsType, sensorSysfsNum, input, ++ hwmonio::retries, hwmonio::delay); ++ valueIsValid = true; ++ } ++ else ++ { ++ // If we already have the async thread in the ++ // timedoutMap, it means this sensor has already timed ++ // out in the previous reads. No need to wait on ++ // subsequent reads ++ asyncReadTimeout = std::chrono::seconds(0); ++ asyncThread = std::move(asyncIter->second); ++ } ++ ++ std::future_status status = ++ asyncThread.wait_for(asyncReadTimeout); ++ switch (status) ++ { ++ // Read has finished ++ case std::future_status::ready: ++ // Read has finished ++ if (valueIsValid) ++ { ++ value = asyncThread.get(); ++ break; ++ // Good sensor reads should skip the code below ++ } ++ // Async read thread has completed, erase from ++ // timedoutMap to allow retry then throw ++ _timedoutMap.erase(sensorSetKey); ++ throw sensor::AsyncSensorReadTimeOut(); ++ default: ++ // Read timed out so add the thread to the ++ // timedoutMap (if the entry already exists, ++ // operator[] updates it) ++ _timedoutMap[sensorSetKey] = std::move(asyncThread); ++ throw sensor::AsyncSensorReadTimeOut(); ++ } ++ } ++ else ++ { ++ // Retry for up to a second if device is busy ++ // or has a transient error. ++ value = ++ _ioAccess->read(sensorSysfsType, sensorSysfsNum, input, + hwmonio::retries, hwmonio::delay); ++ } ++ + // Set functional property to true if we could read sensor + statusIface->functional(true); + +diff --git a/mainloop.hpp b/mainloop.hpp +index b3de022..6803c4b 100644 +--- a/mainloop.hpp ++++ b/mainloop.hpp +@@ -9,6 +9,7 @@ + #include "types.hpp" + + #include <any> ++#include <future> + #include <memory> + #include <optional> + #include <sdbusplus/server.hpp> +@@ -116,6 +117,8 @@ class MainLoop + /** @brief Store the specifications of sensor objects */ + std::map<SensorSet::key_type, std::unique_ptr<sensor::Sensor>> + _sensorObjects; ++ /** @brief Store the async futures of timed out sensor objects */ ++ std::map<SensorSet::key_type, std::future<int64_t>> _timedoutMap; + + /** + * @brief Map of removed sensors +diff --git a/meson.build b/meson.build +index 66e6801..d6a92f8 100644 +--- a/meson.build ++++ b/meson.build +@@ -84,6 +84,7 @@ libhwmon_all = static_library( + gpioplus, + phosphor_dbus_interfaces, + phosphor_logging, ++ threads, + ], + link_with: [ + libaverage, +diff --git a/sensor.cpp b/sensor.cpp +index b1cb470..72b45f8 100644 +--- a/sensor.cpp ++++ b/sensor.cpp +@@ -15,6 +15,7 @@ + #include <cmath> + #include <cstring> + #include <filesystem> ++#include <future> + #include <phosphor-logging/elog-errors.hpp> + #include <thread> + #include <xyz/openbmc_project/Common/error.hpp> +@@ -125,8 +126,9 @@ SensorValueType Sensor::adjustValue(SensorValueType value) + return value; + } + +-std::shared_ptr<ValueObject> Sensor::addValue(const RetryIO& retryIO, +- ObjectInfo& info) ++std::shared_ptr<ValueObject> Sensor::addValue( ++ const RetryIO& retryIO, ObjectInfo& info, ++ std::map<SensorSet::key_type, std::future<int64_t>>& timedoutMap) + { + static constexpr bool deferSignals = true; + +@@ -153,12 +155,69 @@ std::shared_ptr<ValueObject> Sensor::addValue(const RetryIO& retryIO, + // RAII object for GPIO unlock / lock + auto locker = gpioUnlock(getGpio()); + +- // Retry for up to a second if device is busy +- // or has a transient error. +- val = +- _ioAccess->read(_sensor.first, _sensor.second, +- hwmon::entry::cinput, std::get<size_t>(retryIO), +- std::get<std::chrono::milliseconds>(retryIO)); ++ // For sensors with attribute ASYNC_READ_TIMEOUT, ++ // spawn a thread with timeout ++ auto asyncRead = env::getEnv("ASYNC_READ_TIMEOUT", _sensor); ++ if (!asyncRead.empty()) ++ { ++ // Default async read timeout ++ std::chrono::milliseconds asyncReadTimeout{ ++ std::stoi(asyncRead)}; ++ bool valueIsValid = false; ++ std::future<int64_t> asyncThread; ++ ++ auto asyncIter = timedoutMap.find(_sensor); ++ if (asyncIter == timedoutMap.end()) ++ { ++ // If sensor not found in timedoutMap, spawn an async thread ++ asyncThread = std::async( ++ std::launch::async, &hwmonio::HwmonIOInterface::read, ++ _ioAccess, _sensor.first, _sensor.second, ++ hwmon::entry::cinput, std::get<size_t>(retryIO), ++ std::get<std::chrono::milliseconds>(retryIO)); ++ valueIsValid = true; ++ } ++ else ++ { ++ // If we already have the async thread in the timedoutMap, ++ // it means this sensor has already timed out in the ++ // previous reads. No need to wait on subsequent reads ++ asyncReadTimeout = std::chrono::seconds(0); ++ asyncThread = std::move(asyncIter->second); ++ } ++ ++ std::future_status status = ++ asyncThread.wait_for(asyncReadTimeout); ++ switch (status) ++ { ++ case std::future_status::ready: ++ // Read has finished ++ if (valueIsValid) ++ { ++ val = asyncThread.get(); ++ break; ++ // Good sensor reads should skip the code below ++ } ++ // Async read thread has completed, erase from ++ // timedoutMap to allow retry then throw ++ timedoutMap.erase(_sensor); ++ throw AsyncSensorReadTimeOut(); ++ default: ++ // Read timed out so add the thread to the timedoutMap ++ // (if the entry already exists, operator[] updates it) ++ timedoutMap[_sensor] = std::move(asyncThread); ++ throw AsyncSensorReadTimeOut(); ++ } ++ } ++ else ++ { ++ // Retry for up to a second if device is busy ++ // or has a transient error. ++ val = _ioAccess->read( ++ _sensor.first, _sensor.second, hwmon::entry::cinput, ++ std::get<size_t>(retryIO), ++ std::get<std::chrono::milliseconds>(retryIO)); ++ } + } + #ifdef UPDATE_FUNCTIONAL_ON_FAIL + catch (const std::system_error& e) +diff --git a/sensor.hpp b/sensor.hpp +index 369a252..41c0fe7 100644 +--- a/sensor.hpp ++++ b/sensor.hpp +@@ -4,6 +4,8 @@ + #include "sensorset.hpp" + #include "types.hpp" + ++#include <cerrno> ++#include <future> + #include <gpioplus/handle.hpp> + #include <memory> + #include <optional> +@@ -20,6 +22,17 @@ struct valueAdjust + std::unordered_set<int> rmRCs; + }; + ++/** @brief Custom exception for async sensor reading timeout ++ */ ++struct AsyncSensorReadTimeOut : public std::system_error ++{ ++ AsyncSensorReadTimeOut() : ++ system_error(std::error_code(ETIMEDOUT, std::system_category()), ++ "Async sensor read timed out") ++ { ++ } ++}; ++ + /** @class Sensor + * @brief Sensor object based on a SensorSet container's key type + * @details Sensor object to create and modify an associated device's sensor +@@ -87,10 +100,13 @@ class Sensor + * (number of and delay between) + * @param[in] info - Sensor object information + * ++ * @param[in] timedoutMap - Map to track timed out threads ++ * + * @return - Shared pointer to the value object + */ +- std::shared_ptr<ValueObject> addValue(const RetryIO& retryIO, +- ObjectInfo& info); ++ std::shared_ptr<ValueObject> addValue( ++ const RetryIO& retryIO, ObjectInfo& info, ++ std::map<SensorSet::key_type, std::future<int64_t>>& timedoutMap); + + /** + * @brief Add status interface and functional property for sensor +-- +2.7.4 + diff --git a/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon/obmc/hwmon/ahb/apb/i2c@82000/sbtsi@4c.conf b/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon/obmc/hwmon/ahb/apb/i2c@82000/sbtsi@4c.conf new file mode 100644 index 000000000..6dcada7b1 --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon/obmc/hwmon/ahb/apb/i2c@82000/sbtsi@4c.conf @@ -0,0 +1,9 @@ +LABEL_temp1 = "cputemp" +CRITHI_temp1 = "95000" +CRITLO_temp1 = "0" +WARNHI_temp1 = "95000" +WARNLO_temp1 = "0" +MINVALUE_temp1 = "-128" +MAXVALUE_temp1 = "127" +ASYNC_READ_TIMEOUT_temp1 = "500" +PWRONMON_temp1 = "ON" diff --git a/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon/obmc/hwmon/ahb/apb/i2c@85000/i2c-switch@71/i2c@0/max31725@54.conf b/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon/obmc/hwmon/ahb/apb/i2c@85000/i2c-switch@71/i2c@0/max31725@54.conf new file mode 100644 index 000000000..839a7c610 --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon/obmc/hwmon/ahb/apb/i2c@85000/i2c-switch@71/i2c@0/max31725@54.conf @@ -0,0 +1,8 @@ +LABEL_temp1 = "i2cool_0" +CRITHI_temp1 = "35000" +CRITLO_temp1 = "0" +WARNHI_temp1 = "35000" +WARNLO_temp1 = "0" +MINVALUE_temp1 = "-128" +MAXVALUE_temp1 = "127" +ASYNC_READ_TIMEOUT_temp1 = "500" diff --git a/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon/obmc/hwmon/ahb/apb/i2c@85000/i2c-switch@71/i2c@1/max31725@55.conf b/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon/obmc/hwmon/ahb/apb/i2c@85000/i2c-switch@71/i2c@1/max31725@55.conf new file mode 100644 index 000000000..174c62b98 --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon/obmc/hwmon/ahb/apb/i2c@85000/i2c-switch@71/i2c@1/max31725@55.conf @@ -0,0 +1,8 @@ +LABEL_temp1 = "i2cool_1" +CRITHI_temp1 = "70000" +CRITLO_temp1 = "0" +WARNHI_temp1 = "70000" +WARNLO_temp1 = "0" +MINVALUE_temp1 = "-128" +MAXVALUE_temp1 = "127" +ASYNC_READ_TIMEOUT_temp1 = "500" diff --git a/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon/obmc/hwmon/ahb/apb/i2c@85000/i2c-switch@71/i2c@2/max31725@5d.conf b/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon/obmc/hwmon/ahb/apb/i2c@85000/i2c-switch@71/i2c@2/max31725@5d.conf new file mode 100644 index 000000000..3fb0ceeeb --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon/obmc/hwmon/ahb/apb/i2c@85000/i2c-switch@71/i2c@2/max31725@5d.conf @@ -0,0 +1,8 @@ +LABEL_temp1 = "i2cool_2" +CRITHI_temp1 = "70000" +CRITLO_temp1 = "0" +WARNHI_temp1 = "70000" +WARNLO_temp1 = "0" +MINVALUE_temp1 = "-128" +MAXVALUE_temp1 = "127" +ASYNC_READ_TIMEOUT_temp1 = "500" diff --git a/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon/obmc/hwmon/ahb/apb/i2c@88000/adm1272@10.conf b/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon/obmc/hwmon/ahb/apb/i2c@88000/adm1272@10.conf new file mode 100644 index 000000000..41a53c052 --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon/obmc/hwmon/ahb/apb/i2c@88000/adm1272@10.conf @@ -0,0 +1,43 @@ +LABEL_in1 = "hotswap_vin" +CRITHI_in1 = "60000" +CRITLO_in1 = "40000" +WARNHI_in1 = "60000" +WARNLO_in1 = "40000" +MINVALUE_in1 = "0" +MAXVALUE_in1 = "66" + +LABEL_in2 = "hotswap_vout" +CRITHI_in2 = "60000" +CRITLO_in2 = "40000" +WARNHI_in2 = "60000" +WARNLO_in2 = "40000" +MINVALUE_in2 = "0" +MAXVALUE_in2 = "66" + +LABEL_curr1= "hotswap_iout" +CRITHI_curr1= "40000" +CRITLO_curr1= "0" +WARNHI_curr1= "40000" +WARNLO_curr1= "0" +MINVALUE_curr1 = "0" +MAXVALUE_curr1 = "55" +# READ_Iout is direct value*0.98 +GAIN_curr1 = "0.98" + +LABEL_power1= "hotswap_pout" +CRITHI_power1= "1920000000" +CRITLO_power1= "0" +WARNHI_power1= "1920000000" +WARNLO_power1= "0" +MINVALUE_power1 = "0" +MAXVALUE_power1 = "2200" +# READ_Pout is direct value*0.98 +GAIN_power1 = "0.98" + +LABEL_temp1= "hotswap" +WARNLO_temp1= "0" +WARNHI_temp1= "125000" +CRITHI_temp1 = "125000" +CRITLO_temp1 = "0" +MINVALUE_temp1 = "-128" +MAXVALUE_temp1 = "127" diff --git a/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon/obmc/hwmon/ahb/apb/i2c@89000/i2c-switch@71/i2c@0/vrm@60.conf b/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon/obmc/hwmon/ahb/apb/i2c@89000/i2c-switch@71/i2c@0/vrm@60.conf new file mode 100644 index 000000000..79397b06c --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon/obmc/hwmon/ahb/apb/i2c@89000/i2c-switch@71/i2c@0/vrm@60.conf @@ -0,0 +1,46 @@ +LABEL_in1 = "vddcr_cpu_in" +CRITHI_in1 = "12600" +CRITLO_in1 = "11400" +WARNHI_in1 = "12600" +WARNLO_in1 = "11400" +MINVALUE_in1 = "0" +MAXVALUE_in1 = "14" +# READ_VIN is direct value *10 +GAIN_in1 = "10.0" +PWRONMON_in1 = "ON" + +LABEL_in2 = "vddcr_cpu_out" +CRITHI_in2 = "1300" +CRITLO_in2 = "400" +WARNHI_in2 = "1300" +WARNLO_in2 = "400" +MINVALUE_in2 = "0" +MAXVALUE_in2 = "2" +PWRONMON_in2 = "ON" + +LABEL_curr1 = "vddcr_cpu_in" +CRITHI_curr1 = "21250" +CRITLO_curr1 = "-4000" +WARNHI_curr1 = "21250" +WARNLO_curr1 = "-4000" +MINVALUE_curr1 = "0" +MAXVALUE_curr1 = "22" +PWRONMON_curr1 = "ON" + +LABEL_curr2 = "vddcr_cpu_out" +CRITHI_curr2 = "255000" +CRITLO_curr2 = "-50000" +WARNHI_curr2 = "255000" +WARNLO_curr2 = "-50000" +MINVALUE_curr2 = "0" +MAXVALUE_curr2 = "256" +PWRONMON_curr2 = "ON" + +LABEL_temp1= "vddcr_cpu" +WARNLO_temp1= "0" +WARNHI_temp1= "100000" +CRITHI_temp1 = "100000" +CRITLO_temp1 = "0" +MINVALUE_temp1 = "-128" +MAXVALUE_temp1 = "127" +PWRONMON_temp1 = "ON" diff --git a/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon/obmc/hwmon/ahb/apb/i2c@89000/i2c-switch@71/i2c@1/vrm@61.conf b/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon/obmc/hwmon/ahb/apb/i2c@89000/i2c-switch@71/i2c@1/vrm@61.conf new file mode 100644 index 000000000..f21c32a24 --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon/obmc/hwmon/ahb/apb/i2c@89000/i2c-switch@71/i2c@1/vrm@61.conf @@ -0,0 +1,46 @@ +LABEL_in1 = "vddcr_soc_in" +CRITHI_in1 = "12600" +CRITLO_in1 = "11400" +WARNHI_in1 = "12600" +WARNLO_in1 = "11400" +MINVALUE_in1 = "0" +MAXVALUE_in1 = "14" +# READ_VIN is direct value *10 +GAIN_in1 = "10.0" +PWRONMON_in1 = "ON" + +LABEL_in2 = "vddcr_soc_out" +CRITHI_in2 = "1300" +CRITLO_in2 = "500" +WARNHI_in2 = "1300" +WARNLO_in2 = "500" +MINVALUE_in2 = "0" +MAXVALUE_in2 = "2" +PWRONMON_in2 = "ON" + +LABEL_curr1 = "vddcr_soc_in" +CRITHI_curr1 = "6700" +CRITLO_curr1 = "0" +WARNHI_curr1 = "6700" +WARNLO_curr1 = "0" +MINVALUE_curr1 = "0" +MAXVALUE_curr1 = "9" +PWRONMON_curr1 = "ON" + +LABEL_curr2 = "vddcr_soc_out" +CRITHI_curr2 = "80000" +CRITLO_curr2 = "0" +WARNHI_curr2 = "80000" +WARNLO_curr2 = "0" +MINVALUE_curr2 = "0" +MAXVALUE_curr2 = "88" +PWRONMON_curr2 = "ON" + +LABEL_temp1= "vddcr_soc" +WARNLO_temp1= "0" +WARNHI_temp1= "100000" +CRITHI_temp1 = "100000" +CRITLO_temp1 = "0" +MINVALUE_temp1 = "-128" +MAXVALUE_temp1 = "127" +PWRONMON_temp1 = "ON" diff --git a/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon/obmc/hwmon/ahb/apb/i2c@89000/i2c-switch@71/i2c@2/vrm@63.conf b/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon/obmc/hwmon/ahb/apb/i2c@89000/i2c-switch@71/i2c@2/vrm@63.conf new file mode 100644 index 000000000..9cd9a129b --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon/obmc/hwmon/ahb/apb/i2c@89000/i2c-switch@71/i2c@2/vrm@63.conf @@ -0,0 +1,46 @@ +LABEL_in1 = "vddio_efgh_in" +CRITHI_in1 = "12600" +CRITLO_in1 = "11400" +WARNHI_in1 = "12600" +WARNLO_in1 = "11400" +MINVALUE_in1 = "0" +MAXVALUE_in1 = "14" +# READ_VIN is direct value *10 +GAIN_in1 = "10.0" +PWRONMON_in1 = "ON" + +LABEL_in2 = "vddio_efgh_out" +CRITHI_in2 = "1320" +CRITLO_in2 = "800" +WARNHI_in2 = "1320" +WARNLO_in2 = "800" +MINVALUE_in2 = "0" +MAXVALUE_in2 = "2" +PWRONMON_in2 = "ON" + +LABEL_curr1 = "vddio_efgh_in" +CRITHI_curr1 = "8400" +CRITLO_curr1 = "0" +WARNHI_curr1 = "8400" +WARNLO_curr1 = "0" +MINVALUE_curr1 = "0" +MAXVALUE_curr1 = "9" +PWRONMON_curr1 = "ON" + +LABEL_curr2 = "vddio_efgh_out" +CRITHI_curr2 = "84000" +CRITLO_curr2 = "0" +WARNHI_curr2 = "84000" +WARNLO_curr2 = "0" +MINVALUE_curr2 = "0" +MAXVALUE_curr2 = "88" +PWRONMON_curr2 = "ON" + +LABEL_temp1= "vddio_efgh" +WARNLO_temp1= "0" +WARNHI_temp1= "100000" +CRITHI_temp1 = "100000" +CRITLO_temp1 = "0" +MINVALUE_temp1 = "-128" +MAXVALUE_temp1 = "127" +PWRONMON_temp1 = "ON" diff --git a/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon/obmc/hwmon/ahb/apb/i2c@89000/i2c-switch@71/i2c@3/vrm@45.conf b/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon/obmc/hwmon/ahb/apb/i2c@89000/i2c-switch@71/i2c@3/vrm@45.conf new file mode 100644 index 000000000..762af173b --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon/obmc/hwmon/ahb/apb/i2c@89000/i2c-switch@71/i2c@3/vrm@45.conf @@ -0,0 +1,46 @@ +LABEL_in1 = "vddio_abcd_in" +CRITHI_in1 = "12600" +CRITLO_in1 = "11400" +WARNHI_in1 = "12600" +WARNLO_in1 = "11400" +MINVALUE_in1 = "0" +MAXVALUE_in1 = "14" +# READ_VIN is direct value *10 +GAIN_in1 = "10.0" +PWRONMON_in1 = "ON" + +LABEL_in2 = "vddio_abcd_out" +CRITHI_in2 = "1320" +CRITLO_in2 = "800" +WARNHI_in2 = "1320" +WARNLO_in2 = "800" +MINVALUE_in2 = "0" +MAXVALUE_in2 = "2" +PWRONMON_in2 = "ON" + +LABEL_curr1 = "vddio_abcd_in" +CRITHI_curr1 = "8400" +CRITLO_curr1 = "0" +WARNHI_curr1 = "8400" +WARNLO_curr1 = "0" +MINVALUE_curr1 = "0" +MAXVALUE_curr1 = "9" +PWRONMON_curr1 = "ON" + +LABEL_curr2 = "vddio_abcd_out" +CRITHI_curr2 = "84000" +CRITLO_curr2 = "0" +WARNHI_curr2 = "84000" +WARNLO_curr2 = "0" +MINVALUE_curr2 = "0" +MAXVALUE_curr2 = "88" +PWRONMON_curr2 = "ON" + +LABEL_temp1= "vddio_abcd" +WARNLO_temp1= "0" +WARNHI_temp1= "100000" +CRITHI_temp1 = "100000" +CRITLO_temp1 = "0" +MINVALUE_temp1 = "-128" +MAXVALUE_temp1 = "127" +PWRONMON_temp1 = "ON" diff --git a/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon/obmc/hwmon/ahb/apb/i2c@8c000/max34451@4e.conf b/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon/obmc/hwmon/ahb/apb/i2c@8c000/max34451@4e.conf new file mode 100644 index 000000000..9a8a80390 --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon/obmc/hwmon/ahb/apb/i2c@8c000/max34451@4e.conf @@ -0,0 +1,119 @@ +LABEL_in1 = "p1v8_stby" +CRITHI_in1 = "1890" +CRITLO_in1 = "1710" +WARNHI_in1 = "1890" +WARNLO_in1 = "1710" +MINVALUE_in1 = "0" +MAXVALUE_in1 = "2" +PWRONMON_in1 = "ON" + +LABEL_in2 = "vddcr_soc_stby" +CRITHI_in2 = "945" +CRITLO_in2 = "855" +WARNHI_in2 = "945" +WARNLO_in2 = "855" +MINVALUE_in2 = "0" +MAXVALUE_in2 = "1" +PWRONMON_in2 = "ON" + +LABEL_in3 = "p2v5_stby" +CRITHI_in3 = "2625" +CRITLO_in3 = "2375" +WARNHI_in3 = "2625" +WARNLO_in3 = "2375" +MINVALUE_in3 = "0" +MAXVALUE_in3 = "3" +PWRONMON_in3 = "ON" + +LABEL_in4 = "p1v2_stby" +CRITHI_in4 = "1260" +CRITLO_in4 = "1140" +WARNHI_in4 = "1260" +WARNLO_in4 = "1140" +MINVALUE_in4 = "0" +MAXVALUE_in4 = "2" +PWRONMON_in4 = "ON" + +LABEL_in5 = "p1v175_stby" +CRITHI_in5 = "1234" +CRITLO_in5 = "1116" +WARNHI_in5 = "1234" +WARNLO_in5 = "1116" +MINVALUE_in5 = "0" +MAXVALUE_in5 = "2" +PWRONMON_in5 = "ON" + +LABEL_in6 = "p1v8" +CRITHI_in6 = "1890" +CRITLO_in6 = "1710" +WARNHI_in6 = "1890" +WARNLO_in6 = "1710" +MINVALUE_in6 = "0" +MAXVALUE_in6 = "2" +PWRONMON_in6 = "ON" + +LABEL_in7 = "p3v3" +CRITHI_in7 = "3465" +CRITLO_in7 = "3135" +WARNHI_in7 = "3465" +WARNLO_in7 = "3135" +MINVALUE_in7 = "0" +MAXVALUE_in7 = "4" +PWRONMON_in7 = "ON" + +LABEL_in8 = "pwrgd_pvpp" +CRITHI_in8 = "5760" +CRITLO_in8 = "1600" +WARNHI_in8 = "5760" +WARNLO_in8 = "1600" +MINVALUE_in8 = "0" +MAXVALUE_in8 = "6" +PWRONMON_in8 = "ON" +GAIN_in8 = "1.60" + +LABEL_in9 = "pwrgd_pvddio" +CRITHI_in9 = "5760" +CRITLO_in9 = "1600" +WARNHI_in9 = "5760" +WARNLO_in9 = "1600" +MINVALUE_in9 = "0" +MAXVALUE_in9 = "6" +PWRONMON_in9 = "ON" +GAIN_in9 = "1.60" + +LABEL_in10 = "pwrgd_cpuvr" +CRITHI_in10 = "5760" +CRITLO_in10 = "1600" +WARNHI_in10 = "5760" +WARNLO_in10 = "1600" +MINVALUE_in10 = "0" +MAXVALUE_in10 = "6" +PWRONMON_in10 = "ON" +GAIN_in10 = "1.60" + +LABEL_in11 = "p3v3_stby" +CRITHI_in11 = "3465" +CRITLO_in11 = "3135" +WARNHI_in11 = "3465" +WARNLO_in11 = "3135" +MINVALUE_in11 = "0" +MAXVALUE_in11 = "4" +PWRONMON_in11 = "ON" + +LABEL_in12 = "p5v_stby" +CRITHI_in12 = "5250" +CRITLO_in12 = "4750" +WARNHI_in12 = "5250" +WARNLO_in12 = "4750" +MINVALUE_in12 = "0" +MAXVALUE_in12 = "6" +PWRONMON_in12 = "ON" + +LABEL_temp1 = "powerseq_temp" +CRITHI_temp1 = "99000" +CRITLO_temp1 = "0" +WARNHI_temp1 = "99000" +WARNLO_temp1 = "0" +MINVALUE_temp1 = "-128" +MAXVALUE_temp1 = "127" +ASYNC_READ_TIMEOUT_temp1 = "500" diff --git a/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon/obmc/hwmon/ahb/apb/i2c@8c000/vrm@5d.conf b/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon/obmc/hwmon/ahb/apb/i2c@8c000/vrm@5d.conf new file mode 100644 index 000000000..427cdabe0 --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon/obmc/hwmon/ahb/apb/i2c@8c000/vrm@5d.conf @@ -0,0 +1,50 @@ +LABEL_in1 = "p12v_fan_in" +CRITHI_in1 = "60000" +CRITLO_in1 = "40000" +WARNHI_in1 = "60000" +WARNLO_in1 = "40000" +MINVALUE_in1 = "0" +MAXVALUE_in1 = "65" +# READ_VIN is direct value*100 +GAIN_in1 = "100.0" +PWRONMON_in1 = "ON" + +LABEL_in2 = "p12v_fan_out" +CRITHI_in2 = "12600" +CRITLO_in2 = "11400" +WARNHI_in2 = "12600" +WARNLO_in2 = "11400" +MINVALUE_in2 = "0" +MAXVALUE_in2 = "14" +# READ_VOUT is direct value*5.02 +GAIN_in2 = "5.02" +PWRONMON_in2 = "ON" + +LABEL_curr1 = "p12v_fan_in" +CRITHI_curr1 = "30000" +CRITLO_curr1 = "0" +WARNHI_curr1 = "30000" +WARNLO_curr1 = "0" +MINVALUE_curr1 = "0" +MAXVALUE_curr1 = "35" +# READ_Iin is direct value*0.5 +GAIN_curr1 = "0.5" +PWRONMON_curr1 = "ON" + +LABEL_curr2 = "p12v_fan_out" +CRITHI_curr2 = "100000" +CRITLO_curr2 = "0" +WARNHI_curr2 = "100000" +WARNLO_curr2 = "0" +MINVALUE_curr2 = "0" +MAXVALUE_curr2 = "150" +PWRONMON_curr2 = "ON" + +LABEL_temp1= "p12v_fan" +WARNLO_temp1= "0" +WARNHI_temp1= "114000" +CRITHI_temp1 = "114000" +CRITLO_temp1 = "0" +MINVALUE_temp1 = "-128" +MAXVALUE_temp1 = "127" +PWRONMON_temp1 = "ON" diff --git a/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon/obmc/hwmon/ahb/apb/i2c@8c000/vrm@5e.conf b/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon/obmc/hwmon/ahb/apb/i2c@8c000/vrm@5e.conf new file mode 100644 index 000000000..c1612d13b --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon/obmc/hwmon/ahb/apb/i2c@8c000/vrm@5e.conf @@ -0,0 +1,50 @@ +LABEL_in1 = "p12v_mobo_in" +CRITHI_in1 = "60000" +CRITLO_in1 = "40000" +WARNHI_in1 = "60000" +WARNLO_in1 = "40000" +MINVALUE_in1 = "0" +MAXVALUE_in1 = "65" +# READ_VIN is direct value*100 +GAIN_in1 = "100.0" +PWRONMON_in1 = "ON" + +LABEL_in2 = "p12v_mobo_out" +CRITHI_in2 = "12600" +CRITLO_in2 = "11400" +WARNHI_in2 = "12600" +WARNLO_in2 = "11400" +MINVALUE_in2 = "0" +MAXVALUE_in2 = "14" +# READ_VOUT is direct value*5.02 +GAIN_in2 = "5.02" +PWRONMON_in2 = "ON" + +LABEL_curr1 = "p12v_mobo_in" +CRITHI_curr1 = "30000" +CRITLO_curr1 = "0" +WARNHI_curr1 = "30000" +WARNLO_curr1 = "0" +MINVALUE_curr1 = "0" +MAXVALUE_curr1 = "35" +# READ_Iin is direct value*0.5 +GAIN_curr1 = "0.5" +PWRONMON_curr1 = "ON" + +LABEL_curr2 = "p12v_mobo_out" +CRITHI_curr2 = "100000" +CRITLO_curr2 = "0" +WARNHI_curr2 = "100000" +WARNLO_curr2 = "0" +MINVALUE_curr2 = "0" +MAXVALUE_curr2 = "150" +PWRONMON_curr2 = "ON" + +LABEL_temp1= "p12v_mobo" +WARNLO_temp1= "0" +WARNHI_temp1= "114000" +CRITHI_temp1 = "114000" +CRITLO_temp1 = "0" +MINVALUE_temp1 = "-128" +MAXVALUE_temp1 = "127" +PWRONMON_temp1 = "ON" diff --git a/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon/obmc/hwmon/ahb/apb/pwm-fan-controller@103000.conf b/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon/obmc/hwmon/ahb/apb/pwm-fan-controller@103000.conf new file mode 100644 index 000000000..1a8fafb08 --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon/obmc/hwmon/ahb/apb/pwm-fan-controller@103000.conf @@ -0,0 +1,44 @@ +LABEL_fan1= "fan0" +WARNHI_fan1= "19800" +WARNLO_fan1= "600" +CRITHI_fan1= "19800" +CRITLO_fan1= "600" +MINVALUE_fan1 = "0" +MAXVALUE_fan1 = "20775" +PWM_TARGET_fan1 = 1 + +LABEL_fan2= "fan1" +WARNHI_fan2= "19800" +WARNLO_fan2= "600" +CRITHI_fan2= "19800" +CRITLO_fan2= "600" +MINVALUE_fan2 = "0" +MAXVALUE_fan2 = "20775" +PWM_TARGET_fan2 = 2 + +LABEL_fan3= "fb_fan0" +WARNHI_fan3= "19800" +WARNLO_fan3= "600" +CRITHI_fan3= "19800" +CRITLO_fan3= "600" +MINVALUE_fan3 = "0" +MAXVALUE_fan3 = "20775" +PWM_TARGET_fan3 = 3 + +LABEL_fan4= "fb_fan1" +WARNHI_fan4= "19800" +WARNLO_fan4= "600" +CRITHI_fan4= "19800" +CRITLO_fan4= "600" +MINVALUE_fan4 = "0" +MAXVALUE_fan4 = "20775" +PWM_TARGET_fan4 = 4 + +LABEL_fan5= "fb_fan2" +WARNHI_fan5= "19800" +WARNLO_fan5= "600" +CRITHI_fan5= "19800" +CRITLO_fan5= "600" +MINVALUE_fan5 = "0" +MAXVALUE_fan5 = "20775" +PWM_TARGET_fan5 = 5 diff --git a/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon/obmc/hwmon/iio-hwmon-battery.conf b/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon/obmc/hwmon/iio-hwmon-battery.conf new file mode 100644 index 000000000..4ae5a24eb --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon/obmc/hwmon/iio-hwmon-battery.conf @@ -0,0 +1,15 @@ +LABEL_in1 = "p3v_bat_adc" +CRITLO_in1 = "2690" +CRITHI_in1 = "3480" +WARNHI_in1 = "3480" +WARNLO_in1 = "2690" +MINVALUE_in1 = "0" +MAXVALUE_in1 = "4" + +# The battery read is controlled by GPIO18 +GPIOCHIP_in1=0 +GPIO_in1=18 +GAIN_in1 = "3.14" + +# Sleep 24hrs per poll. Number is in microseconds. +INTERVAL=86400000000 diff --git a/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon_%.bbappend b/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon_%.bbappend new file mode 100644 index 000000000..c779b85e0 --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-hwmon_%.bbappend @@ -0,0 +1,35 @@ +FILESEXTRAPATHS_prepend_gbs := "${THISDIR}/${PN}:" + +SRC_URI_append_gbs = " file://0001-lev-add-poweron-monitor-feature.patch \ + file://0002-lev-add-sensors-slow-readings.patch \ + " + +GBS_NAMES = " \ + i2c@82000/sbtsi@4c \ + i2c@85000/i2c-switch@71/i2c@0/max31725@54 \ + i2c@85000/i2c-switch@71/i2c@1/max31725@55 \ + i2c@85000/i2c-switch@71/i2c@2/max31725@5d \ + i2c@88000/adm1272@10 \ + i2c@89000/i2c-switch@71/i2c@0/vrm@60 \ + i2c@89000/i2c-switch@71/i2c@1/vrm@61 \ + i2c@89000/i2c-switch@71/i2c@2/vrm@63 \ + i2c@89000/i2c-switch@71/i2c@3/vrm@45 \ + i2c@8c000/max34451@4e \ + i2c@8c000/vrm@5d \ + i2c@8c000/vrm@5e \ + " +GBS_ITEMSFMT = "ahb/apb/{0}.conf" + +GBS_ITEMS += "${@compose_list(d, 'GBS_ITEMSFMT', 'GBS_NAMES')}" +GBS_ITEMS_append_gbs += " iio-hwmon-battery.conf" + +ENVS = "obmc/hwmon/{0}" +SYSTEMD_ENVIRONMENT_FILE_${PN}_append_gbs = " ${@compose_list(d, 'ENVS', 'GBS_ITEMS')}" + +# Fan sensors +FITEMS = "pwm-fan-controller@103000.conf" +FENVS = "obmc/hwmon/ahb/apb/{0}" +SYSTEMD_ENVIRONMENT_FILE_${PN}_append_gbs = " ${@compose_list(d, 'FENVS', 'FITEMS')}" + + +EXTRA_OECONF_append_gbs = " --enable-update-functional-on-fail" diff --git a/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-nvme/nvme_config.json b/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-nvme/nvme_config.json new file mode 100644 index 000000000..306e74e2a --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-nvme/nvme_config.json @@ -0,0 +1,174 @@ +{ + "config": [ + { + "NVMeDriveIndex": 0, + "NVMeDriveBusID": 47, + "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": 499, + "NVMeDrivePwrGoodPin": 467 + }, + { + "NVMeDriveIndex": 1, + "NVMeDriveBusID": 46, + "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": 498, + "NVMeDrivePwrGoodPin": 466 + }, + { + "NVMeDriveIndex": 2, + "NVMeDriveBusID": 45, + "NVMeDriveFaultLEDGroupPath": "/xyz/openbmc_project/led/groups/led_u2_2_fault", + "NVMeDriveLocateLEDGroupPath": "/xyz/openbmc_project/led/groups/led_u2_2_locate", + "NVMeDriveLocateLEDControllerBusName": "xyz.openbmc_project.LED.Controller.led_u2_2_locate", + "NVMeDriveLocateLEDControllerPath": "/xyz/openbmc_project/led/physical/led_u2_2_locate", + "NVMeDrivePresentPin": 497, + "NVMeDrivePwrGoodPin": 465 + }, + { + "NVMeDriveIndex": 3, + "NVMeDriveBusID": 44, + "NVMeDriveFaultLEDGroupPath": "/xyz/openbmc_project/led/groups/led_u2_3_fault", + "NVMeDriveLocateLEDGroupPath": "/xyz/openbmc_project/led/groups/led_u2_3_locate", + "NVMeDriveLocateLEDControllerBusName": "xyz.openbmc_project.LED.Controller.led_u2_3_locate", + "NVMeDriveLocateLEDControllerPath": "/xyz/openbmc_project/led/physical/led_u2_3_locate", + "NVMeDrivePresentPin": 496, + "NVMeDrivePwrGoodPin": 464 + }, + { + "NVMeDriveIndex": 4, + "NVMeDriveBusID": 39, + "NVMeDriveFaultLEDGroupPath": "/xyz/openbmc_project/led/groups/led_u2_4_fault", + "NVMeDriveLocateLEDGroupPath": "/xyz/openbmc_project/led/groups/led_u2_4_locate", + "NVMeDriveLocateLEDControllerBusName": "xyz.openbmc_project.LED.Controller.led_u2_4_locate", + "NVMeDriveLocateLEDControllerPath": "/xyz/openbmc_project/led/physical/led_u2_4_locate", + "NVMeDrivePresentPin": 503, + "NVMeDrivePwrGoodPin": 471 + }, + { + "NVMeDriveIndex": 5, + "NVMeDriveBusID": 38, + "NVMeDriveFaultLEDGroupPath": "/xyz/openbmc_project/led/groups/led_u2_5_fault", + "NVMeDriveLocateLEDGroupPath": "/xyz/openbmc_project/led/groups/led_u2_5_locate", + "NVMeDriveLocateLEDControllerBusName": "xyz.openbmc_project.LED.Controller.led_u2_5_locate", + "NVMeDriveLocateLEDControllerPath": "/xyz/openbmc_project/led/physical/led_u2_5_locate", + "NVMeDrivePresentPin": 502, + "NVMeDrivePwrGoodPin": 470 + }, + { + "NVMeDriveIndex": 6, + "NVMeDriveBusID": 37, + "NVMeDriveFaultLEDGroupPath": "/xyz/openbmc_project/led/groups/led_u2_6_fault", + "NVMeDriveLocateLEDGroupPath": "/xyz/openbmc_project/led/groups/led_u2_6_locate", + "NVMeDriveLocateLEDControllerBusName": "xyz.openbmc_project.LED.Controller.led_u2_6_locate", + "NVMeDriveLocateLEDControllerPath": "/xyz/openbmc_project/led/physical/led_u2_6_locate", + "NVMeDrivePresentPin": 501, + "NVMeDrivePwrGoodPin": 469 + }, + { + "NVMeDriveIndex": 7, + "NVMeDriveBusID": 36, + "NVMeDriveFaultLEDGroupPath": "/xyz/openbmc_project/led/groups/led_u2_7_fault", + "NVMeDriveLocateLEDGroupPath": "/xyz/openbmc_project/led/groups/led_u2_7_locate", + "NVMeDriveLocateLEDControllerBusName": "xyz.openbmc_project.LED.Controller.led_u2_7_locate", + "NVMeDriveLocateLEDControllerPath": "/xyz/openbmc_project/led/physical/led_u2_7_locate", + "NVMeDrivePresentPin": 500, + "NVMeDrivePwrGoodPin": 468 + }, + { + "NVMeDriveIndex": 8, + "NVMeDriveBusID": 31, + "NVMeDriveFaultLEDGroupPath": "/xyz/openbmc_project/led/groups/led_u2_8_fault", + "NVMeDriveLocateLEDGroupPath": "/xyz/openbmc_project/led/groups/led_u2_8_locate", + "NVMeDriveLocateLEDControllerBusName": "xyz.openbmc_project.LED.Controller.led_u2_8_locate", + "NVMeDriveLocateLEDControllerPath": "/xyz/openbmc_project/led/physical/led_u2_8_locate", + "NVMeDrivePresentPin": 507, + "NVMeDrivePwrGoodPin": 475 + }, + { + "NVMeDriveIndex": 9, + "NVMeDriveBusID": 30, + "NVMeDriveFaultLEDGroupPath": "/xyz/openbmc_project/led/groups/led_u2_9_fault", + "NVMeDriveLocateLEDGroupPath": "/xyz/openbmc_project/led/groups/led_u2_9_locate", + "NVMeDriveLocateLEDControllerBusName": "xyz.openbmc_project.LED.Controller.led_u2_9_locate", + "NVMeDriveLocateLEDControllerPath": "/xyz/openbmc_project/led/physical/led_u2_9_locate", + "NVMeDrivePresentPin": 506, + "NVMeDrivePwrGoodPin": 474 + }, + { + "NVMeDriveIndex": 10, + "NVMeDriveBusID": 29, + "NVMeDriveFaultLEDGroupPath": "/xyz/openbmc_project/led/groups/led_u2_10_fault", + "NVMeDriveLocateLEDGroupPath": "/xyz/openbmc_project/led/groups/led_u2_10_locate", + "NVMeDriveLocateLEDControllerBusName": "xyz.openbmc_project.LED.Controller.led_u2_10_locate", + "NVMeDriveLocateLEDControllerPath": "/xyz/openbmc_project/led/physical/led_u2_10_locate", + "NVMeDrivePresentPin": 505, + "NVMeDrivePwrGoodPin": 473 + }, + { + "NVMeDriveIndex": 11, + "NVMeDriveBusID": 28, + "NVMeDriveFaultLEDGroupPath": "/xyz/openbmc_project/led/groups/led_u2_11_fault", + "NVMeDriveLocateLEDGroupPath": "/xyz/openbmc_project/led/groups/led_u2_11_locate", + "NVMeDriveLocateLEDControllerBusName": "xyz.openbmc_project.LED.Controller.led_u2_11_locate", + "NVMeDriveLocateLEDControllerPath": "/xyz/openbmc_project/led/physical/led_u2_11_locate", + "NVMeDrivePresentPin": 504, + "NVMeDrivePwrGoodPin": 472 + }, + { + "NVMeDriveIndex": 12, + "NVMeDriveBusID": 27, + "NVMeDriveFaultLEDGroupPath": "/xyz/openbmc_project/led/groups/led_u2_12_fault", + "NVMeDriveLocateLEDGroupPath": "/xyz/openbmc_project/led/groups/led_u2_12_locate", + "NVMeDriveLocateLEDControllerBusName": "xyz.openbmc_project.LED.Controller.led_u2_12_locate", + "NVMeDriveLocateLEDControllerPath": "/xyz/openbmc_project/led/physical/led_u2_12_locate", + "NVMeDrivePresentPin": 511, + "NVMeDrivePwrGoodPin": 479 + }, + { + "NVMeDriveIndex": 13, + "NVMeDriveBusID": 26, + "NVMeDriveFaultLEDGroupPath": "/xyz/openbmc_project/led/groups/led_u2_13_fault", + "NVMeDriveLocateLEDGroupPath": "/xyz/openbmc_project/led/groups/led_u2_13_locate", + "NVMeDriveLocateLEDControllerBusName": "xyz.openbmc_project.LED.Controller.led_u2_13_locate", + "NVMeDriveLocateLEDControllerPath": "/xyz/openbmc_project/led/physical/led_u2_13_locate", + "NVMeDrivePresentPin": 510, + "NVMeDrivePwrGoodPin": 478 + }, + { + "NVMeDriveIndex": 14, + "NVMeDriveBusID": 25, + "NVMeDriveFaultLEDGroupPath": "/xyz/openbmc_project/led/groups/led_u2_14_fault", + "NVMeDriveLocateLEDGroupPath": "/xyz/openbmc_project/led/groups/led_u2_14_locate", + "NVMeDriveLocateLEDControllerBusName": "xyz.openbmc_project.LED.Controller.led_u2_14_locate", + "NVMeDriveLocateLEDControllerPath": "/xyz/openbmc_project/led/physical/led_u2_14_locate", + "NVMeDrivePresentPin": 509, + "NVMeDrivePwrGoodPin": 477 + }, + { + "NVMeDriveIndex": 15, + "NVMeDriveBusID": 24, + "NVMeDriveFaultLEDGroupPath": "/xyz/openbmc_project/led/groups/led_u2_15_fault", + "NVMeDriveLocateLEDGroupPath": "/xyz/openbmc_project/led/groups/led_u2_15_locate", + "NVMeDriveLocateLEDControllerBusName": "xyz.openbmc_project.LED.Controller.led_u2_15_locate", + "NVMeDriveLocateLEDControllerPath": "/xyz/openbmc_project/led/physical/led_u2_15_locate", + "NVMeDrivePresentPin": 508, + "NVMeDrivePwrGoodPin": 476 + } + ], + "threshold": [ + { + "criticalHigh": 77, + "criticalLow": 0, + "warningHigh": 77, + "warningLow": 0, + "maxValue": 127, + "minValue": -128 + } + ] +}
\ No newline at end of file diff --git a/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-nvme/nvme_json_rewrite.sh b/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-nvme/nvme_json_rewrite.sh new file mode 100644 index 000000000..91dcb5cb3 --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-nvme/nvme_json_rewrite.sh @@ -0,0 +1,214 @@ +#!/bin/bash + +TARGET_FILE_NAME="/etc/nvme/nvme_config.json" + +export_gpio() { + if [ ! -d "/sys/class/gpio/gpio$1" ]; then + echo $1 >/sys/class/gpio/export + fi +} + +# Get NVMeDrivePresentPins +# 1-0024 + +# Get NVMeDrivePwrGoodPins +# 1-0021 + +if [ -d "/sys/bus/i2c/drivers/pca953x/1-0024" ]; then + presentPinBase="$(cat /sys/bus/i2c/drivers/pca953x/1-0024/gpio/gpiochip*/base)" + for i in {0..15}; + do + let presentPinBase[$i]=presentPinBase+$i + export_gpio ${presentPinBase[$i]} + done +else + echo "Can't find present gpio expander (addr: 0x24) !!" +fi + +if [ -d "/sys/bus/i2c/drivers/pca953x/1-0021" ]; then + PwrGoodPinBase="$(cat /sys/bus/i2c/drivers/pca953x/1-0021/gpio/gpiochip*/base)" + for i in {0..15}; + do + let PwrGoodPinBase[$i]=PwrGoodPinBase+$i + export_gpio ${PwrGoodPinBase[$i]} + done +else + echo "Can't find powergood gpio expander (addr: 0x21) !!" +fi + +cat > $TARGET_FILE_NAME << EOF1 +{ + "config": [ + { + "NVMeDriveIndex": 0, + "NVMeDriveBusID": 47, + "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": ${presentPinBase[3]}, + "NVMeDrivePwrGoodPin": ${PwrGoodPinBase[3]} + }, + { + "NVMeDriveIndex": 1, + "NVMeDriveBusID": 46, + "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": ${presentPinBase[2]}, + "NVMeDrivePwrGoodPin": ${PwrGoodPinBase[2]} + }, + { + "NVMeDriveIndex": 2, + "NVMeDriveBusID": 45, + "NVMeDriveFaultLEDGroupPath": "/xyz/openbmc_project/led/groups/led_u2_2_fault", + "NVMeDriveLocateLEDGroupPath": "/xyz/openbmc_project/led/groups/led_u2_2_locate", + "NVMeDriveLocateLEDControllerBusName": "xyz.openbmc_project.LED.Controller.led_u2_2_locate", + "NVMeDriveLocateLEDControllerPath": "/xyz/openbmc_project/led/physical/led_u2_2_locate", + "NVMeDrivePresentPin": ${presentPinBase[1]}, + "NVMeDrivePwrGoodPin": ${PwrGoodPinBase[1]} + }, + { + "NVMeDriveIndex": 3, + "NVMeDriveBusID": 44, + "NVMeDriveFaultLEDGroupPath": "/xyz/openbmc_project/led/groups/led_u2_3_fault", + "NVMeDriveLocateLEDGroupPath": "/xyz/openbmc_project/led/groups/led_u2_3_locate", + "NVMeDriveLocateLEDControllerBusName": "xyz.openbmc_project.LED.Controller.led_u2_3_locate", + "NVMeDriveLocateLEDControllerPath": "/xyz/openbmc_project/led/physical/led_u2_3_locate", + "NVMeDrivePresentPin": ${presentPinBase[0]}, + "NVMeDrivePwrGoodPin": ${PwrGoodPinBase[0]} + }, + { + "NVMeDriveIndex": 4, + "NVMeDriveBusID": 39, + "NVMeDriveFaultLEDGroupPath": "/xyz/openbmc_project/led/groups/led_u2_4_fault", + "NVMeDriveLocateLEDGroupPath": "/xyz/openbmc_project/led/groups/led_u2_4_locate", + "NVMeDriveLocateLEDControllerBusName": "xyz.openbmc_project.LED.Controller.led_u2_4_locate", + "NVMeDriveLocateLEDControllerPath": "/xyz/openbmc_project/led/physical/led_u2_4_locate", + "NVMeDrivePresentPin": ${presentPinBase[7]}, + "NVMeDrivePwrGoodPin": ${PwrGoodPinBase[7]} + }, + { + "NVMeDriveIndex": 5, + "NVMeDriveBusID": 38, + "NVMeDriveFaultLEDGroupPath": "/xyz/openbmc_project/led/groups/led_u2_5_fault", + "NVMeDriveLocateLEDGroupPath": "/xyz/openbmc_project/led/groups/led_u2_5_locate", + "NVMeDriveLocateLEDControllerBusName": "xyz.openbmc_project.LED.Controller.led_u2_5_locate", + "NVMeDriveLocateLEDControllerPath": "/xyz/openbmc_project/led/physical/led_u2_5_locate", + "NVMeDrivePresentPin": ${presentPinBase[6]}, + "NVMeDrivePwrGoodPin": ${PwrGoodPinBase[6]} + }, + { + "NVMeDriveIndex": 6, + "NVMeDriveBusID": 37, + "NVMeDriveFaultLEDGroupPath": "/xyz/openbmc_project/led/groups/led_u2_6_fault", + "NVMeDriveLocateLEDGroupPath": "/xyz/openbmc_project/led/groups/led_u2_6_locate", + "NVMeDriveLocateLEDControllerBusName": "xyz.openbmc_project.LED.Controller.led_u2_6_locate", + "NVMeDriveLocateLEDControllerPath": "/xyz/openbmc_project/led/physical/led_u2_6_locate", + "NVMeDrivePresentPin": ${presentPinBase[5]}, + "NVMeDrivePwrGoodPin": ${PwrGoodPinBase[5]} + }, + { + "NVMeDriveIndex": 7, + "NVMeDriveBusID": 36, + "NVMeDriveFaultLEDGroupPath": "/xyz/openbmc_project/led/groups/led_u2_7_fault", + "NVMeDriveLocateLEDGroupPath": "/xyz/openbmc_project/led/groups/led_u2_7_locate", + "NVMeDriveLocateLEDControllerBusName": "xyz.openbmc_project.LED.Controller.led_u2_7_locate", + "NVMeDriveLocateLEDControllerPath": "/xyz/openbmc_project/led/physical/led_u2_7_locate", + "NVMeDrivePresentPin": ${presentPinBase[4]}, + "NVMeDrivePwrGoodPin": ${PwrGoodPinBase[4]} + }, + { + "NVMeDriveIndex": 8, + "NVMeDriveBusID": 31, + "NVMeDriveFaultLEDGroupPath": "/xyz/openbmc_project/led/groups/led_u2_8_fault", + "NVMeDriveLocateLEDGroupPath": "/xyz/openbmc_project/led/groups/led_u2_8_locate", + "NVMeDriveLocateLEDControllerBusName": "xyz.openbmc_project.LED.Controller.led_u2_8_locate", + "NVMeDriveLocateLEDControllerPath": "/xyz/openbmc_project/led/physical/led_u2_8_locate", + "NVMeDrivePresentPin": ${presentPinBase[11]}, + "NVMeDrivePwrGoodPin": ${PwrGoodPinBase[11]} + }, + { + "NVMeDriveIndex": 9, + "NVMeDriveBusID": 30, + "NVMeDriveFaultLEDGroupPath": "/xyz/openbmc_project/led/groups/led_u2_9_fault", + "NVMeDriveLocateLEDGroupPath": "/xyz/openbmc_project/led/groups/led_u2_9_locate", + "NVMeDriveLocateLEDControllerBusName": "xyz.openbmc_project.LED.Controller.led_u2_9_locate", + "NVMeDriveLocateLEDControllerPath": "/xyz/openbmc_project/led/physical/led_u2_9_locate", + "NVMeDrivePresentPin": ${presentPinBase[10]}, + "NVMeDrivePwrGoodPin": ${PwrGoodPinBase[10]} + }, + { + "NVMeDriveIndex": 10, + "NVMeDriveBusID": 29, + "NVMeDriveFaultLEDGroupPath": "/xyz/openbmc_project/led/groups/led_u2_10_fault", + "NVMeDriveLocateLEDGroupPath": "/xyz/openbmc_project/led/groups/led_u2_10_locate", + "NVMeDriveLocateLEDControllerBusName": "xyz.openbmc_project.LED.Controller.led_u2_10_locate", + "NVMeDriveLocateLEDControllerPath": "/xyz/openbmc_project/led/physical/led_u2_10_locate", + "NVMeDrivePresentPin": ${presentPinBase[9]}, + "NVMeDrivePwrGoodPin": ${PwrGoodPinBase[9]} + }, + { + "NVMeDriveIndex": 11, + "NVMeDriveBusID": 28, + "NVMeDriveFaultLEDGroupPath": "/xyz/openbmc_project/led/groups/led_u2_11_fault", + "NVMeDriveLocateLEDGroupPath": "/xyz/openbmc_project/led/groups/led_u2_11_locate", + "NVMeDriveLocateLEDControllerBusName": "xyz.openbmc_project.LED.Controller.led_u2_11_locate", + "NVMeDriveLocateLEDControllerPath": "/xyz/openbmc_project/led/physical/led_u2_11_locate", + "NVMeDrivePresentPin": ${presentPinBase[8]}, + "NVMeDrivePwrGoodPin": ${PwrGoodPinBase[8]} + }, + { + "NVMeDriveIndex": 12, + "NVMeDriveBusID": 27, + "NVMeDriveFaultLEDGroupPath": "/xyz/openbmc_project/led/groups/led_u2_12_fault", + "NVMeDriveLocateLEDGroupPath": "/xyz/openbmc_project/led/groups/led_u2_12_locate", + "NVMeDriveLocateLEDControllerBusName": "xyz.openbmc_project.LED.Controller.led_u2_12_locate", + "NVMeDriveLocateLEDControllerPath": "/xyz/openbmc_project/led/physical/led_u2_12_locate", + "NVMeDrivePresentPin": ${presentPinBase[15]}, + "NVMeDrivePwrGoodPin": ${PwrGoodPinBase[15]} + }, + { + "NVMeDriveIndex": 13, + "NVMeDriveBusID": 26, + "NVMeDriveFaultLEDGroupPath": "/xyz/openbmc_project/led/groups/led_u2_13_fault", + "NVMeDriveLocateLEDGroupPath": "/xyz/openbmc_project/led/groups/led_u2_13_locate", + "NVMeDriveLocateLEDControllerBusName": "xyz.openbmc_project.LED.Controller.led_u2_13_locate", + "NVMeDriveLocateLEDControllerPath": "/xyz/openbmc_project/led/physical/led_u2_13_locate", + "NVMeDrivePresentPin": ${presentPinBase[14]}, + "NVMeDrivePwrGoodPin": ${PwrGoodPinBase[14]} + }, + { + "NVMeDriveIndex": 14, + "NVMeDriveBusID": 25, + "NVMeDriveFaultLEDGroupPath": "/xyz/openbmc_project/led/groups/led_u2_14_fault", + "NVMeDriveLocateLEDGroupPath": "/xyz/openbmc_project/led/groups/led_u2_14_locate", + "NVMeDriveLocateLEDControllerBusName": "xyz.openbmc_project.LED.Controller.led_u2_14_locate", + "NVMeDriveLocateLEDControllerPath": "/xyz/openbmc_project/led/physical/led_u2_14_locate", + "NVMeDrivePresentPin": ${presentPinBase[13]}, + "NVMeDrivePwrGoodPin": ${PwrGoodPinBase[13]} + }, + { + "NVMeDriveIndex": 15, + "NVMeDriveBusID": 24, + "NVMeDriveFaultLEDGroupPath": "/xyz/openbmc_project/led/groups/led_u2_15_fault", + "NVMeDriveLocateLEDGroupPath": "/xyz/openbmc_project/led/groups/led_u2_15_locate", + "NVMeDriveLocateLEDControllerBusName": "xyz.openbmc_project.LED.Controller.led_u2_15_locate", + "NVMeDriveLocateLEDControllerPath": "/xyz/openbmc_project/led/physical/led_u2_15_locate", + "NVMeDrivePresentPin": ${presentPinBase[12]}, + "NVMeDrivePwrGoodPin": ${PwrGoodPinBase[12]} + } + ], + "threshold": [ + { + "criticalHigh": 77, + "criticalLow": 0, + "warningHigh": 77, + "warningLow": 0, + "maxValue": 127, + "minValue": -128 + } + ] +} +EOF1 diff --git a/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-nvme/xyz.openbmc_project.nvme.manager.service.replace b/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-nvme/xyz.openbmc_project.nvme.manager.service.replace new file mode 100644 index 000000000..1238b4df3 --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-nvme/xyz.openbmc_project.nvme.manager.service.replace @@ -0,0 +1,19 @@ +[Unit] +Description=NVMe management +Wants=xyz.openbmc_project.LED.GroupManager.service xyz.openbmc_project.Inventory.Manager.service +After=xyz.openbmc_project.LED.GroupManager.service xyz.openbmc_project.Inventory.Manager.service +Wants=mapper-wait@-xyz-openbmc_project-control-nvme.service +After=mapper-wait@-xyz-openbmc_project-control-nvme.service + +[Service] +ExecStartPre=/usr/bin/nvme_json_rewrite.sh +ExecStart=/usr/bin/nvme_main +Type=dbus +BusName=xyz.openbmc_project.nvme.manager +SyslogIdentifier=phosphor-nvme +Restart=always +RestartSec=3 +StartLimitInterval=0 + +[Install] +WantedBy=multi-user.target
\ No newline at end of file diff --git a/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-nvme_%.bbappend b/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-nvme_%.bbappend new file mode 100644 index 000000000..c3db11dad --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/sensors/phosphor-nvme_%.bbappend @@ -0,0 +1,17 @@ +FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" +SRC_URI_append_gbs = " file://nvme_config.json" +SRC_URI_append_gbs = " file://nvme_json_rewrite.sh" +SRC_URI_append_gbs = " file://xyz.openbmc_project.nvme.manager.service.replace" + +RDEPENDS_${PN} += "bash" + +do_install_append_gbs() { + install -d ${D}/${sysconfdir}/nvme/ + install -m 0644 ${WORKDIR}/nvme_config.json ${D}/${sysconfdir}/nvme/ + + install -d ${D}${bindir} + install -m 0755 ${WORKDIR}/nvme_json_rewrite.sh ${D}${bindir}/ + + install -d ${D}${systemd_system_unitdir} + install -m 0644 ${WORKDIR}/xyz.openbmc_project.nvme.manager.service.replace ${D}${systemd_system_unitdir}/xyz.openbmc_project.nvme.manager.service +} diff --git a/meta-quanta/meta-gbs/recipes-phosphor/settings/phosphor-settings-manager/restrictionmode-default-whitelist.override.yml b/meta-quanta/meta-gbs/recipes-phosphor/settings/phosphor-settings-manager/restrictionmode-default-whitelist.override.yml new file mode 100644 index 000000000..b0de5dd1a --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/settings/phosphor-settings-manager/restrictionmode-default-whitelist.override.yml @@ -0,0 +1,6 @@ +--- +/xyz/openbmc_project/control/host0/restriction_mode: + - Interface: xyz.openbmc_project.Control.Security.RestrictionMode + Properties: + RestrictionMode: + Default: RestrictionMode::Modes::Whitelist diff --git a/meta-quanta/meta-gbs/recipes-phosphor/settings/phosphor-settings-manager/time-default.override.yml b/meta-quanta/meta-gbs/recipes-phosphor/settings/phosphor-settings-manager/time-default.override.yml new file mode 100644 index 000000000..0096eeb5c --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/settings/phosphor-settings-manager/time-default.override.yml @@ -0,0 +1,6 @@ +--- +/xyz/openbmc_project/time/sync_method: + - Interface: xyz.openbmc_project.Time.Synchronization + Properties: + TimeSyncMethod: + Default: Synchronization::Method::Manual diff --git a/meta-quanta/meta-gbs/recipes-phosphor/settings/phosphor-settings-manager_%.bbappend b/meta-quanta/meta-gbs/recipes-phosphor/settings/phosphor-settings-manager_%.bbappend new file mode 100644 index 000000000..7e2056844 --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/settings/phosphor-settings-manager_%.bbappend @@ -0,0 +1,3 @@ +FILESEXTRAPATHS_append_gbs := ":${THISDIR}/${PN}" +SRC_URI_append_gbs = " file://time-default.override.yml" +SRC_URI_append_gbs = " file://restrictionmode-default-whitelist.override.yml" diff --git a/meta-quanta/meta-gbs/recipes-phosphor/watchdog/phosphor-watchdog/0001-Customize-phosphor-watchdog-for-Intel-platforms.patch b/meta-quanta/meta-gbs/recipes-phosphor/watchdog/phosphor-watchdog/0001-Customize-phosphor-watchdog-for-Intel-platforms.patch new file mode 100644 index 000000000..22670d3fc --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/watchdog/phosphor-watchdog/0001-Customize-phosphor-watchdog-for-Intel-platforms.patch @@ -0,0 +1,313 @@ +From ac0c216ac2c273c620579fd1308c8c225e0cca36 Mon Sep 17 00:00:00 2001 +From: James Feist <james.feist@linux.intel.com> +Date: Mon, 17 Jun 2019 12:00:58 -0700 +Subject: [PATCH] Customize phosphor-watchdog for Intel platforms + +This patch adds various changes to phosphor-watchdog that are +required for compatibility with Intel platforms. + + 1. Add Redfish messages for watchdog timeout and pre-interrupt + 2. Use dbus properties for power control insted of service files + 3. Use host status to enable/disable watchdog + 4. Set preTimeoutInterruptOccurFlag + +Signed-off-by: James Feist <james.feist@linux.intel.com> +Signed-off-by: Ren Yu <yux.ren@intel.com> +Signed-off-by: Yong Li <yong.b.li@linux.intel.com> +Signed-off-by: Jason M. Bills <jason.m.bills@linux.intel.com> +--- + watchdog.cpp | 193 ++++++++++++++++++++++++++++++++++++++++++++++++--- + watchdog.hpp | 23 +++++- + 2 files changed, 206 insertions(+), 10 deletions(-) + +diff --git a/watchdog.cpp b/watchdog.cpp +index 57e9050..3b5356f 100644 +--- a/watchdog.cpp ++++ b/watchdog.cpp +@@ -1,11 +1,14 @@ + #include "watchdog.hpp" + ++#include <systemd/sd-journal.h> ++ + #include <algorithm> + #include <chrono> + #include <phosphor-logging/elog.hpp> + #include <phosphor-logging/log.hpp> + #include <sdbusplus/exception.hpp> + #include <xyz/openbmc_project/Common/error.hpp> ++#include <xyz/openbmc_project/State/Host/server.hpp> + + namespace phosphor + { +@@ -18,10 +21,69 @@ using namespace phosphor::logging; + using sdbusplus::exception::SdBusError; + using sdbusplus::xyz::openbmc_project::Common::Error::InternalFailure; + +-// systemd service to kick start a target. +-constexpr auto SYSTEMD_SERVICE = "org.freedesktop.systemd1"; +-constexpr auto SYSTEMD_ROOT = "/org/freedesktop/systemd1"; +-constexpr auto SYSTEMD_INTERFACE = "org.freedesktop.systemd1.Manager"; ++const static constexpr char* currentHostState = "CurrentHostState"; ++const static constexpr char* hostStatusOff = ++ "xyz.openbmc_project.State.Host.HostState.Off"; ++ ++const static constexpr char* actionDescription = " due to Watchdog timeout"; ++const static constexpr char* hardResetDescription = "Hard Reset - System reset"; ++const static constexpr char* powerOffDescription = ++ "Power Down - System power down"; ++const static constexpr char* powerCycleDescription = ++ "Power Cycle - System power cycle"; ++const static constexpr char* timerExpiredDescription = "Timer expired"; ++ ++const static constexpr char* preInterruptActionNone = ++ "xyz.openbmc_project.State.Watchdog.PreTimeoutInterruptAction.None"; ++ ++const static constexpr char* preInterruptDescriptionSMI = "SMI"; ++const static constexpr char* preInterruptDescriptionNMI = "NMI"; ++const static constexpr char* preInterruptDescriptionMI = "Messaging Interrupt"; ++ ++const static constexpr char* reservedDescription = "Reserved"; ++ ++const static constexpr char* timerUseDescriptionBIOSFRB2 = "BIOS FRB2"; ++const static constexpr char* timerUseDescriptionBIOSPOST = "BIOS/POST"; ++const static constexpr char* timerUseDescriptionOSLoad = "OSLoad"; ++const static constexpr char* timerUseDescriptionSMSOS = "SMS/OS"; ++const static constexpr char* timerUseDescriptionOEM = "OEM"; ++ ++namespace restart ++{ ++static constexpr const char* busName = ++ "xyz.openbmc_project.Control.Host.RestartCause"; ++static constexpr const char* path = ++ "/xyz/openbmc_project/control/host0/restart_cause"; ++static constexpr const char* interface = ++ "xyz.openbmc_project.Control.Host.RestartCause"; ++static constexpr const char* property = "RequestedRestartCause"; ++} // namespace restart ++ ++// chassis state manager service ++namespace chassis ++{ ++static constexpr const char* busName = "xyz.openbmc_project.State.Chassis"; ++static constexpr const char* path = "/xyz/openbmc_project/state/chassis0"; ++static constexpr const char* interface = "xyz.openbmc_project.State.Chassis"; ++static constexpr const char* request = "RequestedPowerTransition"; ++} // namespace chassis ++ ++void Watchdog::powerStateChangedHandler( ++ const std::map<std::string, std::variant<std::string>>& props) ++{ ++ const auto iter = props.find(currentHostState); ++ if (iter != props.end()) ++ { ++ const std::string* powerState = std::get_if<std::string>(&iter->second); ++ if (powerState && (*powerState == hostStatusOff)) ++ { ++ if (timerEnabled()) ++ { ++ enabled(false); ++ } ++ } ++ } ++} + + void Watchdog::resetTimeRemaining(bool enableWatchdog) + { +@@ -107,13 +169,102 @@ uint64_t Watchdog::interval(uint64_t value) + // Optional callback function on timer expiration + void Watchdog::timeOutHandler() + { ++ PreTimeoutInterruptAction preTimeoutInterruptAction = preTimeoutInterrupt(); ++ std::string preInterruptActionMessageArgs{}; ++ + Action action = expireAction(); ++ std::string actionMessageArgs{}; ++ ++ expiredTimerUse(currentTimerUse()); ++ ++ TimerUse timeUser = expiredTimerUse(); ++ std::string timeUserMessage{}; ++ + if (!this->enabled()) + { + action = fallback->action; + } + +- expiredTimerUse(currentTimerUse()); ++ switch (timeUser) ++ { ++ case Watchdog::TimerUse::BIOSFRB2: ++ timeUserMessage = timerUseDescriptionBIOSFRB2; ++ break; ++ case Watchdog::TimerUse::BIOSPOST: ++ timeUserMessage = timerUseDescriptionBIOSPOST; ++ break; ++ case Watchdog::TimerUse::OSLoad: ++ timeUserMessage = timerUseDescriptionOSLoad; ++ break; ++ case Watchdog::TimerUse::SMSOS: ++ timeUserMessage = timerUseDescriptionSMSOS; ++ break; ++ case Watchdog::TimerUse::OEM: ++ timeUserMessage = timerUseDescriptionOEM; ++ break; ++ default: ++ timeUserMessage = reservedDescription; ++ break; ++ } ++ ++ switch (action) ++ { ++ case Watchdog::Action::HardReset: ++ actionMessageArgs = std::string(hardResetDescription) + ++ std::string(actionDescription); ++ break; ++ case Watchdog::Action::PowerOff: ++ actionMessageArgs = std::string(powerOffDescription) + ++ std::string(actionDescription); ++ break; ++ case Watchdog::Action::PowerCycle: ++ actionMessageArgs = std::string(powerCycleDescription) + ++ std::string(actionDescription); ++ break; ++ case Watchdog::Action::None: ++ actionMessageArgs = timerExpiredDescription; ++ break; ++ default: ++ actionMessageArgs = reservedDescription; ++ break; ++ } ++ ++ // Log into redfish event log ++ sd_journal_send("MESSAGE=IPMIWatchdog: Timed out ACTION=%s", ++ convertForMessage(action).c_str(), "PRIORITY=%i", LOG_INFO, ++ "REDFISH_MESSAGE_ID=%s", "OpenBMC.0.1.IPMIWatchdog", ++ "REDFISH_MESSAGE_ARGS=%s. timer use: %s", ++ actionMessageArgs.c_str(), timeUserMessage.c_str(), NULL); ++ ++ switch (preTimeoutInterruptAction) ++ { ++ case Watchdog::PreTimeoutInterruptAction::SMI: ++ preInterruptActionMessageArgs = preInterruptDescriptionSMI; ++ break; ++ case Watchdog::PreTimeoutInterruptAction::NMI: ++ preInterruptActionMessageArgs = preInterruptDescriptionNMI; ++ break; ++ case Watchdog::PreTimeoutInterruptAction::MI: ++ preInterruptActionMessageArgs = preInterruptDescriptionMI; ++ break; ++ default: ++ preInterruptActionMessageArgs = reservedDescription; ++ break; ++ } ++ ++ if (preInterruptActionNone != convertForMessage(preTimeoutInterruptAction)) ++ { ++ preTimeoutInterruptOccurFlag(true); ++ ++ sd_journal_send("MESSAGE=IPMIWatchdog: Pre Timed out Interrupt=%s", ++ convertForMessage(preTimeoutInterruptAction).c_str(), ++ "PRIORITY=%i", LOG_INFO, "REDFISH_MESSAGE_ID=%s", ++ "OpenBMC.0.1.IPMIWatchdog", ++ "REDFISH_MESSAGE_ARGS=Timer interrupt - %s due to " ++ "Watchdog timeout. timer use: %s", ++ preInterruptActionMessageArgs.c_str(), ++ timeUserMessage.c_str(), NULL); ++ } + + auto target = actionTargetMap.find(action); + if (target == actionTargetMap.end()) +@@ -133,10 +284,11 @@ void Watchdog::timeOutHandler() + + try + { +- auto method = bus.new_method_call(SYSTEMD_SERVICE, SYSTEMD_ROOT, +- SYSTEMD_INTERFACE, "StartUnit"); +- method.append(target->second); +- method.append("replace"); ++ auto method = ++ bus.new_method_call(chassis::busName, chassis::path, ++ "org.freedesktop.DBus.Properties", "Set"); ++ method.append(chassis::interface, chassis::request, ++ std::variant<std::string>(target->second)); + + bus.call_noreply(method); + } +@@ -147,6 +299,29 @@ void Watchdog::timeOutHandler() + entry("ERROR=%s", e.what())); + commit<InternalFailure>(); + } ++ ++ // set restart cause for watchdog HardReset & PowerCycle actions ++ if ((action == Watchdog::Action::HardReset) || ++ (action == Watchdog::Action::PowerCycle)) ++ { ++ try ++ { ++ auto method = bus.new_method_call( ++ restart::busName, restart::path, ++ "org.freedesktop.DBus.Properties", "Set"); ++ method.append( ++ restart::interface, restart::property, ++ std::variant<std::string>("xyz.openbmc_project.State.Host." ++ "RestartCause.WatchdogTimer")); ++ bus.call(method); ++ } ++ catch (sdbusplus::exception_t& e) ++ { ++ log<level::ERR>("Failed to set HostRestartCause property", ++ entry("ERROR=%s", e.what())); ++ commit<InternalFailure>(); ++ } ++ } + } + + tryFallbackOrDisable(); +diff --git a/watchdog.hpp b/watchdog.hpp +index 7de9bb3..b004b7a 100644 +--- a/watchdog.hpp ++++ b/watchdog.hpp +@@ -68,7 +68,18 @@ class Watchdog : public WatchdogInherits + WatchdogInherits(bus, objPath), + bus(bus), actionTargetMap(std::move(actionTargetMap)), + fallback(std::move(fallback)), minInterval(minInterval), +- timer(event, std::bind(&Watchdog::timeOutHandler, this)) ++ timer(event, std::bind(&Watchdog::timeOutHandler, this)), ++ powerStateChangedSignal( ++ bus, ++ sdbusplus::bus::match::rules::propertiesChanged( ++ "/xyz/openbmc_project/state/host0", ++ "xyz.openbmc_project.State.Host"), ++ [this](sdbusplus::message::message& msg) { ++ std::string objectName; ++ std::map<std::string, std::variant<std::string>> props; ++ msg.read(objectName, props); ++ powerStateChangedHandler(props); ++ }) + { + // We set the watchdog interval with the default value. + interval(interval()); +@@ -77,6 +88,12 @@ class Watchdog : public WatchdogInherits + tryFallbackOrDisable(); + } + ++ /** @brief Disable watchdog when power status change meet ++ * the specific requirement ++ */ ++ void powerStateChangedHandler( ++ const std::map<std::string, std::variant<std::string>>& props); ++ + /** @brief Resets the TimeRemaining to the configured Interval + * Optionally enables the watchdog. + * +@@ -165,6 +182,10 @@ class Watchdog : public WatchdogInherits + /** @brief Contained timer object */ + sdeventplus::utility::Timer<sdeventplus::ClockId::Monotonic> timer; + ++ /** @brief Optional Callback handler when power status change meet ++ * the specific requirement */ ++ sdbusplus::bus::match_t powerStateChangedSignal; ++ + /** @brief Optional Callback handler on timer expirartion */ + void timeOutHandler(); + diff --git a/meta-quanta/meta-gbs/recipes-phosphor/watchdog/phosphor-watchdog/phosphor-watchdog.service b/meta-quanta/meta-gbs/recipes-phosphor/watchdog/phosphor-watchdog/phosphor-watchdog.service new file mode 100644 index 000000000..5ef1a4179 --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/watchdog/phosphor-watchdog/phosphor-watchdog.service @@ -0,0 +1,16 @@ +[Unit] +Description=Phosphor Watchdog + +[Service] +ExecStart=/usr/bin/env phosphor-watchdog --continue --service=xyz.openbmc_project.Watchdog \ + --path=/xyz/openbmc_project/watchdog/host0 \ + --action_target=xyz.openbmc_project.State.Watchdog.Action.HardReset=xyz.openbmc_project.State.Chassis.Transition.Reset \ + --action_target=xyz.openbmc_project.State.Watchdog.Action.PowerOff=xyz.openbmc_project.State.Chassis.Transition.Off \ + --action_target=xyz.openbmc_project.State.Watchdog.Action.PowerCycle=xyz.openbmc_project.State.Chassis.Transition.PowerCycle + +SyslogIdentifier=phosphor-watchdog +BusName =xyz.openbmc_project.Watchdog +Type=dbus + +[Install] +WantedBy=basic.target diff --git a/meta-quanta/meta-gbs/recipes-phosphor/watchdog/phosphor-watchdog_%.bbappend b/meta-quanta/meta-gbs/recipes-phosphor/watchdog/phosphor-watchdog_%.bbappend new file mode 100644 index 000000000..9c491ecfc --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/watchdog/phosphor-watchdog_%.bbappend @@ -0,0 +1,7 @@ +FILESEXTRAPATHS_prepend_gbs := "${THISDIR}/${PN}:" + +SRC_URI_append_gbs = " file://0001-Customize-phosphor-watchdog-for-Intel-platforms.patch" + +# Remove the override to keep service running after DC cycle +SYSTEMD_OVERRIDE_${PN}_remove_gbs = "poweron.conf:phosphor-watchdog@poweron.service.d/poweron.conf" +SYSTEMD_SERVICE_${PN}_gbs = "phosphor-watchdog.service" |