From acb424c8b7f0e29b68eb279a7c236ae4c28d122c Mon Sep 17 00:00:00 2001 From: David Karoly Date: Tue, 15 Feb 2022 18:16:07 +0100 Subject: [PATCH] boot/arm: move system_time and spin to platform Add fake implementation for system_time() Implement spin() using EFI boot services Change-Id: Ib69b851780bd03624ce4e19d725dd319f6640601 Reviewed-on: https://review.haiku-os.org/c/haiku/+/4964 Tested-by: Commit checker robot Reviewed-by: Fredrik Holmqvist --- .../private/kernel/boot/arch/arm/arch_cpu.h | 11 +++--- src/system/boot/arch/arm/Jamfile | 2 ++ src/system/boot/arch/arm/arch_cpu.cpp | 35 ++++++------------- src/system/boot/platform/efi/arch/arm/Jamfile | 3 ++ .../boot/platform/efi/arch/arm/arch_cpu.cpp | 31 ++++++++++++++++ 5 files changed, 53 insertions(+), 29 deletions(-) create mode 100644 src/system/boot/platform/efi/arch/arm/arch_cpu.cpp diff --git a/headers/private/kernel/boot/arch/arm/arch_cpu.h b/headers/private/kernel/boot/arch/arm/arch_cpu.h index bf89986fac..c81a2f317f 100644 --- a/headers/private/kernel/boot/arch/arm/arch_cpu.h +++ b/headers/private/kernel/boot/arch/arm/arch_cpu.h @@ -1,9 +1,9 @@ /* - * Copyright 2013-2020 Haiku, Inc. All rights reserved. + * Copyright 2013-2022 Haiku, Inc. All rights reserved. * Distributed under the terms of the MIT License. */ -#ifndef EFI_BOOT_PLATFORM_EFI_ARCH_CPU_H -#define EFI_BOOT_PLATFORM_EFI_ARCH_CPU_H +#ifndef BOOT_ARCH_CPU_H +#define BOOT_ARCH_CPU_H #include @@ -17,9 +17,12 @@ extern "C" { status_t boot_arch_cpu_init(void); void arch_ucode_load(BootVolume& volume); +bigtime_t system_time(); +void spin(bigtime_t microseconds); + #ifdef __cplusplus } #endif -#endif /* EFI_BOOT_PLATFORM_EFI_ARCH_CPU_H */ +#endif /* BOOT_ARCH_CPU_H */ diff --git a/src/system/boot/arch/arm/Jamfile b/src/system/boot/arch/arm/Jamfile index 3aacfc467c..a1f25f9a9a 100644 --- a/src/system/boot/arch/arm/Jamfile +++ b/src/system/boot/arch/arm/Jamfile @@ -1,5 +1,7 @@ SubDir HAIKU_TOP src system boot arch arm ; +UsePrivateHeaders [ FDirName kernel arch arm ] ; +UsePrivateHeaders [ FDirName kernel boot arch arm ] ; UsePrivateHeaders [ FDirName kernel platform $(TARGET_BOOT_PLATFORM) ] ; local librootGenericSources = diff --git a/src/system/boot/arch/arm/arch_cpu.cpp b/src/system/boot/arch/arm/arch_cpu.cpp index e544ed6a12..8231b45109 100644 --- a/src/system/boot/arch/arm/arch_cpu.cpp +++ b/src/system/boot/arch/arm/arch_cpu.cpp @@ -1,11 +1,14 @@ /* - * Copyright 2012-2020, Haiku, Inc. All rights reserved. + * Copyright 2012-2022, Haiku, Inc. All rights reserved. * Distributed under the terms of the MIT License. * * Authors: * Ithamar R. Adema */ +#include +#include + #include #include #include @@ -19,9 +22,9 @@ #define TRACE_CPU #ifdef TRACE_CPU -# define TRACE(x) dprintf x +# define TRACE(x...) dprintf(x) #else -# define TRACE(x) ; +# define TRACE(x...) ; #endif @@ -81,14 +84,14 @@ check_cpu_features() break; } - TRACE(("%s: implementor=0x%x('%c'), arch=%d, variant=0x%x, part=0x%x, revision=0x%x\n", - __func__, implementor, implementor, arch, variant, part, revision)); + TRACE("%s: implementor=0x%x('%c'), arch=%d, variant=0x%x, part=0x%x, revision=0x%x\n", + __func__, implementor, implementor, arch, variant, part, revision); return (arch < ARCH_ARM_v5) ? B_ERROR : B_OK; } -extern "C" status_t +status_t boot_arch_cpu_init(void) { status_t err = check_cpu_features(); @@ -101,26 +104,8 @@ boot_arch_cpu_init(void) } -extern "C" void +void arch_ucode_load(BootVolume& volume) { // NOP on arm currently } - - -extern "C" bigtime_t -system_time() -{ - #warning Implement system_time in ARM bootloader! - return 0; -} - - -extern "C" void -spin(bigtime_t microseconds) -{ - #warning Implment spin in ARM bootloader! - //bigtime_t time = system_time(); - //while ((system_time() - time) < microseconds) - // asm volatile ("nop;"); -} diff --git a/src/system/boot/platform/efi/arch/arm/Jamfile b/src/system/boot/platform/efi/arch/arm/Jamfile index 588fdff51d..960f44f84b 100644 --- a/src/system/boot/platform/efi/arch/arm/Jamfile +++ b/src/system/boot/platform/efi/arch/arm/Jamfile @@ -4,7 +4,9 @@ SubDirHdrs $(HAIKU_TOP) src system boot platform efi ; UseLibraryHeaders [ FDirName libfdt ] ; +UsePrivateHeaders [ FDirName kernel arch arm ] ; UsePrivateHeaders [ FDirName kernel platform ] ; +UsePrivateHeaders [ FDirName kernel boot arch arm ] ; UsePrivateHeaders [ FDirName kernel boot platform efi ] ; local platform ; @@ -21,6 +23,7 @@ for platform in [ MultiBootSubDirSetup efi ] { crt0-efi-$(TARGET_ARCH).S entry.S relocation_func.cpp + arch_cpu.cpp arch_dtb.cpp arch_mmu.cpp arch_smp.cpp diff --git a/src/system/boot/platform/efi/arch/arm/arch_cpu.cpp b/src/system/boot/platform/efi/arch/arm/arch_cpu.cpp new file mode 100644 index 0000000000..433f9228d2 --- /dev/null +++ b/src/system/boot/platform/efi/arch/arm/arch_cpu.cpp @@ -0,0 +1,31 @@ +/* + * Copyright 2012-2022, Haiku, Inc. All rights reserved. + * Distributed under the terms of the MIT License. + * + * Copyright 2004-2005, Axel Dörfler, axeld@pinc-software.de. All rights reserved. + * Distributed under the terms of the MIT License. + */ + + +#include "cpu.h" +#include "efi_platform.h" + +#include +#include +#include + + +bigtime_t +system_time() +{ + #warning Implement system_time in ARM bootloader! + static bigtime_t sSystemTimeCounter = 0; + return sSystemTimeCounter++; +} + + +void +spin(bigtime_t microseconds) +{ + kBootServices->Stall(microseconds); +}