qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] hw/riscv: boot: Don't use CSRs if they are disabled
@ 2023-01-23  3:57 Alistair Francis
  2023-01-23 10:24 ` Daniel Henrique Barboza
                   ` (3 more replies)
  0 siblings, 4 replies; 13+ messages in thread
From: Alistair Francis @ 2023-01-23  3:57 UTC (permalink / raw)
  To: qemu-devel, qemu-riscv
  Cc: palmer, alistair.francis, Bin Meng, alistair23, bmeng.cn

From: Alistair Francis <alistair.francis@wdc.com>

If the CSRs and CSR instructions are disabled because the Zicsr
extension isn't enabled then we want to make sure we don't run any CSR
instructions in the boot ROM.

This patches removes the CSR instructions from the reset-vec if the
extension isn't enabled. We replace the instruction with a NOP instead.

Note that we don't do this for the SiFive U machine, as we are modelling
the hardware in that case.

Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1447
Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
---
 hw/riscv/boot.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/hw/riscv/boot.c b/hw/riscv/boot.c
index 2594276223..cb27798a25 100644
--- a/hw/riscv/boot.c
+++ b/hw/riscv/boot.c
@@ -356,6 +356,15 @@ void riscv_setup_rom_reset_vec(MachineState *machine, RISCVHartArrayState *harts
         reset_vec[4] = 0x0182b283;   /*     ld     t0, 24(t0) */
     }
 
+    if (!harts->harts[0].cfg.ext_icsr) {
+        /*
+         * The Zicsr extension has been disabled, so let's ensure we don't
+         * run the CSR instruction. Let's fill the address with a non
+         * compressed nop.
+         */
+        reset_vec[2] = 0x00000013;   /*     addi   x0, x0, 0 */
+    }
+
     /* copy in the reset vector in little_endian byte order */
     for (i = 0; i < ARRAY_SIZE(reset_vec); i++) {
         reset_vec[i] = cpu_to_le32(reset_vec[i]);
-- 
2.39.0



^ permalink raw reply related	[flat|nested] 13+ messages in thread
* Re: [PATCH] hw/riscv: boot: Don't use CSRs if they are disabled
@ 2023-01-23 22:14 Jesse Taube
  2023-01-23 23:56 ` Alistair Francis
  0 siblings, 1 reply; 13+ messages in thread
From: Jesse Taube @ 2023-01-23 22:14 UTC (permalink / raw)
  To: Alistair Francis
  Cc: qemu-devel, Daniel Henrique Barboza, Daniel Henrique Barboza

 > From: Alistair Francis <alistair.francis@wdc.com>
 >
 > If the CSRs and CSR instructions are disabled because the Zicsr
 > extension isn't enabled then we want to make sure we don't run any CSR
 > instructions in the boot ROM.
 >
 > This patches removes the CSR instructions from the reset-vec if the
 > extension isn't enabled. We replace the instruction with a NOP instead.
 >
 > Note that we don't do this for the SiFive U machine, as we are modelling
 > the hardware in that case.
 >
 > Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1447
 > Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
 > ---
 >  hw/riscv/boot.c | 9 +++++++++
 >  1 file changed, 9 insertions(+)
 >
 > diff --git a/hw/riscv/boot.c b/hw/riscv/boot.c
 > index 2594276223..cb27798a25 100644
 > --- a/hw/riscv/boot.c
 > +++ b/hw/riscv/boot.c
 > @@ -356,6 +356,15 @@ void riscv_setup_rom_reset_vec(MachineState 
*machine,
 > RISCVHartArrayState *harts
 >          reset_vec[4] = 0x0182b283;   /*     ld     t0, 24(t0) */
 >      }
 >
 > +    if (!harts->harts[0].cfg.ext_icsr) {
 > +        /*
 > +         * The Zicsr extension has been disabled, so let's ensure we 
don't
 > +         * run the CSR instruction. Let's fill the address with a non
 > +         * compressed nop.
 > +         */
 > +        reset_vec[2] = 0x00000013;   /*     addi   x0, x0, 0 */
		reset_vec[2] = 0x00000513; /*     li   a0, 0 */
Shouldn't it be li as a0 should contain the cpu number. The regs are
initialized with 0 so its not necessary but nice to be explicit.

Thanks,
Jesse T
 > +    }
 > +
 >      /* copy in the reset vector in little_endian byte order */
 >      for (i = 0; i < ARRAY_SIZE(reset_vec); i++) {
 >          reset_vec[i] = cpu_to_le32(reset_vec[i]);
 > --
 > 2.39.0


^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2023-02-02  0:27 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-01-23  3:57 [PATCH] hw/riscv: boot: Don't use CSRs if they are disabled Alistair Francis
2023-01-23 10:24 ` Daniel Henrique Barboza
2023-01-23 11:51   ` Alistair Francis
2023-01-23 12:02 ` Daniel Henrique Barboza
2023-01-23 23:59 ` Alistair Francis
2023-01-24  1:24 ` Bin Meng
2023-01-24  1:42   ` Alistair Francis
2023-01-26 12:03     ` Bin Meng
2023-01-29 23:18       ` Alistair Francis
2023-01-31 12:31         ` Bin Meng
2023-02-02  0:26           ` Alistair Francis
  -- strict thread matches above, loose matches on Subject: below --
2023-01-23 22:14 Jesse Taube
2023-01-23 23:56 ` Alistair Francis

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).