| Message ID | 20260901022211.2619560-1-zong.li@sifive.com |
|---|---|
| Headers | show |
| Series | Support OpenSBI firmware header | expand |
On Tue, Sep 1, 2026 at 10:22 AM Zong Li <zong.li@sifive.com> wrote: > > This series adds OpenSBI firmware header. The motivation is when a > system where the previous booting stage runs on a dedicated boot > processor, it can load and patch the OpenSBI image in DRAM and then > release the application hart that runs OpenSBI, but it can never execute > on that hart and therefore cannot place anything in its registers, such > as $a0, $a1 and $a2 > > Every OpenSBI firmware image, regardless of its type (FW_DYNAMIC, > FW_JUMP or FW_PAYLOAD), starts with a fixed 128-byte header. The header > serves two purposes: > > 1. it lets the previous booting stage recognize an OpenSBI firmware > image and find out what it was built for, and > 2. it gives the previous booting stage a well-known place inside the > image to hand over the boot arguments by patching a few words, > instead of setting up the *a0*, *a1* and *a2* registers. > > This series also provides a document 'docs/firmware/fw_header.md' to > describe the layout of the 128-byte OpenSBI firmware header, the > a0/a1/a2 override flags, what a previous booting stage is expected to put > in each register, and an example of how to patch the header. > > Thanks Anup for discussing it and providing the ideas > Hi Anup, Could I know if this patch set looks good to you? Thanks > Zong Li (3): > firmware: fw_base.S: add a formatted OpenSBI firmware header > firmware: fw_base.S: override a0, a1 and a2 from the firmware header > docs: firmware: document the OpenSBI firmware header > > docs/firmware/fw.md | 9 +++ > docs/firmware/fw_header.md | 127 +++++++++++++++++++++++++++++++++++++ > firmware/fw_base.S | 100 +++++++++++++++++++++++++++++ > 3 files changed, 236 insertions(+) > create mode 100644 docs/firmware/fw_header.md > > -- > 2.43.7 >
On Tue, Sep 15, 2026 at 1:17 PM Zong Li <zong.li@sifive.com> wrote: > > On Tue, Sep 1, 2026 at 10:22 AM Zong Li <zong.li@sifive.com> wrote: > > > > This series adds OpenSBI firmware header. The motivation is when a > > system where the previous booting stage runs on a dedicated boot > > processor, it can load and patch the OpenSBI image in DRAM and then > > release the application hart that runs OpenSBI, but it can never execute > > on that hart and therefore cannot place anything in its registers, such > > as $a0, $a1 and $a2 > > > > Every OpenSBI firmware image, regardless of its type (FW_DYNAMIC, > > FW_JUMP or FW_PAYLOAD), starts with a fixed 128-byte header. The header > > serves two purposes: > > > > 1. it lets the previous booting stage recognize an OpenSBI firmware > > image and find out what it was built for, and > > 2. it gives the previous booting stage a well-known place inside the > > image to hand over the boot arguments by patching a few words, > > instead of setting up the *a0*, *a1* and *a2* registers. > > > > This series also provides a document 'docs/firmware/fw_header.md' to > > describe the layout of the 128-byte OpenSBI firmware header, the > > a0/a1/a2 override flags, what a previous booting stage is expected to put > > in each register, and an example of how to patch the header. > > > > Thanks Anup for discussing it and providing the ideas > > > > Hi Anup, > Could I know if this patch set looks good to you? Thanks Overall, the series is in very good shape. Once the comment about FW_HEADER_FLAGS_OVERRIDE_A0 is addressed, I will merge. Thanks, Anup