|
ra8-firmware 0.1.0
Bare-metal firmware for the Renesas RA8 family (RA8D2 / RA8P1)
|
This document tracks Renesas-controlled artifacts that the ra8-firmware tree intentionally does NOT include. Each entry below describes:
"Not shipped" is not the same as "not obtainable", and the distinction matters: the entry below is publicly downloadable under BSD-3-Clause. It is absent because a partial copy is worse than none (see "Where it would go"), not because a licence forbids it.
The vendor-controlled implementation of the Renesas Secure IP block (RSIP-E50D) that ships inside the RA8D2 silicon (Hardware User's Manual Ch 52, "Renesas Secure IP (RSIP-E50D)", pp 3302-3307). In FSP these are the obfuscated r_rsip_*.c procedure sources under ra/fsp/src/r_rsip_protected/ (older FSP releases spell them hw_sce_*.c); they implement the OEM-provisioned key-handling, key-wrap and key-unwrap state machines that the bare RSIP register interface alone does not expose. "Blob" here means "opaque, vendor-controlled implementation", not literally a binary file.
Nowhere yet, and that is deliberate. A snapshot of the FSP RSIP-E50D primitives was vendored under libs/third_party/ in a now-deleted fsp_blobs/r_sce_AMC/ subtree and later removed (#614) having never been built: no cmake/ recipe referenced it, no first-party call site named a symbol in it, and nearly every one of its translation units included r_rsip_reg.h / r_rsip_util.h, headers that were never copied into the tree. It could not have compiled if something had tried.
The lesson is that a partial vendoring of this component is dead weight, not a head start. Whoever brings hardware RSIP up should vendor a complete, tag-pinned snapshot – the ra_rsip_e50d primitives plus the r_rsip_protected driver and the util/reg layer they include – add a first-party CMake integration module under cmake/, named for the component and guarded by an option that is OFF by default, and register the component in scripts/gen/sbom_registry.py so the sbom / soup-upstream / osv gates cover it. Anything less will not compile, and an in-tree copy that compiles for nobody is what this section already cost the project once.
The current libs/ra8_hal/src/ra8_rsip.c provides a software backend (see the RA8_RSIP_SOFTWARE_BACKEND compile guard) that emulates the RSIP-E50D primitive surface for host unit tests and bring-up. It is NOT a hardware-equivalent RSIP and produces results that are verifiable but not cryptographically Renesas-signed. Without the genuine RSIP-E50D firmware blobs:
The public surface is the ra8_rsip_*_install_plain family (one per key type) plus ra8_rsip_key_wrap / ra8_rsip_key_unwrap, declared via the umbrella libs/ra8_hal/inc/ra8_rsip.h, which pulls in ra8_rsip_keys.h and ra8_rsip_mgmt.h. The *_install_plain bodies live in libs/ra8_hal/src/ra8_rsip_cipher.c and the wrap / unwrap bodies in libs/ra8_hal/src/ra8_rsip_asym.c.
Wrapper / consumer layers:
libs/ra8_hal/src/ra8_rsip*.c does return k_ra8_err_not_supported, but only from the paths whose RSIP-E50D register interface is undocumented (TRNG, hash, HMAC) and which therefore fail closed rather than hand back a plausible-looking wrong answer. There is still no return code anywhere at the RSIP layer that signals "blob missing": on the key-install / wrap surface the software backend substitutes silently, and the failure mode is "not Renesas-signed".
From the public FSP repository, https://github.com/renesas/fsp: the RSIP-E50D procedure sources live under ra/fsp/src/r_rsip_protected/ and carry per-file SPDX BSD-3-Clause notices. No FAE, no NDA, no SDK licence is involved. Check out a release tag rather than a branch head, so the pin is a thing that cannot move underneath the provenance record.