Skip to content
Snippets Groups Projects
Commit c19d13b0 authored by Simon Glass's avatar Simon Glass Committed by Tom Rini
Browse files

arm: Refactor bootm to reduce #ifdefs


With fewer #ifdefs the code is more readable and more of the code is
compiled for all boards. Add defines in the header file to control
what features are enabled, and then use if() instead of #ifdef.

Signed-off-by: default avatarSimon Glass <sjg@chromium.org>
parent 13d06981
No related branches found
No related tags found
No related merge requests found
/* Copyright (C) 2011 /*
* Copyright (c) 2013, Google Inc.
*
* Copyright (C) 2011
* Corscience GmbH & Co. KG - Simon Schwarz <schwarz@corscience.de> * Corscience GmbH & Co. KG - Simon Schwarz <schwarz@corscience.de>
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
...@@ -19,8 +22,55 @@ ...@@ -19,8 +22,55 @@
#ifndef ARM_BOOTM_H #ifndef ARM_BOOTM_H
#define ARM_BOOTM_H #define ARM_BOOTM_H
#ifdef CONFIG_USB_DEVICE
extern void udc_disconnect(void); extern void udc_disconnect(void);
#if defined(CONFIG_SETUP_MEMORY_TAGS) || \
defined(CONFIG_CMDLINE_TAG) || \
defined(CONFIG_INITRD_TAG) || \
defined(CONFIG_SERIAL_TAG) || \
defined(CONFIG_REVISION_TAG)
# define BOOTM_ENABLE_TAGS 1
#else
# define BOOTM_ENABLE_TAGS 0
#endif
#ifdef CONFIG_SETUP_MEMORY_TAGS
# define BOOTM_ENABLE_MEMORY_TAGS 1
#else
# define BOOTM_ENABLE_MEMORY_TAGS 0
#endif
#ifdef CONFIG_CMDLINE_TAG
#define BOOTM_ENABLE_CMDLINE_TAG 1
#else
#define BOOTM_ENABLE_CMDLINE_TAG 0
#endif
#ifdef CONFIG_INITRD_TAG
#define BOOTM_ENABLE_INITRD_TAG 1
#else
#define BOOTM_ENABLE_INITRD_TAG 0
#endif
#ifdef CONFIG_SERIAL_TAG
#define BOOTM_ENABLE_SERIAL_TAG 1
void get_board_serial(struct tag_serialnr *serialnr);
#else
#define BOOTM_ENABLE_SERIAL_TAG 0
static inline void get_board_serial(struct tag_serialnr *serialnr)
{
}
#endif
#ifdef CONFIG_REVISION_TAG
#define BOOTM_ENABLE_REVISION_TAG 1
u32 get_board_rev(void);
#else
#define BOOTM_ENABLE_REVISION_TAG 0
static inline u32 get_board_rev(void)
{
return 0;
}
#endif #endif
#endif #endif
...@@ -54,8 +54,6 @@ int arch_early_init_r(void); ...@@ -54,8 +54,6 @@ int arch_early_init_r(void);
int board_init(void); int board_init(void);
int dram_init (void); int dram_init (void);
void dram_init_banksize (void); void dram_init_banksize (void);
void setup_serial_tag (struct tag **params);
void setup_revision_tag (struct tag **params);
/* cpu/.../interrupt.c */ /* cpu/.../interrupt.c */
int arch_interrupt_init (void); int arch_interrupt_init (void);
......
...@@ -37,13 +37,7 @@ ...@@ -37,13 +37,7 @@
DECLARE_GLOBAL_DATA_PTR; DECLARE_GLOBAL_DATA_PTR;
#if defined(CONFIG_SETUP_MEMORY_TAGS) || \
defined(CONFIG_CMDLINE_TAG) || \
defined(CONFIG_INITRD_TAG) || \
defined(CONFIG_SERIAL_TAG) || \
defined(CONFIG_REVISION_TAG)
static struct tag *params; static struct tag *params;
#endif
static ulong get_sp(void) static ulong get_sp(void)
{ {
...@@ -109,11 +103,6 @@ static void announce_and_cleanup(void) ...@@ -109,11 +103,6 @@ static void announce_and_cleanup(void)
cleanup_before_linux(); cleanup_before_linux();
} }
#if defined(CONFIG_SETUP_MEMORY_TAGS) || \
defined(CONFIG_CMDLINE_TAG) || \
defined(CONFIG_INITRD_TAG) || \
defined(CONFIG_SERIAL_TAG) || \
defined(CONFIG_REVISION_TAG)
static void setup_start_tag (bd_t *bd) static void setup_start_tag (bd_t *bd)
{ {
params = (struct tag *)bd->bi_boot_params; params = (struct tag *)bd->bi_boot_params;
...@@ -127,9 +116,7 @@ static void setup_start_tag (bd_t *bd) ...@@ -127,9 +116,7 @@ static void setup_start_tag (bd_t *bd)
params = tag_next (params); params = tag_next (params);
} }
#endif
#ifdef CONFIG_SETUP_MEMORY_TAGS
static void setup_memory_tags(bd_t *bd) static void setup_memory_tags(bd_t *bd)
{ {
int i; int i;
...@@ -144,9 +131,7 @@ static void setup_memory_tags(bd_t *bd) ...@@ -144,9 +131,7 @@ static void setup_memory_tags(bd_t *bd)
params = tag_next (params); params = tag_next (params);
} }
} }
#endif
#ifdef CONFIG_CMDLINE_TAG
static void setup_commandline_tag(bd_t *bd, char *commandline) static void setup_commandline_tag(bd_t *bd, char *commandline)
{ {
char *p; char *p;
...@@ -171,9 +156,7 @@ static void setup_commandline_tag(bd_t *bd, char *commandline) ...@@ -171,9 +156,7 @@ static void setup_commandline_tag(bd_t *bd, char *commandline)
params = tag_next (params); params = tag_next (params);
} }
#endif
#ifdef CONFIG_INITRD_TAG
static void setup_initrd_tag(bd_t *bd, ulong initrd_start, ulong initrd_end) static void setup_initrd_tag(bd_t *bd, ulong initrd_start, ulong initrd_end)
{ {
/* an ATAG_INITRD node tells the kernel where the compressed /* an ATAG_INITRD node tells the kernel where the compressed
...@@ -187,14 +170,11 @@ static void setup_initrd_tag(bd_t *bd, ulong initrd_start, ulong initrd_end) ...@@ -187,14 +170,11 @@ static void setup_initrd_tag(bd_t *bd, ulong initrd_start, ulong initrd_end)
params = tag_next (params); params = tag_next (params);
} }
#endif
#ifdef CONFIG_SERIAL_TAG static void setup_serial_tag(struct tag **tmp)
void setup_serial_tag(struct tag **tmp)
{ {
struct tag *params = *tmp; struct tag *params = *tmp;
struct tag_serialnr serialnr; struct tag_serialnr serialnr;
void get_board_serial(struct tag_serialnr *serialnr);
get_board_serial(&serialnr); get_board_serial(&serialnr);
params->hdr.tag = ATAG_SERIAL; params->hdr.tag = ATAG_SERIAL;
...@@ -204,13 +184,10 @@ void setup_serial_tag(struct tag **tmp) ...@@ -204,13 +184,10 @@ void setup_serial_tag(struct tag **tmp)
params = tag_next (params); params = tag_next (params);
*tmp = params; *tmp = params;
} }
#endif
#ifdef CONFIG_REVISION_TAG static void setup_revision_tag(struct tag **in_params)
void setup_revision_tag(struct tag **in_params)
{ {
u32 rev = 0; u32 rev = 0;
u32 get_board_rev(void);
rev = get_board_rev(); rev = get_board_rev();
params->hdr.tag = ATAG_REVISION; params->hdr.tag = ATAG_REVISION;
...@@ -218,19 +195,12 @@ void setup_revision_tag(struct tag **in_params) ...@@ -218,19 +195,12 @@ void setup_revision_tag(struct tag **in_params)
params->u.revision.rev = rev; params->u.revision.rev = rev;
params = tag_next (params); params = tag_next (params);
} }
#endif
#if defined(CONFIG_SETUP_MEMORY_TAGS) || \
defined(CONFIG_CMDLINE_TAG) || \
defined(CONFIG_INITRD_TAG) || \
defined(CONFIG_SERIAL_TAG) || \
defined(CONFIG_REVISION_TAG)
static void setup_end_tag(bd_t *bd) static void setup_end_tag(bd_t *bd)
{ {
params->hdr.tag = ATAG_NONE; params->hdr.tag = ATAG_NONE;
params->hdr.size = 0; params->hdr.size = 0;
} }
#endif
#ifdef CONFIG_OF_LIBFDT #ifdef CONFIG_OF_LIBFDT
static int create_fdt(bootm_headers_t *images) static int create_fdt(bootm_headers_t *images)
...@@ -274,50 +244,38 @@ __weak void setup_board_tags(struct tag **in_params) {} ...@@ -274,50 +244,38 @@ __weak void setup_board_tags(struct tag **in_params) {}
/* Subcommand: PREP */ /* Subcommand: PREP */
static void boot_prep_linux(bootm_headers_t *images) static void boot_prep_linux(bootm_headers_t *images)
{ {
#ifdef CONFIG_CMDLINE_TAG
char *commandline = getenv("bootargs"); char *commandline = getenv("bootargs");
#endif
if (IMAGE_ENABLE_OF_LIBFDT && images->ft_len) {
#ifdef CONFIG_OF_LIBFDT #ifdef CONFIG_OF_LIBFDT
if (images->ft_len) {
debug("using: FDT\n"); debug("using: FDT\n");
if (create_fdt(images)) { if (create_fdt(images)) {
printf("FDT creation failed! hanging..."); printf("FDT creation failed! hanging...");
hang(); hang();
} }
} else
#endif #endif
{ } else if (BOOTM_ENABLE_TAGS) {
#if defined(CONFIG_SETUP_MEMORY_TAGS) || \
defined(CONFIG_CMDLINE_TAG) || \
defined(CONFIG_INITRD_TAG) || \
defined(CONFIG_SERIAL_TAG) || \
defined(CONFIG_REVISION_TAG)
debug("using: ATAGS\n"); debug("using: ATAGS\n");
setup_start_tag(gd->bd); setup_start_tag(gd->bd);
#ifdef CONFIG_SERIAL_TAG if (BOOTM_ENABLE_SERIAL_TAG)
setup_serial_tag(&params); setup_serial_tag(&params);
#endif if (BOOTM_ENABLE_CMDLINE_TAG)
#ifdef CONFIG_CMDLINE_TAG setup_commandline_tag(gd->bd, commandline);
setup_commandline_tag(gd->bd, commandline); if (BOOTM_ENABLE_REVISION_TAG)
#endif setup_revision_tag(&params);
#ifdef CONFIG_REVISION_TAG if (BOOTM_ENABLE_MEMORY_TAGS)
setup_revision_tag(&params); setup_memory_tags(gd->bd);
#endif if (BOOTM_ENABLE_INITRD_TAG) {
#ifdef CONFIG_SETUP_MEMORY_TAGS if (images->rd_start && images->rd_end) {
setup_memory_tags(gd->bd); setup_initrd_tag(gd->bd, images->rd_start,
#endif images->rd_end);
#ifdef CONFIG_INITRD_TAG }
if (images->rd_start && images->rd_end) }
setup_initrd_tag(gd->bd, images->rd_start,
images->rd_end);
#endif
setup_board_tags(&params); setup_board_tags(&params);
setup_end_tag(gd->bd); setup_end_tag(gd->bd);
#else /* all tags */ } else {
printf("FDT and ATAGS support not compiled in - hanging\n"); printf("FDT and ATAGS support not compiled in - hanging\n");
hang(); hang();
#endif /* all tags */
} }
} }
...@@ -342,11 +300,9 @@ static void boot_jump_linux(bootm_headers_t *images) ...@@ -342,11 +300,9 @@ static void boot_jump_linux(bootm_headers_t *images)
bootstage_mark(BOOTSTAGE_ID_RUN_OS); bootstage_mark(BOOTSTAGE_ID_RUN_OS);
announce_and_cleanup(); announce_and_cleanup();
#ifdef CONFIG_OF_LIBFDT if (IMAGE_ENABLE_OF_LIBFDT && images->ft_len)
if (images->ft_len)
r2 = (unsigned long)images->ft_addr; r2 = (unsigned long)images->ft_addr;
else else
#endif
r2 = gd->bd->bi_boot_params; r2 = gd->bd->bi_boot_params;
kernel_entry(0, machid, r2); kernel_entry(0, machid, r2);
......
...@@ -276,7 +276,7 @@ static int bootm_start(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[] ...@@ -276,7 +276,7 @@ static int bootm_start(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]
#if defined(CONFIG_FIT) #if defined(CONFIG_FIT)
} else if (images.fit_uname_os) { } else if (images.fit_uname_os) {
ret = fit_image_get_entry(images.fit_hdr_os, ret = fit_image_get_entry(images.fit_hdr_os,
images.fit_noffset_os, &images.ep); images.fit_noffset_os, &images.ep);
if (ret) { if (ret) {
puts("Can't get entry point property!\n"); puts("Can't get entry point property!\n");
return 1; return 1;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment