diff mbox series

[3/3] doc: global data pointer

Message ID 20200919160335.40909-4-xypron.glpk@gmx.de
State Superseded, archived
Headers show
Series doc: global data pointer | expand

Commit Message

Heinrich Schuchardt Sept. 19, 2020, 4:03 p.m. UTC
Add the description of the global data pointer to the generated HTML
documentation.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
---
 doc/develop/global_data.rst | 53 +++++++++++++++++++++++++++++++++++++
 doc/develop/index.rst       |  1 +
 2 files changed, 54 insertions(+)
 create mode 100644 doc/develop/global_data.rst

--
2.28.0

Comments

Simon Glass Sept. 22, 2020, 6:49 p.m. UTC | #1
On Sat, 19 Sep 2020 at 10:10, Heinrich Schuchardt <xypron.glpk@gmx.de> wrote:
>
> Add the description of the global data pointer to the generated HTML
> documentation.
>
> Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
> ---
>  doc/develop/global_data.rst | 53 +++++++++++++++++++++++++++++++++++++
>  doc/develop/index.rst       |  1 +
>  2 files changed, 54 insertions(+)
>  create mode 100644 doc/develop/global_data.rst
>

Reviewed-by: Simon Glass <sjg@chromium.org>
Daniel Schwierzeck Sept. 22, 2020, 11:34 p.m. UTC | #2
Am Samstag, den 19.09.2020, 18:03 +0200 schrieb Heinrich Schuchardt:
> Add the description of the global data pointer to the generated HTML
> documentation.
> 
> Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
> ---
>  doc/develop/global_data.rst | 53 +++++++++++++++++++++++++++++++++++++
>  doc/develop/index.rst       |  1 +
>  2 files changed, 54 insertions(+)
>  create mode 100644 doc/develop/global_data.rst
> 
> diff --git a/doc/develop/global_data.rst b/doc/develop/global_data.rst
> new file mode 100644
> index 0000000000..9e7c8a24da
> --- /dev/null
> +++ b/doc/develop/global_data.rst
> @@ -0,0 +1,53 @@
> +.. SPDX-License-Identifier: GPL-2.0+
> +
> +Global data
> +===========
> +
> +Globally required fields are held in the global data structure. A pointer to the
> +structure is available as symbol gd. The symbol is made available by the macro
> +%DECLARE_GLOBAL_DATA_PTR.
> +
> +Register pointing to global data
> +--------------------------------
> +
> +On most architectures the global data pointer is stored in a register.
> +
> ++------------+----------+
> +| ARC        | r25      |
> ++------------+----------+
> +| ARM 32bit  | r9       |
> ++------------+----------+
> +| ARM 64bit  | x18      |
> ++------------+----------+
> +| M68000     | d7       |
> ++------------+----------+
> +| MicroBlaze | r31      |
> ++------------+----------+
> +| NDS32      | r10      |
> ++------------+----------+
> +| Nios II    | gp       |
> ++------------+----------+
> +| PowerPC    | r2       |
> ++------------+----------+
> +| RISC-V     | gp (x3)  |
> ++------------+----------+
> +| SuperH     | r13      |
> ++------------+----------+

if you want to add MIPS to the list, the register is: $26 (k0)

> +
> +The sandbox, x86, and Xtensa are notable exceptions.
> +
> +Clang for ARM does not support assigning a global register. When using Clang
> +gd is defined as an inline function using assembly code. This adds a few bytes
> +to the code size.
> +
> +Binaries called by U-Boot are not aware of the register usage and will not
> +conserve gd. UEFI binaries call the API provided by U-Boot and may return to
> +U-Boot. The value of gd has to be saved every time U-Boot is left and restored
> +whenever U-Boot is reentered. This is also relevant for the implementation of
> +function tracing. For setting the value of gd function set_gd() can be used.
> +
> +Global data structure
> +---------------------
> +
> +.. kernel-doc:: include/asm-generic/global_data.h
> +   :internal:
> diff --git a/doc/develop/index.rst b/doc/develop/index.rst
> index 98a95ad434..89e80eab94 100644
> --- a/doc/develop/index.rst
> +++ b/doc/develop/index.rst
> @@ -9,4 +9,5 @@ Develop U-Boot
> 
>     coccinelle
>     crash_dumps
> +   global_data
>     logging
> --
> 2.28.0
>
diff mbox series

Patch

diff --git a/doc/develop/global_data.rst b/doc/develop/global_data.rst
new file mode 100644
index 0000000000..9e7c8a24da
--- /dev/null
+++ b/doc/develop/global_data.rst
@@ -0,0 +1,53 @@ 
+.. SPDX-License-Identifier: GPL-2.0+
+
+Global data
+===========
+
+Globally required fields are held in the global data structure. A pointer to the
+structure is available as symbol gd. The symbol is made available by the macro
+%DECLARE_GLOBAL_DATA_PTR.
+
+Register pointing to global data
+--------------------------------
+
+On most architectures the global data pointer is stored in a register.
+
++------------+----------+
+| ARC        | r25      |
++------------+----------+
+| ARM 32bit  | r9       |
++------------+----------+
+| ARM 64bit  | x18      |
++------------+----------+
+| M68000     | d7       |
++------------+----------+
+| MicroBlaze | r31      |
++------------+----------+
+| NDS32      | r10      |
++------------+----------+
+| Nios II    | gp       |
++------------+----------+
+| PowerPC    | r2       |
++------------+----------+
+| RISC-V     | gp (x3)  |
++------------+----------+
+| SuperH     | r13      |
++------------+----------+
+
+The sandbox, x86, and Xtensa are notable exceptions.
+
+Clang for ARM does not support assigning a global register. When using Clang
+gd is defined as an inline function using assembly code. This adds a few bytes
+to the code size.
+
+Binaries called by U-Boot are not aware of the register usage and will not
+conserve gd. UEFI binaries call the API provided by U-Boot and may return to
+U-Boot. The value of gd has to be saved every time U-Boot is left and restored
+whenever U-Boot is reentered. This is also relevant for the implementation of
+function tracing. For setting the value of gd function set_gd() can be used.
+
+Global data structure
+---------------------
+
+.. kernel-doc:: include/asm-generic/global_data.h
+   :internal:
diff --git a/doc/develop/index.rst b/doc/develop/index.rst
index 98a95ad434..89e80eab94 100644
--- a/doc/develop/index.rst
+++ b/doc/develop/index.rst
@@ -9,4 +9,5 @@  Develop U-Boot

    coccinelle
    crash_dumps
+   global_data
    logging