Commit Graph

17 Commits

Author SHA1 Message Date
Kinsey Moore
b44e26baa7 bsps/aarch64: Flush cache before disabling MMU
To ensure data consistency, the cache much be flushed before disabling
the MMU. When the MMU is disabled, all accesses are treated as
non-cachced and thus will bypass the cache.
2023-02-14 08:33:52 -06:00
Kinsey Moore
a9861ceea0 aarch64/mmu: Prevent block descriptors at level -1
In the original implementation, level -1 was unused and all levels could
have block-like descriptors (level 2 block descriptors are called page
descriptors). When support for level -1 page tables was added the
constraint on level -1 block descriptors was not honored. This prevents
block descriptors from being mapped at level -1 since the hardware will
not map them properly.
2022-11-17 10:29:04 +11:00
Kinsey Moore
10ef7087f6 aarch64: Use page table level 0
This alters the AArch64 page table generation and mapping code and MMU
configuration to use page table level 0 in addition to levels 1, 2, and
3. This allows the mapping of up to 48 bits of memory space and is the
maximum that can be mapped without relying on additional processor
extensions. Mappings are restricted based on the number of physical
address bits that the CPU supports.
2022-07-21 12:26:35 -05:00
Kinsey Moore
1e360d3140 aarch64: Memory map the noinit section
This section was added recently and must be mapped to be accessed
without generating an exception.
2022-07-18 09:33:32 +10:00
Kinsey Moore
2f6ee01e9e bsps/aarch64: Use MMU pages appropriately
There were two bugs with MMU page use that were partially hiding each
other. The linker script page table section was 4x the size it needed to
be and the page table allocation routine was allocating pages PTRSIZE
times larger than it needed to. On ILP32, this resulted in incorrect but
functional allocation. On LP64, this resulted in allocation failures
earlier than expected.
2022-07-06 10:22:08 -05:00
Chris Johns
bfc99a6e70 bsp/aarch64: Flush the cache before invalidating it
- Any page tables need to be flushed if the cache is enabled.
  Disabling the cache may only be available in secure mode.
2022-06-16 10:21:46 +10:00
Chris Johns
66dc06efce bsp/aarch64: Fix array warning
Updates #4664
2022-06-11 12:08:49 +10:00
Kinsey Moore
ef207e9ed5 bsps/aarch64: Restore interrupt nesting
Fixing the debug mask flag broke nested interrupts. This restores that
functionality.
2021-11-10 10:51:40 -06:00
Kinsey Moore
a857a225d0 cpukit/aarch64: Add libdebugger support
This adds support for libdebugger under AArch64 using software
breakpoints and the single-step execution mode present in all AArch64
CPUs.
2021-11-01 08:39:00 -05:00
Kinsey Moore
2d27725838 bsps/aarch64: Set interrupt level correctly
The existing code is functional but inccorrect and blindly modifies the
other masking bits. It is important to preserve those other bits since
they control masking of important system events.
2021-11-01 08:39:00 -05:00
Kinsey Moore
55a93ae3b4 bsps/aarch64: Add missing MMU map recursion check
Certain input parameters for MMU mapping operations could cause an
infinite recursion if block end boundaries didn't align to 4k. This
ensures that recursion descent does not exceed 2 levels and instead
rounds up to the nearest 4k block if necessary.
2021-11-01 08:39:00 -05:00
Kinsey Moore
2055e42362 aarch64: Break out MMU definitions
This moves the AArch64 MMU memory type definitions into cpukit for use
by libdebugger since remapping of memory is required to insert software
breakpoints.
2021-11-01 08:39:00 -05:00
Kinsey Moore
5f652cb27e cpukit: Add AArch64 SMP Support
This adds SMP support for AArch64 in cpukit and for the ZynqMP BSPs.
2021-09-21 08:58:32 -05:00
Kinsey Moore
5fe49a0853 bsps/aarch64: Add MMU driver to relax alignment
Currently, the AArch64 BSPs have a hard time running on real hardware
without building the toolchain and the bsps with -mstrict-align in
multiple places. Configuring the MMU on these chips allows for unaligned
memory accesses for non-device memory which avoids requiring strict
alignment in the toolchain and in the BSPs themselves.

In writing this driver, it was found that the synchronous exception
handling code needed to be rewritten since it relied on clearing SCTLR_EL1 to
avoid thread stack misalignments in RTEMS_DEBUG mode. This is now
avoided by exactly preserving thread mode stack and flags and the new
implementation is compatible with the draft information provided on the
mailing list covering the Exception Management API.
2021-05-27 14:09:00 -05:00
Sebastian Huber
44ae183090 bsps/aarch64: Add missing include
Fixes:

bsps/shared/dev/irq/arm-gicv2.c:53:6: warning: no previous prototype for
'bsp_interrupt_dispatch' [-Wmissing-prototypes]

Close #4227.
2021-01-28 19:28:39 +01:00
Sebastian Huber
9f3a08ef2d bsps: Use header file for GIC architecture support
This avoids a function call overhead in the interrupt dispatching.

Update #4202.
2020-12-23 09:24:49 +01:00
Kinsey Moore
db68ea1b9b bsps: Add Cortex-A53 LP64 basic BSP
This adds an AArch64 basic BSP based on Qemu's Cortex-A53 emulation with
interrupt support using GICv3 and clock support using the ARM GPT.
2020-10-05 16:11:40 -05:00