[PATCH v3 3/9] ARM: renesas: Add RZ/A2 support
Marek Vasut
marek.vasut at mailbox.org
Mon Jul 7 17:42:03 CEST 2025
On 7/6/25 1:28 PM, Magnus Damm wrote:
[...]
> +++ work/board/renesas/common/rza2-lowlevel_init.S 2025-07-06 18:40:28.930399371 +0900
> @@ -0,0 +1,130 @@
> +/* SPDX-License-Identifier: GPL-2.0+ */
> +/*
> + * Copyright (C) 2018 Renesas Electronics Corporation
> + * Copyright (C) 2018 Chris Brandt
> + */
> +#include <config.h>
> +#include <asm/macro.h>
> +
> +.macro dummy_read32, addr
> + ldr r4, =\addr
> + ldr r5, [r4]
> +.endm
> +
> +.macro dummy_read8, addr
> + ldr r4, =\addr
> + ldrb r6, [r4]
> +.endm
> +
> +#define RZA2_WDT_BASE 0xFCFE7000
> +#define RZA2_STBCR_BASE 0xFCFE0020
> +
> +/* Watchdog Registers */
> +#define WTCSR (RZA2_WDT_BASE + 0x00) /* Watchdog Timer Control Register */
> +#define WTCNT (RZA2_WDT_BASE + 0x02) /* Watchdog Timer Counter Register */
> +#define WRCSR (RZA2_WDT_BASE + 0x04) /* Watchdog Reset Control Register */
> +
> +/* Disable WDT */
> +#define WTCSR_D 0xA518
> +#define WTCNT_D 0x5A00
> +
> +/* PL310 L2 Cache */
> +#define PL310_BASE 0x1F003000
> +#define REG15_PWR_CTRL 0xf80
> +
> +/* Clock Registers */
> +#define FRQCR 0xFCFE0010
> +#define CKIOSEL 0xFCFE0100
> +
> +#define FRQCR_D 0x1012
> +#define CKIOSEL_D 0x0000 /* CKIO Output = B Clock */
> +
> +/* Standby controller registers */
> +#define STBCR1 (RZA2_STBCR_BASE + 0x000)
> +#define STBCR2 (RZA2_STBCR_BASE + 0x004)
> +#define STBCR3 (RZA2_STBCR_BASE + 0x400)
> +#define STBCR4 (RZA2_STBCR_BASE + 0x404)
> +#define STBCR5 (RZA2_STBCR_BASE + 0x408)
> +#define STBCR6 (RZA2_STBCR_BASE + 0x40c)
> +#define STBCR7 (RZA2_STBCR_BASE + 0x410)
> +#define STBCR8 (RZA2_STBCR_BASE + 0x414)
> +#define STBCR9 (RZA2_STBCR_BASE + 0x418)
> +#define STBCR10 (RZA2_STBCR_BASE + 0x41c)
> +#define STBCR11 (RZA2_STBCR_BASE + 0x420)
> +#define STBCR12 (RZA2_STBCR_BASE + 0x424)
> +#define STBCR13 (RZA2_STBCR_BASE + 0x450)
> +
> +/* Enable all peripheral clocks */
> +#define STBCR2_D 0x6A
> +#define STBCR3_D 0x80 /* OSTM0, OSTM1, OSTM3, MTU3, CAN-FD, ADC, GPT */
> +#define STBCR4_D 0x00 /* SCIF0, SCIF1, SCIF2, SCIF3, SCIF4, SCI0, SCI1,IrDA */
> +#define STBCR5_D 0x31 /* A/D, CEU, RTC0, RTC1, JCU */
> +#define STBCR6_D 0x80 /* VIN, ETHER0, ETHER1, EtherPTR, EtherM, USB0, USB1 */
> +#define STBCR7_D 0x10 /* IMR-LS2, DAVE-2D, MIPI, SSIF0, SSIF1, SSIF2, SSIF3 */
> +#define STBCR8_D 0x05 /* IIC0, IIC1, IIC2, IIC3, SPIBSC, VDC6 */
> +#define STBCR9_D 0x10 /* RSPI0, RSPI1, RSPI2, HYPER, OCTA, SPDIF, DRP */
> +#define STBCR10_D 0x00 /* TSIP, SDHI00, SDHI01, SDHI10, SDHI11 */
> +#define STBCR11_D 0x3F /* POE3, POEG */
> +
> +#define SYSCR1 0xFCFE0400 /* System control register 1 */
> +#define SYSCR2 0xFCFE0404 /* System control register 2 */
> +#define SYSCR3 0xFCFE0408 /* System control register 3 */
> +
> + .global lowlevel_init
> +
> + .text
> + .align 2
> +
> +lowlevel_init:
> + /* PL310 init: Power Control Register */
> + write32 (PL310_BASE + REG15_PWR_CTRL), 1 /* Standby mode enable */
> + dummy_read32 (PL310_BASE + REG15_PWR_CTRL) /* dummy read */
> +
> + /* Set clocks */
> + write16 FRQCR, FRQCR_D
> + write16 CKIOSEL, CKIOSEL_D
> +
> + /* Enable all peripherals (Standby Control) */
> + write8 STBCR3, STBCR3_D
> + dummy_read8 STBCR3
> + write8 STBCR4, STBCR4_D
> + dummy_read8 STBCR4
> + write8 STBCR5, STBCR5_D
> + dummy_read8 STBCR5
> + write8 STBCR6, STBCR6_D
> + dummy_read8 STBCR6
> + write8 STBCR7, STBCR7_D
> + dummy_read8 STBCR7
> + write8 STBCR8, STBCR8_D
> + dummy_read8 STBCR8
> + write8 STBCR9, STBCR9_D
> + dummy_read8 STBCR9
> + write8 STBCR10, STBCR10_D
> + dummy_read8 STBCR10
> + write8 STBCR11, STBCR11_D
> + dummy_read8 STBCR11
> +
> + b part2
> +
> + .pool
> + .align 4
> +part2:
> + /* Disable WDT */
> + write16 WTCSR, WTCSR_D
> + write16 WTCNT, WTCNT_D
> +
> + /* For serial booting, enable read ahead caching to speed things up */
> +#define DRCR 0x1F80000C
> + write32 DRCR, 0x00010300 /* Read Burst ON, Length=2, Flush cache */
> +
> + /* Enable all internal RAM */
> + write8 SYSCR1, 0xFF
> + write8 SYSCR2, 0xFF
> + write8 SYSCR3, 0x0F
> + dummy_read8 SYSCR3
Can any of this be converted into s_init() (early init) C code ?
--
Best regards,
Marek Vasut
More information about the U-Boot
mailing list