History log of /seL4-l4v-10.1.1/seL4/src/arch/arm/kernel/boot.c
Revision Date Author Comments
# 315562d3 21-Mar-2018 Anna Lyons <Anna.Lyons@data61.csiro.au>

TX1: error on SMP + cpu utilisation tracking

TX1 has multiple interrupts for the PMU, one per core. This is
not currently implemented, and is tracked in SELFOUR-1252. It will
work on 1 core.


# 59d9bd78 13-Mar-2018 Yanyan Shen <yanyan.shen@data61.csiro.au>

armv8: Check TCR_EL2 configuration in init_cpu.


# 1936323e 23-Jan-2018 Yanyan Shen <yanyan.shen@data61.csiro.au>

armv8: Add SMP support for aarch64

(1) Use NODE_STATE() to access per-core kernel data.
(2) Allocate kernel stack in src/arch/arm/64/head.S.
(3) Use the TPIDR_EL1 to contain the kernel stack pointer
as well as the logical core ID. The kernel stack must
be 4-KiB aligned, and the lowest 12 bits of TPIDR_EL1
are for the logical core ID.
(4) Define the LD_EX, ST_EX, and OP_WIDTH as "ldxr", "stxr",
and "w".
(5) Add irq_remote_call_ipi and irq_reschedule_ipi


# c89b9828 15-Nov-2017 Anna Lyons <Anna.Lyons@data61.csiro.au>

Make TIMER_CLOCK_HZ available in timer.h for ARM

The RT kernel needs this value accessible to common functions.


# 2f7d3bb9 14-Nov-2017 Anna Lyons <Anna.Lyons@data61.csiro.au>

Move definition of initTimer to be arm specific

initTimer does not exist on x86


# 25eba565 15-Oct-2017 Adrian Danis <Adrian.Danis@data61.csiro.au>

arm: Add missing memory fence

Without a release+acquire fence here the compiler may assume that the value of ksNumCPUs
does not change, and essentially elide the loop.


# 57fa0e0f 07-Aug-2017 Hesham Almatary <hesham.almatary@data61.csiro.au>

Share linker.h between architectures


# ee28936d 18-Jun-2017 Hesham Almatary <hesham.almatary@data61.csiro.au>

SMP: Introduce ENABLE_SMP_SUPPORT

- Make it more readable and less confusing compared to the 'CONFIG_MAX_NUM_NODES > 1' check


# 64d576fb 12-Jun-2017 Hesham Almatary <hesham.almatary@data61.csiro.au>

SELFOUR-806: aarch32 - Implement lazy FP save/restore

This commit implements lazy FP save/restore mechanism, required for user threads
when they use the FPU. The following caveats take place:

* Only support synchronous exceptions. No support for asynchronous ones.
* VFP opcodes are used instead of normal instructions to discard compiler warnings/errors.
* Support is limited to specific ARM subarchitectures we support and tested this commit on.
* Disable the FPU by default if users are not using it to avoid channels.
* FPU support is not verified yet.
* Will not work properly if using a VM that's running besides other VMs/threads that are using the FPU.


# 4baa8482 28-Jun-2017 Hesham Almatary <hesham.almatary@data61.csiro.au>

SELFOUR-746: IPI Handler for ARM


# 2499f872 16-Mar-2017 Hesham Almatary <hesham.almatary@data61.csiro.au>

ARM/SMP: rename/add IRQ macros to match with x86


# 0a6f9a5d 14-Mar-2017 Hesham Almatary <hesham.almatary@data61.csiro.au>

SELFOUR-748: ARM - Support local/remote TLB invalidation operations


# 93cc22b2 09-Mar-2017 amrzar <azarrabi@nicta.com.au>

smp: fix bugs when stalling remote core

- Restart TCB from inside the lock if it is waiting for anything other than IRQ
- Only replace the TCB with idle thread if it is in ThreadState_RunningVM state

Also, this makes the design generic to be shared with arm.


# 6103d8f2 15-Mar-2017 Anna Lyons <Anna.Lyons@data61.csiro.au>

trivial: typos in previous commit


# f42d6363 15-Mar-2017 Anna Lyons <Anna.Lyons@data61.csiro.au>

refactor: initialise common core state in one place


# cea76d17 07-Mar-2017 Bamboo <bamboo@keg.ertos.in.nicta.com.au>

[STYLE_FIX]


# 59724015 01-Mar-2017 Hesham Almatary <hesham.almatary@data61.csiro.au>

SELFOUR-744: ARM - preliminary booting of other cores


# b8f9dcac 27-Feb-2017 Hesham Almatary <hesham.almatary@data61.csiro.au>

ARM/IRQ: add a function to initialise local IRQ controller for CPUs

Similar to initIRQController(), cpu_initLocalIRQController() has to
be implemented for each platform. For those that are gonna support
SMP, it should be implemented proprely (if required), otherwise
it can be stubbed for single core implementations.


# c4395425 26-Feb-2017 Adrian Danis <Adrian.Danis@data61.csiro.au>

Remove assumption on 32-bit memory offsets

On 64-bit platforms physical address could be >2^32 offset from a virtual address. This
changes offsets to match the word size of the target architecture


# 03c323c1 26-Feb-2017 Hesham Almatary <hesham.almatary@data61.csiro.au>

ARM/Boot: initialise private timer, user access and benchmark in CPU context

In SMP context, init_cpu is meant to be called for each CPU, where
initialising private timer, user access and benchmarks (basically CCNT)
are per-CPU operations and involve per-CPU hardware
resources/interrupts.


# 8610061a 23-Feb-2017 amrzar <azarrabi@nicta.com.au>

aarch64: FPU lazy context switch


# 35e48115 22-Feb-2017 Hesham Almatary <hesham.almatary@data61.csiro.au>

Verification: Guard getCurrentCPUIndex() with SMP #define


# c1407c55 19-Feb-2017 Hesham Almatary <hesham.almatary@data61.csiro.au>

[SELFOUR-744]: Modify head.S to load stacks for each core and implement getCurrentCPUIndex


# e0adcae3 15-Feb-2017 Bamboo <bamboo@keg.ertos.in.nicta.com.au>

[STYLE_FIX]


# 22f9d7b9 12-Feb-2017 amrzar <azarrabi@nicta.com.au>

Update init_freemem to check for mode dependant reserve regions


# 0b2fe8d6 17-Jan-2017 amrzar <azarrabi@nicta.com.au>

aarch64: Initial implementation


# 5d146463 18-Jan-2017 Hesham Almatary <hesham.almatary@data61.csiro.au>

ARM: Refactor how we get/set seL4 kernel stack

This commit makes seL4 hold the stack address on TPIDRPRW register (PL1 only
Thread ID Register, VMSA, see B4.1.150 section of ARMv7-A and ARMv7-R
edition reference manual).

Originally, the kernel stack was (re-)mapped to a fixed kernel virtual address and
on traps sp is loaded with this virtual address. Reason is to shave up some
cycles/instructions on (fast) traps path instead of having two instructions
(loading global variable pointer and then memory-load stack address from
it).

With ARM pipelining getting smart/complex (from ARMv7 onwards), there is
no noticeable difference in performance between the two implementations.
Furthermore, this change makes it easy for SMP to load different stacks
for each core and do CPU ID arithmetic efficiently. It also avoids the
issues involving (re-)mapping stacks for different cores if we
followed the original design.

Note: the main side-effect to this change is that the kernel stack for
ARM is no longer mapped with execute-never attribute.


# bebfcf6d 23-Jun-2016 Kofi Doku Atuah <kofi.dokuatuah@nicta.com.au>

SELFOUR-499: X86, ARM: Add userspace invocations for hardware debugging

This commit implements the body of SELFOUR-499. The API exposes the x86 DR0-7
and ARM coprocessor 14 features to userspace by virtualizing them as context-
switched registers in the TCB. Implemented as TCB invocations. This feature is
only built when CONFIG_HARDWARE_DEBUG_API is selected.

* Add low-level support routines for setting, unsetting, getting, enabling
and disabling breakpoints.
* Add support for single-stepping as well.
^ Single-stepping is not supported on ARMv6 since the hardware
doesn't have support.
^ ARM implements single-stepping as instruction breakpoints
configured to fault on every instruction -- this is achieved through
the "mismatch" mode, which is only supported from ARMv7 onwards.
* Also support explicit software break requests, a la "BKPT" and "INT $3".

* New invocations:
* seL4_TCB_SetBreakpoint().
* seL4_TCB_GetBreakpoint().
* seL4_TCB_UnsetBreakpoint().
* seL4_TCB_ConfigureSingleStepping().
* New constants:
^ Event types:
^ seL4_InstructionBreakpoint.
^ seL4_DataBreakpoint.
^ seL4_SoftwareBreakRequest.
^ Access types:
^ seL4_BreakOnRead.
^ seL4_BreakOnWrite.
^ seL4_BreakOnReadWrite.
^ Exports:
^ seL4_NumHWBreakpoints.
^ seL4_NumExclusiveBreakpoints.
^ seL4_NumExclusiveWatchpoints.
^ seL4_NumDualFunctionMonitors.
^ seL4_FirstBreakpoint.
^ seL4_FirstWatchpoint.
^ seL4_FirstDualFunctionMonitor.

See documentation in the seL4 API manual.


# d507b2d3 09-Feb-2016 Adrian Danis <Adrian.Danis@nicta.com.au>

SELFOUR-421 Introduce explicit device frames and untypeds

Kernel objects cannot be created from device untypeds, with the
exception of frames, which do not get zeroed and cannot be used
as an IPC buffer. Device untypeds additionally cannot be used
in the construction of ASID pools.

This then changes the API to the rootserver (i.e. bootinfo) to
send device untypeds instead of device frames. On ARM these
device untypeds are the same as the previously exported device
frame regions. On x86 PCI scanning is removed and all physical
memory addresses (that are not important for kernel integrity)
are released to the user.

In order to have bits in the frame and untyped caps on ARM the
number of software ASIDs had to be reduced from 2^18 to 2^17,
and the maximum untyped size reduced from 2^31 to 2^30


# 3c05b79a 27-Jul-2016 Adrian Danis <Adrian.Danis@data61.csiro.au>

Provide generic C entry/exit hook routines

It can be deseriable to run code before/after user mode, but
not have to write it in assembly. This commit adds such stubs
that get called as the first/last C code when coming in
and out of the kernel


# 6d891b0a 26-Jul-2016 Adrian Danis <Adrian.Danis@data61.csiro.au>

SELFOUR-551: Remove direct accesses to machine data structures

This commit wraps accesses to the vgic in functions that are marked as
DONT_TRANSLATE and uses a global constant (that is determined at boot time)
for the number of LR registers to prevent loops that have undefined bounds


# 09358f9b 23-Jun-2016 Hesham Almatary <Hesham.Almatary@nicta.com.au>

SELFOUR-448 Benchmark: Track thread's CPU utilisation time


# c5b6a6a5 06-Jun-2016 Anna Lyons <Anna.Lyons@nicta.com.au>

Refactor duplicated code in hardware.h

One copy to rule them all.


# 5f0ae410 02-Jun-2016 Adrian Danis <Adrian.Danis@data61.csiro.au>

arm-hyp: Minor cleanups

Cleanup some small licensing, whitespace and configuration details


# 31918359 28-Apr-2016 Corey Richardson <corey@octayn.net>

SELFOUR-229: add error condition for root task overlapping kernel window on ARM


# c85094bb 29-May-2016 Yanyan Shen <yanyan.shen@nicta.com.au>

arm-hyp/tk1: add guards so other plats can compile.


# b783eecc 26-May-2016 Yanyan Shen <yanyan.shen@nicta.com.au>

arm-hyp/tk1: make style


# 27ecdffe 26-May-2016 Yanyan Shen <yanyan.shen@nicta.com.au>

arm-hyp/tk1: address review comments.


# fc1feb67 24-May-2016 Hesham Almatary <Hesham.Almatary@nicta.com.au>

SELFOUR-446 Benchmark: Track syscall feature

Benchmark feature that currently:
- Keeps track of system calls info
- Start time
- Duration
- Capability type
- Invocation tag
- Log the number of invocations of each system call*
- Log the number of invocations for each capability type per syscall.
- Has 3 new syscalls (dump, reset, get size).
- This new feature uses the existing log buffer (which is 1MiB for x86
and ARM). Since the number of syscall invocations is not
deterministic, the logged number of invocations is limited by the size
of the buffer. I suggested to enable the users to pass their own
user-level buffer, to enable more flexibility, later.
- ENABLE_BENCHMARKS is now a parent config option of trace points and
system call track features, they can't be used at the same time.


# b1e4f92f 19-May-2016 Yanyan Shen <yanyan.shen@nicta.com.au>

arm-hyp/tk1: reserve the SMMU interrupt


# 851fccc2 18-May-2016 Yanyan Shen <yanyan.shen@nicta.com.au>

arm-hyp/tk1: put iospace caps to bootinfo


# 879d9724 13-May-2016 Yanyan Shen <yanyan.shen@nicta.com.au>

arm/tk1: a checkpoint for SMMU implementation


# cbb6bf15 02-Mar-2016 Yanyan Shen <yanyan.shen@nicta.com.au>

arm_hyp: add file to contain hyp mode inline funcs

machine_pl2.h:
new place for hyp mode inline functions.

boot.c:
replace #ifdef ARM_HYP with config_set(ARM_HYP).

vcpu.h, machine_pl2.h:
add empty functions when ARM_HYP is not defined to
pass compilation.


# 3abf177c 02-Mar-2016 Yanyan Shen <yanyan.shen@nicta.com.au>

arm_hyp: add file to contain hyp mode inline funcs

machine_pl2.h:
new place for hyp mode inline functions.

boot.c:
replace #ifdef ARM_HYP with config_set(ARM_HYP).

vcpu.h, machine_pl2.h:
add empty functions when ARM_HYP is not defined to
pass compilation.


# 289bf92b 05-Jan-2016 Anna Lyons <Anna.Lyons@nicta.com.au>

SELFOUR-114: remove bootinfo.h duplication


# 3959ced3 17-Jan-2016 amrzar <azarrabi@nicta.com.au>

Remove mode dependant codes for initial thread from architecture dependant boot codes


# 3439c6bd 28-Jun-2015 Adrian Danis <Adrian.Danis@nicta.com.au>

Do not switch to the the root thread until after cpu initialization is done


# 171824f7 07-Dec-2015 Adrian Danis <Adrian.Danis@nicta.com.au>

Change additional int->word_t due to interraction with the C parser to ease verification


# 2d61910e 09-Nov-2015 Adrian Danis <Adrian.Danis@nicta.com.au>

Rename uint32_t -> word_t in any relevant places


# e82953a1 01-Sep-2015 Stephen Sherratt <Stephen.Sherratt@nicta.com.au>

Removed CONFIG_BENCHMARK config option. All checks for '#ifdef CONFIG_BENCHMARK' replaced with '#if CONFIG_MAX_NUM_TRACE_POINTS > 0'.


# 4f12acd2 25-Feb-2015 Matthew Fernandez <matthew.fernandez@nicta.com.au>

ARM: Map the initial thread's IPC buffer and boot info as non-executable.

Note that this also required some irrelevant x86 changes to match function
arguments.


# b62b20f2 20-Feb-2015 akroh <Alexander.Kroh@nicta.com.au>

ARM: Add config options for exporting PMU and ARM generic timer physical count registers to PL0


# f2ac14f1 16-Feb-2015 Adrian Danis <Adrian.Danis@nicta.com.au>

arm: Rename BI_CAP_IT_PD to BI_CAP_IT_VSPACE to match x86 and common boot code


# 0b64f564 07-Aug-2014 Adrian Danis <Adrian.Danis@nicta.com.au>

arm: Perform additional cache clean to prevent TLB walker loading garbage entries for first user process


# a318446f 07-Jul-2014 TrustworthySystems <gatekeeper@sel4.systems>

Recommit of arm_hyp branch on release snapshot


# 91b7da86 17-Jul-2014 TrusthworthySystems <gatekeeper@sel4.systems>

Release snapshot