feat(rcar): rewrite console_renesas_register() in C

Replace assembler implementation of console_renesas_register() with
matching C implementation. Since it is now easily possible to pass
flags into console_renesas_register() and then onward to the console
initialization, adjust the signature of console_renesas_register()
and include the flags in it. Adjust both rcar_console_boot_init()
and rcar_console_runtime_init() to call console_renesas_register()
with its new combined set of parameters and drop console_set_scope()
invocation which is no longer needed, because the flags are passed
directly into console_renesas_register().

Drop console_renesas_flush() which is always a noop. Drop return
value from console_renesas_init() which is always 1.

Signed-off-by: Marek Vasut <marek.vasut+renesas@mailbox.org>
Change-Id: I1c7d1a81b6922138b6e2e80f2635fcc8558685c7
This commit is contained in:
Marek Vasut 2026-01-21 13:38:44 +01:00
parent 31cc34762c
commit ded1b9c73c
19 changed files with 55 additions and 195 deletions

View File

@ -1,46 +0,0 @@
/*
* Copyright (c) 2018-2026, Renesas Electronics Corporation. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#include <arch.h>
#include <asm_macros.S>
#include <console_macros.S>
#include <drivers/renesas/rcar/console/console.h>
.globl console_renesas_register
.extern renesas_log_init
/* -----------------------------------------------
* int console_renesas_register(
* uintptr_t base, uint32_t clk, uint32_t baud,
* console_t *console)
* Function to initialize and register a new rcar
* console. Storage passed in for the console struct
* *must* be persistent (i.e. not from the stack).
* In: x0 - UART register base address
* w1 - UART clock in Hz
* w2 - Baud rate
* x3 - pointer to empty console_t struct
* Out: return 1 on success, 0 on error
* Clobber list : x0, x1, x2, x6, x7, x14
* -----------------------------------------------
*/
func console_renesas_register
mov x7, x30
mov x6, x3
cbz x6, register_fail
str x0, [x6, #CONSOLE_T_BASE]
bl renesas_log_init
cbz x0, register_fail
mov x0, x6
mov x30, x7
finish_console_register renesas, putc=1, getc=0, flush=1
register_fail:
ret x7
endfunc console_renesas_register

View File

@ -107,14 +107,25 @@ int32_t renesas_log_init(void)
return 1;
}
int console_renesas_flush(console_t *pconsole)
void console_renesas_init(uintptr_t base_addr, uint32_t uart_clk,
uint32_t baud_rate)
{
/* Nothing to do */
return 0;
/*
* Compatibility with SCIF console only, may be
* invoked from R-Car Gen3 plat_crash_console_init()
*/
}
int console_renesas_init(uintptr_t base_addr, uint32_t uart_clk,
uint32_t baud_rate)
static console_t console_renesas_console = {
.flags = CONSOLE_FLAG_BOOT,
.putc = console_renesas_putc,
};
void console_renesas_register(uintptr_t baseaddr, uint32_t clock,
uint32_t baud, uint32_t flags)
{
return 1;
console_renesas_console.base = baseaddr;
console_renesas_console.flags = flags;
console_register(&console_renesas_console);
}

View File

@ -59,8 +59,17 @@ int console_renesas_putc(int c, console_t *pconsole)
return c;
}
int console_renesas_flush(console_t *pconsole)
static console_t console_renesas_console = {
.flags = CONSOLE_FLAG_BOOT,
.putc = console_renesas_putc,
};
void console_renesas_register(uintptr_t baseaddr, uint32_t clock,
uint32_t baud, uint32_t flags)
{
/* Nothing to do */
return 0;
console_renesas_console.base = baseaddr;
console_renesas_console.flags = flags;
console_register(&console_renesas_console);
console_renesas_init(baseaddr, clock, baud);
}

View File

@ -32,8 +32,6 @@
#define SCIF_SCFSR 0x10
#define SCIF_SCFCR 0x18
#define SCIF_SCLSR 0x24
#define SCIF_DL 0x30
#define SCIF_CKS 0x34
/* MODE pin */
#define MODEMR_MD12 BIT(12)
@ -46,14 +44,12 @@
#define SCSCR_TE_EN BIT(5)
#define SCSCR_RE_EN BIT(4)
#define SCSCR_CKE_MASK 3
#define SCFSR_TEND_MASK BIT(6)
#define SCFSR_TEND_TRANS_END BIT(6)
#define SCSCR_CKE_INT_CLK 0
#define SCFCR_TFRST_EN BIT(2)
#define SCFCR_RFRS_EN BIT(1)
int console_renesas_init(uintptr_t base_addr, uint32_t uart_clk,
uint32_t baud_rate)
void console_renesas_init(uintptr_t base_addr, uint32_t uart_clk,
uint32_t baud_rate)
{
uint32_t prr = mmio_read_32(PRR);
uint32_t base;
@ -123,6 +119,4 @@ int console_renesas_init(uintptr_t base_addr, uint32_t uart_clk,
/* Set bits TE and RE in SCSCR to 1 */
mmio_clrsetbits_16(base + SCIF_SCSCR, SCSCR_TE_EN | SCSCR_RE_EN,
SCSCR_TE_EN | SCSCR_RE_EN);
return 1;
}

View File

@ -8,9 +8,8 @@
#define SCIF_H
void scif_console_set_regs(uint32_t fsr, uint32_t tdr);
int console_renesas_init(uintptr_t base_addr, uint32_t uart_clk,
uint32_t baud_rate);
void console_renesas_init(uintptr_t base_addr, uint32_t uart_clk,
uint32_t baud_rate);
int console_renesas_putc(int c, console_t *pconsole);
int console_renesas_flush(console_t *pconsole);
#endif /* SCIF_H */

View File

@ -1,44 +0,0 @@
/*
* Copyright (c) 2025-2026, Renesas Electronics Corporation. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#include <arch.h>
#include <asm_macros.S>
#include <console_macros.S>
.globl console_renesas_register
.extern console_renesas_init
/*
* -----------------------------------------------
* int console_renesas_register(
* uintptr_t base, uint32_t clk, uint32_t baud,
* console_t *console)
* Function to initialize and register a new Renesas
* console. Storage passed in for the console struct
* *must* be persistent (i.e. not from the stack).
* In: x0 - UART register base address
* w1 - UART clock in Hz
* w2 - Baud rate
* x3 - pointer to empty console_t struct
* Out: return 1 on success, 0 on error
* Clobber list : x0, x1, x2, x6, x7, x14
* -----------------------------------------------
*/
func console_renesas_register
mov x7, x30
mov x6, x3
cbz x6, register_fail
str x0, [x6, #CONSOLE_T_BASE]
bl console_renesas_init
mov x0, x6
mov x30, x7
finish_console_register renesas, putc=1, getc=0, flush=1
register_fail:
ret x7
endfunc console_renesas_register

View File

@ -60,8 +60,8 @@
#define MODEMR_HSCIF_DLMODE_1843200 2U
#define MODEMR_HSCIF_DLMODE_3000000 3U
int console_renesas_init(uintptr_t base_addr, uint32_t uart_clk,
uint32_t baud_rate)
void console_renesas_init(uintptr_t base_addr, uint32_t uart_clk,
uint32_t baud_rate)
{
uint32_t modemr, mstpcr, mstpsr, mstpbit;
@ -86,6 +86,4 @@ int console_renesas_init(uintptr_t base_addr, uint32_t uart_clk,
mmio_clrbits_32(mstpcr, mstpbit);
while (mmio_read_32(mstpsr) & mstpbit)
;
return 1;
}

View File

@ -18,10 +18,8 @@
#define HSCIF_HSFTDR (HSCIF_BASE + 0x000CU) /* 8 Transmit FIFO data register */
#define HSCIF_HSFSR (HSCIF_BASE + 0x0010U) /* 16 Serial status register */
int console_renesas_init(uintptr_t base_addr, uint32_t uart_clk,
uint32_t baud_rate)
void console_renesas_init(uintptr_t base_addr, uint32_t uart_clk,
uint32_t baud_rate)
{
scif_console_set_regs(HSCIF_HSFSR, HSCIF_HSFTDR);
return 1;
}

View File

@ -17,8 +17,8 @@
* for the lifetime of the console, such as a global or static local variable.
* Its contents will be reinitialized from scratch.
*/
int console_renesas_register(uintptr_t baseaddr, uint32_t clock, uint32_t baud,
console_t *console);
int console_renesas_register(uintptr_t baseaddr, uint32_t clock,
uint32_t baud, uint32_t flags);
#endif /*__ASSEMBLER__*/

View File

@ -30,7 +30,6 @@
.extern console_renesas_init
.extern console_renesas_putc
.extern console_renesas_flush
#if IMAGE_BL2
#define INT_ID_MASK (0x3ff)
@ -273,6 +272,7 @@ func plat_crash_console_init
bl console_renesas_init
ldr x30, [sp], #16
ldr x1, [sp], #16
mov x0, #1
mov sp, x1
#endif
ret
@ -311,7 +311,7 @@ endfunc plat_crash_console_putc
* ---------------------------------------------
*/
func plat_crash_console_flush
b console_renesas_flush
ret
endfunc plat_crash_console_flush
/* --------------------------------------------------------------------

View File

@ -103,7 +103,6 @@ BL2_SOURCES += ${RCAR_GIC_SOURCES} \
plat/renesas/common/bl2_cpg_init.c \
drivers/renesas/common/scif/scif-common.c \
drivers/renesas/common/scif/scif.c \
drivers/renesas/common/scif/scif_helpers.S \
drivers/renesas/common/common.c \
drivers/renesas/common/io/io_emmcdrv.c \
drivers/renesas/common/io/io_memdrv.c \
@ -132,7 +131,6 @@ BL31_SOURCES += ${RCAR_GIC_SOURCES} \
plat/renesas/common/aarch64/platform_common.c \
plat/renesas/common/bl31_plat_setup.c \
plat/renesas/common/plat_pm.c \
drivers/renesas/common/console/rcar_console.S \
drivers/renesas/common/console/rcar_printf.c \
drivers/renesas/common/delay/micro_delay.c \
drivers/renesas/common/pwrc/call_sram.S \

View File

@ -78,8 +78,6 @@ void mstpcr_write(uint32_t mstpcr, uint32_t mstpsr, uint32_t target_bit);
void cpg_write(uintptr_t regadr, uint32_t regval);
void rcar_console_boot_init(void);
void rcar_console_boot_end(void);
void rcar_console_runtime_init(void);
void rcar_console_runtime_end(void);
#endif /* RCAR_PRIVATE_H */

View File

@ -65,35 +65,12 @@ void plat_ea_handler(unsigned int ea_reason, uint64_t syndrome, void *cookie,
#include <drivers/renesas/rcar/console/console.h>
static console_t rcar_boot_console;
static console_t rcar_runtime_console;
void rcar_console_boot_init(void)
{
int ret;
ret = console_renesas_register(0, 0, 0, &rcar_boot_console);
if (!ret)
panic();
console_set_scope(&rcar_boot_console, CONSOLE_FLAG_BOOT);
}
void rcar_console_boot_end(void)
{
console_renesas_register(0, 0, 0, CONSOLE_FLAG_BOOT);
}
void rcar_console_runtime_init(void)
{
int ret;
ret = console_renesas_register(1, 0, 0, &rcar_runtime_console);
if (!ret)
panic();
console_set_scope(&rcar_boot_console, CONSOLE_FLAG_RUNTIME);
}
void rcar_console_runtime_end(void)
{
console_renesas_register(1, 0, 0, CONSOLE_FLAG_RUNTIME);
}

View File

@ -180,6 +180,7 @@ func plat_crash_console_init
ldr x30, [sp], #16
ldr x1, [sp], #16
mov sp, x1
mov x0, #1
ret
endfunc plat_crash_console_init
@ -216,7 +217,7 @@ endfunc plat_crash_console_putc
* ---------------------------------------------
*/
func plat_crash_console_flush
b console_renesas_flush
ret
endfunc plat_crash_console_flush
/* ---------------------------------------------

View File

@ -115,7 +115,6 @@ BL31_SOURCES += ${RCAR_GIC_SOURCES} \
drivers/delay_timer/generic_delay_timer.c \
drivers/renesas/common/pwrc/call_sram.S \
drivers/renesas/common/scif/scif-common.c \
drivers/renesas/common/scif/scif_helpers.S \
drivers/renesas/common/timer/timer.c \
drivers/renesas/rcar_gen4/pwrc/pwrc.c \
drivers/renesas/rcar_gen4/scif/scif.c \

View File

@ -19,27 +19,12 @@ void plat_ea_handler(unsigned int ea_reason, uint64_t syndrome, void *cookie,
void rcar_console_boot_init(void)
{
static console_t rcar_boot_console = { 0 };
int ret;
ret = console_renesas_register(0, 0, 0, &rcar_boot_console);
if (ret == 0)
panic();
console_set_scope(&rcar_boot_console, CONSOLE_FLAG_BOOT);
console_renesas_register(0, 0, 0, CONSOLE_FLAG_BOOT);
}
void rcar_console_runtime_init(void)
{
static console_t rcar_runtime_console = { 0 };
int ret;
ret = console_renesas_register(1, 0, 0, &rcar_runtime_console);
if (ret == 0)
panic();
console_set_scope(&rcar_runtime_console,
CONSOLE_FLAG_BOOT |
CONSOLE_FLAG_RUNTIME |
CONSOLE_FLAG_CRASH);
console_renesas_register(1, 0, 0,
CONSOLE_FLAG_BOOT | CONSOLE_FLAG_RUNTIME |
CONSOLE_FLAG_CRASH);
}

View File

@ -180,6 +180,7 @@ func plat_crash_console_init
ldr x30, [sp], #16
ldr x1, [sp], #16
mov sp, x1
mov x0, #1
ret
endfunc plat_crash_console_init
@ -216,7 +217,7 @@ endfunc plat_crash_console_putc
* ---------------------------------------------
*/
func plat_crash_console_flush
b console_renesas_flush
ret
endfunc plat_crash_console_flush
/* ---------------------------------------------

View File

@ -116,7 +116,6 @@ BL31_SOURCES += ${RCAR_GIC_SOURCES} \
drivers/delay_timer/delay_timer.c \
drivers/delay_timer/generic_delay_timer.c \
drivers/renesas/common/scif/scif-common.c \
drivers/renesas/common/scif/scif_helpers.S \
drivers/renesas/common/timer/timer.c \
drivers/renesas/rcar_gen5/pwrc/pwrc.c \
drivers/renesas/rcar_gen5/scif/scif.c \

View File

@ -19,29 +19,12 @@ void plat_ea_handler(unsigned int ea_reason, uint64_t syndrome, void *cookie,
void rcar_console_boot_init(void)
{
static console_t rcar_boot_console = {0};
int ret;
ret = console_renesas_register(0, 0, 0, &rcar_boot_console);
if (ret == 0) {
panic();
}
console_set_scope(&rcar_boot_console, CONSOLE_FLAG_BOOT);
console_renesas_register(0, 0, 0, CONSOLE_FLAG_BOOT);
}
void rcar_console_runtime_init(void)
{
static console_t rcar_runtime_console = {0};
int ret;
ret = console_renesas_register(1, 0, 0, &rcar_runtime_console);
if (ret == 0) {
panic();
}
console_set_scope(&rcar_runtime_console,
CONSOLE_FLAG_BOOT |
CONSOLE_FLAG_RUNTIME |
CONSOLE_FLAG_CRASH);
console_renesas_register(1, 0, 0,
CONSOLE_FLAG_BOOT | CONSOLE_FLAG_RUNTIME |
CONSOLE_FLAG_CRASH);
}