@@ -3403,8 +3403,148 @@ static struct kunit_suite clk_assigned_rates_suite = {
3403
3403
.init = clk_assigned_rates_test_init ,
3404
3404
};
3405
3405
3406
+ static const struct clk_init_data clk_hw_get_dev_of_node_init_data = {
3407
+ .name = "clk_hw_get_dev_of_node" ,
3408
+ .ops = & empty_clk_ops ,
3409
+ };
3410
+
3411
+ /*
3412
+ * Test that a clk registered with a struct device returns the device from
3413
+ * clk_hw_get_dev() and the node from clk_hw_get_of_node()
3414
+ */
3415
+ static void clk_hw_register_dev_get_dev_returns_dev (struct kunit * test )
3416
+ {
3417
+ struct device * dev ;
3418
+ struct clk_hw * hw ;
3419
+ static const struct of_device_id match_table [] = {
3420
+ { .compatible = "test,clk-hw-get-dev-of-node" },
3421
+ { }
3422
+ };
3423
+
3424
+ KUNIT_ASSERT_EQ (test , 0 , of_overlay_apply_kunit (test , kunit_clk_hw_get_dev_of_node ));
3425
+
3426
+ dev = kunit_of_platform_driver_dev (test , match_table );
3427
+
3428
+ hw = kunit_kzalloc (test , sizeof (* hw ), GFP_KERNEL );
3429
+ KUNIT_ASSERT_NOT_ERR_OR_NULL (test , hw );
3430
+
3431
+ hw -> init = & clk_hw_get_dev_of_node_init_data ;
3432
+ KUNIT_ASSERT_EQ (test , 0 , clk_hw_register_kunit (test , dev , hw ));
3433
+
3434
+ KUNIT_EXPECT_PTR_EQ (test , dev , clk_hw_get_dev (hw ));
3435
+ KUNIT_EXPECT_PTR_EQ (test , dev_of_node (dev ), clk_hw_get_of_node (hw ));
3436
+ }
3437
+
3438
+ /*
3439
+ * Test that a clk registered with a struct device that's not associated with
3440
+ * an OF node returns the device from clk_hw_get_dev() and NULL from
3441
+ * clk_hw_get_of_node()
3442
+ */
3443
+ static void clk_hw_register_dev_no_node_get_dev_returns_dev (struct kunit * test )
3444
+ {
3445
+ struct platform_device * pdev ;
3446
+ struct device * dev ;
3447
+ struct clk_hw * hw ;
3448
+
3449
+ pdev = kunit_platform_device_alloc (test , "clk_hw_register_dev_no_node" , -1 );
3450
+ KUNIT_ASSERT_NOT_NULL (test , pdev );
3451
+ KUNIT_ASSERT_EQ (test , 0 , kunit_platform_device_add (test , pdev ));
3452
+ dev = & pdev -> dev ;
3453
+
3454
+ hw = kunit_kzalloc (test , sizeof (* hw ), GFP_KERNEL );
3455
+ KUNIT_ASSERT_NOT_ERR_OR_NULL (test , hw );
3456
+
3457
+ hw -> init = & clk_hw_get_dev_of_node_init_data ;
3458
+ KUNIT_ASSERT_EQ (test , 0 , clk_hw_register_kunit (test , dev , hw ));
3459
+
3460
+ KUNIT_EXPECT_PTR_EQ (test , dev , clk_hw_get_dev (hw ));
3461
+ KUNIT_EXPECT_PTR_EQ (test , NULL , clk_hw_get_of_node (hw ));
3462
+ }
3463
+
3464
+ /*
3465
+ * Test that a clk registered without a struct device returns NULL from
3466
+ * clk_hw_get_dev()
3467
+ */
3468
+ static void clk_hw_register_NULL_get_dev_of_node_returns_NULL (struct kunit * test )
3469
+ {
3470
+ struct clk_hw * hw ;
3471
+
3472
+ hw = kunit_kzalloc (test , sizeof (* hw ), GFP_KERNEL );
3473
+ KUNIT_ASSERT_NOT_ERR_OR_NULL (test , hw );
3474
+
3475
+ hw -> init = & clk_hw_get_dev_of_node_init_data ;
3476
+
3477
+ KUNIT_ASSERT_EQ (test , 0 , clk_hw_register_kunit (test , NULL , hw ));
3478
+
3479
+ KUNIT_EXPECT_PTR_EQ (test , NULL , clk_hw_get_dev (hw ));
3480
+ KUNIT_EXPECT_PTR_EQ (test , NULL , clk_hw_get_of_node (hw ));
3481
+ }
3482
+
3483
+ /*
3484
+ * Test that a clk registered with an of_node returns the node from
3485
+ * clk_hw_get_of_node() and NULL from clk_hw_get_dev()
3486
+ */
3487
+ static void of_clk_hw_register_node_get_of_node_returns_node (struct kunit * test )
3488
+ {
3489
+ struct device_node * np ;
3490
+ struct clk_hw * hw ;
3491
+
3492
+ hw = kunit_kzalloc (test , sizeof (* hw ), GFP_KERNEL );
3493
+ KUNIT_ASSERT_NOT_ERR_OR_NULL (test , hw );
3494
+
3495
+ KUNIT_ASSERT_EQ (test , 0 , of_overlay_apply_kunit (test , kunit_clk_hw_get_dev_of_node ));
3496
+
3497
+ np = of_find_compatible_node (NULL , NULL , "test,clk-hw-get-dev-of-node" );
3498
+ KUNIT_ASSERT_NOT_ERR_OR_NULL (test , np );
3499
+ of_node_put_kunit (test , np );
3500
+
3501
+ hw -> init = & clk_hw_get_dev_of_node_init_data ;
3502
+ KUNIT_ASSERT_EQ (test , 0 , of_clk_hw_register_kunit (test , np , hw ));
3503
+
3504
+ KUNIT_EXPECT_PTR_EQ (test , NULL , clk_hw_get_dev (hw ));
3505
+ KUNIT_EXPECT_PTR_EQ (test , np , clk_hw_get_of_node (hw ));
3506
+ }
3507
+
3508
+ /*
3509
+ * Test that a clk registered without an of_node returns the node from
3510
+ * clk_hw_get_of_node() and clk_hw_get_dev()
3511
+ */
3512
+ static void of_clk_hw_register_NULL_get_of_node_returns_NULL (struct kunit * test )
3513
+ {
3514
+ struct clk_hw * hw ;
3515
+
3516
+ hw = kunit_kzalloc (test , sizeof (* hw ), GFP_KERNEL );
3517
+ KUNIT_ASSERT_NOT_ERR_OR_NULL (test , hw );
3518
+
3519
+ hw -> init = & clk_hw_get_dev_of_node_init_data ;
3520
+ KUNIT_ASSERT_EQ (test , 0 , of_clk_hw_register_kunit (test , NULL , hw ));
3521
+
3522
+ KUNIT_EXPECT_PTR_EQ (test , NULL , clk_hw_get_dev (hw ));
3523
+ KUNIT_EXPECT_PTR_EQ (test , NULL , clk_hw_get_of_node (hw ));
3524
+ }
3525
+
3526
+ static struct kunit_case clk_hw_get_dev_of_node_test_cases [] = {
3527
+ KUNIT_CASE (clk_hw_register_dev_get_dev_returns_dev ),
3528
+ KUNIT_CASE (clk_hw_register_dev_no_node_get_dev_returns_dev ),
3529
+ KUNIT_CASE (clk_hw_register_NULL_get_dev_of_node_returns_NULL ),
3530
+ KUNIT_CASE (of_clk_hw_register_node_get_of_node_returns_node ),
3531
+ KUNIT_CASE (of_clk_hw_register_NULL_get_of_node_returns_NULL ),
3532
+ {}
3533
+ };
3534
+
3535
+ /*
3536
+ * Test suite to verify clk_hw_get_dev() and clk_hw_get_of_node() when clk
3537
+ * registered with clk_hw_register() and of_clk_hw_register()
3538
+ */
3539
+ static struct kunit_suite clk_hw_get_dev_of_node_test_suite = {
3540
+ .name = "clk_hw_get_dev_of_node_test_suite" ,
3541
+ .test_cases = clk_hw_get_dev_of_node_test_cases ,
3542
+ };
3543
+
3544
+
3406
3545
kunit_test_suites (
3407
3546
& clk_assigned_rates_suite ,
3547
+ & clk_hw_get_dev_of_node_test_suite ,
3408
3548
& clk_leaf_mux_set_rate_parent_test_suite ,
3409
3549
& clk_test_suite ,
3410
3550
& clk_multiple_parents_mux_test_suite ,
0 commit comments