How does the U500 use the proxy kernel?

Hi SiFive and community!

We are working toward booting linux on an untethered version of the latest rocket-chip on the kc705, and want to avoid duplicating other work. We poked around the Freedom U500 SDK and have a few questions about the role of the proxy kernel. We are interested in working with a core generated using rocket-chip that is compliant with the priv 1.9.1 or 1.10 specification (pretty much the current rocket-chip repo).

How is the pk used in the Freedom U500 if at all? The proxy kernel submodule in the U500 sdk repo appears to include htif files (htif.c, htif.h) that handle some io related system calls, but the freedom repo and getting started guide indicate that the system boots standalone and can be debugged with an external debugger. Is a tethered connection used to handle system calls or run linux? In the past I believe htif system calls were handled over the AXI tether to a front end server.

Thanks for the help, and if I should pose this question elsewhere, please let me know!


The “riscv-pk” git repository includes both the proxy kernel and bbl. Of interest for the U500 is only bbl, which acts as the firmware and boot loader for linux. HTIF and pk is not used. The U500 only runs untethered.

Thanks! We suspected that, but it is great to have a sanity check. Hopefully other people will find this useful as well.