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 |
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
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 --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