@@ -2794,49 +2794,49 @@ static struct kunit_suite clk_register_clk_parent_data_of_suite = {
2794
2794
};
2795
2795
2796
2796
/**
2797
- * struct clk_register_clk_parent_data_device_ctx - Context for clk_parent_data device tests
2798
- * @dev: device of clk under test
2799
- * @hw: clk_hw for clk under test
2797
+ * struct platform_driver_dev_ctx - Context to stash platform device
2798
+ * @dev: device under test
2800
2799
* @pdrv: driver to attach to find @dev
2801
2800
*/
2802
- struct clk_register_clk_parent_data_device_ctx {
2801
+ struct platform_driver_dev_ctx {
2803
2802
struct device * dev ;
2804
- struct clk_hw hw ;
2805
2803
struct platform_driver pdrv ;
2806
2804
};
2807
2805
2808
- static inline struct clk_register_clk_parent_data_device_ctx *
2809
- clk_register_clk_parent_data_driver_to_test_context (struct platform_device * pdev )
2806
+ static inline struct platform_driver_dev_ctx *
2807
+ pdev_to_platform_driver_dev_ctx (struct platform_device * pdev )
2810
2808
{
2811
2809
return container_of (to_platform_driver (pdev -> dev .driver ),
2812
- struct clk_register_clk_parent_data_device_ctx , pdrv );
2810
+ struct platform_driver_dev_ctx , pdrv );
2813
2811
}
2814
2812
2815
- static int clk_register_clk_parent_data_device_probe (struct platform_device * pdev )
2813
+ static int kunit_platform_driver_dev_probe (struct platform_device * pdev )
2816
2814
{
2817
- struct clk_register_clk_parent_data_device_ctx * ctx ;
2815
+ struct platform_driver_dev_ctx * ctx ;
2818
2816
2819
- ctx = clk_register_clk_parent_data_driver_to_test_context (pdev );
2817
+ ctx = pdev_to_platform_driver_dev_ctx (pdev );
2820
2818
ctx -> dev = & pdev -> dev ;
2821
2819
2822
2820
return 0 ;
2823
2821
}
2824
2822
2825
- static void clk_register_clk_parent_data_device_driver (struct kunit * test )
2823
+ static struct device *
2824
+ kunit_of_platform_driver_dev (struct kunit * test , const struct of_device_id * match_table )
2826
2825
{
2827
- struct clk_register_clk_parent_data_device_ctx * ctx = test -> priv ;
2828
- static const struct of_device_id match_table [] = {
2829
- { .compatible = "test,clk-parent-data" },
2830
- { }
2831
- };
2826
+ struct platform_driver_dev_ctx * ctx ;
2832
2827
2833
- ctx -> pdrv .probe = clk_register_clk_parent_data_device_probe ;
2828
+ ctx = kunit_kzalloc (test , sizeof (* ctx ), GFP_KERNEL );
2829
+ KUNIT_ASSERT_NOT_ERR_OR_NULL (test , ctx );
2830
+
2831
+ ctx -> pdrv .probe = kunit_platform_driver_dev_probe ;
2834
2832
ctx -> pdrv .driver .of_match_table = match_table ;
2835
2833
ctx -> pdrv .driver .name = __func__ ;
2836
2834
ctx -> pdrv .driver .owner = THIS_MODULE ;
2837
2835
2838
2836
KUNIT_ASSERT_EQ (test , 0 , kunit_platform_driver_register (test , & ctx -> pdrv ));
2839
2837
KUNIT_ASSERT_NOT_ERR_OR_NULL (test , ctx -> dev );
2838
+
2839
+ return ctx -> dev ;
2840
2840
}
2841
2841
2842
2842
static const struct clk_register_clk_parent_data_test_case
@@ -2909,30 +2909,34 @@ KUNIT_ARRAY_PARAM(clk_register_clk_parent_data_device_test,
2909
2909
*/
2910
2910
static void clk_register_clk_parent_data_device_test (struct kunit * test )
2911
2911
{
2912
- struct clk_register_clk_parent_data_device_ctx * ctx ;
2912
+ struct device * dev ;
2913
+ struct clk_hw * hw ;
2913
2914
const struct clk_register_clk_parent_data_test_case * test_param ;
2914
2915
struct clk_hw * parent_hw ;
2915
2916
struct clk_init_data init = { };
2916
2917
struct clk * expected_parent , * actual_parent ;
2918
+ static const struct of_device_id match_table [] = {
2919
+ { .compatible = "test,clk-parent-data" },
2920
+ { }
2921
+ };
2917
2922
2918
- ctx = kunit_kzalloc (test , sizeof (* ctx ), GFP_KERNEL );
2919
- KUNIT_ASSERT_NOT_ERR_OR_NULL (test , ctx );
2920
- test -> priv = ctx ;
2921
-
2922
- clk_register_clk_parent_data_device_driver (test );
2923
+ dev = kunit_of_platform_driver_dev (test , match_table );
2923
2924
2924
- expected_parent = clk_get_kunit (test , ctx -> dev , "50" );
2925
+ expected_parent = clk_get_kunit (test , dev , "50" );
2925
2926
KUNIT_ASSERT_NOT_ERR_OR_NULL (test , expected_parent );
2926
2927
2928
+ hw = kunit_kzalloc (test , sizeof (* hw ), GFP_KERNEL );
2929
+ KUNIT_ASSERT_NOT_ERR_OR_NULL (test , hw );
2930
+
2927
2931
test_param = test -> param_value ;
2928
2932
init .parent_data = & test_param -> pdata ;
2929
2933
init .num_parents = 1 ;
2930
2934
init .name = "parent_data_device_test_clk" ;
2931
2935
init .ops = & clk_dummy_single_parent_ops ;
2932
- ctx -> hw . init = & init ;
2933
- KUNIT_ASSERT_EQ (test , 0 , clk_hw_register_kunit (test , ctx -> dev , & ctx -> hw ));
2936
+ hw -> init = & init ;
2937
+ KUNIT_ASSERT_EQ (test , 0 , clk_hw_register_kunit (test , dev , hw ));
2934
2938
2935
- parent_hw = clk_hw_get_parent (& ctx -> hw );
2939
+ parent_hw = clk_hw_get_parent (hw );
2936
2940
KUNIT_ASSERT_NOT_ERR_OR_NULL (test , parent_hw );
2937
2941
2938
2942
actual_parent = clk_hw_get_clk_kunit (test , parent_hw , __func__ );
@@ -3016,18 +3020,19 @@ KUNIT_ARRAY_PARAM(clk_register_clk_parent_data_device_hw_test,
3016
3020
*/
3017
3021
static void clk_register_clk_parent_data_device_hw_test (struct kunit * test )
3018
3022
{
3019
- struct clk_register_clk_parent_data_device_ctx * ctx ;
3023
+ struct device * dev ;
3024
+ struct clk_hw * hw ;
3020
3025
const struct clk_register_clk_parent_data_test_case * test_param ;
3021
3026
struct clk_dummy_context * parent ;
3022
3027
struct clk_hw * parent_hw ;
3023
3028
struct clk_parent_data pdata = { };
3024
3029
struct clk_init_data init = { };
3030
+ static const struct of_device_id match_table [] = {
3031
+ { .compatible = "test,clk-parent-data" },
3032
+ { }
3033
+ };
3025
3034
3026
- ctx = kunit_kzalloc (test , sizeof (* ctx ), GFP_KERNEL );
3027
- KUNIT_ASSERT_NOT_ERR_OR_NULL (test , ctx );
3028
- test -> priv = ctx ;
3029
-
3030
- clk_register_clk_parent_data_device_driver (test );
3035
+ dev = kunit_of_platform_driver_dev (test , match_table );
3031
3036
3032
3037
parent = kunit_kzalloc (test , sizeof (* parent ), GFP_KERNEL );
3033
3038
KUNIT_ASSERT_NOT_ERR_OR_NULL (test , parent );
@@ -3036,7 +3041,10 @@ static void clk_register_clk_parent_data_device_hw_test(struct kunit *test)
3036
3041
parent_hw -> init = CLK_HW_INIT_NO_PARENT ("parent-clk" ,
3037
3042
& clk_dummy_rate_ops , 0 );
3038
3043
3039
- KUNIT_ASSERT_EQ (test , 0 , clk_hw_register_kunit (test , ctx -> dev , parent_hw ));
3044
+ KUNIT_ASSERT_EQ (test , 0 , clk_hw_register_kunit (test , dev , parent_hw ));
3045
+
3046
+ hw = kunit_kzalloc (test , sizeof (* hw ), GFP_KERNEL );
3047
+ KUNIT_ASSERT_NOT_ERR_OR_NULL (test , hw );
3040
3048
3041
3049
test_param = test -> param_value ;
3042
3050
memcpy (& pdata , & test_param -> pdata , sizeof (pdata ));
@@ -3045,10 +3053,10 @@ static void clk_register_clk_parent_data_device_hw_test(struct kunit *test)
3045
3053
init .num_parents = 1 ;
3046
3054
init .ops = & clk_dummy_single_parent_ops ;
3047
3055
init .name = "parent_data_device_hw_test_clk" ;
3048
- ctx -> hw . init = & init ;
3049
- KUNIT_ASSERT_EQ (test , 0 , clk_hw_register_kunit (test , ctx -> dev , & ctx -> hw ));
3056
+ hw -> init = & init ;
3057
+ KUNIT_ASSERT_EQ (test , 0 , clk_hw_register_kunit (test , dev , hw ));
3050
3058
3051
- KUNIT_EXPECT_PTR_EQ (test , parent_hw , clk_hw_get_parent (& ctx -> hw ));
3059
+ KUNIT_EXPECT_PTR_EQ (test , parent_hw , clk_hw_get_parent (hw ));
3052
3060
}
3053
3061
3054
3062
static struct kunit_case clk_register_clk_parent_data_device_test_cases [] = {
@@ -3395,8 +3403,148 @@ static struct kunit_suite clk_assigned_rates_suite = {
3395
3403
.init = clk_assigned_rates_test_init ,
3396
3404
};
3397
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
+
3398
3545
kunit_test_suites (
3399
3546
& clk_assigned_rates_suite ,
3547
+ & clk_hw_get_dev_of_node_test_suite ,
3400
3548
& clk_leaf_mux_set_rate_parent_test_suite ,
3401
3549
& clk_test_suite ,
3402
3550
& clk_multiple_parents_mux_test_suite ,
0 commit comments