diff mbox

[U-Boot,3/8] ARMv8/fsl-lsch3: Refactor spin-table code

Message ID 1409171401-22616-4-git-send-email-arnab.basu@freescale.com
State Changes Requested
Delegated to: Albert ARIBAUD
Headers show

Commit Message

Arnab Basu Aug. 27, 2014, 8:29 p.m. UTC
This creates the function cpu_update_dt for ARMv8 which currently patches
the cpu node in the device table and sets enable-method to spin-table.

Signed-off-by: Arnab Basu <arnab.basu@freescale.com>
Reviewed-by: Bhupesh Sharma <bhupesh.sharma@freescale.com>
Cc: York Sun <yorksun@freescale.com>
---
 arch/arm/cpu/armv8/Makefile                      |    1 +
 arch/arm/cpu/armv8/{fsl-lsch3/fdt.c => cpu-dt.c} |   37 ++++++++++--------
 arch/arm/cpu/armv8/fsl-lsch3/fdt.c               |   46 ++++++++--------------
 3 files changed, 38 insertions(+), 46 deletions(-)
 copy arch/arm/cpu/armv8/{fsl-lsch3/fdt.c => cpu-dt.c} (62%)

Comments

Albert ARIBAUD Oct. 26, 2014, 9:06 p.m. UTC | #1
Hello Arnab,

On Thu, 28 Aug 2014 01:59:56 +0530, Arnab Basu
<arnab.basu@freescale.com> wrote:
> This creates the function cpu_update_dt for ARMv8 which currently
> patches the cpu node in the device table and sets enable-method to
> spin-table.
> 
> Signed-off-by: Arnab Basu <arnab.basu@freescale.com>
> Reviewed-by: Bhupesh Sharma <bhupesh.sharma@freescale.com>
> Cc: York Sun <yorksun@freescale.com>
> ---

This patch fails to apply cleanly. Can you please rebase the series on
top of current u-boot/master?

Amicalement,
Arnab Basu Oct. 27, 2014, 4:51 a.m. UTC | #2
Hi Albert

> -----Original Message-----
> From: Albert ARIBAUD [mailto:albert.u.boot@aribaud.net]
> Sent: Monday, October 27, 2014 2:36 AM
> To: Basu Arnab-B45036
> Cc: marc.zyngier@arm.com; mark.rutland@arm.com; Sun York-R58495; Yoder
> Stuart-B08248; u-boot@lists.denx.de
> Subject: Re: [U-Boot] [PATCH 3/8] ARMv8/fsl-lsch3: Refactor spin-table
> code
> 
> Hello Arnab,
> 
> On Thu, 28 Aug 2014 01:59:56 +0530, Arnab Basu <arnab.basu@freescale.com>
> wrote:
> > This creates the function cpu_update_dt for ARMv8 which currently
> > patches the cpu node in the device table and sets enable-method to
> > spin-table.
> >
> > Signed-off-by: Arnab Basu <arnab.basu@freescale.com>
> > Reviewed-by: Bhupesh Sharma <bhupesh.sharma@freescale.com>
> > Cc: York Sun <yorksun@freescale.com>
> > ---
> 
> This patch fails to apply cleanly. Can you please rebase the series on
> top of current u-boot/master?

Yes, in fact I need to rework some of the other patches in the series too.
I got a little side tracked, hence the delay. I will get on this..

Thanks
Arnab

> 
> Amicalement,
> --
> Albert.
diff mbox

Patch

diff --git a/arch/arm/cpu/armv8/Makefile b/arch/arm/cpu/armv8/Makefile
index 7d93f59..4f0ea87 100644
--- a/arch/arm/cpu/armv8/Makefile
+++ b/arch/arm/cpu/armv8/Makefile
@@ -14,3 +14,4 @@  obj-y	+= exceptions.o
 obj-y	+= cache.o
 obj-y	+= tlb.o
 obj-y	+= transition.o
+obj-y	+= cpu-dt.o
diff --git a/arch/arm/cpu/armv8/fsl-lsch3/fdt.c b/arch/arm/cpu/armv8/cpu-dt.c
similarity index 62%
copy from arch/arm/cpu/armv8/fsl-lsch3/fdt.c
copy to arch/arm/cpu/armv8/cpu-dt.c
index 2dbcdcb..9792bc0 100644
--- a/arch/arm/cpu/armv8/fsl-lsch3/fdt.c
+++ b/arch/arm/cpu/armv8/cpu-dt.c
@@ -7,17 +7,24 @@ 
 #include <common.h>
 #include <libfdt.h>
 #include <fdt_support.h>
-#include "mp.h"
 
 #ifdef CONFIG_MP
-void ft_fixup_cpu(void *blob)
+
+__weak u64 arch_get_release_addr(u64 cpu_id)
+{
+	return 0;
+}
+
+__weak void arch_spin_table_reserve_mem(void *fdt)
+{
+}
+
+static void cpu_update_dt_spin_table(void *blob)
 {
 	int off;
-	__maybe_unused u64 spin_tbl_addr = (u64)get_spin_tbl_addr();
-	fdt32_t *reg;
+	__maybe_unused u64 val;
 	int addr_cells;
-	u64 val;
-	size_t *boot_code_size = &(__secondary_boot_code_size);
+	__maybe_unused fdt32_t *reg;
 
 	off = fdt_node_offset_by_prop_value(blob, -1, "device_type", "cpus", 4);
 	of_bus_default_count_cells(blob, off, &addr_cells, NULL);
@@ -26,31 +33,29 @@  void ft_fixup_cpu(void *blob)
 	while (off != -FDT_ERR_NOTFOUND) {
 		reg = (fdt32_t *)fdt_getprop(blob, off, "reg", 0);
 		if (reg) {
-			val = spin_tbl_addr;
-#ifndef CONFIG_FSL_SMP_RELEASE_ALL
-			val += id_to_core(of_read_number(reg, addr_cells))
-				* SPIN_TABLE_ELEM_SIZE;
-#endif
+			val = arch_get_release_addr(
+					of_read_number(reg, addr_cells));
 			val = cpu_to_fdt64(val);
 			fdt_setprop_string(blob, off, "enable-method",
 					   "spin-table");
 			fdt_setprop(blob, off, "cpu-release-addr",
 				    &val, sizeof(val));
 		} else {
-			puts("cpu NULL\n");
+			puts("Unable to read reg property\n");
 		}
+
 		off = fdt_node_offset_by_prop_value(blob, off, "device_type",
 						    "cpu", 4);
 	}
 
-	fdt_add_mem_rsv(blob, (uintptr_t)&secondary_boot_code,
-			*boot_code_size);
+	arch_spin_table_reserve_mem(blob);
 }
 #endif
 
-void ft_cpu_setup(void *blob, bd_t *bd)
+int cpu_update_dt(void *fdt)
 {
 #ifdef CONFIG_MP
-	ft_fixup_cpu(blob);
+	cpu_update_dt_spin_table(fdt);
 #endif
+	return 0;
 }
diff --git a/arch/arm/cpu/armv8/fsl-lsch3/fdt.c b/arch/arm/cpu/armv8/fsl-lsch3/fdt.c
index 2dbcdcb..bb35393 100644
--- a/arch/arm/cpu/armv8/fsl-lsch3/fdt.c
+++ b/arch/arm/cpu/armv8/fsl-lsch3/fdt.c
@@ -10,42 +10,28 @@ 
 #include "mp.h"
 
 #ifdef CONFIG_MP
-void ft_fixup_cpu(void *blob)
+u64 arch_get_release_addr(u64 cpu_id)
 {
-	int off;
-	__maybe_unused u64 spin_tbl_addr = (u64)get_spin_tbl_addr();
-	fdt32_t *reg;
-	int addr_cells;
 	u64 val;
+
+	val = (u64)get_spin_tbl_addr();
+	val += id_to_core(cpu_id) * SPIN_TABLE_ELEM_SIZE;
+
+	return val;
+}
+
+void arch_spin_table_reserve_mem(void *fdt)
+{
 	size_t *boot_code_size = &(__secondary_boot_code_size);
 
-	off = fdt_node_offset_by_prop_value(blob, -1, "device_type", "cpus", 4);
-	of_bus_default_count_cells(blob, off, &addr_cells, NULL);
-
-	off = fdt_node_offset_by_prop_value(blob, -1, "device_type", "cpu", 4);
-	while (off != -FDT_ERR_NOTFOUND) {
-		reg = (fdt32_t *)fdt_getprop(blob, off, "reg", 0);
-		if (reg) {
-			val = spin_tbl_addr;
-#ifndef CONFIG_FSL_SMP_RELEASE_ALL
-			val += id_to_core(of_read_number(reg, addr_cells))
-				* SPIN_TABLE_ELEM_SIZE;
-#endif
-			val = cpu_to_fdt64(val);
-			fdt_setprop_string(blob, off, "enable-method",
-					   "spin-table");
-			fdt_setprop(blob, off, "cpu-release-addr",
-				    &val, sizeof(val));
-		} else {
-			puts("cpu NULL\n");
-		}
-		off = fdt_node_offset_by_prop_value(blob, off, "device_type",
-						    "cpu", 4);
-	}
-
-	fdt_add_mem_rsv(blob, (uintptr_t)&secondary_boot_code,
+	fdt_add_mem_rsv(fdt, (uintptr_t)&secondary_boot_code,
 			*boot_code_size);
 }
+
+static void ft_fixup_cpu(void *blob)
+{
+}
+
 #endif
 
 void ft_cpu_setup(void *blob, bd_t *bd)