@ -40,6 +40,7 @@
# include <lmb.h>
# include <linux/string.h>
# include <asm/u-boot.h>
# endif /* USE_HOSTCC */
/* new uImage format support enabled by default */
# define CONFIG_FIT 1
@ -51,7 +52,12 @@
# if defined(CONFIG_FIT) && !defined(CONFIG_OF_LIBFDT)
# error "CONFIG_OF_LIBFDT not enabled, required by CONFIG_FIT!"
# endif
# endif /* USE_HOSTCC */
# if defined(CONFIG_FIT)
# include <fdt.h>
# include <libfdt.h>
# include <fdt_support.h>
# endif
/*
* Operating System Codes
@ -412,16 +418,160 @@ static inline int image_check_target_arch (image_header_t *hdr)
return 1 ;
}
# endif /* USE_HOSTCC */
/*******************************************************************/
/* New uImage format specific code (prefixed with fit_) */
/*******************************************************************/
# if defined(CONFIG_FIT)
# define FIT_IMAGES_PATH " / images"
# define FIT_CONFS_PATH " / configurations"
/* hash node */
# define FIT_HASH_NODENAME "hash"
# define FIT_ALGO_PROP "algo"
# define FIT_VALUE_PROP "value"
/* image node */
# define FIT_DATA_PROP "data"
# define FIT_TIMESTAMP_PROP "timestamp"
# define FIT_DESC_PROP "description"
# define FIT_ARCH_PROP "arch"
# define FIT_TYPE_PROP "type"
# define FIT_OS_PROP "os"
# define FIT_COMP_PROP "compression"
# define FIT_ENTRY_PROP "entry"
# define FIT_LOAD_PROP "load"
/* configuration node */
# define FIT_KERNEL_PROP "kernel"
# define FIT_RAMDISK_PROP "ramdisk"
# define FIT_FDT_PROP "fdt"
# define FIT_DEFAULT_PROP "default"
# define FIT_MAX_HASH_LEN 20 /* max(crc32_len(4), sha1_len(20)) */
/* cmdline argument format parsing */
inline int fit_parse_conf ( const char * spec , ulong addr_curr ,
ulong * addr , const char * * conf_name ) ;
inline int fit_parse_subimage ( const char * spec , ulong addr_curr ,
ulong * addr , const char * * image_name ) ;
inline void fit_print_contents ( const void * fit ) ;
inline void fit_print_contents_noindent ( const void * fit ) ;
void fit_image_print ( const void * fit , int noffset , const char * p ) ;
void fit_image_print_hash ( const void * fit , int noffset , const char * p ) ;
/**
* fit_get_end - get FIT image size
* @ fit : pointer to the FIT format image header
*
* returns :
* size of the FIT image ( blob ) in memory
*/
static inline ulong fit_get_size ( const void * fit )
{
return fdt_totalsize ( fit ) ;
}
/**
* fit_get_end - get FIT image end
* @ fit : pointer to the FIT format image header
*
* returns :
* end address of the FIT image ( blob ) in memory
*/
static inline ulong fit_get_end ( const void * fit )
{
return ( ulong ) fit + fdt_totalsize ( fit ) ;
}
/**
* fit_get_name - get FIT node name
* @ fit : pointer to the FIT format image header
*
* returns :
* NULL , on error
* pointer to node name , on success
*/
static inline const char * fit_get_name ( const void * fit_hdr ,
int noffset , int * len )
{
return fdt_get_name ( fit_hdr , noffset , len ) ;
}
int fit_get_desc ( const void * fit , int noffset , char * * desc ) ;
int fit_get_timestamp ( const void * fit , int noffset , time_t * timestamp ) ;
int fit_image_get_node ( const void * fit , const char * image_uname ) ;
int fit_image_get_os ( const void * fit , int noffset , uint8_t * os ) ;
int fit_image_get_arch ( const void * fit , int noffset , uint8_t * arch ) ;
int fit_image_get_type ( const void * fit , int noffset , uint8_t * type ) ;
int fit_image_get_comp ( const void * fit , int noffset , uint8_t * comp ) ;
int fit_image_get_load ( const void * fit , int noffset , ulong * load ) ;
int fit_image_get_entry ( const void * fit , int noffset , ulong * entry ) ;
int fit_image_get_data ( const void * fit , int noffset ,
const void * * data , size_t * size ) ;
int fit_image_hash_get_algo ( const void * fit , int noffset , char * * algo ) ;
int fit_image_hash_get_value ( const void * fit , int noffset , uint8_t * * value ,
int * value_len ) ;
int fit_set_timestamp ( void * fit , int noffset , time_t timestamp ) ;
int fit_set_hashes ( void * fit ) ;
int fit_image_set_hashes ( void * fit , int image_noffset ) ;
int fit_image_hash_set_value ( void * fit , int noffset , uint8_t * value ,
int value_len ) ;
int fit_image_check_hashes ( const void * fit , int noffset ) ;
int fit_image_check_os ( const void * fit , int noffset , uint8_t os ) ;
int fit_image_check_arch ( const void * fit , int noffset , uint8_t arch ) ;
int fit_image_check_type ( const void * fit , int noffset , uint8_t type ) ;
int fit_image_check_comp ( const void * fit , int noffset , uint8_t comp ) ;
int fit_check_format ( const void * fit ) ;
int fit_conf_get_node ( const void * fit , const char * conf_uname ) ;
int fit_conf_get_kernel_node ( const void * fit , int noffset ) ;
int fit_conf_get_ramdisk_node ( const void * fit , int noffset ) ;
int fit_conf_get_fdt_node ( const void * fit , int noffset ) ;
void fit_conf_print ( const void * fit , int noffset , const char * p ) ;
# ifndef USE_HOSTCC
static inline int fit_image_check_target_arch ( const void * fdt , int node )
{
# if defined(__ARM__)
if ( ! fit_image_check_arch ( fdt , node , IH_ARCH_ARM ) )
# elif defined(__avr32__)
if ( ! fit_image_check_arch ( fdt , node , IH_ARCH_AVR32 ) )
# elif defined(__bfin__)
if ( ! fit_image_check_arch ( fdt , node , IH_ARCH_BLACKFIN ) )
# elif defined(__I386__)
if ( ! fit_image_check_arch ( fdt , node , IH_ARCH_I386 ) )
# elif defined(__M68K__)
if ( ! fit_image_check_arch ( fdt , node , IH_ARCH_M68K ) )
# elif defined(__microblaze__)
if ( ! fit_image_check_arch ( fdt , node , IH_ARCH_MICROBLAZE ) )
# elif defined(__mips__)
if ( ! fit_image_check_arch ( fdt , node , IH_ARCH_MIPS ) )
# elif defined(__nios__)
if ( ! fit_image_check_arch ( fdt , node , IH_ARCH_NIOS ) )
# elif defined(__nios2__)
if ( ! fit_image_check_arch ( fdt , node , IH_ARCH_NIOS2 ) )
# elif defined(__PPC__)
if ( ! fit_image_check_arch ( fdt , node , IH_ARCH_PPC ) )
# elif defined(__sh__)
if ( ! fit_image_check_arch ( fdt , node , IH_ARCH_SH ) )
# else
# error Unknown CPU type
# endif
return 0 ;
return 1 ;
}
# endif /* USE_HOSTCC */
# ifdef CONFIG_FIT_VERBOSE
# define fit_unsupported(msg) printf ("! %s:%d " \
" FIT images not supported for '%s' \n " , \
@ -436,6 +586,5 @@ inline int fit_parse_subimage (const char *spec, ulong addr_curr,
# define fit_unsupported_reset(msg)
# endif /* CONFIG_FIT_VERBOSE */
# endif /* CONFIG_FIT */
# endif /* USE_HOSTCC */
# endif /* __IMAGE_H__ */