image: Add device tree setup to image library

This seems to be a common function for several architectures, so create
a common function rather than duplicating the code in each arch.

Also make an attempt to avoid introducing #ifdefs in the new code, partly
by removing useless #ifdefs around function declarations in the image.h
header.

Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Simon Glass 2013-05-08 08:06:01 +00:00 committed by Tom Rini
parent 44d3a3066b
commit 13d06981a9
6 changed files with 174 additions and 13 deletions

View file

@ -36,6 +36,9 @@
#include "compiler.h"
#include <asm/byteorder.h>
/* Define this to avoid #ifdefs later on */
struct lmb;
#ifdef USE_HOSTCC
/* new uImage format support enabled on host */
@ -92,6 +95,30 @@
#define IMAGE_ENABLE_SHA1 0
#endif
#endif /* CONFIG_FIT */
#ifdef CONFIG_SYS_BOOT_RAMDISK_HIGH
# define IMAGE_ENABLE_RAMDISK_HIGH 1
#else
# define IMAGE_ENABLE_RAMDISK_HIGH 0
#endif
#ifdef CONFIG_OF_LIBFDT
# define IMAGE_ENABLE_OF_LIBFDT 1
#else
# define IMAGE_ENABLE_OF_LIBFDT 0
#endif
#ifdef CONFIG_SYS_BOOT_GET_CMDLINE
# define IMAGE_BOOT_GET_CMDLINE 1
#else
# define IMAGE_BOOT_GET_CMDLINE 0
#endif
#ifdef CONFIG_OF_BOARD_SETUP
# define IMAAGE_OF_BOARD_SETUP 1
#else
# define IMAAGE_OF_BOARD_SETUP 0
#endif
/*
@ -280,9 +307,7 @@ typedef struct bootm_headers {
ulong rd_start, rd_end;/* ramdisk start/end */
#ifdef CONFIG_OF_LIBFDT
char *ft_addr; /* flat dev tree address */
#endif
ulong ft_len; /* length of flat device tree */
ulong initrd_start;
@ -390,21 +415,14 @@ ulong genimg_get_image(ulong img_addr);
int boot_get_ramdisk(int argc, char * const argv[], bootm_headers_t *images,
uint8_t arch, ulong *rd_start, ulong *rd_end);
#ifdef CONFIG_OF_LIBFDT
int boot_get_fdt(int flag, int argc, char * const argv[],
bootm_headers_t *images, char **of_flat_tree, ulong *of_size);
void boot_fdt_add_mem_rsv_regions(struct lmb *lmb, void *fdt_blob);
int boot_relocate_fdt(struct lmb *lmb, char **of_flat_tree, ulong *of_size);
#endif
#ifdef CONFIG_SYS_BOOT_RAMDISK_HIGH
int boot_ramdisk_high(struct lmb *lmb, ulong rd_data, ulong rd_len,
ulong *initrd_start, ulong *initrd_end);
#endif /* CONFIG_SYS_BOOT_RAMDISK_HIGH */
#ifdef CONFIG_SYS_BOOT_GET_CMDLINE
int boot_get_cmdline(struct lmb *lmb, ulong *cmd_start, ulong *cmd_end);
#endif /* CONFIG_SYS_BOOT_GET_CMDLINE */
#ifdef CONFIG_SYS_BOOT_GET_KBD
int boot_get_kbd(struct lmb *lmb, bd_t **kbd);
#endif /* CONFIG_SYS_BOOT_GET_KBD */
@ -546,6 +564,31 @@ static inline int image_check_target_arch(const image_header_t *hdr)
}
#endif /* USE_HOSTCC */
/**
* Set up properties in the FDT
*
* This sets up properties in the FDT that is to be passed to linux.
*
* @images: Images information
* @blob: FDT to update
* @of_size: Size of the FDT
* @lmb: Points to logical memory block structure
* @return 0 if ok, <0 on failure
*/
int image_setup_libfdt(bootm_headers_t *images, void *blob,
int of_size, struct lmb *lmb);
/**
* Set up the FDT to use for booting a kernel
*
* This performs ramdisk setup, sets up the FDT if required, and adds
* paramters to the FDT if libfdt is available.
*
* @param images Images information
* @return 0 if ok, <0 on failure
*/
int image_setup_linux(bootm_headers_t *images);
/*******************************************************************/
/* New uImage format specific code (prefixed with fit_) */
/*******************************************************************/