1 /*
2  * Copyright 2020, Data61, CSIRO (ABN 41 687 119 230)
3  *
4  * SPDX-License-Identifier: GPL-2.0-only
5  */
6 
7 #include <mode/machine.h>
8 #include <arch/machine/fpu.h>
9 #include <mode/model/statedata.h>
10 
11 bool_t isFPUEnabledCached[CONFIG_MAX_NUM_NODES];
12 
13 #ifdef CONFIG_HAVE_FPU
14 /* Initialise the FP/SIMD for this machine. */
fpsimd_init(void)15 BOOT_CODE bool_t fpsimd_init(void)
16 {
17     /* Set the FPU to lazy switch mode */
18     disableFpu();
19     if (config_set(CONFIG_ARM_HYPERVISOR_SUPPORT)) {
20         enableFpuEL01();
21     }
22 
23     return true;
24 }
25 #endif /* CONFIG_HAVE_FPU */
26 
fpsimd_HWCapTest(void)27 BOOT_CODE bool_t fpsimd_HWCapTest(void)
28 {
29     word_t id_aa64pfr0;
30 
31     /* Check if the hardware has FP and ASIMD support... */
32     MRS("id_aa64pfr0_el1", id_aa64pfr0);
33     if (((id_aa64pfr0 >> ID_AA64PFR0_EL1_FP) & MASK(4)) == MASK(4) ||
34         ((id_aa64pfr0 >> ID_AA64PFR0_EL1_ASIMD) & MASK(4)) == MASK(4)) {
35         return false;
36     }
37 
38     return true;
39 }
40