mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-26 22:52:18 +00:00
5e30e45c83
RISC-V OpenSBI is an open-source implementation of the RISC-V Supervisor Binary Interface (SBI) specification. It is required by Linux and U-Boot running in supervisor mode. This patch adds support for booting via the OpenSBI FW_DYNAMIC firmware. It supports OpenSBI version 0.4 and higher. In this configuration, U-Boot SPL starts in machine mode. After loading OpenSBI and U-Boot proper, it will start OpenSBI. All necessary parameters are generated by U-Boot SPL and are passed to OpenSBI. U-Boot proper is started in supervisor mode by OpenSBI. Support for OpenSBI is enabled with CONFIG_SPL_OPENSBI. An additional configuration entry, CONFIG_SPL_OPENSBI_LOAD_ADDR, is used to specify the load address of the OpenSBI firmware binary. It is not used directly in U-Boot and instead is intended to make the value available to scripts such as FIT configuration generators. The header file include/opensbi.h is based on header files from the OpenSBI project. They are recent, as of commit bae54f764570 ("firmware: Add fw_dynamic firmware"). Signed-off-by: Lukas Auer <lukas.auer@aisec.fraunhofer.de> Reviewed-by: Bin Meng <bmeng.cn@gmail.com> Tested-by: Bin Meng <bmeng.cn@gmail.com> Reviewed-by: Anup Patel <anup.patel@wdc.com>
40 lines
1 KiB
C
40 lines
1 KiB
C
/* SPDX-License-Identifier: BSD-2-Clause */
|
|
/*
|
|
* Copyright (c) 2019 Western Digital Corporation or its affiliates.
|
|
*
|
|
* Based on include/sbi/{fw_dynamic.h,sbi_scratch.h} from the OpenSBI project.
|
|
*/
|
|
#ifndef OPENSBI_H
|
|
#define OPENSBI_H
|
|
|
|
/** Expected value of info magic ('OSBI' ascii string in hex) */
|
|
#define FW_DYNAMIC_INFO_MAGIC_VALUE 0x4942534f
|
|
|
|
/** Maximum supported info version */
|
|
#define FW_DYNAMIC_INFO_VERSION 0x1
|
|
|
|
/** Possible next mode values */
|
|
#define FW_DYNAMIC_INFO_NEXT_MODE_U 0x0
|
|
#define FW_DYNAMIC_INFO_NEXT_MODE_S 0x1
|
|
#define FW_DYNAMIC_INFO_NEXT_MODE_M 0x3
|
|
|
|
enum sbi_scratch_options {
|
|
/** Disable prints during boot */
|
|
SBI_SCRATCH_NO_BOOT_PRINTS = (1 << 0),
|
|
};
|
|
|
|
/** Representation dynamic info passed by previous booting stage */
|
|
struct fw_dynamic_info {
|
|
/** Info magic */
|
|
unsigned long magic;
|
|
/** Info version */
|
|
unsigned long version;
|
|
/** Next booting stage address */
|
|
unsigned long next_addr;
|
|
/** Next booting stage mode */
|
|
unsigned long next_mode;
|
|
/** Options for OpenSBI library */
|
|
unsigned long options;
|
|
} __packed;
|
|
|
|
#endif
|