* [U-Boot] [PATCH 1/2] armv8: ls1043a: modify the detecting way to cover all variants
@ 2017-11-30 2:57 Wenbin song
2017-11-30 2:57 ` [U-Boot] [PATCH 2/2] armv8: ls1043a: Discard the needless cpu nodes Wenbin song
0 siblings, 1 reply; 6+ messages in thread
From: Wenbin song @ 2017-11-30 2:57 UTC (permalink / raw)
To: u-boot
There are many variants for ls1043a. Modify the detecting way to
make that the below fixup apply to all variants of ls1043a.
- Fix GIC offset for rev1.1
- Fix msi node for rev1.1
- erratum_a010151
Signed-off-by: Wenbin Song <wenbin.song@nxp.com>
---
arch/arm/cpu/armv8/fsl-layerscape/fdt.c | 4 ++--
arch/arm/cpu/armv8/fsl-layerscape/lowlevel.S | 5 ++---
arch/arm/include/asm/arch-fsl-layerscape/soc.h | 3 +++
drivers/usb/common/fsl-errata.c | 7 +++++--
4 files changed, 12 insertions(+), 7 deletions(-)
diff --git a/arch/arm/cpu/armv8/fsl-layerscape/fdt.c b/arch/arm/cpu/armv8/fsl-layerscape/fdt.c
index d6794708c9..33f3e64848 100644
--- a/arch/arm/cpu/armv8/fsl-layerscape/fdt.c
+++ b/arch/arm/cpu/armv8/fsl-layerscape/fdt.c
@@ -147,7 +147,7 @@ static void fdt_fixup_gic(void *blob)
val = gur_in32(&gur->svr);
- if (SVR_SOC_VER(val) != SVR_LS1043A) {
+ if (!IS_SVR_DEV(val, SVR_DEV_LS1043A)) {
align_64k = 1;
} else if (SVR_REV(val) != REV1_0) {
val = scfg_in32(&scfg->gic_align) & (0x01 << GIC_ADDR_BIT);
@@ -329,7 +329,7 @@ static void fdt_fixup_msi(void *blob)
rev = gur_in32(&gur->svr);
- if (SVR_SOC_VER(rev) != SVR_LS1043A)
+ if (!IS_SVR_DEV(rev, SVR_DEV_LS1043A))
return;
rev = SVR_REV(rev);
diff --git a/arch/arm/cpu/armv8/fsl-layerscape/lowlevel.S b/arch/arm/cpu/armv8/fsl-layerscape/lowlevel.S
index 28a31b21a9..666e842b99 100644
--- a/arch/arm/cpu/armv8/fsl-layerscape/lowlevel.S
+++ b/arch/arm/cpu/armv8/fsl-layerscape/lowlevel.S
@@ -37,9 +37,8 @@ ENTRY(get_gic_offset)
ldr x2, =DCFG_CCSR_SVR
ldr w2, [x2]
rev w2, w2
- mov w3, w2
- ands w3, w3, #SVR_WO_E << 8
- mov w4, #SVR_LS1043A << 8
+ lsr w3, w2, #16
+ ldr w4, =SVR_DEV_LS1043A
cmp w3, w4
b.ne 1f
ands w2, w2, #0xff
diff --git a/arch/arm/include/asm/arch-fsl-layerscape/soc.h b/arch/arm/include/asm/arch-fsl-layerscape/soc.h
index 08a42b9c9e..7c189530c1 100644
--- a/arch/arm/include/asm/arch-fsl-layerscape/soc.h
+++ b/arch/arm/include/asm/arch-fsl-layerscape/soc.h
@@ -73,6 +73,7 @@ struct cpu_type {
#define SVR_LS2041A 0x870914
#define SVR_DEV_LS2080A 0x8701
+#define SVR_DEV_LS1043A 0x8792
#define SVR_MAJ(svr) (((svr) >> 4) & 0xf)
#define SVR_MIN(svr) (((svr) >> 0) & 0xf)
@@ -81,6 +82,8 @@ struct cpu_type {
#define IS_E_PROCESSOR(svr) (!((svr >> 8) & 0x1))
#define IS_SVR_REV(svr, maj, min) \
((SVR_MAJ(svr) == (maj)) && (SVR_MIN(svr) == (min)))
+#define IS_SVR_DEV(svr, dev) \
+ (((svr) >> 16) == (dev))
/* ahci port register default value */
#define AHCI_PORT_PHY_1_CFG 0xa003fffe
diff --git a/drivers/usb/common/fsl-errata.c b/drivers/usb/common/fsl-errata.c
index 823beb32f6..c20c9a3567 100644
--- a/drivers/usb/common/fsl-errata.c
+++ b/drivers/usb/common/fsl-errata.c
@@ -198,6 +198,11 @@ bool has_erratum_a010151(void)
u32 svr = get_svr();
u32 soc = SVR_SOC_VER(svr);
+#ifdef CONFIG_ARM64
+ if (IS_SVR_DEV(svr, SVR_DEV_LS1043A))
+ return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 1, 1);
+#endif
+
switch (soc) {
#ifdef CONFIG_ARM64
case SVR_LS2080A:
@@ -209,8 +214,6 @@ bool has_erratum_a010151(void)
case SVR_LS1046A:
case SVR_LS1012A:
return IS_SVR_REV(svr, 1, 0);
- case SVR_LS1043A:
- return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 1, 1);
#endif
#ifdef CONFIG_ARCH_LS1021A
case SOC_VER_LS1020:
--
2.14.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [U-Boot] [PATCH 2/2] armv8: ls1043a: Discard the needless cpu nodes
2017-11-30 2:57 [U-Boot] [PATCH 1/2] armv8: ls1043a: modify the detecting way to cover all variants Wenbin song
@ 2017-11-30 2:57 ` Wenbin song
2017-11-30 4:55 ` Prabhakar Kushwaha
2017-11-30 17:41 ` York Sun
0 siblings, 2 replies; 6+ messages in thread
From: Wenbin song @ 2017-11-30 2:57 UTC (permalink / raw)
To: u-boot
Using "cpu_pos_mask()" function to detect the real online cpus,
and discard the needless cpu nodes on kernel dft.
Signed-off-by: Wenbin Song <wenbin.song@nxp.com>
---
arch/arm/cpu/armv8/fsl-layerscape/Kconfig | 4 ++++
arch/arm/cpu/armv8/fsl-layerscape/fdt.c | 32 +++++++++++++++++++++++++++++++
2 files changed, 36 insertions(+)
diff --git a/arch/arm/cpu/armv8/fsl-layerscape/Kconfig b/arch/arm/cpu/armv8/fsl-layerscape/Kconfig
index 47145a2432..971a98c6cc 100644
--- a/arch/arm/cpu/armv8/fsl-layerscape/Kconfig
+++ b/arch/arm/cpu/armv8/fsl-layerscape/Kconfig
@@ -176,6 +176,10 @@ config HAS_FEATURE_ENHANCED_MSI
bool
default y if ARCH_LS1043A
+config DISCARD_OFFLINE_CPU_NODES
+ bool
+ default y if ARCH_LS1043A
+
menu "Layerscape PPA"
config FSL_LS_PPA
bool "FSL Layerscape PPA firmware support"
diff --git a/arch/arm/cpu/armv8/fsl-layerscape/fdt.c b/arch/arm/cpu/armv8/fsl-layerscape/fdt.c
index 33f3e64848..241f0abe18 100644
--- a/arch/arm/cpu/armv8/fsl-layerscape/fdt.c
+++ b/arch/arm/cpu/armv8/fsl-layerscape/fdt.c
@@ -44,6 +44,38 @@ void ft_fixup_cpu(void *blob)
int addr_cells;
u64 val, core_id;
size_t *boot_code_size = &(__secondary_boot_code_size);
+
+#if defined(CONFIG_DISCARD_OFFLINE_CPU_NODES)
+ u32 mask = cpu_pos_mask();
+ int off_prev = -1;
+ int pos;
+
+ off = fdt_path_offset(blob, "/cpus");
+ if (off < 0) {
+ puts("couldn't find /cpus node\n");
+ return;
+ }
+
+ fdt_support_default_count_cells(blob, off, &addr_cells, NULL);
+
+ off = fdt_node_offset_by_prop_value(blob, off_prev, "device_type",
+ "cpu", 4);
+ while (off != -FDT_ERR_NOTFOUND) {
+ reg = (fdt32_t *)fdt_getprop(blob, off, "reg", 0);
+ if (reg) {
+ core_id = fdt_read_number(reg, addr_cells);
+ pos = ((core_id & 0xff00) >> 5) + (core_id & 0xff);
+ if (!test_bit(pos, &mask)) {
+ fdt_del_node(blob, off);
+ off = off_prev;
+ }
+ }
+ off_prev = off;
+ off = fdt_node_offset_by_prop_value(blob, off_prev,
+ "device_type", "cpu", 4);
+ }
+#endif
+
#if defined(CONFIG_ARMV8_SEC_FIRMWARE_SUPPORT) && \
defined(CONFIG_SEC_FIRMWARE_ARMV8_PSCI)
int node;
--
2.14.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [U-Boot] [PATCH 2/2] armv8: ls1043a: Discard the needless cpu nodes
2017-11-30 2:57 ` [U-Boot] [PATCH 2/2] armv8: ls1043a: Discard the needless cpu nodes Wenbin song
@ 2017-11-30 4:55 ` Prabhakar Kushwaha
2017-11-30 9:56 ` Wenbin Song
2017-11-30 17:41 ` York Sun
1 sibling, 1 reply; 6+ messages in thread
From: Prabhakar Kushwaha @ 2017-11-30 4:55 UTC (permalink / raw)
To: u-boot
> -----Original Message-----
> From: Wenbin song [mailto:wenbin.song at nxp.com]
> Sent: Thursday, November 30, 2017 8:27 AM
> To: York Sun <york.sun@nxp.com>; Prabhakar Kushwaha
> <prabhakar.kushwaha@nxp.com>; Ran Wang <ran.wang_1@nxp.com>; Mingkai
> Hu <mingkai.hu@nxp.com>; u-boot at lists.denx.de
> Cc: Wenbin Song <wenbin.song@nxp.com>
> Subject: [PATCH 2/2] armv8: ls1043a: Discard the needless cpu nodes
>
> Using "cpu_pos_mask()" function to detect the real online cpus,
> and discard the needless cpu nodes on kernel dft.
>
> Signed-off-by: Wenbin Song <wenbin.song@nxp.com>
> ---
> arch/arm/cpu/armv8/fsl-layerscape/Kconfig | 4 ++++
> arch/arm/cpu/armv8/fsl-layerscape/fdt.c | 32
> +++++++++++++++++++++++++++++++
> 2 files changed, 36 insertions(+)
>
> diff --git a/arch/arm/cpu/armv8/fsl-layerscape/Kconfig
> b/arch/arm/cpu/armv8/fsl-layerscape/Kconfig
> index 47145a2432..971a98c6cc 100644
> --- a/arch/arm/cpu/armv8/fsl-layerscape/Kconfig
> +++ b/arch/arm/cpu/armv8/fsl-layerscape/Kconfig
> @@ -176,6 +176,10 @@ config HAS_FEATURE_ENHANCED_MSI
> bool
> default y if ARCH_LS1043A
>
> +config DISCARD_OFFLINE_CPU_NODES
> + bool
> + default y if ARCH_LS1043A
> +
As per understanding this feature is for taking care of SoC personalities with reduced cores.
Why a new config is required? Why cannot this be taken care at run time by reading SVR.
-pk
^ permalink raw reply [flat|nested] 6+ messages in thread
* [U-Boot] [PATCH 2/2] armv8: ls1043a: Discard the needless cpu nodes
2017-11-30 4:55 ` Prabhakar Kushwaha
@ 2017-11-30 9:56 ` Wenbin Song
0 siblings, 0 replies; 6+ messages in thread
From: Wenbin Song @ 2017-11-30 9:56 UTC (permalink / raw)
To: u-boot
Hi Prabhakar,
In my opinion, this is a common feature for all Layerscapes. As I know, all chips belonged to Layerscape have the capacity to disable some cores, just like ls1043a /ls1023a.
If we will support another variant in the future, for example: ls1046a/ls1026a, just configure it rather than modify the codes.
Am I correct?
Best Regards
Wenbin Song
-----Original Message-----
From: Prabhakar Kushwaha
Sent: Thursday, November 30, 2017 12:56 PM
To: Wenbin Song <wenbin.song@nxp.com>; York Sun <york.sun@nxp.com>; Ran Wang <ran.wang_1@nxp.com>; Mingkai Hu <mingkai.hu@nxp.com>; u-boot at lists.denx.de
Cc: Wenbin Song <wenbin.song@nxp.com>
Subject: RE: [PATCH 2/2] armv8: ls1043a: Discard the needless cpu nodes
> -----Original Message-----
> From: Wenbin song [mailto:wenbin.song at nxp.com]
> Sent: Thursday, November 30, 2017 8:27 AM
> To: York Sun <york.sun@nxp.com>; Prabhakar Kushwaha
> <prabhakar.kushwaha@nxp.com>; Ran Wang <ran.wang_1@nxp.com>; Mingkai
> Hu <mingkai.hu@nxp.com>; u-boot at lists.denx.de
> Cc: Wenbin Song <wenbin.song@nxp.com>
> Subject: [PATCH 2/2] armv8: ls1043a: Discard the needless cpu nodes
>
> Using "cpu_pos_mask()" function to detect the real online cpus, and
> discard the needless cpu nodes on kernel dft.
>
> Signed-off-by: Wenbin Song <wenbin.song@nxp.com>
> ---
> arch/arm/cpu/armv8/fsl-layerscape/Kconfig | 4 ++++
> arch/arm/cpu/armv8/fsl-layerscape/fdt.c | 32
> +++++++++++++++++++++++++++++++
> 2 files changed, 36 insertions(+)
>
> diff --git a/arch/arm/cpu/armv8/fsl-layerscape/Kconfig
> b/arch/arm/cpu/armv8/fsl-layerscape/Kconfig
> index 47145a2432..971a98c6cc 100644
> --- a/arch/arm/cpu/armv8/fsl-layerscape/Kconfig
> +++ b/arch/arm/cpu/armv8/fsl-layerscape/Kconfig
> @@ -176,6 +176,10 @@ config HAS_FEATURE_ENHANCED_MSI
> bool
> default y if ARCH_LS1043A
>
> +config DISCARD_OFFLINE_CPU_NODES
> + bool
> + default y if ARCH_LS1043A
> +
As per understanding this feature is for taking care of SoC personalities with reduced cores.
Why a new config is required? Why cannot this be taken care at run time by reading SVR.
-pk
^ permalink raw reply [flat|nested] 6+ messages in thread
* [U-Boot] [PATCH 2/2] armv8: ls1043a: Discard the needless cpu nodes
2017-11-30 2:57 ` [U-Boot] [PATCH 2/2] armv8: ls1043a: Discard the needless cpu nodes Wenbin song
2017-11-30 4:55 ` Prabhakar Kushwaha
@ 2017-11-30 17:41 ` York Sun
2017-12-01 6:55 ` Wenbin Song
1 sibling, 1 reply; 6+ messages in thread
From: York Sun @ 2017-11-30 17:41 UTC (permalink / raw)
To: u-boot
On 11/29/2017 07:16 PM, Wenbin song wrote:
> Using "cpu_pos_mask()" function to detect the real online cpus,
> and discard the needless cpu nodes on kernel dft.
>
> Signed-off-by: Wenbin Song <wenbin.song@nxp.com>
> ---
> arch/arm/cpu/armv8/fsl-layerscape/Kconfig | 4 ++++
> arch/arm/cpu/armv8/fsl-layerscape/fdt.c | 32 +++++++++++++++++++++++++++++++
> 2 files changed, 36 insertions(+)
>
> diff --git a/arch/arm/cpu/armv8/fsl-layerscape/Kconfig b/arch/arm/cpu/armv8/fsl-layerscape/Kconfig
> index 47145a2432..971a98c6cc 100644
> --- a/arch/arm/cpu/armv8/fsl-layerscape/Kconfig
> +++ b/arch/arm/cpu/armv8/fsl-layerscape/Kconfig
> @@ -176,6 +176,10 @@ config HAS_FEATURE_ENHANCED_MSI
> bool
> default y if ARCH_LS1043A
>
> +config DISCARD_OFFLINE_CPU_NODES
> + bool
> + default y if ARCH_LS1043A
> +
> menu "Layerscape PPA"
> config FSL_LS_PPA
> bool "FSL Layerscape PPA firmware support"
> diff --git a/arch/arm/cpu/armv8/fsl-layerscape/fdt.c b/arch/arm/cpu/armv8/fsl-layerscape/fdt.c
> index 33f3e64848..241f0abe18 100644
> --- a/arch/arm/cpu/armv8/fsl-layerscape/fdt.c
> +++ b/arch/arm/cpu/armv8/fsl-layerscape/fdt.c
> @@ -44,6 +44,38 @@ void ft_fixup_cpu(void *blob)
> int addr_cells;
> u64 val, core_id;
> size_t *boot_code_size = &(__secondary_boot_code_size);
> +
> +#if defined(CONFIG_DISCARD_OFFLINE_CPU_NODES)
> + u32 mask = cpu_pos_mask();
> + int off_prev = -1;
> + int pos;
> +
> + off = fdt_path_offset(blob, "/cpus");
> + if (off < 0) {
> + puts("couldn't find /cpus node\n");
> + return;
> + }
> +
> + fdt_support_default_count_cells(blob, off, &addr_cells, NULL);
> +
> + off = fdt_node_offset_by_prop_value(blob, off_prev, "device_type",
> + "cpu", 4);
> + while (off != -FDT_ERR_NOTFOUND) {
> + reg = (fdt32_t *)fdt_getprop(blob, off, "reg", 0);
> + if (reg) {
> + core_id = fdt_read_number(reg, addr_cells);
> + pos = ((core_id & 0xff00) >> 5) + (core_id & 0xff);
> + if (!test_bit(pos, &mask)) {
> + fdt_del_node(blob, off);
> + off = off_prev;
> + }
> + }
> + off_prev = off;
> + off = fdt_node_offset_by_prop_value(blob, off_prev,
> + "device_type", "cpu", 4);
> + }
> +#endif
> +
> #if defined(CONFIG_ARMV8_SEC_FIRMWARE_SUPPORT) && \
> defined(CONFIG_SEC_FIRMWARE_ARMV8_PSCI)
> int node;
>
Wenbin,
Using topology registers to identify the existence of cores is correct.
Do you need the new config option to gate the code? It is a correct
operation for all SoCs, isn't it?
York
^ permalink raw reply [flat|nested] 6+ messages in thread
* [U-Boot] [PATCH 2/2] armv8: ls1043a: Discard the needless cpu nodes
2017-11-30 17:41 ` York Sun
@ 2017-12-01 6:55 ` Wenbin Song
0 siblings, 0 replies; 6+ messages in thread
From: Wenbin Song @ 2017-12-01 6:55 UTC (permalink / raw)
To: u-boot
Hi York,
Yes, you are right.
I have tested it on others SoCs (LS1043a/LS1023a, LS2088a/LS2048a). It works fine.
So, I will remove the config and the #if condition.
Thank you and Prabhakar for the advice.
Best Regards
Wenbin Song
-----Original Message-----
From: York Sun
Sent: Friday, December 01, 2017 1:41 AM
To: Wenbin Song <wenbin.song@nxp.com>; Prabhakar Kushwaha <prabhakar.kushwaha@nxp.com>; Ran Wang <ran.wang_1@nxp.com>; Mingkai Hu <mingkai.hu@nxp.com>; u-boot at lists.denx.de
Subject: Re: [PATCH 2/2] armv8: ls1043a: Discard the needless cpu nodes
On 11/29/2017 07:16 PM, Wenbin song wrote:
> Using "cpu_pos_mask()" function to detect the real online cpus, and
> discard the needless cpu nodes on kernel dft.
>
> Signed-off-by: Wenbin Song <wenbin.song@nxp.com>
> ---
> arch/arm/cpu/armv8/fsl-layerscape/Kconfig | 4 ++++
> arch/arm/cpu/armv8/fsl-layerscape/fdt.c | 32 +++++++++++++++++++++++++++++++
> 2 files changed, 36 insertions(+)
>
> diff --git a/arch/arm/cpu/armv8/fsl-layerscape/Kconfig
> b/arch/arm/cpu/armv8/fsl-layerscape/Kconfig
> index 47145a2432..971a98c6cc 100644
> --- a/arch/arm/cpu/armv8/fsl-layerscape/Kconfig
> +++ b/arch/arm/cpu/armv8/fsl-layerscape/Kconfig
> @@ -176,6 +176,10 @@ config HAS_FEATURE_ENHANCED_MSI
> bool
> default y if ARCH_LS1043A
>
> +config DISCARD_OFFLINE_CPU_NODES
> + bool
> + default y if ARCH_LS1043A
> +
> menu "Layerscape PPA"
> config FSL_LS_PPA
> bool "FSL Layerscape PPA firmware support"
> diff --git a/arch/arm/cpu/armv8/fsl-layerscape/fdt.c
> b/arch/arm/cpu/armv8/fsl-layerscape/fdt.c
> index 33f3e64848..241f0abe18 100644
> --- a/arch/arm/cpu/armv8/fsl-layerscape/fdt.c
> +++ b/arch/arm/cpu/armv8/fsl-layerscape/fdt.c
> @@ -44,6 +44,38 @@ void ft_fixup_cpu(void *blob)
> int addr_cells;
> u64 val, core_id;
> size_t *boot_code_size = &(__secondary_boot_code_size);
> +
> +#if defined(CONFIG_DISCARD_OFFLINE_CPU_NODES)
> + u32 mask = cpu_pos_mask();
> + int off_prev = -1;
> + int pos;
> +
> + off = fdt_path_offset(blob, "/cpus");
> + if (off < 0) {
> + puts("couldn't find /cpus node\n");
> + return;
> + }
> +
> + fdt_support_default_count_cells(blob, off, &addr_cells, NULL);
> +
> + off = fdt_node_offset_by_prop_value(blob, off_prev, "device_type",
> + "cpu", 4);
> + while (off != -FDT_ERR_NOTFOUND) {
> + reg = (fdt32_t *)fdt_getprop(blob, off, "reg", 0);
> + if (reg) {
> + core_id = fdt_read_number(reg, addr_cells);
> + pos = ((core_id & 0xff00) >> 5) + (core_id & 0xff);
> + if (!test_bit(pos, &mask)) {
> + fdt_del_node(blob, off);
> + off = off_prev;
> + }
> + }
> + off_prev = off;
> + off = fdt_node_offset_by_prop_value(blob, off_prev,
> + "device_type", "cpu", 4);
> + }
> +#endif
> +
> #if defined(CONFIG_ARMV8_SEC_FIRMWARE_SUPPORT) && \
> defined(CONFIG_SEC_FIRMWARE_ARMV8_PSCI)
> int node;
>
Wenbin,
Using topology registers to identify the existence of cores is correct.
Do you need the new config option to gate the code? It is a correct operation for all SoCs, isn't it?
York
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2017-12-01 6:55 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-11-30 2:57 [U-Boot] [PATCH 1/2] armv8: ls1043a: modify the detecting way to cover all variants Wenbin song
2017-11-30 2:57 ` [U-Boot] [PATCH 2/2] armv8: ls1043a: Discard the needless cpu nodes Wenbin song
2017-11-30 4:55 ` Prabhakar Kushwaha
2017-11-30 9:56 ` Wenbin Song
2017-11-30 17:41 ` York Sun
2017-12-01 6:55 ` Wenbin Song
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.