gbmcweb: tlbmc: Add BOARD_INFO_AM3/4 to ProbeV2 fields
Adds support for BOARD_INFO_AM3 and BOARD_INFO_AM4 FRU fields. Mandolin
Beach uses BOARD_INFO_AM3 for POL vendor and BOARD_INFO_AM4 for the
revision ID (PEVT, EVT, etc) so tlbmc ProbeV2 needs to support it.
Tested:
- Successfully built and flashed to MB PTV unit with the following
yusaku probe:
```
"ProbeV2": {
"IpmiFru": [
{
"BOARD_PRODUCT_NAME": "^Mandolin Beach$",
"BOARD_INFO_AM3": "^IFX$",
"BOARD_INFO_AM4": "^PTV$"
},
{
"BOARD_PRODUCT_NAME": "^Mandolin Beach$",
"BOARD_INFO_AM3": "^IFX$",
"BOARD_INFO_AM4": "^PEVT[0-9]*$"
},
{
"BOARD_PRODUCT_NAME": "^Mandolin Beach$",
"BOARD_INFO_AM3": "^IFX$",
"BOARD_INFO_AM4": "^EVT[0-9]*$"
},
{
"BOARD_PRODUCT_NAME": "^Mandolin Beach$",
"BOARD_INFO_AM3": "^IFX$",
"BOARD_INFO_AM4": "^DVT[0-9]*$"
},
{
"BOARD_PRODUCT_NAME": "^Mandolin Beach$",
"BOARD_INFO_AM3": "^IFX$",
"BOARD_INFO_AM4": "^PVT[0-9]*$"
},
{
"BOARD_PRODUCT_NAME": "^Mandolin Beach$",
"BOARD_INFO_AM3": "^IFX$",
"BOARD_INFO_AM4": "^GA[0-9]*$"
}
]
},
```
- Verified that tlbmc is enabled in bmcweb journal
- Verified that sensors exposed through tlbmc are seen in
redfish/tlbmc/AllSensors
Note that the content of this CL was provided by Foxconn, in this gerrit
review:
- 54377: gbmcweb: tlbmc: Add BOARD_INFO_AM3/4 to ProbeV2 fields | https://gbmc-review.git.corp.google.com/c/gbmcweb/+/54377
PiperOrigin-RevId: 818786515
Change-Id: I26938fedfa1fc39b79e9c7d88dd469889e8805cd
diff --git a/tlbmc/configs/entity_config_json_impl.cc b/tlbmc/configs/entity_config_json_impl.cc
index 4c2e164..c997457 100644
--- a/tlbmc/configs/entity_config_json_impl.cc
+++ b/tlbmc/configs/entity_config_json_impl.cc
@@ -447,11 +447,14 @@
const auto* address = GetValueAsUint(ipmi_fru, "ADDRESS");
const auto* part_number = GetValueAsString(ipmi_fru, "BOARD_PART_NUMBER");
const auto* board_info_am2 = GetValueAsString(ipmi_fru, "BOARD_INFO_AM2");
+ const auto* board_info_am3 = GetValueAsString(ipmi_fru, "BOARD_INFO_AM3");
+ const auto* board_info_am4 = GetValueAsString(ipmi_fru, "BOARD_INFO_AM4");
const auto* product_info_am2 =
GetValueAsString(ipmi_fru, "PRODUCT_INFO_AM2");
if (board_product_name == nullptr && product_product_name == nullptr &&
bus == nullptr && address == nullptr && part_number == nullptr &&
- board_info_am2 == nullptr && product_info_am2 == nullptr) {
+ board_info_am2 == nullptr && board_info_am3 == nullptr &&
+ board_info_am4 == nullptr && product_info_am2 == nullptr) {
return absl::InvalidArgumentError(
"Invalid config: IpmiFru field is not a valid probe");
}
@@ -474,6 +477,10 @@
CheckProbeFieldMatch(part_number, fru, "BOARD_PART_NUMBER");
bool board_info_am2_matches_or_null =
CheckProbeFieldMatch(board_info_am2, fru, "BOARD_INFO_AM2");
+ bool board_info_am3_matches_or_null =
+ CheckProbeFieldMatch(board_info_am3, fru, "BOARD_INFO_AM3");
+ bool board_info_am4_matches_or_null =
+ CheckProbeFieldMatch(board_info_am4, fru, "BOARD_INFO_AM4");
bool product_info_am2_matches_or_null =
CheckProbeFieldMatch(product_info_am2, fru, "PRODUCT_INFO_AM2");
@@ -481,6 +488,7 @@
if (!i2c_info_matches_or_null || !board_product_name_matches_or_null ||
!product_product_name_matches_or_null ||
!part_number_matches_or_null || !board_info_am2_matches_or_null ||
+ !board_info_am3_matches_or_null || !board_info_am4_matches_or_null ||
!product_info_am2_matches_or_null) {
continue;
}