// SPDX-License-Identifier: GPL-2.0 #include #include #include #include "coresight-priv.h" static struct coresight_device *coresight_test_device(struct device *dev) { struct coresight_device *csdev = devm_kcalloc(dev, 1, sizeof(struct coresight_device), GFP_KERNEL); csdev->pdata = devm_kcalloc(dev, 1, sizeof(struct coresight_platform_data), GFP_KERNEL); return csdev; } static void test_default_sink(struct kunit *test) { /* * Source -> ETF -> ETR -> CATU * ^ * | default */ struct device *dev = kunit_device_register(test, "coresight_kunit"); struct coresight_device *src = coresight_test_device(dev), *etf = coresight_test_device(dev), *etr = coresight_test_device(dev), *catu = coresight_test_device(dev); struct coresight_connection conn = {}; src->type = CORESIGHT_DEV_TYPE_SOURCE; /* * Don't use CORESIGHT_DEV_SUBTYPE_SOURCE_PROC, that would always return * a TRBE sink if one is registered. */ src->subtype.source_subtype = CORESIGHT_DEV_SUBTYPE_SOURCE_BUS; etf->type = CORESIGHT_DEV_TYPE_LINKSINK; etf->subtype.sink_subtype = CORESIGHT_DEV_SUBTYPE_SINK_BUFFER; etr->type = CORESIGHT_DEV_TYPE_SINK; etr->subtype.sink_subtype = CORESIGHT_DEV_SUBTYPE_SINK_SYSMEM; catu->type = CORESIGHT_DEV_TYPE_HELPER; conn.src_dev = src; conn.dest_dev = etf; coresight_add_out_conn(dev, src->pdata, &conn); conn.src_dev = etf; conn.dest_dev = etr; coresight_add_out_conn(dev, etf->pdata, &conn); conn.src_dev = etr; conn.dest_dev = catu; coresight_add_out_conn(dev, etr->pdata, &conn); KUNIT_ASSERT_PTR_EQ(test, coresight_find_default_sink(src), etr); } static struct kunit_case coresight_testcases[] = { KUNIT_CASE(test_default_sink), {} }; static struct kunit_suite coresight_test_suite = { .name = "coresight_test_suite", .test_cases = coresight_testcases, }; kunit_test_suites(&coresight_test_suite); MODULE_LICENSE("GPL"); MODULE_AUTHOR("James Clark "); MODULE_DESCRIPTION("Arm CoreSight KUnit tests");