It’s running OpenSBI in M mode, I don’t see why it wouldn’t run anything else in M mode. If I get a chance I’ll post details. I really do need to get my toy project running on real hardware anyways.
Without u-boot there is a lot of board setup you might get bogged down in. See the https://sifive.cdn.prismic.io/sifive/18febb04-50b6-4880-9bf3-631e40daa809_fu740-c000-manual-v1p2.pdf manual section 6.3. This is all done by u-boot: setting frequency PLLs, waiting for them to spin up, configuring DDR, PHY, reading from the SD card and parsing partition data, getting the next bit of code loaded, enabling the L2 to use DDR for 15/16 ways, jumping to 0x8000_0000 (and other stuff).
I’m not sure, but it might be possible to break your hardware in M mode, since it’s very low level. I’d be interested to know this.
You’ll need to write a driver to access the MMC SDCard, or else for both the PCIe and NVME, or else for usb/*hci… if you want any storage at all. Those will need clock drivers and other associated drivers.
The SiFive UART is quite easy to program. If you’ve already got spinlocks and interrupt handling it should be straightforward. It would be even easier if you could use atomics on I/O memory, but alas that’s apparently not a thing (dead end I went down about a month ago).