@@ -248,6 +248,29 @@ static void deserialize_phy_packet_self_id_extended(u32 quadlet, unsigned int *p
248248 * has_more_packets = phy_packet_self_id_get_more_packets (quadlet );
249249}
250250
251+ static void serialize_phy_packet_phy_config (u32 * quadlet , unsigned int packet_identifier ,
252+ unsigned int root_id , bool has_force_root_node ,
253+ bool has_gap_count_optimization , unsigned int gap_count )
254+ {
255+ phy_packet_set_packet_identifier (quadlet , packet_identifier );
256+ phy_packet_phy_config_set_root_id (quadlet , root_id );
257+ phy_packet_phy_config_set_force_root_node (quadlet , has_force_root_node );
258+ phy_packet_phy_config_set_gap_count_optimization (quadlet , has_gap_count_optimization );
259+ phy_packet_phy_config_set_gap_count (quadlet , gap_count );
260+ }
261+
262+ static void deserialize_phy_packet_phy_config (u32 quadlet , unsigned int * packet_identifier ,
263+ unsigned int * root_id , bool * has_force_root_node ,
264+ bool * has_gap_count_optimization ,
265+ unsigned int * gap_count )
266+ {
267+ * packet_identifier = phy_packet_get_packet_identifier (quadlet );
268+ * root_id = phy_packet_phy_config_get_root_id (quadlet );
269+ * has_force_root_node = phy_packet_phy_config_get_force_root_node (quadlet );
270+ * has_gap_count_optimization = phy_packet_phy_config_get_gap_count_optimization (quadlet );
271+ * gap_count = phy_packet_phy_config_get_gap_count (quadlet );
272+ }
273+
251274static void test_async_header_write_quadlet_request (struct kunit * test )
252275{
253276 static const u32 expected [ASYNC_HEADER_QUADLET_COUNT ] = {
@@ -811,6 +834,60 @@ static void test_phy_packet_self_id_zero_and_one(struct kunit *test)
811834 KUNIT_EXPECT_MEMEQ (test , quadlets , expected , sizeof (expected ));
812835}
813836
837+ static void test_phy_packet_phy_config_force_root_node (struct kunit * test )
838+ {
839+ const u32 expected = 0x02800000 ;
840+ u32 quadlet = 0 ;
841+
842+ unsigned int packet_identifier ;
843+ unsigned int root_id ;
844+ bool has_force_root_node ;
845+ bool has_gap_count_optimization ;
846+ unsigned int gap_count ;
847+
848+ deserialize_phy_packet_phy_config (expected , & packet_identifier , & root_id ,
849+ & has_force_root_node , & has_gap_count_optimization ,
850+ & gap_count );
851+
852+ KUNIT_EXPECT_EQ (test , PHY_PACKET_PACKET_IDENTIFIER_PHY_CONFIG , packet_identifier );
853+ KUNIT_EXPECT_EQ (test , 0x02 , root_id );
854+ KUNIT_EXPECT_TRUE (test , has_force_root_node );
855+ KUNIT_EXPECT_FALSE (test , has_gap_count_optimization );
856+ KUNIT_EXPECT_EQ (test , 0 , gap_count );
857+
858+ serialize_phy_packet_phy_config (& quadlet , packet_identifier , root_id , has_force_root_node ,
859+ has_gap_count_optimization , gap_count );
860+
861+ KUNIT_EXPECT_EQ (test , quadlet , expected );
862+ }
863+
864+ static void test_phy_packet_phy_config_gap_count_optimization (struct kunit * test )
865+ {
866+ const u32 expected = 0x034f0000 ;
867+ u32 quadlet = 0 ;
868+
869+ unsigned int packet_identifier ;
870+ unsigned int root_id ;
871+ bool has_force_root_node ;
872+ bool has_gap_count_optimization ;
873+ unsigned int gap_count ;
874+
875+ deserialize_phy_packet_phy_config (expected , & packet_identifier , & root_id ,
876+ & has_force_root_node , & has_gap_count_optimization ,
877+ & gap_count );
878+
879+ KUNIT_EXPECT_EQ (test , PHY_PACKET_PACKET_IDENTIFIER_PHY_CONFIG , packet_identifier );
880+ KUNIT_EXPECT_EQ (test , 0x03 , root_id );
881+ KUNIT_EXPECT_FALSE (test , has_force_root_node );
882+ KUNIT_EXPECT_TRUE (test , has_gap_count_optimization );
883+ KUNIT_EXPECT_EQ (test , 0x0f , gap_count );
884+
885+ serialize_phy_packet_phy_config (& quadlet , packet_identifier , root_id , has_force_root_node ,
886+ has_gap_count_optimization , gap_count );
887+
888+ KUNIT_EXPECT_EQ (test , quadlet , expected );
889+ }
890+
814891static struct kunit_case packet_serdes_test_cases [] = {
815892 KUNIT_CASE (test_async_header_write_quadlet_request ),
816893 KUNIT_CASE (test_async_header_write_block_request ),
@@ -825,6 +902,8 @@ static struct kunit_case packet_serdes_test_cases[] = {
825902 KUNIT_CASE (test_phy_packet_self_id_zero_case0 ),
826903 KUNIT_CASE (test_phy_packet_self_id_zero_case1 ),
827904 KUNIT_CASE (test_phy_packet_self_id_zero_and_one ),
905+ KUNIT_CASE (test_phy_packet_phy_config_force_root_node ),
906+ KUNIT_CASE (test_phy_packet_phy_config_gap_count_optimization ),
828907 {}
829908};
830909
0 commit comments