]>
git.ipfire.org Git - people/ms/u-boot.git/blob - arch/openrisc/lib/bootm.c
2 * (C) Copyright 2011 Stefan Kristiansson <stefan.kristiansson@saunalahti.fi>
4 * Based on microblaze implementation by:
5 * (C) Copyright 2007 Michal Simek
6 * (C) Copyright 2004 Atmark Techno, Inc.
8 * Michal SIMEK <monstr@monstr.eu>
9 * Yasushi SHOJI <yashi@atmark-techno.com>
11 * SPDX-License-Identifier: GPL-2.0+
17 #include <u-boot/zlib.h>
18 #include <asm/byteorder.h>
20 DECLARE_GLOBAL_DATA_PTR
;
22 int do_bootm_linux(int flag
, int argc
, char * const argv
[],
23 bootm_headers_t
*images
)
25 void (*kernel
) (unsigned int);
26 ulong rd_data_start
, rd_data_end
;
29 * allow the PREP bootm subcommand, it is required for bootm to work
31 if (flag
& BOOTM_STATE_OS_PREP
)
34 if ((flag
!= 0) && (flag
!= BOOTM_STATE_OS_GO
))
39 char *of_flat_tree
= NULL
;
40 #if defined(CONFIG_OF_LIBFDT)
41 /* did generic code already find a device tree? */
43 of_flat_tree
= images
->ft_addr
;
46 kernel
= (void (*)(unsigned int))images
->ep
;
49 ret
= boot_get_ramdisk(argc
, argv
, images
, IH_ARCH_OPENRISC
,
50 &rd_data_start
, &rd_data_end
);
54 show_boot_progress(15);
56 if (!of_flat_tree
&& argc
> 1)
57 of_flat_tree
= (char *)simple_strtoul(argv
[1], NULL
, 16);
59 printf("## Transferring control to Linux (at address 0x%08lx) " \
60 "ramdisk 0x%08lx, FDT 0x%08lx...\n",
61 (ulong
) kernel
, rd_data_start
, (ulong
) of_flat_tree
);
63 if (dcache_status() || icache_status())
64 flush_cache((ulong
)kernel
, max(checkdcache(), checkicache()));
67 * Linux Kernel Parameters (passing device tree):
68 * r3: pointer to the fdt, followed by the board info data
70 kernel((unsigned int) of_flat_tree
);