1# compare_vpd
2
3## Description
4
5Compares a VPD (Vital Product Data) keyword value to an expected value.
6
7VPD is information that describes a hardware component. VPD is typically read
8from an EEPROM on a Field-Replaceable Unit (FRU). For this reason, VPD is also
9called "FRU data".
10
11The phosphor-regulators application obtains VPD keyword values from D-Bus. Other
12BMC applications and drivers are responsible for reading VPD from hardware
13components and publishing it on D-Bus.
14
15The following VPD keywords are currently supported:
16
17- CCIN
18- Manufacturer
19- Model
20- PartNumber
21- HW
22
23This action can be used in an [if](if.md) condition to execute actions based on
24a VPD keyword value. For example, you could set the output voltage only for
25regulators with a specific Model number.
26
27### Unavailable keyword values
28
29A keyword value may be unavailable if:
30
31- The hardware component does not support the keyword.
32- An error occurred while attempting to read VPD from the hardware component.
33- The BMC cannot access the VPD due to the system hardware design, such as not
34  being connected to the necessary I2C bus.
35
36If the keyword value is unavailable, it will be treated as having an "empty"
37value:
38
39- An empty string ("") if the "value" property was specified.
40- An empty array ([]) if the "byte_values" property was specified.
41
42If the expected value is not "empty", the compare_vpd action will return false
43since the values will not match.
44
45## Properties
46
47| Name        |      Required       | Type             | Description                                                                                                                                                                                                                                                             |
48| :---------- | :-----------------: | :--------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
49| fru         |         yes         | string           | Field-Replaceable Unit (FRU) that contains the VPD. Specify the relative D-Bus inventory path of the FRU. Full inventory paths begin with the root "/xyz/openbmc_project/inventory". Specify the relative path below the root, such as "system/chassis/disk_backplane". |
50| keyword     |         yes         | string           | VPD keyword. Specify one of the following: "CCIN", "Manufacturer", "Model", "PartNumber", "HW".                                                                                                                                                                         |
51| value       | see [notes](#notes) | string           | Expected value.                                                                                                                                                                                                                                                         |
52| byte_values | see [notes](#notes) | array of strings | Zero or more expected byte values expressed in hexadecimal. Each value must be prefixed with 0x and surrounded by double quotes.                                                                                                                                        |
53
54### Notes
55
56- You must specify either "value" or "byte_values".
57
58## Return Value
59
60Returns true if the keyword value equals the expected value, otherwise returns
61false.
62
63## Examples
64
65```json
66{
67  "comments": ["Check if disk backplane has CCIN value 2D35"],
68  "compare_vpd": {
69    "fru": "system/chassis/disk_backplane",
70    "keyword": "CCIN",
71    "value": "2D35"
72  }
73}
74```
75
76```json
77{
78  "comments": ["Check if disk backplane has CCIN value 0x32, 0x44, 0x33, 0x35"],
79  "compare_vpd": {
80    "fru": "system/chassis/disk_backplane",
81    "keyword": "CCIN",
82    "byte_values": ["0x32", "0x44", "0x33", "0x35"]
83  }
84}
85```
86