diff mbox series

[RFC,v7,1/2] riscv: cpu: Add callback to init each core

Message ID 20210422091809.401071-2-green.wan@sifive.com
State Superseded
Delegated to: Andes
Headers show
Series riscv: cpu: Add callback to init each core | expand

Commit Message

Green Wan April 22, 2021, 9:18 a.m. UTC
Add a callback harts_early_init() to start.S to allow different riscv
hart perform setup code for each hart as early as possible. Since all
the harts enter the callback, they must be able to run the same
setup.

Signed-off-by: Green Wan <green.wan@sifive.com>
Reviewed-by: Rick Chen <rick@andestech.com>
---
 arch/riscv/cpu/cpu.c   | 11 +++++++++++
 arch/riscv/cpu/start.S |  6 ++++++
 2 files changed, 17 insertions(+)

Comments

Bin Meng May 1, 2021, 11:55 a.m. UTC | #1
Hi Green,

On Thu, Apr 22, 2021 at 5:18 PM Green Wan <green.wan@sifive.com> wrote:
>
> Add a callback harts_early_init() to start.S to allow different riscv
> hart perform setup code for each hart as early as possible. Since all
> the harts enter the callback, they must be able to run the same
> setup.
>
> Signed-off-by: Green Wan <green.wan@sifive.com>
> Reviewed-by: Rick Chen <rick@andestech.com>
> ---
>  arch/riscv/cpu/cpu.c   | 11 +++++++++++
>  arch/riscv/cpu/start.S |  6 ++++++
>  2 files changed, 17 insertions(+)
>
> diff --git a/arch/riscv/cpu/cpu.c b/arch/riscv/cpu/cpu.c
> index 85592f5bee..43c086ca19 100644
> --- a/arch/riscv/cpu/cpu.c
> +++ b/arch/riscv/cpu/cpu.c
> @@ -140,3 +140,14 @@ int arch_early_init_r(void)
>  {
>         return riscv_cpu_probe();
>  }
> +
> +/**
> + * harts_early_init() - A callback function called by start.S to configure
> + * feature settings of each hart.
> + *
> + * In a multi-core system, memory access shall be careful here, it shall
> + * take care race conditions.

nits: take care of

> + */
> +__weak void harts_early_init(void)
> +{
> +}
> diff --git a/arch/riscv/cpu/start.S b/arch/riscv/cpu/start.S
> index 8589509e01..bdd5517bca 100644
> --- a/arch/riscv/cpu/start.S
> +++ b/arch/riscv/cpu/start.S
> @@ -117,6 +117,12 @@ call_board_init_f_0:
>         mv      sp, a0
>  #endif
>
> +       /*
> +        * Configure proprietary settings and customized CRSs of harts

nits: use single line comment if this does exceed 80 characters

CRSs => CSRs

> +        */
> +call_harts_early_init:
> +       jal     harts_early_init
> +
>  #ifndef CONFIG_XIP
>         /*
>          * Pick hart to initialize global data and run U-Boot. The other harts
> --

Otherwise,
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>

I think you can remove the RFC tag in the next version.

Regards,
Bin
Green Wan May 1, 2021, 11:57 a.m. UTC | #2
Thanks for the review. Will fix the issues and remove the RFC.

- Green

Bin Meng <bmeng.cn@gmail.com>於 2021年5月1日 週六,下午7:55寫道:

> Hi Green,
>
> On Thu, Apr 22, 2021 at 5:18 PM Green Wan <green.wan@sifive.com> wrote:
> >
> > Add a callback harts_early_init() to start.S to allow different riscv
> > hart perform setup code for each hart as early as possible. Since all
> > the harts enter the callback, they must be able to run the same
> > setup.
> >
> > Signed-off-by: Green Wan <green.wan@sifive.com>
> > Reviewed-by: Rick Chen <rick@andestech.com>
> > ---
> >  arch/riscv/cpu/cpu.c   | 11 +++++++++++
> >  arch/riscv/cpu/start.S |  6 ++++++
> >  2 files changed, 17 insertions(+)
> >
> > diff --git a/arch/riscv/cpu/cpu.c b/arch/riscv/cpu/cpu.c
> > index 85592f5bee..43c086ca19 100644
> > --- a/arch/riscv/cpu/cpu.c
> > +++ b/arch/riscv/cpu/cpu.c
> > @@ -140,3 +140,14 @@ int arch_early_init_r(void)
> >  {
> >         return riscv_cpu_probe();
> >  }
> > +
> > +/**
> > + * harts_early_init() - A callback function called by start.S to
> configure
> > + * feature settings of each hart.
> > + *
> > + * In a multi-core system, memory access shall be careful here, it shall
> > + * take care race conditions.
>
> nits: take care of
>
> > + */
> > +__weak void harts_early_init(void)
> > +{
> > +}
> > diff --git a/arch/riscv/cpu/start.S b/arch/riscv/cpu/start.S
> > index 8589509e01..bdd5517bca 100644
> > --- a/arch/riscv/cpu/start.S
> > +++ b/arch/riscv/cpu/start.S
> > @@ -117,6 +117,12 @@ call_board_init_f_0:
> >         mv      sp, a0
> >  #endif
> >
> > +       /*
> > +        * Configure proprietary settings and customized CRSs of harts
>
> nits: use single line comment if this does exceed 80 characters
>
> CRSs => CSRs
>
> > +        */
> > +call_harts_early_init:
> > +       jal     harts_early_init
> > +
> >  #ifndef CONFIG_XIP
> >         /*
> >          * Pick hart to initialize global data and run U-Boot. The other
> harts
> > --
>
> Otherwise,
> Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
>
> I think you can remove the RFC tag in the next version.
>
> Regards,
> Bin
>
diff mbox series

Patch

diff --git a/arch/riscv/cpu/cpu.c b/arch/riscv/cpu/cpu.c
index 85592f5bee..43c086ca19 100644
--- a/arch/riscv/cpu/cpu.c
+++ b/arch/riscv/cpu/cpu.c
@@ -140,3 +140,14 @@  int arch_early_init_r(void)
 {
 	return riscv_cpu_probe();
 }
+
+/**
+ * harts_early_init() - A callback function called by start.S to configure
+ * feature settings of each hart.
+ *
+ * In a multi-core system, memory access shall be careful here, it shall
+ * take care race conditions.
+ */
+__weak void harts_early_init(void)
+{
+}
diff --git a/arch/riscv/cpu/start.S b/arch/riscv/cpu/start.S
index 8589509e01..bdd5517bca 100644
--- a/arch/riscv/cpu/start.S
+++ b/arch/riscv/cpu/start.S
@@ -117,6 +117,12 @@  call_board_init_f_0:
 	mv	sp, a0
 #endif
 
+	/*
+	 * Configure proprietary settings and customized CRSs of harts
+	 */
+call_harts_early_init:
+	jal	harts_early_init
+
 #ifndef CONFIG_XIP
 	/*
 	 * Pick hart to initialize global data and run U-Boot. The other harts