blob: 019e979e740ffc1781dd9ca059cb556d8dd277d0 [file] [edit]
// SPDX-License-Identifier: Apache-2.0
// SPDX-FileCopyrightText: Copyright OpenBMC Authors
#include "fpga/fpga-tables.h"
#include <gtest/gtest.h>
extern "C" const struct nsm_fpga_part nsm_fpga_part_pdb;
TEST(fpgaRulesPdb, partHoldsOneRulePerRail)
{
EXPECT_EQ(nsm_fpga_part_pdb.rule_count, 6u);
EXPECT_EQ(nsm_fpga_part_pdb.group_count, 0u);
}
TEST(fpgaRulesPdb, railPowerGoodIsOneStatusWordTransaction)
{
const auto *p0 = nsm_fpga_map_p0();
const auto *rail =
nsm_fpga_find_rule(p0, "HGX_Chassis_0_PDB_Rail_5_Power_Good");
ASSERT_NE(rail, nullptr);
EXPECT_EQ(rail->kind, NSM_FPGA_RULE_STATE);
EXPECT_STREQ(rail->group, "PDB");
ASSERT_EQ(rail->command_count, 1u);
EXPECT_EQ(rail->commands[0].op, NSM_FPGA_OP_I2C_XFER);
EXPECT_EQ(rail->commands[0].station, 2);
EXPECT_EQ(rail->commands[0].u.xfer.dev_addr, 0x5a);
EXPECT_EQ(rail->commands[0].u.xfer.write_count, 1);
EXPECT_EQ(rail->commands[0].u.xfer.write[0], 0x79);
EXPECT_EQ(rail->commands[0].u.xfer.read_count, 2);
EXPECT_EQ(rail->commands[0].capture, NSM_FPGA_BUF_NONE);
/* bit 11 clear is power good, anything else is a critical fault */
ASSERT_EQ(rail->state_count, 2u);
EXPECT_EQ(rail->states[0].mask, 0x800u);
EXPECT_EQ(rail->states[0].value, 0u);
EXPECT_EQ(rail->states[0].state, NSM_FPGA_STATE_ENABLED);
EXPECT_EQ(rail->states[1].mask, 0u);
EXPECT_EQ(rail->states[1].state, NSM_FPGA_STATE_FAULT);
EXPECT_EQ(rail->states[1].health, NSM_FPGA_HEALTH_CRITICAL);
EXPECT_TRUE(nsm_fpga_rule_valid(p0, rail));
const auto *standby =
nsm_fpga_find_rule(p0, "HGX_Chassis_0_PDB_Rail_0_Power_Good");
ASSERT_NE(standby, nullptr);
EXPECT_EQ(standby->commands[0].u.xfer.dev_addr, 0x55);
}