Alexandre Ghiti <alexgh...@rivosinc.com> writes:

> The satp mode is set using the svXX properties, but that actually
> restricts the satp mode to the minimum required by the profile and
> prevents the use of higher satp modes.
>
> Fix this by not setting any svXX property and allow all satp mode to be
> supported.

I figured I'll add some more findings.

The RISC-V profile initialization seems a bit brittle; Without Alex' fix
we're getting different supported satp on the first hart (0) than the
other harts; Hart 0 has sv57, whereas the other harts has enforced sv39.
This caused the smp bringup on Linux to fail.

Some observations on, e.g., a
"rv64,b=on,zbc=off,v=true,vlen=256,elen=64,sscofpmf=on,svade=on,svinval=on,svnapot=on,svpbmt=on,zcb=on,zcmop=on,zfhmin=on,zicond=on,zimop=on,zkt=on,zvbb=on,zvfhmin=on,zvkt=on,zkr=on"
8 hart machine:

When realizing the cpus, the first cpu calls riscv_cpu_add_profiles()
all profiles are disabled, whereas for the other cpu calls to
riscv_cpu_add_profiles() have some profiles enabled. Having some
profiles enabled, will issue a call to cpu_set_profile() that will
enforce the satp code that Alex removes in this patch.

The riscv_cpu_validate_profile() function is called after
riscv_cpu_add_profiles(), which explains why the harts subsequent the
first one will get the cpu_set_profile() call. The first hart will not
have cpu_set_profile() called.

IOW, there are more issues hiding here, in addition to Alex' fix.


Björn

Reply via email to