1*b104a941SJames Clark // SPDX-License-Identifier: GPL-2.0
2*b104a941SJames Clark
3*b104a941SJames Clark #include <kunit/test.h>
4*b104a941SJames Clark #include <kunit/device.h>
5*b104a941SJames Clark #include <linux/coresight.h>
6*b104a941SJames Clark
7*b104a941SJames Clark #include "coresight-priv.h"
8*b104a941SJames Clark
coresight_test_device(struct device * dev)9*b104a941SJames Clark static struct coresight_device *coresight_test_device(struct device *dev)
10*b104a941SJames Clark {
11*b104a941SJames Clark struct coresight_device *csdev = devm_kcalloc(dev, 1,
12*b104a941SJames Clark sizeof(struct coresight_device),
13*b104a941SJames Clark GFP_KERNEL);
14*b104a941SJames Clark csdev->pdata = devm_kcalloc(dev, 1,
15*b104a941SJames Clark sizeof(struct coresight_platform_data),
16*b104a941SJames Clark GFP_KERNEL);
17*b104a941SJames Clark return csdev;
18*b104a941SJames Clark }
19*b104a941SJames Clark
test_default_sink(struct kunit * test)20*b104a941SJames Clark static void test_default_sink(struct kunit *test)
21*b104a941SJames Clark {
22*b104a941SJames Clark /*
23*b104a941SJames Clark * Source -> ETF -> ETR -> CATU
24*b104a941SJames Clark * ^
25*b104a941SJames Clark * | default
26*b104a941SJames Clark */
27*b104a941SJames Clark struct device *dev = kunit_device_register(test, "coresight_kunit");
28*b104a941SJames Clark struct coresight_device *src = coresight_test_device(dev),
29*b104a941SJames Clark *etf = coresight_test_device(dev),
30*b104a941SJames Clark *etr = coresight_test_device(dev),
31*b104a941SJames Clark *catu = coresight_test_device(dev);
32*b104a941SJames Clark struct coresight_connection conn = {};
33*b104a941SJames Clark
34*b104a941SJames Clark src->type = CORESIGHT_DEV_TYPE_SOURCE;
35*b104a941SJames Clark /*
36*b104a941SJames Clark * Don't use CORESIGHT_DEV_SUBTYPE_SOURCE_PROC, that would always return
37*b104a941SJames Clark * a TRBE sink if one is registered.
38*b104a941SJames Clark */
39*b104a941SJames Clark src->subtype.source_subtype = CORESIGHT_DEV_SUBTYPE_SOURCE_BUS;
40*b104a941SJames Clark etf->type = CORESIGHT_DEV_TYPE_LINKSINK;
41*b104a941SJames Clark etf->subtype.sink_subtype = CORESIGHT_DEV_SUBTYPE_SINK_BUFFER;
42*b104a941SJames Clark etr->type = CORESIGHT_DEV_TYPE_SINK;
43*b104a941SJames Clark etr->subtype.sink_subtype = CORESIGHT_DEV_SUBTYPE_SINK_SYSMEM;
44*b104a941SJames Clark catu->type = CORESIGHT_DEV_TYPE_HELPER;
45*b104a941SJames Clark
46*b104a941SJames Clark conn.src_dev = src;
47*b104a941SJames Clark conn.dest_dev = etf;
48*b104a941SJames Clark coresight_add_out_conn(dev, src->pdata, &conn);
49*b104a941SJames Clark
50*b104a941SJames Clark conn.src_dev = etf;
51*b104a941SJames Clark conn.dest_dev = etr;
52*b104a941SJames Clark coresight_add_out_conn(dev, etf->pdata, &conn);
53*b104a941SJames Clark
54*b104a941SJames Clark conn.src_dev = etr;
55*b104a941SJames Clark conn.dest_dev = catu;
56*b104a941SJames Clark coresight_add_out_conn(dev, etr->pdata, &conn);
57*b104a941SJames Clark
58*b104a941SJames Clark KUNIT_ASSERT_PTR_EQ(test, coresight_find_default_sink(src), etr);
59*b104a941SJames Clark }
60*b104a941SJames Clark
61*b104a941SJames Clark static struct kunit_case coresight_testcases[] = {
62*b104a941SJames Clark KUNIT_CASE(test_default_sink),
63*b104a941SJames Clark {}
64*b104a941SJames Clark };
65*b104a941SJames Clark
66*b104a941SJames Clark static struct kunit_suite coresight_test_suite = {
67*b104a941SJames Clark .name = "coresight_test_suite",
68*b104a941SJames Clark .test_cases = coresight_testcases,
69*b104a941SJames Clark };
70*b104a941SJames Clark
71*b104a941SJames Clark kunit_test_suites(&coresight_test_suite);
72*b104a941SJames Clark MODULE_LICENSE("GPL");
73*b104a941SJames Clark MODULE_AUTHOR("James Clark <james.clark@linaro.org>");
74*b104a941SJames Clark MODULE_DESCRIPTION("Arm CoreSight KUnit tests");
75