mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-12-04 10:30:32 +00:00
4fef657151
Currently there is only one test and it only works on TPM v2. Update it to work on v1.2 as well, using a new function to pick up the required TPM. Update sandbox to include both a v1.2 and v2 TPM so that this works. Split out the existing test into two pieces, one for init and one for the v2-only report_state feature. Acked-by: Ilias Apalodimas <ilias.apalodimas@linaro.org Signed-off-by: Simon Glass <sjg@chromium.org> Signed-off-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
81 lines
1.7 KiB
C
81 lines
1.7 KiB
C
// SPDX-License-Identifier: GPL-2.0+
|
|
/*
|
|
* Copyright 2022 Google LLC
|
|
* Written by Simon Glass <sjg@chromium.org>
|
|
*/
|
|
|
|
#include <common.h>
|
|
#include <dm.h>
|
|
#include <tpm_api.h>
|
|
#include <dm/test.h>
|
|
#include <test/test.h>
|
|
#include <test/ut.h>
|
|
|
|
/*
|
|
* get_tpm_version() - Get a TPM of the given version
|
|
*
|
|
* @version: Version to get
|
|
* @devp: Returns the TPM device
|
|
* Returns: 0 if OK, -ENODEV if not found
|
|
*/
|
|
static int get_tpm_version(enum tpm_version version, struct udevice **devp)
|
|
{
|
|
struct udevice *dev;
|
|
|
|
/*
|
|
* For now we have to probe each TPM, since the version is set up in
|
|
* of_to_plat(). We could require TPMs to declare their version when
|
|
* probed, to avoid this
|
|
*/
|
|
uclass_foreach_dev_probe(UCLASS_TPM, dev) {
|
|
if (tpm_get_version(dev) == version) {
|
|
*devp = dev;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
return -ENODEV;
|
|
}
|
|
|
|
/* Basic test of initing a TPM */
|
|
static int test_tpm_init(struct unit_test_state *uts, enum tpm_version version)
|
|
{
|
|
struct udevice *dev;
|
|
|
|
/* check probe success */
|
|
ut_assertok(get_tpm_version(version, &dev));
|
|
|
|
ut_assertok(tpm_init(dev));
|
|
|
|
return 0;
|
|
}
|
|
|
|
static int dm_test_tpm(struct unit_test_state *uts)
|
|
{
|
|
ut_assertok(test_tpm_init(uts, TPM_V1));
|
|
ut_assertok(test_tpm_init(uts, TPM_V2));
|
|
|
|
return 0;
|
|
}
|
|
DM_TEST(dm_test_tpm, UT_TESTF_SCAN_FDT);
|
|
|
|
/* Test report_state */
|
|
static int dm_test_tpm_report_state(struct unit_test_state *uts)
|
|
{
|
|
struct udevice *dev;
|
|
char buf[50];
|
|
|
|
/* check probe success */
|
|
ut_assertok(get_tpm_version(TPM_V2, &dev));
|
|
|
|
ut_assert(tpm_report_state(dev, buf, sizeof(buf)));
|
|
ut_asserteq_str("init_done=0", buf);
|
|
|
|
ut_assertok(tpm_auto_start(dev));
|
|
|
|
ut_assert(tpm_report_state(dev, buf, sizeof(buf)));
|
|
ut_asserteq_str("init_done=1", buf);
|
|
|
|
return 0;
|
|
}
|
|
DM_TEST(dm_test_tpm_report_state, UT_TESTF_SCAN_FDT);
|