aboutsummaryrefslogtreecommitdiff
path: root/docs/firmware
diff options
context:
space:
mode:
authorDamien Le Moal <damien.lemoal@wdc.com>2019-01-23 16:21:59 +0900
committerAnup Patel <anup@brainfault.org>2019-01-24 18:45:01 +0530
commit560147b264769399105b0d1ebf50124794f587c1 (patch)
tree3ec705ecc6a7edd5bd854cd9831c9395bf20c665 /docs/firmware
parentfff48ee2bf9abd804fe828a75fcce3e046b7d3cc (diff)
docs/firmware: Update FW_PAYLOAD documentation
Reformatting, typos, and various corrections. Signed-off-by: Damien Le Moal <damien.lemoal@wdc.com>
Diffstat (limited to 'docs/firmware')
-rw-r--r--docs/firmware/fw_payload.md141
1 files changed, 78 insertions, 63 deletions
diff --git a/docs/firmware/fw_payload.md b/docs/firmware/fw_payload.md
index 2dee296..15edac7 100644
--- a/docs/firmware/fw_payload.md
+++ b/docs/firmware/fw_payload.md
@@ -1,75 +1,90 @@
-OpenSBI Firmware with Payload (FW_PAYLOAD)
+OpenSBI Firmware with Payload *FW_PAYLOAD*
==========================================
-The **OpenSBI firmware with Payload (FW_PAYLOAD)** is a firmware which
-includes the next booting stage binary (i.e. bootloader/kernel) as a
-payload embedded in the OpenSBI firmware binary image.
+OpenSBI **firmware with Payload (FW_PAYLOAD)** is a firmware which directly
+includes the binary for the booting stage to follow OpenSBI firmware execution.
+Typically, this payload will be a bootloader or an OS kernel.
-This *FW_PAYLOAD* firmware is particularly useful when the booting stage
-prior to OpenSBI firmware is not capable of loading the OpenSBI firmware
-and the booting stage after OpenSBI firmware separately.
+A *FW_PAYLOAD* firmware is particularly useful when the booting stage executed
+prior to OpenSBI firmware is not capable of loading both OpenSBI firmware and
+the booting stage to follow OpenSBI firmware.
-It is also possible that the booting stage prior to OpenSBI firmware
-does not pass a *flattened device tree (FDT)*. In this case, a
-*FW_PAYLOAD* firmware allows embedding a flattened device tree in
-the .text section of the final firmware.
+A *FW_PAYLOAD* firmware is also useful for cases where the booting stage prior
+to OpenSBI firmware does not pass a *flattened device tree (FDT file)*. In such
+case, a *FW_PAYLOAD* firmware allows embedding a flattened device tree in the
+.text section of the final firmware.
-How to Enable?
---------------
+Enabling *FW_PAYLOAD* compilation
+---------------------------------
-The *FW_PAYLOAD* firmware can be enabled by any of the following methods:
+The *FW_PAYLOAD* firmware can be enabled by any of the following methods.
-1. Passing `FW_PAYLOAD=y` command-line parameter to top-level `make`
-2. Setting `FW_PAYLOAD=y` in platform `config.mk`
+1. Specifying `FW_PAYLOAD=y` on the top level `make` command line.
+2. Specifying `FW_PAYLOAD=y` in the target platform *config.mk* configuration
+ file.
+
+The compiled *FW_PAYLOAD* firmware ELF file is named *fw_jump.elf*. Its
+expanded image file is *fw_payload.bin*. Both files are created in the
+platform specific build directory under the
+*build/platform/<platform_subdir>/firmware* directory.
Configuration Options
---------------------
-A *FW_PAYLOAD* firmware needs to be built according to some predefined
-configuration options to work correctly. These configuration details can
-be passed as parameters to the top-level `make` command or can be defined
- in a platform *config.mk* build configuration file.
-
-The following are the build configuration parameters for a *FW_PAYLOAD*
-firmware:
-
-* **FW_PAYLOAD_OFFSET** - Offset from *FW_TEXT_BASE* where the payload
-binary will be linked in the final *FW_PAYLOAD* firmware binary image.
-<<<<<<< HEAD
-This configuration parameter is mandatory if *FW_PAYLOAD_ALIGN* is not
-defined. Compilation errors will result from an incorrect definition
-of *FW_PAYLOAD_OFFSET* or *FW_PAYLOAD_ALIGN*, or if neither of these
-parameters are defined.
-
-* **FW_PAYLOAD_ALIGN** - Address alignment constraint where the payload
-binary will be linked after the end of the base firmware binary in the
-final *FW_PAYLOAD* firmware binary image. This configuration parameter
-is mandatory if *FW_PAYLOAD_OFFSET* is not defined and should not be
-defined otherwise.
-
-* **FW_PAYLOAD_PATH** - Path to the next booting stage binary image
-file. If this option is not provided then a simple test payload is
-automatically generated, executing a `while (1)` loop.
-
-* **FW_PAYLOAD_FDT_PATH** - Path to an external flattened device tree
-binary file to be embedded in the *.text* section of the final
-*FW_PAYLOAD* firmware. If this option is not provided and no internal
-device tree file is specified by the platform (c.f. *FW_PAYLOAD_FDT*),
-then the firmware will expect the FDT to be passed as an argument by
-the prior booting stage.
-
-* **FW_PAYLOAD_FDT** - Path to an internal flattened device tree
-binary file defined by the platform code. The file name must match the
-DTB file name specified in the platform *objects.mk* file with the
-*platform-dtb-y* entry. This option results in *FW_PAYLOAD_FDT_PATH* to
-be automatically set. Specifying *FW_PAYLOAD_FDT_PATH* on the `make`
-command line disables *FW_PAYLOAD_FDT* and the command line specified
-device tree binary file is used for building the final firmware.
-
-* **FW_PAYLOAD_FDT_ADDR** - Address where the FDT passed by the prior
-booting stage or specified by the *FW_PAYLOAD_FDT_PATH* parameter and
-embedded in the *.text* section will be placed before executing the
-next booting stage, that is, the payload firmware. If this option is
-not provided then the firmware will pass zero as the FDT address to the
-next booting stage.
+A *FW_PAYLOAD* firmware is built according to configuration parameters and
+options. These configuration parameters can be defined using either the top
+level `make` command line or the target platform *config.mk* configuration
+file. The parameters currently defined are as follows.
+
+* **FW_PAYLOAD_OFFSET** - Offset from *FW_TEXT_BASE* where the payload binary
+ will be linked in the final *FW_PAYLOAD* firmware binary image. This
+ configuration parameter is mandatory if *FW_PAYLOAD_ALIGN* is not defined.
+ Compilation errors will result from an incorrect definition of
+ *FW_PAYLOAD_OFFSET* or of *FW_PAYLOAD_ALIGN*, or if neither of these
+ parameters are defined.
+
+* **FW_PAYLOAD_ALIGN** - Address alignment constraint where the payload binary
+ will be linked after the end of the base firmware binary in the final
+ *FW_PAYLOAD* firmware binary image. This configuration parameter is mandatory
+ if *FW_PAYLOAD_OFFSET* is not defined. If both *FW_PAYLOAD_OFFSET* and
+ *FW_PAYLOAD_ALIGN* are defined, *FW_PAYLOAD_OFFSET* is used and
+ *FW_PAYLOAD_ALIGN* ignored.
+
+* **FW_PAYLOAD_PATH** - Path to the image file of the next booting stage
+ binary. If this option is not provided then a simple test payload is
+ automatically generated and used as a payload. This test payload executes
+ an infinite `while (1)` loop after printing a message on the platform console.
+
+* **FW_PAYLOAD_FDT_PATH** - Path to an external flattened device tree binary
+ file to be embedded in the *.text* section of the final firmware. If this
+ option is not provided and no internal device tree file is specified by the
+ platform (c.f. *FW_PAYLOAD_FDT*), then the firmware will expect the FDT to
+ be passed as an argument by the prior booting stage.
+
+* **FW_PAYLOAD_FDT** - Path to an internal flattened device tree binary file
+ defined by the platform code. The file name must match the DTB file name
+ specified in the platform *objects.mk* file with the *platform-dtb-y* entry.
+ This option results in *FW_PAYLOAD_FDT_PATH* to be automatically set.
+ Specifying *FW_PAYLOAD_FDT_PATH* on the `make` command line disables
+ *FW_PAYLOAD_FDT* and the command line specified device tree binary file is
+ used for building the final firmware.
+
+* **FW_PAYLOAD_FDT_ADDR** - Address where the FDT passed by the prior booting
+ stage or specified by the *FW_PAYLOAD_FDT_PATH* parameter and embedded in
+ the *.text* section will be placed before executing the next booting stage,
+ that is, the payload firmware. If this option is not provided then the
+ firmware will pass zero as the FDT address to the next booting stage.
+
+*FW_PAYLOAD* Example
+--------------------
+
+The *[qemu/virt]* and *[qemu/sifive_u]* platforms illustrates how to configure
+and use a *FW_PAYLOAD* firmware. Detailed information regarding these platforms
+can be found in the platforms documentation files.
+
+The *kendryte/k210* platform also enables build of a *FW_PAYLOAD* using an
+internally defined device tree file (*FW_PAYLOAD_FDT*).
+
+[qemu/virt]: ../platform/qemu_virt.md
+[qemu/sifive_u]: ../platform/qemu_sifive_u.md