target/riscv: rvv: Fix incorrect vlen comparison in prop_vlen_set
In prop_vlen_set function, there is an incorrect comparison between vlen(bit) and vlenb(byte). This will cause unexpected error when user applies the `vlen=1024` cpu option with a vendor predefined cpu type that the default vlen is 1024(vlenb=128). Fixes: 4f6d036ccc ("target/riscv/cpu.c: remove cpu->cfg.vlen") Signed-off-by: Max Chou <max.chou@sifive.com> Reviewed-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com> Message-ID: <20250124090539.2506448-1-max.chou@sifive.com> Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
This commit is contained in:
parent
ffd455963f
commit
bf3adf93f1
@ -2027,6 +2027,7 @@ static void prop_vlen_set(Object *obj, Visitor *v, const char *name,
|
|||||||
void *opaque, Error **errp)
|
void *opaque, Error **errp)
|
||||||
{
|
{
|
||||||
RISCVCPU *cpu = RISCV_CPU(obj);
|
RISCVCPU *cpu = RISCV_CPU(obj);
|
||||||
|
uint16_t cpu_vlen = cpu->cfg.vlenb << 3;
|
||||||
uint16_t value;
|
uint16_t value;
|
||||||
|
|
||||||
if (!visit_type_uint16(v, name, &value, errp)) {
|
if (!visit_type_uint16(v, name, &value, errp)) {
|
||||||
@ -2038,10 +2039,10 @@ static void prop_vlen_set(Object *obj, Visitor *v, const char *name,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (value != cpu->cfg.vlenb && riscv_cpu_is_vendor(obj)) {
|
if (value != cpu_vlen && riscv_cpu_is_vendor(obj)) {
|
||||||
cpu_set_prop_err(cpu, name, errp);
|
cpu_set_prop_err(cpu, name, errp);
|
||||||
error_append_hint(errp, "Current '%s' val: %u\n",
|
error_append_hint(errp, "Current '%s' val: %u\n",
|
||||||
name, cpu->cfg.vlenb << 3);
|
name, cpu_vlen);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user