@ -301,6 +301,57 @@ class DtbPlatdata:
self . Out ( ' ; \n ' )
self . Out ( ' }; \n ' )
def OutputNode ( self , node ) :
""" Output the C code for a node
Args :
node : node to output
"""
struct_name = self . GetCompatName ( node )
var_name = Conv_name_to_c ( node . name )
self . Buf ( ' static struct %s %s %s %s = { \n ' %
( STRUCT_PREFIX , struct_name , VAL_PREFIX , var_name ) )
for pname , prop in node . props . items ( ) :
if pname in PROP_IGNORE_LIST or pname [ 0 ] == ' # ' :
continue
ptype = TYPE_NAMES [ prop . type ]
member_name = Conv_name_to_c ( prop . name )
self . Buf ( ' \t %s = ' % TabTo ( 3 , ' . ' + member_name ) )
# Special handling for lists
if type ( prop . value ) == list :
self . Buf ( ' { ' )
vals = [ ]
# For phandles, output a reference to the platform data
# of the target node.
if self . IsPhandle ( prop ) :
# Process the list as pairs of (phandle, id)
it = iter ( prop . value )
for phandle_cell , id_cell in zip ( it , it ) :
phandle = fdt_util . fdt32_to_cpu ( phandle_cell )
id = fdt_util . fdt32_to_cpu ( id_cell )
target_node = self . _phandle_node [ phandle ]
name = Conv_name_to_c ( target_node . name )
vals . append ( ' { & %s %s , %d } ' % ( VAL_PREFIX , name , id ) )
else :
for val in prop . value :
vals . append ( self . GetValue ( prop . type , val ) )
self . Buf ( ' , ' . join ( vals ) )
self . Buf ( ' } ' )
else :
self . Buf ( self . GetValue ( prop . type , prop . value ) )
self . Buf ( ' , \n ' )
self . Buf ( ' }; \n ' )
# Add a device declaration
self . Buf ( ' U_BOOT_DEVICE( %s ) = { \n ' % var_name )
self . Buf ( ' \t .name \t \t = " %s " , \n ' % struct_name )
self . Buf ( ' \t .platdata \t = & %s %s , \n ' % ( VAL_PREFIX , var_name ) )
self . Buf ( ' \t .platdata_size \t = sizeof( %s %s ), \n ' %
( VAL_PREFIX , var_name ) )
self . Buf ( ' }; \n ' )
self . Buf ( ' \n ' )
def GenerateTables ( self ) :
""" Generate device defintions for the platform data
@ -314,50 +365,7 @@ class DtbPlatdata:
self . Out ( ' \n ' )
node_txt_list = [ ]
for node in self . _valid_nodes :
struct_name = self . GetCompatName ( node )
var_name = Conv_name_to_c ( node . name )
self . Buf ( ' static struct %s %s %s %s = { \n ' %
( STRUCT_PREFIX , struct_name , VAL_PREFIX , var_name ) )
for pname , prop in node . props . items ( ) :
if pname in PROP_IGNORE_LIST or pname [ 0 ] == ' # ' :
continue
ptype = TYPE_NAMES [ prop . type ]
member_name = Conv_name_to_c ( prop . name )
self . Buf ( ' \t %s = ' % TabTo ( 3 , ' . ' + member_name ) )
# Special handling for lists
if type ( prop . value ) == list :
self . Buf ( ' { ' )
vals = [ ]
# For phandles, output a reference to the platform data
# of the target node.
if self . IsPhandle ( prop ) :
# Process the list as pairs of (phandle, id)
it = iter ( prop . value )
for phandle_cell , id_cell in zip ( it , it ) :
phandle = fdt_util . fdt32_to_cpu ( phandle_cell )
id = fdt_util . fdt32_to_cpu ( id_cell )
target_node = self . _phandle_node [ phandle ]
name = Conv_name_to_c ( target_node . name )
vals . append ( ' { & %s %s , %d } ' % ( VAL_PREFIX , name , id ) )
else :
for val in prop . value :
vals . append ( self . GetValue ( prop . type , val ) )
self . Buf ( ' , ' . join ( vals ) )
self . Buf ( ' } ' )
else :
self . Buf ( self . GetValue ( prop . type , prop . value ) )
self . Buf ( ' , \n ' )
self . Buf ( ' }; \n ' )
# Add a device declaration
self . Buf ( ' U_BOOT_DEVICE( %s ) = { \n ' % var_name )
self . Buf ( ' \t .name \t \t = " %s " , \n ' % struct_name )
self . Buf ( ' \t .platdata \t = & %s %s , \n ' % ( VAL_PREFIX , var_name ) )
self . Buf ( ' \t .platdata_size \t = sizeof( %s %s ), \n ' %
( VAL_PREFIX , var_name ) )
self . Buf ( ' }; \n ' )
self . Buf ( ' \n ' )
self . OutputNode ( node )
# Output phandle target nodes first, since they may be referenced
# by others