kernel/arm64: Add kernel support for Samsung UART

Tested on M1 MacBook Air.

Change-Id: Idda9b2a168642b55a9e30336be1c4f4936670035
Reviewed-on: https://review.haiku-os.org/c/haiku/+/10487
Tested-by: Commit checker robot <[email protected]>
Reviewed-by: waddlesplash <[email protected]>
This commit is contained in:
Sam Roberts
2026-03-13 08:34:54 +00:00
committed by Adrien Destugues
parent 013f25498a
commit e438946e25
4 changed files with 19 additions and 0 deletions
@@ -38,4 +38,7 @@ private:
}; };
ArchUARTSamsung *arch_get_uart_samsung(addr_t base, int64 clock);
#endif #endif
+1
View File
@@ -39,6 +39,7 @@ KernelMergeObject kernel_arch_arm64.o :
# arch_uart_8250_omap.cpp # arch_uart_8250_omap.cpp
arch_uart_pl011.cpp arch_uart_pl011.cpp
arch_uart_linflex.cpp arch_uart_linflex.cpp
arch_uart_samsung.cpp
: :
$(TARGET_KERNEL_PIC_CCFLAGS) -Wno-unused $(TARGET_KERNEL_PIC_CCFLAGS) -Wno-unused
@@ -8,6 +8,7 @@
// #include <arch/arm/arch_uart_8250_omap.h> // #include <arch/arm/arch_uart_8250_omap.h>
#include <arch/arm/arch_uart_pl011.h> #include <arch/arm/arch_uart_pl011.h>
#include <arch/arm64/arch_uart_linflex.h> #include <arch/arm64/arch_uart_linflex.h>
#include <arch/arm64/arch_uart_samsung.h>
#include <boot/kernel_args.h> #include <boot/kernel_args.h>
#include <kernel.h> #include <kernel.h>
#include <vm/vm.h> #include <vm/vm.h>
@@ -114,6 +115,10 @@ arch_debug_console_init(kernel_args *args)
sizeof(args->arch_args.uart.kind)) == 0) { sizeof(args->arch_args.uart.kind)) == 0) {
sArchDebugUART = arch_get_uart_8250(args->arch_args.uart.regs.start, sArchDebugUART = arch_get_uart_8250(args->arch_args.uart.regs.start,
args->arch_args.uart.clock); args->arch_args.uart.clock);
} else if (strncmp(args->arch_args.uart.kind, UART_KIND_SAMSUNG,
sizeof(args->arch_args.uart.kind)) == 0) {
sArchDebugUART = arch_get_uart_samsung(args->arch_args.uart.regs.start,
args->arch_args.uart.clock);
} }
// Oh well. // Oh well.
@@ -8,6 +8,7 @@
#include <arch/generic/debug_uart.h> #include <arch/generic/debug_uart.h>
#include <arch/arm64/arch_uart_samsung.h> #include <arch/arm64/arch_uart_samsung.h>
#include <new>
#define ULCON 0x00 // Line control #define ULCON 0x00 // Line control
@@ -131,3 +132,12 @@ void
ArchUARTSamsung::FlushRx() ArchUARTSamsung::FlushRx()
{ {
} }
ArchUARTSamsung*
arch_get_uart_samsung(addr_t base, int64 clock)
{
static char buffer[sizeof(ArchUARTSamsung)];
ArchUARTSamsung* uart = new(buffer) ArchUARTSamsung(base, clock);
return uart;
}