uboot/arch/arm/lib/spl.c
<<
>>
Prefs
   1/*
   2 * (C) Copyright 2010-2012
   3 * Texas Instruments, <www.ti.com>
   4 *
   5 * Aneesh V <aneesh@ti.com>
   6 * Tom Rini <trini@ti.com>
   7 *
   8 * SPDX-License-Identifier:     GPL-2.0+
   9 */
  10#include <common.h>
  11#include <config.h>
  12#include <spl.h>
  13#include <image.h>
  14#include <linux/compiler.h>
  15
  16#ifndef CONFIG_SPL_DM
  17/* Pointer to as well as the global data structure for SPL */
  18DECLARE_GLOBAL_DATA_PTR;
  19
  20/*
  21 * WARNING: This is going away very soon. Don't use it and don't submit
  22 * pafches that rely on it. The global_data area is set up in crt0.S.
  23 */
  24gd_t gdata __attribute__ ((section(".data")));
  25#endif
  26
  27/*
  28 * In the context of SPL, board_init_f must ensure that any clocks/etc for
  29 * DDR are enabled, ensure that the stack pointer is valid, clear the BSS
  30 * and call board_init_f.  We provide this version by default but mark it
  31 * as __weak to allow for platforms to do this in their own way if needed.
  32 */
  33void __weak board_init_f(ulong dummy)
  34{
  35        /* Clear the BSS. */
  36        memset(__bss_start, 0, __bss_end - __bss_start);
  37
  38#ifndef CONFIG_SPL_DM
  39        /* TODO: Remove settings of the global data pointer here */
  40        gd = &gdata;
  41#endif
  42
  43        board_init_r(NULL, 0);
  44}
  45
  46/*
  47 * This function jumps to an image with argument. Normally an FDT or ATAGS
  48 * image.
  49 * arg: Pointer to paramter image in RAM
  50 */
  51#ifdef CONFIG_SPL_OS_BOOT
  52void __noreturn jump_to_image_linux(void *arg)
  53{
  54        unsigned long machid = 0xffffffff;
  55#ifdef CONFIG_MACH_TYPE
  56        machid = CONFIG_MACH_TYPE;
  57#endif
  58
  59        debug("Entering kernel arg pointer: 0x%p\n", arg);
  60        typedef void (*image_entry_arg_t)(int, int, void *)
  61                __attribute__ ((noreturn));
  62        image_entry_arg_t image_entry =
  63                (image_entry_arg_t) spl_image.entry_point;
  64        cleanup_before_linux();
  65        image_entry(0, machid, arg);
  66}
  67#endif
  68