forked from mirrors/linux
		
	fpga: tests: use KUnit devices instead of platform devices
KUnit now provides helper functions to create fake devices, so use them instead of relying on platform devices. Other changes: remove an unnecessary white space in the fpga region suite. Reviewed-by: Russ Weight <russ.weight@linux.dev> Signed-off-by: Marco Pagani <marpagan@redhat.com> Acked-by: Xu Yilun <yilun.xu@intel.com> Link: https://lore.kernel.org/r/20240329174849.248243-1-marpagan@redhat.com Signed-off-by: Xu Yilun <yilun.xu@linux.intel.com>
This commit is contained in:
		
							parent
							
								
									f6c86fdf37
								
							
						
					
					
						commit
						4d2bc3f7de
					
				
					 3 changed files with 44 additions and 46 deletions
				
			
		|  | @ -7,8 +7,8 @@ | ||||||
|  * Author: Marco Pagani <marpagan@redhat.com> |  * Author: Marco Pagani <marpagan@redhat.com> | ||||||
|  */ |  */ | ||||||
| 
 | 
 | ||||||
|  | #include <kunit/device.h> | ||||||
| #include <kunit/test.h> | #include <kunit/test.h> | ||||||
| #include <linux/device.h> |  | ||||||
| #include <linux/fpga/fpga-bridge.h> | #include <linux/fpga/fpga-bridge.h> | ||||||
| #include <linux/module.h> | #include <linux/module.h> | ||||||
| #include <linux/types.h> | #include <linux/types.h> | ||||||
|  | @ -19,7 +19,7 @@ struct bridge_stats { | ||||||
| 
 | 
 | ||||||
| struct bridge_ctx { | struct bridge_ctx { | ||||||
| 	struct fpga_bridge *bridge; | 	struct fpga_bridge *bridge; | ||||||
| 	struct platform_device *pdev; | 	struct device *dev; | ||||||
| 	struct bridge_stats stats; | 	struct bridge_stats stats; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  | @ -43,30 +43,31 @@ static const struct fpga_bridge_ops fake_bridge_ops = { | ||||||
| /**
 | /**
 | ||||||
|  * register_test_bridge() - Register a fake FPGA bridge for testing. |  * register_test_bridge() - Register a fake FPGA bridge for testing. | ||||||
|  * @test: KUnit test context object. |  * @test: KUnit test context object. | ||||||
|  |  * @dev_name: name of the kunit device to be registered | ||||||
|  * |  * | ||||||
|  * Return: Context of the newly registered FPGA bridge. |  * Return: Context of the newly registered FPGA bridge. | ||||||
|  */ |  */ | ||||||
| static struct bridge_ctx *register_test_bridge(struct kunit *test) | static struct bridge_ctx *register_test_bridge(struct kunit *test, const char *dev_name) | ||||||
| { | { | ||||||
| 	struct bridge_ctx *ctx; | 	struct bridge_ctx *ctx; | ||||||
| 
 | 
 | ||||||
| 	ctx = kunit_kzalloc(test, sizeof(*ctx), GFP_KERNEL); | 	ctx = kunit_kzalloc(test, sizeof(*ctx), GFP_KERNEL); | ||||||
| 	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx); | 	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx); | ||||||
| 
 | 
 | ||||||
| 	ctx->pdev = platform_device_register_simple("bridge_pdev", PLATFORM_DEVID_AUTO, NULL, 0); | 	ctx->dev = kunit_device_register(test, dev_name); | ||||||
| 	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx->pdev); | 	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx->dev); | ||||||
| 
 | 
 | ||||||
| 	ctx->bridge = fpga_bridge_register(&ctx->pdev->dev, "Fake FPGA bridge", &fake_bridge_ops, | 	ctx->bridge = fpga_bridge_register(ctx->dev, "Fake FPGA bridge", &fake_bridge_ops, | ||||||
| 					   &ctx->stats); | 					   &ctx->stats); | ||||||
| 	KUNIT_ASSERT_FALSE(test, IS_ERR_OR_NULL(ctx->bridge)); | 	KUNIT_ASSERT_FALSE(test, IS_ERR_OR_NULL(ctx->bridge)); | ||||||
| 
 | 
 | ||||||
| 	return ctx; | 	return ctx; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void unregister_test_bridge(struct bridge_ctx *ctx) | static void unregister_test_bridge(struct kunit *test, struct bridge_ctx *ctx) | ||||||
| { | { | ||||||
| 	fpga_bridge_unregister(ctx->bridge); | 	fpga_bridge_unregister(ctx->bridge); | ||||||
| 	platform_device_unregister(ctx->pdev); | 	kunit_device_unregister(test, ctx->dev); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void fpga_bridge_test_get(struct kunit *test) | static void fpga_bridge_test_get(struct kunit *test) | ||||||
|  | @ -74,10 +75,10 @@ static void fpga_bridge_test_get(struct kunit *test) | ||||||
| 	struct bridge_ctx *ctx = test->priv; | 	struct bridge_ctx *ctx = test->priv; | ||||||
| 	struct fpga_bridge *bridge; | 	struct fpga_bridge *bridge; | ||||||
| 
 | 
 | ||||||
| 	bridge = fpga_bridge_get(&ctx->pdev->dev, NULL); | 	bridge = fpga_bridge_get(ctx->dev, NULL); | ||||||
| 	KUNIT_EXPECT_PTR_EQ(test, bridge, ctx->bridge); | 	KUNIT_EXPECT_PTR_EQ(test, bridge, ctx->bridge); | ||||||
| 
 | 
 | ||||||
| 	bridge = fpga_bridge_get(&ctx->pdev->dev, NULL); | 	bridge = fpga_bridge_get(ctx->dev, NULL); | ||||||
| 	KUNIT_EXPECT_EQ(test, PTR_ERR(bridge), -EBUSY); | 	KUNIT_EXPECT_EQ(test, PTR_ERR(bridge), -EBUSY); | ||||||
| 
 | 
 | ||||||
| 	fpga_bridge_put(ctx->bridge); | 	fpga_bridge_put(ctx->bridge); | ||||||
|  | @ -105,19 +106,19 @@ static void fpga_bridge_test_get_put_list(struct kunit *test) | ||||||
| 	int ret; | 	int ret; | ||||||
| 
 | 
 | ||||||
| 	ctx_0 = test->priv; | 	ctx_0 = test->priv; | ||||||
| 	ctx_1 = register_test_bridge(test); | 	ctx_1 = register_test_bridge(test, "fpga-bridge-test-dev-1"); | ||||||
| 
 | 
 | ||||||
| 	INIT_LIST_HEAD(&bridge_list); | 	INIT_LIST_HEAD(&bridge_list); | ||||||
| 
 | 
 | ||||||
| 	/* Get bridge 0 and add it to the list */ | 	/* Get bridge 0 and add it to the list */ | ||||||
| 	ret = fpga_bridge_get_to_list(&ctx_0->pdev->dev, NULL, &bridge_list); | 	ret = fpga_bridge_get_to_list(ctx_0->dev, NULL, &bridge_list); | ||||||
| 	KUNIT_EXPECT_EQ(test, ret, 0); | 	KUNIT_EXPECT_EQ(test, ret, 0); | ||||||
| 
 | 
 | ||||||
| 	KUNIT_EXPECT_PTR_EQ(test, ctx_0->bridge, | 	KUNIT_EXPECT_PTR_EQ(test, ctx_0->bridge, | ||||||
| 			    list_first_entry_or_null(&bridge_list, struct fpga_bridge, node)); | 			    list_first_entry_or_null(&bridge_list, struct fpga_bridge, node)); | ||||||
| 
 | 
 | ||||||
| 	/* Get bridge 1 and add it to the list */ | 	/* Get bridge 1 and add it to the list */ | ||||||
| 	ret = fpga_bridge_get_to_list(&ctx_1->pdev->dev, NULL, &bridge_list); | 	ret = fpga_bridge_get_to_list(ctx_1->dev, NULL, &bridge_list); | ||||||
| 	KUNIT_EXPECT_EQ(test, ret, 0); | 	KUNIT_EXPECT_EQ(test, ret, 0); | ||||||
| 
 | 
 | ||||||
| 	KUNIT_EXPECT_PTR_EQ(test, ctx_1->bridge, | 	KUNIT_EXPECT_PTR_EQ(test, ctx_1->bridge, | ||||||
|  | @ -141,19 +142,19 @@ static void fpga_bridge_test_get_put_list(struct kunit *test) | ||||||
| 
 | 
 | ||||||
| 	KUNIT_EXPECT_TRUE(test, list_empty(&bridge_list)); | 	KUNIT_EXPECT_TRUE(test, list_empty(&bridge_list)); | ||||||
| 
 | 
 | ||||||
| 	unregister_test_bridge(ctx_1); | 	unregister_test_bridge(test, ctx_1); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static int fpga_bridge_test_init(struct kunit *test) | static int fpga_bridge_test_init(struct kunit *test) | ||||||
| { | { | ||||||
| 	test->priv = register_test_bridge(test); | 	test->priv = register_test_bridge(test, "fpga-bridge-test-dev-0"); | ||||||
| 
 | 
 | ||||||
| 	return 0; | 	return 0; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void fpga_bridge_test_exit(struct kunit *test) | static void fpga_bridge_test_exit(struct kunit *test) | ||||||
| { | { | ||||||
| 	unregister_test_bridge(test->priv); | 	unregister_test_bridge(test, test->priv); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static struct kunit_case fpga_bridge_test_cases[] = { | static struct kunit_case fpga_bridge_test_cases[] = { | ||||||
|  |  | ||||||
|  | @ -7,8 +7,8 @@ | ||||||
|  * Author: Marco Pagani <marpagan@redhat.com> |  * Author: Marco Pagani <marpagan@redhat.com> | ||||||
|  */ |  */ | ||||||
| 
 | 
 | ||||||
|  | #include <kunit/device.h> | ||||||
| #include <kunit/test.h> | #include <kunit/test.h> | ||||||
| #include <linux/device.h> |  | ||||||
| #include <linux/fpga/fpga-mgr.h> | #include <linux/fpga/fpga-mgr.h> | ||||||
| #include <linux/module.h> | #include <linux/module.h> | ||||||
| #include <linux/scatterlist.h> | #include <linux/scatterlist.h> | ||||||
|  | @ -40,7 +40,7 @@ struct mgr_stats { | ||||||
| struct mgr_ctx { | struct mgr_ctx { | ||||||
| 	struct fpga_image_info *img_info; | 	struct fpga_image_info *img_info; | ||||||
| 	struct fpga_manager *mgr; | 	struct fpga_manager *mgr; | ||||||
| 	struct platform_device *pdev; | 	struct device *dev; | ||||||
| 	struct mgr_stats stats; | 	struct mgr_stats stats; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  | @ -194,7 +194,7 @@ static void fpga_mgr_test_get(struct kunit *test) | ||||||
| 	struct mgr_ctx *ctx = test->priv; | 	struct mgr_ctx *ctx = test->priv; | ||||||
| 	struct fpga_manager *mgr; | 	struct fpga_manager *mgr; | ||||||
| 
 | 
 | ||||||
| 	mgr = fpga_mgr_get(&ctx->pdev->dev); | 	mgr = fpga_mgr_get(ctx->dev); | ||||||
| 	KUNIT_EXPECT_PTR_EQ(test, mgr, ctx->mgr); | 	KUNIT_EXPECT_PTR_EQ(test, mgr, ctx->mgr); | ||||||
| 
 | 
 | ||||||
| 	fpga_mgr_put(ctx->mgr); | 	fpga_mgr_put(ctx->mgr); | ||||||
|  | @ -284,14 +284,14 @@ static int fpga_mgr_test_init(struct kunit *test) | ||||||
| 	ctx = kunit_kzalloc(test, sizeof(*ctx), GFP_KERNEL); | 	ctx = kunit_kzalloc(test, sizeof(*ctx), GFP_KERNEL); | ||||||
| 	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx); | 	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx); | ||||||
| 
 | 
 | ||||||
| 	ctx->pdev = platform_device_register_simple("mgr_pdev", PLATFORM_DEVID_AUTO, NULL, 0); | 	ctx->dev = kunit_device_register(test, "fpga-manager-test-dev"); | ||||||
| 	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx->pdev); | 	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx->dev); | ||||||
| 
 | 
 | ||||||
| 	ctx->mgr = devm_fpga_mgr_register(&ctx->pdev->dev, "Fake FPGA Manager", &fake_mgr_ops, | 	ctx->mgr = devm_fpga_mgr_register(ctx->dev, "Fake FPGA Manager", &fake_mgr_ops, | ||||||
| 					  &ctx->stats); | 					  &ctx->stats); | ||||||
| 	KUNIT_ASSERT_FALSE(test, IS_ERR_OR_NULL(ctx->mgr)); | 	KUNIT_ASSERT_FALSE(test, IS_ERR_OR_NULL(ctx->mgr)); | ||||||
| 
 | 
 | ||||||
| 	ctx->img_info = fpga_image_info_alloc(&ctx->pdev->dev); | 	ctx->img_info = fpga_image_info_alloc(ctx->dev); | ||||||
| 	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx->img_info); | 	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx->img_info); | ||||||
| 
 | 
 | ||||||
| 	test->priv = ctx; | 	test->priv = ctx; | ||||||
|  | @ -304,7 +304,7 @@ static void fpga_mgr_test_exit(struct kunit *test) | ||||||
| 	struct mgr_ctx *ctx = test->priv; | 	struct mgr_ctx *ctx = test->priv; | ||||||
| 
 | 
 | ||||||
| 	fpga_image_info_free(ctx->img_info); | 	fpga_image_info_free(ctx->img_info); | ||||||
| 	platform_device_unregister(ctx->pdev); | 	kunit_device_unregister(test, ctx->dev); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static struct kunit_case fpga_mgr_test_cases[] = { | static struct kunit_case fpga_mgr_test_cases[] = { | ||||||
|  |  | ||||||
|  | @ -7,12 +7,12 @@ | ||||||
|  * Author: Marco Pagani <marpagan@redhat.com> |  * Author: Marco Pagani <marpagan@redhat.com> | ||||||
|  */ |  */ | ||||||
| 
 | 
 | ||||||
|  | #include <kunit/device.h> | ||||||
| #include <kunit/test.h> | #include <kunit/test.h> | ||||||
| #include <linux/fpga/fpga-bridge.h> | #include <linux/fpga/fpga-bridge.h> | ||||||
| #include <linux/fpga/fpga-mgr.h> | #include <linux/fpga/fpga-mgr.h> | ||||||
| #include <linux/fpga/fpga-region.h> | #include <linux/fpga/fpga-region.h> | ||||||
| #include <linux/module.h> | #include <linux/module.h> | ||||||
| #include <linux/platform_device.h> |  | ||||||
| #include <linux/types.h> | #include <linux/types.h> | ||||||
| 
 | 
 | ||||||
| struct mgr_stats { | struct mgr_stats { | ||||||
|  | @ -26,11 +26,11 @@ struct bridge_stats { | ||||||
| 
 | 
 | ||||||
| struct test_ctx { | struct test_ctx { | ||||||
| 	struct fpga_manager *mgr; | 	struct fpga_manager *mgr; | ||||||
| 	struct platform_device *mgr_pdev; | 	struct device *mgr_dev; | ||||||
| 	struct fpga_bridge *bridge; | 	struct fpga_bridge *bridge; | ||||||
| 	struct platform_device *bridge_pdev; | 	struct device *bridge_dev; | ||||||
| 	struct fpga_region *region; | 	struct fpga_region *region; | ||||||
| 	struct platform_device *region_pdev; | 	struct device *region_dev; | ||||||
| 	struct bridge_stats bridge_stats; | 	struct bridge_stats bridge_stats; | ||||||
| 	struct mgr_stats mgr_stats; | 	struct mgr_stats mgr_stats; | ||||||
| }; | }; | ||||||
|  | @ -91,7 +91,7 @@ static void fpga_region_test_class_find(struct kunit *test) | ||||||
| 	struct test_ctx *ctx = test->priv; | 	struct test_ctx *ctx = test->priv; | ||||||
| 	struct fpga_region *region; | 	struct fpga_region *region; | ||||||
| 
 | 
 | ||||||
| 	region = fpga_region_class_find(NULL, &ctx->region_pdev->dev, fake_region_match); | 	region = fpga_region_class_find(NULL, ctx->region_dev, fake_region_match); | ||||||
| 	KUNIT_EXPECT_PTR_EQ(test, region, ctx->region); | 	KUNIT_EXPECT_PTR_EQ(test, region, ctx->region); | ||||||
| 
 | 
 | ||||||
| 	put_device(®ion->dev); | 	put_device(®ion->dev); | ||||||
|  | @ -108,7 +108,7 @@ static void fpga_region_test_program_fpga(struct kunit *test) | ||||||
| 	char img_buf[4]; | 	char img_buf[4]; | ||||||
| 	int ret; | 	int ret; | ||||||
| 
 | 
 | ||||||
| 	img_info = fpga_image_info_alloc(&ctx->mgr_pdev->dev); | 	img_info = fpga_image_info_alloc(ctx->mgr_dev); | ||||||
| 	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, img_info); | 	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, img_info); | ||||||
| 
 | 
 | ||||||
| 	img_info->buf = img_buf; | 	img_info->buf = img_buf; | ||||||
|  | @ -148,32 +148,30 @@ static int fpga_region_test_init(struct kunit *test) | ||||||
| 	ctx = kunit_kzalloc(test, sizeof(*ctx), GFP_KERNEL); | 	ctx = kunit_kzalloc(test, sizeof(*ctx), GFP_KERNEL); | ||||||
| 	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx); | 	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx); | ||||||
| 
 | 
 | ||||||
| 	ctx->mgr_pdev = platform_device_register_simple("mgr_pdev", PLATFORM_DEVID_AUTO, NULL, 0); | 	ctx->mgr_dev = kunit_device_register(test, "fpga-manager-test-dev"); | ||||||
| 	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx->mgr_pdev); | 	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx->mgr_dev); | ||||||
| 
 | 
 | ||||||
| 	ctx->mgr = devm_fpga_mgr_register(&ctx->mgr_pdev->dev, "Fake FPGA Manager", &fake_mgr_ops, | 	ctx->mgr = devm_fpga_mgr_register(ctx->mgr_dev, "Fake FPGA Manager", | ||||||
| 					  &ctx->mgr_stats); | 					  &fake_mgr_ops, &ctx->mgr_stats); | ||||||
| 	KUNIT_ASSERT_FALSE(test, IS_ERR_OR_NULL(ctx->mgr)); | 	KUNIT_ASSERT_FALSE(test, IS_ERR_OR_NULL(ctx->mgr)); | ||||||
| 
 | 
 | ||||||
| 	ctx->bridge_pdev = platform_device_register_simple("bridge_pdev", PLATFORM_DEVID_AUTO, | 	ctx->bridge_dev = kunit_device_register(test, "fpga-bridge-test-dev"); | ||||||
| 							   NULL, 0); | 	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx->bridge_dev); | ||||||
| 	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx->bridge_pdev); |  | ||||||
| 
 | 
 | ||||||
| 	ctx->bridge = fpga_bridge_register(&ctx->bridge_pdev->dev, "Fake FPGA Bridge", | 	ctx->bridge = fpga_bridge_register(ctx->bridge_dev, "Fake FPGA Bridge", | ||||||
| 					   &fake_bridge_ops, &ctx->bridge_stats); | 					   &fake_bridge_ops, &ctx->bridge_stats); | ||||||
| 	KUNIT_ASSERT_FALSE(test, IS_ERR_OR_NULL(ctx->bridge)); | 	KUNIT_ASSERT_FALSE(test, IS_ERR_OR_NULL(ctx->bridge)); | ||||||
| 
 | 
 | ||||||
| 	ctx->bridge_stats.enable = true; | 	ctx->bridge_stats.enable = true; | ||||||
| 
 | 
 | ||||||
| 	ctx->region_pdev = platform_device_register_simple("region_pdev", PLATFORM_DEVID_AUTO, | 	ctx->region_dev = kunit_device_register(test, "fpga-region-test-dev"); | ||||||
| 							   NULL, 0); | 	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx->region_dev); | ||||||
| 	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx->region_pdev); |  | ||||||
| 
 | 
 | ||||||
| 	region_info.mgr = ctx->mgr; | 	region_info.mgr = ctx->mgr; | ||||||
| 	region_info.priv = ctx->bridge; | 	region_info.priv = ctx->bridge; | ||||||
| 	region_info.get_bridges = fake_region_get_bridges; | 	region_info.get_bridges = fake_region_get_bridges; | ||||||
| 
 | 
 | ||||||
| 	ctx->region = fpga_region_register_full(&ctx->region_pdev->dev, ®ion_info); | 	ctx->region = fpga_region_register_full(ctx->region_dev, ®ion_info); | ||||||
| 	KUNIT_ASSERT_FALSE(test, IS_ERR_OR_NULL(ctx->region)); | 	KUNIT_ASSERT_FALSE(test, IS_ERR_OR_NULL(ctx->region)); | ||||||
| 
 | 
 | ||||||
| 	test->priv = ctx; | 	test->priv = ctx; | ||||||
|  | @ -186,18 +184,17 @@ static void fpga_region_test_exit(struct kunit *test) | ||||||
| 	struct test_ctx *ctx = test->priv; | 	struct test_ctx *ctx = test->priv; | ||||||
| 
 | 
 | ||||||
| 	fpga_region_unregister(ctx->region); | 	fpga_region_unregister(ctx->region); | ||||||
| 	platform_device_unregister(ctx->region_pdev); | 	kunit_device_unregister(test, ctx->region_dev); | ||||||
| 
 | 
 | ||||||
| 	fpga_bridge_unregister(ctx->bridge); | 	fpga_bridge_unregister(ctx->bridge); | ||||||
| 	platform_device_unregister(ctx->bridge_pdev); | 	kunit_device_unregister(test, ctx->bridge_dev); | ||||||
| 
 | 
 | ||||||
| 	platform_device_unregister(ctx->mgr_pdev); | 	kunit_device_unregister(test, ctx->mgr_dev); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static struct kunit_case fpga_region_test_cases[] = { | static struct kunit_case fpga_region_test_cases[] = { | ||||||
| 	KUNIT_CASE(fpga_region_test_class_find), | 	KUNIT_CASE(fpga_region_test_class_find), | ||||||
| 	KUNIT_CASE(fpga_region_test_program_fpga), | 	KUNIT_CASE(fpga_region_test_program_fpga), | ||||||
| 
 |  | ||||||
| 	{} | 	{} | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue
	
	 Marco Pagani
						Marco Pagani