From: Alistair Francis <alistair23@gmail.com> To: Bin Meng <bmeng.cn@gmail.com> Cc: Bin Meng <bin.meng@windriver.com>, "open list:RISC-V" <qemu-riscv@nongnu.org>, Sagar Karandikar <sagark@eecs.berkeley.edu>, Bastian Koppelmann <kbastian@mail.uni-paderborn.de>, Palmer Dabbelt <palmerdabbelt@google.com>, "qemu-devel@nongnu.org Developers" <qemu-devel@nongnu.org>, Alistair Francis <Alistair.Francis@wdc.com> Subject: Re: [PATCH 12/15] hw/riscv: sifive: Change SiFive E/U CPU reset vector to 0x1004 Date: Mon, 15 Jun 2020 12:02:04 -0700 [thread overview] Message-ID: <CAKmqyKOGMBhrHU+d1FO4NhPrPuK5tb09xV9SGZP5-xYdKwfSaQ@mail.gmail.com> (raw) In-Reply-To: <1591625864-31494-13-git-send-email-bmeng.cn@gmail.com> On Mon, Jun 8, 2020 at 7:27 AM Bin Meng <bmeng.cn@gmail.com> wrote: > > From: Bin Meng <bin.meng@windriver.com> > > Per the SiFive manual, all E/U series CPU cores' reset vector is > at 0x1004. Update our codes to match the hardware. > > Signed-off-by: Bin Meng <bin.meng@windriver.com> > --- > > hw/riscv/sifive_e.c | 8 +++++--- > hw/riscv/sifive_u.c | 6 +++--- > target/riscv/cpu.c | 4 ++-- > 3 files changed, 10 insertions(+), 8 deletions(-) > > diff --git a/hw/riscv/sifive_e.c b/hw/riscv/sifive_e.c > index 8fab152..f05cabd 100644 > --- a/hw/riscv/sifive_e.c > +++ b/hw/riscv/sifive_e.c > @@ -98,9 +98,11 @@ static void sifive_e_machine_init(MachineState *machine) > memmap[SIFIVE_E_DTIM].base, main_mem); > > /* Mask ROM reset vector */ > - uint32_t reset_vec[2] = { > - 0x204002b7, /* 0x1000: lui t0,0x20400 */ > - 0x00028067, /* 0x1004: jr t0 */ > + uint32_t reset_vec[4] = { > + 0x00000000, > + 0x204002b7, /* 0x1004: lui t0,0x20400 */ > + 0x00028067, /* 0x1008: jr t0 */ > + 0x00000000, > }; > > /* copy in the reset vector in little_endian byte order */ > diff --git a/hw/riscv/sifive_u.c b/hw/riscv/sifive_u.c > index aaa5adb..0a86ffc 100644 > --- a/hw/riscv/sifive_u.c > +++ b/hw/riscv/sifive_u.c > @@ -433,18 +433,18 @@ static void sifive_u_machine_init(MachineState *machine) > > /* reset vector */ > uint32_t reset_vec[8] = { > + 0x00000000, > 0x00000297, /* 1: auipc t0, %pcrel_hi(dtb) */ > - 0x02028593, /* addi a1, t0, %pcrel_lo(1b) */ > + 0x01c28593, /* addi a1, t0, %pcrel_lo(1b) */ > 0xf1402573, /* csrr a0, mhartid */ > #if defined(TARGET_RISCV32) > 0x0182a283, /* lw t0, 24(t0) */ > #elif defined(TARGET_RISCV64) > - 0x0182b283, /* ld t0, 24(t0) */ > + 0x0182e283, /* lwu t0, 24(t0) */ > #endif > 0x00028067, /* jr t0 */ > 0x00000000, > start_addr, /* start: .dword */ > - 0x00000000, > /* dtb: */ > }; > > diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c > index 5060534..1944ad6 100644 > --- a/target/riscv/cpu.c > +++ b/target/riscv/cpu.c > @@ -139,7 +139,7 @@ static void rvnn_gcsu_priv1_10_0_cpu_init(Object *obj) > CPURISCVState *env = &RISCV_CPU(obj)->env; > set_misa(env, RVXLEN | RVI | RVM | RVA | RVF | RVD | RVC | RVS | RVU); > set_priv_version(env, PRIV_VERSION_1_10_0); > - set_resetvec(env, DEFAULT_RSTVEC); > + set_resetvec(env, 0x1004); > } > > static void rvnn_imacu_nommu_cpu_init(Object *obj) > @@ -147,7 +147,7 @@ static void rvnn_imacu_nommu_cpu_init(Object *obj) > CPURISCVState *env = &RISCV_CPU(obj)->env; > set_misa(env, RVXLEN | RVI | RVM | RVA | RVC | RVU); > set_priv_version(env, PRIV_VERSION_1_10_0); > - set_resetvec(env, DEFAULT_RSTVEC); > + set_resetvec(env, 0x1004); I know the Ibex CPU does the same thing, but I'm a little worried about this. At this rate we will have multiple generic (rvx_im*_cpu_init()) CPUs that don't have generic reset vectors. It might be best to rename the functions to match the actual CPUs in this case. Alistair > qdev_prop_set_bit(DEVICE(obj), "mmu", false); > } > > -- > 2.7.4 > >
WARNING: multiple messages have this Message-ID (diff)
From: Alistair Francis <alistair23@gmail.com> To: Bin Meng <bmeng.cn@gmail.com> Cc: Alistair Francis <Alistair.Francis@wdc.com>, Bastian Koppelmann <kbastian@mail.uni-paderborn.de>, Palmer Dabbelt <palmerdabbelt@google.com>, Sagar Karandikar <sagark@eecs.berkeley.edu>, "qemu-devel@nongnu.org Developers" <qemu-devel@nongnu.org>, "open list:RISC-V" <qemu-riscv@nongnu.org>, Bin Meng <bin.meng@windriver.com> Subject: Re: [PATCH 12/15] hw/riscv: sifive: Change SiFive E/U CPU reset vector to 0x1004 Date: Mon, 15 Jun 2020 12:02:04 -0700 [thread overview] Message-ID: <CAKmqyKOGMBhrHU+d1FO4NhPrPuK5tb09xV9SGZP5-xYdKwfSaQ@mail.gmail.com> (raw) In-Reply-To: <1591625864-31494-13-git-send-email-bmeng.cn@gmail.com> On Mon, Jun 8, 2020 at 7:27 AM Bin Meng <bmeng.cn@gmail.com> wrote: > > From: Bin Meng <bin.meng@windriver.com> > > Per the SiFive manual, all E/U series CPU cores' reset vector is > at 0x1004. Update our codes to match the hardware. > > Signed-off-by: Bin Meng <bin.meng@windriver.com> > --- > > hw/riscv/sifive_e.c | 8 +++++--- > hw/riscv/sifive_u.c | 6 +++--- > target/riscv/cpu.c | 4 ++-- > 3 files changed, 10 insertions(+), 8 deletions(-) > > diff --git a/hw/riscv/sifive_e.c b/hw/riscv/sifive_e.c > index 8fab152..f05cabd 100644 > --- a/hw/riscv/sifive_e.c > +++ b/hw/riscv/sifive_e.c > @@ -98,9 +98,11 @@ static void sifive_e_machine_init(MachineState *machine) > memmap[SIFIVE_E_DTIM].base, main_mem); > > /* Mask ROM reset vector */ > - uint32_t reset_vec[2] = { > - 0x204002b7, /* 0x1000: lui t0,0x20400 */ > - 0x00028067, /* 0x1004: jr t0 */ > + uint32_t reset_vec[4] = { > + 0x00000000, > + 0x204002b7, /* 0x1004: lui t0,0x20400 */ > + 0x00028067, /* 0x1008: jr t0 */ > + 0x00000000, > }; > > /* copy in the reset vector in little_endian byte order */ > diff --git a/hw/riscv/sifive_u.c b/hw/riscv/sifive_u.c > index aaa5adb..0a86ffc 100644 > --- a/hw/riscv/sifive_u.c > +++ b/hw/riscv/sifive_u.c > @@ -433,18 +433,18 @@ static void sifive_u_machine_init(MachineState *machine) > > /* reset vector */ > uint32_t reset_vec[8] = { > + 0x00000000, > 0x00000297, /* 1: auipc t0, %pcrel_hi(dtb) */ > - 0x02028593, /* addi a1, t0, %pcrel_lo(1b) */ > + 0x01c28593, /* addi a1, t0, %pcrel_lo(1b) */ > 0xf1402573, /* csrr a0, mhartid */ > #if defined(TARGET_RISCV32) > 0x0182a283, /* lw t0, 24(t0) */ > #elif defined(TARGET_RISCV64) > - 0x0182b283, /* ld t0, 24(t0) */ > + 0x0182e283, /* lwu t0, 24(t0) */ > #endif > 0x00028067, /* jr t0 */ > 0x00000000, > start_addr, /* start: .dword */ > - 0x00000000, > /* dtb: */ > }; > > diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c > index 5060534..1944ad6 100644 > --- a/target/riscv/cpu.c > +++ b/target/riscv/cpu.c > @@ -139,7 +139,7 @@ static void rvnn_gcsu_priv1_10_0_cpu_init(Object *obj) > CPURISCVState *env = &RISCV_CPU(obj)->env; > set_misa(env, RVXLEN | RVI | RVM | RVA | RVF | RVD | RVC | RVS | RVU); > set_priv_version(env, PRIV_VERSION_1_10_0); > - set_resetvec(env, DEFAULT_RSTVEC); > + set_resetvec(env, 0x1004); > } > > static void rvnn_imacu_nommu_cpu_init(Object *obj) > @@ -147,7 +147,7 @@ static void rvnn_imacu_nommu_cpu_init(Object *obj) > CPURISCVState *env = &RISCV_CPU(obj)->env; > set_misa(env, RVXLEN | RVI | RVM | RVA | RVC | RVU); > set_priv_version(env, PRIV_VERSION_1_10_0); > - set_resetvec(env, DEFAULT_RSTVEC); > + set_resetvec(env, 0x1004); I know the Ibex CPU does the same thing, but I'm a little worried about this. At this rate we will have multiple generic (rvx_im*_cpu_init()) CPUs that don't have generic reset vectors. It might be best to rename the functions to match the actual CPUs in this case. Alistair > qdev_prop_set_bit(DEVICE(obj), "mmu", false); > } > > -- > 2.7.4 > >
next prev parent reply other threads:[~2020-06-15 19:12 UTC|newest] Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-06-08 14:17 [PATCH 00/15] hw/riscv: sifive_u: Add GPIO and Mode Select (MSEL[3:0]) support Bin Meng 2020-06-08 14:17 ` [PATCH 01/15] hw/riscv: sifive_e: Remove the riscv_ prefix of the machine* and soc* functions Bin Meng 2020-06-15 16:05 ` Alistair Francis 2020-06-15 16:05 ` Alistair Francis 2020-06-08 14:17 ` [PATCH 02/15] hw/riscv: opentitan: " Bin Meng 2020-06-15 16:06 ` Alistair Francis 2020-06-15 16:06 ` Alistair Francis 2020-06-08 14:17 ` [PATCH 03/15] hw/riscv: sifive_u: Simplify the GEM IRQ connect code a little bit Bin Meng 2020-06-15 16:07 ` Alistair Francis 2020-06-15 16:07 ` Alistair Francis 2020-06-08 14:17 ` [PATCH 04/15] hw/riscv: sifive_u: Generate device tree node for OTP Bin Meng 2020-06-15 16:08 ` Alistair Francis 2020-06-15 16:08 ` Alistair Francis 2020-06-08 14:17 ` [PATCH 05/15] hw/riscv: sifive_gpio: Clean up the codes Bin Meng 2020-06-15 16:13 ` Alistair Francis 2020-06-15 16:13 ` Alistair Francis 2020-06-08 14:17 ` [PATCH 06/15] hw/riscv: sifive_gpio: Add a new 'ngpio' property Bin Meng 2020-06-15 16:16 ` Alistair Francis 2020-06-15 16:16 ` Alistair Francis 2020-06-08 14:17 ` [PATCH 07/15] hw/riscv: sifive_u: Hook a GPIO controller Bin Meng 2020-06-15 16:26 ` Alistair Francis 2020-06-15 16:26 ` Alistair Francis 2020-06-08 14:17 ` [PATCH 08/15] hw/riscv: sifive_gpio: Do not blindly trigger output IRQs Bin Meng 2020-06-15 16:28 ` Alistair Francis 2020-06-15 16:28 ` Alistair Francis 2020-06-08 14:17 ` [PATCH 09/15] hw/riscv: sifive_u: Add reset functionality Bin Meng 2020-06-15 16:35 ` Alistair Francis 2020-06-15 16:35 ` Alistair Francis 2020-06-08 14:17 ` [PATCH 10/15] hw/riscv: sifive_u: Rename serial property get/set functions to a generic name Bin Meng 2020-06-15 16:39 ` Alistair Francis 2020-06-15 16:39 ` Alistair Francis 2020-06-08 14:17 ` [PATCH 11/15] hw/riscv: sifive_u: Add a new property msel for MSEL pin state Bin Meng 2020-06-15 16:41 ` Alistair Francis 2020-06-15 16:41 ` Alistair Francis 2020-06-08 14:17 ` [PATCH 12/15] hw/riscv: sifive: Change SiFive E/U CPU reset vector to 0x1004 Bin Meng 2020-06-15 19:02 ` Alistair Francis [this message] 2020-06-15 19:02 ` Alistair Francis 2020-06-08 14:17 ` [PATCH 13/15] hw/riscv: sifive_u: Support different boot source per MSEL pin state Bin Meng 2020-06-15 19:04 ` Alistair Francis 2020-06-15 19:04 ` Alistair Francis 2020-06-08 14:17 ` [PATCH 14/15] hw/riscv: sifive_u: Sort the SoC memmap table entries Bin Meng 2020-06-15 19:04 ` Alistair Francis 2020-06-15 19:04 ` Alistair Francis 2020-06-08 14:17 ` [PATCH 15/15] hw/riscv: sifive_u: Add a dummy DDR memory controller device Bin Meng 2020-06-15 19:20 ` Alistair Francis 2020-06-15 19:20 ` Alistair Francis 2020-06-15 19:31 ` [PATCH 00/15] hw/riscv: sifive_u: Add GPIO and Mode Select (MSEL[3:0]) support Alistair Francis 2020-06-15 19:31 ` Alistair Francis
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=CAKmqyKOGMBhrHU+d1FO4NhPrPuK5tb09xV9SGZP5-xYdKwfSaQ@mail.gmail.com \ --to=alistair23@gmail.com \ --cc=Alistair.Francis@wdc.com \ --cc=bin.meng@windriver.com \ --cc=bmeng.cn@gmail.com \ --cc=kbastian@mail.uni-paderborn.de \ --cc=palmerdabbelt@google.com \ --cc=qemu-devel@nongnu.org \ --cc=qemu-riscv@nongnu.org \ --cc=sagark@eecs.berkeley.edu \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.