mirror of
https://github.com/Fishwaldo/opensbi.git
synced 2025-07-04 12:08:26 +00:00
lib: sbi: Simplify console platform operations
Instead of having console_putc() and console_getc() callbacks in platform operations, it will be much simpler for console driver to directly register these operations as device to the sbi_console implementation. Signed-off-by: Anup Patel <anup.patel@wdc.com> Reviewed-by: Alistair Francis <alistair.francis@wdc.com> Reviewed-by: Xiang W <wxjstz@126.com>
This commit is contained in:
parent
a3689db92a
commit
068ca086af
25 changed files with 96 additions and 134 deletions
|
@ -12,6 +12,17 @@
|
||||||
|
|
||||||
#include <sbi/sbi_types.h>
|
#include <sbi/sbi_types.h>
|
||||||
|
|
||||||
|
struct sbi_console_device {
|
||||||
|
/** Name of the console device */
|
||||||
|
char name[32];
|
||||||
|
|
||||||
|
/** Write a character to the console output */
|
||||||
|
void (*console_putc)(char ch);
|
||||||
|
|
||||||
|
/** Read a character from the console input */
|
||||||
|
int (*console_getc)(void);
|
||||||
|
};
|
||||||
|
|
||||||
#define __printf(a, b) __attribute__((format(printf, a, b)))
|
#define __printf(a, b) __attribute__((format(printf, a, b)))
|
||||||
|
|
||||||
bool sbi_isprintable(char ch);
|
bool sbi_isprintable(char ch);
|
||||||
|
@ -32,6 +43,10 @@ int __printf(1, 2) sbi_printf(const char *format, ...);
|
||||||
|
|
||||||
int __printf(1, 2) sbi_dprintf(const char *format, ...);
|
int __printf(1, 2) sbi_dprintf(const char *format, ...);
|
||||||
|
|
||||||
|
const struct sbi_console_device *sbi_console_get_device(void);
|
||||||
|
|
||||||
|
void sbi_console_set_device(const struct sbi_console_device *dev);
|
||||||
|
|
||||||
struct sbi_scratch;
|
struct sbi_scratch;
|
||||||
|
|
||||||
int sbi_console_init(struct sbi_scratch *scratch);
|
int sbi_console_init(struct sbi_scratch *scratch);
|
||||||
|
|
|
@ -95,10 +95,6 @@ struct sbi_platform_operations {
|
||||||
/** Initialize (or populate) domains for the platform */
|
/** Initialize (or populate) domains for the platform */
|
||||||
int (*domains_init)(void);
|
int (*domains_init)(void);
|
||||||
|
|
||||||
/** Write a character to the platform console output */
|
|
||||||
void (*console_putc)(char ch);
|
|
||||||
/** Read a character from the platform console input */
|
|
||||||
int (*console_getc)(void);
|
|
||||||
/** Initialize the platform console */
|
/** Initialize the platform console */
|
||||||
int (*console_init)(void);
|
int (*console_init)(void);
|
||||||
|
|
||||||
|
@ -496,33 +492,6 @@ static inline int sbi_platform_domains_init(const struct sbi_platform *plat)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Write a character to the platform console output
|
|
||||||
*
|
|
||||||
* @param plat pointer to struct sbi_platform
|
|
||||||
* @param ch character to write
|
|
||||||
*/
|
|
||||||
static inline void sbi_platform_console_putc(const struct sbi_platform *plat,
|
|
||||||
char ch)
|
|
||||||
{
|
|
||||||
if (plat && sbi_platform_ops(plat)->console_putc)
|
|
||||||
sbi_platform_ops(plat)->console_putc(ch);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Read a character from the platform console input
|
|
||||||
*
|
|
||||||
* @param plat pointer to struct sbi_platform
|
|
||||||
*
|
|
||||||
* @return character read from console input
|
|
||||||
*/
|
|
||||||
static inline int sbi_platform_console_getc(const struct sbi_platform *plat)
|
|
||||||
{
|
|
||||||
if (plat && sbi_platform_ops(plat)->console_getc)
|
|
||||||
return sbi_platform_ops(plat)->console_getc();
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initialize the platform console
|
* Initialize the platform console
|
||||||
*
|
*
|
||||||
|
|
|
@ -15,14 +15,8 @@
|
||||||
struct fdt_serial {
|
struct fdt_serial {
|
||||||
const struct fdt_match *match_table;
|
const struct fdt_match *match_table;
|
||||||
int (*init)(void *fdt, int nodeoff, const struct fdt_match *match);
|
int (*init)(void *fdt, int nodeoff, const struct fdt_match *match);
|
||||||
void (*putc)(char ch);
|
|
||||||
int (*getc)(void);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
void fdt_serial_putc(char ch);
|
|
||||||
|
|
||||||
int fdt_serial_getc(void);
|
|
||||||
|
|
||||||
int fdt_serial_init(void);
|
int fdt_serial_init(void);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -9,10 +9,6 @@
|
||||||
|
|
||||||
#include <sbi/sbi_types.h>
|
#include <sbi/sbi_types.h>
|
||||||
|
|
||||||
void shakti_uart_putc(char ch);
|
|
||||||
|
|
||||||
int shakti_uart_getc(void);
|
|
||||||
|
|
||||||
int shakti_uart_init(unsigned long base, u32 in_freq, u32 baudrate);
|
int shakti_uart_init(unsigned long base, u32 in_freq, u32 baudrate);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -12,10 +12,6 @@
|
||||||
|
|
||||||
#include <sbi/sbi_types.h>
|
#include <sbi/sbi_types.h>
|
||||||
|
|
||||||
void sifive_uart_putc(char ch);
|
|
||||||
|
|
||||||
int sifive_uart_getc(void);
|
|
||||||
|
|
||||||
int sifive_uart_init(unsigned long base, u32 in_freq, u32 baudrate);
|
int sifive_uart_init(unsigned long base, u32 in_freq, u32 baudrate);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -12,10 +12,6 @@
|
||||||
|
|
||||||
#include <sbi/sbi_types.h>
|
#include <sbi/sbi_types.h>
|
||||||
|
|
||||||
void uart8250_putc(char ch);
|
|
||||||
|
|
||||||
int uart8250_getc(void);
|
|
||||||
|
|
||||||
int uart8250_init(unsigned long base, u32 in_freq, u32 baudrate, u32 reg_shift,
|
int uart8250_init(unsigned long base, u32 in_freq, u32 baudrate, u32 reg_shift,
|
||||||
u32 reg_width);
|
u32 reg_width);
|
||||||
|
|
||||||
|
|
|
@ -10,9 +10,7 @@
|
||||||
|
|
||||||
#include <sbi/sbi_types.h>
|
#include <sbi/sbi_types.h>
|
||||||
|
|
||||||
void htif_putc(char ch);
|
int htif_serial_init(void);
|
||||||
|
|
||||||
int htif_getc(void);
|
|
||||||
|
|
||||||
int htif_system_reset_check(u32 type, u32 reason);
|
int htif_system_reset_check(u32 type, u32 reason);
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
#include <sbi/sbi_platform.h>
|
#include <sbi/sbi_platform.h>
|
||||||
#include <sbi/sbi_scratch.h>
|
#include <sbi/sbi_scratch.h>
|
||||||
|
|
||||||
static const struct sbi_platform *console_plat = NULL;
|
static const struct sbi_console_device *console_dev = NULL;
|
||||||
static spinlock_t console_out_lock = SPIN_LOCK_INITIALIZER;
|
static spinlock_t console_out_lock = SPIN_LOCK_INITIALIZER;
|
||||||
|
|
||||||
bool sbi_isprintable(char c)
|
bool sbi_isprintable(char c)
|
||||||
|
@ -26,14 +26,18 @@ bool sbi_isprintable(char c)
|
||||||
|
|
||||||
int sbi_getc(void)
|
int sbi_getc(void)
|
||||||
{
|
{
|
||||||
return sbi_platform_console_getc(console_plat);
|
if (console_dev && console_dev->console_getc)
|
||||||
|
return console_dev->console_getc();
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void sbi_putc(char ch)
|
void sbi_putc(char ch)
|
||||||
{
|
{
|
||||||
if (ch == '\n')
|
if (console_dev && console_dev->console_putc) {
|
||||||
sbi_platform_console_putc(console_plat, '\r');
|
if (ch == '\n')
|
||||||
sbi_platform_console_putc(console_plat, ch);
|
console_dev->console_putc('\r');
|
||||||
|
console_dev->console_putc(ch);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void sbi_puts(const char *str)
|
void sbi_puts(const char *str)
|
||||||
|
@ -390,9 +394,20 @@ int sbi_dprintf(const char *format, ...)
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const struct sbi_console_device *sbi_console_get_device(void)
|
||||||
|
{
|
||||||
|
return console_dev;
|
||||||
|
}
|
||||||
|
|
||||||
|
void sbi_console_set_device(const struct sbi_console_device *dev)
|
||||||
|
{
|
||||||
|
if (!dev || console_dev)
|
||||||
|
return;
|
||||||
|
|
||||||
|
console_dev = dev;
|
||||||
|
}
|
||||||
|
|
||||||
int sbi_console_init(struct sbi_scratch *scratch)
|
int sbi_console_init(struct sbi_scratch *scratch)
|
||||||
{
|
{
|
||||||
console_plat = sbi_platform_ptr(scratch);
|
return sbi_platform_console_init(sbi_platform_ptr(scratch));
|
||||||
|
|
||||||
return sbi_platform_console_init(console_plat);
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,34 +24,13 @@ static struct fdt_serial *serial_drivers[] = {
|
||||||
&fdt_serial_shakti,
|
&fdt_serial_shakti,
|
||||||
};
|
};
|
||||||
|
|
||||||
static void dummy_putc(char ch)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
static int dummy_getc(void)
|
|
||||||
{
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct fdt_serial dummy = {
|
static struct fdt_serial dummy = {
|
||||||
.match_table = NULL,
|
.match_table = NULL,
|
||||||
.init = NULL,
|
.init = NULL,
|
||||||
.putc = dummy_putc,
|
|
||||||
.getc = dummy_getc,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct fdt_serial *current_driver = &dummy;
|
static struct fdt_serial *current_driver = &dummy;
|
||||||
|
|
||||||
void fdt_serial_putc(char ch)
|
|
||||||
{
|
|
||||||
current_driver->putc(ch);
|
|
||||||
}
|
|
||||||
|
|
||||||
int fdt_serial_getc(void)
|
|
||||||
{
|
|
||||||
return current_driver->getc();
|
|
||||||
}
|
|
||||||
|
|
||||||
int fdt_serial_init(void)
|
int fdt_serial_init(void)
|
||||||
{
|
{
|
||||||
const void *prop;
|
const void *prop;
|
||||||
|
|
|
@ -16,9 +16,13 @@ static const struct fdt_match serial_htif_match[] = {
|
||||||
{ },
|
{ },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static int serial_htif_init(void *fdt, int nodeoff,
|
||||||
|
const struct fdt_match *match)
|
||||||
|
{
|
||||||
|
return htif_serial_init();
|
||||||
|
}
|
||||||
|
|
||||||
struct fdt_serial fdt_serial_htif = {
|
struct fdt_serial fdt_serial_htif = {
|
||||||
.match_table = serial_htif_match,
|
.match_table = serial_htif_match,
|
||||||
.init = NULL,
|
.init = serial_htif_init
|
||||||
.getc = htif_getc,
|
|
||||||
.putc = htif_putc
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -29,7 +29,5 @@ static const struct fdt_match serial_shakti_match[] = {
|
||||||
|
|
||||||
struct fdt_serial fdt_serial_shakti = {
|
struct fdt_serial fdt_serial_shakti = {
|
||||||
.match_table = serial_shakti_match,
|
.match_table = serial_shakti_match,
|
||||||
.init = serial_shakti_init,
|
.init = serial_shakti_init
|
||||||
.getc = shakti_uart_getc,
|
|
||||||
.putc = shakti_uart_putc
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -32,7 +32,5 @@ static const struct fdt_match serial_sifive_match[] = {
|
||||||
|
|
||||||
struct fdt_serial fdt_serial_sifive = {
|
struct fdt_serial fdt_serial_sifive = {
|
||||||
.match_table = serial_sifive_match,
|
.match_table = serial_sifive_match,
|
||||||
.init = serial_sifive_init,
|
.init = serial_sifive_init
|
||||||
.getc = sifive_uart_getc,
|
|
||||||
.putc = sifive_uart_putc
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -34,6 +34,4 @@ static const struct fdt_match serial_uart8250_match[] = {
|
||||||
struct fdt_serial fdt_serial_uart8250 = {
|
struct fdt_serial fdt_serial_uart8250 = {
|
||||||
.match_table = serial_uart8250_match,
|
.match_table = serial_uart8250_match,
|
||||||
.init = serial_uart8250_init,
|
.init = serial_uart8250_init,
|
||||||
.getc = uart8250_getc,
|
|
||||||
.putc = uart8250_putc
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -23,14 +23,14 @@
|
||||||
|
|
||||||
static volatile void *uart_base;
|
static volatile void *uart_base;
|
||||||
|
|
||||||
void shakti_uart_putc(char ch)
|
static void shakti_uart_putc(char ch)
|
||||||
{
|
{
|
||||||
while((readw(uart_base + REG_STATUS) & UART_TX_FULL))
|
while((readw(uart_base + REG_STATUS) & UART_TX_FULL))
|
||||||
;
|
;
|
||||||
writeb(ch, uart_base + REG_TX);
|
writeb(ch, uart_base + REG_TX);
|
||||||
}
|
}
|
||||||
|
|
||||||
int shakti_uart_getc(void)
|
static int shakti_uart_getc(void)
|
||||||
{
|
{
|
||||||
u16 status = readw(uart_base + REG_STATUS);
|
u16 status = readw(uart_base + REG_STATUS);
|
||||||
if (status & UART_RX_FULL)
|
if (status & UART_RX_FULL)
|
||||||
|
@ -38,11 +38,19 @@ int shakti_uart_getc(void)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static struct sbi_console_device shakti_console = {
|
||||||
|
.name = "shakti_uart",
|
||||||
|
.console_putc = shakti_uart_putc,
|
||||||
|
.console_getc = shakti_uart_getc
|
||||||
|
};
|
||||||
|
|
||||||
int shakti_uart_init(unsigned long base, u32 in_freq, u32 baudrate)
|
int shakti_uart_init(unsigned long base, u32 in_freq, u32 baudrate)
|
||||||
{
|
{
|
||||||
uart_base = (volatile void *)base;
|
uart_base = (volatile void *)base;
|
||||||
u16 baud = (u16)(in_freq/(16 * baudrate));
|
u16 baud = (u16)(in_freq/(16 * baudrate));
|
||||||
writew(baud, uart_base + REG_BAUD);
|
writew(baud, uart_base + REG_BAUD);
|
||||||
|
|
||||||
|
sbi_console_set_device(&shakti_console);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -66,7 +66,7 @@ static void set_reg(u32 num, u32 val)
|
||||||
writel(val, uart_base + (num * 0x4));
|
writel(val, uart_base + (num * 0x4));
|
||||||
}
|
}
|
||||||
|
|
||||||
void sifive_uart_putc(char ch)
|
static void sifive_uart_putc(char ch)
|
||||||
{
|
{
|
||||||
while (get_reg(UART_REG_TXFIFO) & UART_TXFIFO_FULL)
|
while (get_reg(UART_REG_TXFIFO) & UART_TXFIFO_FULL)
|
||||||
;
|
;
|
||||||
|
@ -74,7 +74,7 @@ void sifive_uart_putc(char ch)
|
||||||
set_reg(UART_REG_TXFIFO, ch);
|
set_reg(UART_REG_TXFIFO, ch);
|
||||||
}
|
}
|
||||||
|
|
||||||
int sifive_uart_getc(void)
|
static int sifive_uart_getc(void)
|
||||||
{
|
{
|
||||||
u32 ret = get_reg(UART_REG_RXFIFO);
|
u32 ret = get_reg(UART_REG_RXFIFO);
|
||||||
if (!(ret & UART_RXFIFO_EMPTY))
|
if (!(ret & UART_RXFIFO_EMPTY))
|
||||||
|
@ -82,6 +82,12 @@ int sifive_uart_getc(void)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static struct sbi_console_device sifive_console = {
|
||||||
|
.name = "sifive_uart",
|
||||||
|
.console_putc = sifive_uart_putc,
|
||||||
|
.console_getc = sifive_uart_getc
|
||||||
|
};
|
||||||
|
|
||||||
int sifive_uart_init(unsigned long base, u32 in_freq, u32 baudrate)
|
int sifive_uart_init(unsigned long base, u32 in_freq, u32 baudrate)
|
||||||
{
|
{
|
||||||
uart_base = (volatile void *)base;
|
uart_base = (volatile void *)base;
|
||||||
|
@ -98,5 +104,7 @@ int sifive_uart_init(unsigned long base, u32 in_freq, u32 baudrate)
|
||||||
/* Enable Rx */
|
/* Enable Rx */
|
||||||
set_reg(UART_REG_RXCTRL, UART_RXCTRL_RXEN);
|
set_reg(UART_REG_RXCTRL, UART_RXCTRL_RXEN);
|
||||||
|
|
||||||
|
sbi_console_set_device(&sifive_console);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <sbi/riscv_io.h>
|
#include <sbi/riscv_io.h>
|
||||||
|
#include <sbi/sbi_console.h>
|
||||||
#include <sbi_utils/serial/uart8250.h>
|
#include <sbi_utils/serial/uart8250.h>
|
||||||
|
|
||||||
/* clang-format off */
|
/* clang-format off */
|
||||||
|
@ -68,7 +69,7 @@ static void set_reg(u32 num, u32 val)
|
||||||
writel(val, uart8250_base + offset);
|
writel(val, uart8250_base + offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
void uart8250_putc(char ch)
|
static void uart8250_putc(char ch)
|
||||||
{
|
{
|
||||||
while ((get_reg(UART_LSR_OFFSET) & UART_LSR_THRE) == 0)
|
while ((get_reg(UART_LSR_OFFSET) & UART_LSR_THRE) == 0)
|
||||||
;
|
;
|
||||||
|
@ -76,13 +77,19 @@ void uart8250_putc(char ch)
|
||||||
set_reg(UART_THR_OFFSET, ch);
|
set_reg(UART_THR_OFFSET, ch);
|
||||||
}
|
}
|
||||||
|
|
||||||
int uart8250_getc(void)
|
static int uart8250_getc(void)
|
||||||
{
|
{
|
||||||
if (get_reg(UART_LSR_OFFSET) & UART_LSR_DR)
|
if (get_reg(UART_LSR_OFFSET) & UART_LSR_DR)
|
||||||
return get_reg(UART_RBR_OFFSET);
|
return get_reg(UART_RBR_OFFSET);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static struct sbi_console_device uart8250_console = {
|
||||||
|
.name = "uart8250",
|
||||||
|
.console_putc = uart8250_putc,
|
||||||
|
.console_getc = uart8250_getc
|
||||||
|
};
|
||||||
|
|
||||||
int uart8250_init(unsigned long base, u32 in_freq, u32 baudrate, u32 reg_shift,
|
int uart8250_init(unsigned long base, u32 in_freq, u32 baudrate, u32 reg_shift,
|
||||||
u32 reg_width)
|
u32 reg_width)
|
||||||
{
|
{
|
||||||
|
@ -121,5 +128,7 @@ int uart8250_init(unsigned long base, u32 in_freq, u32 baudrate, u32 reg_shift,
|
||||||
/* Set scratchpad */
|
/* Set scratchpad */
|
||||||
set_reg(UART_SCR_OFFSET, 0x00);
|
set_reg(UART_SCR_OFFSET, 0x00);
|
||||||
|
|
||||||
|
sbi_console_set_device(&uart8250_console);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <sbi/riscv_locks.h>
|
#include <sbi/riscv_locks.h>
|
||||||
|
#include <sbi/sbi_console.h>
|
||||||
#include <sbi_utils/sys/htif.h>
|
#include <sbi_utils/sys/htif.h>
|
||||||
|
|
||||||
#define HTIF_DATA_BITS 48
|
#define HTIF_DATA_BITS 48
|
||||||
|
@ -98,7 +99,7 @@ static void do_tohost_fromhost(uint64_t dev, uint64_t cmd, uint64_t data)
|
||||||
spin_unlock(&htif_lock);
|
spin_unlock(&htif_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
void htif_putc(char ch)
|
static void htif_putc(char ch)
|
||||||
{
|
{
|
||||||
/* HTIF devices are not supported on RV32, so do a proxy write call */
|
/* HTIF devices are not supported on RV32, so do a proxy write call */
|
||||||
volatile uint64_t magic_mem[8];
|
volatile uint64_t magic_mem[8];
|
||||||
|
@ -109,7 +110,7 @@ void htif_putc(char ch)
|
||||||
do_tohost_fromhost(HTIF_DEV_SYSTEM, 0, (uint64_t)(uintptr_t)magic_mem);
|
do_tohost_fromhost(HTIF_DEV_SYSTEM, 0, (uint64_t)(uintptr_t)magic_mem);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
void htif_putc(char ch)
|
static void htif_putc(char ch)
|
||||||
{
|
{
|
||||||
spin_lock(&htif_lock);
|
spin_lock(&htif_lock);
|
||||||
__set_tohost(HTIF_DEV_CONSOLE, HTIF_CONSOLE_CMD_PUTC, ch);
|
__set_tohost(HTIF_DEV_CONSOLE, HTIF_CONSOLE_CMD_PUTC, ch);
|
||||||
|
@ -117,7 +118,7 @@ void htif_putc(char ch)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int htif_getc(void)
|
static int htif_getc(void)
|
||||||
{
|
{
|
||||||
int ch;
|
int ch;
|
||||||
|
|
||||||
|
@ -140,6 +141,19 @@ int htif_getc(void)
|
||||||
return ch - 1;
|
return ch - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static struct sbi_console_device htif_console = {
|
||||||
|
.name = "htif",
|
||||||
|
.console_putc = htif_putc,
|
||||||
|
.console_getc = htif_getc
|
||||||
|
};
|
||||||
|
|
||||||
|
int htif_serial_init(void)
|
||||||
|
{
|
||||||
|
sbi_console_set_device(&htif_console);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int htif_system_reset_check(u32 type, u32 reason)
|
int htif_system_reset_check(u32 type, u32 reason)
|
||||||
{
|
{
|
||||||
return 1;
|
return 1;
|
||||||
|
|
|
@ -164,8 +164,6 @@ const struct sbi_platform_operations platform_ops = {
|
||||||
.final_init = ae350_final_init,
|
.final_init = ae350_final_init,
|
||||||
|
|
||||||
.console_init = ae350_console_init,
|
.console_init = ae350_console_init,
|
||||||
.console_putc = uart8250_putc,
|
|
||||||
.console_getc = uart8250_getc,
|
|
||||||
|
|
||||||
.irqchip_init = ae350_irqchip_init,
|
.irqchip_init = ae350_irqchip_init,
|
||||||
|
|
||||||
|
|
|
@ -154,8 +154,6 @@ const struct sbi_platform_operations platform_ops = {
|
||||||
.early_init = ariane_early_init,
|
.early_init = ariane_early_init,
|
||||||
.final_init = ariane_final_init,
|
.final_init = ariane_final_init,
|
||||||
.console_init = ariane_console_init,
|
.console_init = ariane_console_init,
|
||||||
.console_putc = uart8250_putc,
|
|
||||||
.console_getc = uart8250_getc,
|
|
||||||
.irqchip_init = ariane_irqchip_init,
|
.irqchip_init = ariane_irqchip_init,
|
||||||
.ipi_init = ariane_ipi_init,
|
.ipi_init = ariane_ipi_init,
|
||||||
.ipi_send = clint_ipi_send,
|
.ipi_send = clint_ipi_send,
|
||||||
|
|
|
@ -180,8 +180,6 @@ const struct sbi_platform_operations platform_ops = {
|
||||||
.early_init = openpiton_early_init,
|
.early_init = openpiton_early_init,
|
||||||
.final_init = openpiton_final_init,
|
.final_init = openpiton_final_init,
|
||||||
.console_init = openpiton_console_init,
|
.console_init = openpiton_console_init,
|
||||||
.console_putc = uart8250_putc,
|
|
||||||
.console_getc = uart8250_getc,
|
|
||||||
.irqchip_init = openpiton_irqchip_init,
|
.irqchip_init = openpiton_irqchip_init,
|
||||||
.ipi_init = openpiton_ipi_init,
|
.ipi_init = openpiton_ipi_init,
|
||||||
.ipi_send = clint_ipi_send,
|
.ipi_send = clint_ipi_send,
|
||||||
|
|
|
@ -210,8 +210,6 @@ const struct sbi_platform_operations platform_ops = {
|
||||||
.early_exit = generic_early_exit,
|
.early_exit = generic_early_exit,
|
||||||
.final_exit = generic_final_exit,
|
.final_exit = generic_final_exit,
|
||||||
.domains_init = generic_domains_init,
|
.domains_init = generic_domains_init,
|
||||||
.console_putc = fdt_serial_putc,
|
|
||||||
.console_getc = fdt_serial_getc,
|
|
||||||
.console_init = fdt_serial_init,
|
.console_init = fdt_serial_init,
|
||||||
.irqchip_init = fdt_irqchip_init,
|
.irqchip_init = fdt_irqchip_init,
|
||||||
.irqchip_exit = fdt_irqchip_exit,
|
.irqchip_exit = fdt_irqchip_exit,
|
||||||
|
|
|
@ -149,8 +149,6 @@ const struct sbi_platform_operations platform_ops = {
|
||||||
.final_init = k210_final_init,
|
.final_init = k210_final_init,
|
||||||
|
|
||||||
.console_init = k210_console_init,
|
.console_init = k210_console_init,
|
||||||
.console_putc = sifive_uart_putc,
|
|
||||||
.console_getc = sifive_uart_getc,
|
|
||||||
|
|
||||||
.irqchip_init = k210_irqchip_init,
|
.irqchip_init = k210_irqchip_init,
|
||||||
|
|
||||||
|
|
|
@ -202,8 +202,6 @@ static void ux600_system_reset(u32 type, u32 reason)
|
||||||
const struct sbi_platform_operations platform_ops = {
|
const struct sbi_platform_operations platform_ops = {
|
||||||
.early_init = ux600_early_init,
|
.early_init = ux600_early_init,
|
||||||
.final_init = ux600_final_init,
|
.final_init = ux600_final_init,
|
||||||
.console_putc = sifive_uart_putc,
|
|
||||||
.console_getc = sifive_uart_getc,
|
|
||||||
.console_init = ux600_console_init,
|
.console_init = ux600_console_init,
|
||||||
.irqchip_init = ux600_irqchip_init,
|
.irqchip_init = ux600_irqchip_init,
|
||||||
.ipi_send = clint_ipi_send,
|
.ipi_send = clint_ipi_send,
|
||||||
|
|
|
@ -156,8 +156,6 @@ static u32 fu540_hart_index2id[FU540_HART_COUNT - 1] = {
|
||||||
|
|
||||||
const struct sbi_platform_operations platform_ops = {
|
const struct sbi_platform_operations platform_ops = {
|
||||||
.final_init = fu540_final_init,
|
.final_init = fu540_final_init,
|
||||||
.console_putc = sifive_uart_putc,
|
|
||||||
.console_getc = sifive_uart_getc,
|
|
||||||
.console_init = fu540_console_init,
|
.console_init = fu540_console_init,
|
||||||
.irqchip_init = fu540_irqchip_init,
|
.irqchip_init = fu540_irqchip_init,
|
||||||
.ipi_send = clint_ipi_send,
|
.ipi_send = clint_ipi_send,
|
||||||
|
|
|
@ -63,23 +63,6 @@ static int platform_console_init(void)
|
||||||
PLATFORM_UART_BAUDRATE, 0, 1);
|
PLATFORM_UART_BAUDRATE, 0, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Write a character to the platform console output.
|
|
||||||
*/
|
|
||||||
static void platform_console_putc(char ch)
|
|
||||||
{
|
|
||||||
/* Example if the generic UART8250 driver is used */
|
|
||||||
uart8250_putc(ch);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Read a character from the platform console input.
|
|
||||||
*/
|
|
||||||
static int platform_console_getc(void)
|
|
||||||
{
|
|
||||||
return uart8250_getc();
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Initialize the platform interrupt controller for current HART.
|
* Initialize the platform interrupt controller for current HART.
|
||||||
*/
|
*/
|
||||||
|
@ -198,8 +181,6 @@ static void platform_system_reset(u32 type, u32 reason)
|
||||||
const struct sbi_platform_operations platform_ops = {
|
const struct sbi_platform_operations platform_ops = {
|
||||||
.early_init = platform_early_init,
|
.early_init = platform_early_init,
|
||||||
.final_init = platform_final_init,
|
.final_init = platform_final_init,
|
||||||
.console_putc = platform_console_putc,
|
|
||||||
.console_getc = platform_console_getc,
|
|
||||||
.console_init = platform_console_init,
|
.console_init = platform_console_init,
|
||||||
.irqchip_init = platform_irqchip_init,
|
.irqchip_init = platform_irqchip_init,
|
||||||
.ipi_send = platform_ipi_send,
|
.ipi_send = platform_ipi_send,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue