@ -30,6 +30,67 @@ static struct selftest_results {
} \
}
static void __init of_selftest_dynamic ( void )
{
struct device_node * np ;
struct property * prop ;
np = of_find_node_by_path ( " /testcase-data " ) ;
if ( ! np ) {
pr_err ( " missing testcase data \n " ) ;
return ;
}
/* Array of 4 properties for the purpose of testing */
prop = kzalloc ( sizeof ( * prop ) * 4 , GFP_KERNEL ) ;
if ( ! prop ) {
selftest ( 0 , " kzalloc() failed \n " ) ;
return ;
}
/* Add a new property - should pass*/
prop - > name = " new-property " ;
prop - > value = " new-property-data " ;
prop - > length = strlen ( prop - > value ) ;
selftest ( of_add_property ( np , prop ) = = 0 , " Adding a new property failed \n " ) ;
/* Try to add an existing property - should fail */
prop + + ;
prop - > name = " new-property " ;
prop - > value = " new-property-data-should-fail " ;
prop - > length = strlen ( prop - > value ) ;
selftest ( of_add_property ( np , prop ) ! = 0 ,
" Adding an existing property should have failed \n " ) ;
/* Try to modify an existing property - should pass */
prop - > value = " modify-property-data-should-pass " ;
prop - > length = strlen ( prop - > value ) ;
selftest ( of_update_property ( np , prop ) = = 0 ,
" Updating an existing property should have passed \n " ) ;
/* Try to modify non-existent property - should pass*/
prop + + ;
prop - > name = " modify-property " ;
prop - > value = " modify-missing-property-data-should-pass " ;
prop - > length = strlen ( prop - > value ) ;
selftest ( of_update_property ( np , prop ) = = 0 ,
" Updating a missing property should have passed \n " ) ;
/* Remove property - should pass */
selftest ( of_remove_property ( np , prop ) = = 0 ,
" Removing a property should have passed \n " ) ;
/* Adding very large property - should pass */
prop + + ;
prop - > name = " large-property-PAGE_SIZEx8 " ;
prop - > length = PAGE_SIZE * 8 ;
prop - > value = kzalloc ( prop - > length , GFP_KERNEL ) ;
selftest ( prop - > value ! = NULL , " Unable to allocate large buffer \n " ) ;
if ( prop - > value )
selftest ( of_add_property ( np , prop ) = = 0 ,
" Adding a large property should have passed \n " ) ;
}
static void __init of_selftest_parse_phandle_with_args ( void )
{
struct device_node * np ;
@ -378,6 +439,7 @@ static int __init of_selftest(void)
of_node_put ( np ) ;
pr_info ( " start of selftest - you will see error messages \n " ) ;
of_selftest_dynamic ( ) ;
of_selftest_parse_phandle_with_args ( ) ;
of_selftest_property_match_string ( ) ;
of_selftest_parse_interrupts ( ) ;