[PATCH RFC u-boot-mvebu] arm: kirkwood: Move internal registers in arch_very_early_init() function

Tony Dinh mibodhi at gmail.com
Sun Mar 12 00:47:29 CET 2023


Hi Pali,

On Sat, Mar 11, 2023 at 2:57 AM Pali Rohár <pali at kernel.org> wrote:
>
> Same change as was done for mvebu in commit 5bb2c550b11e ("arm: mvebu: Move
> internal registers in arch_very_early_init() function") but for kirkwood.
>
> Signed-off-by: Pali Rohár <pali at kernel.org>
> ---
> Hello! Please test this RFC patch on more Kirkwood boards if there is
> any issue with it.

I've run a regression test with this patch (Debug UART is not
enabled). And everything was OK. No change in behavior.

However, when I turned on Debug UART on the nsa310s (88F6702) board,
and ran with kwboot, it froze right away upon starting. Unrelated to
this patch, I believe DEBUG_UART has been broken for Kirkwood lately,
perhaps sometime late December to present, but I did not have time to
track it down. Here is the last thread that I had Debug UART working
on the Pogo V4 (88F6192):
https://lists.denx.de/pipermail/u-boot/2022-December/502605.html

For reference, here is my local patch to configure the NSA310S, in
addition to this patch.

diff --git a/configs/nsa310s_defconfig b/configs/nsa310s_defconfig
index 76839e62dd..4bef35d576 100644
--- a/configs/nsa310s_defconfig
+++ b/configs/nsa310s_defconfig
@@ -15,8 +15,11 @@ CONFIG_ENV_SIZE=0x20000
 CONFIG_ENV_OFFSET=0xE0000
 CONFIG_DEFAULT_DEVICE_TREE="kirkwood-nsa310s"
 CONFIG_SYS_PROMPT="NSA310s> "
+CONFIG_DEBUG_UART_BASE=0xf1012000
+CONFIG_DEBUG_UART_CLOCK=250000000
 CONFIG_IDENT_STRING="\nZyXEL NSA310S/320S 1/2-Bay Power Media Server"
 CONFIG_SYS_LOAD_ADDR=0x800000
+CONFIG_DEBUG_UART=y
 CONFIG_DISTRO_DEFAULTS=y
 CONFIG_BOOTDELAY=3
 CONFIG_USE_PREBOOT=y
@@ -50,6 +53,7 @@ CONFIG_MTD_RAW_NAND=y
 CONFIG_PHY_MARVELL=y
 CONFIG_MVGBE=y
 CONFIG_MII=y
+CONFIG_DEBUG_UART_ANNOUNCE=y
 CONFIG_USB=y
 CONFIG_USB_EHCI_HCD=y
 CONFIG_UBIFS_SILENCE_MSG=y

diff --git a/arch/arm/dts/kirkwood-nsa310s.dts
b/arch/arm/dts/kirkwood-nsa310s.dts
index 09ee76c2a2..2df45aa6da 100644
--- a/arch/arm/dts/kirkwood-nsa310s.dts
+++ b/arch/arm/dts/kirkwood-nsa310s.dts
@@ -22,6 +22,10 @@
                reg = <0x00000000 0x10000000>;
        };

+       aliases {
+               serial0 = &uart0;
+       };
+
        chosen {
                bootargs = "console=ttyS0,115200";
                stdout-path = &uart0;
@@ -317,3 +321,8 @@
 &pcie0 {
        status = "okay";
 };
+
+&uart0 {
+        status = "okay";
+        u-boot,dm-pre-reloc;
+};

If anybody is available to test this patch with Debug UART enabled, it
would be great. I'll wait a few days and if there is no suggestion, I
would do a bisect from Dec 19th.

Thanks,
Tony

> ---
>  arch/arm/mach-kirkwood/Kconfig    |  2 ++
>  arch/arm/mach-kirkwood/Makefile   |  1 +
>  arch/arm/mach-kirkwood/cpu.c      |  3 ---
>  arch/arm/mach-kirkwood/lowlevel.S | 12 ++++++++++++
>  4 files changed, 15 insertions(+), 3 deletions(-)
>  create mode 100644 arch/arm/mach-kirkwood/lowlevel.S
>
> diff --git a/arch/arm/mach-kirkwood/Kconfig b/arch/arm/mach-kirkwood/Kconfig
> index c8a193dd4cdf..ba39e9ae416e 100644
> --- a/arch/arm/mach-kirkwood/Kconfig
> +++ b/arch/arm/mach-kirkwood/Kconfig
> @@ -5,9 +5,11 @@ config FEROCEON_88FR131
>
>  config KW88F6192
>         bool
> +       select ARCH_VERY_EARLY_INIT
>
>  config KW88F6281
>         bool
> +       select ARCH_VERY_EARLY_INIT
>
>  config SHEEVA_88SV131
>         bool
> diff --git a/arch/arm/mach-kirkwood/Makefile b/arch/arm/mach-kirkwood/Makefile
> index 3b2eef8d5419..0fb5a2326f5f 100644
> --- a/arch/arm/mach-kirkwood/Makefile
> +++ b/arch/arm/mach-kirkwood/Makefile
> @@ -6,6 +6,7 @@
>
>  obj-y  = cpu.o
>  obj-y  += cache.o
> +obj-y  += lowlevel.o
>  obj-y  += mpp.o
>
>  # cpu.o and cache.o contain CP15 instructions which cannot be run in
> diff --git a/arch/arm/mach-kirkwood/cpu.c b/arch/arm/mach-kirkwood/cpu.c
> index df3e8f11782a..2b493b36c20d 100644
> --- a/arch/arm/mach-kirkwood/cpu.c
> +++ b/arch/arm/mach-kirkwood/cpu.c
> @@ -189,9 +189,6 @@ int arch_cpu_init(void)
>         struct kwcpu_registers *cpureg =
>                 (struct kwcpu_registers *)KW_CPU_REG_BASE;
>
> -       /* Linux expects the internal registers to be at 0xf1000000 */
> -       writel(KW_REGS_PHY_BASE, KW_OFFSET_REG);
> -
>         /* Enable and invalidate L2 cache in write through mode */
>         writel(readl(&cpureg->l2_cfg) | 0x18, &cpureg->l2_cfg);
>         invalidate_l2_cache();
> diff --git a/arch/arm/mach-kirkwood/lowlevel.S b/arch/arm/mach-kirkwood/lowlevel.S
> new file mode 100644
> index 000000000000..3b339f97f056
> --- /dev/null
> +++ b/arch/arm/mach-kirkwood/lowlevel.S
> @@ -0,0 +1,12 @@
> +/* SPDX-License-Identifier: GPL-2.0+ */
> +
> +#include <config.h>
> +#include <linux/linkage.h>
> +
> +ENTRY(arch_very_early_init)
> +       /* Move internal registers from KW_OFFSET_REG to KW_REGS_PHY_BASE */
> +       ldr     r0, =KW_REGS_PHY_BASE
> +       ldr     r1, =KW_OFFSET_REG
> +       str     r0, [r1]
> +       bx      lr
> +ENDPROC(arch_very_early_init)
> --
> 2.20.1
>


More information about the U-Boot mailing list