Re: [U-Boot] [PATCH] armv8/spin_table.c: fix spin table release address
Oops, Seems like I misunderstood this approach. Thanks for the clarification! Regards, 2016-11-26 11:17 GMT+09:00 Masahiro Yamada <yamada.masah...@socionext.com>: > 2016-11-25 7:38 GMT+09:00 Tsung-Han Lin <tsunghan...@gmail.com>: > > Since only the master core will relocate itself, the spin-table release > > address seen by master core and other slave cores is different. > > This commit fixes this issue by recalculating the spin-table release > > address' offset instead of leaving it to compiler. > > No. > You should bring the slaves cores in after relocation > so that the slaves enter the *relocated* _start. > > -- > Best Regards > Masahiro Yamada > -- Tsung-Han "*Johnny*" Lin Page: http://tsunghanlin.github.com/ Email: tsunghan...@gmail.com ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] [PATCH] armv8/spin_table.c: fix spin table release address
Hi, Sorry that I sent this patch twice and they are actually the same one. I thought the first mail was failed because I got a message from the mail server said that it is not sent to one of the maintainers. Regards, Tsung-Han 2016-11-25 19:44 GMT+09:00 Tsung-Han Lin <tsunghan...@gmail.com>: > Since only the master core will relocate itself, the spin-table release > address seen by master core and other slave cores is different. > This commit fixes this issue by recalculating the spin-table release > address' offset instead of leaving it to compiler. > > Signed-off-by: Tsung-Han Lin <tsunghan...@gmail.com> > --- > arch/arm/cpu/armv8/spin_table.c | 6 +- > 1 file changed, 5 insertions(+), 1 deletion(-) > > diff --git a/arch/arm/cpu/armv8/spin_table.c b/arch/arm/cpu/armv8/spin_ > table.c > index ec1c9b8ddb6f..1169e2df5f47 100644 > --- a/arch/arm/cpu/armv8/spin_table.c > +++ b/arch/arm/cpu/armv8/spin_table.c > @@ -11,12 +11,16 @@ > > int spin_table_update_dt(void *fdt) > { > + extern unsigned long _start; > int cpus_offset, offset; > const char *prop; > int ret; > unsigned long rsv_addr = (unsigned long)_table_reserve_begin; > unsigned long rsv_size = _table_reserve_end - > _table_reserve_begin; > + unsigned long unreloc_spin_release_addr = CONFIG_SYS_TEXT_BASE + > + (unsigned long)_table_cpu_release_addr - > + (unsigned long)&_start; > > cpus_offset = fdt_path_offset(fdt, "/cpus"); > if (cpus_offset < 0) > @@ -47,7 +51,7 @@ int spin_table_update_dt(void *fdt) > continue; > > ret = fdt_setprop_u64(fdt, offset, "cpu-release-addr", > - (unsigned long)_table_cpu_release_ > addr); > + unreloc_spin_release_addr); > if (ret) > return -ENOSPC; > } > -- > 2.7.4 > > -- Tsung-Han "*Johnny*" Lin Page: http://tsunghanlin.github.com/ Email: tsunghan...@gmail.com ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
[U-Boot] [PATCH] armv8/spin_table.c: fix spin table release address
Since only the master core will relocate itself, the spin-table release address seen by master core and other slave cores is different. This commit fixes this issue by recalculating the spin-table release address' offset instead of leaving it to compiler. Signed-off-by: Tsung-Han Lin <tsunghan...@gmail.com> --- arch/arm/cpu/armv8/spin_table.c | 6 +- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/arch/arm/cpu/armv8/spin_table.c b/arch/arm/cpu/armv8/spin_table.c index ec1c9b8ddb6f..1169e2df5f47 100644 --- a/arch/arm/cpu/armv8/spin_table.c +++ b/arch/arm/cpu/armv8/spin_table.c @@ -11,12 +11,16 @@ int spin_table_update_dt(void *fdt) { + extern unsigned long _start; int cpus_offset, offset; const char *prop; int ret; unsigned long rsv_addr = (unsigned long)_table_reserve_begin; unsigned long rsv_size = _table_reserve_end - _table_reserve_begin; + unsigned long unreloc_spin_release_addr = CONFIG_SYS_TEXT_BASE + + (unsigned long)_table_cpu_release_addr - + (unsigned long)&_start; cpus_offset = fdt_path_offset(fdt, "/cpus"); if (cpus_offset < 0) @@ -47,7 +51,7 @@ int spin_table_update_dt(void *fdt) continue; ret = fdt_setprop_u64(fdt, offset, "cpu-release-addr", - (unsigned long)_table_cpu_release_addr); + unreloc_spin_release_addr); if (ret) return -ENOSPC; } -- 2.7.4 ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
[U-Boot] [PATCH] armv8/spin_table.c: fix spin table release address
Since only the master core will relocate itself, the spin-table release address seen by master core and other slave cores is different. This commit fixes this issue by recalculating the spin-table release address' offset instead of leaving it to compiler. Signed-off-by: Tsung-Han Lin <tsunghan...@gmail.com> --- arch/arm/cpu/armv8/spin_table.c | 6 +- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/arch/arm/cpu/armv8/spin_table.c b/arch/arm/cpu/armv8/spin_table.c index ec1c9b8ddb6f..1169e2df5f47 100644 --- a/arch/arm/cpu/armv8/spin_table.c +++ b/arch/arm/cpu/armv8/spin_table.c @@ -11,12 +11,16 @@ int spin_table_update_dt(void *fdt) { + extern unsigned long _start; int cpus_offset, offset; const char *prop; int ret; unsigned long rsv_addr = (unsigned long)_table_reserve_begin; unsigned long rsv_size = _table_reserve_end - _table_reserve_begin; + unsigned long unreloc_spin_release_addr = CONFIG_SYS_TEXT_BASE + + (unsigned long)_table_cpu_release_addr - + (unsigned long)&_start; cpus_offset = fdt_path_offset(fdt, "/cpus"); if (cpus_offset < 0) @@ -47,7 +51,7 @@ int spin_table_update_dt(void *fdt) continue; ret = fdt_setprop_u64(fdt, offset, "cpu-release-addr", - (unsigned long)_table_cpu_release_addr); + unreloc_spin_release_addr); if (ret) return -ENOSPC; } -- 2.7.4 ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot