xref: /linux/drivers/hwtracing/coresight/coresight-kunit-tests.c (revision c26f4fbd58375bd6ef74f95eb73d61762ad97c59)
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