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:
parent
31cc34762c
commit
ded1b9c73c
@ -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
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
@ -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 */
|
||||
|
||||
@ -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
|
||||
@ -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;
|
||||
}
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
@ -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__*/
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
/* --------------------------------------------------------------------
|
||||
|
||||
@ -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 \
|
||||
|
||||
@ -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 */
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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
|
||||
|
||||
/* ---------------------------------------------
|
||||
|
||||
@ -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 \
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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
|
||||
|
||||
/* ---------------------------------------------
|
||||
|
||||
@ -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 \
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user