From 6c6645bf473e5e984d7f7669ac1ea9e99c6ef2f1 Mon Sep 17 00:00:00 2001 From: Andrei Emeltchenko Date: Fri, 15 Oct 2021 14:41:37 +0300 Subject: [PATCH] edac: tests: Add more coverage tests Add more test for better coverage of some static functions. Signed-off-by: Andrei Emeltchenko --- tests/subsys/edac/ibecc_cov/CMakeLists.txt | 10 ++ tests/subsys/edac/ibecc_cov/prj.conf | 2 + tests/subsys/edac/ibecc_cov/src/ibecc.c | 124 +++++++++++++++++++++ tests/subsys/edac/ibecc_cov/testcase.yaml | 11 ++ 4 files changed, 147 insertions(+) create mode 100644 tests/subsys/edac/ibecc_cov/CMakeLists.txt create mode 100644 tests/subsys/edac/ibecc_cov/prj.conf create mode 100644 tests/subsys/edac/ibecc_cov/src/ibecc.c create mode 100644 tests/subsys/edac/ibecc_cov/testcase.yaml diff --git a/tests/subsys/edac/ibecc_cov/CMakeLists.txt b/tests/subsys/edac/ibecc_cov/CMakeLists.txt new file mode 100644 index 00000000000..a293438387a --- /dev/null +++ b/tests/subsys/edac/ibecc_cov/CMakeLists.txt @@ -0,0 +1,10 @@ +#SPDX-License-Identifier: Apache-2.0 + +cmake_minimum_required(VERSION 3.20.0) +find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE}) +project(test_ibecc_cov) + +target_include_directories(app PRIVATE ${ZEPHYR_BASE}/drivers/edac) + +FILE(GLOB app_sources src/*.c) +target_sources(app PRIVATE ${app_sources}) diff --git a/tests/subsys/edac/ibecc_cov/prj.conf b/tests/subsys/edac/ibecc_cov/prj.conf new file mode 100644 index 00000000000..9707ccfa2df --- /dev/null +++ b/tests/subsys/edac/ibecc_cov/prj.conf @@ -0,0 +1,2 @@ +CONFIG_ZTEST=y +CONFIG_LOG=y diff --git a/tests/subsys/edac/ibecc_cov/src/ibecc.c b/tests/subsys/edac/ibecc_cov/src/ibecc.c new file mode 100644 index 00000000000..1c81f6b88a3 --- /dev/null +++ b/tests/subsys/edac/ibecc_cov/src/ibecc.c @@ -0,0 +1,124 @@ +/* + * Copyright (c) 2021 Intel Corporation + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include + +#include +#include + +#define CONFIG_EDAC_LOG_LEVEL LOG_LEVEL_DBG + +static uint8_t mock_sys_in8(io_port_t port) +{ + TC_PRINT("Simulate sys_in8()\n"); + + /* Needed for NMI handling simulation */ + if (port == NMI_STS_CNT_REG) { + return NMI_STS_SRC_SERR; + } + + return 0; +} + +static void mock_sys_out8(uint8_t data, io_port_t port) +{ + TC_PRINT("Simulate sys_out8()\n"); +} + +static uint64_t mock_sys_read64(uint64_t addr) +{ + TC_PRINT("Simulate sys_read64()\n"); + + return 0; +} + +static void mock_sys_write64(uint64_t data, uint64_t reg) +{ + TC_PRINT("Simulate sys_write64()\n"); +} + +static void mock_conf_write(pcie_bdf_t bdf, unsigned int reg, uint32_t data) +{ + TC_PRINT("Simulate pcie_conf_write() NOP\n"); +} + +static uint32_t mock_conf_read(pcie_bdf_t bdf, unsigned int reg) +{ + TC_PRINT("Simulate pcie_conf_read() zero return\n"); + +#if defined(EMULATE_SKU) + if (bdf == PCI_HOST_BRIDGE && reg == PCIE_CONF_ID) { + TC_PRINT("Simulate PCI device, SKU 0x%x\n", EMULATE_SKU); + + return EMULATE_SKU; + } +#endif /* EMULATE_SKU */ + +#if defined(IBECC_ENABLED) + if (bdf == PCI_HOST_BRIDGE && reg == CAPID0_C_REG) { + TC_PRINT("Simulate IBECC enabled\n"); + + return CAPID0_C_IBECC_ENABLED; + } +#endif /* IBECC_ENABLED */ + + return 0; +} + +/* Redefine PCIE access */ +#define pcie_conf_read(bdf, reg) mock_conf_read(bdf, reg) +#define pcie_conf_write(bdf, reg, val) mock_conf_write(bdf, reg, val) + +/* Redefine sys_in function */ +#define sys_in8(port) mock_sys_in8(port) +#define sys_out8(data, port) mock_sys_out8(data, port) +#define sys_read64(addr) mock_sys_read64(addr) +#define sys_write64(data, addr) mock_sys_write64(data, addr) + +/* Include source code to test some static functions */ +#include "edac_ibecc.c" + +static void test_static_functions(void) +{ + const struct device *dev = DEVICE_DT_GET(DEVICE_NODE); + struct ibecc_error error_data; + int ret; + + TC_PRINT("Start testing static functions\n"); + + zassert_not_null(dev, "Device not found"); + + /* Test failed PCIE probe */ + ret = edac_ibecc_init(dev); + zassert_equal(ret, -ENODEV, ""); + + /* Test pasring zero errlog case */ + parse_ecclog(dev, 0, &error_data); + + /* Test errsts clear not set case */ + ibecc_errsts_clear(PCI_HOST_BRIDGE); + + /* Test errcmd clear case */ + ibecc_errcmd_setup(PCI_HOST_BRIDGE, false); +} + +static void test_trigger_nmi_handler(void) +{ + bool ret; + + ret = z_x86_do_kernel_nmi(NULL); + zassert_true(ret, "Test NMI handling"); +} + +void test_main(void) +{ + ztest_test_suite(ibecc_cov, + ztest_unit_test(test_static_functions), + ztest_unit_test(test_trigger_nmi_handler) + ); + ztest_run_test_suite(ibecc_cov); +} diff --git a/tests/subsys/edac/ibecc_cov/testcase.yaml b/tests/subsys/edac/ibecc_cov/testcase.yaml new file mode 100644 index 00000000000..c3504a43280 --- /dev/null +++ b/tests/subsys/edac/ibecc_cov/testcase.yaml @@ -0,0 +1,11 @@ +common: + arch_allow: x86 + platform_allow: ehl_crb + tags: ibecc ibecc_cov +tests: + edac.ibecc.coverage: + extra_args: EXTRA_CFLAGS=-DEMULATE_SKU=0 + edac.ibecc.coverage_sku: + extra_args: EXTRA_CFLAGS=-DEMULATE_SKU=0x45148086 + edac.ibecc.coverage_sku_en: + extra_args: EXTRA_CPPFLAGS=-DEMULATE_SKU=0x45148086 EXTRA_CFLAGS=-DIBECC_ENABLED=1