wip.
[AROS.git] / arch / arm-all / processor / processor_init.c
blob0454b87d7f53bca35982ceba764d6b4516d9994c
1 /*
2 Copyright © 2013-2015, The AROS Development Team. All rights reserved.
3 $Id$
4 */
6 #define DEBUG 0
7 #include <aros/debug.h>
9 #include <proto/exec.h>
10 #include <proto/kernel.h>
11 #include <aros/symbolsets.h>
13 #include <resources/processor.h>
15 #include "processor_intern.h"
16 #include "processor_arch_intern.h"
18 #define DUMPINFO(a) a
20 LONG Processor_Init(struct ProcessorBase * ProcessorBase)
22 struct ARMProcessorInformation **sysprocs;
23 unsigned int i;
25 D(bug("[processor.ARM] :%s()\n", __PRETTY_FUNCTION__));
27 sysprocs = AllocVec(ProcessorBase->cpucount * sizeof(APTR), MEMF_ANY | MEMF_CLEAR);
28 if ((ProcessorBase->Private1 = sysprocs) == NULL)
29 return FALSE;
31 for (i = 0; i < ProcessorBase->cpucount; i++)
33 sysprocs[i] = AllocMem(sizeof(struct ARMProcessorInformation), MEMF_CLEAR);
34 if (!sysprocs[i])
35 return FALSE;
36 #if defined(__AROSEXEC_SMP__)
37 if (i > 0)
39 struct TagItem coreTags[] =
41 {NP_Entry , ReadProcessorInformation },
42 {TASKTAG_AFFINITY , (1<<i) },
43 {NP_UserData , sysprocs[i] },
44 {TAG_DONE , NULL }
46 CreateNewProc(coreTags);
48 #endif
51 /* Boot CPU is number 0. Fill in its data. */
52 ReadProcessorInformation(sysprocs[0]);
54 DUMPINFO(
55 if (sysprocs[0]->FamilyString)
57 bug("[processor.ARM] %s ARM%s Processor Core\n", sysprocs[0]->Vendor, sysprocs[0]->FamilyString);
59 else
61 bug("[processor.ARM] %s ARM Processor Core (unknown family)\n", sysprocs[0]->Vendor);
64 if (sysprocs[0]->Features1 & FEATF_FPU_VFP4)
66 bug("[processor.ARM] VFPv4 Co-Processor\n");
68 else if (sysprocs[0]->Features1 & FEATF_FPU_VFP3_16)
70 bug("[processor.ARM] VFPv3 [16Double] Co-Processor\n");
72 else if (sysprocs[0]->Features1 & FEATF_FPU_VFP3)
74 bug("[processor.ARM] VFPv3 Co-Processor\n");
76 else if (sysprocs[0]->Features1 & FEATF_FPU_VFP2)
78 bug("[processor.ARM] VFPv2 Co-Processor\n");
80 else
82 bug("[processor.ARM] VFPv1 Co-Processor\n");
85 if (sysprocs[0]->Features1 & FEATF_NEON)
87 bug("[processor.ARM] NEON SIMD Extensions\n");
90 bug("[processor.ARM] Cache Info:\n");
91 bug("[processor.ARM] L1 Data : %dKb\n", sysprocs[0]->L1DataCacheSize);
92 bug("[processor.ARM] L1 Instr. : %dKb\n", sysprocs[0]->L1InstructionCacheSize);
95 return TRUE;
98 ADD2INITLIB(Processor_Init, 1);