19afe87e0SMarouene Boubakri // SPDX-License-Identifier: BSD-2-Clause 29afe87e0SMarouene Boubakri /* 39afe87e0SMarouene Boubakri * Copyright 2022 NXP 49afe87e0SMarouene Boubakri */ 59afe87e0SMarouene Boubakri 69afe87e0SMarouene Boubakri #include <assert.h> 79afe87e0SMarouene Boubakri #include <compiler.h> 89afe87e0SMarouene Boubakri #include <config.h> 99afe87e0SMarouene Boubakri #include <console.h> 109afe87e0SMarouene Boubakri #include <drivers/serial.h> 119afe87e0SMarouene Boubakri #include <kernel/spinlock.h> 129afe87e0SMarouene Boubakri #include <riscv.h> 139afe87e0SMarouene Boubakri #include <sbi.h> 149afe87e0SMarouene Boubakri #include <trace.h> 159afe87e0SMarouene Boubakri #include <util.h> 169afe87e0SMarouene Boubakri 179afe87e0SMarouene Boubakri struct sbi_console_data { 189afe87e0SMarouene Boubakri struct serial_chip chip; 199afe87e0SMarouene Boubakri }; 209afe87e0SMarouene Boubakri 219afe87e0SMarouene Boubakri static struct sbi_console_data console_data __nex_bss; 22*d1c9f59aSYu Chien Peter Lin static struct serial_ops sbi_console_ops __nex_bss; 239afe87e0SMarouene Boubakri sbi_console_putc_legacy(struct serial_chip * chip __unused,int ch)24*d1c9f59aSYu Chien Peter Linstatic void sbi_console_putc_legacy(struct serial_chip *chip __unused, int ch) 259afe87e0SMarouene Boubakri { 269afe87e0SMarouene Boubakri sbi_console_putchar(ch); 279afe87e0SMarouene Boubakri } 289afe87e0SMarouene Boubakri sbi_console_putc(struct serial_chip * chip __unused,int ch)29*d1c9f59aSYu Chien Peter Linstatic void sbi_console_putc(struct serial_chip *chip __unused, int ch) 30*d1c9f59aSYu Chien Peter Lin { 31*d1c9f59aSYu Chien Peter Lin sbi_dbcn_write_byte(ch); 32*d1c9f59aSYu Chien Peter Lin } 339afe87e0SMarouene Boubakri sbi_console_init(struct sbi_console_data * pd)349afe87e0SMarouene Boubakristatic void sbi_console_init(struct sbi_console_data *pd) 359afe87e0SMarouene Boubakri { 36*d1c9f59aSYu Chien Peter Lin if (sbi_probe_extension(SBI_EXT_DBCN)) 37*d1c9f59aSYu Chien Peter Lin sbi_console_ops.putc = sbi_console_putc; 38*d1c9f59aSYu Chien Peter Lin else 39*d1c9f59aSYu Chien Peter Lin sbi_console_ops.putc = sbi_console_putc_legacy; 40*d1c9f59aSYu Chien Peter Lin 419afe87e0SMarouene Boubakri pd->chip.ops = &sbi_console_ops; 429afe87e0SMarouene Boubakri } 439afe87e0SMarouene Boubakri plat_console_init(void)4455ab8f06SAlvin Changvoid plat_console_init(void) 459afe87e0SMarouene Boubakri { 469afe87e0SMarouene Boubakri sbi_console_init(&console_data); 479afe87e0SMarouene Boubakri register_serial_console(&console_data.chip); 489afe87e0SMarouene Boubakri } 49