Blame view

include/initcall.h 1.18 KB
83d290c56   Tom Rini   SPDX: Convert all...
1
  /* SPDX-License-Identifier: GPL-2.0+ */
c8a311d9d   Simon Glass   Introduce a basic...
2
3
  /*
   * Copyright (c) 2011 The Chromium OS Authors.
c8a311d9d   Simon Glass   Introduce a basic...
4
   */
2d986c0f5   Simon Glass   board_f: initcall...
5
6
  #ifndef __INITCALL_H
  #define __INITCALL_H
c8a311d9d   Simon Glass   Introduce a basic...
7
  typedef int (*init_fnc_t)(void);
315f60d74   Simon Glass   initcall: Drop us...
8
9
10
11
12
  /*
   * To enable debugging. add #define DEBUG at the top of the including file.
   *
   * To find a symbol, use grep on u-boot.map
   */
47870afab   Alexander Graf   initcall: Move to...
13
14
15
16
17
18
19
  static inline int initcall_run_list(const init_fnc_t init_sequence[])
  {
  	const init_fnc_t *init_fnc_ptr;
  
  	for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr) {
  		unsigned long reloc_ofs = 0;
  		int ret;
001d1885f   Simon Glass   sandbox: Improve ...
20
21
22
23
24
  		/*
  		 * Sandbox is relocated by the OS, so symbols always appear at
  		 * the relocated address.
  		 */
  		if (IS_ENABLED(CONFIG_SANDBOX) || (gd->flags & GD_FLG_RELOC))
47870afab   Alexander Graf   initcall: Move to...
25
26
27
28
  			reloc_ofs = gd->reloc_off;
  #ifdef CONFIG_EFI_APP
  		reloc_ofs = (unsigned long)image_base;
  #endif
001d1885f   Simon Glass   sandbox: Improve ...
29
  		if (reloc_ofs)
fa840f13f   Ovidiu Panait   initcall.h: initc...
30
31
32
33
  			debug("initcall: %p (relocated to %p)
  ",
  					(char *)*init_fnc_ptr - reloc_ofs,
  					(char *)*init_fnc_ptr);
47870afab   Alexander Graf   initcall: Move to...
34
  		else
fa840f13f   Ovidiu Panait   initcall.h: initc...
35
36
  			debug("initcall: %p
  ", (char *)*init_fnc_ptr - reloc_ofs);
47870afab   Alexander Graf   initcall: Move to...
37
38
39
40
41
42
43
44
45
46
47
  		ret = (*init_fnc_ptr)();
  		if (ret) {
  			printf("initcall sequence %p failed at call %p (err=%d)
  ",
  			       init_sequence,
  			       (char *)*init_fnc_ptr - reloc_ofs, ret);
  			return -1;
  		}
  	}
  	return 0;
  }
2d986c0f5   Simon Glass   board_f: initcall...
48
49
  
  #endif