@@ -2367,6 +2367,81 @@ static void cros_ec_proto_test_get_host_event_normal(struct kunit *test)
23672367 KUNIT_EXPECT_EQ (test , ret , EC_HOST_EVENT_MASK (EC_HOST_EVENT_RTC ));
23682368}
23692369
2370+ static void cros_ec_proto_test_check_features_cached (struct kunit * test )
2371+ {
2372+ int ret , i ;
2373+ struct cros_ec_dev ec ;
2374+
2375+ ec .features .flags [0 ] = EC_FEATURE_MASK_0 (EC_FEATURE_FINGERPRINT );
2376+ ec .features .flags [1 ] = EC_FEATURE_MASK_0 (EC_FEATURE_SCP );
2377+
2378+ for (i = 0 ; i < EC_FEATURE_TYPEC_MUX_REQUIRE_AP_ACK ; ++ i ) {
2379+ ret = cros_ec_check_features (& ec , i );
2380+ switch (i ) {
2381+ case EC_FEATURE_FINGERPRINT :
2382+ case EC_FEATURE_SCP :
2383+ KUNIT_EXPECT_TRUE (test , ret );
2384+ break ;
2385+ default :
2386+ KUNIT_EXPECT_FALSE (test , ret );
2387+ break ;
2388+ }
2389+ }
2390+ }
2391+
2392+ static void cros_ec_proto_test_check_features_not_cached (struct kunit * test )
2393+ {
2394+ struct cros_ec_proto_test_priv * priv = test -> priv ;
2395+ struct cros_ec_device * ec_dev = & priv -> ec_dev ;
2396+ struct ec_xfer_mock * mock ;
2397+ int ret , i ;
2398+ struct cros_ec_dev ec ;
2399+
2400+ ec_dev -> max_request = 0xff ;
2401+ ec_dev -> max_response = 0xee ;
2402+ ec .ec_dev = ec_dev ;
2403+ ec .dev = ec_dev -> dev ;
2404+ ec .cmd_offset = 0 ;
2405+ ec .features .flags [0 ] = -1 ;
2406+ ec .features .flags [1 ] = -1 ;
2407+
2408+ /* For EC_CMD_GET_FEATURES. */
2409+ {
2410+ struct ec_response_get_features * data ;
2411+
2412+ mock = cros_kunit_ec_xfer_mock_add (test , sizeof (* data ));
2413+ KUNIT_ASSERT_PTR_NE (test , mock , NULL );
2414+
2415+ data = (struct ec_response_get_features * )mock -> o_data ;
2416+ data -> flags [0 ] = EC_FEATURE_MASK_0 (EC_FEATURE_FINGERPRINT );
2417+ data -> flags [1 ] = EC_FEATURE_MASK_0 (EC_FEATURE_SCP );
2418+ }
2419+
2420+ for (i = 0 ; i < EC_FEATURE_TYPEC_MUX_REQUIRE_AP_ACK ; ++ i ) {
2421+ ret = cros_ec_check_features (& ec , i );
2422+ switch (i ) {
2423+ case EC_FEATURE_FINGERPRINT :
2424+ case EC_FEATURE_SCP :
2425+ KUNIT_EXPECT_TRUE (test , ret );
2426+ break ;
2427+ default :
2428+ KUNIT_EXPECT_FALSE (test , ret );
2429+ break ;
2430+ }
2431+ }
2432+
2433+ /* For EC_CMD_GET_FEATURES. */
2434+ {
2435+ mock = cros_kunit_ec_xfer_mock_next ();
2436+ KUNIT_EXPECT_PTR_NE (test , mock , NULL );
2437+
2438+ KUNIT_EXPECT_EQ (test , mock -> msg .version , 0 );
2439+ KUNIT_EXPECT_EQ (test , mock -> msg .command , EC_CMD_GET_FEATURES );
2440+ KUNIT_EXPECT_EQ (test , mock -> msg .insize , sizeof (struct ec_response_get_features ));
2441+ KUNIT_EXPECT_EQ (test , mock -> msg .outsize , 0 );
2442+ }
2443+ }
2444+
23702445static void cros_ec_proto_test_release (struct device * dev )
23712446{
23722447}
@@ -2460,6 +2535,8 @@ static struct kunit_case cros_ec_proto_test_cases[] = {
24602535 KUNIT_CASE (cros_ec_proto_test_get_host_event_not_host_event ),
24612536 KUNIT_CASE (cros_ec_proto_test_get_host_event_wrong_event_size ),
24622537 KUNIT_CASE (cros_ec_proto_test_get_host_event_normal ),
2538+ KUNIT_CASE (cros_ec_proto_test_check_features_cached ),
2539+ KUNIT_CASE (cros_ec_proto_test_check_features_not_cached ),
24632540 {}
24642541};
24652542
0 commit comments