[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