
On Saturday 11 March 2023 15:47:29 Tony Dinh wrote:
Hi Pali,
On Sat, Mar 11, 2023 at 2:57 AM Pali Rohár pali@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@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.
Ok! Thanks for testing.
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.
I do not know what could broke it, but I see there two things which you could change in your configuration.
1. Try to set UART shift register to 2. Not sure what is default but in kirkwood.dtsi file it is 2.
CONFIG_DEBUG_UART_SHIFT=2
2. Recheck UART clock. In kw88f6281.h is defined that TCLK is either 166666667 or 200000000. And it is configured by strapping pins. TCLK cannot be 250000000 on 6281 for sure. I do not know to which clock is connected UART base clock, but my guess is that it is TCLK.
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