Hi Pali, On Sat, Mar 11, 2023 at 4:29 PM Pali Rohár <p...@kernel.org> wrote: > > 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 <p...@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 <p...@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.
Thanks for the suggestion. Indeed, the combination of CONFIG_DEBUG_UART_CLOCK=166666667 and CONFIG_DEBUG_UART_SHIFT=2 works as it should (88F6702/88F6192 TCLK=166666667). Without setting CONFIG_DEBUG_UART_SHIFT in defconfig, it is default to 0. CONFIG_DEBUG_UART_SHIFT=2 is the key here, because U-Boot does not hang with CONFIG_DEBUG_UART_CLOCK=250000000. The board runs OK, but the Debug UART announcement output is gibberish. So I guess back on the Dec 19th build, perhaps I was just lucky that some internal values were used for Kirkwood, but not CONFIG_xxx. Thanks, Tony > > 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 > > >