blob: 91b99c1a28a47ad4e54e161afda70fae0b1902ba [file] [edit]
// SPDX-License-Identifier: Apache-2.0
// SPDX-FileCopyrightText: Copyright OpenBMC Authors
#include "fpga/fpga-tables.h"
#include <array>
#include <gtest/gtest.h>
extern "C" const struct nsm_fpga_part nsm_fpga_part_sdm;
TEST(fpgaRulesSdm, partHoldsTheRules)
{
EXPECT_EQ(nsm_fpga_part_sdm.rule_count, 3u);
EXPECT_EQ(nsm_fpga_part_sdm.group_count, 0u);
}
TEST(fpgaRulesSdm, chipIdRule)
{
const auto *p0 = nsm_fpga_map_p0();
const auto *chipId = nsm_fpga_find_rule(p0, "HGX_FPGA_0_Chip_Id");
ASSERT_NE(chipId, nullptr);
ASSERT_EQ(chipId->command_count, 9u);
EXPECT_EQ(chipId->commands[0].op, NSM_FPGA_OP_POP);
EXPECT_EQ(chipId->commands[0].station, 37);
EXPECT_EQ(chipId->commands[2].op, NSM_FPGA_OP_WRITE32);
EXPECT_EQ(chipId->commands[2].u.csr.address, 4u);
EXPECT_EQ(chipId->commands[2].u.csr.value, 0x07000012u);
EXPECT_EQ(chipId->commands[4].expect.value, 0x07002000u);
EXPECT_EQ(chipId->commands[6].capture, NSM_FPGA_BUF_ITEM);
EXPECT_EQ(chipId->commands[8].capture, NSM_FPGA_BUF_ITEM);
ASSERT_EQ(chipId->cleanup_count, 1u);
EXPECT_EQ(chipId->cleanup[0].op, NSM_FPGA_OP_POP);
EXPECT_EQ(chipId->kind, NSM_FPGA_RULE_IDENTITY);
EXPECT_TRUE(nsm_fpga_rule_valid(p0, chipId));
}
TEST(fpgaRulesSdm, idcodeRule)
{
const auto *p0 = nsm_fpga_map_p0();
const auto *idcode = nsm_fpga_find_rule(p0, "HGX_FPGA_1_Idcode");
ASSERT_NE(idcode, nullptr);
ASSERT_EQ(idcode->command_count, 7u);
EXPECT_EQ(idcode->commands[0].op, NSM_FPGA_OP_POP);
EXPECT_EQ(idcode->commands[2].u.csr.address, 4u);
EXPECT_EQ(idcode->commands[2].u.csr.value, 0x07000010u);
EXPECT_EQ(idcode->commands[4].expect.value, 0x07001000u);
EXPECT_EQ(idcode->commands[6].capture, NSM_FPGA_BUF_ITEM);
EXPECT_EQ(idcode->kind, NSM_FPGA_RULE_IDENTITY);
EXPECT_TRUE(nsm_fpga_rule_valid(p0, idcode));
size_t count = 0;
const auto *fields = nsm_fpga_rule_identity(idcode, &count);
ASSERT_EQ(count, 1u);
EXPECT_EQ(fields[0].asset, NSM_FPGA_ASSET_MODEL);
EXPECT_EQ(fields[0].length, 4);
const std::array<uint8_t, 4> raw = {0xdd, 0x30, 0x4c, 0x03};
char text[NSM_FPGA_IDENTITY_TEXT_MAX];
ASSERT_TRUE(nsm_fpga_decode_identity(&fields[0], raw.data(), raw.size(),
nullptr, 0, text, sizeof(text)));
EXPECT_STREQ(text, "0x034c30dd");
}