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

Pali Rohár pali at kernel.org
Sun Mar 12 01:29:29 CET 2023


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 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.

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
> >


More information about the U-Boot mailing list