seL4/tools/hardware.yml
Curtis Millar ab3d8c44cb
riscv: Map devices with large pages on 32 & 64-bit
For 64-bit, this adds a 2nd-level page table for mapping devices using
2MiB frames instead of 1GiB frames.

The boot mapping and hardware header generator have also been fixed to
correctly report the number of large frames needed for devices rather
than only reporting the first. The frame size is also specified
correctly (rather than assuming mapping with 4KiB frames).

This likely fixes an issue whereby only the first 4KiB frame of a device
was reserved but the remaining region of that kernel device could be
mapped at user level.

Signed-off-by: Curtis Millar <curtis.millar@data61.csiro.au>
2020-12-03 10:31:16 +11:00

257 lines
6.3 KiB
YAML

#
# Copyright 2020, Data61, CSIRO (ABN 41 687 119 230)
#
# SPDX-License-Identifier: GPL-2.0-only
#
# Documentation for bindings is relative to Documentation/devicetree/bindings in Linux,
# unless otherwise noted.
devices:
# ARM GIC (interrupt-controller/arm,gic.txt)
- compatible:
- arm,cortex-a15-gic
- arm,cortex-a7-gic
- arm,cortex-a9-gic
- arm,gic-400
- qcom,msm-qgic2
regions:
# distributor
- index: 0
kernel: GIC_V2_DISTRIBUTOR_PPTR
# controller
- index: 1
kernel: GIC_V2_CONTROLLER_PPTR
# GICV
- index: 2
kernel: GIC_V2_VCPUCTRL_PPTR
macro: CONFIG_ARM_HYPERVISOR_SUPPORT
interrupts:
INTERRUPT_VGIC_MAINTENANCE: 0
# ARM GICv3
# We only need GIC distributor and GIC redistributor regions and
# use system registers for GICC, GICH.
- compatible:
- arm,gic-v3
regions:
# GICDistributor
- index: 0
kernel: GICD_PPTR
kernel_size: 0x10000
# GICRedistributor
- index: 1
kernel: GICR_PPTR
# Assume 8 cores max
kernel_size: 0x100000
interrupts:
INTERRUPT_VGIC_MAINTENANCE: 0
# Broadcom second level IRQ controller (interrupt-controller/brcm,bcm2835-armctrl-ic.txt),
- compatible:
- brcm,bcm2836-armctrl-ic
regions:
- index: 0
kernel: INTC_PPTR
# the pi 3 exposes another timer at 0x3f00b400, which is in the same page as
# this, so we need to give this region to userspace :-(
user: true
# TI AM33XX/OMAP3 intc (interrupt-controller/ti,omap-intc-irq.txt)
- compatible:
- ti,am33xx-intc
- ti,omap3-intc
regions:
- index: 0
kernel: INTC_PPTR
# Broadcom top level IRQ controller (interrupt-controller/brcm,bcm2836-l1-intc.txt)
- compatible:
- brcm,bcm2836-l1-intc
regions:
- index: 0
kernel: ARM_LOCAL_PPTR
# i.MX AVIC (no Linux docs, used in arch/arm/mach-imx/avic.c)
- compatible:
- fsl,imx31-avic
regions:
- index: 0
kernel: AVIC_PPTR
# ARM PL310 L2 cache controller (arm/l2c2x0.txt)
- compatible:
- arm,pl310-cache
regions:
- index: 0
kernel: L2CC_L2C310_PPTR
# i.MX31 L2CC (seL4 only)
- compatible:
- fsl,imx31-l2cc
regions:
- index: 0
kernel: L2CC_PPTR
# Exynos multi core timer (timer/samsung,exynos4210-mct.txt)
# Exynos4412 MCT is separate as we use it for the timer IRQ.
# Other Exynos platforms use the ARM architecture timer.
- compatible:
- samsung,exynos4412-mct
regions:
- index: 0
kernel: EXYNOS_MCT_PPTR
interrupts:
KERNEL_TIMER_IRQ: 0
- compatible:
- samsung,exynos4210-mct
regions:
- index: 0
kernel: EXYNOS_MCT_PPTR
# ARM PMU (arm/pmu.txt)
- compatible:
- arm,armv8-pmuv3
- arm,cortex-a15-pmu
- arm,cortex-a7-pmu
- arm,cortex-a9-pmu
interrupts:
KERNEL_PMU_IRQ: boot-cpu
# i.MX evtmon (no Linux binding, this one is seL4-specific.)
- compatible:
- fsl,imx31-evtmon
interrupts:
KERNEL_PMU_IRQ: 0
# Tegra SMMU (memory-controllers/nvidia,tegra30-mc.txt)
- compatible:
- arm,mmu-500
regions:
- index: 0
kernel: SMMU_PPTR
macro: CONFIG_ARM_SMMU
interrupts:
INTERRUPT_SMMU: 0
- compatible:
- nvidia,tegra124-mc
regions:
- index: 0
kernel: SMMU_PPTR
macro: CONFIG_TK1_SMMU
interrupts:
INTERRUPT_SMMU: 0
# ARM architected timer (timer/arm,arch_timer.txt)
- compatible:
- arm,armv7-timer
- arm,armv8-timer
interrupts:
KERNEL_TIMER_IRQ:
sel_macro: CONFIG_ARM_HYPERVISOR_SUPPORT
index: 3
undef_index: 2
INTERRUPT_VTIMER_EVENT: 2
# Allwinner A10 Timer (timer/allwinner,sun4i-timer.txt)
- compatible:
- allwinner,sun4i-a10-timer
regions:
- index: 0
kernel: TIMER0_PPTR
interrupts:
# A20 also has the ARM architected timer,
# but we want to use the allwinner timer
# for now at least.
KERNEL_TIMER_IRQ:
index: 0
priority: 1
# ARM per-core timer-watchdog (timer/arm,twd.txt)
- compatible:
- arm,cortex-a9-twd-timer
regions:
- index: 0
kernel: ARM_MP_PRIV_TIMER_PPTR
interrupts:
KERNEL_TIMER_IRQ: 0
# Cortex-a9 global timer (timer/arm,global_timer.yaml)
- compatible:
- arm,cortex-a9-global-timer
regions:
- index: 0
kernel: TIMER_PPTR
interrupts:
# IMX6 also has the imx31-gpt.
KERNEL_TIMER_IRQ: 0
# i.MX EPIT (no Linux binding, this is seL4-specific.)
- compatible:
- fsl,imx31-epit
regions:
- index: 0
kernel: EPIT_PPTR
interrupts:
KERNEL_TIMER_IRQ: 0
# i.MX GPT
- compatible:
- fsl,imx31-gpt
regions:
- index: 0
kernel: TIMER_PPTR
interrupts:
KERNEL_TIMER_IRQ: 0
# QCOM Krait timer (timer/qcom,msm-timer.txt)
- compatible:
- qcom,kpss-timer
regions:
- index: 0
kernel: TIMER_PPTR
interrupts:
KERNEL_TIMER_IRQ: 0
# TI AM335x/OMAP3430 timer
- compatible:
- ti,am335x-timer
- ti,omap3430-timer
regions:
- index: 0
kernel: TIMER_PPTR
interrupts:
KERNEL_TIMER_IRQ: 0
# TI prcm (arm/omap/prcm.txt)
- compatible:
- ti,am3-prcm
regions:
- index: 0
kernel: CMPER_PPTR
user: true
# TI watchdog
- compatible:
- ti,omap3-wdt
regions:
- index: 0
kernel: WDT1_PPTR
user: true
# various serial consoles (`grep <compatible> serial/*`)
- compatible:
- amlogic,meson-gx-uart
- arm,pl011
- brcm,bcm2835-aux-uart
- fsl,imx31-uart
- fsl,imx6q-uart
- nvidia,tegra124-hsuart
- nvidia,tegra20-uart
- qcom,msm-uartdm
- samsung,exynos4210-uart
- snps,dw-apb-uart
- ti,omap3-uart
- xlnx,xuartps
- ns16550a
regions:
- index: 0
kernel: UART_PPTR
macro: CONFIG_PRINTING
user: true
# RISC-V PLIC
- compatible:
- riscv,plic0
regions:
- index: 0
kernel: PLIC_PPTR
kernel_size: 0x04000000
# elfloader rules
- compatible:
- arm,psci-0.2
- arm,psci-1.0
- compatible:
- fsl,imx6q-src
- compatible:
- xlnx,zynq-reset