@ -16,7 +16,7 @@ void ft_fixup_cpu(void *blob)
__maybe_unused u64 spin_tbl_addr = ( u64 ) get_spin_tbl_addr ( ) ;
fdt32_t * reg ;
int addr_cells ;
u64 val ;
u64 val , core_id ;
size_t * boot_code_size = & ( __secondary_boot_code_size ) ;
off = fdt_path_offset ( blob , " /cpus " ) ;
@ -29,15 +29,20 @@ void ft_fixup_cpu(void *blob)
off = fdt_node_offset_by_prop_value ( blob , - 1 , " device_type " , " cpu " , 4 ) ;
while ( off ! = - FDT_ERR_NOTFOUND ) {
reg = ( fdt32_t * ) fdt_getprop ( blob , off , " reg " , 0 ) ;
core_id = of_read_number ( reg , addr_cells ) ;
if ( reg ) {
val = spin_tbl_addr ;
val + = id_to_core ( of_read_number ( reg , addr_cells ) )
* SPIN_TABLE_ELEM_SIZE ;
val = cpu_to_fdt64 ( val ) ;
fdt_setprop_string ( blob , off , " enable-method " ,
" spin-table " ) ;
fdt_setprop ( blob , off , " cpu-release-addr " ,
& val , sizeof ( val ) ) ;
if ( core_id = = 0 | | ( is_core_online ( core_id ) ) ) {
val = spin_tbl_addr ;
val + = id_to_core ( core_id ) *
SPIN_TABLE_ELEM_SIZE ;
val = cpu_to_fdt64 ( val ) ;
fdt_setprop_string ( blob , off , " enable-method " ,
" spin-table " ) ;
fdt_setprop ( blob , off , " cpu-release-addr " ,
& val , sizeof ( val ) ) ;
} else {
debug ( " skipping offline core \n " ) ;
}
} else {
puts ( " Warning: found cpu node without reg property \n " ) ;
}