Bare metal support

Hi,
I understand that the VF2 uses the U74 cpu from SiFive
But when compiling I get the error
Error: unknown CSR `mtvt’

This register should be present in the cpu, So I am assuming the compiler is not supporting it.

Is there a plan to add this register so that customers can use the “asm volatile(“csrr %0, 0x307” : “=r”(mtvt));”
for work on ecalls and other privileged modes?

Thanks

VisonFive 2 uses JH7110 SoC with RV64GC from StarFive.

Yes but inside the JH7110 are four U74 cores from Sifive,
Is there a plan to add the register mtvt to the compiler ?

This is the printout from openocd showing the cores
Info : JTAG tap: e24.cpu tap/device found: 0x07110cfd (mfg: 0x67e (Guangdong StarFive Technology Co), part: 0x7110, ver: 0x0)
Info : JTAG tap: u74.cpu tap/device found: 0x07110cfd (mfg: 0x67e (Guangdong StarFive Technology Co), part: 0x7110, ver: 0x0)

1 Like

check this: Building Hello World on Freedem-E-SDK fails with "unknown CSR `mtvt'" - General - SiFive Forums

1 Like

I had to lookup what “mtvt” was “Machine Trap Vector Table Base Address”.

My very first step would be to check the version of my assembler (“as --version”) if it was failing to understand what should be a valid instruction. My second step would be to upgrade to the very latest “GNU Binutils” package for the OS I was using. And if that was too old then my next step would be to get the very latest source code for for “as” (the GNU assembler) and compile my own “as” (and I would remove the package before I “make install” the newly compiled source code).

Mtvt seems belong to clic spec which isn’t ratified yet. So sifive uses a pre-standard spec version for it and thus it needs a downstream compiler toolchain for it unless you choose to not use clic.

1 Like

https://wiki.riscv.org/display/HOME/Fast+Interrupts+TG

I did a “rgrep mtvt *” on the latest binutils source code and the one and only mention of “mtvt” is totally unrelated to RISC-V, for the PowerPC architecture.

So I would agree, until ratified, it is probably not going to be supported upstream.

2 Likes

I could be wrong but it looks like “mtvt” 0x307 is not in the current draft of riscv privileged instructions. But “mtvec” (0x305) (Machine Trap-Vector Base-Address Register) which is in the current draft is supported by “as” (the GNU assembler) as a draft instruction. To me it looks like “mtvec” has replaced “mtvt”, so I suspect that it might never be added upstream.

1 Like

Thanks for taking the time to look at this.

“mtvt” and “mtvec” are used together.
I found a comment is the trap code
“Exceptions always jump to mtvec.BASE regardless of the vectoring mode”

ecalls and physical memory protection, are a big reason to use these new breed of riscv cores.

I suspect the patch is very small.
Thanks Chris

1 Like

Hi, if I understand correctly mtvt is only used when the CLIC is available, which is only available in the E24 core.

As mentioned before the mtvt is probably only going to come to gas and llvm-as releases after it’s ratified, though I’d mention that if you use numeric CSR numbers like:

asm volatile("csrr %0, 0x307" : "=r"(mtvt) : :);

It should already be possible on existing assemblers.

1 Like

Hi,
Yes it does compile using SiFive tools.
On SiFive’s website they have a freertos example, where mtvt it is used on the u74 core.

1 Like