From: Alan Kao <alankao@andestech.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH 4/8] riscv: andes_plic: Fix some wrong configurations
Date: Thu, 31 Oct 2019 15:48:40 +0800 [thread overview]
Message-ID: <20191031074839.GA6761@andestech.com> (raw)
In-Reply-To: <CAEUhbmXCtVUK1-JAbWFJaK4fKQmFK=OjKPtxLrf6BE0uz7wV4g@mail.gmail.com>
On Thu, Oct 31, 2019 at 11:36:48AM +0800, Bin Meng wrote:
> Hi Alan,
>
> On Thu, Oct 31, 2019 at 9:00 AM Alan Kao <alankao@andestech.com> wrote:
> >
> > Hi Bin,
> >
> > Thanks for the critics. Comments below.
> > On Wed, Oct 30, 2019 at 06:38:00PM +0800, Bin Meng wrote:
> > > Hi Rick,
> > >
> > > On Wed, Oct 30, 2019 at 10:50 AM Rick Chen <rickchen36@gmail.com> wrote:
> > > >
> > > > Hi Bin
> > > >
> > > > >
> > > > > Hi Rick,
> > > > >
> > > > > On Fri, Oct 25, 2019 at 2:18 PM Andes <uboot@andestech.com> wrote:
> > > > > >
> > > > > > From: Rick Chen <rick@andestech.com>
> > > > > >
> > > > > > It will work fine due to hart 0 always will be main
> > > > > > hart coincidentally. When develop SPL flow, I try to
> > > > > > force other harts to be main hart. And it will go
> > > > > > wrong in sending IPI flow. So fix it.
> > > > >
> > > > > Fix what? Does this commit contain 2 fixes, or just 1 fix?
> > > >
> > > > Yes, it include two fixs. But they will cause one negative result
> > > > that only hart 0 can send ipi to other harts.
> > > >
> > > > >
> > > > > >
> > > > > > Having this fix, any hart can be main hart in U-Boot SPL
> > > > > > theoretically, but it still fail somewhere. After dig in
> > > > > > and found there is an assumption that hart 0 shall be
> > > > > > main hart in OpenSbi.
> > > > >
> > > > > So does this mean there is a bug in OpenSBI too?
> > > >
> > > > I am not sure if it is a bug. Maybe it is a compatible issue.
> > > > There is a limitation that only hart 0 can be main hart in OpenSBI.
> > >
> > > I don't think OpenSBI has such limitation.
> > >
> >
> > Please check the source.
> > https://github.com/riscv/opensbi/blob/master/firmware/fw_base.S#L54
> >
> > Apparently, the FIRST TWO LINEs of the initialization are the
> > 1. get hart ID.
> > 2. determine which route to take based on their ID respectively.
> >
>
> This is true only for the very first a few instructions when OpenSBI
> boots. Later OpenSBI main initialization does not require hart to be
> zero.
>
> > So, I do think OpenSBI has this signature, if you are not willing to call it
> > a limitation.
> >
> > > > But any hart can be main hart in U-Boot.
> > > >
> > > > In general case, hart 0 will be main and it is fine when U-Boot jump ot OpenSBI.
> > > > But if we force hart 1 to be main hart, when hart 0 jump to OPenSBI from U-Boot,
> > > > It will do relocation flow in OpenSBI which willcorrupt U-Boot SPL,
> > > > but hart 0 still in U-Boot SPL.
> > > >
> > > > >
> > > > > >
> > > > > > After some work-arounds, it can pass the verifications
> > > > > > that any hart can be main hart and boots U-Boot SPL ->
> > > > > > OpenSbi -> U-Boot proper -> Linux Kernel successfully.
> > > > > >
> > > > >
> > > > > It's a bit hard for me to understand what was described here in the
> > > > > commit message. Maybe you need rewrite something.
> > > >
> > > > OK. I will rewrite this commit message.
> > > >
> > > > >
> > > > > > Signed-off-by: Rick Chen <rick@andestech.com>
> > > > > > Cc: KC Lin <kclin@andestech.com>
> > > > > > Cc: Alan Kao <alankao@andestech.com>
> > > > > > ---
> > > > > > arch/riscv/lib/andes_plic.c | 11 +++++++----
> > > > > > 1 file changed, 7 insertions(+), 4 deletions(-)
> > > > > >
> > > > > > diff --git a/arch/riscv/lib/andes_plic.c b/arch/riscv/lib/andes_plic.c
> > > > > > index 28568e4..42394b9 100644
> > > > > > --- a/arch/riscv/lib/andes_plic.c
> > > > > > +++ b/arch/riscv/lib/andes_plic.c
> > > > > > @@ -19,7 +19,7 @@
> > > > > > #include <cpu.h>
> > > > > >
> > > > > > /* pending register */
> > > > > > -#define PENDING_REG(base, hart) ((ulong)(base) + 0x1000 + (hart) * 8)
> > > > > > +#define PENDING_REG(base, hart) ((ulong)(base) + 0x1000 + ((hart) / 4) * 4)
> > > > > > /* enable register */
> > > > > > #define ENABLE_REG(base, hart) ((ulong)(base) + 0x2000 + (hart) * 0x80)
> > > > > > /* claim register */
> > > > > > @@ -46,7 +46,7 @@ static int init_plic(void);
> > > > > >
> > > > > > static int enable_ipi(int hart)
> > > > > > {
> > > > > > - int en;
> > > > > > + unsigned int en;
> > > > >
> > > > > Is this for some compiler warning fix?
> > > >
> > > > No, it is not a warning fix. It is a bug fix.
> > > > I hope en can be 0x0000000080808080 instead of 0xffffffff80808080,
> > >
> > > But it is int, which is only 32-bit. The example you gave was a 64-bit number.
> > >
> >
> > Please consider the following simple program:
> >
> > > #define MASK 0x80808080
> > >int main(){
> > > int en;
> > > en = MASK;
> > > printf("%x, shifted %x\n", en, en >> 1);
> > > return 0;
> > >}
> >
> > Would you mind sharing what you get after running this on your x86_64
> > (if you have one) computer? Really appreiciate that.
> >
> > The almost identical episode is in the patch, specifically,
> > > en = ENABLE_HART_IPI >> hart
>
> Yes, this is a bug. ...
Wait, what do you mean but "this"? What is a bug here?
If you want to be helpful, please also be specific or anyone else reviewing
this patch will be confused.
> ... But I was confused by Rick's comments as he was
> using a 64-bit number as int is never to be a 64-bit for both 32-bit
> and 64-bit.
It was just an example. Nothing to do with bit width, but just a sign-
extension issue.
>
> Regards,
> Bin
Thanks,
Alan
next prev parent reply other threads:[~2019-10-31 7:48 UTC|newest]
Thread overview: 71+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-10-25 6:10 [U-Boot] [PATCH 0/8] RISC-V AX25-AE350 support SPL Andes
2019-10-25 6:10 ` [U-Boot] [PATCH 1/8] riscv: ax25: add SPL support Andes
2019-10-29 14:29 ` Bin Meng
2019-10-30 0:42 ` Rick Chen
2019-10-30 10:06 ` Bin Meng
2019-10-31 2:11 ` Rick Chen
2019-10-25 6:10 ` [U-Boot] [PATCH 2/8] riscv: ax25-ae350: add SPL configuration Andes
2019-10-29 14:39 ` Bin Meng
2019-10-30 2:06 ` Rick Chen
2019-10-25 6:10 ` [U-Boot] [PATCH 3/8] riscv: ax25-ae350: Use generic memory size setup Andes
2019-10-29 14:42 ` Bin Meng
2019-10-30 2:19 ` Rick Chen
2019-10-25 6:10 ` [U-Boot] [PATCH 4/8] riscv: andes_plic: Fix some wrong configurations Andes
2019-10-29 14:51 ` Bin Meng
2019-10-30 2:50 ` Rick Chen
2019-10-30 10:38 ` Bin Meng
2019-10-31 1:00 ` Alan Kao
2019-10-31 3:36 ` Bin Meng
2019-10-31 7:48 ` Alan Kao [this message]
2019-10-31 8:10 ` Bin Meng
2019-10-31 8:12 ` Anup Patel
2019-10-31 10:43 ` Anup Patel
2019-11-01 5:25 ` Rick Chen
2019-11-05 1:50 ` Rick Chen
2019-11-05 6:34 ` Anup Patel
2019-11-06 6:44 ` Rick Chen
2019-11-06 8:48 ` Anup Patel
2019-11-06 8:58 ` Anup Patel
2019-11-06 9:21 ` Rick Chen
2019-11-06 11:11 ` Anup Patel
2019-11-07 1:34 ` Rick Chen
2019-11-07 5:15 ` Anup Patel
2019-11-07 5:45 ` Anup Patel
2019-11-07 6:10 ` Rick Chen
2019-11-07 6:18 ` Anup Patel
2019-11-07 9:41 ` Auer, Lukas
2019-11-07 10:44 ` Anup Patel
2019-11-07 11:41 ` Rick Chen
2019-11-07 12:22 ` Anup Patel
2019-11-08 1:23 ` Rick Chen
2019-11-08 12:14 ` Anup Patel
2019-11-07 18:44 ` Atish Patra
2019-11-08 1:13 ` Rick Chen
2019-11-08 7:27 ` Rick Chen
2019-11-08 8:59 ` Auer, Lukas
2019-11-11 7:19 ` Rick Chen
2019-11-12 9:47 ` Auer, Lukas
2019-11-13 3:42 ` Rick Chen
2019-11-14 7:27 ` Anup Patel
2019-11-14 17:10 ` Auer, Lukas
2019-11-07 11:44 ` Auer, Lukas
2019-11-07 12:27 ` Anup Patel
2019-11-07 13:37 ` Auer, Lukas
2019-10-31 2:23 ` Rick Chen
2019-10-25 6:10 ` [U-Boot] [PATCH 5/8] riscv: ax25: cache: Add SPL_RISCV_MMODE for SPL Andes
2019-10-29 14:59 ` Bin Meng
2019-10-31 2:31 ` Rick Chen
2019-10-31 3:00 ` Bin Meng
2019-10-25 6:10 ` [U-Boot] [PATCH 6/8] spl: cache: Allow cache drivers in SPL Andes
2019-10-29 15:14 ` Bin Meng
2019-10-31 2:52 ` Rick Chen
2019-10-31 3:01 ` Bin Meng
2019-10-31 3:22 ` Rick Chen
2019-10-25 6:10 ` [U-Boot] [PATCH 7/8] riscv: Fix clear bss loop in the start-up code Andes
2019-10-29 15:16 ` Bin Meng
2019-10-31 3:10 ` Rick Chen
2019-10-31 12:55 ` Bin Meng
2019-11-01 5:24 ` Rick Chen
2019-10-25 6:10 ` [U-Boot] [PATCH 8/8] riscv: dts: Support four cores SMP Andes
2019-10-29 15:17 ` Bin Meng
2019-10-31 5:57 ` Rick Chen
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=20191031074839.GA6761@andestech.com \
--to=alankao@andestech.com \
--cc=u-boot@lists.denx.de \
/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: link
Be 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.