From d2be64374dc5cb8bed866aea1995d2dd047a7731 Mon Sep 17 00:00:00 2001 From: Daniel Rossier Date: Wed, 10 Jun 2026 19:55:52 +0200 Subject: [PATCH 1/6] Align SO3 with major changes issued from EDGE-M1 with full vGIC support --- so3/Makefile | 29 +- so3/arch/arm32/Kconfig | 6 +- so3/arch/arm32/so3.lds | 28 +- so3/arch/arm64/Kconfig | 27 +- so3/arch/arm64/Makefile | 2 +- so3/arch/arm64/asm-offsets.c | 5 - so3/arch/arm64/cache.S | 23 +- so3/arch/arm64/cache_v8.c | 19 +- so3/arch/arm64/domain.c | 24 +- so3/arch/arm64/exception.S | 210 ++++-- so3/arch/arm64/fault.c | 25 +- so3/arch/arm64/include/asm/arm_timer.h | 2 +- so3/arch/arm64/include/asm/mmu.h | 34 +- so3/arch/arm64/include/asm/processor.h | 17 +- so3/arch/arm64/include/asm/virt.h | 8 +- so3/arch/arm64/mmio.c | 30 +- so3/arch/arm64/mmu.c | 153 ----- so3/arch/arm64/so3.lds | 30 +- so3/arch/arm64/thread.c | 1 - so3/arch/arm64/traps.c | 189 +++++- so3/arch/arm64/verdin-imx8mp/Makefile | 5 + .../arm64/verdin-imx8mp/include/mach/io.h | 49 ++ .../arm64/verdin-imx8mp/include/mach/ipamap.h | 67 ++ so3/arch/arm64/verdin-imx8mp/platsmp.c | 43 ++ so3/arch/arm64/virt64/include/mach/ipamap.h | 70 +- so3/avz/include/avz/uapi/avz.h | 4 +- so3/avz/kernel/agency_build.c | 16 +- so3/avz/kernel/domain.c | 4 +- so3/avz/kernel/domain_utils.c | 1 + so3/avz/kernel/gnttab.c | 9 +- so3/avz/kernel/hypercalls.c | 7 +- so3/avz/kernel/schedule.c | 11 +- so3/avz/kernel/smp.c | 31 +- so3/avz/kernel/timer.c | 35 +- so3/configs/rpi4_64_avz_defconfig | 1 + so3/configs/rpi4_64_defconfig | 1 + so3/configs/rpi4_defconfig | 1 + so3/configs/verdin-imx8mp_avz_defconfig | 101 +++ so3/configs/virt32_defconfig | 1 + so3/configs/virt32_fb_defconfig | 1 + so3/configs/virt32_lvperf_defconfig | 1 + so3/configs/virt64_avz_defconfig | 1 + so3/configs/virt64_avz_soo_defconfig | 1 + so3/configs/virt64_capsule_defconfig | 1 + so3/configs/virt64_defconfig | 1 + so3/configs/virt64_fb_defconfig | 1 + so3/configs/virt64_lvperf_defconfig | 1 + so3/devices/device.c | 2 +- so3/devices/irq/Kconfig | 10 +- so3/devices/irq/gic.c | 601 +++++++++++++++--- so3/devices/irq/vgic.c | 77 ++- so3/devices/mem.c | 2 +- so3/devices/serial/Kconfig | 6 +- so3/devices/serial/Makefile | 1 + so3/devices/serial/imx_uart.c | 181 ++++++ so3/devices/serial/pl011.c | 14 +- so3/devices/timer/arm_timer.c | 34 +- so3/dts/Makefile | 6 +- so3/dts/rpi4_64_avz.dts | 7 +- so3/dts/verdin-imx8mp_avz.dts | 90 +++ so3/include/device/arch/gic.h | 34 +- so3/include/device/fdt.h | 1 + so3/include/device/timer.h | 4 +- so3/include/percpu.h | 16 +- so3/mm/Kconfig | 2 +- 65 files changed, 1879 insertions(+), 536 deletions(-) create mode 100644 so3/arch/arm64/verdin-imx8mp/Makefile create mode 100644 so3/arch/arm64/verdin-imx8mp/include/mach/io.h create mode 100644 so3/arch/arm64/verdin-imx8mp/include/mach/ipamap.h create mode 100644 so3/arch/arm64/verdin-imx8mp/platsmp.c create mode 100644 so3/configs/verdin-imx8mp_avz_defconfig create mode 100644 so3/devices/serial/imx_uart.c create mode 100644 so3/dts/verdin-imx8mp_avz.dts diff --git a/so3/Makefile b/so3/Makefile index 44e22a3d49..ec6ffbf5cf 100644 --- a/so3/Makefile +++ b/so3/Makefile @@ -9,6 +9,7 @@ # o use make's built-in rules and variables # (this increases performance and avoids hard-to-debug behaviour); # o print "Entering directory ..."; + MAKEFLAGS += -rR --no-print-directory # To put more focus on warnings, be less verbose as default @@ -42,10 +43,12 @@ _all: # KBUILD_SRC is set on invocation of make in OBJ directory # KBUILD_SRC is not intended to be used by the regular user (for now) + ifeq ($(KBUILD_SRC),) # OK, Make called in directory where kernel src resides # Do we want to locate output files in a separate directory? + ifeq ("$(origin O)", "command line") KBUILD_OUTPUT := $(O)/ endif @@ -60,6 +63,7 @@ $(CURDIR)/Makefile Makefile: ; ifneq ($(KBUILD_OUTPUT),) # Invoke a second make in the output directory, passing relevant variables # check that the output directory actually exists + saved-output := $(KBUILD_OUTPUT) export saved-output KBUILD_OUTPUT := $(shell cd $(KBUILD_OUTPUT) && /bin/pwd)/ @@ -89,6 +93,7 @@ ifeq ($(skip-makefile),) # If building an external module we do not care about the all: rule # but instead _all depend on modules + PHONY += all _all: all @@ -189,6 +194,7 @@ PHONY += outputmakefile # outputmakefile generates a Makefile in the output directory, if using a # separate output directory. This allows convenient use of make in the # output directory. + outputmakefile: ifneq ($(KBUILD_SRC),) $(Q)ln -fsn $(srctree) source @@ -245,6 +251,7 @@ ifeq ($(config-targets),1) # KBUILD_DEFCONFIG may point out an alternative default configuration # used for 'make defconfig' #include $(srctree)/arch/$(SRCARCH)/Makefile + export KBUILD_DEFCONFIG KBUILD_KCONFIG config: scripts_basic outputmakefile FORCE @@ -265,6 +272,7 @@ ifeq ($(dot-config),1) # Read in dependencies to all Kconfig* files, make sure to run # oldconfig if changes are detected. + -include include/config/auto.conf.cmd # To avoid any implicit rule to kick in, define an empty command @@ -274,6 +282,7 @@ $(KCONFIG_CONFIG) include/config/auto.conf.cmd: ; # with it and forgot to run make oldconfig. # if auto.conf.cmd is missing then we are probably in a cleaned tree so # we execute the config step to be sure to catch updated Kconfig files + include/config/%.conf: $(KCONFIG_CONFIG) include/config/auto.conf.cmd $(Q)set -e $(Q)$(MAKE) -f $(srctree)/Makefile silentoldconfig @@ -323,8 +332,14 @@ DEFSYM_FLAGS = \ --defsym=CONFIG_MAX_THREADS=$(CONFIG_MAX_THREADS) \ --defsym=CONFIG_THREAD_STACK_SIZE_KB=$(CONFIG_THREAD_STACK_SIZE_KB) \ --defsym=ENTRY_ADDR=$(CONFIG_KERNEL_VADDR) - - + +#ifeq ($(CONFIG_VERDIN_IMX8MP),y) +#LDFLAGS += --defsym=LOAD_OFFSET=0x200000 +#else + +LDFLAGS += --defsym=LOAD_OFFSET=0x80000 +#endif + # Specific CFLAGS/AFLAGS according to ARCH @@ -365,6 +380,9 @@ endif ifeq ($(CONFIG_VIRT64),y) TARGET = virt64 endif +ifeq ($(CONFIG_VERDIN_IMX8MP),y) +TARGET = verdin-imx8mp +endif # The all: target is the default when no target is given on the @@ -402,6 +420,7 @@ so3-all := $(so3-objs) $(so3-libs) #quiet_cmd_so3 = LD $@ # cmd_so3 = $(CC) $(LDFLAGS) -o $@ \ # -Wl,--start-group $(so3-libs) $(so3-objs) -Wl,--end-group + LIBGCC_PATH := $(shell dirname `$(CC) -print-libgcc-file-name`) quiet_cmd_so3 = LD $@ @@ -457,6 +476,7 @@ $(ELF): $(so3-all) arch/$(SRCARCH)/so3.lds # The actual objects are generated when descending, # make sure no implicit rule kicks in + $(sort $(so3-all)): $(so3-dirs) ; # Handle descending into subdirectories listed in $(so3-dirs) @@ -492,6 +512,7 @@ MRPROPER_FILES += .config .config.old tags TAGS cscope* GPATH GTAGS GRTAGS GSYMS # clean - Delete most, but leave enough to build external modules # + clean: rm-dirs := $(CLEAN_DIRS) clean: rm-files := $(CLEAN_FILES) clean-dirs := $(addprefix _clean_, $(so3-dirs)) @@ -511,6 +532,7 @@ clean: $(clean-dirs) # mrproper - Delete all generated files, including .config # + mrproper: rm-dirs := $(wildcard $(MRPROPER_DIRS)) mrproper: rm-files := $(wildcard $(MRPROPER_FILES)) mrproper-dirs := $(addprefix _mrproper_, scripts) @@ -525,6 +547,7 @@ mrproper: clean $(mrproper-dirs) # distclean # + PHONY += distclean distclean: mrproper @find $(srctree) $(RCS_FIND_IGNORE) \ @@ -547,6 +570,7 @@ quiet_cmd_rmfiles = $(if $(wildcard $(rm-files)),CLEAN $(wildcard $(rm-files)) # Shorthand for $(Q)$(MAKE) -f scripts/Makefile.clean obj=dir # Usage: # $(Q)$(MAKE) $(clean)=dir + clean := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.clean obj @@ -613,4 +637,5 @@ FORCE: # Declare the contents of the .PHONY variable as phony. We keep that # information in a variable so we can use it in if_changed and friends. + .PHONY: $(PHONY) diff --git a/so3/arch/arm32/Kconfig b/so3/arch/arm32/Kconfig index 0f47b2af72..7ac8329987 100644 --- a/so3/arch/arm32/Kconfig +++ b/so3/arch/arm32/Kconfig @@ -12,9 +12,11 @@ choice config VIRT32 bool "QEMU virt 32-bit machine" - - config RPI4 + select GIC_V2 + + config RPI4 bool "Raspberry Pi 4 Model B support" + select GIC_V2 endchoice diff --git a/so3/arch/arm32/so3.lds b/so3/arch/arm32/so3.lds index 40ef32fe29..3326dff6c8 100644 --- a/so3/arch/arm32/so3.lds +++ b/so3/arch/arm32/so3.lds @@ -67,27 +67,27 @@ SECTIONS *(.sbss*) } - .bss (NOLOAD) : - { - *(.bss*) - - . = ALIGN(4096); + .bss (NOLOAD) : + { + *(.bss .bss.*) + + . = ALIGN(4096); __per_cpu_start = .; - - *(.bss.percpu) - + + *(.percpu_data) + . = ALIGN(128); - *(.bss.percpu.read_mostly) - + *(.percpu_data.read_mostly) + . = ALIGN(128); - + __per_cpu_data_end = .; - + . = ALIGN(128); - + __per_cpu_end = .; - + } :data __bss_end = .; diff --git a/so3/arch/arm64/Kconfig b/so3/arch/arm64/Kconfig index 283fd926c7..42f19898b7 100644 --- a/so3/arch/arm64/Kconfig +++ b/so3/arch/arm64/Kconfig @@ -8,26 +8,21 @@ menu "Platform" config VIRT64 bool "Generic QEMU virt64 model" - + select GIC_V2 + config RPI4_64 bool "Raspberry Pi 4 64-bit" - + select GIC_V2 + + config VERDIN_IMX8MP + bool "Toradex Verdin iMX8MP" + select GIC_V3 + endchoice - choice - prompt "Virtual address space size" - help - Allows choosing one of multiple possible virtual address - space sizes. The level of translation table is determined by - a combination of page size and virtual address space size. - - config VA_BITS_39 - bool "39-bit" - - config VA_BITS_48 - bool "48-bit" - - endchoice + config VA_BITS_48 + default y + bool "48-bit virtual address space" endmenu diff --git a/so3/arch/arm64/Makefile b/so3/arch/arm64/Makefile index 273b8a92aa..22526119f4 100644 --- a/so3/arch/arm64/Makefile +++ b/so3/arch/arm64/Makefile @@ -10,7 +10,7 @@ obj-y += backtrace.o backtrace_asm.o obj-y += cache_v8.o cache.o context.o obj-y += semihosting.o semicall.o -obj-$(CONFIG_AVZ) += domain.o mmio.o #smmu.o +obj-$(CONFIG_AVZ) += domain.o mmio.o obj-y += smccc-call.o diff --git a/so3/arch/arm64/asm-offsets.c b/so3/arch/arm64/asm-offsets.c index 0ff10b146a..7eee77e697 100644 --- a/so3/arch/arm64/asm-offsets.c +++ b/so3/arch/arm64/asm-offsets.c @@ -86,11 +86,6 @@ int main(void) DEFINE(OFFSET_PC, offsetof(struct cpu_regs, pc)); DEFINE(OFFSET_PSTATE, offsetof(struct cpu_regs, pstate)); DEFINE(OFFSET_TLS_USR, offsetof(struct cpu_regs, tls_usr)); -#ifdef CONFIG_AVZ - DEFINE(OFFSET_ELR_EL1, offsetof(struct cpu_regs, elr_el1)); - DEFINE(OFFSET_SPSR_EL1, offsetof(struct cpu_regs, spsr_el1)); -#endif - DEFINE(S_FRAME_SIZE, sizeof(struct cpu_regs)); BLANK(); diff --git a/so3/arch/arm64/cache.S b/so3/arch/arm64/cache.S index 844bca455b..3059a732e7 100644 --- a/so3/arch/arm64/cache.S +++ b/so3/arch/arm64/cache.S @@ -14,10 +14,16 @@ ENTRY(__flush_tlb_all) dsb nshst - tlbi vmalle1 +#ifdef CONFIG_AVZ + tlbi alle2 /* AVZ runs at EL2 */ +#else + tlbi vmalle1 /* standalone SO3 runs at EL1 */ +#endif dsb nsh isb + ret + /* * Invalidate the TLB entry corresponding to a VA (stored in x0) @@ -26,9 +32,12 @@ ENTRY(__asm_invalidate_tlb) dsb ish // Barrier instructions - tlbi vaae1is, x0 // Invalidate VA specified by X0, in EL0/1 - // virtual address space for all ASIDs - dsb ish // Barrier instructions - not covered in this guide +#ifdef CONFIG_AVZ + tlbi vae2is, x0 // AVZ runs at EL2: invalidate EL2 VA, inner shareable +#else + tlbi vaae1is, x0 // standalone SO3 runs at EL1: invalidate VA for all ASIDs +#endif + dsb ish // Barrier instructions isb // Synchronize context on this processor ret @@ -43,7 +52,11 @@ ENTRY(__asm_invalidate_tlb) ENTRY(__asm_invalidate_tlb_all) dsb sy - tlbi vmalle1is +#ifdef CONFIG_AVZ + tlbi alle2is /* AVZ runs at EL2: invalidate all EL2 TLBs, inner shareable */ +#else + tlbi vmalle1is /* standalone SO3 runs at EL1: invalidate all EL1 TLBs, inner shareable */ +#endif dsb ish isb diff --git a/so3/arch/arm64/cache_v8.c b/so3/arch/arm64/cache_v8.c index 41cdae414c..d680d26570 100644 --- a/so3/arch/arm64/cache_v8.c +++ b/so3/arch/arm64/cache_v8.c @@ -43,20 +43,19 @@ void mmu_setup(void *pgtable) tcr = TCR_CACHE_FLAGS | TCR_SMP_FLAGS | TCR_TG_FLAGS | TCR_ASID16 | TCR_A1; -#ifdef CONFIG_VA_BITS_48 tcr |= TCR_TxSZ(48) | (TCR_PS_BITS_256TB << TCR_IPS_SHIFT); -#elif CONFIG_VA_BITS_39 - tcr |= TCR_TxSZ(39) | (TCR_PS_BITS_1TB << TCR_IPS_SHIFT); -#else -#error "Wrong VA_BITS configuration." -#endif #ifdef CONFIG_AVZ asm volatile("msr tcr_el2, %0" : : "r"(tcr) : "memory"); - /* Prepare the stage-2 configuration */ - tcr = VTCR_T0SZ_VAL(48) | VTCR_SL0_L0 | TCR_PS_BITS_256TB | (TCR_ORGN0_WBWA << TCR_IRGN0_SHIFT) | - (TCR_ORGN0_WBWA << TCR_ORGN0_SHIFT) | TCR_SH0_INNER | VTCR_RES1; + /* Stage-2 configuration for Cortex-A53 (PARange=0b0010 = 40-bit PA). + * SL0=L0 (starting level 0) requires ARMv8.2-LPA which Cortex-A53 lacks — + * use SL0=L1 (starting level 1) instead. T0SZ=25 gives a 39-bit IPA space + * (single L1 root table, no concatenation), which covers all iMX8MP physical + * addresses. VTTBR_EL2 must therefore point to the L1 table directly. + */ + tcr = VTCR_T0SZ_VAL(39) | VTCR_SL0_L1 | VTCR_PS_40BITS | + TCR_IRGN0_WBWA | TCR_ORGN0_WBWA | TCR_SH0_INNER | VTCR_RES1; asm volatile("msr vtcr_el2, %0" : : "r"(tcr) : "memory"); asm volatile("isb"); @@ -152,7 +151,7 @@ void flush_dcache_range(unsigned long start, unsigned long end) void flush_pte_entry(addr_t va, u64 *pte) { __asm_invalidate_tlb(va); - invalidate_dcache_range((u64) pte, (u64) (pte + 1)); + flush_dcache_range((u64) pte, (u64) (pte + 1)); } void dcache_enable(void) diff --git a/so3/arch/arm64/domain.c b/so3/arch/arm64/domain.c index 814fdb060f..fc9c7d5f3f 100644 --- a/so3/arch/arm64/domain.c +++ b/so3/arch/arm64/domain.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2014-2024 Daniel Rossier + * Copyright (C) 2014-2026 Daniel Rossier * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as @@ -26,13 +26,7 @@ #include #include -#ifdef CONFIG_AVZ #include -#endif - -#ifdef CONFIG_SOO -#include -#endif /** * @brief Initialize the content of the EL2 stack associated to this domain. @@ -111,10 +105,7 @@ void __setup_dom_pgtable(struct domain *d, addr_t paddr_start, unsigned long map printk(" Map size (bytes) : 0x%lx\n", map_size); printk(" Intermediate phys address : 0x%lx\n", memslot[slotID].ipa_addr); - printk(" Stage-2 vttbr : (va) 0x%p - (pa) 0x%lx\n", new_pt, __pa(new_pt)); - - d->pagetable_vaddr = (addr_t) new_pt; - d->pagetable_paddr = __pa(new_pt); + printk(" Stage-2 L0 root (unused as VTTBR): (va) 0x%p - (pa) 0x%lx\n", new_pt, __pa(new_pt)); /* Prepare the IPA -> PA translation for this domain */ __create_mapping(new_pt, memslot[slotID].ipa_addr, paddr_start, map_size, false, S2); @@ -127,7 +118,14 @@ void __setup_dom_pgtable(struct domain *d, addr_t paddr_start, unsigned long map /* Map the shared page in the IPA space; the shared page is located right after the domain area * in the IPA space, and if any, the RT shared page follows the shared page (in IPA space). */ - __create_mapping(new_pt, memslot[slotID].ipa_addr + map_size, __pa(d->avz_shared), PAGE_SIZE, false, S2); + __create_mapping(new_pt, memslot[slotID].ipa_addr + map_size, __pa(d->avz_shared), PAGE_SIZE, true, S2); + + /* VTCR_EL2 uses SL0=L1 (Cortex-A53 requires this; SL0=L0 needs LVA extension). + * VTTBR_EL2 must therefore point to the L1 table, not the L0 root. + * All iMX8MP IPAs have bits[47:39]=0, so L0[0] is the sole L0 entry. + */ + d->pagetable_paddr = *((u64 *) new_pt) & TTB_L0_TABLE_ADDR_MASK; + d->pagetable_vaddr = (addr_t) __va(d->pagetable_paddr); #ifdef CONFIG_SOO /* Initialize the grant pfn (ipa address) area */ @@ -136,7 +134,7 @@ void __setup_dom_pgtable(struct domain *d, addr_t paddr_start, unsigned long map d->grant_pfn[i].free = true; } - /* Set staring framebuffer ipa address after the grant pfn area */ + /* Set staring framebuffer IPA address after the grant pfn area */ d->fbdev_start_pfn = phys_to_pfn(memslot[slotID].ipa_addr + map_size + 2 * PAGE_SIZE) + NR_GRANT_PFN; fbdev_ipamap_domain(d, slotID); #endif /* CONFIG_SOO */ diff --git a/so3/arch/arm64/exception.S b/so3/arch/arm64/exception.S index d250d3b4bc..a0ed6c880d 100644 --- a/so3/arch/arm64/exception.S +++ b/so3/arch/arm64/exception.S @@ -1,5 +1,5 @@ /* - * Copyright (C) 2021-2024 Daniel Rossier + * Copyright (C) 2021-2026 Daniel Rossier * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as @@ -32,7 +32,7 @@ #include -.global cpu_entrypoint +.global cpu_entrypoints #endif /* CONFIG_AVZ */ @@ -41,6 +41,8 @@ .extern current_thread .extern __sync_serror +.extern avz_handle_el1_serror +.extern avz_handle_el2_serror .extern do_exit .extern sig_check @@ -92,7 +94,21 @@ */ .section ".vectors.text", "ax" - b __start // To be compliant with reset vector (unavailable in aarch64) + b __start /* ARM64 Image header code0 / reset vector */ + .long 0 /* code1: reserved */ +#ifdef CONFIG_VERDIN_IMX8MP + .quad LOAD_OFFSET /* text_offset: DRAM_base + LOAD_OFFSET = load address */ + .quad 0x800000 /* image_size: non-zero → U-Boot reads text_offset */ +#else + .quad 0 /* text_offset: U-Boot uses hardcoded 0x80000 */ + .quad 0 /* image_size: 0 → U-Boot uses hardcoded defaults */ +#endif + .quad 0 /* flags: reserved */ + .quad 0 /* reserved */ + .quad 0 /* reserved */ + .quad 0 /* reserved */ + .ascii "ARM\x64" /* magic = 0x644d5241 at offset 56 */ + .long 0 /* reserved */ .align 12 ENTRY(__vectors) @@ -145,10 +161,17 @@ ENTRY(__vectors) // Current EL with SPx / SError .align 7 +#ifdef CONFIG_AVZ + b avz_el2_serror_handler +#else + /* This slot MUST be emitted in every build: omitting it (e.g. behind + * a bare #ifdef CONFIG_AVZ) shifts every subsequent Lower-EL vector up + * by 0x80, so an EL0 `svc` lands in the IRQ handler instead of + * el01_sync_handler and no syscall is ever serviced. */ mov x0, lr mrs x1, esr_el1 - b __sync_serror +#endif /* CONFIG_AVZ */ // Lower EL using AArch64 / Synchronous .align 7 @@ -179,8 +202,12 @@ ENTRY(__vectors) // Lower EL using AArch64 / SError .align 7 +#ifdef CONFIG_AVZ + b el1_serror_handler +#else mov x0, lr b trap_handle_error +#endif // Lower EL using AArch32 / Synchronous .align 7 @@ -262,29 +289,86 @@ ENTRY(pre_ret_to_el1_spin) #ifdef CONFIG_CPU_PSCI ENTRY(pre_ret_to_el1) - wfi + /* + * Bao-inspired per-CPU entrypoint pattern: + * Each secondary CPU reads its own slot in cpu_entrypoints[] indexed + * by the Aff0 field of MPIDR_EL1. CPU0 writes only the target CPU's + * slot before sending a targeted IPI via smp_trigger_event(), so no + * atomic operations are needed and no other CPU races for the same slot. + */ + mrs x1, mpidr_el1 + and x1, x1, #0xff /* Aff0 = logical CPU index */ + + /* pre_ret_debug_wfi(cpu_id) */ + mov x0, x1 + bl pre_ret_debug_wfi + mrs x1, mpidr_el1 + and x1, x1, #0xff + + /* Busy-poll on cpu_entrypoints[cpu_id] until CPU0's PSCI_CPU_ON handler + * writes the entry point. Using a spin loop (no WFI) to diagnose + * whether WFI wakeup is the bottleneck. */ +1: + dsb ish + isb - ldr x0, cpu_entrypoint - msr elr_el2, x0 + adr x2, cpu_entrypoints + ldr x0, [x2, x1, lsl #3] /* cpu_entrypoints[cpu_id] */ + cbz x0, 1b /* not yet written — spin */ - // Set the CPU in EL1 mode to proceed with - // the bootstrap of the domain + /* pre_ret_debug_woke(cpu_id, ep) — x0=ep, x1=cpu_id */ + mov x19, x0 /* save ep across the call */ + mov x20, x1 /* save cpu_id across the call */ + mov x1, x0 + mov x0, x20 + bl pre_ret_debug_woke + mov x0, x19 /* restore ep */ + mov x1, x20 /* restore cpu_id (not needed further) */ - mov x2, #PSR_MODE_EL1h + /* + * Drain any SError pending from flush_dcache_all() inside + * __mmu_switch_vttbr (called by secondary_start_kernel). + * On Cortex-A53, DC CISW cache maintenance can leave a deferred + * physical SError. With HCR_EL2.AMO=1 it would otherwise fire + * the instant we ERET to EL1, hitting el1_serror_handler before + * Linux is initialised. Force it here at EL2 instead so it is + * consumed by avz_el2_serror_handler and the EL1 entry is clean. + * + * NOTE: the SError handler overwrites ELR_EL2, so we must set + * ELR_EL2 AFTER the drain. x0 (entrypoint) is preserved through + * kernel_entry/kernel_exit used by avz_el2_serror_handler. + */ + msr daifclr, #4 /* unmask SErrors at EL2 */ + isb /* pending SError fires → avz_el2_serror_handler */ + msr daifset, #4 /* re-mask */ + isb - // Make sure no interrupt coming from CPU #0 is - // interferring with other CPU bootstrap - orr x2, x2, #PSR_I_BIT + /* Set ELR_EL2 after the drain so the SError handler cannot clobber it */ + msr elr_el2, x0 + /* EL1h mode, all exceptions masked on EL1 entry */ + mov x2, #(PSR_MODE_EL1h | PSR_F_BIT | PSR_I_BIT | PSR_A_BIT | PSR_D_BIT) msr spsr_el2, x2 - // According to boot protocol - mov x1, #0 + /* Initialise the virtual CPU interface for this secondary CPU so it + * can receive vIRQs (timer PPI 27, IPIs, SPIs). Without this, the + * vGIC on secondaries stays disabled (HCR.EN=0) and Linux ends up + * with no scheduler tick, hitting an RCU stall a few seconds in. + * gich_secondary_init() is a leaf call that preserves callee-saved + * registers (x19=ep) but clobbers x0-x18. */ + bl gich_secondary_init + + /* Disable EL1 physical timer (CNTP) to clear any stale U-Boot compare + * value; prevents spurious id=27 storm before Linux programs its own CVAL. */ + msr cntp_ctl_el0, xzr + + /* ARM64 PSCI secondary boot protocol: x0–x3 = 0 */ + mov x0, #0 mov x1, #0 mov x2, #0 mov x3, #0 - // Ready to jump into the Linux domain... + /* Ready to jump into the Linux domain... */ eret @@ -303,7 +387,7 @@ ENTRY(pre_ret_to_el1) #endif /* CONFIG_CPU_PSCI */ -// Enter macro to jump into EL2 from EL0 or from EL1 +// Enter macro to jump into EL1 from EL0 *or* from EL1 .macro prepare_to_enter_to_el2 mrs x0, elr_el2 str x0, [sp, #OFFSET_PC] @@ -313,23 +397,11 @@ ENTRY(pre_ret_to_el1) mrs x0, spsr_el2 str x0, [sp, #OFFSET_PSTATE] - - // Save EL0 register. Use OFFSET_SP as it is not used on the stack frame. - mrs x0, sp_el0 - str x0, [sp, #OFFSET_SP] - mrs x0, tpidr_el0 - str x0, [sp, #OFFSET_TLS_USR] - - // Save EL1 exception register as they may not yet be saved. - mrs x0, spsr_el1 - str x0, [sp, #OFFSET_SPSR_EL1] - mrs x0, elr_el1 - str x0, [sp, #OFFSET_ELR_EL1] - .endm -// Exit macro at the end of an exception routine to restore all saved registers +// Exit macro at the end of an exception routine +// It restores the sp_el0 as well. .macro prepare_to_exit_to_el1 ldr x0, [sp, #OFFSET_PC] msr elr_el2, x0 @@ -339,18 +411,6 @@ ENTRY(pre_ret_to_el1) ldr x0, [sp, #OFFSET_PSTATE] msr spsr_el2, x0 - - // Restore EL0 register - ldr x0, [sp, #OFFSET_SP] - msr sp_el0, x0 - ldr x0, [sp, #OFFSET_TLS_USR] - msr tpidr_el0, x0 - - // Restore EL1 exception register as they may not yet be saved. - ldr x0, [sp, #OFFSET_SPSR_EL1] - msr spsr_el1, x0 - ldr x0, [sp, #OFFSET_ELR_EL1] - msr elr_el1, x0 .endm .align 5 @@ -386,15 +446,67 @@ el12_2_irq_handler: // Make sure r0 refers to the base of the stack frame mov x0, sp +#ifdef CONFIG_GIC_V3 + bl avz_el2_irq_handle +#else bl irq_handle +#endif prepare_to_exit_to_el1 kernel_exit eret -cpu_entrypoint: - .quad 0x0 +#ifdef CONFIG_AVZ +/* + * SError while AVZ itself is running at EL2 (Current EL with SPx). + * Save registers, log ESR_EL2/ELR_EL2, and ERET to resume the + * interrupted EL2 code (e.g. the scheduler). + */ +.align 5 +avz_el2_serror_handler: + + kernel_entry + + mov x0, sp + bl avz_handle_el2_serror + + kernel_exit + + eret + + dsb nsh + isb + + nop + nop + nop +#endif /* CONFIG_AVZ */ + +.align 5 +el1_serror_handler: + + kernel_entry + prepare_to_enter_to_el2 + + mov x0, sp + bl avz_handle_el1_serror + + prepare_to_exit_to_el1 + kernel_exit + + eret + + dsb nsh + isb + + nop + nop + nop + +/* Per-CPU PSCI entry points — indexed by Aff0 of MPIDR_EL1 */ +cpu_entrypoints: + .quad 0x0, 0x0, 0x0, 0x0 __prepare_to_sig_el1_handler: @@ -479,6 +591,14 @@ ENTRY(pre_ret_to_user) kernel_exit + // Ensure all page-table writes are visible to the hardware table walker + // before handing off to the guest at EL1. + dsb sy + isb + + /* Disable EL1 physical timer (CNTP) to clear stale U-Boot compare value. */ + msr cntp_ctl_el0, xzr + // Ready to jump into the domain... eret diff --git a/so3/arch/arm64/fault.c b/so3/arch/arm64/fault.c index a16c450c3b..63a9de82b3 100644 --- a/so3/arch/arm64/fault.c +++ b/so3/arch/arm64/fault.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2014-2019 Daniel Rossier + * Copyright (C) 2014-2026 Daniel Rossier * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as @@ -40,6 +40,29 @@ void __sync_serror(addr_t lr) kernel_panic(); } +/* Called from pre_ret_to_el1 asm to log secondary CPU state before and after drain */ +void pre_ret_to_el1_diag(unsigned long cpu_id, unsigned long entry_point, int phase) +{ + (void)cpu_id; (void)entry_point; (void)phase; +} + +/* SError at EL2 (AVZ running): log and return so the scheduler can continue */ +void avz_handle_el2_serror(void *regs) +{ + /* Consume EL2 SError silently; return to resume interrupted EL2 code */ +} + +/* SError from EL1 trapped to EL2 via HCR_EL2.AMO=1 */ +void avz_handle_el1_serror(void *regs) +{ + unsigned long elr = read_sysreg(elr_el2); + unsigned long esr = read_sysreg(esr_el2); + unsigned long far = read_sysreg(far_el2); + + lprintk("### EL1 SError at EL2: ELR=0x%lx ESR=0x%lx FAR=0x%lx ###\n", elr, esr, far); + /* Consume the SError and return to EL1 so Linux can continue */ +} + void __sync_el2_fault(addr_t lr, addr_t sp) { lprintk("### Got a sync interrupt in EL2 / lr: 0x%lx sp: 0x%lx ###\n", lr, sp); diff --git a/so3/arch/arm64/include/asm/arm_timer.h b/so3/arch/arm64/include/asm/arm_timer.h index a6b990a96d..aadc12bf8d 100644 --- a/so3/arch/arm64/include/asm/arm_timer.h +++ b/so3/arch/arm64/include/asm/arm_timer.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2014-2017 Daniel Rossier + * Copyright (C) 2014-2026 Daniel Rossier * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as diff --git a/so3/arch/arm64/include/asm/mmu.h b/so3/arch/arm64/include/asm/mmu.h index cac4fa3046..5ccb3b48c8 100644 --- a/so3/arch/arm64/include/asm/mmu.h +++ b/so3/arch/arm64/include/asm/mmu.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015-2017 Daniel Rossier + * Copyright (C) 2015-2026 Daniel Rossier * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as @@ -29,7 +29,6 @@ #define USER_SPACE_VADDR UL(0x1000) -#ifdef CONFIG_VA_BITS_48 #define RAMDEV_VADDR UL(0xffffa00000000000) /* Fixmap page used for temporary mapping */ @@ -42,22 +41,6 @@ * as main L0 page table. */ #define USER_STACK_TOP_VADDR UL(0x0001000000000000) -#elif CONFIG_VA_BITS_39 -#define RAMDEV_VADDR UL(0xffffffd000000000) - -/* Fixmap page used for temporary mapping */ -#define FIXMAP_MAPPING UL(0xffffffd800000000) - -/* Anonymous start virtual address */ -#define USER_ANONYMOUS_VADDR UL(0x0000000100000000) - -/* The user space can be up to bits [38:0] and uses ttbr0_el1 - * as main L0 page table. - */ -#define USER_STACK_TOP_VADDR UL(0x0000008000000000) -#else -#error "Wrong VA_BITS configuration." -#endif #define SZ_256G (256UL * SZ_1G) @@ -72,15 +55,8 @@ #define ME_BASE UL(0x0000200000000000) #define ME_ID_SHIFT 32 -#ifdef CONFIG_VA_BITS_48 #define AGENCY_VOFFSET UL(0x0000110000000000) -#elif CONFIG_VA_BITS_39 -#define AGENCY_VOFFSET UL(0xffffffc010000000) -#else -#error "Wrong VA_BITS configuration." -#endif - #endif /* CONFIG_AVZ */ /* Order of size which makes sense in block mapping */ @@ -467,18 +443,10 @@ enum dcache_option { #define pte_index_to_vaddr(i0, i1, i2, i3) ((i0 << TTB_I0_SHIFT) | i1 << TTB_I1_SHIFT) | (i2 << TTB_I2_SHIFT) | (i3 << TTB_I3_SHIFT)) -#ifdef CONFIG_VA_BITS_48 #define l0pte_offset(pgtable, addr) ((u64 *) ((u64 *) pgtable + l0pte_index(addr))) #define l1pte_offset(l0pte, addr) ((u64 *) (__va(*l0pte & TTB_L0_TABLE_ADDR_MASK)) + l1pte_index(addr)) #define l2pte_offset(l1pte, addr) ((u64 *) (__va(*l1pte & TTB_L1_TABLE_ADDR_MASK)) + l2pte_index(addr)) #define l3pte_offset(l2pte, addr) ((u64 *) (__va(*l2pte & TTB_L2_TABLE_ADDR_MASK)) + l3pte_index(addr)) -#elif CONFIG_VA_BITS_39 -#define l1pte_offset(pgtable, addr) ((u64 *) ((u64 *) pgtable + l1pte_index(addr))) -#define l2pte_offset(l1pte, addr) ((u64 *) (__va(*l1pte & TTB_L1_TABLE_ADDR_MASK)) + l2pte_index(addr)) -#define l3pte_offset(l2pte, addr) ((u64 *) (__va(*l2pte & TTB_L2_TABLE_ADDR_MASK)) + l3pte_index(addr)) -#else -#error "Wrong VA_BITS configuration." -#endif #define l1pte_first(l0pte) ((u64 *) __va(*l0pte & TTB_L0_TABLE_ADDR_MASK)) #define l2pte_first(l1pte) ((u64 *) __va(*l1pte & TTB_L1_TABLE_ADDR_MASK)) diff --git a/so3/arch/arm64/include/asm/processor.h b/so3/arch/arm64/include/asm/processor.h index fa63a3c64e..6cf91c7d16 100644 --- a/so3/arch/arm64/include/asm/processor.h +++ b/so3/arch/arm64/include/asm/processor.h @@ -2,7 +2,7 @@ * linux/include/asm-arm/processor.h * * Copyright (C) 1995-2002 Russell King - * Copyright (C) 2014-2019 Daniel Rossier + * Copyright (C) 2014-2026 Daniel Rossier * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as @@ -103,6 +103,7 @@ #define ESR_ELx_EC_UNKNOWN (0x00) #define ESR_ELx_EC_WFx (0x01) + /* Unallocated EC: 0x02 */ #define ESR_ELx_EC_CP15_32 (0x03) #define ESR_ELx_EC_CP15_64 (0x04) @@ -111,14 +112,17 @@ #define ESR_ELx_EC_FP_ASIMD (0x07) #define ESR_ELx_EC_CP10_ID (0x08) /* EL2 only */ #define ESR_ELx_EC_PAC (0x09) /* EL2 and above */ + /* Unallocated EC: 0x0A - 0x0B */ #define ESR_ELx_EC_CP14_64 (0x0C) #define ESR_ELx_EC_BTI (0x0D) #define ESR_ELx_EC_ILL (0x0E) + /* Unallocated EC: 0x0F - 0x10 */ #define ESR_ELx_EC_SVC32 (0x11) #define ESR_ELx_EC_HVC32 (0x12) /* EL2 only */ #define ESR_ELx_EC_SMC32 (0x13) /* EL2 and above */ + /* Unallocated EC: 0x14 */ #define ESR_ELx_EC_SVC64 (0x15) #define ESR_ELx_EC_HVC64 (0x16) /* EL2 and above */ @@ -126,6 +130,7 @@ #define ESR_ELx_EC_SYS64 (0x18) #define ESR_ELx_EC_SVE (0x19) #define ESR_ELx_EC_ERET (0x1a) /* EL2 only */ + /* Unallocated EC: 0x1B */ #define ESR_ELx_EC_FPAC (0x1C) /* EL1 and above */ /* Unallocated EC: 0x1D - 0x1E */ @@ -133,10 +138,12 @@ #define ESR_ELx_EC_IABT_LOW (0x20) #define ESR_ELx_EC_IABT_CUR (0x21) #define ESR_ELx_EC_PC_ALIGN (0x22) + /* Unallocated EC: 0x23 */ #define ESR_ELx_EC_DABT_LOW (0x24) #define ESR_ELx_EC_DABT_CUR (0x25) #define ESR_ELx_EC_SP_ALIGN (0x26) + /* Unallocated EC: 0x27 */ #define ESR_ELx_EC_FP_EXC32 (0x28) /* Unallocated EC: 0x29 - 0x2B */ @@ -149,6 +156,7 @@ #define ESR_ELx_EC_SOFTSTP_CUR (0x33) #define ESR_ELx_EC_WATCHPT_LOW (0x34) #define ESR_ELx_EC_WATCHPT_CUR (0x35) + /* Unallocated EC: 0x36 - 0x37 */ #define ESR_ELx_EC_BKPT32 (0x38) /* Unallocated EC: 0x39 */ @@ -553,6 +561,8 @@ #define SYS_ICH_VSEIR_EL2 sys_reg(3, 4, 12, 9, 4) #define SYS_ICC_SRE_EL2 sys_reg(3, 4, 12, 9, 5) +#define SYS_ICC_CTLR_EL2 sys_reg(3, 4, 12, 12, 4) +#define ICC_CTLR_EL2_EOImode_BIT (1 << 1) #define SYS_ICH_HCR_EL2 sys_reg(3, 4, 12, 11, 0) #define SYS_ICH_VTR_EL2 sys_reg(3, 4, 12, 11, 1) #define SYS_ICH_MISR_EL2 sys_reg(3, 4, 12, 11, 2) @@ -871,6 +881,10 @@ /* Safe value for MPIDR_EL1: Bit31:RES1, Bit30:U:0, Bit24:MT:0 */ #define SYS_MPIDR_SAFE_VAL (BIT(31)) +/* The stack must be 16-byte aligned */ + +#define S_FRAME_SIZE (8 * 36) + #ifdef __ASSEMBLY__ .macro current_cpu reg @@ -1266,6 +1280,7 @@ void ret_to_user(void); void pre_ret_to_user(void); void pre_ret_to_el1(void); void pre_ret_to_el1_spin(addr_t release_addr); +void pre_ret_to_el1_diag(unsigned long cpu_id, unsigned long entry_point, int phase); #endif /* CONFIG_AVZ */ diff --git a/so3/arch/arm64/include/asm/virt.h b/so3/arch/arm64/include/asm/virt.h index 63e652c49f..60f8d1842f 100644 --- a/so3/arch/arm64/include/asm/virt.h +++ b/so3/arch/arm64/include/asm/virt.h @@ -191,7 +191,13 @@ * FMO: Override CPSR.F and enable signaling with VF * SWIO: Turn set/way invalidates into set/way clean+invalidate */ -#define HCR_AGENCY_FLAGS (HCR_VM_MASK | HCR_API_MASK | HCR_APK_MASK | HCR_RW_MASK) +/* FMO=1 is required so that ICV_AP0Rn_EL1 (virtual Group 0 active priority + * registers) are DEFINED at NS EL1. Per GICv3 spec, ICV_AP0Rn_EL1 at NS EL1 + * requires HCR_EL2.FMO=1 when SCR_EL3.FIQ=1 (which OPTEE sets on this + * platform). Physical FIQs still go to EL3 due to SCR_EL3.FIQ=1 so AVZ + * never actually handles a physical FIQ; FMO=1 only enables the virtual + * Group 0 channel in the CPU interface. */ +#define HCR_AGENCY_FLAGS (HCR_VM_MASK | HCR_API_MASK | HCR_APK_MASK | HCR_RW_MASK | HCR_AMO_MASK | HCR_IMO_MASK | HCR_FMO_MASK) #define HCR_ME_FLAGS (HCR_VM_MASK | HCR_API_MASK | HCR_APK_MASK | HCR_AMO_MASK | HCR_RW_MASK | HCR_FMO_MASK | HCR_IMO_MASK) diff --git a/so3/arch/arm64/mmio.c b/so3/arch/arm64/mmio.c index fb6d5a0d29..c664ebbefc 100644 --- a/so3/arch/arm64/mmio.c +++ b/so3/arch/arm64/mmio.c @@ -23,6 +23,7 @@ #include #include +#include /* * These definitions are heavly borrowed from jailhouse hypervisor @@ -80,8 +81,18 @@ void mmio_perform_access(void *base, struct mmio_access *mmio) */ enum mmio_result mmio_handle_access(struct mmio_access *mmio) { - /* Currently, only GIC access is handled via a data abort exception */ - mmio->address -= (addr_t) gic->gicd_paddr; + addr_t gicd_base = (addr_t) gic->gicd_paddr; + + /* Only GIC distributor accesses are handled via trap-and-emulate. + * Without this guard a Stage-2 fault on any other IPA (e.g. PCIe + * high MMIO beyond the 39-bit IPA limit, or a fault that hardware + * reports with HPFAR=0) underflows the subtraction below and + * dereferences a wild EL2 VA in mmio_perform_access — turning a + * guest fault into an EL2 panic. */ + if (mmio->address < gicd_base || mmio->address >= gicd_base + 0x10000) + return MMIO_UNHANDLED; + + mmio->address -= gicd_base; return gic_handle_dist_access(mmio); } @@ -151,8 +162,17 @@ int mmio_dabt_decode(cpu_regs_t *regs, unsigned long esr) if (mmio_result == MMIO_ERROR) return TRAP_FORBIDDEN; - if (mmio_result == MMIO_UNHANDLED) - goto error_unhandled; + /* Stage-2 faults outside the GIC distributor range come from guest + * accesses to IPAs we don't model (e.g. QEMU virt PFlash, PCIe high + * MMIO beyond the 39-bit IPA limit). Treat them as accesses to + * non-existent memory: reads return 0, writes are dropped, PC + * advances. Linux's CFI flash probe gets back zeros and gives up + * cleanly instead of taking a synchronous external abort. Without + * this any unmapped guest IPA would panic the hypervisor. */ + if (mmio_result == MMIO_UNHANDLED) { + if (!is_write) + mmio.value = 0; + } /* Put the read value into the dest register */ if (!is_write && (srt != 31)) { @@ -170,4 +190,4 @@ int mmio_dabt_decode(cpu_regs_t *regs, unsigned long esr) panic("Unhandled data %s at 0x%lx(%d)\n", (is_write ? "write" : "read"), mmio.address, size); return TRAP_UNHANDLED; -} \ No newline at end of file +} diff --git a/so3/arch/arm64/mmu.c b/so3/arch/arm64/mmu.c index 6301018e9b..d3799e7297 100644 --- a/so3/arch/arm64/mmu.c +++ b/so3/arch/arm64/mmu.c @@ -61,7 +61,6 @@ static void alloc_init_l3(u64 *l0pgtable, addr_t addr, addr_t end, addr_t phys, u64 *l1pte, *l2pte, *l3pte; u64 *l3pgtable; -#ifdef CONFIG_VA_BITS_48 u64 *l0pte; /* These PTEs must exist. */ @@ -70,12 +69,6 @@ static void alloc_init_l3(u64 *l0pgtable, addr_t addr, addr_t end, addr_t phys, l1pte = l1pte_offset(l0pte, addr); BUG_ON(!*l1pte); -#elif CONFIG_VA_BITS_39 - l1pte = l0pgtable + l1pte_index(addr); - BUG_ON(!*l1pte); -#else -#error "Wrong VA_BITS configuration." -#endif do { l2pte = l2pte_offset(l1pte, addr); @@ -137,22 +130,14 @@ static void alloc_init_l2(u64 *l0pgtable, addr_t addr, addr_t end, addr_t phys, u64 *l2pgtable; addr_t next; -#ifdef CONFIG_VA_BITS_48 u64 *l0pte; /* We are sure this pte exists */ l0pte = l0pte_offset(l0pgtable, addr); BUG_ON(!*l0pte); -#endif do { -#ifdef CONFIG_VA_BITS_48 l1pte = l1pte_offset(l0pte, addr); -#elif CONFIG_VA_BITS_39 - l1pte = l0pgtable + l1pte_index(addr); -#else -#error "Wrong VA_BITS configuration." -#endif /* L1 page table already exist? */ if (!*l1pte) { /* A L2 table must be created */ @@ -334,68 +319,6 @@ void __create_mapping(void *pgtable, addr_t virt_base, addr_t phys_base, size_t mmu_page_table_flush((addr_t) pgtable, (addr_t) (pgtable + TTB_L0_SIZE)); } -#elif CONFIG_VA_BITS_39 - -/** - * In the 39-bit VA version, the first page table is actually the l1pgtable from the - * point of view of these functions. - * - * @param l1pgtable The first level page table (l0pgtable actually) - * @param virt_base - * @param phys_base - * @param size - * @param nocache true for I/O access typically - */ -static void __create_mapping(void *l1pgtable, addr_t virt_base, addr_t phys_base, size_t size, bool nocache, mmu_stage_t stage) -{ - addr_t addr, end, length, next, phys; - u64 *l1pte; - - /* If l1pgtable is NULL, we consider the system page table */ - if (l1pgtable == NULL) - l1pgtable = __sys_root_pgtable; - - BUG_ON(!size); - - addr = virt_base & PAGE_MASK; - length = ALIGN_UP(size + (virt_base & ~PAGE_MASK), PAGE_SIZE); - - end = addr + length; - phys = phys_base; - - do { - next = l1_addr_end(addr, end); - - if (((addr | next | phys) & ~BLOCK_1G_MASK) == 0) { - l1pte = l1pte_offset(l1pgtable, addr); - *l1pte = phys & TTB_L1_BLOCK_ADDR_MASK; - - set_pte_block(l1pte, (nocache ? DCACHE_OFF : DCACHE_WRITEALLOC)); - - /* Set AP[1] bit 6 to 1 to make R/W/Executable the pages in user space */ - if ((addr != phys) && user_space_vaddr(addr)) - *l1pte |= PTE_BLOCK_AP1; - - LOG_DEBUG("Allocating a 1 GB block at l1pte: %p content: %lx\n", l1pte, *l1pte); - - flush_pte_entry(addr, l1pte); - - phys += SZ_1G; - addr += SZ_1G; - - } else { - alloc_init_l2(l1pgtable, addr, next, phys, nocache, stage); - phys += next - addr; - addr = next; - } - - } while (addr != end); - - mmu_page_table_flush((addr_t) l1pgtable, (addr_t) (l1pgtable + TTB_L1_ENTRIES)); -} - -#else -#error "Wrong VA_BITS configuration." #endif void create_mapping(void *pgtable, addr_t virt_base, addr_t phys_base, size_t size, bool nocache) @@ -419,9 +342,7 @@ static bool empty_table(void *pgtable) void release_mapping(void *pgtable, addr_t vaddr, size_t size) { -#ifdef CONFIG_VA_BITS_48 uint64_t *l0pte; -#endif uint64_t *l1pte, *l2pte, *l3pte; size_t free_size = 0; @@ -433,21 +354,12 @@ void release_mapping(void *pgtable, addr_t vaddr, size_t size) size = ALIGN_UP(size + (vaddr & ~PAGE_MASK), PAGE_SIZE); while (free_size < size) { -#ifdef CONFIG_VA_BITS_48 l0pte = l0pte_offset(pgtable, vaddr); if (!*l0pte) /* Already free */ return; l1pte = l1pte_offset(l0pte, vaddr); -#elif CONFIG_VA_BITS_39 - l1pte = l1pte_offset(pgtable, vaddr); - if (!*l1pte) - /* Already free */ - return; -#else -#error "Wrong VA_BITS configuration." -#endif BUG_ON(!*l1pte); if (pte_type(l1pte) == PTE_TYPE_BLOCK) { @@ -457,10 +369,8 @@ void release_mapping(void *pgtable, addr_t vaddr, size_t size) free_size += SZ_1G; vaddr += SZ_1G; -#ifdef CONFIG_VA_BITS_48 if (empty_table(l0pte)) free(l0pte); -#endif } else { BUG_ON(pte_type(l1pte) != PTE_TYPE_TABLE); @@ -506,13 +416,7 @@ void *new_root_pgtable(void) void *pgtable; uint32_t ttb_size; -#ifdef CONFIG_VA_BITS_48 ttb_size = TTB_L0_SIZE; -#elif CONFIG_VA_BITS_39 - ttb_size = TTB_L1_SIZE; -#else -#error "Wrong VA_BITS configuration." -#endif pgtable = memalign(ttb_size, PAGE_SIZE); if (!pgtable) { @@ -591,13 +495,7 @@ static void __reset_pgtable(u64 *pgtable, int level) */ void reset_root_pgtable(void *pgtable, bool remove) { -#ifdef CONFIG_VA_BITS_48 __reset_pgtable((u64 *) pgtable, 0); -#elif CONFIG_VA_BITS_39 - __reset_pgtable((u64 *) pgtable, 1); -#else -#error "Wrong VA_BITS configuration." -#endif if (remove) free(pgtable); @@ -628,21 +526,12 @@ void mmu_configure(addr_t fdt_addr) memset((void *) __sys_linearmap_l2pgtable, 0, TTB_L2_SIZE); /* Create an identity mapping of 1 GB on running kernel so that the kernel code can go ahead right after the MMU on */ -#ifdef CONFIG_VA_BITS_48 __sys_root_pgtable[l0pte_index(mem_info.phys_base)] = (u64) __sys_idmap_l1pgtable & TTB_L0_TABLE_ADDR_MASK; set_pte_table(&__sys_root_pgtable[l0pte_index(mem_info.phys_base)], DCACHE_WRITEALLOC); __sys_idmap_l1pgtable[l1pte_index(mem_info.phys_base)] = mem_info.phys_base & TTB_L1_BLOCK_ADDR_MASK; set_pte_block(&__sys_idmap_l1pgtable[l1pte_index(mem_info.phys_base)], DCACHE_WRITEALLOC); -#elif CONFIG_VA_BITS_39 - __sys_root_pgtable[l1pte_index(mem_info.phys_base)] = mem_info.phys_base & TTB_L1_BLOCK_ADDR_MASK; - set_pte_block(&__sys_root_pgtable[l1pte_index(mem_info.phys_base)], DCACHE_WRITEALLOC); -#else -#error "Wrong VA_BITS configuration." -#endif - -#ifdef CONFIG_VA_BITS_48 /* Create the initial linear mapping of the kernel in its target virtual address space */ __sys_root_pgtable[l0pte_index(CONFIG_KERNEL_VADDR)] = (u64) __sys_linearmap_l1pgtable & TTB_L0_TABLE_ADDR_MASK; @@ -662,33 +551,10 @@ void mmu_configure(addr_t fdt_addr) set_pte_block(&__sys_linearmap_l2pgtable[l2pte_index(CONFIG_KERNEL_VADDR + i * SZ_2M)], DCACHE_WRITEALLOC); } -#elif CONFIG_VA_BITS_39 - __sys_root_pgtable[l1pte_index(CONFIG_KERNEL_VADDR)] = (u64) __sys_linearmap_l2pgtable & TTB_L1_TABLE_ADDR_MASK; - set_pte_table(&__sys_root_pgtable[l1pte_index(CONFIG_KERNEL_VADDR)], DCACHE_WRITEALLOC); - - /* Set up a 128 MB linear mapping to progress with the bootstrap code - * until the memory manager re-configure the memory mapping with - * a better granularity. - */ - for (i = 0; i < 64; i++) { - __sys_linearmap_l2pgtable[l2pte_index(CONFIG_KERNEL_VADDR + i * SZ_2M)] = (mem_info.phys_base + i * SZ_2M) & - TTB_L2_BLOCK_ADDR_MASK; - set_pte_block(&__sys_linearmap_l2pgtable[l2pte_index(CONFIG_KERNEL_VADDR + i * SZ_2M)], DCACHE_WRITEALLOC); - } -#else -#error "Wrong VA_BITS configuration." -#endif /* Early mapping I/O for UART. Here, the UART is supposed to be in a different L1 entry than the RAM. */ -#ifdef CONFIG_VA_BITS_48 __sys_idmap_l1pgtable[l1pte_index(CONFIG_UART_LL_PADDR)] = CONFIG_UART_LL_PADDR & TTB_L1_BLOCK_ADDR_MASK; set_pte_block(&__sys_idmap_l1pgtable[l1pte_index(CONFIG_UART_LL_PADDR)], DCACHE_OFF); -#elif CONFIG_VA_BITS_39 - __sys_root_pgtable[l1pte_index(CONFIG_UART_LL_PADDR)] = CONFIG_UART_LL_PADDR & TTB_L1_BLOCK_ADDR_MASK; - set_pte_block(&__sys_root_pgtable[l1pte_index(CONFIG_UART_LL_PADDR)], DCACHE_OFF); -#else -#error "Wrong VA_BITS configuration." -#endif #ifdef CONFIG_AVZ } @@ -917,13 +783,7 @@ void duplicate_pgtable_entry(u64 *from, u64 *to, int level, u64 vaddr, pcb_t *pc void duplicate_user_space(pcb_t *from, pcb_t *to) { /* Walk through the L0 pgtable and copy the entries */ -#ifdef CONFIG_VA_BITS_48 duplicate_pgtable_entry((u64 *) from->pgtable, (u64 *) to->pgtable, 0, 0, to); -#elif CONFIG_VA_BITS_39 - duplicate_pgtable_entry((u64 *) from->pgtable, (u64 *) to->pgtable, 1, 0, to); -#else -#error "Wrong VA_BITS configuration." -#endif } #ifdef CONFIG_RAMDEV @@ -950,15 +810,12 @@ void ramdev_create_mapping(void *root_pgtable, addr_t ramdev_start, addr_t ramde */ addr_t virt_to_phys_pt(addr_t vaddr) { -#ifdef CONFIG_VA_BITS_48 addr_t *l0pte; -#endif addr_t *l1pte, *l2pte, *l3pte; uint32_t offset; offset = vaddr & ~PAGE_MASK; -#ifdef CONFIG_VA_BITS_48 if (user_space_vaddr(vaddr)) l0pte = l0pte_offset(current_pgtable(), vaddr); else @@ -969,16 +826,6 @@ addr_t virt_to_phys_pt(addr_t vaddr) l1pte = l1pte_offset(l0pte, vaddr); BUG_ON(!*l1pte); -#elif CONFIG_VA_BITS_39 - if (user_space_vaddr(vaddr)) - l1pte = l1pte_offset((u64 *) current_pgtable(), vaddr); - else - l1pte = l1pte_offset(__sys_root_pgtable, vaddr); - BUG_ON(!*l1pte); -#else -#error "Wrong VA_BITS configuration." -#endif - if (pte_type(l1pte) == PTE_TYPE_BLOCK) return (*l1pte & TTB_L1_BLOCK_ADDR_MASK) | offset; diff --git a/so3/arch/arm64/so3.lds b/so3/arch/arm64/so3.lds index 44adc01626..1260fc0b63 100644 --- a/so3/arch/arm64/so3.lds +++ b/so3/arch/arm64/so3.lds @@ -15,7 +15,7 @@ SECTIONS /* where some locations at low addresses are reserved */ /* for spin tables used for starting cores. */ - . = ENTRY_ADDR + 0x80000; + . = ENTRY_ADDR + LOAD_OFFSET; __vectors_start = .; @@ -64,27 +64,27 @@ SECTIONS *(.sbss*) } - .bss (NOLOAD) : - { - *(.bss*) - - . = ALIGN(4096); + .bss (NOLOAD) : + { + *(.bss .bss.*) + + . = ALIGN(4096); __per_cpu_start = .; - - *(.bss.percpu) - + + *(.percpu_data) + . = ALIGN(128); - *(.bss.percpu.read_mostly) - + *(.percpu_data.read_mostly) + . = ALIGN(128); - + __per_cpu_data_end = .; - + . = ALIGN(128); - + __per_cpu_end = .; - + } :data __bss_end = .; diff --git a/so3/arch/arm64/thread.c b/so3/arch/arm64/thread.c index ca4730ea35..9ad64bae3a 100644 --- a/so3/arch/arm64/thread.c +++ b/so3/arch/arm64/thread.c @@ -18,7 +18,6 @@ #include #include -#include /** * Set the CPU registers with thread related information diff --git a/so3/arch/arm64/traps.c b/so3/arch/arm64/traps.c index 3ed7518832..36203bf9b7 100644 --- a/so3/arch/arm64/traps.c +++ b/so3/arch/arm64/traps.c @@ -20,6 +20,7 @@ #include #include #include +#include #ifdef CONFIG_AVZ @@ -27,6 +28,7 @@ #include #include +#include #include #ifdef CONFIG_SOO @@ -78,26 +80,115 @@ void trap_handle_error(addr_t lr) { #ifdef CONFIG_AVZ unsigned long esr = read_sysreg(esr_el2); - unsigned long far = read_sysreg(far_el2); unsigned long elr = read_sysreg(elr_el2); + unsigned long far = read_sysreg(far_el2); unsigned long hpfar = read_sysreg(hpfar_el2); + printk("CPU%d: ELR: %lx, FAR: %lx, HPFAR: %lx (IPA=0x%lx), LR(x30): %lx\n", + smp_processor_id(), elr, far, hpfar, hpfar << 8, lr); #else unsigned long esr = read_sysreg(esr_el1); + unsigned long elr = read_sysreg(elr_el1); unsigned long far = read_sysreg(far_el1); - unsigned long elr = 0; - unsigned long hpfar = 0; + printk("CPU%d: ELR: %lx, FAR: %lx, LR(x30): %lx\n", + smp_processor_id(), elr, far, lr); #endif - printk(" FAR: %lx\n", far); - printk(" ELR: %lx\n", elr); - printk(" HPFAR: %lx (IPA: %lx)\n", hpfar, (hpfar >> 4) << 12); show_invalid_entry_message(ESR_ELx_EC(esr), esr, lr); } #ifdef CONFIG_SMP -extern addr_t cpu_entrypoint; +extern addr_t cpu_entrypoints[4]; + +/* Called from pre_ret_to_el1 assembly before entering the WFI poll loop */ +void pre_ret_debug_wfi(u32 cpu_id) +{ + (void)cpu_id; +} + +/* Called from pre_ret_to_el1 assembly when entrypoint becomes non-zero */ +void pre_ret_debug_woke(u32 cpu_id, u64 ep) +{ + (void)cpu_id; + (void)ep; +} #endif +#include +#include +#include + +#define CNTHP_PPI_INTID 26 + +/* Set to 0 to bring up Linux with only CPU0 — useful for isolating vGIC + * issues before enabling full SMP. Set to 1 for normal 4-CPU operation. + * Used by the PSCI CPU_ON handler below (which is shared between GICv2 + * and GICv3), so it must be defined regardless of CONFIG_GIC_V3. */ +#define AVZ_SMP_BOOT 1 + +#ifdef CONFIG_GIC_V3 +/* EL2 IRQ handler for GICv3 with HCR_EL2.IMO=1. + * All physical IRQs (Group 1 NS) are taken at EL2. CNTHP (PPI 26) and the + * vGIC maintenance IRQ (PPI 25) are handled locally; every other IRQ is + * forwarded to Linux via a hardware-backed virtual LR. + * + * ICH_HCR_EL2.EN is enabled lazily inside gic_inject_irq() the first time a + * virtual LR is written (mirrors Bao's vgic_add_lr pattern). This guarantees + * EN=0 while Linux's gic_cpu_sys_reg_init() runs so it accesses the physical + * ICC registers directly, avoiding undefined-instruction faults on ICV_AP0Rx. */ +void avz_el2_irq_handle(cpu_regs_t *regs) +{ + u64 intid = read_sysreg_s(SYS_ICC_IAR1_EL1); + u32 id = (u32)(intid & 0x3ff); + + /* Spurious — no EOI required */ + if (id >= 1020) + return; + + /* Linux's gic_cpu_init writes GICR_ICENABLER0 = 0xffffffff which + * disables ALL PPIs at the redistributor on each CPU, including + * AVZ's MAINT (PPI 25) and CNTHP (PPI 26). Re-assert them on + * every IRQ entry — the write is idempotent and per-CPU. */ + { + int cpu_id = smp_processor_id(); + u8 *gicr_sgi = (u8 *)gic->gicc + cpu_id * 0x20000 + 0x10000; + iowrite32(gicr_sgi + 0x100, + (1u << IRQ_ARCH_ARM_MAINT) | (1u << CNTHP_PPI_INTID)); + } + + if (id == CNTHP_PPI_INTID) { + /* CNTHP (id=26): AVZ's own hypervisor timer — handle locally. */ + avz_el2_timer_tick(); + /* EOImode=1: priority drop, then explicit deactivate. */ + write_sysreg_s(intid, SYS_ICC_EOIR1_EL1); + write_sysreg_s(intid, SYS_ICC_DIR_EL1); + isb(); + } else if (id == IRQ_ARCH_ARM_MAINT) { + /* vGIC maintenance (id=25): drain overflow queue into free LRs. */ + gic_inject_pending(); + write_sysreg_s(intid, SYS_ICC_EOIR1_EL1); + write_sysreg_s(intid, SYS_ICC_DIR_EL1); + isb(); + } else if (is_sgi(id)) { + /* SGIs (0–15): software-backed. Deactivate physically, then inject + * as virtual SGI so Linux's IPI handler fires. */ + write_sysreg_s(intid, SYS_ICC_EOIR1_EL1); + write_sysreg_s(intid, SYS_ICC_DIR_EL1); + isb(); + gic_set_pending((u16)id); + } else { + /* PPIs (16–31, except 25/26) and SPIs (32+) destined for Linux. + * Drop priority at EL2 so further physical IRQs can be taken; + * the HW=1 LR triggers the physical deactivate when Linux later + * writes ICV_EOIR1_EL1 — DO NOT call DIR here, otherwise + * level-triggered IRQs storm before Linux clears the device's + * level source. */ + gic_set_pending((u16)id); + write_sysreg_s(intid, SYS_ICC_EOIR1_EL1); + isb(); + } +} +#endif /* CONFIG_GIC_V3 */ + /** * @brief Handling the dabt condition * @@ -191,18 +282,58 @@ void trap_handle(cpu_regs_t *regs) regs->x0 = PSCI_VERSION(1, 1); break; - case PSCI_0_2_FN64_CPU_ON: - printk("Power on CPU #%ld starting at %lx...\n", regs->x1 & 3, regs->x2); + case PSCI_0_2_FN64_CPU_ON: { + int target_cpu = regs->x1 & 3; - cpu_entrypoint = regs->x2; - smp_trigger_event(regs->x1 & 3); +#if AVZ_SMP_BOOT == 0 + regs->x0 = PSCI_RET_NOT_SUPPORTED; + break; +#endif + cpu_entrypoints[target_cpu] = regs->x2; + dsb(ish); + +#ifdef CONFIG_GIC_V3 + /* GICv3: targeted SGI via ICC_SGI1R_EL1 system register. + * ICC_SGI1R_EL1: [3:0]=SGI_ID, [23:16]=Aff1 target list (bit per Aff0). */ + { + u64 sgi1r = ((u64)(1U << target_cpu) << 16) | IPI_EVENT_CHECK; + write_sysreg_s(sgi1r, SYS_ICC_SGI1R_EL1); + isb(); + } +#else + /* GICv2: targeted SGI via GICD_SGIR MMIO. + * Format: [25:24]=00b (use TargetList), [23:16]=CPUTargetList + * (one bit per CPU), [3:0]=SGIINTID. + * Earlier code used (1u << 24) which is mode 01b + * (all-but-self) and ignores the TargetList — broadcasting + * IPI_EVENT_CHECK to every other CPU during PSCI_CPU_ON. */ + iowrite32(&gic->gicd->sgir, + ((1u << target_cpu) << 16) | IPI_EVENT_CHECK); + dsb(ish); +#endif regs->x0 = PSCI_RET_SUCCESS; break; + } case PSCI_0_2_FN_MIGRATE_INFO_TYPE: + /* No Trusted OS requiring migration — multiprocessor system */ + regs->x0 = PSCI_0_2_TOS_MP; + break; + case PSCI_1_0_FN_PSCI_FEATURES: - regs->x0 = PSCI_RET_SUCCESS; + /* No PSCI 1.x features implemented beyond the base set */ + regs->x0 = PSCI_RET_NOT_SUPPORTED; + break; + + case PSCI_0_2_FN_CPU_SUSPEND: + case PSCI_0_2_FN64_CPU_SUSPEND: + /* Not implemented: Linux cpuidle falls back to WFI */ + regs->x0 = PSCI_RET_NOT_SUPPORTED; + break; + + case PSCI_0_2_FN_CPU_OFF: + regs->x0 = PSCI_RET_NOT_SUPPORTED; break; #endif /* CONFIG_SMP */ @@ -214,6 +345,11 @@ void trap_handle(cpu_regs_t *regs) __sigreturn(); break; #endif /* CONFIG_SOO */ + default: + lprintk("[AVZ] HVC caught from EL1: x0=0x%lx ELR_EL2=0x%lx\n", + hvc_code, read_sysreg(elr_el2)); + regs->x0 = PSCI_RET_NOT_SUPPORTED; + break; } break; #endif /* CONFIG_AVZ */ @@ -258,6 +394,35 @@ void trap_handle(cpu_regs_t *regs) break; #endif + case ESR_ELx_EC_SYS64: { + /* Architectural traps that survive HSTR_EL2=0 — primarily + * ICC_SGI1R_EL1 writes, which the GICv3 spec mandates trap to EL2 + * when HCR_EL2.IMO=1 so the hypervisor can route the IPI. */ + u64 elr = read_sysreg(elr_el2); + u32 iss = (u32)(esr & 0x1ffffff); + u32 dir = iss & 1; + u32 crm = (iss >> 1) & 0xf; + u32 rt = (iss >> 5) & 0x1f; + u32 crn = (iss >> 10) & 0xf; + u32 op1 = (iss >> 14) & 0x7; + u32 op2 = (iss >> 17) & 0x7; + u32 op0 = (iss >> 20) & 0x3; + + if (!dir && op0 == 3 && op1 == 0 && crn == 12 && crm == 11 && op2 == 5) { + u64 sgi_val = (rt != 31) ? ((u64 *)regs)[rt] : 0; + write_sysreg_s(sgi_val, SYS_ICC_SGI1R_EL1); + isb(); + } else if (dir && rt != 31) { + ((u64 *)regs)[rt] = 0; + } + + regs->pc = elr + 4; + break; + } + + case ESR_ELx_EC_IABT_LOW: + goto __err; + default: __err: lprintk("### On CPU %d: ESR_Elx_EC(esr): 0x%lx\n", smp_processor_id(), ESR_ELx_EC(esr)); diff --git a/so3/arch/arm64/verdin-imx8mp/Makefile b/so3/arch/arm64/verdin-imx8mp/Makefile new file mode 100644 index 0000000000..580dd0a20a --- /dev/null +++ b/so3/arch/arm64/verdin-imx8mp/Makefile @@ -0,0 +1,5 @@ +# +# Makefile +# + +obj-$(CONFIG_SMP) += platsmp.o diff --git a/so3/arch/arm64/verdin-imx8mp/include/mach/io.h b/so3/arch/arm64/verdin-imx8mp/include/mach/io.h new file mode 100644 index 0000000000..c79bd33dcf --- /dev/null +++ b/so3/arch/arm64/verdin-imx8mp/include/mach/io.h @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2026 EDGEMTech SA + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#ifndef MACH_IO_H +#define MACH_IO_H + +/* + * Freescale i.MX8MP UART3 register offsets (fsl,imx6q-uart compatible). + * Base address: 0x30880000 (UART3, used as debug console). + */ + +#define IMX_UART_URXD 0x00 /* Receiver register */ +#define IMX_UART_UTXD 0x40 /* Transmitter register */ +#define IMX_UART_UCR1 0x80 /* Control register 1 */ +#define IMX_UART_UCR2 0x84 /* Control register 2 */ +#define IMX_UART_UCR3 0x88 /* Control register 3 */ +#define IMX_UART_UCR4 0x8c /* Control register 4 */ +#define IMX_UART_UFCR 0x90 /* FIFO control register */ +#define IMX_UART_USR1 0x94 /* Status register 1 */ +#define IMX_UART_USR2 0x98 /* Status register 2 */ + +/* USR2 bits */ +#define IMX_UART_USR2_TXFE (1 << 14) /* TX FIFO empty */ +#define IMX_UART_USR2_TXDC (1 << 3) /* Transmitter complete */ + +/* UCR1 bits */ +#define IMX_UART_UCR1_UARTEN (1 << 0) /* UART enable */ + +/* UCR2 bits */ +#define IMX_UART_UCR2_TXEN (1 << 2) /* Transmitter enable */ +#define IMX_UART_UCR2_RXEN (1 << 1) /* Receiver enable */ +#define IMX_UART_UCR2_SRST (1 << 0) /* SW reset (active low) */ + +#endif /* MACH_IO_H */ diff --git a/so3/arch/arm64/verdin-imx8mp/include/mach/ipamap.h b/so3/arch/arm64/verdin-imx8mp/include/mach/ipamap.h new file mode 100644 index 0000000000..13e88eeb9c --- /dev/null +++ b/so3/arch/arm64/verdin-imx8mp/include/mach/ipamap.h @@ -0,0 +1,67 @@ +/* + * Copyright (C) 2026 EDGEMTech SA + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#ifndef MACH_IPAMAP_H +#define MACH_IPAMAP_H + +#include + +/* + * IPA (Intermediate Physical Address) map for the AVZ agency on iMX8MP. + * + * The peripheral space (0x30000000–0x3FFFFFFF) is split into two regions so + * that the GICv3 distributor (GICD @ 0x38800000, size 64 KiB) is NOT mapped + * in Stage-2. Linux accesses to GICD therefore cause Stage-2 data aborts + * that are intercepted by AVZ's mmio_dabt_decode() handler, which forwards + * them to the physical GICD or emulates them as needed. + * + * GICR (redistributor @ 0x38880000) and all other peripherals remain + * directly accessible by Linux. + */ +ipamap_t agency_ipamap[] = { + { + /* AIPS1/2/3 peripherals below the GIC distributor */ + .ipa_addr = 0x30000000, + .phys_addr = 0x30000000, + .size = 0x08800000, /* 0x30000000 – 0x387FFFFF */ + }, + /* GICD @ 0x38800000 size 0x10000 intentionally omitted */ + { + /* GICR, CPU interface compat, and all peripherals above GICD */ + .ipa_addr = 0x38810000, + .phys_addr = 0x38810000, + .size = 0x077F0000, /* 0x38810000 – 0x3FFFFFFF */ + }, +}; + +/* + * Capsule IPA map — minimal stub (no SOO capsules on this platform). + * The vGIC CPU interface entry is kept for structural compatibility with + * the hypervisor's domain setup code; the GICv3 compat GICC is mapped + * at its physical address. + */ +ipamap_t capsule_ipamap[] = { + { + /* GICv3 CPU interface compatibility register frame */ + .ipa_addr = 0x38C20000, + .phys_addr = 0x38C20000, + .size = 0x10000, + }, +}; + +#endif /* MACH_IPAMAP_H */ diff --git a/so3/arch/arm64/verdin-imx8mp/platsmp.c b/so3/arch/arm64/verdin-imx8mp/platsmp.c new file mode 100644 index 0000000000..4f3f4d4103 --- /dev/null +++ b/so3/arch/arm64/verdin-imx8mp/platsmp.c @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2016,2017 Daniel Rossier + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +/* + * Secondary CPU bring-up for Toradex Verdin iMX8MP. + * ATF provides PSCI; cpu_on() issues an SMC to bring secondaries to + * secondary_startup via PSCI_CPU_ON. + */ + +#include +#include +#include + +#include +#include + +#include + +extern void secondary_startup(void); + +static DEFINE_SPINLOCK(cpu_lock); + +void smp_boot_secondary(unsigned int cpu) +{ + spin_lock(&cpu_lock); + cpu_on(cpu, (u32) __pa(secondary_startup)); + spin_unlock(&cpu_lock); +} diff --git a/so3/arch/arm64/virt64/include/mach/ipamap.h b/so3/arch/arm64/virt64/include/mach/ipamap.h index 6bdc9ae073..a650a9a144 100644 --- a/so3/arch/arm64/virt64/include/mach/ipamap.h +++ b/so3/arch/arm64/virt64/include/mach/ipamap.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020-2023 Daniel Rossier + * Copyright (C) 2020-2026 Daniel Rossier * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as @@ -21,29 +21,75 @@ #include +/* + * IPA (Intermediate Physical Address) map for the AVZ agency on virt64. + * + * - GICD (0x08000000, size 0x10000) intentionally omitted from + * Stage-2: every Linux access faults to mmio_dabt_decode → + * gic_handle_dist_access, which forwards to physical GICD with + * GICD_SGIR translated into smp_cross_call. Mirrors verdin's + * GICv3 model. + * - GICC (guest IPA 0x08010000) → physical GICV (0x08040000) so the + * guest's CPU-interface accesses hit the virtual interface and + * AVZ's HW=1 LR injections actually reach Linux. + * - v2m (0x08020000) is pass-through (Linux exposes it but does not + * use MSIs without a configured PCIe device). + * - GICH (0x08030000) and GICV (0x08040000) are EL2-only — no guest + * mapping at those IPAs. + * - Everything else (UART, RTC, fw-cfg, virtio MMIO, …) above the GIC + * block stays pass-through. + */ ipamap_t agency_ipamap[] = { { + /* GICD pass-through. Trap+forward (mirroring verdin GICv3) + * was attempted with two different models — direct physical + * GICD_SGIR replay, and Jailhouse-style queue+wake — both + * regress SMP bring-up under QEMU virt GICv2 + secure=on: + * cross-CPU SGIs queued from EL2 don't reliably wake the + * target Linux CPU under that combination. Pass-through + * keeps Linux's GICD writes hitting hardware directly, which + * works correctly with the GICv2 vGIC priority/source-CPU/EOIR + * fixes that landed alongside this in gic.c. */ .ipa_addr = 0x08000000, .phys_addr = 0x08000000, - .size = 0x3000000, + .size = 0x10000, }, { - /* PCIe configuration ranges */ - .ipa_addr = 0x4010000000, - .phys_addr = 0x4010000000, - .size = 0x10000000, + /* GICC view → physical GICV (vGIC CPU interface). */ + .ipa_addr = 0x08010000, + .phys_addr = 0x08040000, + .size = 0x10000, + }, + { + /* v2m MSI frame */ + .ipa_addr = 0x08020000, + .phys_addr = 0x08020000, + .size = 0x10000, }, { - /* PCIe devices IO and 32 bits memory ranges */ + /* Peripherals above the GIC block (UART, RTC, virtio, …) */ + .ipa_addr = 0x08050000, + .phys_addr = 0x08050000, + .size = 0x2FB0000, + }, + { + /* PCIe MMIO low window (QEMU virt: 0x10000000-0x3effffff). + * Linux PCIe enumeration walks this range looking for BARs. + * Pass-through: no devices mean reads return 0xff and writes + * are harmless, but the Stage-2 mapping must exist. */ .ipa_addr = 0x10000000, .phys_addr = 0x10000000, - .size = 0x2f000000, + .size = 0x30000000, }, { - /* PCIe devices 64 bits memory ranges */ - .ipa_addr = 0x8000000000, - .phys_addr = 0x8000000000, - .size = 0x8000000000, + /* PCIe ECAM extended config space (QEMU virt: + * 0x4010000000-0x401fffffff, 256MB for buses 00-ff). Linux's + * pci-host-generic accesses this region while enumerating — + * unmapped, the access faults at Stage-2 and crashes the + * faulting CPU (CPU1 in our boot log). */ + .ipa_addr = 0x4010000000UL, + .phys_addr = 0x4010000000UL, + .size = 0x10000000, }, }; diff --git a/so3/avz/include/avz/uapi/avz.h b/so3/avz/include/avz/uapi/avz.h index 4eed6041e9..963b309cc3 100644 --- a/so3/avz/include/avz/uapi/avz.h +++ b/so3/avz/include/avz/uapi/avz.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016-2022 Daniel Rossier + * Copyright (C) 2016-2026 Daniel Rossier * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as @@ -83,6 +83,7 @@ #ifndef DOMID_T #define DOMID_T + typedef uint16_t domid_t; typedef unsigned long addr_t; #endif @@ -138,6 +139,7 @@ typedef struct domctl domctl_t; #define EVTCHNSTAT_unbound 1 /* Channel is waiting interdom connection.*/ #define EVTCHNSTAT_interdomain 2 /* Channel is connected to remote domain. */ #define EVTCHNSTAT_virq 3 /* Channel is bound to a virtual IRQ line */ + /* * EVTCHNOP_alloc_unbound: Allocate a evtchn in domain and mark as * accepting interdomain bindings from domain . A fresh evtchn diff --git a/so3/avz/kernel/agency_build.c b/so3/avz/kernel/agency_build.c index b2093b7099..54646f7a71 100644 --- a/so3/avz/kernel/agency_build.c +++ b/so3/avz/kernel/agency_build.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016-2024 Daniel Rossier + * Copyright (C) 2016-2026 Daniel Rossier * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as @@ -69,8 +69,20 @@ int construct_agency(struct domain *d) printk("Agency FDT device tree: 0x%lx (phys)\n", d->avz_shared->fdt_paddr); printk("Shared AVZ page is located at: %p\n", d->avz_shared); + printk("Agency entry IPA: 0x%lx FDT IPA: 0x%lx\n", + pa_to_ipa(MEMSLOT_AGENCY, memslot[MEMSLOT_AGENCY].entry_addr), + pa_to_ipa(MEMSLOT_AGENCY, d->avz_shared->fdt_paddr)); - initialize_hyp_dom_stack(d, pa_to_ipa(MEMSLOT_AGENCY, d->avz_shared->fdt_paddr), memslot[MEMSLOT_AGENCY].entry_addr); + /* Dump the first 4 instructions at the guest entry point to confirm the kernel is loaded */ + { + u32 *insns = (u32 *) __xva(MEMSLOT_AGENCY, memslot[MEMSLOT_AGENCY].entry_addr); + + printk("Guest entry (PA 0x%lx, VA 0x%p): [0]=0x%08x [1]=0x%08x [2]=0x%08x [3]=0x%08x\n", + memslot[MEMSLOT_AGENCY].entry_addr, insns, + insns[0], insns[1], insns[2], insns[3]); + } + + initialize_hyp_dom_stack(d, pa_to_ipa(MEMSLOT_AGENCY, d->avz_shared->fdt_paddr), pa_to_ipa(MEMSLOT_AGENCY, memslot[MEMSLOT_AGENCY].entry_addr)); return 0; } diff --git a/so3/avz/kernel/domain.c b/so3/avz/kernel/domain.c index a70c3a6e72..881168eaf5 100644 --- a/so3/avz/kernel/domain.c +++ b/so3/avz/kernel/domain.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2014-2025 Daniel Rossier + * Copyright (C) 2014-2026 Daniel Rossier * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as @@ -27,6 +27,8 @@ #include #include +#include +#include #include #include diff --git a/so3/avz/kernel/domain_utils.c b/so3/avz/kernel/domain_utils.c index 64b747f580..baf87b20a8 100644 --- a/so3/avz/kernel/domain_utils.c +++ b/so3/avz/kernel/domain_utils.c @@ -259,6 +259,7 @@ void loadAgency(void) /** * The ITB image will be parsed and the components placed in their target memory location. + * This works in AVZ context. * * @param slotID * @param itb ITB image diff --git a/so3/avz/kernel/gnttab.c b/so3/avz/kernel/gnttab.c index 333694cbf3..599e4a164f 100644 --- a/so3/avz/kernel/gnttab.c +++ b/so3/avz/kernel/gnttab.c @@ -165,14 +165,7 @@ addr_t map_vbstore_pfn(int target_domid, int pfn) else grant_paddr = pfn_to_phys(pfn); - /* - * The vbstore ring buffer is shared Normal memory between agency - * and ME. Map it Normal cacheable (nocache=false) so that both - * sides see coherent writes via the inner-shareable cache domain. - * Using Device attributes here would break ring-buffer coherency - * with the agency which maps the same page as Normal cacheable. - */ - __create_mapping((addr_t *) d->pagetable_vaddr, grant_paddr, pfn_to_phys(cur->pfn), PAGE_SIZE, false, + __create_mapping((addr_t *) d->pagetable_vaddr, grant_paddr, pfn_to_phys(cur->pfn), PAGE_SIZE, true, S2); return phys_to_pfn(grant_paddr); diff --git a/so3/avz/kernel/hypercalls.c b/so3/avz/kernel/hypercalls.c index 30af35cf84..b6dfc6bb7c 100644 --- a/so3/avz/kernel/hypercalls.c +++ b/so3/avz/kernel/hypercalls.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2014-2018 Daniel Rossier + * Copyright (C) 2014-2026 Daniel Rossier * Copyright (C) 2018 Baptiste Delporte * * This program is free software; you can redistribute it and/or modify @@ -222,8 +222,5 @@ void do_avz_hypercall(void *__args) break; } - /* inner shareable */ - dsb(ish); - - isb(); + flush_dcache_all(); } diff --git a/so3/avz/kernel/schedule.c b/so3/avz/kernel/schedule.c index bbaa3c504d..a916df7e69 100644 --- a/so3/avz/kernel/schedule.c +++ b/so3/avz/kernel/schedule.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2014-2018 Daniel Rossier + * Copyright (C) 2014-2026 Daniel Rossier * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as @@ -199,9 +199,13 @@ static void domain_schedule(void) struct task_slice next_slice; ASSERT(local_irq_is_disabled()); - ASSERT(prev->runstate == RUNSTATE_running); + if (!prev->sched) { + while (1) + cpu_do_idle(); + } + /* To avoid that another CPU manipulates scheduler data structures */ /* Maybe the lock is already acquired from do_sleep() for example */ if (!spin_is_locked(¤t_domain->sched->sched_data.schedule_lock)) @@ -209,7 +213,8 @@ static void domain_schedule(void) sd = ¤t_domain->sched->sched_data; - stop_timer(&sd->s_timer); + if (active_timer(&sd->s_timer)) + stop_timer(&sd->s_timer); /* get policy-specific decision on scheduling... */ next_slice = prev->sched->do_schedule(); diff --git a/so3/avz/kernel/smp.c b/so3/avz/kernel/smp.c index 1a9d4eb4c9..d753f3d114 100644 --- a/so3/avz/kernel/smp.c +++ b/so3/avz/kernel/smp.c @@ -103,23 +103,14 @@ void secondary_start_kernel(void) gicc_init(); - printk("CPU%u: Booted secondary processor\n", cpu); -#ifdef CONFIG_SOO - if (cpu != ME_CPU) -#endif /* CONFIG_SOO */ - __mmu_switch_kernel((void *) domains[DOMID_AGENCY]->pagetable_paddr, true); +#ifndef CONFIG_SOO + __mmu_switch_kernel((void *) domains[DOMID_AGENCY]->pagetable_paddr, true); +#endif /* !CONFIG_SOO */ booted[cpu] = 1; #ifdef CONFIG_CPU_SPIN_TABLE -#ifdef CONFIG_SOO - /* Agency secondary CPUs are handed directly to Linux via spin-table. - * Set current_domain to agency so HVC calls from EL1 are correctly dispatched. - */ - if (cpu != ME_CPU) - set_current_domain(agency); -#endif /* CONFIG_SOO */ switch (cpu) { case 1: pre_ret_to_el1_spin(CPU1_RELEASE_ADDR); @@ -127,13 +118,9 @@ void secondary_start_kernel(void) case 2: pre_ret_to_el1_spin(CPU2_RELEASE_ADDR); break; - /* CPU #3 is dedicated to capsules in case of CONFIG_SOO */ -#ifndef CONFIG_SOO case 3: pre_ret_to_el1_spin(CPU3_RELEASE_ADDR); break; -#endif /* !CONFIG_SOO*/ - default: printk("%s: trying to start CPU %d that is not supported.\n", __func__, cpu); } @@ -143,7 +130,9 @@ void secondary_start_kernel(void) #ifdef CONFIG_SOO if (cpu != ME_CPU) #endif /* CONFIG_SOO */ + { pre_ret_to_el1(); + } #endif /* CONFIG_CPU_PCSI */ secondary_timer_init(); @@ -199,7 +188,6 @@ void cpu_up(unsigned int cpu) while (!booted[cpu]) ; - printk("%s CPU %d finished waiting...\n", __func__, smp_processor_id()); secondary_data.stack = NULL; secondary_data.pgdir = 0; @@ -225,10 +213,6 @@ void smp_init(void) #ifdef CONFIG_SOO - /* Boot agency secondary CPUs so they enter spin-table wait for Linux */ - for (i = 1; i < ME_CPU; i++) - cpu_up(i); - printk("Starting ME CPU...\n"); cpu_up(ME_CPU); @@ -237,13 +221,8 @@ void smp_init(void) #else /* CONFIG_SOO */ -#ifdef CONFIG_AVZ - /* With VT support, we prepare the CPU to be started through a HVC call - * from the domain. - */ for (i = 1; i < CONFIG_NR_CPUS; i++) cpu_up(i); -#endif #endif /* !CONFIG_SOO */ } diff --git a/so3/avz/kernel/timer.c b/so3/avz/kernel/timer.c index cb908b6a13..97d0585a03 100644 --- a/so3/avz/kernel/timer.c +++ b/so3/avz/kernel/timer.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2014-2023 Daniel Rossier + * Copyright (C) 2014-2026 Daniel Rossier * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as @@ -23,6 +23,36 @@ #include #include +/* + * Called on every EL2 timer tick (CNTHP, PPI 26) on agency CPUs (non-ME). + * Per-CPU tick counter so each CPU emits its own 5s heartbeat — without + * this, CPU0's heartbeat would mask whether secondary CPUs are ticking. + */ +static DEFINE_PER_CPU(unsigned int, agency_tick_count); + +/* EDGEMTech instrumentation: per-CPU counters to discriminate stall cause. + * Updated from gic_handle/gic_inject_irq (gic.c). */ +DEFINE_PER_CPU(unsigned long, gic_iar_count); +DEFINE_PER_CPU(unsigned long, gic_inj_27_count); +DEFINE_PER_CPU(unsigned long, gic_inj_total_count); +DEFINE_PER_CPU(unsigned long, gic_busy_count); +DEFINE_PER_CPU(unsigned long, gic_eexist_count); +DEFINE_PER_CPU(unsigned long, gic_sgi0_recv); +DEFINE_PER_CPU(unsigned long, gic_sgi0_eexist); + +void agency_timer_interrupt(void) +{ + unsigned int *count = &this_cpu(agency_tick_count); + + if (++(*count) >= 5 * CONFIG_HZ) { + *count = 0; + +#if 0 /* Debug purpose */ + printk("[AVZ] alive on CPU%d\n", smp_processor_id()); +#endif /* 0 */ + } +} + void timer_interrupt(bool periodic) { int i; @@ -43,7 +73,10 @@ void timer_interrupt(bool periodic) } } } + } else { + agency_timer_interrupt(); } + raise_softirq(TIMER_SOFTIRQ); } diff --git a/so3/configs/rpi4_64_avz_defconfig b/so3/configs/rpi4_64_avz_defconfig index a4fed0644b..1eb3483570 100644 --- a/so3/configs/rpi4_64_avz_defconfig +++ b/so3/configs/rpi4_64_avz_defconfig @@ -53,6 +53,7 @@ CONFIG_UART_LL_PADDR=0xfe215040 # CONFIG_RAMDEV is not set CONFIG_ARM_TIMER=y CONFIG_GIC=y +CONFIG_GIC_V2=y # # SO3 Applications diff --git a/so3/configs/rpi4_64_defconfig b/so3/configs/rpi4_64_defconfig index 4af173db30..d07c57c7a5 100644 --- a/so3/configs/rpi4_64_defconfig +++ b/so3/configs/rpi4_64_defconfig @@ -51,6 +51,7 @@ CONFIG_UART_LL_PADDR=0xfe215040 CONFIG_RAMDEV=y CONFIG_ARM_TIMER=y CONFIG_GIC=y +CONFIG_GIC_V2=y # # SO3 Applications diff --git a/so3/configs/rpi4_defconfig b/so3/configs/rpi4_defconfig index 04c15d7c33..e436b68198 100644 --- a/so3/configs/rpi4_defconfig +++ b/so3/configs/rpi4_defconfig @@ -49,6 +49,7 @@ CONFIG_UART_LL_PADDR=0xfe215040 CONFIG_RAMDEV=y CONFIG_ARM_TIMER=y CONFIG_GIC=y +CONFIG_GIC_V2=y CONFIG_I2C_BSC=y CONFIG_RPI_SENSE=y diff --git a/so3/configs/verdin-imx8mp_avz_defconfig b/so3/configs/verdin-imx8mp_avz_defconfig new file mode 100644 index 0000000000..3106d20614 --- /dev/null +++ b/so3/configs/verdin-imx8mp_avz_defconfig @@ -0,0 +1,101 @@ +# +# Automatically generated make config: don't edit +# SO3 Polymorphic OS Configuration +# +# CONFIG_ARCH_ARM32 is not set + +CONFIG_ARCH_ARM64=y +CONFIG_ARCH="arm64" +CONFIG_CROSS_COMPILE="aarch64-none-elf-" +# CONFIG_ARM_TRUSTZONE is not set +CONFIG_KERNEL_VADDR=0x0000100000000000 + +# +# Platform +# +# CONFIG_VIRT64 is not set +# CONFIG_RPI4_64 is not set + +CONFIG_VERDIN_IMX8MP=y +# CONFIG_VA_BITS_39 is not set +CONFIG_VA_BITS_48=y +CONFIG_THREAD_ENV=y + +# +# Kernel & CPU features +# + +CONFIG_MAX_THREADS=32 +CONFIG_SMP=y +CONFIG_NR_CPUS=4 +CONFIG_CPU_PSCI=y +CONFIG_HZ=100 +CONFIG_SCHED_FLIP_SCHEDFREQ=30 + +# +# SO3 Scheduling configuration +# + +CONFIG_SCHED_RR=y +# CONFIG_SCHED_PRIO is not set +CONFIG_SCHED_FREQ_PREEMPTION=y + +# +# Drivers +# + +CONFIG_UART=y +CONFIG_IO_MAPPING_BASE=0x0000200000000000 +# CONFIG_I2C is not set +# CONFIG_NET is not set +# CONFIG_FB is not set +# CONFIG_INPUT is not set +# CONFIG_NS16550 is not set + +CONFIG_IMX_UART=y +CONFIG_UART_LL_PADDR=0x30880000 +# CONFIG_MMC is not set +# CONFIG_RAMDEV is not set + +CONFIG_ARM_TIMER=y +CONFIG_GIC=y +CONFIG_GIC_V3=y + +# +# SO3 Applications +# +# CONFIG_APP_SAMPLE is not set +# CONFIG_APP_REFSO3 is not set + +# +# Filesystems +# + +CONFIG_ROOTFS_NONE=y +# CONFIG_ROOTFS_MMC is not set +# CONFIG_ROOTFS_RAMDEV is not set + +# +# IPC +# +# CONFIG_IPC_SIGNAL is not set +# CONFIG_IPC_PIPE is not set + +CONFIG_HEAP_SIZE_MB=8 +CONFIG_SYS_STACK_SIZE_KB=64 +CONFIG_THREAD_STACK_SIZE_KB=64 +# CONFIG_RTOS is not set +CONFIG_AVZ=y +CONFIG_USER_INIT_PROGRAM="init.elf" +# CONFIG_LOG_LEVEL_CRITICAL is not set +# CONFIG_LOG_LEVEL_ERROR is not set +# CONFIG_LOG_LEVEL_WARNING is not set + +CONFIG_LOG_LEVEL_INFO=y +# CONFIG_LOG_LEVEL_DEBUG is not set +# CONFIG_LOG_LEVEL_TRACE is not set +# CONFIG_LOG_LEVEL_NONE is not set + +CONFIG_LOG_LEVEL=4 +# CONFIG_SOO is not set +CONFIG_MMU=y diff --git a/so3/configs/virt32_defconfig b/so3/configs/virt32_defconfig index 77220ec2fb..2e6060e2ba 100644 --- a/so3/configs/virt32_defconfig +++ b/so3/configs/virt32_defconfig @@ -50,6 +50,7 @@ CONFIG_RAMDEV=y # CONFIG_SP804 is not set CONFIG_ARM_TIMER=y CONFIG_GIC=y +CONFIG_GIC_V2=y # CONFIG_PL050_KMI is not set # CONFIG_VIRT_INPUT is not set diff --git a/so3/configs/virt32_fb_defconfig b/so3/configs/virt32_fb_defconfig index cd3d23ca46..8025abef20 100644 --- a/so3/configs/virt32_fb_defconfig +++ b/so3/configs/virt32_fb_defconfig @@ -50,6 +50,7 @@ CONFIG_RAMDEV=y # CONFIG_SP804 is not set CONFIG_ARM_TIMER=y CONFIG_GIC=y +CONFIG_GIC_V2=y CONFIG_PL111_CLCD=y # CONFIG_QEMU_RAMFB is not set # CONFIG_VIRTFB is not set diff --git a/so3/configs/virt32_lvperf_defconfig b/so3/configs/virt32_lvperf_defconfig index 8029114f38..e27a7a0837 100644 --- a/so3/configs/virt32_lvperf_defconfig +++ b/so3/configs/virt32_lvperf_defconfig @@ -50,6 +50,7 @@ CONFIG_RAMDEV=y # CONFIG_SP804 is not set CONFIG_ARM_TIMER=y CONFIG_GIC=y +CONFIG_GIC_V2=y # CONFIG_PL111_CLCD is not set # CONFIG_QEMU_RAMFB is not set CONFIG_VIRTFB=y diff --git a/so3/configs/virt64_avz_defconfig b/so3/configs/virt64_avz_defconfig index 159e008d82..ba73c31e48 100644 --- a/so3/configs/virt64_avz_defconfig +++ b/so3/configs/virt64_avz_defconfig @@ -52,6 +52,7 @@ CONFIG_UART_LL_PADDR=0x09000000 # CONFIG_RAMDEV is not set CONFIG_ARM_TIMER=y CONFIG_GIC=y +CONFIG_GIC_V2=y # CONFIG_PL050_KMI is not set # CONFIG_VIRT_INPUT is not set diff --git a/so3/configs/virt64_avz_soo_defconfig b/so3/configs/virt64_avz_soo_defconfig index 04457c507d..67555e6bc9 100644 --- a/so3/configs/virt64_avz_soo_defconfig +++ b/so3/configs/virt64_avz_soo_defconfig @@ -52,6 +52,7 @@ CONFIG_UART_LL_PADDR=0x09000000 # CONFIG_RAMDEV is not set CONFIG_ARM_TIMER=y CONFIG_GIC=y +CONFIG_GIC_V2=y # CONFIG_PL050_KMI is not set # CONFIG_VIRT_INPUT is not set diff --git a/so3/configs/virt64_capsule_defconfig b/so3/configs/virt64_capsule_defconfig index 0eb6b71fd0..baf1bc4821 100644 --- a/so3/configs/virt64_capsule_defconfig +++ b/so3/configs/virt64_capsule_defconfig @@ -51,6 +51,7 @@ CONFIG_SOO_SERIAL=y CONFIG_RAMDEV=y CONFIG_SOO_TIMER=y CONFIG_GIC=y +CONFIG_GIC_V2=y # CONFIG_PL050_KMI is not set CONFIG_SOO_INPUT=y # CONFIG_VIRT_INPUT is not set diff --git a/so3/configs/virt64_defconfig b/so3/configs/virt64_defconfig index a04a7ab05f..47bc26280d 100644 --- a/so3/configs/virt64_defconfig +++ b/so3/configs/virt64_defconfig @@ -51,6 +51,7 @@ CONFIG_UART_LL_PADDR=0x09000000 CONFIG_RAMDEV=y CONFIG_ARM_TIMER=y CONFIG_GIC=y +CONFIG_GIC_V2=y # CONFIG_PL111_CLCD is not set # CONFIG_QEMU_RAMFB is not set # CONFIG_PL050_KMI is not set diff --git a/so3/configs/virt64_fb_defconfig b/so3/configs/virt64_fb_defconfig index 786247c74e..00fde9945f 100644 --- a/so3/configs/virt64_fb_defconfig +++ b/so3/configs/virt64_fb_defconfig @@ -51,6 +51,7 @@ CONFIG_UART_LL_PADDR=0x09000000 CONFIG_RAMDEV=y CONFIG_ARM_TIMER=y CONFIG_GIC=y +CONFIG_GIC_V2=y CONFIG_PL111_CLCD=y # CONFIG_QEMU_RAMFB is not set # CONFIG_VIRTFB is not set diff --git a/so3/configs/virt64_lvperf_defconfig b/so3/configs/virt64_lvperf_defconfig index ad35246104..9cb21e008a 100644 --- a/so3/configs/virt64_lvperf_defconfig +++ b/so3/configs/virt64_lvperf_defconfig @@ -51,6 +51,7 @@ CONFIG_UART_LL_PADDR=0x09000000 CONFIG_RAMDEV=y CONFIG_ARM_TIMER=y CONFIG_GIC=y +CONFIG_GIC_V2=y # CONFIG_PL111_CLCD is not set # CONFIG_QEMU_RAMFB is not set CONFIG_VIRTFB=y diff --git a/so3/devices/device.c b/so3/devices/device.c index a92deee377..787636d6c5 100644 --- a/so3/devices/device.c +++ b/so3/devices/device.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2017-2018 Daniel Rossier + * Copyright (C) 2017-2026 Daniel Rossier * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as diff --git a/so3/devices/irq/Kconfig b/so3/devices/irq/Kconfig index 9ca4a07f52..8d8f7e5cc5 100644 --- a/so3/devices/irq/Kconfig +++ b/so3/devices/irq/Kconfig @@ -2,5 +2,11 @@ config GIC bool "Generic IRQ Controller" - - \ No newline at end of file + +config GIC_V2 + bool + depends on GIC + +config GIC_V3 + bool + depends on GIC diff --git a/so3/devices/irq/gic.c b/so3/devices/irq/gic.c index 2b5654e810..2568053b80 100644 --- a/so3/devices/irq/gic.c +++ b/so3/devices/irq/gic.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2014-2023 Daniel Rossier + * Copyright (C) 2014-2026 Daniel Rossier * Copyright (C) 2014 Romain Bornet * Copyright (C) 2016-2017 Alexandre Malki * @@ -71,6 +71,14 @@ gic_t *gic; DEFINE_PER_CPU(spinlock_t, intc_lock); +DECLARE_PER_CPU(unsigned long, gic_iar_count); +DECLARE_PER_CPU(unsigned long, gic_inj_27_count); +DECLARE_PER_CPU(unsigned long, gic_inj_total_count); +DECLARE_PER_CPU(unsigned long, gic_busy_count); +DECLARE_PER_CPU(unsigned long, gic_eexist_count); +DECLARE_PER_CPU(unsigned long, gic_sgi0_recv); +DECLARE_PER_CPU(unsigned long, gic_sgi0_eexist); + #ifdef CONFIG_AVZ #define MAX_PENDING_IRQS 256 @@ -88,8 +96,56 @@ struct pending_irqs { volatile unsigned int tail; }; -struct pending_irqs pending_irqs; +DEFINE_PER_CPU(struct pending_irqs, pending_irqs); + +#ifdef CONFIG_GIC_V3 +/* GICv3: list registers are ICH_LR*_EL2 system registers (64-bit) */ +static u64 gic_read_lr(unsigned int n) +{ + switch (n) { + case 0: return read_sysreg_s(SYS_ICH_LR0_EL2); + case 1: return read_sysreg_s(SYS_ICH_LR1_EL2); + case 2: return read_sysreg_s(SYS_ICH_LR2_EL2); + case 3: return read_sysreg_s(SYS_ICH_LR3_EL2); + case 4: return read_sysreg_s(SYS_ICH_LR4_EL2); + case 5: return read_sysreg_s(SYS_ICH_LR5_EL2); + case 6: return read_sysreg_s(SYS_ICH_LR6_EL2); + case 7: return read_sysreg_s(SYS_ICH_LR7_EL2); + case 8: return read_sysreg_s(SYS_ICH_LR8_EL2); + case 9: return read_sysreg_s(SYS_ICH_LR9_EL2); + case 10: return read_sysreg_s(SYS_ICH_LR10_EL2); + case 11: return read_sysreg_s(SYS_ICH_LR11_EL2); + case 12: return read_sysreg_s(SYS_ICH_LR12_EL2); + case 13: return read_sysreg_s(SYS_ICH_LR13_EL2); + case 14: return read_sysreg_s(SYS_ICH_LR14_EL2); + case 15: return read_sysreg_s(SYS_ICH_LR15_EL2); + default: return 0; + } +} +void gic_write_lr(unsigned int n, u64 value) +{ + switch (n) { + case 0: write_sysreg_s(value, SYS_ICH_LR0_EL2); break; + case 1: write_sysreg_s(value, SYS_ICH_LR1_EL2); break; + case 2: write_sysreg_s(value, SYS_ICH_LR2_EL2); break; + case 3: write_sysreg_s(value, SYS_ICH_LR3_EL2); break; + case 4: write_sysreg_s(value, SYS_ICH_LR4_EL2); break; + case 5: write_sysreg_s(value, SYS_ICH_LR5_EL2); break; + case 6: write_sysreg_s(value, SYS_ICH_LR6_EL2); break; + case 7: write_sysreg_s(value, SYS_ICH_LR7_EL2); break; + case 8: write_sysreg_s(value, SYS_ICH_LR8_EL2); break; + case 9: write_sysreg_s(value, SYS_ICH_LR9_EL2); break; + case 10: write_sysreg_s(value, SYS_ICH_LR10_EL2); break; + case 11: write_sysreg_s(value, SYS_ICH_LR11_EL2); break; + case 12: write_sysreg_s(value, SYS_ICH_LR12_EL2); break; + case 13: write_sysreg_s(value, SYS_ICH_LR13_EL2); break; + case 14: write_sysreg_s(value, SYS_ICH_LR14_EL2); break; + case 15: write_sysreg_s(value, SYS_ICH_LR15_EL2); break; + default: break; + } +} +#else /* GICv2: list registers are GICH MMIO */ static u32 gic_read_lr(unsigned int n) { return ioread32(&gic->gich->lr[n]); @@ -99,9 +155,21 @@ void gic_write_lr(unsigned int n, u32 value) { iowrite32(&gic->gich->lr[n], value); } +#endif /* CONFIG_GIC_V3 */ void display_lr(unsigned int n) { +#ifdef CONFIG_GIC_V3 + u64 lr = gic_read_lr(n); + + printk("LR%u: virq=%lx state=%lx hw=%lx grp=%lx prio=%lx pirq=%lx\n", n, + lr & 0xfffff, + (lr >> 61) & 0x3, + (lr >> 60) & 0x1, + (lr >> 59) & 0x1, + (lr >> 48) & 0xff, + (lr >> 32) & 0xffff); +#else u32 lr = gic_read_lr(n); printk("LR state: \n"); @@ -110,6 +178,7 @@ void display_lr(unsigned int n) printk(" - pending: %x\n", lr & GICH_LR_PENDING_BIT); printk(" - active: %x\n", lr & GICH_LR_ACTIVE_BIT); printk(" - hw: %x\n", lr & GICH_LR_HW_BIT); +#endif } #endif /* CONFIG_AVZ */ @@ -222,6 +291,16 @@ int irq_set_affinity(unsigned int irq, int cpu) static void gic_enable_maint_irq(bool enable) { +#ifdef CONFIG_GIC_V3 + u64 hcr = read_sysreg_s(SYS_ICH_HCR_EL2); + + if (enable) + hcr |= GICH_HCR_UIE; + else + hcr &= ~GICH_HCR_UIE; + + write_sysreg_s(hcr, SYS_ICH_HCR_EL2); +#else u32 hcr; hcr = ioread32(&gic->gich->hcr); @@ -231,12 +310,68 @@ static void gic_enable_maint_irq(bool enable) hcr &= ~GICH_HCR_UIE; iowrite32(&gic->gich->hcr, hcr); +#endif } -static int gic_inject_irq(u16 irq_id) +/* Encode the SGI source CPU in bits[15:13] of the u16 irq_id passed to + * gic_set_pending() / gic_inject_irq(). INTIDs only need bits[9:0], so the + * upper bits are free. Decoded only for SGIs (irq_id < 16); ignored for + * PPIs/SPIs. This avoids touching every internal call site of + * gic_set_pending() while still letting the GICv2 vGIC LR carry the real + * source CPU instead of smp_processor_id() of the receiving CPU. */ +#define GIC_SGI_SRC_CPU_SHIFT 13 +#define GIC_SGI_SRC_CPU_MASK (0x7 << GIC_SGI_SRC_CPU_SHIFT) +#define GIC_SGI_PACK(intid, src_cpu) ((u16)((intid) | (((src_cpu) & 0x7) << GIC_SGI_SRC_CPU_SHIFT))) + +static int gic_inject_irq(u16 irq_id_packed) { unsigned int n; int first_free = -1; + u16 irq_id = irq_id_packed & 0x3ff; + u8 src_cpu = (irq_id_packed >> GIC_SGI_SRC_CPU_SHIFT) & 0x7; + +#ifdef CONFIG_GIC_V3 + unsigned long elsr = read_sysreg_s(SYS_ICH_ELRSR_EL2); + u64 lr64; + + for (n = 0; n < gic->gic_num_lr; n++) { + if (elsr & (1UL << n)) { + if (first_free == -1) + first_free = n; + continue; + } + + /* Check for duplicate vINTID (lower 13 bits of LR) */ + if ((gic_read_lr(n) & 0x1fff) == irq_id) + return -EEXIST; + } + + if (first_free == -1) + return -EBUSY; + + if (is_sgi(irq_id)) { + /* SGIs are software-backed: EL2 already wrote EOIR before injection */ + lr64 = GICH_LR_STATE_PENDING64 | GICH_LR_GRP1_BIT64 + | ((u64)GICH_LR_DEFAULT_PRIORITY << GICH_LR_PRIORITY_SHIFT64) + | (u64)irq_id; + } else { + /* PPIs and SPIs: hardware-backed (HW=1). EL2 does NOT write EOIR. + * The physical INTID stays Active, preventing level-triggered re-delivery + * storms. The vGIC hardware deactivates the physical INTID automatically + * when Linux writes ICV_EOIR1_EL1. pINTID = vINTID (1:1 pass-through). */ + lr64 = GICH_LR_STATE_PENDING64 | GICH_LR_GRP1_BIT64 | GICH_LR_HW_BIT64 + | ((u64)GICH_LR_DEFAULT_PRIORITY << GICH_LR_PRIORITY_SHIFT64) + | ((u64)irq_id << GICH_LR_PHYS_ID_SHIFT64) + | (u64)irq_id; + } + + u64 hcr = read_sysreg_s(SYS_ICH_HCR_EL2); + if (!(hcr & GICH_HCR_EN)) + write_sysreg_s(hcr | GICH_HCR_EN, SYS_ICH_HCR_EL2); + + gic_write_lr(first_free, lr64); + +#else /* CONFIG_GIC_V2 */ u32 lr; unsigned long elsr[2]; @@ -253,100 +388,93 @@ static int gic_inject_irq(u16 irq_id) /* Check that there is no overlapping */ lr = gic_read_lr(n); - if ((lr & GICH_LR_VIRT_ID_MASK) == irq_id) + if ((lr & GICH_LR_VIRT_ID_MASK) == irq_id) { + this_cpu(gic_eexist_count)++; + if (irq_id == 0) + this_cpu(gic_sgi0_eexist)++; return -EEXIST; + } } - if (first_free == -1) + if (first_free == -1) { + this_cpu(gic_busy_count)++; return -EBUSY; + } /* Inject group 0 interrupt (seen as IRQ by the guest) */ lr = irq_id; lr |= GICH_LR_PENDING_BIT; + /* Set priority to 0xa0 (Linux's default for SGIs/PPIs/SPIs). Without + * this the LR carries priority 0 — highest — which masks every other + * vIRQ at the virtual CPU interface until vEOI. In particular a + * pending vSGI 1 at vpriority 0 prevents vCNTV (PPI 27, vpriority + * 0xa0) from firing, freezing Linux's scheduler tick on the CPU. */ + lr |= ((0xa0 >> 3) & GICH_LR_PRIORITY_MASK) << GICH_LR_PRIORITY_SHIFT; if (is_sgi(irq_id)) { - lr |= (smp_processor_id() & 0x7) << GICH_LR_CPUID_SHIFT; + lr |= ((u32) src_cpu & 0x7) << GICH_LR_CPUID_SHIFT; } else { lr |= GICH_LR_HW_BIT; lr |= (u32) irq_id << GICH_LR_PHYS_ID_SHIFT; } gic_write_lr(first_free, lr); +#endif /* CONFIG_GIC_V3 */ + +#ifdef CONFIG_AVZ + this_cpu(gic_inj_total_count)++; + if (irq_id == 27) + this_cpu(gic_inj_27_count)++; +#endif return 0; } void gic_inject_pending(void) { + struct pending_irqs *pirqs = &this_cpu(pending_irqs); u16 irq_id; - while (pending_irqs.head != pending_irqs.tail) { - irq_id = pending_irqs.irqs[pending_irqs.head]; + while (pirqs->head != pirqs->tail) { + irq_id = pirqs->irqs[pirqs->head]; if (gic_inject_irq(irq_id) == -EBUSY) { - /* - * The list registers are full, trigger maintenance - * interrupt and leave. - */ gic_enable_maint_irq(true); return; } - /* - * Ensure that the entry was read before updating the head - * index. - */ dmb(ish); - pending_irqs.head = (pending_irqs.head + 1) % MAX_PENDING_IRQS; + pirqs->head = (pirqs->head + 1) % MAX_PENDING_IRQS; } - /* - * The software interrupt queue is empty - turn off the maintenance - * interrupt. - */ gic_enable_maint_irq(false); } void gic_set_pending(u16 irq_id) { + struct pending_irqs *pirqs = &this_cpu(pending_irqs); unsigned int new_tail; if (gic_inject_irq(irq_id) != -EBUSY) return; - spin_lock(&pending_irqs.lock); + spin_lock(&pirqs->lock); - new_tail = (pending_irqs.tail + 1) % MAX_PENDING_IRQS; + new_tail = (pirqs->tail + 1) % MAX_PENDING_IRQS; - /* Queue space available? */ - if (new_tail != pending_irqs.head) { - pending_irqs.irqs[pending_irqs.tail] = irq_id; - - /* - * Make the entry content is visible before updating the tail - * index. - */ + if (new_tail != pirqs->head) { + pirqs->irqs[pirqs->tail] = irq_id; dmb(ish); - - pending_irqs.tail = new_tail; + pirqs->tail = new_tail; } - /* - * The unlock has memory barrier semantic on ARM v7 and v8. Therefore - * the change to tail will be visible when sending SGI_INJECT later on. - */ - spin_unlock(&pending_irqs.lock); - - /* - * The list registers are full, trigger maintenance interrupt if we are - * on the target CPU. In the other case, send SGI_INJECT to the target - * CPU. - */ + spin_unlock(&pirqs->lock); gic_enable_maint_irq(true); } + void gic_clear_pending_irqs(void) { unsigned int n; @@ -356,15 +484,127 @@ void gic_clear_pending_irqs(void) gic_write_lr(n, 0); /* Clear active priority bits. */ +#ifdef CONFIG_GIC_V3 + write_sysreg_s(0UL, SYS_ICH_AP0R0_EL2); + write_sysreg_s(0UL, SYS_ICH_AP1R0_EL2); +#else iowrite32(&gic->gich->apr, 0); +#endif } +#endif /* CONFIG_AVZ */ + +#ifdef CONFIG_AVZ + +#ifdef CONFIG_GIC_V3 +/* GICv3 hypervisor control via ICH_* system registers. */ void gich_init(void) { u32 gicc_ctlr, gicc_pmr; u32 vtr, vmcr; int n; + /* Read physical CPU interface state via GICv3 system registers. */ + gicc_ctlr = (u32) read_sysreg(icc_ctlr_el1); + gicc_pmr = (u32) read_sysreg(icc_pmr_el1); + + /* Reset virtual machine control register. */ + write_sysreg_s(0UL, SYS_ICH_VMCR_EL2); + + /* Clear ICH_HCR_EL2 first; EN=1 will be set after ICH_VMCR_EL2 is + * programmed so Linux's ICC_* accesses redirect to ICV_* virtual + * registers (which are valid) rather than physical registers (which are + * UNDEFINED at NS EL1 on this platform). */ + write_sysreg_s(0UL, SYS_ICH_HCR_EL2); + + /* Determine number of implemented list registers. */ + vtr = (u32) read_sysreg_s(SYS_ICH_VTR_EL2); + gic->gic_num_lr = (vtr & 0x3f) + 1; + + /* ICH_VMCR_EL2 (GICv3): VPMR is 8-bit at [31:24], same encoding as ICC_PMR_EL1. */ + vmcr = (gicc_pmr & 0xff) << 24; + + /* VENG0=1 and VENG1=1: Linux's gic_has_group0() (PMR write-read test) + * always returns true on this platform, so Linux writes ICC_AP0R0_EL1. + * With EN=1 that becomes ICV_AP0R0_EL1; VENG0=1 makes that register + * defined. AVZ injects all IRQs as Group 1, so virtual Group 0 is + * never actually delivered. */ + vmcr |= GICH_VMCR_ENABLE_GRP0_MASK | GICH_VMCR_ENABLE_GRP1_MASK; + /* VEOIM=0: Linux's ICV_EOIR1_EL1 does priority drop + virtual deactivate. + * For HW=1 LRs this also triggers the physical deactivate at the + * redistributor, which is exactly what we want. We do NOT mirror the + * physical EOImode here (EL2 set it to 1 for itself, but Linux runs in + * its default mode). */ + + write_sysreg_s((u64) vmcr, SYS_ICH_VMCR_EL2); + + /* Enable virtual CPU interface now so Linux's ICC_* accesses during + * gic_cpu_sys_reg_init() are redirected to ICV_* virtual registers. */ + write_sysreg_s(GICH_HCR_EN, SYS_ICH_HCR_EL2); + + { + struct pending_irqs *pirqs = &this_cpu(pending_irqs); + spin_lock_init(&pirqs->lock); + pirqs->head = 0; + pirqs->tail = 0; + } + + gic_clear_pending_irqs(); + + for (n = 0; n < 16; n++) { + if (ioread8(((u8 *) &gic->gicd->cpendsgirn) + n)) { + iowrite8(((u8 *) &gic->gicd->cpendsgirn) + n, 0xff); + gic_set_pending(n); + } + } +} + +/* Per-CPU virtual interface init for secondary CPUs (CPU0 calls gich_init()). + * Sets ICH_VMCR_EL2 and enables ICH_HCR_EL2.EN so Linux's ICC_* accesses + * redirect to virtual ICV_* registers and virtual IRQs can be delivered. */ +void gich_secondary_init(void) +{ + u32 gicc_ctlr = (u32) read_sysreg(icc_ctlr_el1); + u64 vmcr; + struct pending_irqs *pirqs = &this_cpu(pending_irqs); + + spin_lock_init(&pirqs->lock); + pirqs->head = 0; + pirqs->tail = 0; + + vmcr = (u64)0xf0 << 24; + vmcr |= GICH_VMCR_ENABLE_GRP0_MASK | GICH_VMCR_ENABLE_GRP1_MASK; + /* VEOIM=0: see comment in gich_init(). */ + (void)gicc_ctlr; + + write_sysreg_s(vmcr, SYS_ICH_VMCR_EL2); + isb(); + write_sysreg_s((u64)GICH_HCR_EN, SYS_ICH_HCR_EL2); + isb(); +} + +/* Explicitly clear the GIC redistributor's Pending bit for a PPI (id 16-31) + * on the current CPU, BEFORE writing EOIR. Without this, the GIC may hold + * Active+Pending state for a level-triggered PPI (e.g. CNTP) and EOIR would + * transition Active+Pending → Pending instead of → Inactive, causing a storm. */ +void gic_clear_ppi_pending(u16 id) +{ + int cpu_id = smp_processor_id(); + u8 *gicr_sgi = (u8 *)gic->gicc + cpu_id * 0x20000 + 0x10000; + + iowrite32(gicr_sgi + 0x280, 1u << id); /* GICR_ICPENDR0 */ + dsb(sy); +} + +#else /* CONFIG_GIC_V2: hypervisor control via GICH MMIO */ + +void gich_init(void) +{ + struct pending_irqs *pirqs = &this_cpu(pending_irqs); + u32 gicc_ctlr, gicc_pmr; + u32 vtr, vmcr; + int n; + gicc_ctlr = ioread32(&gic->gicc->ctlr); gicc_pmr = ioread32(&gic->gicc->pmr); @@ -399,8 +639,9 @@ void gich_init(void) iowrite32(&gic->gich->vmcr, vmcr); - pending_irqs.head = 0; - pending_irqs.tail = 0; + spin_lock_init(&pirqs->lock); + pirqs->head = 0; + pirqs->tail = 0; /* * Clear pending virtual IRQs in case anything is left from previous @@ -424,48 +665,157 @@ void gich_init(void) } } } + +/* Per-CPU virtual interface init for secondary CPUs. + * + * GICH MMIO at &gic->gich and the SGI/PPI half of GICD_ISENABLER0 are banked + * per-CPU on GICv2: each CPU sees its own VMCR/HCR/LRs and its own SGI/PPI + * enable bits through the same address. When a secondary CPU comes up via + * PSCI_CPU_ON it must: + * - enable SGIs and PPIs at the banked GICD_ISENABLER0 (so the maintenance + * PPI 25 and any AVZ-internal PPIs reach this CPU), + * - set VMCR (Group 0 enable, priority mask mirrored from physical GICC_PMR), + * - enable the vGIC (HCR.EN=1), + * - initialise its per-CPU pending_irqs ring. + * Without this, vIRQ delivery is off on the secondary CPU, Linux's scheduler + * tick (PPI 27) silently disappears, and once the LR pool fills there is no + * MAINT IRQ to drive the drain — both lead to RCU stalls. */ +void gich_secondary_init(void) +{ + struct pending_irqs *pirqs = &this_cpu(pending_irqs); + u32 gicc_ctlr = ioread32(&gic->gicc->ctlr); + u32 gicc_pmr = ioread32(&gic->gicc->pmr); + u32 vmcr; + + /* Enable banked SGIs/PPIs on this CPU (mirrors gic_init's CPU0 setup). */ + iowrite32(&gic->gicd->isenabler, 0xffffffff); + + spin_lock_init(&pirqs->lock); + pirqs->head = 0; + pirqs->tail = 0; + + vmcr = (gicc_pmr >> GICV_PMR_PRIORITY_SHIFT) << GICH_VMCR_PRIMASK_SHIFT; + if (gicc_ctlr & GICC_CTLR_GRPEN1) + vmcr |= GICH_VMCR_ENABLE_GRP0_MASK; + if (gicc_ctlr & GICC_CTLR_EOImode) + vmcr |= GICH_VMCR_EOI_MODE_MASK; + + iowrite32(&gic->gich->vmcr, vmcr); + iowrite32(&gic->gich->hcr, GICH_HCR_EN); +} + +#endif /* CONFIG_GIC_V3 */ #endif /* CONFIG_AVZ */ void gicc_init(void) { - u32 bypass = 0; - int i; - +#ifdef CONFIG_GIC_V3 /* - * Deal with the banked PPI and SGI interrupts - disable all - * PPI interrupts, ensure all SGI interrupts are enabled. - */ - iowrite32(&gic->gicd->icenabler, GICD_INT_EN_CLR_PPI); - iowrite32(&gic->gicd->isenabler, GICD_INT_EN_SET_SGI); + * GICv3: in ARE=1 mode, GICD_ISENABLER0/ICENABLER0 for SGIs/PPIs are + * RAZ/WI. Per-CPU SGI/PPI configuration lives in each CPU's + * redistributor SGI frame (Frame 1), at GICR_base + cpu*0x20000 + 0x10000. + * + * gic->gicc maps the GICR base (reg[1] in the AVZ DTB). + */ + { + int i; + int cpu_id = smp_processor_id(); + u8 *gicr_rd = (u8 *)gic->gicc + cpu_id * 0x20000; + u8 *gicr_sgi = gicr_rd + 0x10000; + u32 waker; + + /* GICR_WAKER (RD_base + 0x14): clear ProcessorSleep so this + * redistributor forwards SGIs/PPIs to the PE. */ + waker = ioread32(gicr_rd + 0x14); + if (waker & (1u << 1)) { + iowrite32(gicr_rd + 0x14, waker & ~(1u << 1)); + /* Poll until ChildrenAsleep (bit 2) clears */ + do { + waker = ioread32(gicr_rd + 0x14); + } while (waker & (1u << 2)); + } - /* Priority for all SGI and PPI interrupts is the highest (value 0) */ - for (i = 0; i < 32; i += 4) - iowrite32(&gic->gicd->ipriorityr[i / 4], 0); + /* GICR_IGROUPR0 (0x80): Group 1 NS for all SGIs/PPIs */ + iowrite32(gicr_sgi + 0x80, 0xffffffff); + /* GICR_ICENABLER0 (0x180): disable all PPIs */ + iowrite32(gicr_sgi + 0x180, GICD_INT_EN_CLR_PPI); + /* GICR_ICPENDR0 (0x280): clear any stale Pending state on PPIs + * left over from the bootloader / OPTEE / TF-A so a phantom + * fire (e.g. CNTV PPI 27) cannot reach Linux before its handler + * is registered, which would leave the LR Active forever. */ + iowrite32(gicr_sgi + 0x280, GICD_INT_EN_CLR_PPI); + /* GICR_ISENABLER0 (0x100): enable SGIs + maintenance IRQ (PPI 25) + CNTHP (PPI 26) */ + iowrite32(gicr_sgi + 0x100, GICD_INT_EN_SET_SGI + | (1u << IRQ_ARCH_ARM_MAINT) + | (1u << 26u)); + /* GICR_IPRIORITYR[0..7] (0x400): priority 0 for all SGIs/PPIs */ + for (i = 0; i < 32; i += 4) + iowrite32(gicr_sgi + 0x400 + i, 0); + } - /* Allow all priorities */ - iowrite32(&gic->gicc->pmr, GICC_INT_PRI_THRESHOLD); + /* GICv3: CPU interface via system registers (ICC_*). */ + write_sysreg(GICC_INT_PRI_THRESHOLD, icc_pmr_el1); + + /* EOImode=1 on the physical CPU interface (ICC_CTLR_EL1 from EL2 hits + * the physical interface): split priority drop (EOIR1) from deactivate + * (DIR). Required so EL2 can drop priority after placing a forwarded + * IRQ in an LR (HW=1) without prematurely deactivating it — the HW=1 + * LR triggers the physical deactivate when Linux later writes + * ICV_EOIR1_EL1. AVZ-only: standalone SO3 runs at EL1 with EOImode=0 + * (a single EOIR drops priority and deactivates), otherwise every IRQ + * would stay Active and block all further interrupts. */ +#ifdef CONFIG_AVZ + write_sysreg(read_sysreg(icc_ctlr_el1) | (1u << 1), icc_ctlr_el1); + isb(); +#endif - /* - * Preserve bypass disable bits to be written back later - */ - bypass = ioread32(&gic->gicc->ctlr); - bypass &= GICC_DIS_BYPASS_MASK; + write_sysreg_s(1UL, SYS_ICC_IGRPEN1_EL1); +#else + { + u32 bypass; + + /* GICv2: CPU interface via GICC MMIO. */ + iowrite32(&gic->gicc->pmr, GICC_INT_PRI_THRESHOLD); - iowrite32(&gic->gicc->ctlr, bypass | GICC_ENABLE | GIC_CPU_EOI); + /* + * Preserve bypass disable bits to be written back later. + */ + bypass = ioread32(&gic->gicc->ctlr); + bypass &= GICC_DIS_BYPASS_MASK; + + /* EOImode=1 on the physical CPU interface so EL2 can drop priority + * (EOIR) without deactivating, leaving HW=1 LR injections to chain + * the physical deactivate when the guest writes its own EOIR. + * AVZ-only: standalone SO3 runs at EL1 and uses EOImode=0 so a + * single EOIR write both drops priority and deactivates. Setting + * EOImode=1 here would leave every IRQ Active forever (the EL1 + * handler never writes DIR), blocking all subsequent interrupts. */ + iowrite32(&gic->gicc->ctlr, + bypass | GICC_ENABLE | GIC_CPU_EOI +#ifdef CONFIG_AVZ + | GICC_CTLR_EOImode +#endif + ); + } +#endif /* CONFIG_GIC_V3 */ #ifdef CONFIG_AVZ gich_init(); #endif } -static void gic_eoi_irq(u32 irq_id, bool deactivate) +static void gic_eoi_irq(u32 iar_value, bool deactivate) { /* - * The GIC doesn't seem to care about the CPUID value written to EOIR, - * which is rather convenient... - */ - iowrite32(&gic->gicc->eoir, irq_id); + * For GICv2 SGIs, EOIR/DIR writes MUST include the source CPU bits + * [12:10] from the IAR — otherwise the hardware leaves the SGI + * Active for the original source CPU, the running priority stays + * elevated, and no further IRQ at the same priority can fire on + * this CPU. Caller passes the full IAR (or just INTID for non-SGI + * paths where the CPUID bits are zero anyway). + */ + iowrite32(&gic->gicc->eoir, iar_value); if (deactivate) - iowrite32(&gic->gicc->dir, irq_id); + iowrite32(&gic->gicc->dir, iar_value); } static void gic_enable(unsigned int irq) @@ -502,6 +852,20 @@ static void gic_handle(void *data) int irq_nr; int irqstat; +#ifdef CONFIG_AVZ + this_cpu(gic_iar_count)++; + /* Defend MAINT (PPI 25) and CNTHP (PPI 26) on this CPU. + * Linux's gic_cpu_init writes GICD_ICENABLER0 = 0xffff0000 on every + * CPU during gic init, blanket-disabling all PPIs on that CPU's + * banked GICD register. Without this re-assert, Linux's secondary + * bring-up clobbers our hypervisor PPIs and the MAINT-driven drain + * of pending vIRQs (queued on -EEXIST/-EBUSY) never fires — + * causing RCU stalls when back-to-back SGIs arrive. Idempotent. + * GICD_ISENABLER0 is banked per-CPU on GICv2 for INTIDs 0-31. */ + iowrite32(&gic->gicd->isenabler, + (1u << IRQ_ARCH_ARM_MAINT) | (1u << 26)); +#endif + do { irqstat = ioread32(&gic->gicc->iar); irq_nr = irqstat & GICC_IAR_INT_ID_MASK; @@ -509,28 +873,63 @@ static void gic_handle(void *data) if (irq_nr > 1021) break; - if (irq_nr < 16) { #ifdef CONFIG_AVZ - if ((smp_processor_id() == ME_CPU) && current_domain->avz_shared->evtchn_upcall_pending) - gic_set_pending(irq_nr); + /* MAINT (id 25): drain overflow queue, fully deactivate. */ + if (irq_nr == IRQ_ARCH_ARM_MAINT) { + gic_inject_pending(); + gic_eoi_irq(irqstat, true); + continue; + } + + /* CNTHP (id 26): AVZ's hypervisor timer. Hardcode dispatch to + * avz_el2_timer_tick instead of going through irq_desc->action. + * If CNTHP fires before periodic_timer_init binds timer_isr (a + * spurious IRQ inherited from u-boot/early init), the action-NULL + * fallback below would inject the IRQ to the guest and never + * re-arm — turning AVZ's periodic timer into a one-shot and + * killing the EL2 scheduler tick. Mirror the GICv3 path. */ + if (irq_nr == 26) { + avz_el2_timer_tick(); + gic_eoi_irq(irqstat, true); + continue; + } + + /* SGIs (0-15): software-backed virtual IPIs. EL2 owns the physical + * deactivate; the LR carries a vSGI without HW=1. Pass the full + * IAR (including source CPU bits[12:10]) to gic_eoi_irq so the + * GIC properly deactivates the SGI from its actual source. + * Also forward the source CPU into the LR so Linux's vIAR sees + * the right sender for IPI accounting. */ + if (irq_nr < 16) { + u8 src_cpu = (irqstat >> 10) & 0x7; + if (irq_nr == 0) + this_cpu(gic_sgi0_recv)++; + gic_eoi_irq(irqstat, true); + gic_set_pending(GIC_SGI_PACK(irq_nr, src_cpu)); + continue; + } + /* PPIs and SPIs: dispatch by registered AVZ action; everything + * else (guest virt timer PPI 27, guest SPIs) is forwarded via + * HW=1 LR injection. In the HW=1 case EL2 does priority drop + * only — the physical deactivate is chained when the guest + * writes its own EOIR. */ + if (irq_to_desc(irq_nr)->action != NULL) { + irq_to_desc(irq_nr)->irq_ops->handle_high(irq_nr); + gic_eoi_irq(irqstat, true); + } else { + gic_set_pending(irq_nr); + gic_eoi_irq(irqstat, false); + } #else - /* Forward the IRQ processing to another logical IRQ chip */ + if (irq_nr < 16) { irq_to_desc(irq_nr)->irq_ops->handle_high(irq_nr); - -#endif gic_eoi_irq(irq_nr, false); } else { -#ifdef CONFIG_AVZ - if (irq_nr == IRQ_ARCH_ARM_MAINT) { - gic_inject_pending(); - gic_eoi_irq(irq_nr, true); - continue; - } -#endif irq_to_desc(irq_nr)->irq_ops->handle_high(irq_nr); gic_eoi_irq(irq_nr, false); } +#endif } while (true); } @@ -542,14 +941,19 @@ void smp_cross_call(long cpu_mask, unsigned int irq) flags = spin_lock_irqsave(&per_cpu(intc_lock, cpu)); - /* - * Ensure that stores to Normal memory are visible to the - * other CPUs before they observe us issuing the IPI. - */ smp_mb(); - /* This always happens on GIC0 */ +#ifdef CONFIG_GIC_V3 + { + /* GICv3: GICD_SGIR is RAZ/WI when ARE=1; use ICC_SGI1R_EL1 instead. + * Format: [3:0]=INTID, [23:16]=Aff1 target list (one bit per CPU in cluster). */ + u64 sgi1r = ((u64)(cpu_mask & 0xffff) << 16) | (irq & 0xf); + write_sysreg_s(sgi1r, SYS_ICC_SGI1R_EL1); + isb(); + } +#else iowrite32(&gic->gicd->sgir, (cpu_mask << 16) | irq); +#endif spin_unlock_irqrestore(&per_cpu(intc_lock, cpu), flags); } @@ -695,18 +1099,23 @@ static int gic_init(dev_t *dev, int fdt_offset) gic->gich = (struct gich_regs *) io_map(fdt64_to_cpu(((const fdt64_t *) prop->data)[4]), fdt64_to_cpu(((const fdt64_t *) prop->data)[5])); - spin_lock_init(&pending_irqs.lock); - - /* Disable PPIs, except for the maintenance interrupt. */ - iowrite32(&gic->gicd->isenabler, 0xffff0000 & ~(1 << IRQ_ARCH_ARM_MAINT)); - - /* Ensure all IPIs and the maintenance PPI are enabled */ - iowrite32(&gic->gicd->isenabler, 0x0000ffff & ~(1 << IRQ_ARCH_ARM_MAINT)); + /* Enable SGIs (0-15) and PPIs (16-31), including the maintenance + * interrupt at PPI 25. GICH_HCR.UIE/NPIE controls whether MAINT + * actually fires; the GICD enable just allows the physical PPI to + * reach the CPU when vGIC hardware asserts it. Without this, when + * all LRs fill (4 in-flight vIRQs) gic_inject_irq returns -EBUSY + * and the queued IRQs in pending_irqs stay there forever — the + * drain via MAINT can never fire. */ + iowrite32(&gic->gicd->isenabler, 0xffffffff); #endif gic_hw_reset(); + /* Initialize the CPU0 per-CPU interface and virtual CPU interface. + * Secondary CPUs do this in secondary_start_kernel() via gicc_init(). */ + gicc_init(); + irq_ops.enable = gic_enable; irq_ops.disable = gic_disable; irq_ops.mask = gic_mask; diff --git a/so3/devices/irq/vgic.c b/so3/devices/irq/vgic.c index bb99fe690a..2752a2f694 100644 --- a/so3/devices/irq/vgic.c +++ b/so3/devices/irq/vgic.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2024-2025 Daniel Rossier + * Copyright (C) 2024-2026 Daniel Rossier * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as @@ -27,33 +27,60 @@ DEFINE_SPINLOCK(dist_lock); -static enum mmio_result gicv2_handle_dist_access(struct mmio_access *mmio) -{ - unsigned long val = mmio->value; - struct sgi; +#ifdef CONFIG_GIC_V3 +/* + * GICv3 distributor MMIO handler. + * + * The physical GICD is not mapped in the guest Stage-2 tables, so every + * Linux GICD access causes a Stage-2 data abort that lands here. For a + * single NS Linux guest with HCR_EL2.IMO=1 the simplest correct policy is + * to pass all reads and writes directly to the physical GICD. Physical SPIs + * enabled by Linux via GICD_ISENABLER will fire, be intercepted at EL2, and + * forwarded to Linux as virtual IRQs via ICH_LR*. + * + * GICD_SGIR is the GICv2-compatibility SGI register. GICv3 Linux uses + * ICC_SGI1R_EL1 instead, but handle it anyway for robustness. + */ +static enum mmio_result gicv3_handle_dist_access(struct mmio_access *mmio) +{ switch (mmio->address) { case GICD_SGIR: - if (!mmio->is_write) - return MMIO_HANDLED; - - smp_cross_call((val >> 16) & 0xff, val & 0xf); + if (mmio->is_write) + smp_cross_call((mmio->value >> 16) & 0xff, mmio->value & 0xf); + return MMIO_HANDLED; + default: + mmio_perform_access(gic->gicd, mmio); return MMIO_HANDLED; + } +} - case GICD_CTLR: - case GICD_TYPER: - case GICD_IIDR: - case REG_RANGE(GICDv2_PIDR0, 4, 4): - case REG_RANGE(GICDv2_PIDR4, 4, 4): - case REG_RANGE(GICDv2_CIDR0, 4, 4): - /* Allow read access, ignore write */ - if (!mmio->is_write) - mmio_perform_access(gic->gicd, mmio); +#else /* CONFIG_GIC_V2 */ + +/* + * Single-guest GICv2 distributor handler — mirrors the GICv3 trap+forward + * model. The physical GICD is unmapped from the agency Stage-2 tables, so + * every Linux GICD access faults here. For a single non-secure Linux + * guest with HCR_EL2.IMO=1, the simplest correct policy is to forward all + * reads and writes directly to the physical GICD; SPIs Linux enables via + * GICD_ISENABLER will fire, be intercepted at EL2, and forwarded to Linux + * as virtual IRQs via the GICH list registers. Special cases: + * - GICD_SGIR is translated into smp_cross_call so SGIs are routed via + * AVZ's targeted-SGI helper (and visible to the maintenance/dispatch + * paths) rather than going straight to the physical distributor. + */ +static enum mmio_result gicv2_handle_dist_access(struct mmio_access *mmio) +{ + switch (mmio->address) { + case GICD_SGIR: + if (mmio->is_write) + smp_cross_call((mmio->value >> 16) & 0xff, + mmio->value & 0xf); + return MMIO_HANDLED; - /* fall through */ default: - /* Ignore access. */ + mmio_perform_access(gic->gicd, mmio); return MMIO_HANDLED; } } @@ -123,8 +150,13 @@ static enum mmio_result gicv2_handle_irq_target(struct mmio_access *mmio, unsign return MMIO_HANDLED; } +#endif /* CONFIG_GIC_V3 */ + enum mmio_result gic_handle_dist_access(struct mmio_access *mmio) { +#ifdef CONFIG_GIC_V3 + return gicv3_handle_dist_access(mmio); +#else unsigned long reg = mmio->address; enum mmio_result ret; @@ -143,8 +175,6 @@ enum mmio_result gic_handle_dist_access(struct mmio_access *mmio) case REG_RANGE(GICD_ISPENDR, 32, 4): case REG_RANGE(GICD_ICACTIVER, 32, 4): case REG_RANGE(GICD_ISACTIVER, 32, 4): - - /* Currently, the guest has no way to handle a physical IRQ*/ ret = gicv2_handle_dist_access(mmio); break; @@ -153,4 +183,5 @@ enum mmio_result gic_handle_dist_access(struct mmio_access *mmio) } return ret; -} \ No newline at end of file +#endif /* CONFIG_GIC_V3 */ +} diff --git a/so3/devices/mem.c b/so3/devices/mem.c index cc03dd0e0b..716c4214e5 100644 --- a/so3/devices/mem.c +++ b/so3/devices/mem.c @@ -72,7 +72,7 @@ static int mem_mmap(int fd, addr_t virt_addr, uint32_t page_count, off_t offset) if (remaining_size > 0) create_mapping(pcb->pgtable, next_virt_addr, next_phys_addr, remaining_size, true); - return 0; + return virt_addr; } static struct file_operations mem_fops = { diff --git a/so3/devices/serial/Kconfig b/so3/devices/serial/Kconfig index 4ba64b6d6f..9143984665 100644 --- a/so3/devices/serial/Kconfig +++ b/so3/devices/serial/Kconfig @@ -10,7 +10,11 @@ config PL011_UART config BCM283x_MU_UART bool "BCM283x mini-UART" depends on RPI4 || RPI4_64 - + +config IMX_UART + bool "Freescale i.MX UART (fsl,imx6q-uart)" + depends on VERDIN_IMX8MP + config UART_LL_PADDR hex "Low-level UART base physical address" diff --git a/so3/devices/serial/Makefile b/so3/devices/serial/Makefile index 7b27f62dad..50d805cf54 100644 --- a/so3/devices/serial/Makefile +++ b/so3/devices/serial/Makefile @@ -2,6 +2,7 @@ obj-$(CONFIG_PL011_UART) += pl011.o obj-$(CONFIG_NS16550) += ns16550.o obj-$(CONFIG_BCM283x_MU_UART) += bcm283x_mu.o +obj-$(CONFIG_IMX_UART) += imx_uart.o obj-$(CONFIG_SOO_SERIAL) += soo_serial.o diff --git a/so3/devices/serial/imx_uart.c b/so3/devices/serial/imx_uart.c new file mode 100644 index 0000000000..b5cc9db5ee --- /dev/null +++ b/so3/devices/serial/imx_uart.c @@ -0,0 +1,181 @@ +/* + * Copyright (C) 2026 EDGEMTech SA + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +/* + * Minimal driver for the Freescale i.MX UART (fsl,imx6q-uart compatible). + * Targets UART3 on the Toradex Verdin iMX8MP @ 0x30880000. + * + * Only TX is implemented — sufficient for AVZ's early console output. + * UART initialisation is performed by ATF/U-Boot before AVZ starts, + * so this driver assumes the UART is already configured and enabled. + */ + +#include +#include +#include +#include + +#include +#include +#include +#include + +#include + +#include + +#include + +#define SERIAL_BUFFER_SIZE 80 + +volatile void *__uart_vaddr = (void *) CONFIG_UART_LL_PADDR; + +static volatile char serial_buffer[SERIAL_BUFFER_SIZE]; +static volatile uint32_t prod = 0, cons = 0; + +extern mutex_t read_lock; + +typedef struct { + addr_t base; + irq_def_t irq_def; +} imx_uart_t; + +static imx_uart_t imx_uart = { + .base = CONFIG_UART_LL_PADDR, +}; + +static int imx_uart_put_byte(char c) +{ + /* Wait until TX FIFO is empty before writing */ + while (!(ioread32(imx_uart.base + IMX_UART_USR2) & IMX_UART_USR2_TXFE)) + ; + + iowrite32(imx_uart.base + IMX_UART_UTXD, (u32) c); + + return 1; +} + +static char imx_uart_get_byte(bool polling) +{ + char tmp; + + if (polling) { + /* Poll until a byte arrives in the RX register */ + while (!(ioread32(imx_uart.base + IMX_UART_USR2) & (1 << 0))) + ; + + return (char)(ioread32(imx_uart.base + IMX_UART_URXD) & 0xFF); + } else { + while (prod == cons) { + schedule(); + + smp_mb(); + wfi(); + } + + tmp = serial_buffer[cons]; + cons = (cons + 1) % SERIAL_BUFFER_SIZE; + + return tmp; + } + + return 0; +} + +static irq_return_t imx_uart_int(int irq, void *dummy) +{ + u32 val; + + val = ioread32(imx_uart.base + IMX_UART_URXD); + if (!(val & (1 << 15))) /* CHARRDY bit */ + return IRQ_COMPLETED; + + serial_buffer[prod] = (char)(val & 0xFF); + + if (serial_buffer[prod] == 3) { + imx_uart_put_byte('^'); + imx_uart_put_byte('C'); + imx_uart_put_byte('\n'); + prod--; + +#ifdef CONFIG_IPC_SIGNAL + if (current()->pcb != NULL) + sys_do_kill(current()->pcb->pid, SIGINT); +#endif + } + + prod = (prod + 1) % SERIAL_BUFFER_SIZE; + + return IRQ_COMPLETED; +} + +static void imx_uart_enable_irq(void) +{ + irq_ops.enable(imx_uart.irq_def.irqnr); +} + +static void imx_uart_disable_irq(void) +{ + irq_ops.disable(imx_uart.irq_def.irqnr); +} + +static int imx_uart_init(dev_t *dev, int fdt_offset) +{ + const struct fdt_property *prop; + int prop_len; + addr_t new_base_vaddr; + + serial_ops.put_byte = imx_uart_put_byte; + serial_ops.get_byte = imx_uart_get_byte; + + serial_ops.enable_irq = imx_uart_enable_irq; + serial_ops.disable_irq = imx_uart_disable_irq; + + prop = fdt_get_property(__fdt_addr, fdt_offset, "reg", &prop_len); + BUG_ON(!prop); + + BUG_ON(prop_len != 2 * sizeof(unsigned long)); + + new_base_vaddr = + io_map(fdt64_to_cpu(((const fdt64_t *) prop->data)[0]), PAGE_SIZE); + BUG_ON(!new_base_vaddr); + + imx_uart.base = new_base_vaddr; + + fdt_interrupt_node(fdt_offset, &imx_uart.irq_def); + + irq_bind(imx_uart.irq_def.irqnr, imx_uart_int, NULL, NULL); + + serial_ops.enable_irq(); + + return 0; +} + +void __ll_put_byte(char c) +{ + if (c == '\n') + imx_uart_put_byte('\r'); + imx_uart_put_byte(c); +} + +void printch(char c) +{ + __ll_put_byte(c); +} + +REGISTER_DRIVER_POSTCORE("serial,imx", imx_uart_init); diff --git a/so3/devices/serial/pl011.c b/so3/devices/serial/pl011.c index 601be88f20..a9ab3b4399 100644 --- a/so3/devices/serial/pl011.c +++ b/so3/devices/serial/pl011.c @@ -183,10 +183,20 @@ static int pl011_init(dev_t *dev, int fdt_offset) fdt_interrupt_node(fdt_offset, &pl011.irq_def); - /* Bind ISR into interrupt controller */ +#ifndef CONFIG_AVZ + /* When AVZ runs as hypervisor, the PL011 RX interrupt belongs to + * the agency guest — its console driver attaches its own handler. + * If we bind one here, gic_handle's irq_desc->action != NULL + * branch fires AVZ's pl011_int and EOIs the IRQ before it ever + * reaches the guest, freezing input at the guest login prompt. + * AVZ uses pl011_put_byte for output only and does not need RX. */ irq_bind(pl011.irq_def.irqnr, pl011_int, NULL, NULL); +#endif - /* Enable interrupt (IRQ controller) */ + /* Enable interrupt (IRQ controller) — done unconditionally so the + * hardware-level state of IMSC and the GIC SPI enable is identical + * in CONFIG_AVZ and non-AVZ builds; only the AVZ-side action is + * skipped above. */ iowrite16(pl011.base + UART011_IMSC, UART011_RXIM | UART011_RTIM); serial_ops.enable_irq(); diff --git a/so3/devices/timer/arm_timer.c b/so3/devices/timer/arm_timer.c index 4486ad9d26..bd87e94e67 100644 --- a/so3/devices/timer/arm_timer.c +++ b/so3/devices/timer/arm_timer.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2014-2022 Daniel Rossier + * Copyright (C) 2014-2026 Daniel Rossier * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as @@ -103,6 +103,36 @@ void periodic_timer_start(void) next_event(arm_timer->reload); } +#ifdef CONFIG_AVZ + +/* Called from the EL2 IRQ handler when CNTHP (PPI 26) fires while Linux + * runs at EL1. Used by both GIC versions: the dispatch in gic.c + * special-cases INTID 26 and invokes this directly, bypassing the + * irq_desc action table. This guarantees CNTHP gets re-armed even if a + * spurious early CNTHP IRQ arrives before periodic_timer_init binds the + * action — which would otherwise route the IRQ to the guest and leave + * the timer one-shot. Safe to call before periodic_timer.dev is set: + * dev_get_drvdata returns NULL and we skip. + */ +void avz_el2_timer_tick(void) +{ + arm_timer_t *arm_timer; + + if (!periodic_timer.dev) + return; + + arm_timer = (arm_timer_t *) dev_get_drvdata(periodic_timer.dev); + if (!arm_timer) + return; + + /* Re-arm the timer for the next period. */ + next_event(arm_timer->reload); + + /* Agency tick (non-ME path). */ + timer_interrupt(false); +} +#endif /* CONFIG_AVZ */ + /* * Read the clocksource timer value taking into account a time reference. * @@ -125,7 +155,6 @@ void secondary_timer_init(void) #ifdef CONFIG_AVZ arch_timer_reg_write_el2(ARCH_TIMER_REG_CTRL, 0); #else - ctrl = arch_timer_reg_read_cp15(ARCH_TIMER_VIRT_ACCESS, ARCH_TIMER_REG_CTRL); ctrl &= ~ARCH_TIMER_CTRL_ENABLE; arch_timer_reg_write_cp15(ARCH_TIMER_VIRT_ACCESS, ARCH_TIMER_REG_CTRL, ctrl); @@ -170,7 +199,6 @@ static int periodic_timer_init(dev_t *dev, int fdt_offset) #ifdef CONFIG_AVZ arch_timer_reg_write_el2(ARCH_TIMER_REG_CTRL, 0); #else - ctrl = arch_timer_reg_read_cp15(ARCH_TIMER_VIRT_ACCESS, ARCH_TIMER_REG_CTRL); ctrl &= ~ARCH_TIMER_CTRL_ENABLE; arch_timer_reg_write_cp15(ARCH_TIMER_VIRT_ACCESS, ARCH_TIMER_REG_CTRL, ctrl); diff --git a/so3/dts/Makefile b/so3/dts/Makefile index 370c085860..626cf5a705 100644 --- a/so3/dts/Makefile +++ b/so3/dts/Makefile @@ -1,15 +1,13 @@ dtb-$(CONFIG_RPI4) += rpi4.dtb dtb-$(CONFIG_RPI4_64) += rpi4_64.dtb rpi4_64_avz.dtb -dtb-$(CONFIG_VIRT64) += virt64.dtb virt64_avz.dtb virt64_lvperf.dtb +dtb-$(CONFIG_VIRT64) += virt64.dtb virt64_avz.dtb virt64_capsule.dtb virt64_lvperf.dtb dtb-$(CONFIG_VIRT32) += virt32.dtb virt32_lvperf.dtb +dtb-$(CONFIG_VERDIN_IMX8MP) += verdin-imx8mp_avz.dtb ifeq ($(CONFIG_SOO),y) - ifeq ($(CONFIG_AVZ),) -dtb-$(CONFIG_VIRT64) += virt64_capsule.dtb rpi4_64_capsule.dtb - ifeq ($(CONFIG_SOO_REFSO3),y) ifeq ($(CONFIG_RAMDEV),y) dtb-y += refso3_ramfs.dtb diff --git a/so3/dts/rpi4_64_avz.dts b/so3/dts/rpi4_64_avz.dts index 3c6ce229d9..ede720f3f5 100644 --- a/so3/dts/rpi4_64_avz.dts +++ b/so3/dts/rpi4_64_avz.dts @@ -47,9 +47,10 @@ #interrupt-cells = <3>; /* GIC dist, cpu, hyp */ - reg = <0x0 0xff841000 0x0 0x1000>, - <0x0 0xff842000 0x0 0x2000>, - <0x0 0xff844000 0x0 0x2000>; + reg = <0x0 0x08000000 0x0 0x10000 + 0x0 0x08010000 0x0 0x10000 + 0x0 0x08030000 0x0 0x10000>; + status = "ok"; }; diff --git a/so3/dts/verdin-imx8mp_avz.dts b/so3/dts/verdin-imx8mp_avz.dts new file mode 100644 index 0000000000..5378e403b4 --- /dev/null +++ b/so3/dts/verdin-imx8mp_avz.dts @@ -0,0 +1,90 @@ +/* + * Copyright (C) 2026 EDGEMTech SA + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +/dts-v1/; + +/ { + model = "AVZ Toradex Verdin iMX8MP"; + compatible = "arm,verdin-imx8mp"; + + #address-cells = <2>; + #size-cells = <2>; + + cpus { + device_type = "cpu"; + compatible = "arm,cortex-a53"; + }; + + /* + * Full DRAM managed by AVZ: 0x40000000–0xBDFFFFFF (minus OP-TEE at top). + * AVZ itself runs at 0x40200000 (placed by U-Boot: DRAM_base + text_offset). + * Linux guest occupies 0x41000000 upward via the memslot mechanism. + */ + memory@40000000 { + device_type = "memory"; + reg = <0x0 0x40000000 0x0 0x7e000000>; + }; + + mem { + compatible = "mem"; + status = "ok"; + }; + + /* + * GICv3 — ARM Generic Interrupt Controller v3. + * GICD (distributor) @ 0x38800000 size 0x10000 + * GICR (redistributor) @ 0x38880000 size 0xc0000 + * GICC (compat CPU if) @ 0x38C20000 size 0x10000 + * + * AVZ uses the GICv2 compatibility interface (GICC) exposed by + * GICv3 when ARE_NS = 0 in GICD_CTLR. + */ + gic: interrupt-controller@38800000 { + compatible = "intc,gic"; + interrupt-controller; + #interrupt-cells = <3>; + /* GICD, GICR, GICC */ + reg = <0x0 0x38800000 0x0 0x10000 + 0x0 0x38880000 0x0 0xc0000 + 0x0 0x38C20000 0x0 0x10000>; + status = "ok"; + }; + + /* UART3 — debug console, already initialised by ATF/U-Boot */ + serial@30880000 { + compatible = "serial,imx"; + reg = <0x0 0x30880000 0x0 0x10000>; + interrupt-parent = <&gic>; + interrupts = <0 28 4>; + status = "ok"; + }; + + /* Periodic timer — ARM CP15 virtual timer PPI #10 */ + periodic-timer { + compatible = "arm,periodic-timer"; + interrupt-parent = <&gic>; + interrupts = <1 10 4>; + status = "ok"; + }; + + /* Clocksource — ARM CP15 physical counter */ + clocksource-timer { + compatible = "arm,clocksource-timer"; + status = "ok"; + }; +}; diff --git a/so3/include/device/arch/gic.h b/so3/include/device/arch/gic.h index 65f870f95e..f16a8342b9 100644 --- a/so3/include/device/arch/gic.h +++ b/so3/include/device/arch/gic.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2014-2023 Daniel Rossier + * Copyright (C) 2014-2026 Daniel Rossier * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as @@ -262,6 +262,32 @@ struct __attribute__((packed)) gich_regs { #define GICH_LR_PHYS_ID_SHIFT 10 #define GICH_LR_VIRT_ID_MASK 0x3ff +/* GICv3 ICH_LR*_EL2 64-bit field definitions (ARM GICv3 spec IHI0069): + * [63] RES0 + * [62:61] State: 00=Invalid, 01=Pending, 10=Active, 11=Active+Pending + * [60] HW: hardware-backed interrupt + * [59] Group: 0=Group0 (FIQ), 1=Group1 (IRQ) + * [55:48] Priority + * [47:32] pINTID (physical INTID, valid when HW=1) + * [19:0] vINTID (virtual INTID) + */ +/* ICH_LR_EL2 layout (per ARM ARM, matches Linux's arch_gicv3.h): + * [63] State[1] = Active + * [62] State[0] = Pending + * [61] HW + * [60] Group (1 = Group 1) + * [55:48] Priority + * [41:32] pINTID (when HW=1) + * [31:0] vINTID + */ +#define GICH_LR_STATE_PENDING64 (1ULL << 62) /* State[63:62]=01 */ +#define GICH_LR_STATE_ACTIVE64 (1ULL << 63) /* State[63:62]=10 */ +#define GICH_LR_HW_BIT64 (1ULL << 61) +#define GICH_LR_GRP1_BIT64 (1ULL << 60) +#define GICH_LR_PRIORITY_SHIFT64 48 +#define GICH_LR_PHYS_ID_SHIFT64 32 +#define GICH_LR_DEFAULT_PRIORITY 0xa0 + #define GIC_SGI_UNKNOWN 0 #define GIC_SGI_EVENT 1 @@ -299,8 +325,14 @@ typedef struct __attribute__((packed)) { #ifdef CONFIG_AVZ void gic_set_pending(u16 irq_id); +void gic_inject_pending(void); void gic_clear_pending_irqs(void); +#ifdef CONFIG_GIC_V3 +void gich_secondary_init(void); +void gic_clear_ppi_pending(u16 id); +#endif + #endif /* CONFIG_AVZ */ extern gic_t *gic; diff --git a/so3/include/device/fdt.h b/so3/include/device/fdt.h index 9332860fee..15c444bba1 100644 --- a/so3/include/device/fdt.h +++ b/so3/include/device/fdt.h @@ -1,5 +1,6 @@ #ifndef FDT_H #define FDT_H + /* * libfdt - Flat Device Tree manipulation * Copyright (C) 2006 David Gibson, IBM Corporation. diff --git a/so3/include/device/timer.h b/so3/include/device/timer.h index 3c6e1c91c1..43019f4838 100644 --- a/so3/include/device/timer.h +++ b/so3/include/device/timer.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2014-2023 Daniel Rossier + * Copyright (C) 2014-2026 Daniel Rossier * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as @@ -133,6 +133,8 @@ void secondary_timer_init(void); #ifdef CONFIG_AVZ void timer_interrupt(bool periodic); +void agency_timer_interrupt(void); +void avz_el2_timer_tick(void); #endif /* CONFIG_AVZ */ #endif /* DEVICE_TIMER_H */ diff --git a/so3/include/percpu.h b/so3/include/percpu.h index 3c1a8fc15f..9a76cb67e0 100644 --- a/so3/include/percpu.h +++ b/so3/include/percpu.h @@ -31,8 +31,20 @@ extern unsigned long __per_cpu_offset[CONFIG_NR_CPUS]; #define __get_cpu_var(var) per_cpu(var, smp_processor_id()) #define __raw_get_cpu_var(var) per_cpu(var, raw_smp_processor_id()) -/* Separate out the type, so (int[3], foo) works. */ -#define __DEFINE_PER_CPU(type, name, suffix) __attribute__((__section__(".bss.percpu"))) __typeof__(type) per_cpu_##name +/* Separate out the type, so (int[3], foo) works. + * + * Section renamed from ".bss.percpu" → ".percpu_data" because the linker + * script's `*(.bss*)` glob was matching `.bss.percpu` BEFORE the + * __per_cpu_start label, leaving __per_cpu_data_end == __per_cpu_start + * (size 0). The result: init_percpu_area's memset(p, 0, 0) was a no-op, + * per_cpu_offset[cpu] = p - 0xc3000 pointed BEFORE the allocated page, + * and `this_cpu(var)` accessed random memory adjacent to each CPU's + * allocation. Functional per-CPU state (intc_lock, pending_irqs, timers) + * was completely broken, only working by accident. + * + * Also fixed: the `suffix` arg now actually affects the section name, + * so DEFINE_PER_CPU_READ_MOSTLY properly lands in .percpu_data.read_mostly. */ +#define __DEFINE_PER_CPU(type, name, suffix) __attribute__((__section__(".percpu_data" #suffix))) __typeof__(type) per_cpu_##name #define DECLARE_PER_CPU(type, name) extern __typeof__(type) per_cpu__##name diff --git a/so3/mm/Kconfig b/so3/mm/Kconfig index a252c68497..da385d4121 100644 --- a/so3/mm/Kconfig +++ b/so3/mm/Kconfig @@ -2,8 +2,8 @@ config KERNEL_VADDR hex "Virtual base address of the SO3 kernel or hypervisor" default 0xff000000 if ARM32 - default 0xffff700000000000 if ARM64 default 0x100000000000 if AVZ + default 0xffff700000000000 if ARM64 config HEAP_SIZE_MB int "Size of the heap (MB)" From 70be975fefe882a45d1a388e2a30b2735e585fce Mon Sep 17 00:00:00 2001 From: Daniel Rossier Date: Wed, 10 Jun 2026 21:12:15 +0200 Subject: [PATCH 2/6] Major update of the documentation and move ME to S3C (SO3 Capsules) --- doc/source/architecture.rst | 176 ++++++--- doc/source/avz.rst | 179 +++++++++ doc/source/build_system.rst | 183 +++++++++ doc/source/capsules.rst | 113 ++++++ doc/source/conf.py | 9 +- doc/source/debugging.rst | 117 ++++++ doc/source/img/export_png.sh | 21 ++ doc/source/img/gen_so3_diagrams.py | 315 ++++++++++++++++ doc/source/img/so3.drawio | 1 + doc/source/img/so3_architecture.png | Bin 0 -> 104918 bytes doc/source/img/so3_avz.png | Bin 0 -> 130082 bytes doc/source/img/so3_boot.png | Bin 0 -> 103749 bytes doc/source/img/so3_capsule.png | Bin 0 -> 96550 bytes doc/source/img/so3_device_model.png | Bin 0 -> 99965 bytes doc/source/img/so3_exception_levels.png | Bin 0 -> 77184 bytes doc/source/img/so3_memory.png | Bin 0 -> 105280 bytes doc/source/img/so3_modes.png | Bin 0 -> 132748 bytes doc/source/img/so3_syscall.png | Bin 0 -> 86548 bytes doc/source/index.rst | 97 +++-- doc/source/introduction.rst | 145 +++---- doc/source/kernel.rst | 210 +++++++++++ doc/source/lvgl.rst | 49 +-- doc/source/lwip.rst | 38 +- doc/source/micropython.rst | 1 + doc/source/user_guide.rst | 353 ++++++------------ doc/source/user_space.rst | 112 ++++++ so3/Kconfig | 2 +- so3/apps/refso3/callbacks.c | 20 +- so3/apps/refso3/refso3.c | 12 +- so3/arch/arm32/include/asm/migration.h | 4 +- so3/arch/arm32/include/asm/mmu.h | 4 +- so3/arch/arm64/domain.c | 2 +- so3/arch/arm64/exception.S | 2 +- so3/arch/arm64/head.S | 2 +- so3/arch/arm64/include/asm/migration.h | 8 +- so3/arch/arm64/include/asm/mmu.h | 4 +- so3/arch/arm64/include/asm/virt.h | 2 +- so3/arch/arm64/rpi4_64/include/mach/ipamap.h | 2 +- .../arm64/verdin-imx8mp/include/mach/ipamap.h | 2 +- so3/arch/arm64/virt64/include/mach/ipamap.h | 2 +- so3/avz/include/avz/dcm.h | 24 +- so3/avz/include/avz/domain.h | 6 +- so3/avz/include/avz/injector.h | 4 +- so3/avz/include/avz/memslot.h | 10 +- so3/avz/include/avz/sched.h | 4 +- so3/avz/include/avz/soo.h | 10 +- so3/avz/include/avz/uapi/avz.h | 8 +- so3/avz/kernel/Makefile | 2 +- .../kernel/{ME_build.c => capsule_build.c} | 12 +- so3/avz/kernel/domain.c | 12 +- so3/avz/kernel/domain_utils.c | 24 +- so3/avz/kernel/gnttab.c | 6 +- so3/avz/kernel/hypercalls.c | 66 ++-- so3/avz/kernel/injector.c | 130 +++---- so3/avz/kernel/sched_flip.c | 4 +- so3/avz/kernel/schedule.c | 2 +- so3/avz/kernel/setup.c | 2 +- so3/avz/kernel/smp.c | 8 +- so3/avz/kernel/timer.c | 2 +- so3/avz/mm/memory.c | 40 +- so3/configs/virt64_capsule_defconfig | 4 +- so3/devices/irq.c | 4 +- so3/devices/serial.c | 4 +- so3/devices/timer/arm_timer.c | 4 +- so3/include/banner.h | 2 +- so3/include/common.h | 6 +- so3/include/log.h | 4 +- so3/kernel/timer.c | 6 +- so3/soo/Kconfig | 4 +- so3/soo/drivers/Kconfig | 4 +- so3/soo/drivers/vdevfront.c | 6 +- so3/soo/drivers/vdummyfront/vdummy.c | 4 +- so3/soo/drivers/vfbdevfront/vfbdev.c | 2 +- so3/soo/drivers/vlogsfront/vlogs.c | 2 +- so3/soo/drivers/vuihandlerfront/vuihandler.c | 4 +- so3/soo/include/{me => capsule}/agency.h | 0 so3/soo/include/{me => capsule}/common.h | 12 +- so3/soo/include/{me => capsule}/refso3.h | 6 +- so3/soo/include/soo/avz.h | 4 +- so3/soo/include/soo/dev/vuihandler.h | 8 +- so3/soo/include/soo/soo.h | 20 +- so3/soo/include/soo/uapi/soo.h | 126 +++---- .../soo/{vbstore_me.h => vbstore_capsule.h} | 8 +- so3/soo/include/soo/vbus.h | 6 +- so3/soo/kernel/debug/time.c | 4 +- so3/soo/kernel/evtchn.c | 6 +- so3/soo/kernel/setup.c | 18 +- so3/soo/kernel/soo_guest_activity.c | 54 +-- so3/soo/kernel/soo_id.c | 38 +- so3/soo/kernel/vbstore/Makefile | 2 +- .../{vbstore_me.c => vbstore_capsule.c} | 92 ++--- so3/soo/kernel/vbus/vbus.c | 32 +- so3/soo/kernel/vbus/vbus_frontend.c | 20 +- so3/soo/kernel/vbus/vbus_vbstore.c | 20 +- usr/lib/logs/capsule_log.c | 2 +- usr/lib/logs/include/capsule_log.h | 2 +- 96 files changed, 2197 insertions(+), 906 deletions(-) create mode 100644 doc/source/avz.rst create mode 100644 doc/source/build_system.rst create mode 100644 doc/source/capsules.rst create mode 100644 doc/source/debugging.rst create mode 100755 doc/source/img/export_png.sh create mode 100644 doc/source/img/gen_so3_diagrams.py create mode 100644 doc/source/img/so3.drawio create mode 100644 doc/source/img/so3_architecture.png create mode 100644 doc/source/img/so3_avz.png create mode 100644 doc/source/img/so3_boot.png create mode 100644 doc/source/img/so3_capsule.png create mode 100644 doc/source/img/so3_device_model.png create mode 100644 doc/source/img/so3_exception_levels.png create mode 100644 doc/source/img/so3_memory.png create mode 100644 doc/source/img/so3_modes.png create mode 100644 doc/source/img/so3_syscall.png create mode 100644 doc/source/kernel.rst create mode 100644 doc/source/user_space.rst rename so3/avz/kernel/{ME_build.c => capsule_build.c} (85%) rename so3/soo/include/{me => capsule}/agency.h (100%) rename so3/soo/include/{me => capsule}/common.h (95%) rename so3/soo/include/{me => capsule}/refso3.h (90%) rename so3/soo/include/soo/{vbstore_me.h => vbstore_capsule.h} (85%) rename so3/soo/kernel/vbstore/{vbstore_me.c => vbstore_capsule.c} (78%) diff --git a/doc/source/architecture.rst b/doc/source/architecture.rst index ce7704f3f2..86635b6b64 100644 --- a/doc/source/architecture.rst +++ b/doc/source/architecture.rst @@ -1,54 +1,132 @@ .. _architecture: SO3 Architecture +################ + +SO3 follows a conventional operating-system organisation with a **user space** +and a **kernel space**. It is a *monolithic* kernel, like Linux: all subsystems +and device drivers live in the kernel. + +.. figure:: img/so3_architecture.png + :width: 100% + + Overview of the SO3 environment (standalone configuration). + +The user space is a small set of lightweight applications (``init``, the shell, +``ls``, ``cat``, ``more``, ``ping``, …) built against the **MUSL** C library and +stored in a root filesystem. The kernel provides the usual subsystems — +process/thread management and scheduling, memory management, a virtual +filesystem, IPC, networking — plus a device-tree-driven device and driver model. + +Source tree +=========== + +The kernel source lives under ``so3/`` and is organised by subsystem:: + + so3/ + ├── arch/ # architecture-specific code (arm32, arm64) + │ └── arm64/ # head/boot, exceptions, MMU, context switch, traps + ├── kernel/ # processes, threads, scheduler, syscalls, time + ├── mm/ # page frame allocator, kernel heap + ├── fs/ # VFS, FAT, devfs, ELF loader + ├── ipc/ # signals, pipes, semaphores, completions + ├── net/ # networking, lwIP TCP/IP stack + ├── devices/ # device model + drivers (irq, timer, serial, mmc, fb, …) + ├── dts/ # device trees (*.dts → *.dtb) + ├── avz/ # the AVZ hypervisor (built with CONFIG_AVZ) + ├── soo/ # the SOO framework / SO3 capsules (CONFIG_SOO) + ├── configs/ # defconfig files + └── lib/ # in-kernel helper libraries (libfdt, libroxml, …) + +The user space lives under ``usr/`` and the surrounding tooling (bootloader, +emulator, root filesystem, deployment scripts) at the repository root — see +:ref:`build_system` and :ref:`user_space`. + +Exception levels ================ -The overall architecture of SO3 follows a conventional operating system organization with a user space and a kernel space. -The user space represents all user files and applications; everything is accessible via a *standard* directory tree -through a root filesystem. - -The set of directories/sub-directories are generated by a well-known `buildroot `__ tool used to generate -embedded Linux systems through cross-compilation. It provides a fully configurable (i.e. customizable) well-profiled -user environment and can lead to a minimal sized root filesystem. - -.. figure:: img/SO3_Architecture.png - :scale: 50 % - - Overview of the SO3 environment with user and kernel space - -As depicted on this figure, SO3 is a monolithic OS like Linux where all subsystems and drivers reside in the kernel space. -Major subsystems like Inter-Process Communication (IPC), scheduling, filesystem, networking, etc. including device drivers -exist and provide basic functionalities. The user space is made of a very simple set of lightweight applications (*ls*, -*more*, *echo*, *cat*, etc.) - -SO3 Kernel Space ----------------- - -The kernel space uses the device tree to have information related to hardware configuration like the RAM memory base and -size, device related information, and various system properties. - -SO3 User Space --------------- - -All user space files are located in ``usr/`` directory. Applications and the *libc* is in separated -directories. - - -The MUSL libc user space library --------------------------------- - -SO3 integrates the `MUSL library `__ as *libc* for its user space application. - -Not all functions are available in SO3, but the functions are enabled as soon as there is a necessity to have it. -Furthermore, more complex functions such as those used to manage ``pthreads`` for example are not activated since -only a minimal set of functionalities and features are present. - -Please do not hesitate to start a discussion thread or simply ask for adding a new feature in ``musl`` as it becomes -necessary. - - - -.. _MUSL_libc: https://musl.libc.org -.. _buildroot: https://buildroot.org - - +On ARM64, SO3 uses the architectural exception levels as follows. + +.. figure:: img/so3_exception_levels.png + :width: 95% + + Exception levels in the standalone and AVZ configurations. + +* **Standalone** — user processes run at **EL0**, the SO3 kernel at **EL1**. + EL2 is unused. The kernel owns ``VBAR_EL1`` (exception vectors) and the + ``TTBR0_EL1`` / ``TTBR1_EL1`` translation tables. +* **AVZ** — the **AVZ hypervisor** runs at **EL2** (``VBAR_EL2``, stage-2 + translation via ``VTTBR_EL2``, ``HCR_EL2`` configured to trap and inject + interrupts). Each guest (the agency and any capsule) runs its own SO3 kernel + at EL1 with its user space at EL0, isolated by per-domain stage-2 tables. + +The exact level a given build targets is selected by ``CONFIG_AVZ``. The same +C and assembly files implement both; EL2-specific code is guarded with +``#ifdef CONFIG_AVZ`` (for example the TLB-maintenance instructions in +``arch/arm64/cache.S`` and the vector handlers in ``arch/arm64/exception.S``). + +Virtual address space +===================== + +Each process owns a private set of page tables. On ARM64 the low half of the +address space (``TTBR0_EL1``) maps the current user process, and the high half +(``TTBR1_EL1``) maps the kernel. + +.. figure:: img/so3_memory.png + :width: 100% + + ARM64 virtual address space (standalone, EL1). + +The kernel base address is configured by ``CONFIG_KERNEL_VADDR``: + +.. flat-table:: + :header-rows: 1 + :widths: 30 40 30 + + * - Configuration + - ``CONFIG_KERNEL_VADDR`` + - Notes + * - standalone (EL1) + - ``0xFFFF800000000000`` + - kernel in the high (TTBR1) half + * - AVZ (EL2) + - ``0x0000100000000000`` + - hypervisor address space + +The ``__pa()`` / ``__va()`` macros (``include/memory.h``) translate between +kernel virtual addresses and physical addresses using ``CONFIG_KERNEL_VADDR`` +and the physical RAM base discovered from the device tree. The initial user +program is mapped at ``USER_SPACE_VADDR`` (``0x1000``). See :ref:`kernel` for +the page-frame allocator and the MMU code. + +Boot flow +========= + +SO3 is started by **U-Boot**, which loads a **FIT image** (``.itb``) containing +the kernel, the device-tree blob and the root filesystem. In the AVZ +configuration the FIT also contains the hypervisor and the agency guest. + +.. figure:: img/so3_boot.png + :width: 100% + + Boot flow from U-Boot to the interactive shell. + +1. **U-Boot** loads the FIT image from the boot medium and jumps to the entry + point of the first component. +2. In the **AVZ** configuration, control enters the hypervisor + (``avz_start()`` at EL2); AVZ sets up the stage-2 tables, *loads the guest + domain* and ``eret``\ s into the agency at EL1. In the **standalone** + configuration U-Boot jumps straight to the SO3 kernel entry + (``__start`` → ``kernel_start()``) at EL1. +3. The kernel brings itself up: ``memory_init()`` (frame table + MMU), + ``devices_init()`` (device-tree probe, GIC, timer, serial), ``timer_init()`` + and ``calibrate_delay()``, ``scheduler_init()``, then interrupts are enabled. +4. ``rest_init()`` runs as the first kernel thread and calls + ``create_root_process()``, which maps the ``__root_proc`` trampoline at + ``0x1000`` and enters EL0. +5. The root process ``execve()``\ s ``init.elf`` (the *SO3 Init Program*), which + in turn launches the shell (``sh.elf``) — the familiar ``so3%`` prompt. + +The individual steps are described in :ref:`kernel`; the packaging of the FIT +image and the U-Boot/QEMU setup are covered in :ref:`build_system` and +:ref:`user_guide`. diff --git a/doc/source/avz.rst b/doc/source/avz.rst new file mode 100644 index 0000000000..3b0569c9a0 --- /dev/null +++ b/doc/source/avz.rst @@ -0,0 +1,179 @@ +.. _avz: + +AVZ Hypervisor +############## + +**AVZ** (*Agency VirtualiZer*) is the type-1 hypervisor that ships inside the +SO3 tree. Built with ``CONFIG_AVZ``, the very same code base runs at **EL2** on +ARM64 and hosts guest *domains* at EL1. AVZ is small and Xen-inspired: it +provides stage-2 memory isolation, a domain scheduler, hypercalls, event +channels, grant tables and a virtual GIC, and nothing more. + +AVZ is also the foundation of the :ref:`SO3 capsule ` model: an agency +domain owns the hardware while one or more lightweight capsule (S3C) guests run +beside it. + +.. note:: + + In the demonstration shipped with this repository the agency is an **SO3** + kernel (enough to exercise the hypervisor). The full SO3 Capsule setup uses a + **Linux** agency, which — together with the SOO framework — lives in a + :ref:`separate repository `. + +.. figure:: img/so3_avz.png + :width: 100% + + AVZ: domains isolated by stage-2 tables, and the EL2 services beneath them. + +The code lives under ``so3/avz/`` (kernel, memory, scheduler, hypercalls, grant +tables, capsule build/inject) together with the EL2-specific parts of +``arch/arm64`` (``head.S`` MMU setup, ``exception.S`` EL2 vectors, +``context.S`` stage-2 switch, ``cache.S`` EL2 TLB ops) and the virtual GIC in +``devices/irq/``. + +Boot and guest loading +====================== + +The hypervisor entry point is ``avz_start()`` (``avz/kernel/setup.c``). After +early CPU, memory and device initialisation it prints its banner and *loads the +guest domain*: it parses the FIT image provided by U-Boot, places the agency's +kernel and device tree in RAM, builds the agency's **stage-2** page tables and +sets the guest entry point. AVZ then ``eret``\ s to EL1, and the agency boots as +an ordinary SO3 kernel (``kernel_start()``). The console trace looks like:: + + ********** Smart Object Oriented technology - AVZ Hypervisor ********** + ... + Now bootstraping the hypervisor kernel ... + ***************** Loading Guest Domain ***************** + ... + ********** Smart Object Oriented SO3 Operating System ********** + +Guest memory is organised in **memory slots** (``avz/include/avz/memslot.h``): +slot 0 is AVZ itself, slot 1 the agency, and the remaining slots are capsules. +Each slot maps a guest *intermediate physical address* (IPA) range to real +physical memory; ``ipa_to_pa()`` / ``pa_to_ipa()`` convert between them. + +Domains +======= + +A **domain** (``struct domain``, ``avz/include/avz/domain.h``) is a guest +instance: its virtual CPU state, its event-channel table, a pointer to the +shared info page and its scheduling metadata. Well-known identifiers +(``avz/include/avz/uapi/avz.h``): + +.. flat-table:: + :header-rows: 1 + :widths: 35 65 + + * - Identifier + - Meaning + * - ``DOMID_AGENCY`` (0) + - the primary agency guest (owns the devices) + * - ``DOMID_AGENCY_RT`` (1) + - optional real-time agency subdomain + * - slots 2 … + - capsule domains + * - ``MAX_CAPSULE_DOMAINS`` + - ``2 + 5`` — up to five capsules alongside the agencies + +Each domain shares a page with the hypervisor — the ``avz_shared`` structure — +carrying its domain id, event-channel pending bits, the upcall state and the +guest's device-tree address. + +Hypercalls +========== + +Guests call into AVZ with the ``hvc`` instruction, which traps to the EL2 +synchronous handler (``el12_sync_handler`` in ``arch/arm64/exception.S``) and is +dispatched by ``avz/kernel/hypercalls.c``. The generic hypercalls +(``avz/include/avz/uapi/avz.h``) are: + +* ``AVZ_EVENT_CHANNEL_OP`` — allocate / bind / send / close event channels; +* ``AVZ_CONSOLE_IO_OP`` — console output for guests; +* ``AVZ_DOMAIN_CONTROL_OP`` — domain control (pause / unpause a capsule, …). + +The capsule-management operations (inject, kill, read/write snapshot) used by the +SOO framework are built on top of these — see :ref:`capsules`. + +Domain scheduling +================= + +AVZ runs each domain on a CPU according to its role. The agency uses the +``sched_agency`` policy; capsules are scheduled by ``sched_flip`` +(``avz/kernel/sched_flip.c``), a lightweight round-robin over the capsule +domains. A per-CPU ``current_domain`` pointer tracks the running guest; switching +domains saves and restores the EL1 register banks and reprograms ``VTTBR_EL2`` +through ``__mmu_switch_vttbr()`` (``arch/arm64/context.S``). + +Inter-domain communication +========================== + +Event channels +-------------- + +Each domain has ``NR_EVTCHN`` (128) event-channel ports. A port can be +*unbound* (waiting for a peer), *interdomain* (bound to a remote domain's port) +or bound to a *virtual IRQ*. Sending an event sets a pending bit in the remote +domain's ``avz_shared`` page and, if needed, injects a virtual interrupt so the +guest is woken. Event channels are the signalling half of the split-driver +model. + +Grant tables +------------ + +Grant tables (``avz/kernel/gnttab.c``) let one domain share specific memory +pages with another in a controlled way. A domain reserves a small set of grant +IPA pages; a peer maps a granted page by reference. This is how the shared rings +of the frontend/backend drivers and the capsule framebuffer are set up. + +Virtual GIC +=========== + +Because guests must not touch the physical interrupt controller directly, AVZ +provides a **virtual GIC**. + +* ``HCR_EL2.IMO`` routes all Group-1 physical IRQs to **EL2**. The EL2 IRQ + handler (``avz_el2_irq_handle()`` for GICv3, ``irq_handle()`` for GICv2) + decides what to do with each interrupt. +* The hypervisor's own interrupts — the EL2 timer (CNTHP, PPI 26) and the vGIC + **maintenance** interrupt (PPI 25) — are handled locally. +* All other interrupts destined for a guest are **injected** through the GIC + *list registers* (``ICH_LR*_EL2`` on GICv3, the GICH MMIO frame on GICv2). The + injected entry is *hardware-backed* (``HW = 1``) so that the physical + interrupt is deactivated automatically when the guest writes its own + end-of-interrupt — keeping hypervisor overhead minimal. +* Accesses by a guest to the physical GIC **distributor** are not mapped in the + guest stage-2 tables; they trap to EL2 and are emulated by the vGIC + (``devices/irq/vgic.c``), which forwards most register accesses and translates + SGI (software-generated interrupt) requests into AVZ's targeted-IPI helper. + +EL2 vs EL1 in the shared code +============================= + +Because the standalone and AVZ builds share the same files, a handful of +low-level operations differ by exception level and are guarded with +``#ifdef CONFIG_AVZ``: + +.. flat-table:: + :header-rows: 1 + :widths: 30 35 35 + + * - Operation + - Standalone (EL1) + - AVZ (EL2) + * - TLB maintenance (``cache.S``) + - ``tlbi vmalle1`` / ``vae1is`` + - ``tlbi alle2`` / ``vae2is`` + * - MMU setup (``head.S``) + - ``ttbr0/1_el1``, ``sctlr_el1`` + - ``ttbr0_el2``, ``tcr_el2``, ``sctlr_el2`` + * - GIC CPU interface + - ``EOImode = 0`` + - ``EOImode = 1`` (split priority-drop / deactivate) + * - sync/IRQ vectors (``exception.S``) + - ``el01_sync`` / ``el01_1_irq`` + - ``el12_sync`` / ``el12_2_irq`` + +Getting these guards right is essential: an EL2-only instruction executed at EL1 +(or vice versa) faults immediately at boot. See :ref:`debugging` for how such +issues are diagnosed under QEMU/GDB. diff --git a/doc/source/build_system.rst b/doc/source/build_system.rst new file mode 100644 index 0000000000..64813e6834 --- /dev/null +++ b/doc/source/build_system.rst @@ -0,0 +1,183 @@ +.. _build_system: + +Build System +############ + +SO3's build system is derived from the Linux **Kbuild** infrastructure, so it +will feel familiar to anyone who has built a Linux kernel: ``Kconfig`` files, +``defconfig`` snapshots, ``obj-y`` lists and a recursive descent through the +source tree. + +Configuration (Kconfig) +======================= + +Each subsystem carries a ``Kconfig`` describing its options, and every option +becomes a ``CONFIG_*`` symbol. Configuration is stored in ``so3/.config`` and +exposed to the build as ``include/generated/autoconf.h``. The usual targets +work:: + + cd so3 + make virt64_defconfig # load a defconfig snapshot + make menuconfig # interactive configuration (optional) + make -j$(nproc) # build the kernel + +The selected target architecture (``CONFIG_VIRT64``, ``CONFIG_RPI4_64``, +``CONFIG_VERDIN_IMX8MP`` for ARM64; ``CONFIG_VIRT32``, ``CONFIG_RPI4`` for ARM32) +and the deployment mode (``CONFIG_AVZ``, ``CONFIG_SOO``) are all driven from +``.config``. The cross-compiler is taken from ``CONFIG_CROSS_COMPILE`` — the +kernel uses the bare-metal **aarch64-none-elf** (or **arm-none-eabi**) toolchain. + +Defconfigs and platforms +======================== + +The ready-made configurations live in ``so3/configs/``: + +.. flat-table:: + :header-rows: 1 + :widths: 38 12 12 12 26 + + * - defconfig + - Arch + - AVZ + - SOO + - Purpose + * - ``virt64_defconfig`` + - arm64 + - + - + - standalone, QEMU virt + * - ``virt64_fb_defconfig`` + - arm64 + - + - + - standalone + framebuffer (LVGL) + * - ``virt64_lvperf_defconfig`` + - arm64 + - + - + - LVGL performance build + * - ``virt64_avz_defconfig`` + - arm64 + - ✔ + - + - AVZ hypervisor + agency + * - ``virt64_avz_soo_defconfig`` + - arm64 + - ✔ + - ✔ + - AVZ + agency with SOO + * - ``virt64_capsule_defconfig`` + - arm64 + - + - ✔ + - SO3 capsule (guest) + * - ``rpi4_64_defconfig`` + - arm64 + - + - + - Raspberry Pi 4 (64-bit) + * - ``rpi4_64_avz_defconfig`` + - arm64 + - ✔ + - + - RPi4 AVZ hypervisor + * - ``rpi4_64_avz_soo_defconfig`` + - arm64 + - ✔ + - ✔ + - RPi4 AVZ + SOO + * - ``verdin-imx8mp_avz_defconfig`` + - arm64 + - ✔ + - + - Toradex Verdin i.MX8M Plus + * - ``virt32_defconfig`` / ``…_fb`` / ``…_lvperf`` + - arm32 + - + - + - 32-bit QEMU virt variants + * - ``rpi4_defconfig`` + - arm32 + - + - + - Raspberry Pi 4 (32-bit) + +The active platform is also recorded at the repository root in ``build.conf`` +(``PLATFORM := virt64``); the deployment and launch scripts read it from there. + +Linker script and asm-offsets +============================= + +The kernel is linked with an architecture-specific linker script +(``arch/arm64/so3.lds``). It places the exception vectors, the boot code +(``.head.text``), the code/data/bss, the per-CPU area (``.percpu_data``), the +system page tables, the driver *initcall* sections, the kernel heap and the +per-CPU stacks. Sizes come from configuration symbols (``CONFIG_HEAP_SIZE_MB``, +``CONFIG_NR_CPUS``, the stack sizes) passed to the linker with ``--defsym``; the +kernel base address is ``CONFIG_KERNEL_VADDR``. + +Assembly code needs the byte offsets of C structures (for instance +``cpu_regs``). These are produced by ``arch/arm64/asm-offsets.c``, compiled to a +header of ``#define OFFSET_*`` values that both C and assembly share — the same +mechanism Linux uses. + +Device trees +============ + +Hardware is described by **device trees** in ``so3/dts/``. The ``.dts`` sources +are compiled to ``.dtb`` blobs by the in-tree ``dtc`` (``scripts/dtc/``). The +relevant ``.dtb`` is shipped to the kernel inside the FIT image (below); the +kernel parses it at boot to discover RAM and devices (:ref:`kernel`). + +FIT image and U-Boot +==================== + +SO3 is started by **U-Boot**, which expects a **FIT image** (``.itb``) — a single +file bundling the kernel, the device tree and the root filesystem (and, for AVZ, +the hypervisor and the agency guest). The image is described by an ``.its`` file +in ``target/`` and assembled with ``mkimage``: + +.. flat-table:: + :header-rows: 1 + :widths: 40 60 + + * - ``.its`` (in ``target/``) + - Contents + * - ``virt64.its`` + - standalone: SO3 kernel + DTB + ramfs + * - ``virt64_avz_so3.its`` + - AVZ hypervisor + agency SO3 + DTBs + ramfs + * - ``virt64_capsule.its`` + - a capsule image + * - ``virt64_lvperf.its`` + - LVGL performance build + * - ``rpi4_64*.its`` / ``virt32*.its`` + - the corresponding RPi4 / 32-bit variants + +The helper ``target/mkuboot.sh `` runs ``mkimage -f .its +.itb``. The resulting ``.itb`` is copied into the first partition of the +SD-card image by ``deploy.sh`` (see :ref:`user_guide`). U-Boot's environment +(``u-boot/uEnv.d/uEnv_.txt``) loads ``.itb`` and boots it. + +Building the AVZ hypervisor +=========================== + +The AVZ hypervisor is an **out-of-tree** build of the same source, configured +into the repository-root ``avz/`` directory (whose ``avz/source`` is a symlink to +``so3/``):: + + cd avz + ./build.sh virt64_avz_defconfig # configure + ./build.sh # build -> avz/so3.bin + +The resulting ``avz/so3.bin`` is the hypervisor; the agency guest is an ordinary +``so3/so3.bin``. Both, together with the device trees and the root filesystem, +are packaged by ``virt64_avz_so3.its``. See :ref:`user_guide` for the full AVZ +run procedure. + +User space +========== + +The user-space applications are built separately with **CMake** and the +**MUSL** cross toolchain (``usr/aarch64-linux-musl.cmake`` / +``usr/arm-linux-musl.cmake``). This is covered in :ref:`user_space`. diff --git a/doc/source/capsules.rst b/doc/source/capsules.rst new file mode 100644 index 0000000000..40c5d3860d --- /dev/null +++ b/doc/source/capsules.rst @@ -0,0 +1,113 @@ +.. _capsules: + +SO3 Capsules (SOO framework) +############################ + +An **SO3 Capsule** (acronym **S3C**) is a lightweight, self-contained guest that +runs at EL1 on top of the :ref:`AVZ hypervisor `. A capsule does not own any +hardware; it cooperates with an **agency** domain that owns the devices, through +split (frontend/backend) drivers. + +.. note:: + + *SO3 Capsule* / *S3C* is the current name and acronym for the concept that + older code and papers called a *Mobile Entity* (ME). The source tree now uses + the **S3C** acronym in identifiers (``S3C_desc_t``, ``S3C_state_t``, + ``S3C_domID``, ``MAX_S3C_DOMAINS`` …) and *capsule* in prose. The legacy + ``ME`` spelling no longer appears in the code. + +The agency is a separate repository +=================================== + +The capsule model needs a **Linux** agency: Linux provides the backend drivers +and the higher-level services that capsules talk to. For the time being **the +Linux agency is not part of this (so3) repository** — it lives, together with the +rest of the **SOO framework**, in the separate +`soo repository `__ (also mirrored on +GitHub). + +What *is* in this so3 repository is the **capsule (guest) side** and the +hypervisor support for it: + +* the **frontend** drivers (``soo/drivers/``); +* the **vbus / vbstore** clients and the event-channel / grant-table glue + (``soo/kernel/``); +* the hypervisor-side capsule **build / inject / snapshot** code + (``so3/avz/`` — ``capsule_build.c``, ``injector.c``). + +A capsule-capable guest is produced by ``virt64_capsule_defconfig`` (enabling +``CONFIG_SOO``). The AVZ demonstration shipped in this repository +(``virt64_avz_so3.its``) boots an **SO3** agency, which is enough to exercise the +hypervisor; running actual capsules additionally requires the Linux agency from +the soo repository. + +Split (frontend/backend) drivers +================================= + +Every virtual device a capsule uses is a **split driver**: a **frontend** in the +capsule talks to a **backend** in the Linux agency through a shared memory ring +and an event channel (set up with grant tables and :ref:`event channels `). + +.. figure:: img/so3_capsule.png + :width: 100% + + Split drivers and the vbstore configuration tree. + +The frontends shipped in ``soo/drivers/`` are: + +.. flat-table:: + :header-rows: 1 + :widths: 30 70 + + * - Frontend + - Purpose + * - ``vfbdevfront`` + - virtual framebuffer (display output for the capsule) + * - ``vinputfront`` + - virtual input (keyboard / mouse events) + * - ``vuartfront`` + - virtual serial console + * - ``vuihandlerfront`` + - UI handler / application channel + * - ``vlogsfront`` + - logging service + * - ``vsenseledfront`` / ``vsensejfront`` + - Raspberry Pi Sense HAT LED matrix and joystick + * - ``vdummyfront`` + - reference/test driver + +All frontends share the common machinery in ``soo/drivers/vdevfront.c`` and +register through ``vbus`` as ``vbus_driver``\ s. + +vbus and vbstore +================ + +The frontend and backend find and configure each other through two Xen-inspired +mechanisms: + +vbstore + A small, hierarchical **configuration store** (``soo/kernel/vbstore/``), + analogous to Xenstore. Devices advertise their state and parameters at paths + such as ``device///state``, ``…/ring-ref`` and + ``…/event-channel``. + +vbus + The **virtual bus** (``soo/kernel/vbus/``) that enumerates devices and drives + their state machine. When a frontend and its backend have both published their + ring reference and event channel in vbstore and reached the *Connected* state, + I/O can flow. The same state machine drives *probe*, *suspend* and *resume*. + +Capsule state and the snapshot mechanism +======================================== + +A capsule's state is tracked by ``S3C_state_t`` +(``soo/include/soo/uapi/soo.h``): ``S3C_state_stopped``, ``S3C_state_living``, +``S3C_state_suspended``, ``S3C_state_resuming``, ``S3C_state_awakened``, +``S3C_state_killed``, ``S3C_state_terminated``, ``S3C_state_dead`` (and the +``S3C_state_hibernate`` / ``S3C_state_booting`` intermediates). + +AVZ provides a low-level **snapshot** primitive — ``AVZ_S3C_READ_SNAPSHOT`` and +``AVZ_S3C_WRITE_SNAPSHOT`` — that saves and restores a capsule's memory image and +its vbstore state. This is the building block the SOO framework uses to move a +capsule's execution state; the higher-level orchestration that drives it lives in +the soo repository, not here. diff --git a/doc/source/conf.py b/doc/source/conf.py index 760b811cf1..06c6e5cdac 100644 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -35,15 +35,14 @@ 'sphinx.ext.todo', 'sphinx.ext.ifconfig', 'sphinx.ext.viewcode', - 'sphinxcontrib.plantuml', 'rstFlatTable', -# 'sphinxcontrib.bibtex', 'sphinx.ext.extlinks', 'sphinx.ext.imgmath' ] -plantuml = 'java -jar %s -t' % os.path.join(os.path.dirname(__file__), "../utils", "plantuml.jar") -plantuml_output_format = 'png' +# Diagrams are authored in source/img/so3.drawio and exported to PNG +# (see source/img/gen_so3_diagrams.py and source/img/export_png.sh). The +# PlantUML extension was removed: it was unused and required a missing JAR. # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] @@ -60,7 +59,7 @@ # General information about the project. project = u'SO3 Operating System' -copyright = u'2014-2025, HEIG-VD - REDS Institute' +copyright = u'2014-2026, HEIG-VD - REDS Institute' # The version info for the project you're documenting, acts as replacement for diff --git a/doc/source/debugging.rst b/doc/source/debugging.rst new file mode 100644 index 0000000000..d155997ca4 --- /dev/null +++ b/doc/source/debugging.rst @@ -0,0 +1,117 @@ +.. _debugging: + +Debugging SO3 +############# + +Because SO3 is developed primarily on QEMU, the emulator's built-in **GDB stub** +is the day-to-day debugging tool. This chapter shows the QEMU/GDB workflow; for +debugging on real hardware see :ref:`Debugging with JTAG on Raspberry Pi 4 +`. + +Debug symbols +============= + +The linked kernel ``so3/so3`` is an ELF file with full symbols (the binary +flashed into the FIT image is the stripped ``so3.bin``). Point GDB at the ELF to +get source-level debugging while the target runs the matching ``.bin``. + +Attaching GDB to QEMU +===================== + +The launch scripts already expose a GDB stub. ``./st`` (and ``./stv``) start +QEMU with ``-gdb tcp::1234``; add ``-S`` to make QEMU **wait** for the debugger +before executing the first instruction. A minimal headless invocation looks +like: + +.. code-block:: bash + + sudo qemu-system-aarch64 -smp 4 -M virt -cpu cortex-a72 -m 1024 \ + -kernel u-boot/u-boot -nographic -no-reboot \ + -drive if=none,file=filesystem/sdcard.img.virt64,id=hd0,format=raw \ + -device virtio-blk-device,drive=hd0 \ + -S -gdb tcp::1234 + +Then, from the ``so3/`` directory: + +.. code-block:: bash + + gdb-multiarch -q \ + -ex 'file so3' \ + -ex 'target remote :1234' \ + -ex 'break kernel_start' \ + -ex 'continue' + +.. tip:: + + Use **gdb-multiarch** (or an ``aarch64`` GDB). The repository ships a small + ``gdbinit`` with sensible defaults (for example a bounded backtrace limit). + +Useful breakpoints +================== + +A few entry points are handy when tracing a boot or a fault: + +.. flat-table:: + :header-rows: 1 + :widths: 38 62 + + * - Symbol + - What it marks + * - ``kernel_start`` + - start of kernel bring-up + * - ``memory_init`` / ``devices_init`` + - memory and device-tree initialisation + * - ``trap_handle`` / ``trap_handle_error`` + - the synchronous-exception path (faults, syscalls) + * - ``el01_sync_handler`` / ``syscall_handle`` + - the system-call path + * - ``create_root_process`` / ``ret_from_fork`` + - the transition into the first user process + +Inspecting an exception +======================= + +When a fault is taken, the kernel prints the offending ``ELR``, ``FAR`` and +``ESR`` and stops. To find the faulting instruction in the ELF, add the kernel +virtual base to the load offset and disassemble: + +.. code-block:: bash + + aarch64-none-elf-objdump -d so3/so3 | less # search for the address + +The top bits of ``ESR`` give the exception class (``EC``); a value of ``0x15`` is +an ``SVC`` (system call), ``0x20`` / ``0x21`` an instruction abort, ``0x24`` / +``0x25`` a data abort, and ``0x00`` an "unknown reason" trap (often an +instruction that is illegal at the current exception level — a frequent symptom +when EL2-only code runs at EL1). + +.. note:: + + QEMU's GDB stub cannot always read the AArch64 system registers by name. When + ``$elr_el1`` and friends are unavailable, read the **saved exception frame** + off the stack instead: within ``struct cpu_regs`` the offsets are + ``OFFSET_PC = 256``, ``OFFSET_PSTATE = 264`` and ``OFFSET_SP_USR = 272`` + (with ``S_FRAME_SIZE = 288`` in the standalone build). + +Debugging AVZ +============= + +For the hypervisor, launch with ``./stv`` (so EL2 is available) and add ``-S +-gdb tcp::1234`` the same way. Load symbols from the hypervisor ELF +(``avz/so3``) for the EL2 code and from the agency ELF (``so3/so3``) for the EL1 +guest. The AVZ console trace (the *Loading Guest Domain* section and the vGIC +messages) is usually the quickest way to locate a problem before reaching for +the debugger. + +Semihosting +=========== + +The ARM **semihosting** interface (``arch/arm64/semihosting.c``) is available +under the emulator and through a JTAG probe, allowing early ``printf``-style +output and host file access before the console driver is up. + +On real hardware +================ + +For JTAG-based debugging on the Raspberry Pi 4 (OpenOCD + GDB over a hardware +probe), follow the dedicated chapter: :ref:`so3_jtag_rpi4`. diff --git a/doc/source/img/export_png.sh b/doc/source/img/export_png.sh new file mode 100755 index 0000000000..43d842837a --- /dev/null +++ b/doc/source/img/export_png.sh @@ -0,0 +1,21 @@ +#!/bin/bash +# Render every page of so3.drawio to a PNG (so3_.png). +# The drawio CLI is an Electron app, so we run it under a virtual X server. +set -e +cd "$(dirname "$0")" + +names=(modes architecture boot memory exception_levels syscall avz capsule device_model) + +i=0 +for name in "${names[@]}"; do + # drawio's -p page selector is 1-based + xvfb-run -a drawio -x -f png --scale 2 -p "$((i+1))" \ + -o "so3_${name}.png" so3.drawio \ + --no-sandbox --disable-gpu >/dev/null 2>&1 || true + if [ -f "so3_${name}.png" ]; then + echo " [$i] so3_${name}.png ($(stat -c%s "so3_${name}.png") bytes)" + else + echo " [$i] FAILED: so3_${name}.png" + fi + i=$((i+1)) +done diff --git a/doc/source/img/gen_so3_diagrams.py b/doc/source/img/gen_so3_diagrams.py new file mode 100644 index 0000000000..03656bc003 --- /dev/null +++ b/doc/source/img/gen_so3_diagrams.py @@ -0,0 +1,315 @@ +#!/usr/bin/env python3 +# Generator for source/img/so3.drawio (multi-page) and the exported PNGs. +# +# The .drawio file is the editable source of truth; this script lets us +# regenerate it from a compact description. After editing, export the PNGs +# with the helper at the bottom of this file (see README in doc/). +# +# python3 gen_so3_diagrams.py # (re)generate so3.drawio +# ./export_png.sh # render every page to PNG +# +import html + +# ---- palette ------------------------------------------------------------- +KERNEL = "fillColor=#dae8fc;strokeColor=#6c8ebf;" +USER = "fillColor=#d5e8d4;strokeColor=#82b366;" +AVZ = "fillColor=#ffe6cc;strokeColor=#d79b00;" +CAPS = "fillColor=#fff2cc;strokeColor=#d6b656;" +HW = "fillColor=#f8cecc;strokeColor=#b85450;" +NEUTRAL= "fillColor=#f5f5f5;strokeColor=#999999;" +WHITE = "fillColor=#ffffff;strokeColor=#666666;" +NONE = "fillColor=none;strokeColor=#444444;dashed=1;" + +BOX = "rounded=1;whiteSpace=wrap;html=1;arcSize=8;" +CONT= "rounded=1;whiteSpace=wrap;html=1;arcSize=4;verticalAlign=top;fontStyle=1;" +NOTE= "shape=note;whiteSpace=wrap;html=1;size=14;" +ARR = ("edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;endArrow=block;" + "strokeColor=#444444;fontSize=10;") +ARR_D = ARR + "dashed=1;" + + +class Page: + def __init__(self, name): + self.name = name + self.cells = [] + self.n = 1 + + def _id(self): + self.n += 1 + return f"c{self.n}" + + @staticmethod + def _v(label): + # drawio renders \n only when encoded as a numeric char-ref + return html.escape(label).replace("\n", " ") + + def box(self, x, y, w, h, label, style=BOX, fontsize=12, fontstyle=0): + i = self._id() + s = f"{style}fontSize={fontsize};" + if fontstyle: + s += f"fontStyle={fontstyle};" + self.cells.append( + f'') + return i + + def label(self, x, y, w, h, text, fontsize=11, bold=False): + st = ("text;html=1;whiteSpace=wrap;align=center;verticalAlign=middle;" + f"fontSize={fontsize};{'fontStyle=1;' if bold else ''}") + i = self._id() + self.cells.append( + f'') + return i + + def edge(self, src, dst, label="", style=ARR): + i = self._id() + self.cells.append( + f'' + f'') + return i + + def xml(self): + body = "".join(self.cells) + return (f'' + f'' + f'{body}' + f'') + + +pages = [] + +# ========================================================================= +# 1. Polymorphic modes +# ========================================================================= +p = Page("modes") +p.label(0, 10, 1080, 30, "SO3 — one code base, three deployment modes", 16, True) +# Standalone +p.box(30, 70, 320, 460, "Standalone OS", CONT, 13, 1) +p.box(60, 120, 260, 70, "User space\n(init, shell, apps)", USER, 11) +p.box(60, 210, 260, 90, "SO3 kernel (EL1)\nmm · sched · vfs · net · drivers", KERNEL, 11) +p.box(60, 320, 260, 60, "Hardware (EL1)\nQEMU virt / RPi4 / i.MX8MP", HW, 11) +p.label(60, 400, 260, 90, "virt64_defconfig\n\nThe kernel owns the machine\ndirectly. No hypervisor.", 10) +# Hypervisor +p.box(390, 70, 320, 460, "Hypervisor mode", CONT, 13, 1) +p.box(420, 120, 120, 70, "Agency\n(SO3, EL1)", USER, 10) +p.box(560, 120, 120, 70, "RT agency\n(optional)", USER, 10) +p.box(420, 210, 260, 80, "AVZ hypervisor (EL2)\ndomains · stage-2 · vGIC", AVZ, 11) +p.box(420, 310, 260, 60, "Hardware (EL2/EL1)", HW, 11) +p.label(420, 390, 260, 110, "virt64_avz_defconfig\n\nAVZ (Agency VirtualiZer) runs\nat EL2 and hosts the agency\nguest at EL1.", 10) +# Hypervisor + capsules +p.box(750, 70, 320, 460, "SOO / capsule mode", CONT, 13, 1) +p.box(780, 120, 90, 60, "Linux\nagency (EL1)", USER, 9) +p.box(880, 120, 55, 60, "S3C\n#1", CAPS, 9) +p.box(945, 120, 55, 60, "S3C\n#2", CAPS, 9) +p.box(1010, 120, 40, 60, "…", CAPS, 9) +p.box(780, 200, 270, 80, "AVZ hypervisor (EL2)\ncapsule scheduling · grant tables · vbstore", AVZ, 10) +p.box(780, 300, 270, 60, "Hardware", HW, 11) +p.label(780, 385, 270, 120, "SO3 capsules (S3C) run as\nlightweight EL1 guests beside a\nLinux agency.\n\nThe Linux agency and the SOO\nframework live in a separate\nrepository.", 9) +pages.append(p) + +# ========================================================================= +# 2. System architecture (standalone) +# ========================================================================= +p = Page("architecture") +p.label(0, 10, 1080, 30, "SO3 system architecture (standalone)", 16, True) +p.box(40, 60, 1000, 120, "User space (EL0)", CONT, 13, 1) +for i, (lbl) in enumerate(["init.elf", "sh.elf", "ls / cat /\nmore / echo", "ping", "LVGL\ndemos", "MicroPython"]): + p.box(70 + i*155, 100, 140, 60, lbl, USER, 10) +p.box(40, 210, 1000, 300, "Kernel space (EL1)", CONT, 13, 1) +# syscall layer +p.box(70, 250, 940, 40, "System call interface (svc → trap_handle → syscall_table)", NEUTRAL, 11) +subs = [ + ("Process &\nThread mgmt", "kernel/ — pcb, tcb,\nround-robin sched"), + ("Memory mgmt", "mm/ — frame table,\nheap, MMU"), + ("VFS", "fs/ — fat, devfs,\nELF loader"), + ("IPC", "ipc/ — signals,\npipes, semaphores"), + ("Networking", "net/ — lwIP\nsockets"), +] +for i, (t, d) in enumerate(subs): + x = 70 + i*188 + p.box(x, 310, 175, 80, f"{t}\n\n{d}", KERNEL, 10) +p.box(70, 410, 940, 80, "Device model & drivers (devices/)\n" + "FDT probe · GIC (irq) · timer · pl011 serial · mmc · framebuffer · input · virtio-net · ramdev", + KERNEL, 10) +p.box(40, 540, 1000, 60, "Hardware — described by a Device Tree (dts/*.dtb)", HW, 12) +pages.append(p) + +# ========================================================================= +# 3. Boot flow +# ========================================================================= +p = Page("boot") +p.label(0, 20, 1080, 30, "Boot flow (QEMU virt / U-Boot / FIT image)", 16, True) +EX = ARR + "exitX=1;exitY=0.5;entryX=0;entryY=0.5;" # left→right +ub = p.box(40, 90, 190, 64, "U-Boot\nloads the FIT (.itb)\nfrom the SD-card", NEUTRAL, 10) +fit = p.box(280, 90, 190, 64, "FIT image (ITB)\nkernel + DTB + ramfs\n(target/*.its)", NEUTRAL, 10) +av = p.box(540, 78, 190, 44, "AVZ (EL2) avz_start()", AVZ, 10) +load= p.box(780, 78, 270, 44, "Loading Guest Domain — stage-2 → agency", AVZ, 10) +so = p.box(540, 168, 190, 44, "SO3 kernel (EL1)\n__start → kernel_start()", KERNEL, 10) +p.edge(ub, fit, "", EX) +p.edge(fit, av, "AVZ config") +p.edge(fit, so, "standalone") +p.edge(av, load, "", EX) +p.edge(load, so) +# kernel bring-up — snake: row A left→right, row B right→left +rowA = [ + ("memory_init()", "frame table + MMU"), + ("devices_init()", "FDT probe, GIC,\ntimer, serial"), + ("timer_init()\n+ calibrate_delay()", "tick source"), + ("scheduler_init()", "round-robin\n+ local_irq_enable()"), +] +rowB = [ + ("rest_init()", "first kernel thread"), + ("create_root_process()", "map __root_proc\n@ 0x1000 (EL0)"), + ("execve(\"init.elf\")", "SO3 Init Program"), + ("sh.elf", "so3% shell prompt"), +] +ax = [40, 295, 550, 805] +ids_a = [p.box(ax[i], 280, 235, 80, f"{rowA[i][0]}\n{rowA[i][1]}", KERNEL, 10) for i in range(4)] +ids_b = [p.box(ax[3-i], 410, 235, 80, f"{rowB[i][0]}\n{rowB[i][1]}", + USER if i >= 2 else KERNEL, 10) for i in range(4)] +p.edge(so, ids_a[0]) +for i in range(3): + p.edge(ids_a[i], ids_a[i+1], "", EX) +p.edge(ids_a[3], ids_b[0]) # scheduler → rest_init (drop down) +for i in range(3): # rowB flows right→left + p.edge(ids_b[i], ids_b[i+1], "", + ARR + "exitX=0;exitY=0.5;entryX=1;entryY=0.5;") +pages.append(p) + +# ========================================================================= +# 4. ARM64 address space (standalone, EL1) +# ========================================================================= +p = Page("memory") +p.label(0, 10, 1080, 30, "ARM64 virtual address space (standalone EL1)", 16, True) +# TTBR0 (user) +p.box(120, 70, 360, 500, "TTBR0_EL1 — user space\n0x0000_0000_0000_0000 … 0x0000_FFFF_FFFF_FFFF", CONT, 11, 1) +p.box(150, 120, 300, 50, "0x1000 __root_proc trampoline\n(initial EL0 entry)", USER, 9) +p.box(150, 190, 300, 60, "ELF text / data / bss\n(per-process, from init.elf)", USER, 9) +p.box(150, 270, 300, 50, "heap (brk, grows up)", USER, 9) +p.box(150, 470, 300, 50, "user stack (grows down)", USER, 9) +p.label(150, 330, 300, 120, "Each process owns a private\nL0 page table (pcb->pgtable).\nThe MMU uses TTBR0_EL1 for\nthe low half (bits [47:0]).", 9) +# TTBR1 (kernel) +p.box(620, 70, 360, 500, "TTBR1_EL1 — kernel space\nbase = CONFIG_KERNEL_VADDR = 0xFFFF_8000_0000_0000", CONT, 11, 1) +p.box(650, 120, 300, 45, "0xFFFF_8000_0008_0000\nvectors + .head.text", KERNEL, 9) +p.box(650, 175, 300, 45, ".text / .data / .bss", KERNEL, 9) +p.box(650, 230, 300, 45, "per-CPU data (.percpu_data)", KERNEL, 9) +p.box(650, 285, 300, 45, "system page tables (idmap, linear)", KERNEL, 9) +p.box(650, 340, 300, 45, "kernel heap (CONFIG_HEAP_SIZE_MB)", KERNEL, 9) +p.box(650, 395, 300, 45, "per-CPU kernel stacks", KERNEL, 9) +p.label(650, 450, 300, 100, "__pa(v) = v - KERNEL_VADDR + phys_base\nKERNEL_VADDR differs per mode:\nstandalone 0xFFFF800000000000\nAVZ (EL2) 0x0000100000000000", 9) +pages.append(p) + +# ========================================================================= +# 5. Exception levels +# ========================================================================= +p = Page("exception-levels") +p.label(0, 10, 1080, 30, "ARM64 exception levels: standalone vs. AVZ", 16, True) +# standalone +p.box(60, 70, 440, 420, "Standalone", CONT, 13, 1) +p.box(110, 120, 340, 60, "EL0 — user processes (init, shell, apps)", USER, 11) +p.box(110, 210, 340, 70, "EL1 — SO3 kernel\nVBAR_EL1 vectors · TTBR0/1_EL1", KERNEL, 11) +p.box(110, 320, 340, 60, "EL2 — unused", NONE, 11) +p.box(110, 400, 340, 50, "Hardware", HW, 11) +# AVZ +p.box(620, 70, 440, 420, "AVZ hypervisor", CONT, 13, 1) +p.box(670, 120, 160, 60, "EL0 — agency\nuser space", USER, 10) +p.box(850, 120, 160, 60, "EL0 — capsule\nuser space", CAPS, 10) +p.box(670, 200, 160, 60, "EL1 — agency\nSO3 kernel", USER, 10) +p.box(850, 200, 160, 60, "EL1 — capsule\nSO3 kernel", CAPS, 10) +p.box(670, 290, 340, 70, "EL2 — AVZ hypervisor\nVBAR_EL2 · VTTBR (stage-2) · vGIC · HCR_EL2", AVZ, 10) +p.box(670, 400, 340, 50, "Hardware", HW, 11) +pages.append(p) + +# ========================================================================= +# 6. Syscall path +# ========================================================================= +p = Page("syscall") +p.label(0, 10, 1080, 30, "System call path (AArch64)", 16, True) +a = p.box(60, 90, 200, 70, "EL0 user code\nx8 = syscall nr\nx0..x5 = args\nsvc #0", USER, 10) +b = p.box(320, 90, 220, 70, "VBAR_EL1 + 0x400\n“Lower EL / Synchronous”\nb el01_sync_handler", KERNEL, 10) +c = p.box(600, 90, 220, 70, "el01_sync_handler\nkernel_entry (save regs)\nprepare_to_enter_to_el1", KERNEL, 10) +d = p.box(880, 90, 180, 70, "trap_handle()\ndecode ESR_EL1\n(EC = SVC64?)", KERNEL, 10) +e = p.box(880, 220, 180, 70, "syscall_handle()\nbounds-check nr", KERNEL, 10) +f = p.box(600, 220, 220, 70, "syscall_table[nr]\n(generated from\nsyscall.tbl)", KERNEL, 10) +g = p.box(320, 220, 220, 70, "sys_xxx()\nSYSCALL_DEFINEn()", KERNEL, 10) +h = p.box(60, 220, 200, 70, "return value → x0\nkernel_exit · eret\n→ back to EL0", USER, 10) +for s, t in [(a,b),(b,c),(c,d),(d,e),(e,f),(f,g),(g,h)]: + p.edge(s, t) +p.label(60, 330, 1000, 40, "syscall.tbl is processed by scripts/syscall_gen.sh into " + "generated/syscall_table.h.in, giving the kernel and the MUSL libc a common ABI.", 10) +pages.append(p) + +# ========================================================================= +# 7. AVZ domains + vGIC +# ========================================================================= +p = Page("avz") +p.label(0, 10, 1080, 30, "AVZ: domains, stage-2 isolation and vGIC injection", 16, True) +p.box(60, 70, 980, 230, "Guests (EL1) — isolated by per-domain stage-2 tables (VTTBR)", CONT, 12, 1) +ag = p.box(100, 120, 200, 150, "Agency (DOMID_AGENCY)\nowns the devices\nvbstore server\nruns on CPU 0", USER, 10) +c1 = p.box(330, 120, 180, 150, "Capsule (S3C) slot 2\nSO3 guest\nstage-2 isolated", CAPS, 10) +c2 = p.box(540, 120, 180, 150, "Capsule (S3C) slot 3\nSO3 guest", CAPS, 10) +c3 = p.box(750, 120, 260, 150, "… up to MAX_S3C_DOMAINS\n(2 agency + 5 capsules)\nrun on the capsule CPU", CAPS, 10) +p.box(60, 330, 980, 170, "AVZ hypervisor (EL2)", CONT, 12, 1) +p.box(100, 370, 200, 100, "Domain scheduler\nsched_agency\nsched_flip (capsules)\nper-CPU current_domain", AVZ, 10) +p.box(330, 370, 200, 100, "Hypercalls (hvc #0)\nconsole · event channels\ndomain control · grant tables", AVZ, 10) +p.box(560, 370, 220, 100, "vGIC\nphys IRQ → EL2 (HCR.IMO)\ninject via list registers (HW=1)\nmaintenance IRQ", AVZ, 10) +p.box(810, 370, 200, 100, "Grant tables &\nevent channels\ninter-domain memory\n+ signalling", AVZ, 10) +hw = p.box(60, 530, 980, 50, "Physical GIC · generic timer · UART · RAM", HW, 11) +pages.append(p) + +# ========================================================================= +# 8. Capsule split drivers / vbus / vbstore +# ========================================================================= +p = Page("capsule") +p.label(0, 10, 1080, 30, "SO3 capsules: split drivers (vbus / vbstore)", 16, True) +# vbus split +p.box(60, 70, 470, 330, "Split-driver model (per device)", CONT, 12, 1) +fe = p.box(95, 120, 180, 90, "Capsule — frontend\n(S3C, EL1)\nvfbdev / vinput /\nvuart / vuihandler", CAPS, 10) +be = p.box(335, 120, 160, 90, "Agency — backend\n(Linux, EL1)\nreal device", USER, 10) +ring = p.box(160, 250, 250, 60, "shared ring + event channel\n(pages shared via grant tables)", NEUTRAL, 9) +p.edge(fe, be, "vbstore handshake", ARR_D) +p.edge(fe, ring); p.edge(be, ring) +p.label(95, 330, 400, 50, "Each virtual device is split: the frontend in the\ncapsule talks to a backend in the Linux agency.", 9) +# vbstore +p.box(570, 70, 470, 330, "vbstore (Xenstore-like config tree)", CONT, 12, 1) +p.box(605, 120, 400, 40, "device///state → Connected", WHITE, 9) +p.box(605, 175, 400, 40, "ring-ref · event-channel · protocol params", WHITE, 9) +p.label(605, 230, 400, 90, "Frontend and backend rendez-vous through the\nvbstore tree; the state machine drives probe(),\nconnect, suspend and resume of each device.", 9) +p.box(605, 330, 400, 50, "snapshot: AVZ_S3C_READ/WRITE_SNAPSHOT\nsave & restore a capsule's state", AVZ, 9) +pages.append(p) + +# ========================================================================= +# 9. Device / driver model +# ========================================================================= +p = Page("device-model") +p.label(0, 10, 1080, 30, "Device & driver model (FDT-driven)", 16, True) +a = p.box(60, 90, 200, 80, "Device Tree blob\n(dts/*.dtb)\nloaded by U-Boot", NEUTRAL, 10) +b = p.box(320, 90, 200, 80, "parse_dtb()\nwalk FDT nodes\nmatch “compatible”", KERNEL, 10) +c = p.box(580, 90, 220, 80, "initcall sections\n(.initcall_driver_*\ncore / postcore)\nvia ll_entry", KERNEL, 10) +d = p.box(860, 90, 200, 80, "driver .init(dev,\nfdt_offset)\nprobe hardware", KERNEL, 10) +e = p.box(580, 230, 220, 80, "devclass_register()\nclass + fops + id\n(fb, input, serial,\nnic, char, …)", KERNEL, 10) +f = p.box(320, 230, 200, 80, "devfs\nexposes /dev/", KERNEL, 10) +g = p.box(60, 230, 200, 80, "User space\nopen(\"/dev/...\")\nread/write/ioctl", USER, 10) +for s, t in [(a,b),(b,c),(c,d),(d,e),(e,f),(f,g)]: + p.edge(s, t) +p.label(60, 360, 1000, 60, + "Drivers register with REGISTER_DRIVER_CORE / _POSTCORE, which place an initcall entry in a dedicated " + "linker section. At boot parse_dtb() matches each FDT node's “compatible” string to a driver and calls its " + "init() callback; the driver then publishes a devclass that VFS/devfs makes reachable as a /dev entry.", 10) +pages.append(p) + +# ---- emit ---------------------------------------------------------------- +out = ('' + + "".join(pg.xml() for pg in pages) + "") +with open("so3.drawio", "w") as fh: + fh.write(out) +print(f"wrote so3.drawio with {len(pages)} pages:") +for i, pg in enumerate(pages): + print(f" [{i}] {pg.name}") diff --git a/doc/source/img/so3.drawio b/doc/source/img/so3.drawio new file mode 100644 index 0000000000..d4aad28a5c --- /dev/null +++ b/doc/source/img/so3.drawio @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/doc/source/img/so3_architecture.png b/doc/source/img/so3_architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..443a8ad32b260c2b8b9e7f1e8419023bcdb5cf75 GIT binary patch literal 104918 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 z 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 P-&2rPeO@g6>iz!$cCa!` literal 0 HcmV?d00001 diff --git a/doc/source/img/so3_avz.png b/doc/source/img/so3_avz.png new file mode 100644 index 0000000000000000000000000000000000000000..e94c5ea080bb6de059032345b897c20b8b1b722b GIT binary patch literal 130082 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

BoT1RMjXA^LOXA^&I7j{vwc&0X8WXj`CK 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 literal 0 HcmV?d00001 diff --git a/doc/source/img/so3_device_model.png b/doc/source/img/so3_device_model.png new file mode 100644 index 0000000000000000000000000000000000000000..d69b9917868b31ef0c4f356e0b96fe39f799a495 GIT binary patch literal 99965 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

yrAVZDIq+NABa|0#UA~v@1VJ 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�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

c*5 zxPRGYM2vwUaD}djdw0y#!5+m3oLhiWoWn_77LitfI3Ul67R_&6q6T-hWgBA_Lbos& zO}+)9fRd|N{eW}M`p%cFeXJ2$X@eQIdpi0(=dR&Q4|c0@8}uVLuBHbK}2ZUha%JY5)Tb87R$8D?CiEnrE>`;mz+)s)ilK2g0%GbTHcNc zTSL~vU)L*;Q*QL;H)9j#a)uA!7ebi?^^MNbUmush#z zWroKTJv^#^XT)k0?)Y~J@M_d|0+I#Mpj@Pd8})IYy$@4-bPW?AXCO&(<9!ycXY4`o2SJqf{(3` zR>bz_=4rf|IL?rf=^m&S@ks72{QZWI-Jw}ijM%d;n4w~yOJ!>4EvsL9yR#@TvDLgZ-wfRnX7wcvZa|Nzv7Ybv663-U zJ--7+^2uG4m2e~~qT~*sU~OMsHPH$aZx5Up&}>Op$(i-8PiJe19c#!D1Sy5&z07@Q z_g(1C)exaNirOW9;n193id&L-(R>O)W}P&oIKQF!VjXM%BLhF zGgxkKuoVBwg10|0&m9)DOJ~FXIG0+Il-BsN=mr~`$mz#}8IMca-4vZz5@Ubh3ap{P zj8NLlXx5!-^)2W)#I>OZV{v31dUlidn0&xj4f4$H0@@5}lA!Aa?m90#ODEzq7r)c8 zs%*|J$fw5_-nZ&qcepBb1ipSEi+SRjBvN7yJY_M8EmYK*&+o<2lokWtubWrnQZktg zA*_0*hcVa0oMR}wJacVxeMj0-`|5m8LI{)LOOhQlaX7}Hs8j6J9)-SpV9M>1P2Su$ z9V2N5hY zTg`Be%raBV|94ZV!nkbJWh~ks;@wwF?uTD-oz$=NBKBvxUz-aoSTUQEuvuM;bOs*; z8xU#d3;GRlPr%+%~CI}GKkTT=qGe*YFa*{ z%YmZ)#QksHK=c7_Ki_7W9({hM$8}zVoH5wd?=YF@dZv86<+SMKu2^05K~E+whEP*o zobkTskqy!&S1Z8WRum6kg&C@hC`^C``E+sGxUkXP9lp1KnA$eEqole7$p5#a#AEy$ zEE0u~v_NQZYtGDIXanOsyh7aMsBZ-es_v?tl37WL6izR5uh~6i1VQnrF>eLvH((5N z(`dkC*nLvvsLfXO#WQ*V4%^NaxA{onesz}OZyq2)KwFXpjws%#^jvqG$|mPpJ&L*y=4%PLmon{*CP1}KB z%8PVcg%2U|2bN4h(E3^^*N7qq!c@x zaMvt!B}x#gI3P<+yK}4nqkibHcFqh6aw`JRn}8F1&&)d2 z=$C%jhBCz)_NfqhHW}ynVn5=0q$37B|42hitJ)IAH&GtzFJ}FI6*1gAG-*0OL`6h8 z?R$G>P@aD2@|EpJ&wSF9J36ml@WErv zs^JerEMTUg8`KmvyLrPBr$~Y?i@WL3yX!fWk3XAN86kQJd#Q38239U z8-lRZ`$9`vdu|>&?J>W50C09G)DQ=-#r_JSp6e_nq{~+(wlGvQ=Q+8eoAjSF%U>_^ z1x|NA5Th=SH%F6D3xmk0=>^ILn>6~8ey8QU++7;ls{Ut{k54UlnG+fP{QyrbttxZ# z9^+2s$z+Y~j^3HhT=)mrn)GlS3>%=WXTJB``dB;L9DZ&pA+fv}0*(}ZU5sunX!i_N z$td)^*VcPG=PiAl>&A8NCCukUck<-~Tu!+=vz^|Zw zeQX_6?S%r9*|-?U_s&%8fs9Z^FQZa%t;zpXln+y@UZ#livyM;o*;0EQG~1%j9=Gbv z(WF-{Fw`19l?oWT+u5;N?|S9&X0rMI`LW47f1-KO)*6dA28KacDockFOH=O!QuAsk zt5}fP!u8c#PvNT0d9H-B$2(4D>JUpvKh}-fnSAnB=glgNG=G4p3aWae$hqEbRS<|-wk{mI?_p2$DqQC$ERUq z;n6+U8>^`wPPVHE%#YHgSd^>1G0b6;;2ZdndC_zzKG-e;$_&f(aJJB6jbULl8>~AV zZAPDf^eOCux7^I19&6p<{~;utn5kmuurYjeikDr$tpDbbCs8;%dx((pgY+|G*x75N z>4KZenu~-lmJ_qNj{2>|+;DodEu^~hunyQmX4>t%n~-}zAP2c~NZ$*K#XdSpb_zILdSCJ`Ux;AFb+S)hf z@ZeSBI8~d?DWJx@D9o|BuV#uCtox4lVgklLx*mmc%R(Uw!@-PC`Z?4<1+Ir@aZusv zhiY=K@Z7+0oZw64@!34K(O0Zh6N&-~@x1&og&+xx3-daK(12Eo9l7Kl)C-syFe3mv z-;aRiWB5wcaj9c~+!94R&=pCIGr|i&%#u7livw&bnJOh;)~K?FKXzidd>-sq)Gm59 zcCA|74TA7X(P64XdJ$I#Iqk1nK7hDs{9c;BE9FY`P~HZF-Nt`cEJ6H=L_y_l^sdkK ziU#G>i%pG%-c8)AQ!YCbdQgVCs;iyh)p9chf+I8=omlupOByh9HBt+O>g&v z7)YfIb)>IDYy2ZxrFXzc{Ibq#6I@OY>(>o&|0dssbK_Vi0Z>+y+R zWc{PxHj0=lpp{RwDk`;lxs_iehCw+yA)k@xON9;82@lu~eS%?u9eOp(!%5Sd+>Y^e-f zc|9d7D_g%KUTJ+L9(xsE#|^6p!GIInb!~0z!|f+WynM4?uY7)-;;=%*Xcb6_bd3$Z z8o7HA2!RqWA~Hc=F{(uE9?rW5hZJc`h|m$3zXP~`epI7m_|hR1t^r#hdhsv__4XN-U}xxL_{!rq45@9 z3}#-|D3PomeiI#%?d3DTsTSQESEI{q&@7I#B6WWS_?pB*kG?RdYSG?`Ij>+~++{wd z5qopI;`gIRgpl-#FNAt&V9smJ`L3Hn<&CwM_%DFAKC9gs^tl&N#| zigkw=II+XxzL-Sa$`{fXiuw6<9~40~%T)fm3K|$t-Os&Q@Y~+Ke^r595D*X;Mj{ba z*kor-o*rdE4a+3~!D|;)b6wIM3%7ssjV(PZj`CUuCW9wDYlu(nEESNPS4^UN4&%rq z1!PJq@ad}a14ZsBV337pd(F}P+XDxH))+j+BxXc8EgDdmwCdlufP7fHbt<4cskE^n z?uFsq8EIt!E{r<2K`C$sEEK<>7%^Hh`!Umt`}lNcYSeV@FyS07$Vt;&b)n+3t!=DH z;F(QtTn`exyw{Z^u?{diK;EyI2Ey7x!|p59Yc9NmQxq8EZJ09vbD_ys%+;{QkYq90^wl>5Khw~c%RinEwZf)3mM_VUJ-5y#4mZNp}bSt_l9RuJBs1N|o=)SLD6IZH#Z?OX&phLCDz_P* z2++i`SimL5>PmM{@`P0QRYTWXNC-bQ^-Jw>>j&Z`rp(YD#U4`Ms@Ux`x} zR%aALYAQJhe2m8)6!W3LNmFY$HW{JH@w6u$LIlVNJRoLezG0_^QM2l2+t~+gMy7i* zv~53!9)V;Q5Q_(SW_tk>4Vu#z?zHq;2<`yR$g(G0Ycc3JAjR4v!;Y(CCAGD8cmxxG zvG45cT;KP~c}lYKVereNe(PDP3Ar0Fak@8zjuDSf=eez&AUywJ13>4h|8apU&$6vv zL>?PUoW>`lZf^QCOqy^J_5pUIT+8iOttd;pxL}x4-`^smD(KwVK@9ONNgNb0X@4NE zS_Abr+q0s%HPm-%7k5G>d;2OOB%8{Q;*btHFDR|^AwR0jFwgqO5mURursGYJNO4j&V1-Z^4BUnVR`jxB}Lw1odUVB?>~rZ z%JNHjI5Q9jCDhAHe^tnCS!Jmnl~S9r0kUEDSp{o+B|o7v{pnJ?W{}IyY_RYFD1~rl zo1Mt1;@#OQ^LpUnAyslA3@R3^Uy(cgzdWMw3pH-9M2I6}8%LfFyAqvb~_X3vvAKa-YQ+ zC=4OrkYL{ti4f~J5*m1FatygR`5{6c2#kr2*2v+xlMUEBd+Ws^x?liU@>k4wwMSid z)^}Q2w0kh>LN%x)CMeSA+-nXg${<8CZK4M%q5h$Fl?S4;+~0lyJ5^Y7s0gzUvzEgt zwj_Di`5$XaJUmRWBessu2w*>HIrm5!&p#ZG8J^p4p4QEBc%vTac_IUUf;9Z3E;q^e z?WxQ0*xSBrGVEMjjkei3UMzDgn8B{Di0KQ>zp+Z-At+y+nSD5JWo`6cOMLetW4A`* zAuWlX0c)Qd-B4wxGV-g~Kd11(Ifx$oj7NIiMD;nxsj`O8P zYKd33)%9~P8*OdK{$0;QE^R`0^Jr@GW88P0%>(bpF0j{2;qB-@is}DrW$lj}-N@Q6 zU%sT3&Lhr-z)7k_oFt7+__6VKF+T0L|9yQKD={ed#gq>qtDtCDGj&dr7n(3FjC_^vAdx577ELVPf_GS@v%1}#t9~PzoH&e5) zu<+{^FRm#4sy^S0zP$er1Uc&v0|Ss_=;>rgC6TJC@?n=wU9#1=Jq`Qqt1IZ=Y@}e7qWbAe>K6 z#9{K=;~HPR3b(a-#=puj5lXlB{JdN!G?=|`!B`pB4sfOwdu=F}>IpvGXU4{b#$P|O zio3zF&3wy&YkYi)UZSu{aA;c_=T!l@B8+lpd#$Frnwf=#N?uXA8=a|B)SaPa-&M*h>r_pnbg=NAY#>z=Hk^|=8$M%Ijk1lScpm&G5z6fG{= z)IDI8l*B1Uizq}~F@o=rdJT1=QynRs=g;q@qZ791eUL8bMc(YoGoeQ1{Z%(|Qv-?z zo)gds2~X1HyH9edoEyKdK^Pk`wI#mUEJIxTo!M7 z9aM^yI4-4@`rwxGdwzq;(Rvh*zMG3nxhKhKu-LY#BcZRi_m9)3w@D;Ig?o`ok{p!l zy?OiAVyLv>PXOJEOG+~JD_}W#B%STZy=LOpLWK> zoCOiyzot)ar)8hi#g&yaU_w-lSM6Jc*8aiqV#rNN^1 zAF=*(YAUQDidDQ+zrqccYiIiG2iXwV7)I)f;NCD zyzO^buh2rPEk=B8ZLK+sm&fO_pkQ7>fx^tq_S8^KtbSUkr2G1;4(Sk?F5;gYK|Ei= zVZ_7WdNL3d7^s(H_-e!m9t>KVlarHw#~=9H8-M;OMXy}p20f*UtcI=%3Bim#hpYGA zjfNXYyEApdskrrdamAS%3v8PviY$e9-W>M7;}Dws>5Yuh{NXa3+?%<@W?SAfxd8>e zdgfYI-F#)Zek=EZOJV8_2e^**C;s_$EcD&SLT@?QSN_Q}8}+l|8#0?RUpGEZZINpd zW<&`yAB(JeMg?Luv0EP48b(5{kv#n;X%s7Iu85G=CZXfi3Kj|6kvbl_`5_PwqKo(c zaZ_Cgx`l#%%r47oX=#D*^CF9(%sp3hZuV*I>mw%7j@_0;LxomDrEY7}46I_C0YqKf zy5kk@8~6loB$|z~=qI_=s04=DX~?n1l2Ex*LX2@={Volrh}^(|@<`}8b@kadp&niP zjUneE^Bz87VR%6RZ)gG6j(mB0O4Uiq$!Q(N2qxqQ=y9||yKG5G$wI{j9(+vrC9Nxl zwXcsVi3#}Fj0H;vof4dQd62K6t&Q#SqpBm)%*wjDV)hd)mIH->XN0qy=K75W46TZX zeVh5pGGGh9VqvxNCOA-H??Xa5a7b!n2q$t$P?NR-sqLNI2=y+oXSi8;*ump$UNCUz z%t9S8<&5>P+akWaq?HR+_Pl|Z2`q;DGyKH_X_R7;$_Czj;T`+!{sMF7>iwK8Q8!k) zb*vfKEd~mCDWL3WE3Zty@O=gR{fnzZwj&(9fc-tCuru-@1R zH9a@)O5{q!texw6vteI;*BMUSYa=(t6X|v#)=TdyO}t{#jP4fX8)7pGd{?400>LeN>(+}{S_q}a>-6tFYrY#BGUfZfKxqFYXjLaNvLx zJw!&bjJpx=d${J7xY^s+#8vZE&CO8#HaojUOY`yNlP?Ir9emlB~^}Z!TU2w zJ%0SS-5Y^OJTfDjew22aurjc=C*0W7;`RC)>O0IJ zA*tMhza9E1DQEp7pR4=U3ZLJFc#x#^KVHlK%6k9*{2n={_B~a^`)BO5X{wD*-?)vs zAin$N$M-12BLfaL_5J_Qh#Z|)kSGXADuH!)gpIWA2$V%39_($9Mr8B9L!~qQw^Z`K zqPGA09t7e)v2QXhy*SB-Ji-gf)JmSITc9|+e8IK;m=LC|73IjD%-aoK2{~S zTgl%8aaxsbj$8ZTroaNb6}KpRyuXmSufba0mmzoZe2jZjWxhpMy1X@|&1sLKc?Ytp zuZL3pY&a6``5IRei&w(=4k_X*J>9p0w+^0!kzvr0MQ%f-%id?MSpwAO+|)-56DQlO zOz6}T^lT`5c_|6bqY$k9K|xw?HE;6j6othiN28Hh=tyD5?t@6zrz(`}VFtxX4N4M9 zVrwi6_m(=3x+ioai73m_RytBh;MFNG!|K6JVR5CwD8#yg*>ObWi`XHrdd4hLS4R9u zAunq4^OU#w*i%&O>Liy*Ea~%?KqJnlMn+u?jayG=x-r(&n*KGmDEEF-s317VevH>+ zrS=F1mHe&767|g0?bhe8%mGSU-ASBYZUz}m9j!eou{{>zYF)1EHMX^NSI7>oU=Sp> z@k?HRf-h&1!jk#eeJo?W-1?KkckEhv>!{nBZKGu#IBP-yn}^L%uVl1qol#0JSw_T7bPfe>KUVng5T{?U7bVs?S+%Fx>&8q}EY+~O({%L0{qpsfY@yL% z(dYuRx&H07X@v@VT}Z9^K2tZU_RL6-7Ylj#a4x;yayi;sJeSHOPpeZ##DgT~=cTCv zCZBoqM4c{)UcscM&g8IYW@(9*ZK4I;sO}|HsU`5Rs8JLn`>|HYQ_-4mws9+sx(!vR zrCyyVMUk0|6q7azu{^wtE&QZZLrV)i`&-xoJzQm_Qqj?7+|XpCwbnY`9all-3_rxC z;q-LM|2Su$80n)Z<#M(Os=vTYz3Di>F6rD`^p9ebGC1}&#}ocCou!HW40RCAK`Xd$*~F} z2Ncvc4VP|J&nWUO0zG`2y zE^Kzi6S6;ze1`X{c@#Tr!M!)Oa|3g$gF%_7!|a!|wSTu4f{@TmR)U*@ZI{O>i0&RQ zsVZGF@0<*%Z!0GIH@1CEb$JT;KaxDKBREk}ZU_n7Ob@c}V0V`K%JZFd9^@vTG$Tb% z$7)lhn8Gp`cdO2iCRrf!E>D)qSc1%iFsau$May)oQj9S8gX}FIHkRX5-NiTBX?nz` z*A%iSqho2Rt#H=mZ7FR*S@*g|td_BFZWou=nzhD5X7+olxpJ9N-AFQkMR-A*O zU-bD#LKb3h56a_y(4D+$J-C^%YlqRif9#$2;ntRxD6uDBKG0DrJA|7W@pWxw`dfO6 zvz=1`^^ptQw;cDR ziw2R@bhVx!mXnv<%!kVsD%V>@QznSvEQ6JvBzbIwSCtn@z2#7v+VmSFWyPF$BSSWX zsk*$!fH1YW%_vEp3{k3Fp91H$e56W3K6CfYjC*v~=s^ri^T`c~Q*B~`8+A<8U%p1- zM&8f~Kl@hjq#m5b&RR}=QxJsyXBNmSI_E`^n~%XF@oSYV4_8;u&Sqq>h=#FTBHgSb z5bUk#KbeG&HXk-NF%cG@jAInG)(2PD7Yrzi!5V2m5}$kCXYu&Pk;Ci`H~vI%7n=mLYHIj>zRm}~kO zngKR~JS0c)2BlbM^4kY611VM45HojNXR zv;H2MljgES%QC9$rNzkf!=dJ0F{@`0Rro|6f1=|NAcl;$Hz!|IPJL^95w|6%&vZBtw#!(<=bTNRz2uXm;Cjt|1 zTRaz+k=TuRRFrgELItC?4;Q!>J}B?ki*SDj;zE1rk*JY&$Ou_)2$rmjoyBm^>@Cn? zL>Vv3aho_N<@*FBe$D5Bu5Q#{!!&Ac0B+~JIQ{IYzdx=_1927y z7C7YOMfk=HDnnwsR?n0xp9oQl%NF^)2I z?%NQF1CB2*FQ0Nh;{EC+Sda6n$@jTjIDGpkWDaoHdsaGd>}Sz(U04I; z=$Akq%`6L`&e}(-SRt-MEGi@^N#yDzy}xSSodE>m0**?7Yr;Ze_9C9AKZad8BWz_s zsH}jo+=H?Fh?I+^EvT50P6$BCe{CUyk$k<^&NgjrTxn}Vkl7yN5Z;9mv&QW>4HR0! z^dR`?I?N(+P8|C7m}UY{562Jz2nI;C^|2pI*y{Cczed0>YvnN>PmAQn!6hW{l`mE^ zRgZ@o#L(6yu}q$?okEA1 zZrUc8w8eBJD>S#ZD!ToddXBbrqOwGfu?vqH8yXv3$xHR34wIKnTBC+*{CJ8Gh;>_t z-&Q-6__?{wfPa8n4m-F7tMCv%A|5DzB!X@lP6I>x@S)4(CqIeh29AV#fgth-#Cr$W zHlRh5?gpFy)E^7%NBihcd;)PXd}6CXq3ZYbiAd`hAS7mbunPl43$<^K!Vn`@?|??6 ze~lE5b)AS%5?@oR@nwKP52dSP5;ppjnNQz?GBZUBEz*wWMW#K4AM7#9{8}#B`e2%IgQ5 z;GKZ0m9Pdl7%#94rt7nPvP!=JqVhr9-O0*o9+*y`J%xcF&HsAnL4ZmQx7(ip$KO8Q1Ov){07O+iNT)wf)K5HB00K-Cigq&6kxqFH}Og zKrCf7MM-SQC-SpY36MbID=mV=DEn3*KUP*&kn4G|p39A#vW#Hi^wkQMgCn0Og+qEr z9kg%Tfn6c3PT6-T2*Y^cJ_4`^HU0qs*wX2Apay_;BF|YP&s=#b(|+{U$J3%tvyoe(wpcm&W4naRi;Pm&<9gY%lG=mw(-SP$||HJA7aI>e3cq#@5 z2jRK7Xnl0Up?9Im3HK`2`^|x;H7GFa%6?q4ys|=Y84XPIgBiA^meMrm>RR{G(=mlM{HK2nL5fQGg zuAbXq5mJ+25I_3M?iL@}w|c9lXcNSCc5)d+iCgx>U8b z-H6f7lxa|`9Ce%ui43IXFvL^1L=4COEhrA29;t{C144ZK_{)jJLDOE zJuEt#P5Tz`A7C5nneFel+uvF%f>k{aRW<34pwEL*h=PEGbV%DMrF5sHlyrlwD5a>hC`y-fmk&*4acJ-1X8QD%dGP12V zcW%btJj&gE0sq-#uPAkaEVbs?2pQQ4vTK*lE4xIDb((4)mg=6G-d1-y*zo7Qx6!9t z47n7NTl_jhPG4aRX1elTJ-SZ)X22OArXRFgmb++WIP^>J?Unh}a+%`5r2_{J1kM(O z483um5P!*d@8`_lqNz+#(R|T-_kA^?8#TTUzv}V<3*n1XjoBS z-_L-iq?TNJQzt4)n?gEKr?TtM{QRo#@7Q0Z6WttVQXMwaCgn#vPuk&Ozka7+$Zej) zM1QIMlU23OF)WqeM{Kr>l9OqQo_$Z-g|Um zD9W3be7n*<#rPZVN=izy3F=S0u<$ELM!B1N68OP?OzPcISCLs1hU z%xBXjrc^V3r8Uzuz>N0qr1yr!L>?3~-qBr>u)Lf>NL!W~$z zUAy+fC#|=)^cn7;E8p4Xk#K`gQOH5nUAuSRs*5g7P>NIRTv?j#!vk#Jy7hzo1MCJ@ z(b5HK(+X<=i{E0&r*#WlnD=GifhuPFh43`(i+wF&Hss}gY;2V9Z=patmFHY^xw@2!k z(zT;6`2+?YNMHRsS-k%UZ%N607Z;b8oI09vt_x$W*a&|*Q7Q_Gla%iBB*%%4+?j#O zIQw`!4W~{XKcXyej?c7a>-O!jdgS-N{=(9WI!~0n)Xct>o0qq;yj;G$B0fIeydl=A zHG?VTzHBJ(0I4Y{EOwyc6?-H_d4}rOd)vYVtyb8io&*GJjHVT5q+TME6>y&Dc<^9r zdPls%djx&q3Xji=B1x?1YlAm)8{Pb!EAyj&7bm%P)N+F18 zfb9T1{YI0TUW!KMm1GIe6^G@SfthUUJ$v?qHng@bcYAL%@sHQNm-^{X$7dbfQRtqd zep>Ovldt-Lb+q#*jtW|ybs7s%|McmTZuYIFxF|0+RZ~Qn!MCmH1)hHw0s{jNGD*`= zx75~Nr%JmXC6T0>!aFe2z14kj!q3;2-lQK7cyyzQ5n{_;$hX+xRHjg$o(DfXraM^a;X5KDl% ze0KB0W1Esyl2pz2>O|{SPW5~@mc87Ng~jARuvET2gU{Kwd$+Ve?2C|)(|Ub$-1=WC zi|8U=zEnUOaqwd2yn1fD;RHaM|K_GOHr<^*0>*72jRh)~D!4!*jtTUMnZn_R;Y0 zFalrDsx8Z~^r@hr;KIVfcw6@0g?5|EwQrIKMn~Hbd0_$;uQ@d8+uHJU3*E5nI@z~W zR&K7~uJWV;j^lLH1as*Xy3JqlKgL=S>$R%rxUs(WoKfnNSzWaL*L%hlFPE440@TuU z*Lq9$^l>WHKiYe=e>_p){i9fOWR9`MgrLaC$cGOfPM;7)5~Jlcx{5`?|FqtoySsfa z?GtwCIOU%K^pg#7*Kv1r$BtpKm6Fxd5%JzDBXPJ1IScA($BAF>zT*t5z2lbZg{ zjbvgCmzI_s7V?l5gt|Q%kcE)b1}cLmzweh^?GL(cQWZi$O}(h-Y>ua!vBp`_TFYb% zT{jc7?l^7zwz#-hmP6}P^3~P80LjKGuK5&?sXupDq?pCTv>UQoT3V1s5vjF5e#Bn! zqh0&ExHvyAH!4ke@L=rqsIGSxAM+Yl9AZT&S6q*t=JridQZNp9}jB~K`DgX~(L zEZ>N^YHMqwCJMSQSSt8dwSKnkdwc%A<|oUM;o;M7+?!K%e)=A2$ilnT!>3EE55MM6M==F3$Hn{cl-CJhuMpkdiSWQscC7ozhIKVmiJb274sWc zqzXL^4{yh_v&ct;u&Z$jbn0_|2-}d{SPr1&($2BgSqP>8HnPHjBFj`{5lv7_d-GNQ z?Cn2yWD{<@yPzp*-SY8#O4Bh3kF$}P%4xbfgULGipJcl~+rF1|c6JV?pmTS3@1$sa z{Zr3t`Lej9on1!R?A(YFd(y`EUXSVC(%{0Q8KTcpQmkBDK8tY6;I8F_zx{f5aexy! z$bEe^*Y?dDarX+b!|bYue7d^2NS8Yc-PHyc=jL9Hc&^Ot+Pn7*GLfvXBkAR{XEK`E z)wBY)p4^uWb{VSLoi*001w*IyGzt* zEYN*zc_@mv&|##0`~CCdDFUW7$3poeB)S?J_)>n!|6Ld-P=g00YQn4Ea=-Xf5b8gK zR@<^IMz(G~bLLF(-w9F5sCyq#;v9~<-QB#+X`&;cJqBl(_j_Z4()Eb51{N0KB$b~( ze$eVUG9NGes!!bZ?n9>oNxGMxQLT-{MJaY#puC&wL_T{~DY>zFbH#6EEVH&zhOcHy zG2qH#oQhQ8F0Q{Rjq@h?UTb;9#onzM#(tH2R&D%!NjvxKv1s}DZrX=UIsW$O?=u2a zqIUgPJBzwK7j-oCHd$DV`cSgaM#)#-T;0+C_5O|#52@so6arMdeEFe0Nj_49w-)h* zQ0~Yumg(yRXrZN~ys7=+?b{PVLOIH{X2!+>t}{lkKLyJoYxec=q}c)K63c*d`2mPu8eJtz(gjo3sMxFbVzZk$hFVy5a|wG z+JccTks7B}5?^Yow%7Fb_O^YpVt-99=JID~DDL>z%1RkdA+ulSI#2Dlndnpb#-+}ar^e|lOOd(m|N6;DF6O=zn{=}XTF-><&m;CD!m-K zy1D=rJT)fVG@3cqg|~aYy?lA-IqJbf#7iZ6Tc+vt_gDNHSv|NHb^Rd#$>=AO<@Xf4(U)8V{k^kOJVkdO!xupUZ5;lXkpYOEO1`tSw3L9#xLv{VJOQ3QHzfOp zW&e`WQed%~v(j;0cadPb3f-~Izg!j(?DoKEc_qLYIQV5t&cGd`I5z2qm(#-{BE(SL z?{3)<=5=^*rdp^we&c$m{9>#8{CA|Ysjv{yR3M}-3+%n??BFYbpf6v}Jzob7Dlb8x z$K|Ds6sq{sOQsGU6Lqpo++hw7(Kd6|y5sEp2}CXR2*6JLURp-IYp?k}KMB<&-~JuD zgmpPX85t2_QWFvS;)S7h*-&j%C8q!&Bb86+aEc)}%`rN<0bL@uSSQiAUfI2S_rZ~o zIaP(Di{U7HpKlw;HB`K0ZHT_S2gm2m9kS;{#^4Qq{P^)iL0Y|5X;YI*=b?iK8R{J` z>O`Kkz0fJsX=G?~Sm)>(z-j6Cy}NfO0$Rx0G^a-9sol5{*rs{Q#%6MSoDOFSpazN5 zY$JGrsP3`W^K)|rwtZK$wL1W_Bv*zRJBx1F9G-U_K*_tbbq_Tsw(2HsLoQs<#}Xwp zxD}NWYs#u&GQWi47$j9>+xJM8OCh?X$n!5!>@0}DXmgrPTh_JlrI@ZJz>bPJX1TDX ziZFB(dA7eaefLNl_u_(TO;Gb{J8#v>XGBbCe@db7}{= z>*U&9cCyIK%F<3Ze0cTx)vGjOE+0E$0B&MC;sKqLSVUZ=-f~_XJnlzx^oHWbiJhTK zs)@E|d5LQa32NHYIRLbPK}KIiO&38yLRDsCnhFH{s7S#&Q`&*CPHxGKY#Qc_2$b`Q&WMu4vnx}f1{kAj|VD!8Q^!s zJ!v?kORH3$yG((p^vjD-305+)FYFA-;5Jp)BHPYeT~g}K=K?D*G>o1uVt%CZ$)-D1 zP*_7lBOyhebiOUi{3bUI;)6l;vi2pHx#8z+UN2SEjR&hjdDE{2G2@vV6dOP_`wW7M zP?*xQuRdo8I4*wBCv;Cz*+ug()dCk=okLPq;r90SK_j^SCB`C=2hU#08657c9Aj5Y zeHo5C`)=QK7WQQR4oMe3A|@u*&zX1k57imXQ$nq6ZHeKHJVpF+`5wy|dGp|1YB`C) zR0j_lT3MYD@|-DWA^G?8^yKYwso$Nnlktl0FY!^V!J#vn$|k?Eryf0eRPioJI+!yu zFz`fu)AHSw#mTh%%h=iRU+?bc=l=zEz&B?a9+MwoSk%lk@v}|?e<=iE#KXjG7;a9B>UfzemF6`F zFxptG3{*gRV)Xsd-k|VC+X#nlaNE|lp8EU$HZJRUe@!y^MXpT@ zXL7W88z5Jsg$=@9lO;tZ>9s5uaI1$$f!mc%7wuc>mxWZyk=^=Zao*y?9k!$;gf~i_ zxD~JHyz4?Rr%wNGu%}B`u2jh7)tUm$H>%h4mj^Yakf>GHB59Sc(z7U_x-8$=5GfIjgQY;H<#V`g$M{rWjw6%d>s!gp zLwRmq(cD2{@XDrmO*OVGxV34j_Te6CY(f0r#GCv_j-I{!R+HS@+gteeF91^`x5000 zdA3jG--xjaiF>b$=@og{H6*Ge^)okoXVddub4(nnF6v?%F>8!}-XUX^TQk?eX0C9Q zQ$Q~09oPM@Zx>8%J32Ov$GdCj7V2c$l)8?D>fBg&RLWdpFYWTW zLG3H{;OPj?9}Whu$P;*6_#UZXKUwS((+L^ZAj!~6dU-5O^&sOM((+!LSA%-M^V81GZiZUV<0S2|c8Fl0scHpPNcpJrLjX>O zj-V8Fydhh5?1NDAWT3!x)(ZzV^lVX^^xrUX*O^ls9AndcKkfE~6ICw-kVnHYy1&04 z<@w`BZrA+Acj+a${p`!YKS3iu__X?Kqlyuad9kkNg<_sg$Lj%vPe%yb%d$@0*|f!% zvWd!roju8EylsRR#X^g-l36F42EZp#Gn)kLrVWsV)vEM4<||;?GL_TqMOg_*9g9>4wUjEe8xz4P($ zAvthx%?~?fzKZu$dO%$M>lUW@28Oox1N0&%85k~bj<&TbF;ym*YeK#8<1<=*Uspbt zlYttUXWkDgpO{)voR#B@MV)@c1!HKqPb~ZNY zed;fF0dsDw&ek>=v^FSWCG7?(dH}$TlsCJ>7BY+zakKpl-r&VyORJ&cd@VvIivqxV^?@b~| z_xROQ!$pTiuFk)UAJ0Yo{L%L)!N|TiGjkTgm{F8ZSy`Fm=x-nEt=slctxkR4PlPP8 zf=)>^v><#K0`h};A%5h#`_xDS1Pd|;7k0hkuR>po{#^{X) zuU@@^N(^!bj)-*}b?|>HAH_Lx{KoCuA1&{AwMwP!N&2ud>^DN&+7RWWMScI8$|HkU z9NzrjlDyd+&u`-~dY#AC$B)gQPN{+9eEp&q^U}-GQ>OinwW1z|)ahTVNMt5_l ztE-EtLN4>VufFxiVV zZo#Pcmg;_?`l=qV*mJF*7cZa+nUVvbuULrc=lITLPlPKb|xSPo>Us; zz0Nv22Wf&*>QiQBP^ML}Akge_F_$TeCkZ&LgOE*d5(|Cyj{cByPuRZEpZrIJ)IOXb zSP|Z$$o1x#ZL|o>jYo~mJwsKYv*50@#gFKZ9C7V0dv4qJ$aOm$~CN{Q2)f7!W zlPZ__kf*l$GcP>c9TO(ERxv8UqL`>Ko;7i9#r6=Ll8Eq#(b=j}Z~?uAkXCT}7ZDN3 z3(tVHTp|gXn{0M!c2;Jzx>q@&!7Q$#v(q!$5bH%cy+9z2V|Umuk{;l=(Z8;~hO_wN zer>!%6>2qP z0S}}4KRpCdzVlQqvtrz?a(>4wepWU%wx%i&pv+?)-4zwL06`#e`TO`#_<53yi=si3 zpdpkCm1t#|*oKQMAv#+>l*dMlyp+k9BP+z zajOG#C|-O2W5VDtuBfm8h6L4fiGB-)36#X8TcGYN45b_NN*M`*T_w@znAe_t`z9I_ z8bbL@Weeh=c0jaqg<$+2tvt(iyQE|>w8B`o+6Ff&Bt-?a(qMl30Nq8;>q#^sdFy+T z9At*x4U3d~ke07JMf+2!I%ptZFx!*ec)6)b*~U>*?=`4gMT=G_uQ8GgLdOq9=GnCZ z-A||TYTr%tol5x1*YGzY=HlAN-2D8w4W0GgXI#2#zBbIAEFIszee*B|5SkSD2ZY3U z$%BTMR#v)zyknd+z;b;zmHhna?&1>i`6eiK|7~4DG|e_a zrZgmhff@8w1mu)V9oJEc?XbEj+kPn=^~Q1cYxj0ka+PV%u?eo!$#+_tspLXQVAGqE zAC;SuJ&TMaqFsA$+nz9f^WHyyPFO2zMw0KQ=1i8ac~1JwZ(eAg>aTd1p58`G<<3OY zQgBSo${UjSbv^8E9C8)TGWHd;eH;|H{=+rWRcEC*dAX}se~qi47DBwT8%$savd($mw4cpNc?TrP#H6ciK?NpNnY0l%A~otr`M%kT4}&1%W&&q+lIUV@D! z+PQW3A#43C6 z;6YrvpM>NL#SK;eR8eN=X;X-^jYYf($4?3iYj`H3CBx-Tb(8dy`P8ZYru|E=75mho z^fk!&ZUrT8`_}<834Hl73p#pkTlD2;=H@rF$Vx*IM`O z+l88eBF9nHBQ+!F46TU1Mpp(0+fJpXjN!wF4^PTZ8coaQ`^%Dkr-WPDi2(VdS%;My zP<3`*v=q}Y`u9~Biftqa8hJk3tUkMhayChzrSmLzExbc!6au_UC# zh_G)VZM({sJU75pvlf~JsE{xzy01OkLalP6E>`Yn-O($~Q@D1VZEmch*0S6f&+OBH zK}Rq4Z8{}wOE#qtoE68nI1|tC=%9{lWplF-<-=u^%Ylr5fB@U=Ha0fd^u7>JnQNlo zzh1>cBEsG0Zx;DA%KOCzJl}~X(!jrT$F~H$*+l(?1we{tFWM?ET6F~pepBK@*~FuT zW}s>B=!V_#&C9%Y*mZ3kordnpZ{G~7LU`=v(H2td)_}gz18saD(JW}ZIjy@VD?!{6 zaE$pNPMcK)6Y!v(zX=sJbq?sGFi8`MsOk0B)ivaO0i{w^7p@Tqq*eB zV0O*doKekDNzUW%cn&saGmE_g|?FE>5mM3ubYzrC`z?0~`903P9 z?F0ooF3uFk2yAC?c-TzL@h%i$5t|3!C~$tt5V}jNG3_?F{o`m539si0ITswl~@~S>yg1A`y3h> zC4ar4B|LqX1FiKp2zsa$U@U1!kclY<+7*g9zWqz!y5lD13O8$iL}kfJ(sovfK;I+9 z6ylufo0_VL=m~y|bvz!6eCPE|DN<|~8QC9! z^4r!T04yAfP^T-}oZRIhvd6x(;B_w~lW zi_UTGsN?QHKtUQ)R9jUUm&FO4+-s4&rRC+UDGhs%i>aGbqGb#mx_A3UGqZS?A_zI8 zB?Txv2}-7bspw-Kuxfy^rzTYX{dcO4miQPbFqBqh76(;50~G(<8+kslCVTHa85sd*#xl zWVBi77-T`(9<$cU#O$f^m~T>RPSf*VnHxcNLPMCX0dfPNeko^^=R&CL1`64636IkO z3rN~X2o)(vqYUCaJPMKLdU3GaR^}2qMp2V8{sxDPGJH3E=j41^`|}j)Wr-1up@c7N z0}##?Ow<9>Ius%mt}P){)>c>FNO+RQ$5Wi#%3iTIg9PYK|5MfW`es|U&Hxx96NsX- zB62xsSpMWN%^80q}0zXpRE9!GLdP38|;N<+4w3;ufY4WM!+6Y(USJyrXgjk)YFqttWzR zH6xBcdn{Ex8j`%G%L`jop;hIfAcK6nZYPju*oOt@7*!q;nx-$+@)|FG}WVz>7W+3&+zqYh4)uN?cO^m6}z~*kMbI=)Wz#WegM=o zUeQ`+Gk684>F|ai>Cp90sY&_LoOB)o_SAG278XwUuJDwC)tLLDT=UwdTzDEZJwGU; zKhv!9C+UI8<}F*A{0$Q-g1MrexEo)kR^_P!i!Yr3D`V|%Xj}`3kT~K?(YVVG@YcNI z6=4h6v3(Od0cl|4?Tsg;>&*kGC{>fvhON5_G@7|hpCawV-;Kceijz#wd|UHD@uU7% zsF@)yc~Gw3h&sz#(JA4!AVpst4}I=QY|%bC#w_%;(OYk|%_A%=p5|>WfhR9IWP0pD z8X*p1+sibs3y;W;L<@#UyUz44gBhV@HtniHSjRmR3aNqVq37E}!w<}n_^{QL(KM12 z0|Udi_V&N)Ykv(Lk+N>_oSJ6Nrw#n&=c9~mM002K!nO;b@34);yk?>7V;v}a-Umq( z5KoT%es=aekW-V|SdvN-gkg#7rltS5I+R!(YlB#7Q4O19h}@oR>oD)7qY~P(J{)L87Cyq@W2r%qRJq4 zV%(@G_5#%?*D`Uaf7Hjh1n83)oqy_o4Q+TZ+9(?^EZ`s{^f1xWN1;7osvd%>tXt%fi{oo< zOr${Kd2dW7+26i>)_c96P2tKfWT$%=3F<~OhXoAt8 zKLceHv(8B7|9OG z57HD4?+a`RmnaL+83%vpKeZQfizJ{oiUwN3(|^9+2dRfNiUWpDUwdn7!u#oXxglY@ z{RtnP)IR0NO$uv1m$Ua?1MjX<=q23>qR5 z7Ccpf5fSLPlp+DlO?DTfRD;dW9QqLypL46J;^)tyU_CFS-3olJ3>04U&j8q;yuE;M zFqSbK987?PXdT^ju%}|+5Bz5Xh!b5)CnqP=bZn}lv$K%3155`!xaakiQ7$g7v>p48 zKY%Ue;X}k9i1X8g^Uy(jMemUx6-)*s!=V;+7>0s#+r?!mh~@gzL#&1t78a(a%>WJ{ zLPHg=DoYHtG&B&Y=GYjpa_Cum_wMza8&`ndVL?KsB?yvng+56uK;>e)ao2=IOk;tOqfkKf4})LgoAi;J~Uk`T-634__W_X-hETk^L%wnFG@{0&%qpL5eFg?!Vu03)+jwAgAH~aY&`ss_3xzu znwO(0N1d^{j;{#ICO6|Aokt8o|06zR zU)tp&&kRBcf~qKBVS6X}5G5tyBg-ZA^h|@$g=Aj>>h+ZRk4v}98X0~VX;d5iSwnOP zG-S3Kg~A1h81)%oxcn4ml8O!{6rM>@LXE(U{SKG(E{aHyID6IwvgjZuMc_8%;WQ@| zBH1B1;tG&>|LgKz+jbvP|9tzMcBG`Y7kDdi`MW5mXs_yTn67{H+qH3AjSGE>mf(weq`;z}qL@i$J|2k-g9?h3075-<|< zf4W5_#b3XE9puD}K-nqMxJ$k|4f%Ha;7#0_NW#{rS8z$9n-h>*iR)&lL9zvcgnrb9 zw2b5&ntzr|_ri@EzfkK73ku``9N_J=r``d`%ZSSbQK)`(w*qWOp_-nZrAz|Q1vxcA z0|ahV4Ty-Fk!nugc#DEJ$jOYG_y8GMYJ-uVe-5tg9s7<2YK=A}EdseZ!A6^GyfrX= zygdi_6)l!b-WUKslrbO|u+NaCW;_ah1PdTlNM}R+jm_nH3d9n?JrK08*jHS7>)?!| z0I@K$RqJpf{T9O2<>BFhln9FR297eh22yicF?>;I0)*$Aktz0!j*gCuxK4Bk%QX;< zN+4A{Y<_O8hL#rb17s(TD%kuC_x-rLOLWtwO_0~3A3se>8imvIMw+g;JvGu^f%W$L z2C!j3Cn~ld@{cvg^TYG!1b|K4#zr?vJNl-XXc@~j0Ct*Ih18)4!5)o0!>_A0woh+o zNWQmNSu43QHZrmdB8g&O6Uz6qv$OMGCMI;oETi%lz-m&LE3PmKVO5R@ zAyRh&hr@;rF9|(NrrXJBJ_30GwuR*1_~OncES#%X?1f5N1%wX+5YZ^+(v$ellT+a8 zd(Y$Q4?*n^c$jKv1nq$65BP#IgqqwJfzpH~8U+OfK6-X$rUI}cS7vL0bM*W709Woa z{nrr6kP&|@;%0ut=X@XAne?aA8R!#YtPYqC!Uw=64OU|O9voLUfH}YvT;WbaGY={S zF*u>a@JHNkva1lx84N!OPyt9CO;RCeA1uSsr*5KE&#;TOc-U-<<|0BLwi`fjzzbsa z4+RLdfdY1RbP%i!0vtrwq3Up=5O(d!=$aTC^8mPml_DgcsMUT~3h7LY%qKRJwI%^G zFvRu_4N1uYBN&x^{n`VA1#mvPV8dO7`MJ-w6mS_8b~ZN$hag(Y4$M1+P#7F8s4M~i z1%hj9X<1!c?8fE^I@{t_+uy-7g9fQHo)E-;a%9AOqL*w^f;5h3q{Q-QV|gO8LD2x< zTI=g)(u&ssSa|>Q%OB8;0`Sd&cPY!P4*ar8=hz<|+%0a67N5M$9&3AuhGw|GpNJ_e zEqG}-4m#PN6nw{U{dz4VTzI1@p%HbIZt6PU*uIJEOVax;|7PDVHWwkkBYe!PtT6KG zt_p(mh6-W=2QVK*!KP^WM~CsIF1i2rZ|sPKed7H6?KsE9@Mt5m{hPO$qIwn(zy*AF z^=cW>-2I*W?=cVkd(5O8Ha|x%*&HsoPY_)5HVnrs5hh|?1(=(E_|qksw|zADUZq3z zN9W?dM>~vk6gix7&$$|A3e1-f$p^UxssfS3@NB^$A?mTRp>PrqJuftK2RZjm`M>Sj zhr~xU?^GZ-r}{PD1Rk5PSh-N%hur{_CuI67URfZcW`u1zA#=k9X;0&so2c$lH>^L* z=|O;E#GnKl+tVmh{CE;uT_!k=6V=a)-Tio=;Uts~sLFr+q<`~$EODG=`=@Gs?yOr)PrFTAwrGUFAiw#H)+c_ZA+(#& zCQObC~QB*Ewm^nfI#aIc7PC=4#Z&s?^vFdh|t>tz=&g{r>%%_*fcp^y>JX zHSRcXLI5?R3nZIh2dY{+SFsEwL8+4{NDvM159o(Uow=yFJPYeS&JfNb$f=lwgs$3* zTH0Fd{QGk%AVNAP>FDU>gb6l9_{!6tfge=9-bKcJ0Ct5!3QOS+2;%5C(Tg~k!Ri1z zi!bKD2A^?XJ9qAj6ul=uipJ;9XYGTxeaTNl6DuQQ)1Sjg^M4u7o?Sv#MCEn(#~5q4 zy)Rt&21&QDun-?d_(dSu=Z@@6TZ1Jc37m%j^v>tW3MP>V1wQgRZ@R-lNlDo^K5k`T zFpY#7p3iZP4UzzJFxt_`CoHcC!}jtUXh*^_FHhIO9~o+ostTPwEOvgR;b(dIwb)<| z4Mp+KXcNF7A|S^{Lk4{y9dhucgiVCDm zv`Ef3WWlV1lMH4e*Kn&bz79P#$@L}T@z7zwxX<$X-$_1ON&-4S_fZx)eEP{<$=f9_D&8Bfc1KqlsH&eSR`GhzSP!EB6eYL{EwfRFgj?` z2o%SfgBXh2_LjiR_Rroo139mRd{e8!Uls2|@iRlU8ySy@2{qI6HI}$%&z_ZiLh|Wkc9gw?7$JT7ov0#X zxq=;%D=#*!J)SEdD5&ZchwHX~N-3kHqB4P<&`XG!i7C{p5Fn)Y24oazNz;{w%INi+ zK?54WD}VKBpz{d8PHZq+QnF^YbVMPz`YpG_m^{=3sC5#smEiE9^1>$j1Ch3O*RDFc zStM9=Fd&hrLZ1VK5x40oKyy8J9t+%C25avCP!KAS-B67Up}g?CXh!z57DXuR3xEuc~5*JuB#MS;1XWy=ZDg}t==S0znF zUd=)e@sR^NZ?bY*T}n^xUHSXhG^AUf+m}vM)zS)c09VTs+tNnn$I163*xB1>W@fhI z)S^zely-Hk;}@BXZa|3;;hn|^&jBBR1Q@0mV4e3usKeqyjN-7VrH=LVy!#!9J`42Q z5?x~MP~82~`}a3-XdJVrQEG6%{IJo(HmH)QtdV8*-1fN_eBTfmM1_T0TU+Oc>%POl z-^sS63b{*mC@7&z5DkE{L!Njs%d~I0~=jM-;)x;j?tq8OC@d#t@gU5JLuerI}8Vw*~7s9yahI^ zdE;vas8=&)US3`dS+SYuf`+nSmZZA6`fLCa5be2&Dc-w6zfe0%_T(bBPC22j3&}Y> zRzb`Eq{R)Kt}^c8ulg0soKKNU#MhvTkifB-31pJy+>ZMsgQ_$^!?6;(8|fk zK%Ryqmyzg-SjNqgNYO|T3P%mJvTrffH>YT^P+d|lZH74@F?(8>{RiL|U?5-W9MGcb zAP-aWi)@vZCr@_59@h6BnyHNV2sFwwXXfp9p!!zAuRW*%2sphz0`ZG-KG1ZWaVjxB zhcTZgXLlD}G}kAzPjmNd4hj0I{~0#|V166p6AHD~u-mhWzJbG?qrWmZ4R|mt7E`S% zA6|0l>6*Z59HG9GoV@B$Z}9^l{>ohbZmMpNSvgr*-^j>L$l6#gF740U==V(DcY?ym zP)nE#F|u_lY_PZ24#FKO(Ua-l`;Lp9t}hKZl773l#0Pt}G1qV%CPFi?t3(#~)xN?R zaoJ@IC<_u4wClUCUa6q}b?h$#PV~$j6c8OWwXqt=BP;<2XldCbbO7vfX(|C@T9Nr* z+%ye1Dl~z!Zb+=LVaF8aV7B6G`}U{LttK&-boJ==|z`xf2pXlb)9B2rW4s9|6r1KmD6uZeQOgJP^h&-U!=c zp3MU>%|J+js8GS8XhEtsWZ_A5QAeSiLIrN%x5AkwW>(hNGCoSDnYY1&3C(un>DdYp zIh=fs^%H1)kD#_O1f-=+BKN}z`IMT=3*J*=11Oo8nPG*9gTF5<7Aar9Ebt^64A9ft zQClIr1A~Br-bQKZ`@C-|Ou8ADJ0@0FgX|FduYeuWHRTUM4p9_E=dHS>MI>>M0 z_tW56M9;)<8Ix{@iYZZPFG~ZF8_O?qD#E=CCP=#7RFC^9S{@9SJvKFN2k~C6!P3g= zsK6~Fb90T~>78GI3je(q0G1$Jm5^^S^#PJ49!5t3jtYSUp_NNa#~ z&ta5>P)Hy#WE~J7xDUW44E3J^8323^A;@q7A*+L*V9D%!AEMk`)^5fsLD+@M31@*C z)en<8iov@Igf9tP%-Xr7j34ki2a|Kn@XQ1gk}pb8s(Sjjv);S%zZB@(25d3jF%3b3T52;_EwxPsY!pg#>%IO04XWbaQChVC7BxDWEdFgVd~w zMp$1^djF?SSCEY_$BD2a!Gp|D>*y+DPoWpYqdOaGj)FyiLHPA<-=4zpLM2`3FQ=UT zb_2l#M!}lci}NjpV}brKJV5nsTovk6sv{^U7!w@UmcYqFl79s^2pU_!D%30o1H5qB zdd=YHKQIt+);1cAir`>1ggt5s6cKdd7%1+|Oic|pB?Z%Xk3n*W|8HtxK>{OvpZV@+ z+(2A0Cf{@3VNY16lddz9obbleA@MoETCjJ&6ej1JM!CNY@igH)HP z)$+!nLvSl_#27LG=ZO#Y{>-xgFNR+U7&GXV}7i)VX3(&)*RgObsr7#DKYrYux>j$C|755 zZSI~T#wnggxuVC7aKP^z+$1b2nh#j(BS!Brb$8;-yWl+8KhC43U}lu>!A2Fg&J2;r-KSwH&7q`8!&w46qP2+G(hUE3J#qgH(HFMzSnh6-^q(PjlTU%#jP@$6&&v z&wdY7^sh9wKkp=T1w2eat(dsD@njGTz*vt+v_p__5WdCY;^M%nfjtzs5r_nwLPA2q zUe-vurFfR;D&}D1h$tUBJW4j;(~l8)&p8EV|AmZ4`{-^RJM6-WME0Cg&Ey+mPGY&A zxc(jDi|qMuZ!fRGw+DzNi?D^I>6=HEc-G6UIv%!u{dy8DyOAgdP%?O!0LE{@TSAk4 zuH*u`Q1BPC{oH+^;`N!NeQ!B_hQGdPgb@>O*!VDS`x#mjdBHBQ&9GR6iA-{Ao1C;u zYvtCiV~FkEp(9fykdjW-kNW553q#+&efu9l(HcdTm>DW?&7|4R<_Y}N3b`cWB2#$0 zB!hDAM*djrr&3dY-?tw~(4p*>5y8<#XF4$1!oh(?<6QlXBh8onObsX;1aw{b;2myU zUqcP!^Y=!%K}+-ytKz9hnLq+?9X*;4eF1HeQLto?xI9H4a=Q}lBep!uT)!Y~ecmFj z;ub=X~ZjqwdV(p9%ZLAws08?y8zQ17HLCvY)SB7@ik>&ObB=AJys$LnY;%PKh>BX zju|I?*3F6lPLGHORXfFs^0=doA)ioj1F-Vc5nx>sw z|Jk-LKK`_fOeOM`Pdy;;sF$zturVsI{nYQHflU8a9h@CKP0~TQ@Xo^F2|FWX8ck|d zR!n|-j6&P`%gMnKqQ()tBIEBsoXV)+ zn>w9W1~EeX{Ea0arIFBpQIJD8uCSznMflMQTw0`Ec2Z81G~%_rt2|<$OT>Ig#&NPP zIS6nmiZM^s*Ku0vD_%n^Sk7wz9Vp52yLT)`EybXc9Hph~%{|liSZf+xxkMe6{+F*% zD|qWLEf)Mo8UGw2;+VMeGAvt4+d~QS12+wkcSd=nhZe znNYpO;Ipf1HA7R7B;$el4C}hitKx?xAGaWf^QWCFJBrh`T(Y6(DoQZqKOBlzbz6RNsgNp%Xc^5?)*wq;4YIYAfYG z%48jux;YpYQuuR$d*sLmwDC$AAf!~y>_m_`L+xa|$V0B7zhfSm_xWGc$63@-u6EW- ztLlZGe?J8W6LJi{TqVjyL#!N_f&_Zi&(AL&Yz5wInkA;8Ii3Ur9($lE;mOk*p-#n> zjWQ!&aA0w&=i>5~T77N@Br`A^fO1O7s*D9*G&s9%L*%92gEvLkC3h-&&Q=QnyilcG zS%d2{E$PnWTjVz?%zGo~qKhCi5rXPdIg}8?^C{0@%mrIpAS@<3)6`Inh0|~2+&b1& zBLCo>8I^O_=ri*Ps0Tn<`VF|T?>V=i713DHMK zm+a4((i8e*Q=IB>TZ?eaK+#vlpk8dz$DEwn+bzA2#)vT$PR^S4c6V&0VFv-KRTGs* z0DVESxRm2>fMlYxz}Qwo>}3=ap`IcO=v9OxS|;?jWGi34Gs@LkQ00v&^BQmh+k8~urDWr3PTvf%3m|_E{Wj?qEwAcNSM5Y+5-FB)k8tL6=e0;f7qoD9Y2m2&m))I3YKK%cTz66Y?eyhq08AgVvgXkJiFq-7 zzog_6#r9wP)vc|rlB$*q?hpy5==O(qtc+Y zu>s#^G-dHLw{@ug&6|A_6GaB!AK_gaSg`64p7%)1=ob*L8)E;lL(sPCr)6UO-{obr ztuYBB`$kM-^;8|d94FqugMn+=hO8reCXo5~ZMq283-V+me+sbhMnIuxz%$ps8)RP6 zpR#UAU5z>YoN6~K+Y65J*E=;7KV>jk9LmtkaIjK%JvN$sxw7d(hE8vr&MAf1%Q5w< z>t`1ib7vzHMwA)^UB&4a1FjE62uCdnn@o5}*h>r@qo$_5@C3m9>eZ`|^bom#+VD_l zY7)T>WpLL?q*Umt(awxy=fs&-KFHj0+iYWgfU(N@u0zhjlT4vjY+xZ}!KEgG7Kmc} z%C<_plH^|6C*X*%nAFsop4(=JpEqvB`+`n$28&`W z{-iNdBirG3Phe}WpuUrzFUlu92bjzmtfi?*`t#?8Nfs|JFK$QH>fT@RdS0-=m~F#; zyHA!>RV9CG8P3~b+*aVqr}q$N;&($sAN%0s`$AgX2N)Av;?y#NrHR9u3jstE%c} zPm76Ra*4+7)@cJShbii)6>|ia2)i$ER9-nuO+C9H8wy6E{)i=ym+KYqf;mGbNe!Sf zG(25YM1)sJ6t!k>d~Z+OAG=(Kk9QB)p_LRiGe4?^Rr{I=t0B5Pk6zo_*+u)HBgLMk z(ByJ$W2AvaMMb5H!`OHLkylY(&cn(t*!7CsWzWx&67IXGWzyGPO_w-9v@+Z9C2P7< zbaYf?x7o*!J88(yU1UV-BOw8gnhRvp*r@zE$?=S4){|7hz&CFs;A{;u)7M9j;m`Ou z*pf376O+69U({Z>Sz-Z_1v+-}WCGEk+lDhPXkLFwQ_~H^4$hsM$JgFBJUVsi6tq?c zyygHeTVZ5mge&my;loNw4TRL=x$<)HS}La8fBm|F`Ds{;Fqe&Uf}R2-+qU+0wUdIF zl7T#ie6FFXnV66OQ0)YvzPkDhWU-$=AE({Mtt%@ZqMI`7D#(5Jt_Rfw^MGcl&^%BV zaBFypnW>>+@A$YU=qzT2a37j)fs!8_aCKd7X;DWOgLBp`Gci6Mvc)&(%w1<(6LUh* zx+9w>q(lb?2b^tcWG;Xl(8>%~m8(~GMm8QieAp2kw6Oh|ceOH2_I8>XU{5eOO0Bbb z6vYDFrj?bI`ucj5Be?BaklrClBu$%0UAx8#eGsJ&$V~<0Us*XTBV#u?xo<##>4LMt zds?oMrlzL8zCOH~Ef%RPC1spMB3$2$jPF4X8#cWF`V_MG?R$V|tYcgc>`dfq3{p6B zU2xF8P8&OjHAwC#c$%7;z+TPG&GgW4up;ohCME3IL`Guu*}b^5`2e2lpu?fO)GeFH z4)8(3cJT5E4Lve>p^EIp&gP?J(cg!5lD%!~d2#&C{#2p2R}4P=k1d8+Aodo3F|x$6 z%1UgMDCjNyi{^a1`prqI80o@zZO-|9v&4n| z_e+(V829|2uP?hF!I}KOU+Q1~*U&@!Ej!IW=M!uVdRKvI5U2P$drV&E=fA7;?)c6| z)_X=&)E(Ogw-ulrx-Jfmj(*RcC26W)ga|Mk`#Uo;18H^t&YeX2UoR9BXGE79VI?o0 z3i^XhUk5HZe4*Da7m4lu_PzBuV=5|iyhde+5$}YL7Q&|l3rnt?d0Y}3eCuc0sy}ke z%lI;I_+2OALZHyKgbMd6@mEEKv>ue){wVLy>^+TV;6l_9740u!#U9 zs+VMeRauSY@%LTi+ggBO)_Ldb!EZ51+x%J7k{z^#3Yv$O9t5)%_a*B%5y zAX9C50QuopaPZ>g3=_4_kv+Tt;_w3%imAz*c<`T}} z(aA}!f)JF@7`Cy7xPU1`B*%;FC8>w^l3CgPD=ef{`%`Dm$lZhmRg3PC!h7hJU?Z$9 zJ?D{Nh*vQc3`lye@WX{Tvo1-9m2g--&JmkbyPuiK*WHT7irH_VarSw?Or!FHD?=DR za%D$1MIZ8Jg?mbPxR&t-tLw$+IFqVK(csvmq$Ek#nFq|eko3PX16}<3cG!!eAtaP< z=Cw^zViRJ>wGU7=Mgx}Kdy#r?Adl^|F)>E31TVxh$x1}$aB5(EY5Jn7>gz$kW9|`; z;#zombv~N(bi$5U3yJHQ;u|?IO#L zb&{A{lJIcB8(zRC-~$oII2yFyg_AKKKA_MXxNwSzX$LvY+tgGq96Yp@Km}lEXlZQ~ z7$Xkr>;E~dJG#=zF|~k{_jL|sVP@Uj(2y5o<*OmWRwe0IYilkr_`T8!+2jM73f`LF zAp&s9@IZ9mA^s^ldmL}>%gS=VW?Ncvoa{$tN1lPa^nPQO3s04v{*F%u3Iq;yc2*Yt zfOd%^XcYOEeuRDToF4{EBMTs2@2O7|i> z#t#DFV6Cc>jV+9xnx2MA!hZ4tYB>-Su#d;KLx&H0dU#ZLq&$C4p|^XI+Sc5B1QG*& z;*47iH3bC^oVIuu%v2$Q73+HT#ECm{Sp%M2lowjM$usbNE8<;~SXIgks87vMal1M| zQ-%fy>%C9F8^pYZZqwYCk`k=&0MaEE$M})y5_czt%;#Yg(uPePjwV*t@^9Z5czEhM zI3OeTj4G~W)_@#k?x|2M3f10D?JZU&_L%Dgc==*{kdcN3Feb?$AMc>#w?3Ty6 zi=*~smRDA~ySifI*#!g~(HX?d=hRiBZlM4c#_4V-2=E3CcU(yeVF=_>WfG zmoIldt)R=uZwyk!Z;V>5&AA9PF;@#)ZU4{^AD2<;$$R(ieb$};Lm7?&L(e*Q<;r%? zC&VlW-qQr|7|M=>7#0+C@fqmEeP#)-)ez&W+MLcXOYs|ni0}_UeBw7ot7R;lE7qXd z?y9AmPfQ!Rk1(S>8!V=W*BrQKR-V_-@}Kc=F_=Sxxr45#+Hz#H;Z(Jr zM^#z14nbvP*Z{td?E?@=X&-?0+e2DDlSWK8KUg;vPtDFLdHl|=P6^|?lCts;WTTcb z9|7x`@&SUKR4g!^G~Qr5x}k5HaB#WlAVVziwQDw~M-J7S*-1%M)M&lUgMg}YprCE+ z?bGC>pwKIt!1j3GB6eYYy-TpVF@6&YNtqtc=9xBnU*7%N*Y{~kluc#T{JqIY*)762 zZN1dU$9nxzWf_fPTKxA4F=L5?1I6dML7EZ)-gU#IsD^vh7wt(BwZN-ju z>A|D|M+KV{0j)v6?3=^@-vUboB7pnQ{S8bA0A^ZRLjaXvL4Xf2k|nx!Ejcr@0_YVG zj^O!)MMndBC*uU zAfPcYGJ>aj8h#xpOn_zq1R%P*PEIaG6<^>8Sh~vq@8~vPe~dQ)=vTV#KkyC#=7Hlw*SQs#v9+bikmxCBK{J9e zdl3yF{ZU3g`}_3?W7Jl=3@xp#+3LQH0M7!C!gmYL^%aqeDW4ZODgKRaF%i7sDkMt$86&0&Utr z8p3SFM=$#R&6{rw$xs=gw0H$V5s+T3*u-3!by^)*0W%LEwy3;3BkG1d>K-QMJD|d` zBca1{K~@&MP{wfuCxqxjn1hnjs@Ud!H2 z_dcopcwNPBK9oBOd2$&UnE-!(SSLp2=F+S#k3~fvaB=x4HVgJWZ1|(3xcJXbwpO6c z@jF9`OG>09CI3`0Gt}MzFc@jJ3v22B*yZmGQ^~flpy|oy3&^dlkwRTeY6D=JL1L6a zt`79F0qFSb`^b+TZvkDlatjZ-81ZBISUzq%?vF@Fpzv@V20HTbvz7jAEgw1g=F_&A6UcI_sNqmDGy*enSLLwrFCkj*vI4?CZ;oWYh`s?-`SBeSx2AO*ocfH{bnJKEY*(X#6@vmAmFg56qo5xk#%sYoQ!MS+NjXhdg< zZTq_DVsDZc=#*X87Z#q<8HA&A1cpJI&!nINJ^Ci7e-_6Tf59>?eF}c7EB2W*8$^@X zmoF!eM}kZaU?;W}=(*72r7NUO!L#}_l$%aWPJ%{5oV=0g#`j$8?}AIR;!MCmJi%TW zE})w9Yy##0x}8*39zyd6kRs{2h#75tAPvg4MWLAqdNoA!o6es~UOcz-LW+_rl zH$vpYpmWm{8`|65yVo*2d;rQkG{*dZ&d5RSJy__K)@;ft+z%^%1s2+5J(WCP3w)~r zpq~=E760if5Hq?sz>E6`GlF#U8Qoz`bv1__r%TSPM_T~j+3w2q1b-G)-77z0QZsJ+qX zA%^O1HRv7}&I5w7+B!PK#KdqMd80bHI5=X3J^1U=(n^F@i9rrn{eBd(=+R0g5M#*r zl|e7y=upU|BsYL?RvFukAsBi z+i{3McM2BBpMY`zqHbknr7L3sP$tMVAPcxl9z$wkZD)7=BrAOMWok8>TxEmDab)L0 zBwyKE5+vt?lIEh@M{Ata-lNlT(C#1*D1dojN>x=Wf$qbpI5d)jSqDOjlQYa0lAblI z*)bIw(14;Ga3kbQ{Jg!1Zrs3wycZu|OcnNg>X$F7i$5*o<;}gcNFgxMq88B+ z!7m7KyTTJduwrOzJPineiz{Mu;0f=dh1#N<-0lt_+Zbq)36^)1C_mh^R@dq#UBFMPiOOwe~?yE%ZJtu!3H*jpAw zhevy6izW$OU1&8Oa1}m^Pa7mJQ`=wY<^WqP+Og#`0Ad>@rNNIMuV#4GN3k6^D6L&! z$E{fu1*oNj_t(#|RQdB=+?{tVXjRwNr3fowUai-jzzM!(C8^yoR?~G6A!T#A67g1f zAPKz}|tFX?Rq_9yQd~45l6X=Yj$`e25a2rmCWI zcW$(iL8A>QFGs^#m>OVAwuFwm0v34i9_#3c04QwvYMw2Po!oiaud@MN4HTz3JDX~- zM<9y@YGx3aLW^1`#)rPRJdp2&bOQ(!pKbYoBM&|7T-_l|;J3QV!V-k2 zvJ!@}9&q?-pb~>992OhR{Lf)PtSqW3ap=toxB{pgpidx*>+fE@OkEo{2-HTn+Pi@K zlGY`tZMJ7G!eK9ARGs<*o4x@`vNLLG>*`i&LqOvSqDIwcK1yda%5&(z?}gAe!wyyL zlA?mb;v~&SU5*L>WHZmlA-q2XbHQyj)iq-c9m*>~ljG{lGZ3;lz2@}~Fq@i9Xz85T z+L{u!shU7DR|Py!84@3V3xG3tL3Wj=UAsu&^J3%T`t^;fh4TFAo7`%enO;47r%M{@ z>wD=`87Ppu$kUEm@2oV@SxUzZZ{YAozMw&we4Z{!Zu+^%Duy5s3fj`b zU}9pDhHg6k{x~4F>FEIkw+{INX#M~^$Wy1@ppPG!tene)NFIUm0E2gfN%dhx z3jOs?t6RPhFH$JOKJ5iS#~AOfaM8YI5qw?}uTA5?zypXAxVeW~Ta5u%4LV1{2>}q{ zzROPlc1-Um&eO%HH?a<00{9Jx>4e$X3dx!X5>irTA-04yaf5;)AudkJPYH;2*MrUO zaNSE`9oNCW5fLdaekCq|r{H8v-h&^FBO_7xSFZ{};}DoOAVPvDg*tK-l>^bH{hOy^ z@B$b4F%IK#`$E%#txm1;qhOcJx7(99{tsiYkGAJvKp{+|^9E9nW7-|QTRK*4Z#k6U z@ZG!TO8`-El~Fg@ku$L9{n3AP5ih}vEI$GTJwTKdwPl%40D}@pA-39s@`Ig(o^RjY zcs%P`fi63e_>j(7)^`PVpw`R=hwkqnKkzq27(oa54@hmmO-6ZwS27Ea*CpiHQkh zr9?oVmG)why^)bk=&hRT7d9gwO6vzq=0kDR-!t?f%~7`mkxD9B1-90=&irvYmwjig+HC4!i0a=W$Vk=Ow>;42fTMU1h&}(n&Us1X_ z27A-RSNA=?RoFv#U{MwmGYWDnxWtNKb#bvR#2n0F5PvnuKo>oTtt6$SVhT!u$Li+* zd%a62E-(KR);0iJ2uD8~LN|?=es&T^aHg|$?xhtK1&Yrg5=#F7JUg67FbahmG2-MP zLm%bQ`5mIE?*A)9V+boMVrPa{?#(nm^SD+D=o+PP^!mSCI(ek;D3FF$L37pX5JNh^U$UD#^ zW%>ZxXc6>dp{HK~LD1YBCm49$CSUeW7uYc@ckjN-NEcyBP6d|ansUZ~U+Xbot_G<7wj=R=i z`$Ro;GwZ151ENW{IUYP7sCrt`!1qf*u=u{QUfag7Gn* zz;?+73|7=oZ~q1$IV6F}c$lw!aS_a~cs;+JYeBUloZJy`!V3NdsAqKmmLpwVA2X8p z9sGZDhQiN3r=^8QMz+v!#A$Fq!I-?NYFm6z)66cgyam#b>6vQq>J_G01){(9m{cC> zNFz4T=;SvMWIlkV6|&U0nYfRYr+X3}to&Y;+E>ZB@1GU4%=*M0X;IJG0Tdlb zcC4!=z?k8%_z_c5ZZ0pkosizRQ4Zxa@l+%pT;vSM zNlCYZKK$6_6|AkW<_i#^-Q9w4RD$>&zS*9cBLjj_6>2AM`9WVDg~Q3%-!&*-5)oJ|G(? zB!D_w#{2g{L;yjmk&%%y1C1E;Vh558+#C3lx!Ku9%_qu{(Y}9$b&;l==$t|(^ac0k z$=3DyLDnLNLQ}qasy@T4Zgm%)2d?hh?asC0lfCx$m-O^J0|#wjXb9;FxZpk6_%`WZ zpcVkX0s>SJN4&>w^RR-023&*&1_rT4*0{JU=GFaGPj$!`;0|?X%E5a!s*mO5nS9A{* zfD|uY6oEZ}xUtG%E%IeMyhwl#(dnMqHmW|I3lMQ~-M;-2?-E`45ID+!NK$@`?S1jSfiO{zyb72P%hx+SXXHR{gScc%9Yz_UeV;_5&|~N z*#4U6@&i`z$Bv~K2`_1QrSE`<0lKhQS$V;0J~?r(j{;hEtMjJOgHKLp&-VyVfvdZk z^Bg4CkdWl!;ZadkT!(IZFq3~SNe$-IB=cX+s^0uf=suaQb0Eij@RG1A?&`ydzB0}2 zNGQ{M9s6z#7o%^+?oZ&?xNwKbpQl1@8l6Y}doUX2ZsK4(ujuOTj%g)VitWm#&X5%t%YjW zggTF?A&WOVG|jEaXVJ^I=5o@W*~rWJ@?-^cJYR_Z zv8Mx-eg~UhvQ55x$>yXtUCmQe9HdH{hzt*(ARvrHEg%yq$X^ZhFhAlOjsInV1!|>L zxQ(mEctxLigT>>Avw6$$=CYy_fs+k+7USCE+0zeaa7oxzDq{r-w)TgV6jOG=R4e|L zMXe@Wp<|UM7pSXvl$4d4sm<&1=JZNHfIm;(*g%;~#X@~2qekBSsvm{Ttu!~kkheT- zz9y=ds)sv(YxT5s*a6ybU|`JB(H+Od*WS@diGQmnyU!!~YYKbSl}JjGsyjF=r%oVC(d8& zVXUolAda|?URn`o-}3s%a60JptR%{w2T{LRaT}?r$q zn>*sN2+kEo^UC{Gje`>|J{1-DDTL_-kdBc@1A>P_jqS7M_*0u))1Cds{M6q&hWrVN zg`AJy7xmyU6MHu}&SlGFlVy`TSuGFed8KC)(^lLQcuWI9%vz@4EOwjm!?=?{%M3g~YM4 z(t1iOsdEA2VfstZ_dOJ{-QI1UO_}{<$s*nHXmvT*!sBHmLG|5wV7 zJl`b5oYE{w*kA8t-%NF)nxds+Rmn1a+Lb3(kunEs1wliD#iTh{lG;3n6?~Z*iV$*c zs6+tE^$k!&qBhd$Vr*pt_W!V`e^Ar|R3o$t~TE$1|Bh^*8iCTRJ25 z>*}bFCwxCv{3x-f65bv}4lCiUyG4dd?;ZTuSYfx7{Fx*nJ(EK9bS*N^ZgtKe+mIX1 zTl_Wqx$&(()ig8?!Fcs0Txp=V!El?_$k6k}i~g5qAAQs+(8Vm#q6a44m}YtJxjd9l`RH0JQUQ)#6aJVQR0<4kCX{tWR)_5B-o~!n#U& zn_g}Ie9%XcQO}agbRvzN+CZnRUMw{9jfP5&$(L)Q89}j*t8FHJx_BA~mZZW)s^*Fl z22t&3(gUZ&tq{nB^bc`?`WTMp4Gd>oC{i9rCsLjn74&HK#wR_?_5z1dKbr z&|gGdRJzh-H}NrtBtOuGilWdaJ^pPxqSR%WMSDpg>t)DWItFIu1b(Bj?XBxKly8_- z6cjC+T`S_z8%!B2y#!_eo4O%ya!6C%6|pUpIw|hAfum7%`{j7`1~L*Q7LVV1o`_hg ziw+9Hwt^SLpa806(YA7jan1%K%gKs`w&o@vfP@u1?Cfk!E);A}(cO_9!z-R7s7`Kp zeBLiE*L#yERT2TMQ7~Tnel~MLb`_8&_4h}I<0Gbx?CMG5)PIOHc%o{lt+$^?**L!Q z%~NA%MVehgbVh_LxvB0i92X=+%39pGFL$?H4E8@dya}HL1~cW3tKXekaEtyw(Z2ED zHxl6H&y?-$J=fwb?_}PNN=SH&Z8ENH*E2hMT#h*2-R>8$n)X9nPO9iqNtJ1qqx@~Z zOrK!+N%~7g=4+S=v?)K8Ss3#%!`~F%+D=*%n$D3s7gjKmQ7gAxnZuIH*Qu4oz81>J zNM|-M`JUishJ~4(6ep?L*`7~lT6(|k;vWd**gX3^2al*DqcmepL60ocHir)Vg4t@y9ku_ z4$jV)>)72Ez9nm0Z9z8)><{&12{)rE9goNO0+yg}|1nccjozuhz~%O?KS8(xTHL_8 zR6FG2PrBff3b~oAR9)L0oOiw-)4cLk=Vh?Bb;?{^eprb}Nk%dg#EHw>@9_h1@qMbY zEA9J}Q?TgSsl!$O6`#{23mj*#}iTHB8vH*4uka|Rt@E!S3UltTS6k&$P+qLNBF{S9TI7|p;T zvI+V8@~H->qbTdU?QLLaq&y<_g1>)kv*EP{Lm7>?d-tIvwnSCJ9T4B>pX+R5&>e%h zM8GMO!{w~Uc#to|c*O?AHXf&#!}-yy)YN@d0o!wa^vUBx%vX-`pr9Buxg>Hr=X2&; z<(U4=5!lqolXuEYJN2&HyRX0XI8Zn@w^YiBxGo_0IS=Bkf-y9uMFPR*< z-2Y#?I5hlv9^A&*X6T9Ph>DJi%S_LB8VvO+L*_dAW_rVw5_4vAwi63?)c+$*#PTGq`q@P57IJ}+D=I$xBt%=NkIq6 zXOe`Xo@Y$d-tMx;nn2j*<+1CadXo;F`p^;kp+luyLSAmR=aK42avil+b&NT#kST&U zo**eJ;cC?4uM7+8@xJ#>~&p(zuqT%qt7fXPu+;Qr0xLKiwuYw`B})I!wOzhyI6y zCpIr^O6a;*On*A88>m=J;>pBv)j97pX5G!q(X0yLR<7ghw92)=vO+Nt$WuBQKe;9Jt zs{d!49r@RbzUjc@FX$|ISLmJE?8@A6FkgJUWya)kl1_vBeoGUoUh9yo;ksTz`uGmi9tUQ~o0;k^4CVGy_N5qzw zkHIus30u0Zj9)dJVthMtG zG_(3WUb|k@7{Y|D?HJ?;H04r4koD0rDW6N#oAZW-=GCV;m#IB-ZlJJG=S(Ql!j}=t zgZ`l!skui7)ZXzzoVVf#vxf>Hs33p z;;y?)O(LgdU`toye6`q~C^xh5wq1#xMqBC27R58!)8mP4+%j&axNYGL1*DfS8r$uLX5i^B5i?dDuJQibZ6+B+kS9d9?wSOis4%Y2KoZQZ5c z=GW(|GjeHpOyYoKLzA$aG1pE7)6!%m@-s7_3&(fnIX9wX(nqToz5z{bF6Y}=rF794_e1k39?(R>to%Y=Q9jo;0X;9z=_a(+39X(+MUD4*Zf!m` zHsiVT_6wkDJYBRO^&}M;lu=V!=_)GmJD}uVHY#MdPfbW=rl#Sc<8gK=RPxG6PWAl} zntJbJwf$l+AQZ5(fCU~8`LRU^dTt$Vziaglxt8B^dTIZFMTYc1a1RA=LtEG_%j!!5yS;u` zhD`R2k)X%afCdE|4hQ_4sK_L^V%J2B*VEVyhnmRKex>MM7ouBSoPSFBv8%J2v*N*( zkwSSX@wJVdiZvB;pl2xr)|5u>@Bf~o%X~MB4ZDY;*NVjVsRsLoSNaQj!__Fe=E>31 zLqPH-&Wn|)jg?hJT|L9G2}P3f2gd8_JKrGIt~V3;E%o6yif?(ftuO|7W)Jyd%V>QG zIL6E5w6Gw|evVa6feIrio@|A>psYV_YNs&R--5#R-^Tx|oCd^iPzcm&KmuZI%c!WF zAM$U)n(0}G$EI9clS6iF%^t9sxvdq2wG92pLc1^Y`26NKFQFK$6o(0BqO-I6Eb?x_ zeHHEe(g)|38-vfBUqX>stjPSf=01Wwv-+xy35Kck$r(SM)70R+Hh9lnI0TR5cUnaVA== zcP{O3OoWHV7b3rAxys`MPWWT}9}er>_2}>s_mYN1;`U@*6vbdVP$Oz_ba^ZX3Zbh? zzyLqL@((9*+q2wCbMS@M>L4<+_QMrpnFmA4hi5{;1fkog{#^RhqnMSOYxnWWxNwh8 zd8R@UQ?>E@mez>;*hnq)-rbw1Wls)jgM)I1rj2fRkC*n>v-c1T^$<#PHhEMA#*`NY z&4zeRI$3G7F4&q3EtYjk^E1@Bo(?;=;d)ebH{4jJLwh7BI zkiyjB=Zp68%&E6Ao4rY=6$X~t+WCm9720AJw{ojwKK3{V0JGKvm|_|cF#|( z9sq*EJISeOwfRzPw@#gNOYMYPae$9*PHurtM=o&JtIYq99q*HpS>~{*hYRBM<^2N! z3Uq{x*Vsy*UWtJZ`;Nv6S0}9tTkQLWyrbB|9b!tV@R(yz=a@rgz6h!luJu}4qvAE5 z=_tiNcm7DRdp2p7IioMM#B|R)cdF72@hQMNq<6)H1=H$9%LqUT-s4 z9dYHA5NP)3+s^A97u@YS>pO?d?|Pf7ml&LyiU{~6$2p2Q_o$r+v9{{3e};>2^<6i?pM$UL}Eb^pL^fB#KJ}E+dKZQ zIow7!lxH%nz<)EJ)Y{#+_-f4&XDd!ZCvI!0d(A5zcY*%!|Q<@2osm9ov3{r?7LsSLVH46^rC1Xf+)0^PWYbgShNWkJM~fZZNmtt&9~^! zt0lQ~dgFol?sN5)_GS~UXI0~}KmyG)W(8yg%L|aM;*;`yZ*P`xepa^9xx{++sODpW zprdbr@xQ9$98xXZEHG0ydGa;4;y1(<^is|a6QcxPE#DVyLkMsa5zQx6ho<$ZhY{!r zSU>B}=-x++30ls6jO<`&u+lkaW<-woh?JEI5Q?tf^4(*%bX)(C2piYb;Rmg^J@>lU zf%53};u#I)#rDn*Vl75M?u|e44!MivB)7l&qW={$HT4U?c-?7B269wnO$pwrjBytf zYM1&&HYoi3d@L8-I~5hIls1I6HoH65B)mG?+6YB=`JG6ADRXMZuOhoXY&f%{%4-(#(o zJ*r;_Ofr#v^7(?pil zOe%F#Y>*OIKUgU~Z)ERsUt~rdo@tqNI|9Inl4YdNQQsqf25|<(bb8KZ3I)`8BTFkj z0#3@6oIb-uOv`X^mwnb}@D73ZCO1VA?&5#!bX{PT{3kncM~d7zX0isAP^DRBUu?#Y zq6?DRkG3~AG;DYZ;Gz$)P5MMz#+^)JxW+XcU5}40A~O?wgoR#BKRQrv?B~#F%rv$l z=g$zu?lT{LLlBCheMhh}{H|uYVQF*(-$=3?@!8D4+>@2>4Z$61>LUGfi7D4o`(146 z6%#6K>Rx%OYocAuXKv0p!GS`Y0^+2>abU= zep_gz@N*%rrj9^>041a^As8>1OkC)?JQeyM+#AexT56`kLN>2j{KmKOxEnP>y?HeE-Q#BDnSM*dUt1 zc+KE1crzvT>e@(@b?KzKo^iD_xA%AU=%bwBF+1)M&*Q*saQv`*d!kV*uGPDFeiYmW2 zr^Q_f*0rj_J_U_U=>d62I4ME&5BwRbW#qEJ=IpACB%xz2KUlLcgo$aweri z4_5k)7YDC+heWSM)h{jJk@1JNr@J|9oesAeJxrJVMmxblH9I2{9%|ZkYt3QRcHVq9 zLPJjMV?uZYipx5ycZ6Dbx|rjl*|O2k5KeO*!4Xi

G()k^f4`z@Ba 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 z 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 L6*pA3{_(#6EwS$y literal 0 HcmV?d00001 diff --git a/doc/source/img/so3_modes.png b/doc/source/img/so3_modes.png new file mode 100644 index 0000000000000000000000000000000000000000..049bdc7099f05ea679a6fc007dde19fcd8a995ae GIT binary patch literal 132748 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 literal 0 HcmV?d00001 diff --git a/doc/source/img/so3_syscall.png b/doc/source/img/so3_syscall.png new file mode 100644 index 0000000000000000000000000000000000000000..3893384123a7a85b1e4552b74cccb4bd7f5aa97b GIT binary patch literal 86548 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

aJ!3`f6BpOa{;8~XbXs;ji+bT|6{e% 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 CByU;( delta 32512 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 Q;M1& diff --git a/doc/source/kernel.rst b/doc/source/kernel.rst index 68def63ba3..78298d83db 100644 --- a/doc/source/kernel.rst +++ b/doc/source/kernel.rst @@ -175,11 +175,11 @@ The tree contains drivers for the main device classes: * - storage (``mmc/``, ``ramdev/``) - SD/MMC controller, in-memory RAM disk * - framebuffer (``fb/``) - - PL111, ramfb, virtio-fb (used by LVGL) + - PL111, ramfb, virtfb (used by LVGL) * - input (``input/``) - - PS/2 (PL050), virtio input + - PS/2 (PL050, KMI), virtio keyboard/mouse * - network (``net/``) - - virtio-net / smc911x, wired to lwIP + - smc911x (``smsc,smc911x``), wired to lwIP — optional (``CONFIG_NET``) * - i2c, rpisense (``i2c/``, ``rpisense/``) - I²C bus and Raspberry Pi Sense HAT @@ -205,6 +205,6 @@ Networking SO3 integrates the **lwIP** TCP/IP stack (``net/lwip/``). The kernel exposes a BSD-style socket API; the ``net/`` glue maps VFS file descriptors onto lwIP sockets so that ``socket()`` / ``bind()`` / ``connect()`` / ``send()`` / -``recv()`` work from user space. TCP, UDP, IPv4/IPv6 and a DNS resolver are -available; the underlying NIC is a virtio-net (QEMU) or smc911x (hardware) -driver. See :ref:`lwip`. +``recv()`` work from user space. Networking is **opt-in** (``CONFIG_NET``, off in +the default ``virt64_defconfig``); the NIC driver in ``devices/net/`` is an +smc911x (``smsc,smc911x``) MAC. See :ref:`lwip`. diff --git a/doc/source/lwip.rst b/doc/source/lwip.rst index 845a33a414..987a0811b1 100644 --- a/doc/source/lwip.rst +++ b/doc/source/lwip.rst @@ -16,15 +16,22 @@ resolver. SO3 exposes a BSD-style **socket API** to user space: the ``net/`` glue maps VFS file descriptors onto lwIP sockets so that ``socket()``, ``bind()``, -``connect()``, ``send()`` and ``recv()`` work from applications. The underlying -network interface is a **virtio-net** device under QEMU (or an ``smc911x`` MAC on -hardware), wired into lwIP through the network driver in ``devices/net/``. See -the :ref:`networking section ` of the kernel chapter. +``connect()``, ``send()`` and ``recv()`` work from applications. The network +interface driver lives in ``devices/net/`` — currently an **smc911x** +(``smsc,smc911x``) MAC. See the :ref:`networking section ` of the kernel +chapter. + +.. note:: + + Networking is **opt-in**: it is enabled with ``CONFIG_NET`` and is *off* in + the default ``virt64_defconfig``. The smc911x MAC is present on boards such as + the ARM Versatile Express; QEMU's ``virt`` machine does not provide one, so a + different NIC driver is needed to exercise the stack there. Trying it out ============= -The ``ping`` application exercises the stack end to end. Under QEMU the launch -scripts attach a tap network device (``scripts/qemu-ifup.sh`` / -``qemu-ifdown.sh``), so the guest can reach the host network once the tap bridge -is configured. +With ``CONFIG_NET`` enabled and a supported NIC, the ``ping`` application +exercises the stack end to end. Under QEMU the launch scripts attach a tap +network device (``scripts/qemu-ifup.sh`` / ``qemu-ifdown.sh``), so the guest can +reach the host network once the tap bridge is configured.

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 q?ay}O|Ni{^|5IH5caQ2!tun3VKW - + ============================================ Smart Object Oriented (SO3) Operating System ============================================ -Smart Object Oriented Operating system is a compact, lightweight, full featured and extensible -operating system particularly well-suited for embedded systems in general. +SO3 is a compact, lightweight, full-featured and extensible operating system, +particularly well suited to embedded systems. From a single code base it can be +built in three ways: + +* as a **standalone OS** running directly on the hardware (EL1 on ARM64); +* as the **AVZ hypervisor** (*Agency VirtualiZer*) running at EL2 and hosting a + guest *agency* domain; +* as an **SO3 capsule** (S3C) — a lightweight guest running on top of AVZ beside + a Linux *agency*, as part of the **SOO** framework. + +.. figure:: img/so3_modes.png + :width: 100% -The documentation is constantly evolving over the time and further details will be -available soon. + The same SO3 code base deployed in its three modes. -SO3 Concepts and Architecture -============================= +This documentation reflects the current state of the code base: ARM 32/64-bit, +multicore, the AVZ hypervisor and SO3 capsules are all supported. -- :ref:`Introduction to SO3 ` -- :ref:`Architecture ` +Where to start +============== -Setup and Environment -===================== +:ref:`Introduction ` + Philosophy, history and the polymorphic nature of SO3. -- :ref:`User Guide ` -- :ref:`Debugging with JTAG on Raspberry Pi 4 ` +:ref:`Architecture ` · :ref:`Kernel internals ` + The user/kernel split, the boot flow, and how the kernel subsystems work. + +:ref:`AVZ hypervisor ` · :ref:`SO3 capsules ` + Virtualization at EL2 and the SOO capsule framework. + +:ref:`Build system ` · :ref:`User guide ` + How the tree is built, configured and packaged, and a step-by-step setup. + +:ref:`User space ` · :ref:`Debugging ` + The MUSL-based user land, and how to debug SO3 under QEMU/GDB or JTAG. - Development flow ================ -The master contains the last released version of the SOO framework. +The ``main`` branch contains the last released version. .. important:: - It is not allowed to push directly to the master. Please do a merge - request as soon as your development is stable. - -If you want to contribute, please first contact `the maintainer `__ and explain your motivation so that -you can be granted as developer. -Each development leads to a new issue with its related branch. You can develop freely, add comments along the issue -and perform a merge request as soon as your development gets stable enough. A review will be done and your contributions -will be merged in the master branch. + Do not push directly to ``main``. Each development leads to an issue with its + own branch; open a merge/pull request as soon as it is stable enough for + review. +If you want to contribute, please first contact `the maintainer `__. Discussion forum ================ -A `dedicated discussion forum `__ -is available for all questions/remarks/suggestions related to SO3. -Do not hesitate to create topics and to contribute. - +A `dedicated discussion forum `__ is +available for all questions, remarks and suggestions related to SO3. + +We would like to thank our sponsors for their generous support in funding the +development of the SO3 ecosystem, especially `HEIG-VD `__ +and the `Hasler Foundation `__. + .. _SOO_mail: info@soo.tech diff --git a/doc/source/introduction.rst b/doc/source/introduction.rst index 40bae40e0e..b9b30dcbac 100644 --- a/doc/source/introduction.rst +++ b/doc/source/introduction.rst @@ -1,82 +1,99 @@ .. _introduction: Introduction to SO3 -=================== - -SO3 (*Smart Object Oriented*) is a compact, extensible and full featured operating system which is particularly suited to embedded systems -such as IoT devices, real-time environment, academic development, etc. - -SO3 Operating System results from several Years of research and development at -`REDS `__ (Reconfigurable Embedded Digital Systems) Institute from `HEIG-VD `__, -in the field of embedded operating systems and execution environment with ARM 32/64-bit multicore systems. SO3 has -been publicly released in early 2020 (see also `HEIG-VD newsletter `__). - -`Prof. Daniel Rossier `__ initiated the development of an operating system in 2013 in the context of a Bachelor -lecture focusing on the port of operating systems on different embedded platforms. The OS has been constantly evolved -and used in other lectures (like operating systems of course) and since 2018 became SO3 to be used as -a full *migrating* execution environment between connected devices; this novel approach leads to the -`SOO framework `__ which is still in development. - -More recently, SO3 is become a *polymorphic* operating system, meaning that it can be configured to -run as an hypervisor, a standalone OS or a guest on top of the hypervisor. The hypervisor is called **AVZ** -(Agency VirtualiZer) and is aimed at running with or without ARM VT support. +################### + +SO3 (*Smart Object Oriented*) is a compact, extensible and full-featured +operating system that is particularly suited to embedded systems such as IoT +devices, real-time environments and academic development. + +SO3 is the result of several years of research and development at the +`REDS `__ (Reconfigurable Embedded Digital Systems) Institute of +`HEIG-VD `__, in the field of embedded operating systems and +execution environments for ARM 32/64-bit multicore systems. SO3 was publicly +released in early 2020 (see also the `HEIG-VD newsletter `__). + +`Prof. Daniel Rossier `__ initiated the development of an operating system +in 2013, in the context of a Bachelor lecture focusing on the port of operating +systems to different embedded platforms. The OS has evolved constantly and is +used in several lectures (operating systems, embedded systems); since 2018 it +became SO3 and grew into a full execution environment for connected devices — +the foundation of the `SOO framework `__. + +A polymorphic operating system +============================== + +The most distinctive feature of SO3 is that it is **polymorphic**: a single +source tree can be configured and built into three different kinds of system. + +Standalone OS + SO3 runs directly on the hardware as a conventional monolithic OS. On ARM64 + the kernel runs at **EL1** and user applications at **EL0**. This is the + configuration used for teaching and for plain embedded products + (``virt64_defconfig``, ``rpi4_64_defconfig``, …). + +AVZ hypervisor + The same tree, built with ``CONFIG_AVZ``, becomes **AVZ** (*Agency + VirtualiZer*) — a lightweight type-1 hypervisor running at **EL2**. AVZ hosts + one or more guest *domains*; the primary guest is the **agency**, a normal + SO3 (or Linux) running at EL1. See :ref:`avz`. + +SO3 capsule + On top of AVZ, the **SOO** framework adds *SO3 capsules* (**S3C**): + lightweight, self-contained guests that run at EL1 beside a Linux *agency* and + cooperate with it through split (frontend/backend) drivers. The capsule + (guest) side lives in this repository; the Linux agency and the rest of the + SOO framework live in a separate repository. See :ref:`capsules`. + +.. note:: + + *SO3 Capsule*, abbreviated **S3C**, is the current name and acronym for what + older code and papers called a *Mobile Entity* (ME). The code base now uses + the ``S3C`` acronym in identifiers and *capsule* in prose; the ``ME`` spelling + no longer appears. Approach and philosophy ------------------------ - -Today, there are plenty of operating systems especially in the area of IoT devices and embedded systems in general. -All these OS oviously have their own characteristics, pros and cons, but it still remains pretty hard to find an -OS which supports most of *traditional* features such as support for a user and kernel space, MMU, rootfs, -realtime feature, etc. while keeping a simple OS with low memory footprint and minimal configuration. - -The philosophy of SO3 is to keep an OS as compact as possible, which can be used not only in an academic environment -to provide students an OS envronment with a reasonible complexity, but in industry oriented projects where some -customization and rapid prototyping is required. +======================= -Of course, it does not consist in reiventing the wheel, but in opposite, to benefit from various experiences with existing -operating systems, emulation and virtualization frameworks. SO3 is mainly based on Linux principles; for example, its build system -fully relies on the KBuild and some portions of code (but not so many) come from Linux (examples are the very nice mechanisms -of linked list (``struct list_head``) and related macros, or *bitops* and other *types* declarations). -It is also one of the main reason why SO3 is released under the GPLv2 licence. +There are countless operating systems for IoT and embedded systems. They all +have their own characteristics, but it remains hard to find an OS that supports +the *traditional* features — user/kernel separation, MMU, a real root +filesystem, real-time behaviour — while staying small, simple and quick to +configure. +The philosophy of SO3 is to keep the OS **as compact as possible**: small +enough to be a reasonable-complexity teaching platform, yet complete enough for +industrial prototyping and customization. -Emulation is a **key** concept ------------------------------- +SO3 does not reinvent the wheel: it draws on long experience with other +operating systems and virtualization frameworks. It is mainly inspired by Linux +— its build system is based on **Kbuild**, and a few well-proven mechanisms +(the ``struct list_head`` linked lists and related macros, *bitops*, common type +definitions) come from Linux. This is also why SO3 is released under the +**GPLv2** licence. -From the beginning, the ``QEMU`` emulator constituted a crucial tool to understand and to grasp concepts in an operating system -like Linux, and it also essential to elaborate and to debug an OS in a deep and affordable way. At the REDS Institute, -we used QEMU since 2006 and have a strong experience in emulated environment. -Now, the emulated *vExpress* machine in QEMU is used as a reference platform for the 32-bit configuration (virt64 will -be used as soon as the AArch64 support will be integrated). +Emulation is a key concept +========================== -Besides emulation, the Raspberry Pi 4 is currently our platform of choice as real hardware. Its quadcore Cortex-A72 -can be used in a wide range of applications and brings along many interesting features. +From the very beginning, the **QEMU** emulator has been a crucial tool to grasp +operating-system concepts and to develop and debug SO3 in a deep yet affordable +way. REDS has used QEMU since 2006. +The reference emulated platform is QEMU's **virt** machine: ``virt64`` (ARM64, +Cortex-A72) for the 64-bit configuration and ``virt32`` (ARM, Cortex-A15) for +the 32-bit one. As real hardware, the **Raspberry Pi 4** (quad-core Cortex-A72) +is the main target; the **Toradex Verdin i.MX8M Plus** is also supported. SO3 as an experimental environment ----------------------------------- +================================== -One of the major advantage with SO3 is its time of compilation. The kernel is compiled (from scratch) in less than 10 secs -and the user space less than 20 secs depending on what is compiled. -Therefore, SO3 can be used a very nice environment to experiment different things; testing a kernel function, -processor features, or compilation tricks are easily achieved. - -Ongoing work with SO3 ---------------------- - -SO3 is evolving constantly. Here is a non-exhaustive list of future work: - -- Improvement of the networking based on lwIP -- Support of 64-bit (AArch64) -- Support of multi-cores -- Porting SO3 on a RISC-V architecture (Diploma work) - -And finally, we are looking for passoniated contributors :-) Please do not hesitate to `contact us `__. +A major advantage of SO3 is its **compilation time**. The kernel builds from +scratch in a few seconds, and the user space in a few tens of seconds depending +on what is selected. SO3 is therefore an excellent environment to experiment: +trying out a kernel function, a processor feature or a compilation trick is +quick and cheap. .. _REDS: http://www.reds.ch .. _HEIG-VD: http://www.heig-vd.ch -.. _heig-vd_news: https://heig-vd.ch/actualites?utm_medium=email&utm_campaign=Newsletter%20externe%2039&utm_content=Newsletter%20externe%2039+CID_db69309487920998ee2eaa75dc3cab5a&utm_source=heig%20vd&utm_term=PLUS%20DINFORMATIONS#/2020/02/11/so3systemeexploitation +.. _heig-vd_news: https://heig-vd.ch/ .. _DRE: https://reds.heig-vd.ch/en/team/details/daniel.rossier -.. _DRE_mail: info@soo.tech - - diff --git a/doc/source/kernel.rst b/doc/source/kernel.rst new file mode 100644 index 0000000000..68def63ba3 --- /dev/null +++ b/doc/source/kernel.rst @@ -0,0 +1,210 @@ +.. _kernel: + +Kernel Internals +################ + +This chapter describes the main subsystems of the SO3 kernel as they exist in +the source tree. Unless stated otherwise the discussion targets the ARM64 +(``arch/arm64``) port; the ARM32 port follows the same structure with 2-level +page tables and the classic AArch32 register model. + +Memory management +================= + +Page-frame allocator +-------------------- + +Physical memory is tracked by a **frame table** (``mm/memory.c``): an array with +one entry per physical page, recording whether the page is free and its +reference count. The amount of RAM and its base address are obtained from the +device tree at boot (``get_mem_info()``). ``get_free_page()`` returns a free +physical page (the table is protected by a spinlock); pages are released back to +the table when their reference count drops to zero. + +Kernel heap +----------- + +Dynamic kernel allocations use a **quick-fit** heap (``mm/heap.c``) sized by +``CONFIG_HEAP_SIZE_MB`` and reserved by the linker script. ``malloc()`` / +``free()`` operate on this heap; chunks carry small metadata headers and are +kept on free lists by size. + +MMU and address translation +--------------------------- + +The page tables are built in ``arch/arm64/mmu.c``. On ARM64 SO3 uses up to +**four levels** (L0–L3) with 4 KiB granularity; the presence of the top L0 level +depends on ``CONFIG_VA_BITS_48``. ``create_mapping()`` installs a virtual→ +physical mapping in a given page table, allocating intermediate tables as needed +and choosing block (1 GiB / 2 MiB) or page (4 KiB) descriptors according to +alignment and size. The kernel runs from the high half (``TTBR1_EL1``); each +process has its own low-half table (``TTBR0_EL1``). See +:ref:`the address-space section ` for the layout and the +``CONFIG_KERNEL_VADDR`` values. + +Threads and scheduling +====================== + +The unit of execution is a **thread**, described by a *Task Control Block* +(``tcb_t``, ``include/thread.h``): thread id, priority, state +(``READY`` / ``RUNNING`` / ``WAITING`` / ``ZOMBIE`` …), a saved CPU context +(``cpu_regs_t``) and a stack slot. Threads are either **kernel threads** +(``kernel_thread()``) or **user threads** (``user_thread()``) attached to a +process. + +The scheduler lives in ``kernel/schedule.c``. The default policy is +**round-robin** (``CONFIG_SCHED_RR``) with timer-driven preemption +(``CONFIG_SCHED_FREQ_PREEMPTION``); a fixed-priority policy +(``CONFIG_SCHED_PRIO``) is also available. ``schedule()`` selects the next +runnable thread and calls ``__switch_to()`` (``arch/arm64/context.S``), which +saves the callee-saved registers (x19–x29, ``sp``, ``lr``) of the outgoing +thread into its TCB and restores them from the incoming one. + +Processes +========= + +A **process** (``pcb_t``, ``include/process.h``) owns an address space +(its L0 page table), a heap, a set of file descriptors and one or more threads. +Processes are created by the usual ``fork()`` / ``execve()`` pair. + +The very first process is built by ``create_root_process()`` +(``kernel/process.c``). It maps the compiled-in ``.root_proc.text`` trampoline +(``__root_proc`` in ``arch/arm64/context.S``) at ``USER_SPACE_VADDR`` +(``0x1000``) and starts a user thread there. The trampoline immediately issues +an ``execve("init.elf")`` so that the first *real* program is the init process. + +ELF binaries are parsed and loaded by ``fs/elf.c`` (``elf_load_buffer()`` reads +the file through the VFS; the loadable segments are then mapped into the +process' address space). + +System calls +============ + +User code enters the kernel with the ``svc`` instruction. The system-call number +is passed in **x8** and the arguments in **x0–x5** (AArch64 ABI). + +.. figure:: img/so3_syscall.png + :width: 100% + + The AArch64 system-call path. + +The ``svc`` traps to the *Lower EL / Synchronous* slot of the EL1 vector table +(``VBAR_EL1 + 0x400``, ``arch/arm64/exception.S``), which branches to +``el01_sync_handler``. That handler saves the user context and calls +``trap_handle()`` (``arch/arm64/traps.c``), which decodes ``ESR_EL1``; for an +``SVC64`` exception it forwards to ``syscall_handle()`` (``kernel/syscalls.c``). + +The dispatch table ``syscall_table[]`` is **generated at build time** from +``syscall.tbl`` by ``scripts/syscall_gen.sh`` (producing +``generated/syscall_table.h.in``), giving the kernel and the MUSL libc a common +ABI. Each entry is a ``sys_xxx()`` function declared with the +``SYSCALL_DEFINEn()`` macros. The return value is placed back in ``x0`` and the +handler ``eret``\ s to EL0. + +.. warning:: + + The vector table must contain **all 16** architectural slots, correctly + spaced. Omitting a slot (for instance behind a bare ``#ifdef CONFIG_AVZ``) + shifts the lower-EL vectors and silently misroutes ``svc`` to the wrong + handler — see the SError slot in ``arch/arm64/exception.S``. + +Inter-process communication +=========================== + +The ``ipc/`` directory provides: + +* **signals** (``signal.c``) — POSIX-like signals checked on return to user + space; ``rt_sigaction()``, ``kill()``, signal masks, default actions; +* **pipes** (``pipe.c``) — in-kernel FIFOs with blocking read/write backed by + completions; +* **semaphores** (``semaphore.c``) and **completions** (``completion.c``) — the + kernel's synchronisation primitives, also used internally by drivers and the + scheduler. + +Virtual filesystem +================== + +The **VFS** (``fs/vfs.c``) maintains a global file-descriptor table; each +process maps its local descriptors (``pcb->fd_array``) onto global ones. File +operations are dispatched to the filesystem that owns the file. The kernel +registers: + +* **FAT** (``fs/fat/``) — a FAT driver used for the root filesystem, whether it + is a RAM disk (``CONFIG_ROOTFS_RAMDEV``) packed in the FIT image, or an MMC + card (``CONFIG_ROOTFS_MMC``); +* **devfs** (``fs/devfs/``) — a virtual filesystem that exposes registered + devices under ``/dev``. + +``vfs_init()`` is called early in ``kernel_start()`` and sets up these +filesystems before the root process is launched. + +Device and driver model +======================== + +SO3 uses a **device-tree-driven** driver model. + +.. figure:: img/so3_device_model.png + :width: 100% + + From the device tree to a ``/dev`` entry. + +Drivers register with the ``REGISTER_DRIVER_CORE`` / ``REGISTER_DRIVER_POSTCORE`` +macros, which place an *initcall* entry into a dedicated linker section +(``.initcall_driver_initcall_t_core`` / ``…_postcore`` in the linker script, +reached at runtime through the ``ll_entry_*`` helpers). At boot, +``parse_dtb()`` (``devices/``) walks the flattened device tree, matches each +node's ``compatible`` string against the registered drivers and calls the +driver's ``init(dev, fdt_offset)`` callback. A driver then publishes a +**device class** (``devclass``) with its file operations and a device-id range; +``devfs`` makes it reachable as ``/dev/``. + +The tree contains drivers for the main device classes: + +.. flat-table:: + :header-rows: 1 + :widths: 25 75 + + * - Class (``devices/``) + - Drivers + * - interrupt controller (``irq/``) + - ARM GIC (v2/v3), and the virtual GIC for AVZ (see :ref:`avz`) + * - timer (``timer/``) + - ARM generic timer (``arm_timer``) + * - serial (``serial/``) + - PL011, NS16550, i.MX UART + * - storage (``mmc/``, ``ramdev/``) + - SD/MMC controller, in-memory RAM disk + * - framebuffer (``fb/``) + - PL111, ramfb, virtio-fb (used by LVGL) + * - input (``input/``) + - PS/2 (PL050), virtio input + * - network (``net/``) + - virtio-net / smc911x, wired to lwIP + * - i2c, rpisense (``i2c/``, ``rpisense/``) + - I²C bus and Raspberry Pi Sense HAT + +Interrupts and time +=================== + +The exception vectors are installed at ``VBAR_EL1`` (``arch/arm64/exception.S``). +Hardware interrupts are handled by the **GIC** driver (``devices/irq/gic.c``): +on an IRQ the handler reads the interrupt acknowledge register, dispatches to the +registered handler and signals end-of-interrupt. In the standalone (EL1) +configuration the CPU interface uses ``EOImode = 0`` (a single ``EOIR`` write +both drops priority and deactivates the interrupt). The AVZ (EL2) configuration +uses ``EOImode = 1`` and the virtual GIC to forward interrupts to guests — see +:ref:`avz`. + +Time is provided by the ARM generic timer (``devices/timer/arm_timer.c``). A +periodic tick drives the scheduler; ``calibrate_delay()`` (run once during +bring-up) waits for the first ticks to compute the busy-loop delay constant. + +Networking +========== + +SO3 integrates the **lwIP** TCP/IP stack (``net/lwip/``). The kernel exposes a +BSD-style socket API; the ``net/`` glue maps VFS file descriptors onto lwIP +sockets so that ``socket()`` / ``bind()`` / ``connect()`` / ``send()`` / +``recv()`` work from user space. TCP, UDP, IPv4/IPv6 and a DNS resolver are +available; the underlying NIC is a virtio-net (QEMU) or smc911x (hardware) +driver. See :ref:`lwip`. diff --git a/doc/source/lvgl.rst b/doc/source/lvgl.rst index 33bf2f3e76..3a0da27b17 100644 --- a/doc/source/lvgl.rst +++ b/doc/source/lvgl.rst @@ -1,41 +1,42 @@ +.. _lvgl: -LVGL - Light and Versatile Embedded Graphics Library -==================================================== +LVGL — Light and Versatile Embedded Graphics Library +#################################################### -LVGL is a free and open-source library providing an efficient GUI for embedded systems. -More information is available on the `official site `__. +`LVGL `__ is a free and open-source library providing an +efficient GUI for embedded systems. Integration of LVGL in SO3 --------------------------- +========================== -The major work of porting LVGL in SO3 has been done by Nikolaos Garanis in the context of -his `Bachelor project `_. - -Some details about the porting can be found in our `discussion forum `__. - -There is `a small video `__ to show LVGL running in the QEMU/vExpress framebuffer emulated environment. - -In addition, from LVGL v8, the ``lv_demo_widgets`` is now fully supported. And yes, SO3 integrates LVGL v8. - -This part will be completed very soon... +The initial port of LVGL to SO3 was done by Nikolaos Garanis in the context of +his `Bachelor project `__; some +details are available on our `discussion forum +`__ and in +`a short video `__. +SO3 integrates **LVGL v8**, and the ``lv_demo_widgets`` demo is fully supported. +On the kernel side LVGL draws to the SO3 framebuffer device (``devices/fb/``, +exposed through ``/dev`` — see :ref:`kernel`); the LVGL library itself is built +into the user space (``usr/lib/lvgl``) and used by the ``lvgl_demo``, +``lvgl_perf`` and ``lvgl_benchmark`` applications. .. _LVGL_qemu: https://youtu.be/skn_mp3ZBhI -Using LVGL in the emulated environment --------------------------------------- +Running LVGL under QEMU +======================= .. note:: - First, make sure you compiled the kernel with a configuration - which has the framebuffer enabled (for example, *vexpress_fb_defconfig*) - -In order to have a graphical framebuffer in the emulated QEMU/vExpress -environment, it is necessary to start the emulator with the ``stg`` script: + Build the kernel with a framebuffer-enabled configuration, for example + ``virt64_fb_defconfig``, and the user space with the LVGL apps. + +The framebuffer needs a real display window, so start the emulator with the +graphical launch script instead of ``./st``: .. code-block:: bash ./stg - -QEMU will start a new GUI window used as framebuffer. +QEMU opens a window that acts as the framebuffer; launch an LVGL application from +the ``so3%`` prompt to draw into it. diff --git a/doc/source/lwip.rst b/doc/source/lwip.rst index 6cb3e2c718..845a33a414 100644 --- a/doc/source/lwip.rst +++ b/doc/source/lwip.rst @@ -1,16 +1,30 @@ -lwIP - Lightweigth IP -===================== +.. _lwip: -lwIP is a small independent implementation of the TCP/IP protocol suite. +lwIP — Lightweight IP +##################### -Information about lwIP can be obtained on the `official site `__. +`lwIP `__ is a small, independent +implementation of the TCP/IP protocol suite, designed for embedded systems with +limited resources. Integration of lwIP in SO3 --------------------------- - -The major work of porting lwIP in SO3 has been done by Julien Quartier in the context of his Diploma work. - - - -This part will be completed very soon... - +========================== + +The port of lwIP to SO3 was originally done by Julien Quartier as a Diploma work. +The stack lives under ``net/lwip/`` and provides TCP, UDP, IPv4/IPv6 and a DNS +resolver. + +SO3 exposes a BSD-style **socket API** to user space: the ``net/`` glue maps VFS +file descriptors onto lwIP sockets so that ``socket()``, ``bind()``, +``connect()``, ``send()`` and ``recv()`` work from applications. The underlying +network interface is a **virtio-net** device under QEMU (or an ``smc911x`` MAC on +hardware), wired into lwIP through the network driver in ``devices/net/``. See +the :ref:`networking section ` of the kernel chapter. + +Trying it out +============= + +The ``ping`` application exercises the stack end to end. Under QEMU the launch +scripts attach a tap network device (``scripts/qemu-ifup.sh`` / +``qemu-ifdown.sh``), so the guest can reach the host network once the tap bridge +is configured. diff --git a/doc/source/micropython.rst b/doc/source/micropython.rst index f46fe373b1..0e02c164a1 100644 --- a/doc/source/micropython.rst +++ b/doc/source/micropython.rst @@ -1,3 +1,4 @@ +.. _micropython: MicroPython =========== diff --git a/doc/source/user_guide.rst b/doc/source/user_guide.rst index 6451313caa..b0f9a0fe6c 100644 --- a/doc/source/user_guide.rst +++ b/doc/source/user_guide.rst @@ -3,310 +3,203 @@ User Guide ########## -The following instructions have been validated with Ubuntu 22.04, but for sure -it will work with lower release. +This guide walks through setting up SO3 from scratch and running it in QEMU. +The instructions were validated on Ubuntu 22.04 but work on other recent +distributions. The reference platform is **virt64** (QEMU's ``virt`` machine, +Cortex-A72, ARM64). -Pre-requisite -************* +Prerequisites +============= -We need to run some i386 executables, and we need to install some i386 -libraries too. - -.. code:: bash - - sudo dpkg --add-architecture i386 - sudo apt-get update - sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386 - sudo apt-get install lib32z1-dev - sudo apt-get install zlib1g:i386 - -Various other packages are required: - -.. code:: bash - - sudo apt-get install pkg-config libgtk2.0-dev bridge-utils - sudo apt-get install unzip bc - sudo apt-get install elfutils u-boot-tools - sudo apt-get install device-tree-compiler - sudo apt-get install fdisk - sudo apt-get install libncurses-dev - -The following packets are not mandatory, but they can be installed to -prevent annoying warnings: - -.. code:: bash - - sudo apt-get install bison flex - -Files and directory organization -******************************** - -SO3 root directory (main subdirs):: - - so3 - ├── usr - ├── src - ├── filesystem - ├── target - ├── u-boot - └── qemu - -- The SO3 tree is organized in two main parts: **kernel** and **user** - space files. All kernel space related files are located in ``so3/`` - while the user space files resides in ``usr/``. - -- The ``filesystem`` directory contains the virtual SD-card image which will - be attached to the QEMU environment. - -- The ``target`` directory contains the set of ``.its`` files which are used - by the *U-boot* bootloader. - -- The ``u-boot`` and ``qemu`` directories contain the *bootloader* and - the *emulator* respectively. - -Build of the environment -************************ - -Kernel toolchain -================ - -We use the ``arm-none-eabi`` toolchain which has no dependencies on a libc. - -The following package can be installed: +Install the host packages used to build the tree, the device trees, the FIT +images and the disk images: .. code-block:: bash - - apt install gcc-arm-none-eabi -User space toolchain -==================== + sudo apt-get update + sudo apt-get install build-essential bc unzip flex bison + sudo apt-get install device-tree-compiler u-boot-tools + sudo apt-get install fdisk dosfstools + sudo apt-get install qemu-system-arm libncurses-dev + sudo apt-get install bridge-utils # for QEMU tap networking -The user space uses MUSL as libc. The Musl toolchains can be generated with -``toolchains/build-toolchain.sh`` script. +Toolchains +========== -.. code-block:: bash +SO3 uses **two** cross toolchains: - $ sudo ./build-toolchain.sh +Kernel + A *bare-metal* toolchain with no libc dependency: + ``aarch64-none-elf`` for ARM64 and ``arm-none-eabi`` for ARM32. The kernel's + ``CONFIG_CROSS_COMPILE`` points at it (``aarch64-none-elf-`` by default). -By default, it generates ``aarch64-linux-musl`` and ``arm-linux-musleabihf`` -folder in the ``toolchains`` directory +User space + The user applications link against **MUSL**. The MUSL toolchains + (``aarch64-linux-musl`` and ``arm-linux-musleabihf``) are produced by: -.. note:: + .. code-block:: bash - The output directory (by default ``toolchains`` folder) can be changed by setting - the ``OUTPUT_PATH`` variable in the ``build-toolchain.sh`` script + cd toolchains + ./build-toolchain.sh -Quick setup & early test -======================== + By default this generates the toolchain directories under ``toolchains/``. -The following commands is helpful to have quick up-and-running -environment with SO3, i.e. a shell running on top of the kernel in the -emulated *virt32* environment. +Make sure both toolchains are on your ``PATH``. -Setting up QEMU -=============== +Repository layout +================= -The QEMU emulator can be installed via apt for 32-bit and 64-bit versions, -as follows: +The most relevant top-level directories are:: -.. code-block:: bash + so3/ # the kernel source (and the avz/ hypervisor, soo/ framework) + usr/ # user-space applications (CMake + MUSL) + rootfs/ # root filesystem image (ramfs) and its creation script + target/ # FIT image descriptions (*.its) and mkuboot.sh + filesystem/ # the virtual SD-card image used by QEMU + u-boot/ # the U-Boot bootloader + avz/ # out-of-tree build of the AVZ hypervisor + build.conf # selects the active PLATFORM + deploy.sh # deploys kernel/dtb/ramfs/apps into the SD-card image - apt-get install qemu-system-arm - apt-get install qemu-system-aarch64 +Quick start (standalone, virt64) +================================ -Compiling U-boot -================ +The fastest path to a shell on top of the standalone kernel. -U-boot is used as initial bootloader. The kernel image, the device tree and -its root filesystem will be embedded in a single ITB image file. +**1. Select the platform.** Edit ``build.conf`` so that ``PLATFORM := virt64`` +(the default). -In u-boot/ directory: +**2. Build U-Boot** (once): .. code-block:: bash cd u-boot - make virt32_defconfig - make -j8 - -Creating the virtual disk image -=============================== + make virt64_defconfig + make -j$(nproc) -In *filesystem/* directory, create a virtual disk image with the -following script: +**3. Create the virtual SD-card** (once), in ``filesystem/``: .. code-block:: bash cd filesystem - ./create_img.sh vexpress - -This script will create two FAT32 partitions, but only the first one will -be used currently (there is no support to mount the filesystem on the -second partition). - -Compiling the user space -======================== - -The user space build system is based on cmake (CMakeList.txt files). + ./create_img.sh virt64 -To build the user space applications, go to ``usr/`` directory and simply -do make: +**4. Build the user space** and pack the ramfs: .. code-block:: bash cd usr ./build.sh - -In order to support the configuration with an embedded ``ramfs``, you also need to create -a FAT-32 image which will contain the user apps. This is achieved with -the following script: + cd ../rootfs + ./create_ramfs.sh # once, creates rootfs.fat -.. code-block:: bash - - cd rootfs - ./create_ramfs.sh - -The deployment of user applications into this *ramfs* will be done below during -the deployment into the SD-card (option ``-u`` of the ``deploy.sh`` script at -the root directory). - -Compiling the kernel space -========================== - -The kernel has to be compiled in ``*so3*/`` after choosing a configuration: +**5. Build the kernel:** .. code-block:: bash cd so3 - make virt32_ramfs_defconfig - make - -In this example, we are working with an embedded *ramfs* which will be packed -in the ITB image file. + make virt64_defconfig + make -j$(nproc) -Deployment into the SD-card -=========================== - -At this point, all necessary components have been built. Now comes the -phase of deployment in the virtual disk. This is done by means of the -``deploy.sh`` script located at the root tree. -Currently, you should only use option ``-b`` and ``-u`` to deploy the **kernel**, -the **device tree** and the **ramfs** into the ITB file. This image file is -then copied in the first partition of the SD-card. +**6. Deploy** kernel, device tree, ramfs and the user apps into the SD-card +image (from the repository root): .. code-block:: bash ./deploy.sh -bu -Starting SO3 -************ +The ``-b`` option deploys the boot components (it builds the FIT image and copies +it into the first partition); ``-u`` deploys the user applications into the +ramfs. -Simply invoking the script st as following: +**7. Run:** .. code-block:: bash ./st -and you should run into the shell… +You should land at the ``so3%`` prompt. .. note:: - To quit QEMU, type ``Ctrl+x`` followed by ``a`` (not Ctrl+a). - - - -SO3 Configuration and ITS files -******************************* - -This section describes the default configurations of the SO3 kernel -which are present in ``*so3/configs/*`` and in ``target/`` - -SO3 works with the following plaforms: ``virt32``, ``virt64``, ``rpi4``, ``rpi4_64`` + To quit QEMU, type ``Ctrl-x`` followed by ``a`` (not ``Ctrl-a``). -+----------------------------+--------------------+----------------------+--------+--------+------+---------+-----+----+----+-------------+--------+------------+ -| ITS | DTS | Config | virt32 | virt64 | rpi4 | rpi4_64 | avz | pv | vt | soo (linux) | rootfs | Validation | -+============================+====================+======================+========+========+======+=========+=====+====+====+=============+========+============+ -| | | virt32_defconfig | | | | | | | | | | | -+----------------------------+--------------------+----------------------+--------+--------+------+---------+-----+----+----+-------------+--------+------------+ -| | | virt64_defconfig | | X | | | | | | | X | 27.09.23 | -+----------------------------+--------------------+----------------------+--------+--------+------+---------+-----+----+----+-------------+--------+------------+ -| virt32_avz.its | virt32.dts | virt32_pv_defconfig | X | | | | X | X | | | X | 13.12.23 | -+----------------------------+--------------------+----------------------+--------+--------+------+---------+-----+----+----+-------------+--------+------------+ -| rpi4.its | rpi4.dts | rpi4_defconfig | | | X | | | | | | X | 30.11.23 | -+----------------------------+--------------------+----------------------+--------+--------+------+---------+-----+----+----+-------------+--------+------------+ -| rpi4_64_avz_so3_pv.its | rpi4_64_avz_pv.dts | rpi4_64_pv_defconfig | | | | X | X | X | | | X | 27.09.23 | -+----------------------------+--------------------+----------------------+--------+--------+------+---------+-----+----+----+-------------+--------+------------+ -| rpi4_64_so3_standalone.its | rpi4_64.dts | rpi4_64_defconfig | | | | X | | | | | X | 26.09.23 | -+----------------------------+--------------------+----------------------+--------+--------+------+---------+-----+----+----+-------------+--------+------------+ -| virt64_avz_so3_pv.its | virt64.dts | virt64_pv_defconfig | | X | | | X | X | | | X | 26.09.23 | -+----------------------------+--------------------+----------------------+--------+--------+------+---------+-----+----+----+-------------+--------+------------+ -| rpi4_64_avz_so3_vt.its | | rpi4_64_defconfig | | | | X | X | | X | | X | 27.09.23 | -+----------------------------+--------------------+----------------------+--------+--------+------+---------+-----+----+----+-------------+--------+------------+ -| (soo) virt64.its | virt64_avz_pv | virt64_pv_defconfig | | X | | | | X | | X | | 07.10.23 | -+----------------------------+--------------------+----------------------+--------+--------+------+---------+-----+----+----+-------------+--------+------------+ -| (soo) rpi4_64.its | rpi4_64_avz_pv | virt64_pv_defconfig | | | | X | X | X | | X | | 08.10.23 | -+----------------------------+--------------------+----------------------+--------+--------+------+---------+-----+----+----+-------------+--------+------------+ +Launch scripts +============== +Three launch scripts wrap QEMU with the right options: -*To be completed* +.. flat-table:: + :header-rows: 1 + :widths: 12 88 -Deployment of a *Hello World* application -***************************************** + * - Script + - Use + * - ``./st`` + - **standalone** SO3 (``-M virt``, no virtualization). The kernel runs at + EL1. + * - ``./stv`` + - **AVZ** (``-M virt,gic-version=2,virtualization=on``). EL2 is available, + so the hypervisor can run. + * - ``./stg`` + - **graphical** run (a display window instead of ``-nographic``), used for + the framebuffer / LVGL configurations. -Using a *ramfs* configuration -============================= +All three read ``PLATFORM`` from ``build.conf`` and attach the SD-card image, +a virtio block device and a tap network device. -All user applications reside in ``usr/src`` directory. Adding a C file requires to update -the ``CMakeLists.txt`` file. - -All binaries are produced in the ``usr/build`` directory by *cmake*. And all files which -will be deployed by the deployment script are stored in ``usr/build/deploy``. - -.. note:: - - Currently, the ``cd`` command is not implemented in the shell of SO3. - For this reason, all executables (and other files) are stored in the root directory, - except the entries of ``dev/`` used to access the drivers. +Running the AVZ hypervisor +========================== -The deployment into the virtual SD-card is simply done with the ``deploy.sh`` script -at the root dir as follows: +To run the hypervisor with an agency guest on virt64: .. code-block:: bash - ./deploy.sh -u - -.. note:: - - This manner of deploying user applications requires to have a ramfs - configuration. All user apps are actually transfered into the *itb* file - which is deployed in the unique partition of the SD-card. - - The next section shows how you should deploy with the MMC configuration. - - -Installation and run with SO3 docker -************************************ + # 1. Build the hypervisor (out-of-tree into avz/) + cd avz + ./build.sh virt64_avz_defconfig + ./build.sh -It is also possible to start SO3 within a docker container. -The ``Dockerfile`` is located at the root directory and two scripts -``drun`` and ``drunit`` (for interactive mode) are available to start -the execution. + # 2. Build the agency guest (a standalone SO3) and pack the FIT image + cd ../so3 + make virt64_defconfig + make -j$(nproc) + cd ../target + ./mkuboot.sh virt64_avz_so3 # produces virt64_avz_so3.itb -For example, building of a container named ``so3/virt32`` can achieved like this: + # 3. Deploy that .itb as the image U-Boot loads (virt64.itb) and run + # (see deploy.sh / the filesystem mount scripts), then: + cd .. + ./stv -.. code-block::bash +A successful run shows the **AVZ Hypervisor** banner, the *Loading Guest Domain* +trace and finally the agency reaching the ``so3%`` prompt. See :ref:`avz` for +what happens under the hood. - docker build -t so3/virt32 . +Running with Docker +=================== -The, starting the execution of the container: +SO3 can also be built and run inside a Docker container. The ``Dockerfile`` is +at the repository root, and two helpers start the container: -.. code-block::bash +.. code-block:: bash - ./drun - + docker build -t so3/virt64 . + ./drun # run + ./drunit # run, interactive +Deploying a *Hello World* +========================= - +User applications live in ``usr/src/``; adding a C file means adding it to the +relevant ``CMakeLists.txt``. Binaries are produced under ``usr/build/`` and the +files to be deployed are gathered in ``usr/build/deploy/``. After building the +user space, deploy the apps into the ramfs with: +.. code-block:: bash + ./deploy.sh -u - +This works with a ramfs configuration: the user applications are transferred +into the ``.itb`` image that is written to the single partition of the SD-card. +See :ref:`user_space` for the user-space build details. diff --git a/doc/source/user_space.rst b/doc/source/user_space.rst new file mode 100644 index 0000000000..f9689902a0 --- /dev/null +++ b/doc/source/user_space.rst @@ -0,0 +1,112 @@ +.. _user_space: + +User Space +########## + +The SO3 user space is a small, self-contained set of applications built against +the **MUSL** C library. Everything lives under ``usr/``. + +The MUSL C library +================== + +SO3 uses `MUSL `__ as its libc for user applications — a small, clean and +static-friendly implementation well suited to embedded systems. Not every libc +function is enabled; functions are pulled in as the need arises. More complex +facilities (for example full ``pthreads``) are intentionally kept minimal. + +Applications are linked **statically** against MUSL, so each executable is +self-contained. + +Build system (CMake) +==================== + +The user space is built with **CMake** and the MUSL cross toolchain. The build +is driven by ``usr/build.sh``, which: + +* reads ``PLATFORM`` from ``../build.conf`` and selects the matching toolchain + file — ``usr/aarch64-linux-musl.cmake`` for 64-bit platforms (virt64, + rpi4_64), ``usr/arm-linux-musl.cmake`` for 32-bit ones; +* configures and builds the tree under ``usr/build/``; +* separates debug information (a stripped ``*.elf`` plus a ``*.elf.debug``) and + collects the deployable binaries in ``usr/build/deploy/``. + +.. code-block:: bash + + cd usr + ./build.sh + +Adding an application means dropping a C file in ``usr/src/`` and referencing it +from the relevant ``CMakeLists.txt``. + +Applications +============ + +The standard applications in ``usr/src/`` include: + +.. flat-table:: + :header-rows: 1 + :widths: 22 78 + + * - Program + - Role + * - ``init.elf`` + - the **init** process: reads ``commands.ini`` and launches the shell + * - ``sh.elf`` + - the interactive **shell** (the ``so3%`` prompt) + * - ``ls`` / ``cat`` / ``more`` / ``echo`` + - basic file utilities + * - ``ping`` + - ICMP ping (exercises the lwIP stack) + * - ``time`` + - simple timing utility + * - ``hello-world`` + - minimal example + * - ``thread_example`` / ``logs_example`` / ``mydev_test`` + - API and subsystem demonstrations + * - ``lvgl_demo`` / ``lvgl_perf`` / ``lvgl_benchmark`` + - LVGL graphical demos (framebuffer builds — see :ref:`lvgl`) + * - MicroPython + - the MicroPython interpreter (ARM64 — see :ref:`micropython`) + +User-space libraries used by the applications live in ``usr/lib/`` (the LVGL +graphics library, logging helpers, and so on). + +Init and the shell +================== + +When the kernel hands over to user space, the root process ``execve()``\ s +``init.elf``. Init reads a small ``commands.ini`` script and runs it line by +line; a typical script prints a banner and starts the shell: + +.. code-block:: text + + echo SO3 Init Program :) + shell + +The shell then presents the ``so3%`` prompt and runs commands by forking and +``execve()``\ -ing the corresponding ``.elf`` from the root filesystem. + +.. note:: + + The shell does not implement ``cd``: all executables and data files live in + the root directory of the filesystem (except the device nodes under + ``dev/``). + +Root filesystem +=============== + +The applications are delivered through a root filesystem. In the default +(ramfs) configuration this is a FAT image, ``rootfs/rootfs.fat``, created by: + +.. code-block:: bash + + cd rootfs + ./create_ramfs.sh + +``deploy.sh -u`` copies the freshly built user binaries from +``usr/build/deploy/`` into this image, which is then packed into the FIT image +and written to the SD-card (:ref:`user_guide`). The same FAT image can be +inspected on the host by mounting its partition — useful when debugging what +actually ended up on the target. + +.. _MUSL: https://musl.libc.org diff --git a/so3/Kconfig b/so3/Kconfig index 18231bee5f..941eb203f7 100644 --- a/so3/Kconfig +++ b/so3/Kconfig @@ -90,7 +90,7 @@ config LOG_LEVEL if !AVZ && !ARCH_ARM32 config SOO - bool "Configure SO3 as a Mobile Entity (ME)" + bool "Configure SO3 as a SO3 capsule (capsule)" endif if AVZ diff --git a/so3/apps/refso3/callbacks.c b/so3/apps/refso3/callbacks.c index 05fe33f7f5..b6ecfdc8ba 100644 --- a/so3/apps/refso3/callbacks.c +++ b/so3/apps/refso3/callbacks.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2014-2023 Daniel Rossier + * Copyright (C) 2014-2026 Daniel Rossier * Copyright (C) March 2018 Baptiste Delporte * * This program is free software; you can redistribute it and/or modify @@ -31,7 +31,7 @@ #include #include -#include +#include #include @@ -49,19 +49,19 @@ sh_refso3_t *sh_refso3; */ void cb_pre_suspend(soo_domcall_arg_t *args) { - DBG(">> ME %d: cb_pre_suspend...\n", ME_domID()); + DBG(">> capsule %d: cb_pre_suspend...\n", S3C_domID()); } /** * PRE_RESUME * - * This callback is executed right before resuming the frontend drivers, right after ME activation + * This callback is executed right before resuming the frontend drivers, right after capsule activation * * Returns 0 if no propagation to the user space is required, 1 otherwise */ void cb_pre_resume(soo_domcall_arg_t *args) { - DBG(">> ME %d: cb_pre_resume...\n", ME_domID()); + DBG(">> capsule %d: cb_pre_resume...\n", S3C_domID()); } /** @@ -74,7 +74,7 @@ void cb_post_activate(soo_domcall_arg_t *args) static uint32_t count = 0; #endif - DBG(">> ME %d: cb_post_activate...\n", ME_domID()); + DBG(">> capsule %d: cb_post_activate...\n", S3C_domID()); } /** @@ -86,14 +86,14 @@ void cb_post_activate(soo_domcall_arg_t *args) void cb_shutdown(void) { - DBG(">> ME %d: cb_shutdown...\n", ME_domID()); - DBG("ME state: %d\n", get_ME_state()); + DBG(">> capsule %d: cb_shutdown...\n", S3C_domID()); + DBG("capsule state: %d\n", get_S3C_state()); - /* We do nothing particular here for this ME, + /* We do nothing particular here for this capsule, * however we proceed with the normal termination of execution. */ - set_ME_state(ME_state_terminated); + set_S3C_state(S3C_state_terminated); } void callbacks_init(void) diff --git a/so3/apps/refso3/refso3.c b/so3/apps/refso3/refso3.c index dea159b674..cc5715c304 100644 --- a/so3/apps/refso3/refso3.c +++ b/so3/apps/refso3/refso3.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016-2020 Daniel Rossier + * Copyright (C) 2016-2026 Daniel Rossier * Copyright (C) 2016-2019 Baptiste Delporte * * This program is free software; you can redistribute it and/or modify @@ -38,13 +38,13 @@ #include #include -#include +#include /** - * This ME does nothing particular. It is aimed at giving a template to develop - * a new ME. + * This capsule does nothing particular. It is aimed at giving a template to develop + * a new capsule. * - * Please, have a look at the SOO.ledctrl which is an example of ME intended to + * Please, have a look at the SOO.ledctrl which is an example of capsule intended to * pilot LEDs on the Sense HAT extension. * * Note that SOO.refso3 can be configured with a rootfs (ramfs) which contains @@ -58,7 +58,7 @@ void *app_thread_main(void *args) while (1) { msleep(500); - lprintk("(%d)", ME_domID()); + lprintk("(%d)", S3C_domID()); printk("%c ", sh_refso3->cur_letter); } diff --git a/so3/arch/arm32/include/asm/migration.h b/so3/arch/arm32/include/asm/migration.h index 65da986fdd..1ae42328e0 100644 --- a/so3/arch/arm32/include/asm/migration.h +++ b/so3/arch/arm32/include/asm/migration.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016-2022 Daniel Rossier + * Copyright (C) 2016-2026 Daniel Rossier * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as @@ -19,7 +19,7 @@ #ifndef ASM_MIGRATION_H #define ASM_MIGRATION_H -void fix_kernel_boot_page_table_ME(unsigned int ME_slotID); +void fix_kernel_boot_page_table_S3C(unsigned int S3C_slotID); extern volatile long pfn_offset; diff --git a/so3/arch/arm32/include/asm/mmu.h b/so3/arch/arm32/include/asm/mmu.h index 0817a0fcc5..b6f343ba56 100644 --- a/so3/arch/arm32/include/asm/mmu.h +++ b/so3/arch/arm32/include/asm/mmu.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015-2017 Daniel Rossier + * Copyright (C) 2015-2026 Daniel Rossier * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as @@ -28,7 +28,7 @@ #ifdef CONFIG_AVZ #define AGENCY_VOFFSET UL(0xc0000000) -#define ME_VOFFSET UL(0xc0000000) +#define S3C_VOFFSET UL(0xc0000000) #endif diff --git a/so3/arch/arm64/domain.c b/so3/arch/arm64/domain.c index fc9c7d5f3f..562997ec2e 100644 --- a/so3/arch/arm64/domain.c +++ b/so3/arch/arm64/domain.c @@ -113,7 +113,7 @@ void __setup_dom_pgtable(struct domain *d, addr_t paddr_start, unsigned long map if (d->avz_shared->domID == DOMID_AGENCY) do_ipamap(new_pt, agency_ipamap, ARRAY_SIZE(agency_ipamap)); else - do_ipamap(new_pt, capsule_ipamap, ARRAY_SIZE(capsule_ipamap)); + do_ipamap(new_pt, S3C_ipamap, ARRAY_SIZE(S3C_ipamap)); /* Map the shared page in the IPA space; the shared page is located right after the domain area * in the IPA space, and if any, the RT shared page follows the shared page (in IPA space). diff --git a/so3/arch/arm64/exception.S b/so3/arch/arm64/exception.S index a0ed6c880d..9bc3c9312c 100644 --- a/so3/arch/arm64/exception.S +++ b/so3/arch/arm64/exception.S @@ -530,7 +530,7 @@ __prepare_to_sig_el1_handler: /* * This glue code will be called to prepare a resuming - * of a ME. + * of a capsule. */ ENTRY(resume_to_guest) diff --git a/so3/arch/arm64/head.S b/so3/arch/arm64/head.S index 1996af76e4..e1cf33549e 100644 --- a/so3/arch/arm64/head.S +++ b/so3/arch/arm64/head.S @@ -226,7 +226,7 @@ agency: ldr x0, =HCR_AGENCY_FLAGS b 99f guest: - ldr x0, =HCR_ME_FLAGS + ldr x0, =HCR_S3C_FLAGS 99: msr hcr_el2, x0 diff --git a/so3/arch/arm64/include/asm/migration.h b/so3/arch/arm64/include/asm/migration.h index 19f9e76965..b35baf6a0c 100644 --- a/so3/arch/arm64/include/asm/migration.h +++ b/so3/arch/arm64/include/asm/migration.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016-2022 Daniel Rossier + * Copyright (C) 2016-2026 Daniel Rossier * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as @@ -19,10 +19,10 @@ #ifndef ASM_MIGRATION_H #define ASM_MIGRATION_H -void fix_kernel_boot_page_table_ME(unsigned int ME_slotID); +void fix_kernel_boot_page_table_S3C(unsigned int S3C_slotID); -/* Start of ME RAM in virtual address space of idle domain */ -extern unsigned long vaddr_start_ME; +/* Start of capsule RAM in virtual address space of idle domain */ +extern unsigned long vaddr_start_S3C; extern volatile long pfn_offset; diff --git a/so3/arch/arm64/include/asm/mmu.h b/so3/arch/arm64/include/asm/mmu.h index 5ccb3b48c8..203a3727cd 100644 --- a/so3/arch/arm64/include/asm/mmu.h +++ b/so3/arch/arm64/include/asm/mmu.h @@ -52,8 +52,8 @@ #ifdef CONFIG_AVZ /* Start of the container memory base */ -#define ME_BASE UL(0x0000200000000000) -#define ME_ID_SHIFT 32 +#define S3C_BASE UL(0x0000200000000000) +#define S3C_ID_SHIFT 32 #define AGENCY_VOFFSET UL(0x0000110000000000) diff --git a/so3/arch/arm64/include/asm/virt.h b/so3/arch/arm64/include/asm/virt.h index 60f8d1842f..770d8d1429 100644 --- a/so3/arch/arm64/include/asm/virt.h +++ b/so3/arch/arm64/include/asm/virt.h @@ -199,7 +199,7 @@ * Group 0 channel in the CPU interface. */ #define HCR_AGENCY_FLAGS (HCR_VM_MASK | HCR_API_MASK | HCR_APK_MASK | HCR_RW_MASK | HCR_AMO_MASK | HCR_IMO_MASK | HCR_FMO_MASK) -#define HCR_ME_FLAGS (HCR_VM_MASK | HCR_API_MASK | HCR_APK_MASK | HCR_AMO_MASK | HCR_RW_MASK | HCR_FMO_MASK | HCR_IMO_MASK) +#define HCR_S3C_FLAGS (HCR_VM_MASK | HCR_API_MASK | HCR_APK_MASK | HCR_AMO_MASK | HCR_RW_MASK | HCR_FMO_MASK | HCR_IMO_MASK) #define HCR_GUEST_FLAGS \ (HCR_TSC | HCR_TSW | HCR_TWE | HCR_TWI | HCR_VM | HCR_TVM | HCR_BSU_IS | HCR_FB | HCR_TAC | HCR_AMO | HCR_SWIO | \ diff --git a/so3/arch/arm64/rpi4_64/include/mach/ipamap.h b/so3/arch/arm64/rpi4_64/include/mach/ipamap.h index 4dca8f0f71..909b26896f 100644 --- a/so3/arch/arm64/rpi4_64/include/mach/ipamap.h +++ b/so3/arch/arm64/rpi4_64/include/mach/ipamap.h @@ -89,7 +89,7 @@ ipamap_t agency_ipamap[] = { * which will be trapped and handled by the hypervisor. */ -ipamap_t capsule_ipamap[] = { +ipamap_t S3C_ipamap[] = { { /* Only mapping the CPU interface to the vGIC CPU interface (GICV). diff --git a/so3/arch/arm64/verdin-imx8mp/include/mach/ipamap.h b/so3/arch/arm64/verdin-imx8mp/include/mach/ipamap.h index 13e88eeb9c..8d4d7b3ed5 100644 --- a/so3/arch/arm64/verdin-imx8mp/include/mach/ipamap.h +++ b/so3/arch/arm64/verdin-imx8mp/include/mach/ipamap.h @@ -55,7 +55,7 @@ ipamap_t agency_ipamap[] = { * the hypervisor's domain setup code; the GICv3 compat GICC is mapped * at its physical address. */ -ipamap_t capsule_ipamap[] = { +ipamap_t S3C_ipamap[] = { { /* GICv3 CPU interface compatibility register frame */ .ipa_addr = 0x38C20000, diff --git a/so3/arch/arm64/virt64/include/mach/ipamap.h b/so3/arch/arm64/virt64/include/mach/ipamap.h index a650a9a144..a838c3bcdb 100644 --- a/so3/arch/arm64/virt64/include/mach/ipamap.h +++ b/so3/arch/arm64/virt64/include/mach/ipamap.h @@ -98,7 +98,7 @@ ipamap_t agency_ipamap[] = { * which will be trapped and handled by the hypervisor. */ -ipamap_t capsule_ipamap[] = { +ipamap_t S3C_ipamap[] = { { /* Only mapping the CPU interface to the vGIC CPU interface. diff --git a/so3/avz/include/avz/dcm.h b/so3/avz/include/avz/dcm.h index c8426035ea..11c47be591 100644 --- a/so3/avz/include/avz/dcm.h +++ b/so3/avz/include/avz/dcm.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016 Daniel Rossier + * Copyright (C) 2016-2026 Daniel Rossier * Copyright (C) 2017,2018 Baptiste Delporte * * This program is free software; you can redistribute it and/or modify @@ -35,8 +35,8 @@ #define DCM_N_RECV_BUFFERS 10 -/* Max ME size in bytes */ -#define DATACOMM_ME_MAX_SIZE (32 * 1024 * 1024) +/* Max capsule size in bytes */ +#define DATACOMM_S3C_MAX_SIZE (32 * 1024 * 1024) #endif /* __KERNEL__ */ @@ -49,15 +49,15 @@ #define DCM_IOCTL_SET_AGENCY_UID _IOWR(0x5000DC30, 5, char) typedef struct { - void *ME_data; /* Reference to the uncompressed ME */ - size_t size; /* Size of this ME ready to be compressed */ - uint32_t prio; /* Priority of this ME (unused at the moment) */ + void *S3C_data; /* Reference to the uncompressed capsule */ + size_t size; /* Size of this capsule ready to be compressed */ + uint32_t prio; /* Priority of this capsule (unused at the moment) */ } dcm_ioctl_send_args_t; typedef struct { - void *ME_data; + void *S3C_data; size_t buffer_size; - size_t ME_size; + size_t S3C_size; } dcm_ioctl_recv_args_t; /* @@ -69,7 +69,7 @@ typedef enum { DCM_BUFFER_SEND = 0, DCM_BUFFER_RECV } dcm_buffer_direction_t; /* * - DCM_BUFFER_FREE means the buffer is ready for send/receive operations. - * - DCM_BUFFER_BUSY means the buffer is reserved for a ME. + * - DCM_BUFFER_BUSY means the buffer is reserved for a capsule. * - DCM_BUFFER_SENDING means the buffer is currently along the path for being sent out. * The buffer can still be altered depending on the steps of sending (See SOOlink/Coder). */ @@ -86,9 +86,9 @@ typedef struct { dcm_buffer_status_t status; /* - * Reference to the ME buffer. + * Reference to the capsule buffer. */ - void *ME_data; + void *S3C_data; size_t size; uint32_t prio; @@ -98,7 +98,7 @@ typedef struct { #endif /* __KERNEL__ */ #ifdef __KERNEL__ -int dcm_ME_rx(void *ME_buffer, size_t size); +int dcm_S3C_rx(void *S3C_buffer, size_t size); #endif /* __KERNEL__ */ #endif /* DCM_H */ diff --git a/so3/avz/include/avz/domain.h b/so3/avz/include/avz/domain.h index d7d333ecc0..ecd02f96d3 100644 --- a/so3/avz/include/avz/domain.h +++ b/so3/avz/include/avz/domain.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016,2017 Daniel Rossier + * Copyright (C) 2016-2026 Daniel Rossier * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as @@ -151,8 +151,8 @@ extern struct domain *domains[MAX_DOMAINS]; extern int construct_agency(struct domain *d); #ifdef CONFIG_SOO -extern int construct_ME(struct domain *d); -ME_state_t get_ME_state(unsigned int ME_slotID); +extern int construct_S3C(struct domain *d); +S3C_state_t get_S3C_state(unsigned int S3C_slotID); #endif /* CONFIG_SOO */ void do_domctl(domctl_t *args); diff --git a/so3/avz/include/avz/injector.h b/so3/avz/include/avz/injector.h index ea5a4a5e00..c71918c212 100644 --- a/so3/avz/include/avz/injector.h +++ b/so3/avz/include/avz/injector.h @@ -71,7 +71,7 @@ void inject_capsule(avz_hyp_t *args); /* Start the execution of a capsule */ void start_capsule(avz_hyp_t *args); -void read_ME_snapshot(avz_hyp_t *args); -void write_ME_snapshot(avz_hyp_t *args); +void read_S3C_snapshot(avz_hyp_t *args); +void write_S3C_snapshot(avz_hyp_t *args); #endif /* INJECTOR_H */ \ No newline at end of file diff --git a/so3/avz/include/avz/memslot.h b/so3/avz/include/avz/memslot.h index b09e48e66d..0e2da02fdd 100644 --- a/so3/avz/include/avz/memslot.h +++ b/so3/avz/include/avz/memslot.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016,2017 Daniel Rossier + * Copyright (C) 2016-2026 Daniel Rossier * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as @@ -20,7 +20,7 @@ /* Number of possible MEs in the local SOO */ #define MEMSLOT_BASE 2 -#define MEMSLOT_NR (MEMSLOT_BASE + MAX_ME_DOMAINS) +#define MEMSLOT_NR (MEMSLOT_BASE + MAX_S3C_DOMAINS) /* Basic memslots. */ #define MEMSLOT_AVZ 0 @@ -56,11 +56,11 @@ extern memslot_entry_t memslot[]; * that the domain_build will be able to elf-parse and load to their final destination. */ void loadAgency(void); -void loadME(unsigned int slotID, void *itb); +void load_S3C(unsigned int slotID, void *itb); void memslot_init(void); -int get_ME_free_slot(unsigned int size, int slotID); -void put_ME_slot(unsigned int ME_slotID); +int get_S3C_free_slot(unsigned int size, int slotID); +void put_S3C_slot(unsigned int S3C_slotID); #endif /* MEMSLOT_H */ diff --git a/so3/avz/include/avz/sched.h b/so3/avz/include/avz/sched.h index 96964c7513..9a1496a221 100644 --- a/so3/avz/include/avz/sched.h +++ b/so3/avz/include/avz/sched.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016 Daniel Rossier + * Copyright (C) 2016-2026 Daniel Rossier * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as @@ -81,7 +81,7 @@ void evtchn_destroy_final(struct domain *d); /* from complete_domain_destroy */ #define DOMAIN_DESTROYED (1 << 31) /* assumes atomic_t is >= 32 bits */ /* - * Creation of new domain context associated to the agency or a Mobile Entity. + * Creation of new domain context associated to the agency or a SO3 capsule. * @domid is the domain number * @partial tells if the domain creation remains partial, without the creation of the vcpu structure which may intervene in a second step */ diff --git a/so3/avz/include/avz/soo.h b/so3/avz/include/avz/soo.h index 6276562849..128e18ac16 100644 --- a/so3/avz/include/avz/soo.h +++ b/so3/avz/include/avz/soo.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2014-2025 Daniel Rossier + * Copyright (C) 2014-2026 Daniel Rossier * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. @@ -21,12 +21,12 @@ #include /* Device tree features */ -#define ME_FEAT_ROOT "/me_features" +#define S3C_FEAT_ROOT "/s3c_features" void soo_activity_init(void); -void shutdown_ME(unsigned int ME_slotID); +void shutdown_S3C(unsigned int S3C_slotID); -ME_state_t get_ME_state(uint32_t ME_slotID); -void set_ME_state(uint32_t slotID, ME_state_t state); +S3C_state_t get_S3C_state(uint32_t S3C_slotID); +void set_S3C_state(uint32_t slotID, S3C_state_t state); #endif /* SOO_H */ diff --git a/so3/avz/include/avz/uapi/avz.h b/so3/avz/include/avz/uapi/avz.h index 963b309cc3..b685215adf 100644 --- a/so3/avz/include/avz/uapi/avz.h +++ b/so3/avz/include/avz/uapi/avz.h @@ -50,10 +50,10 @@ /* DOMID_SELF is used in certain contexts to refer to oneself. */ #define DOMID_SELF (0x7FF0U) -#define MAX_ME_DOMAINS 5 +#define MAX_S3C_DOMAINS 5 /* We include the (non-RT & RT) agency domain */ -#define MAX_DOMAINS (2 + MAX_ME_DOMAINS) +#define MAX_DOMAINS (2 + MAX_S3C_DOMAINS) /* Agency */ #define DOMID_AGENCY 0 @@ -116,8 +116,8 @@ typedef struct { console_t console; } avz_console_io_t; -#define DOMCTL_pauseME 1 -#define DOMCTL_unpauseME 2 +#define DOMCTL_pause_S3C 1 +#define DOMCTL_unpause_S3C 2 #define DOMCTL_get_AVZ_shared 3 struct domctl { diff --git a/so3/avz/kernel/Makefile b/so3/avz/kernel/Makefile index 164cdf8017..f6039745a4 100644 --- a/so3/avz/kernel/Makefile +++ b/so3/avz/kernel/Makefile @@ -5,7 +5,7 @@ obj-y += console.o obj-y += agency_build.o -obj-${CONFIG_SOO} += ME_build.o +obj-${CONFIG_SOO} += capsule_build.o obj-y += domain.o obj-y += setup.o diff --git a/so3/avz/kernel/ME_build.c b/so3/avz/kernel/capsule_build.c similarity index 85% rename from so3/avz/kernel/ME_build.c rename to so3/avz/kernel/capsule_build.c index 1d22b885dd..95f35a8b59 100644 --- a/so3/avz/kernel/ME_build.c +++ b/so3/avz/kernel/capsule_build.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016-2024 Daniel Rossier + * Copyright (C) 2016-2026 Daniel Rossier * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as @@ -31,10 +31,10 @@ #include /* - * construct_ME sets up a new Mobile Entity. + * construct_S3C sets up a new SO3 capsule. */ -int construct_ME(struct domain *d) +int construct_S3C(struct domain *d) { unsigned int slotID; unsigned long alloc_spfn; @@ -44,12 +44,12 @@ int construct_ME(struct domain *d) printk("***************************** Loading SO3 Guest Container *****************************\n"); if (memslot[slotID].size == 0) - panic("No ME image supplied\n"); + panic("No capsule image supplied\n"); /* We are already on the swapper_pg_dir page table to have full access to RAM */ /* Put the signature for consistency checking */ - strcpy(d->avz_shared->signature, SOO_ME_SIGNATURE); + strcpy(d->avz_shared->signature, SOO_S3C_SIGNATURE); d->max_pages = ~0U; @@ -68,7 +68,7 @@ int construct_ME(struct domain *d) d->avz_shared->fdt_paddr = pa_to_ipa(slotID, memslot[slotID].fdt_paddr); - printk("ME FDT device tree: 0x%lx (phys)\n", d->avz_shared->fdt_paddr); + printk("capsule FDT device tree: 0x%lx (phys)\n", d->avz_shared->fdt_paddr); initialize_hyp_dom_stack(d, d->avz_shared->fdt_paddr, memslot[slotID].ipa_addr + L_TEXT_OFFSET); diff --git a/so3/avz/kernel/domain.c b/so3/avz/kernel/domain.c index 881168eaf5..cbe0e9c125 100644 --- a/so3/avz/kernel/domain.c +++ b/so3/avz/kernel/domain.c @@ -46,14 +46,14 @@ static DEFINE_SPINLOCK(domctl_lock); /* * We don't care of the IDLE domain here... * In the domain table, the index 0 and 1 are dedicated to the non-RT and RT agency domains. - * The indexes 1..MAX_DOMAINS are for the MEs. ME_slotID should correspond to domain ID. + * The indexes 1..MAX_DOMAINS are for the MEs. S3C_slotID should correspond to domain ID. */ struct domain *domains[MAX_DOMAINS]; struct domain *agency; /* - * Creation of new domain context associated to the agency or a Mobile Entity. + * Creation of new domain context associated to the agency or a SO3 capsule. * * @domid is the domain number * @cpu_id the CPU on which this domain is allowed to run @@ -113,7 +113,7 @@ struct domain *domain_create(domid_t domid, int cpu_id) if (is_idle_domain(d) && (cpu_id == AGENCY_CPU)) d->sched = &sched_agency; else { - if (cpu_id == ME_CPU) { + if (cpu_id == S3C_CPU) { d->sched = &sched_flip; d->need_periodic_timer = true; @@ -289,14 +289,14 @@ void do_domctl(domctl_t *args) d = domains[args->domain]; switch (args->cmd) { - case DOMCTL_pauseME: + case DOMCTL_pause_S3C: domain_pause_by_systemcontroller(d); break; - case DOMCTL_unpauseME: + case DOMCTL_unpause_S3C: - LOG_DEBUG("%s: unpausing ME\n", __func__); + LOG_DEBUG("%s: unpausing capsule\n", __func__); domain_unpause_by_systemcontroller(d); break; diff --git a/so3/avz/kernel/domain_utils.c b/so3/avz/kernel/domain_utils.c index baf87b20a8..555ff8b5d1 100644 --- a/so3/avz/kernel/domain_utils.c +++ b/so3/avz/kernel/domain_utils.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016-2017 Daniel Rossier + * Copyright (C) 2016-2026 Daniel Rossier * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as @@ -264,20 +264,20 @@ void loadAgency(void) * @param slotID * @param itb ITB image */ -void loadME(unsigned int slotID, void *itb) +void load_S3C(unsigned int slotID, void *itb) { - void *ME_vaddr; + void *S3C_vaddr; uint32_t dom_addr, entry_addr, fdt_paddr; - size_t ME_size, fdt_size, initrd_size; + size_t S3C_size, fdt_size, initrd_size; void *fdt_vaddr, *initrd_vaddr; - void *dest_ME_vaddr; + void *dest_S3C_vaddr; uint32_t initrd_start, initrd_end; int nodeoffset, next_node, depth = 0; int ret; const char *propstring; mem_info_t guest_mem_info; - /* Look for a node of ME type in the fit image */ + /* Look for a node of capsule type in the fit image */ nodeoffset = 0; depth = 0; while (nodeoffset >= 0) { @@ -300,9 +300,9 @@ void loadME(unsigned int slotID, void *itb) lprintk("ITB: Domain entry addr = 0x%x\n", entry_addr); /* Get the pointer to the OS binary image from the ITB we got from the user space. */ - ret = fit_image_get_data_and_size(itb, nodeoffset, (const void **) &ME_vaddr, &ME_size); + ret = fit_image_get_data_and_size(itb, nodeoffset, (const void **) &S3C_vaddr, &S3C_size); if (ret) { - lprintk("!! The properties in the ME node does not look good !!\n"); + lprintk("!! The properties in the capsule node does not look good !!\n"); BUG(); } else break; @@ -312,7 +312,7 @@ void loadME(unsigned int slotID, void *itb) } if (nodeoffset < 0) { - lprintk("!! Unable to find a node with type ME in the FIT image... !!\n"); + lprintk("!! Unable to find a node with type capsule in the FIT image... !!\n"); BUG(); }; @@ -378,12 +378,12 @@ void loadME(unsigned int slotID, void *itb) nodeoffset = next_node; } - dest_ME_vaddr = (void *) memslot[slotID].base_vaddr; + dest_S3C_vaddr = (void *) memslot[slotID].base_vaddr; - dest_ME_vaddr += L_TEXT_OFFSET; + dest_S3C_vaddr += L_TEXT_OFFSET; /* Move the kernel binary within the domain slotID. */ - memcpy(dest_ME_vaddr, ME_vaddr, ME_size); + memcpy(dest_S3C_vaddr, S3C_vaddr, S3C_size); memslot[slotID].fdt_paddr = ipa_to_pa(slotID, fdt_paddr); diff --git a/so3/avz/kernel/gnttab.c b/so3/avz/kernel/gnttab.c index 599e4a164f..9660a6dc73 100644 --- a/so3/avz/kernel/gnttab.c +++ b/so3/avz/kernel/gnttab.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2024-2025 Daniel Rossier + * Copyright (C) 2024-2026 Daniel Rossier * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as @@ -143,9 +143,9 @@ addr_t allocate_grant_pfn(struct domain *d) } /** - * @brief Map the grant page associated to vbstore in the IPA domain of the ME + * @brief Map the grant page associated to vbstore in the IPA domain of the capsule * - * @param target_domid the ME which needs the vbstore pfn + * @param target_domid the capsule which needs the vbstore pfn * @param pfn * @return */ diff --git a/so3/avz/kernel/hypercalls.c b/so3/avz/kernel/hypercalls.c index b6dfc6bb7c..28578f48b9 100644 --- a/so3/avz/kernel/hypercalls.c +++ b/so3/avz/kernel/hypercalls.c @@ -44,41 +44,41 @@ #include /** - * Return the state of the ME corresponding to the ME_slotID. - * If the ME does not exist anymore (for example, following a KILL_ME), - * the state is set to ME_state_dead. + * Return the state of the capsule corresponding to the S3C_slotID. + * If the capsule does not exist anymore (for example, following a KILL_S3C), + * the state is set to S3C_state_dead. */ -ME_state_t get_ME_state(unsigned int ME_slotID) +S3C_state_t get_S3C_state(unsigned int S3C_slotID) { - if (domains[ME_slotID] == NULL) - return ME_state_dead; + if (domains[S3C_slotID] == NULL) + return S3C_state_dead; else - return domains[ME_slotID]->avz_shared->dom_desc.u.ME.state; + return domains[S3C_slotID]->avz_shared->dom_desc.u.S3C.state; } -void set_ME_state(unsigned int ME_slotID, ME_state_t state) +void set_S3C_state(unsigned int S3C_slotID, S3C_state_t state) { - domains[ME_slotID]->avz_shared->dom_desc.u.ME.state = state; + domains[S3C_slotID]->avz_shared->dom_desc.u.S3C.state = state; } -void shutdown_ME(unsigned int ME_slotID) +void shutdown_S3C(unsigned int S3C_slotID) { struct domain *dom; - dom = domains[ME_slotID]; + dom = domains[S3C_slotID]; - /* Perform a removal of ME */ + /* Perform a removal of capsule */ dom->is_dying = DOMDYING_dead; - DBG("Shutdowning slotID: %d - Domain pause nosync ...\n", ME_slotID); + DBG("Shutdowning slotID: %d - Domain pause nosync ...\n", S3C_slotID); vcpu_pause(dom); - DBG("Destroy evtchn if necessary - state: %d\n", get_ME_state(ME_slotID)); + DBG("Destroy evtchn if necessary - state: %d\n", get_S3C_state(S3C_slotID)); evtchn_destroy(dom); DBG("Wiping domain area...\n"); - memset((void *) memslot[ME_slotID].base_vaddr, 0, memslot[ME_slotID].size); + memset((void *) memslot[S3C_slotID].base_vaddr, 0, memslot[S3C_slotID].size); DBG("Destroying domain structure ...\n"); @@ -86,28 +86,28 @@ void shutdown_ME(unsigned int ME_slotID) DBG("Now resetting domains to NULL.\n"); - /* bye bye dear ME ! */ - domains[ME_slotID] = NULL; + /* bye bye dear capsule ! */ + domains[S3C_slotID] = NULL; /* Reset the slot availability */ - put_ME_slot(ME_slotID); + put_S3C_slot(S3C_slotID); } /** - * Return the descriptor of a domain (agency or ME). - * A size of 0 means there is no ME in the slot. + * Return the descriptor of a domain (agency or capsule). + * A size of 0 means there is no capsule in the slot. */ void get_dom_desc(uint32_t slotID, dom_desc_t *dom_desc) { /* Check for authorization... (to be done) */ /* - * If no ME is present in the slot specified by slotID, we assign a size of 0 in the ME descriptor. + * If no capsule is present in the slot specified by slotID, we assign a size of 0 in the capsule descriptor. * We presume that the slotID of agency is never free... */ if ((slotID > 1) && !memslot[slotID].busy) - dom_desc->u.ME.size = 0; + dom_desc->u.S3C.size = 0; else /* Copy the content to the target desc */ memcpy(dom_desc, &domains[slotID]->avz_shared->dom_desc, sizeof(dom_desc_t)); @@ -152,12 +152,12 @@ void do_avz_hypercall(void *__args) get_dom_desc(args->u.avz_dom_desc_args.slotID, &args->u.avz_dom_desc_args.dom_desc); break; - case AVZ_ME_READ_SNAPSHOT: - read_ME_snapshot(args); + case AVZ_S3C_READ_SNAPSHOT: + read_S3C_snapshot(args); break; - case AVZ_ME_WRITE_SNAPSHOT: - write_ME_snapshot(args); + case AVZ_S3C_WRITE_SNAPSHOT: + write_S3C_snapshot(args); break; case AVZ_INJECT_CAPSULE: @@ -188,17 +188,17 @@ void do_avz_hypercall(void *__args) args->u.avz_dc_event_args.state = ESUCCESS; break; - case AVZ_KILL_ME: + case AVZ_KILL_S3C: - shutdown_ME(args->u.avz_kill_me_args.slotID); + shutdown_S3C(args->u.avz_kill_s3c_args.slotID); break; - case AVZ_GET_ME_STATE: - args->u.avz_me_state_args.state = get_ME_state(args->u.avz_me_state_args.slotID); + case AVZ_GET_S3C_STATE: + args->u.avz_s3c_state_args.state = get_S3C_state(args->u.avz_s3c_state_args.slotID); break; - case AVZ_SET_ME_STATE: { - set_ME_state(args->u.avz_me_state_args.slotID, args->u.avz_me_state_args.state); + case AVZ_SET_S3C_STATE: { + set_S3C_state(args->u.avz_s3c_state_args.slotID, args->u.avz_s3c_state_args.state); break; } @@ -210,7 +210,7 @@ void do_avz_hypercall(void *__args) fbdev_change_focus(args->u.avz_fbdev_focus_args.new_slotID); break; - case AVZ_FBDEV_GET_ME_ADDR: + case AVZ_FBDEV_GET_S3C_ADDR: args->u.avz_fbdev_addr_args.paddr = fbdev_get_domain_ipa(); break; diff --git a/so3/avz/kernel/injector.c b/so3/avz/kernel/injector.c index 93c12b6fa0..293f472e89 100644 --- a/so3/avz/kernel/injector.c +++ b/so3/avz/kernel/injector.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2014-2022 Daniel Rossier + * Copyright (C) 2014-2026 Daniel Rossier * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as @@ -55,11 +55,11 @@ void inject_capsule(avz_hyp_t *args) int slotID; size_t fdt_size; void *fdt_vaddr; - struct domain *domME, *__current; + struct domain *dom_S3C, *__current; void *itb_vaddr; mem_info_t guest_mem_info; - LOG_DEBUG("%s: Preparing ME injection, source image vaddr = %lx\n", __func__, + LOG_DEBUG("%s: Preparing capsule injection, source image vaddr = %lx\n", __func__, ipa_to_va(MEMSLOT_AGENCY, args->u.avz_inject_capsule_args.itb_paddr)); BUG_ON(local_irq_is_enabled()); @@ -68,7 +68,7 @@ void inject_capsule(avz_hyp_t *args) LOG_DEBUG("%s: ITB vaddr: %lx\n", __func__, itb_vaddr); - /* Retrieve the domain size of this ME through its device tree. */ + /* Retrieve the domain size of this capsule through its device tree. */ fit_image_get_data_and_size(itb_vaddr, fit_image_get_node(itb_vaddr, "fdt"), (const void **) &fdt_vaddr, &fdt_size); if (!fdt_vaddr) { printk("### %s: wrong device tree.\n", __func__); @@ -78,38 +78,38 @@ void inject_capsule(avz_hyp_t *args) get_mem_info(fdt_vaddr, &guest_mem_info); /* Find a slotID to store this capsule */ - slotID = get_ME_free_slot(guest_mem_info.size, args->u.avz_inject_capsule_args.slotID); + slotID = get_S3C_free_slot(guest_mem_info.size, args->u.avz_inject_capsule_args.slotID); if (slotID == -1) goto out; - domME = domains[slotID]; + dom_S3C = domains[slotID]; /* At the beginning, the capsule is stopped */ - domME->avz_shared->dom_desc.u.ME.state = ME_state_stopped; + dom_S3C->avz_shared->dom_desc.u.S3C.state = S3C_state_stopped; /* Store slotID & capsuleID */ - domME->avz_shared->dom_desc.u.ME.slotID = slotID; - domME->avz_shared->dom_desc.u.ME.capsuleID = args->u.avz_inject_capsule_args.capsuleID; + dom_S3C->avz_shared->dom_desc.u.S3C.slotID = slotID; + dom_S3C->avz_shared->dom_desc.u.S3C.capsuleID = args->u.avz_inject_capsule_args.capsuleID; - /* Set the size of this ME in its own descriptor with the dom_context size */ - domME->avz_shared->dom_desc.u.ME.size = memslot[slotID].size; + /* Set the size of this capsule in its own descriptor with the dom_context size */ + dom_S3C->avz_shared->dom_desc.u.S3C.size = memslot[slotID].size; __current = current_domain; /* Clear the RAM allocated to this capsule */ memset((void *) __xva(slotID, memslot[slotID].base_paddr), 0, memslot[slotID].size); - loadME(slotID, itb_vaddr); + load_S3C(slotID, itb_vaddr); - if (construct_ME(domains[slotID]) != 0) - panic("Could not set up ME guest OS\n"); + if (construct_S3C(domains[slotID]) != 0) + panic("Could not set up capsule guest OS\n"); out: /* Prepare to return the slotID to the caller. */ args->u.avz_inject_capsule_args.slotID = slotID; - domME->avz_shared->dom_desc.u.ME.vbstore_pfn = map_vbstore_pfn(slotID, 0); - domME->avz_shared->dom_desc.u.ME.vbstore_revtchn = agency->avz_shared->dom_desc.u.agency.vbstore_evtchn[slotID]; + dom_S3C->avz_shared->dom_desc.u.S3C.vbstore_pfn = map_vbstore_pfn(slotID, 0); + dom_S3C->avz_shared->dom_desc.u.S3C.vbstore_revtchn = agency->avz_shared->dom_desc.u.agency.vbstore_evtchn[slotID]; } /** @@ -135,7 +135,7 @@ build_domain_migration_info build_vcpu_migration_info Build the structures holding the key info to be migrated over ------------------------------------------------------------------------------*/ -static void build_domain_context(unsigned int ME_slotID, struct domain *me, struct dom_context *domctxt) +static void build_domain_context(unsigned int S3C_slotID, struct domain *me, struct dom_context *domctxt) { /* Event channel info */ memcpy(domctxt->evtchn, me->evtchn, sizeof(me->evtchn)); @@ -145,17 +145,17 @@ static void build_domain_context(unsigned int ME_slotID, struct domain *me, stru /* Get the start_info structure */ domctxt->avz_shared = *(me->avz_shared); - strcpy(domctxt->avz_shared.signature, SOO_ME_SIGNATURE); + strcpy(domctxt->avz_shared.signature, SOO_S3C_SIGNATURE); - /* The snapshot will contain a capsule with the state ME_state_suspended only - * if the capsule was living, otherwise it has to be in ME_state_stopped, right + /* The snapshot will contain a capsule with the state S3C_state_suspended only + * if the capsule was living, otherwise it has to be in S3C_state_stopped, right * before its execution. */ - if (me->avz_shared->dom_desc.u.ME.state == ME_state_suspended) - domctxt->avz_shared.dom_desc.u.ME.state = ME_state_hibernate; + if (me->avz_shared->dom_desc.u.S3C.state == S3C_state_suspended) + domctxt->avz_shared.dom_desc.u.S3C.state = S3C_state_hibernate; - BUG_ON((me->avz_shared->dom_desc.u.ME.state != ME_state_stopped) && - (me->avz_shared->dom_desc.u.ME.state != ME_state_suspended)); + BUG_ON((me->avz_shared->dom_desc.u.S3C.state != S3C_state_stopped) && + (me->avz_shared->dom_desc.u.S3C.state != S3C_state_suspended)); domctxt->pause_count = me->pause_count; @@ -173,7 +173,7 @@ static void build_domain_context(unsigned int ME_slotID, struct domain *me, stru memcpy(domctxt->virq_to_evtchn, me->virq_to_evtchn, sizeof(me->virq_to_evtchn)); /* Store the IPA physical address base */ - domctxt->ipa_addr = memslot[ME_slotID].ipa_addr; + domctxt->ipa_addr = memslot[S3C_slotID].ipa_addr; /* * CPU regs context along the exception path in the hypervisor @@ -193,10 +193,10 @@ static void build_domain_context(unsigned int ME_slotID, struct domain *me, stru * * @param args provided from the Linux kernel */ -void read_ME_snapshot(avz_hyp_t *args) +void read_S3C_snapshot(avz_hyp_t *args) { unsigned int slotID = args->u.avz_snapshot_args.slotID; - struct domain *domME = domains[slotID]; + struct domain *dom_S3C = domains[slotID]; void *snapshot_buffer = (void *) ipa_to_va(MEMSLOT_AGENCY, args->u.avz_snapshot_args.snapshot_paddr); /* If the size is 0, we return the snapshot size. */ @@ -205,17 +205,17 @@ void read_ME_snapshot(avz_hyp_t *args) return; } - /* If the capsule is living, it will be put in ME_state_suspended state by Linux + /* If the capsule is living, it will be put in S3C_state_suspended state by Linux * before being entering this function. */ - if (domME->avz_shared->dom_desc.u.ME.state == ME_state_suspended) { + if (dom_S3C->avz_shared->dom_desc.u.S3C.state == S3C_state_suspended) { /* Pause the capsule */ - domain_pause_by_systemcontroller(domME); + domain_pause_by_systemcontroller(dom_S3C); } /* Gather all the info we need into structures */ /* This will put the capsule snapshot in HIBERNATE state */ - build_domain_context(slotID, domME, &domain_context); + build_domain_context(slotID, dom_S3C, &domain_context); /* Copy the size of the payload which is made of the dom_info structure and the capsule */ args->u.avz_snapshot_args.size = memslot[slotID].size + sizeof(domain_context); @@ -226,26 +226,26 @@ void read_ME_snapshot(avz_hyp_t *args) /* Copy the dom_info structure */ memcpy(snapshot_buffer + sizeof(uint32_t), &domain_context, sizeof(domain_context)); - /* Finally copy the ME */ + /* Finally copy the capsule */ memcpy(snapshot_buffer + sizeof(uint32_t) + sizeof(domain_context), (void *) __xva(slotID, memslot[slotID].base_paddr), memslot[slotID].size); - if (domME->avz_shared->dom_desc.u.ME.state == ME_state_suspended) { - /* Now, this ME is suspended and must be resumed by the agency */ - domME->avz_shared->dom_desc.u.ME.state = ME_state_resuming; + if (dom_S3C->avz_shared->dom_desc.u.S3C.state == S3C_state_suspended) { + /* Now, this capsule is suspended and must be resumed by the agency */ + dom_S3C->avz_shared->dom_desc.u.S3C.state = S3C_state_resuming; - domain_unpause_by_systemcontroller(domME); + domain_unpause_by_systemcontroller(dom_S3C); } } /** * @brief Recover the dom_context structure from a pre-saved capsule * - * @param ME_slotID + * @param S3C_slotID * @param me * @param domctxt */ -void restore_domain_context(unsigned int ME_slotID, struct domain *me, struct dom_context *domctxt) +void restore_domain_context(unsigned int S3C_slotID, struct domain *me, struct dom_context *domctxt) { int i; @@ -254,11 +254,11 @@ void restore_domain_context(unsigned int ME_slotID, struct domain *me, struct do *(me->avz_shared) = domctxt->avz_shared; /* Check that our signature is valid so that the image transfer should be good. */ - if (strcmp(me->avz_shared->signature, SOO_ME_SIGNATURE)) - panic("%s: Cannot find the correct signature in the shared page (" SOO_ME_SIGNATURE ")...\n", __func__); + if (strcmp(me->avz_shared->signature, SOO_S3C_SIGNATURE)) + panic("%s: Cannot find the correct signature in the shared page (" SOO_S3C_SIGNATURE ")...\n", __func__); /* Update the domID of course */ - me->avz_shared->domID = ME_slotID; + me->avz_shared->domID = S3C_slotID; memcpy(me->evtchn, domctxt->evtchn, sizeof(me->evtchn)); @@ -268,7 +268,7 @@ void restore_domain_context(unsigned int ME_slotID, struct domain *me, struct do * want that the local event channel gets changed. * * Re-binding is performed during the resuming via vbus (backend side) OR - * if the ME gets killed, the event channel will be closed without any effect to a remote domain. + * if the capsule gets killed, the event channel will be closed without any effect to a remote domain. */ for (i = 0; i < NR_EVTCHN; i++) @@ -290,7 +290,7 @@ void restore_domain_context(unsigned int ME_slotID, struct domain *me, struct do memcpy(me->virq_to_evtchn, domctxt->virq_to_evtchn, sizeof((me->virq_to_evtchn))); /* IPA physical address base */ - memslot[ME_slotID].ipa_addr = domctxt->ipa_addr; + memslot[S3C_slotID].ipa_addr = domctxt->ipa_addr; /* Fields related to CPU */ me->vcpu = domctxt->vcpu; @@ -300,12 +300,12 @@ void restore_domain_context(unsigned int ME_slotID, struct domain *me, struct do * * @param args If args->u.avz_snapshot_args.size == 0, the function will try to find an empty slot. */ -void write_ME_snapshot(avz_hyp_t *args) +void write_S3C_snapshot(avz_hyp_t *args) { uint32_t snapshot_size; void *snapshot_buffer; uint32_t slotID; - struct domain *domME; + struct domain *dom_S3C; struct dom_context *domctxt; void *dom_stack; struct cpu_regs *frame; @@ -319,7 +319,7 @@ void write_ME_snapshot(avz_hyp_t *args) LOG_DEBUG("Looking for an available slot for a capsule of %d bytes...\n", snapshot_size - sizeof(uint32_t) - sizeof(struct dom_context)); - slotID = get_ME_free_slot(snapshot_size - sizeof(uint32_t) - sizeof(struct dom_context), slotID); + slotID = get_S3C_free_slot(snapshot_size - sizeof(uint32_t) - sizeof(struct dom_context), slotID); if (slotID > 0) args->u.avz_snapshot_args.slotID = slotID; else @@ -330,16 +330,16 @@ void write_ME_snapshot(avz_hyp_t *args) LOG_DEBUG("Writing the snapshot into memory...\n"); snapshot_buffer = (void *) ipa_to_va(MEMSLOT_AGENCY, args->u.avz_snapshot_args.snapshot_paddr); - domME = domains[slotID]; + dom_S3C = domains[slotID]; domctxt = (struct dom_context *) (snapshot_buffer + sizeof(uint32_t)); LOG_DEBUG("Restoring the domain context...\n"); - restore_domain_context(slotID, domME, domctxt); + restore_domain_context(slotID, dom_S3C, domctxt); LOG_DEBUG("Set up the page tables...\n"); - __setup_dom_pgtable(domME, memslot[slotID].base_paddr, memslot[slotID].size); + __setup_dom_pgtable(dom_S3C, memslot[slotID].base_paddr, memslot[slotID].size); - /* Copy the ME content */ + /* Copy the capsule content */ memcpy((void *) __xva(slotID, memslot[slotID].base_paddr), snapshot_buffer + sizeof(uint32_t) + sizeof(struct dom_context), memslot[slotID].size); @@ -349,7 +349,7 @@ void write_ME_snapshot(avz_hyp_t *args) BUG_ON(!dom_stack); /* Keep the reference for future removal */ - domME->domain_stack = dom_stack; + dom_S3C->domain_stack = dom_stack; /* Reserve the frame which will be restored later */ frame = dom_stack + DOMAIN_STACK_SIZE - sizeof(cpu_regs_t); @@ -358,38 +358,38 @@ void write_ME_snapshot(avz_hyp_t *args) memcpy(frame, &domctxt->stack_frame, sizeof(struct cpu_regs)); /* We need to re-map the vbstore page corresponding to this slotID */ - map_vbstore_pfn(domME->avz_shared->domID, domME->avz_shared->dom_desc.u.ME.vbstore_pfn); - LOG_DEBUG("State of the saved capsule: %d\n", domME->avz_shared->dom_desc.u.ME.state); + map_vbstore_pfn(dom_S3C->avz_shared->domID, dom_S3C->avz_shared->dom_desc.u.S3C.vbstore_pfn); + LOG_DEBUG("State of the saved capsule: %d\n", dom_S3C->avz_shared->dom_desc.u.S3C.state); - if (domME->avz_shared->dom_desc.u.ME.state != ME_state_stopped) { - BUG_ON(domME->avz_shared->dom_desc.u.ME.state != ME_state_hibernate); + if (dom_S3C->avz_shared->dom_desc.u.S3C.state != S3C_state_stopped) { + BUG_ON(dom_S3C->avz_shared->dom_desc.u.S3C.state != S3C_state_hibernate); /* As we will be resumed from the schedule function, we need to update the * CPU registers from the VCPU regs. */ - domME->vcpu.regs.sp = (unsigned long) frame; - domME->vcpu.regs.x21 = (unsigned long) domME->avz_shared->dom_desc.u.ME.resume_fn; + dom_S3C->vcpu.regs.sp = (unsigned long) frame; + dom_S3C->vcpu.regs.x21 = (unsigned long) dom_S3C->avz_shared->dom_desc.u.S3C.resume_fn; - domME->vcpu.regs.lr = (unsigned long) resume_to_guest; + dom_S3C->vcpu.regs.lr = (unsigned long) resume_to_guest; /* Now restoring event channel configuration */ - evtchn_bind_existing_interdomain(domME, agency, domME->avz_shared->dom_desc.u.ME.vbstore_levtchn, + evtchn_bind_existing_interdomain(dom_S3C, agency, dom_S3C->avz_shared->dom_desc.u.S3C.vbstore_levtchn, agency->avz_shared->dom_desc.u.agency.vbstore_evtchn[slotID]); - LOG_DEBUG("%s: Rebinding directcomm event channels: %d (agency) <-> %d (ME)\n", __func__, - agency->avz_shared->dom_desc.u.agency.dc_evtchn[slotID], domME->avz_shared->dom_desc.u.ME.dc_evtchn); + LOG_DEBUG("%s: Rebinding directcomm event channels: %d (agency) <-> %d (capsule)\n", __func__, + agency->avz_shared->dom_desc.u.agency.dc_evtchn[slotID], dom_S3C->avz_shared->dom_desc.u.S3C.dc_evtchn); - evtchn_bind_existing_interdomain(domME, agency, domME->avz_shared->dom_desc.u.ME.dc_evtchn, + evtchn_bind_existing_interdomain(dom_S3C, agency, dom_S3C->avz_shared->dom_desc.u.S3C.dc_evtchn, agency->avz_shared->dom_desc.u.agency.dc_evtchn[slotID]); } - LOG_DEBUG("%s: Now, resuming ME slotID %d...\n", __func__, slotID); + LOG_DEBUG("%s: Now, resuming capsule slotID %d...\n", __func__, slotID); - domain_unpause_by_systemcontroller(domME); + domain_unpause_by_systemcontroller(dom_S3C); } void __sigreturn(void) { - current_domain->avz_shared->dom_desc.u.ME.state = ME_state_awakened; + current_domain->avz_shared->dom_desc.u.S3C.state = S3C_state_awakened; send_timer_event(current_domain); } diff --git a/so3/avz/kernel/sched_flip.c b/so3/avz/kernel/sched_flip.c index 1a27a66ae8..54b6f4e46c 100644 --- a/so3/avz/kernel/sched_flip.c +++ b/so3/avz/kernel/sched_flip.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2014-2018 Daniel Rossier + * Copyright (C) 2014-2026 Daniel Rossier * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as @@ -144,7 +144,7 @@ void sched_flip_init(void) #ifdef CONFIG_SOO /* Initiate a timer to trigger the schedule function */ - init_timer(&sched_flip.sched_data.s_timer, s_timer_fn, NULL, ME_CPU); + init_timer(&sched_flip.sched_data.s_timer, s_timer_fn, NULL, S3C_CPU); set_timer(&sched_flip.sched_data.s_timer, NOW() + MILLISECS(CONFIG_SCHED_FLIP_SCHEDFREQ)); #endif /* CONFIG_SOO */ diff --git a/so3/avz/kernel/schedule.c b/so3/avz/kernel/schedule.c index a916df7e69..872321e4c2 100644 --- a/so3/avz/kernel/schedule.c +++ b/so3/avz/kernel/schedule.c @@ -40,7 +40,7 @@ inline void domain_runstate_change(struct domain *d, int new_state) { /* * We might already be in RUNSTATE_blocked before setting to this state; for example, - * if a ME has been paused and migrates, and is killed during the cooperation phase, + * if a capsule has been paused and migrates, and is killed during the cooperation phase, * the call to shutdown() will lead to be here with such a state already. */ ASSERT((d->runstate == RUNSTATE_blocked) || (d->runstate != new_state)); diff --git a/so3/avz/kernel/setup.c b/so3/avz/kernel/setup.c index bacac4ef37..2f1d98400d 100644 --- a/so3/avz/kernel/setup.c +++ b/so3/avz/kernel/setup.c @@ -75,7 +75,7 @@ void avz_start(void) loadAgency(); lprintk("\n\n********** Smart Object Oriented technology - AVZ Hypervisor **********\n"); - lprintk("Copyright (c) 2014-2025 REDS Institute, HEIG-VD, Yverdon-les-Bains\n"); + lprintk("Copyright (c) 2014-2026 REDS Institute, HEIG-VD, Yverdon-les-Bains\n"); lprintk("Version %s\n", SO3_KERNEL_VERSION); LOG_INFO("\n\nNow bootstraping the hypervisor kernel ...\n"); diff --git a/so3/avz/kernel/smp.c b/so3/avz/kernel/smp.c index d753f3d114..0ba704ff48 100644 --- a/so3/avz/kernel/smp.c +++ b/so3/avz/kernel/smp.c @@ -128,7 +128,7 @@ void secondary_start_kernel(void) #ifdef CONFIG_CPU_PSCI #ifdef CONFIG_SOO - if (cpu != ME_CPU) + if (cpu != S3C_CPU) #endif /* CONFIG_SOO */ { pre_ret_to_el1(); @@ -213,11 +213,11 @@ void smp_init(void) #ifdef CONFIG_SOO - printk("Starting ME CPU...\n"); + printk("Starting capsule CPU...\n"); - cpu_up(ME_CPU); + cpu_up(S3C_CPU); - printk("Brought secondary CPU %d for running SO3 capsules...\n", ME_CPU); + printk("Brought secondary CPU %d for running SO3 capsules...\n", S3C_CPU); #else /* CONFIG_SOO */ diff --git a/so3/avz/kernel/timer.c b/so3/avz/kernel/timer.c index 97d0585a03..cb22d81d66 100644 --- a/so3/avz/kernel/timer.c +++ b/so3/avz/kernel/timer.c @@ -24,7 +24,7 @@ #include /* - * Called on every EL2 timer tick (CNTHP, PPI 26) on agency CPUs (non-ME). + * Called on every EL2 timer tick (CNTHP, PPI 26) on agency CPUs (non-capsule). * Per-CPU tick counter so each CPU emits its own 5s heartbeat — without * this, CPU0's heartbeat would mask whether secondary CPUs are ticking. */ diff --git a/so3/avz/mm/memory.c b/so3/avz/mm/memory.c index 32c5af8f3d..2306e81685 100644 --- a/so3/avz/mm/memory.c +++ b/so3/avz/mm/memory.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2014-2021 Daniel Rossier + * Copyright (C) 2014-2026 Daniel Rossier * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as @@ -32,20 +32,20 @@ #include -#define ME_MEMCHUNK_SIZE 2 * 1024 * 1024 -#define ME_MEMCHUNK_NR 256 /* 256 chunks of 2 MB */ +#define S3C_MEMCHUNK_SIZE 2 * 1024 * 1024 +#define S3C_MEMCHUNK_NR 256 /* 256 chunks of 2 MB */ /* * Set of memslots in the RAM memory (do not confuse with memchunk !) * In the memslot table, the index 0 is for AVZ, the index 1 is for the two agency domains (domain 0 (non-RT) and domain 1 (RT)) - * and the indexes 2..MEMSLOT_NR are for the MEs. If the ME_slotID is provided, the index is given by ME_slotID. - * Hence, the ME_slotID matches with the ME domID. + * and the indexes 2..MEMSLOT_NR are for the MEs. If the S3C_slotID is provided, the index is given by S3C_slotID. + * Hence, the S3C_slotID matches with the capsule domID. */ memslot_entry_t memslot[MEMSLOT_NR]; /* Memory chunks bitmap for allocating MEs */ /* 8 bits per int int */ -unsigned int memchunk_bitmap[ME_MEMCHUNK_NR / 32]; +unsigned int memchunk_bitmap[S3C_MEMCHUNK_NR / 32]; /* * Returns the power of 2 (order) which matches the size @@ -74,11 +74,11 @@ static unsigned int allocate_memslot(unsigned int order) { int pos; - pos = bitmap_find_free_region((unsigned long *) &memchunk_bitmap, ME_MEMCHUNK_NR, order); + pos = bitmap_find_free_region((unsigned long *) &memchunk_bitmap, S3C_MEMCHUNK_NR, order); if (pos < 0) return 0; - return memslot[1].base_paddr + memslot[1].size + pos * ME_MEMCHUNK_SIZE; + return memslot[1].base_paddr + memslot[1].size + pos * S3C_MEMCHUNK_SIZE; } static void release_memslot(unsigned int addr, unsigned int order) @@ -86,7 +86,7 @@ static void release_memslot(unsigned int addr, unsigned int order) int pos; pos = addr - memslot[1].base_paddr - memslot[1].size; - pos /= ME_MEMCHUNK_SIZE; + pos /= S3C_MEMCHUNK_SIZE; bitmap_release_region((unsigned long *) &memchunk_bitmap, pos, order); } @@ -113,15 +113,15 @@ void switch_mm_domain(struct domain *d) } /** - * Get the next available memory slot for ME hosting. + * Get the next available memory slot for capsule hosting. * * @param size Requested size - * @param ME_state Initial state of the ME + * @param S3C_state Initial state of the capsule * @param slotID if different than -1, try to allocate to this specific slot * @return int -1 if no slot is available or if a slot is available * */ -int get_ME_free_slot(unsigned int size, int slotID) +int get_S3C_free_slot(unsigned int size, int slotID) { unsigned int order, addr; unsigned int bits_NR; @@ -141,7 +141,7 @@ int get_ME_free_slot(unsigned int size, int slotID) /* memslot[slotID] is available */ - bits_NR = DIV_ROUND_UP(size, ME_MEMCHUNK_SIZE); + bits_NR = DIV_ROUND_UP(size, S3C_MEMCHUNK_SIZE); order = get_power_from_size(bits_NR); @@ -153,16 +153,16 @@ int get_ME_free_slot(unsigned int size, int slotID) /* Determine the phys/virt start addresses of the guest */ memslot[slotID].base_paddr = addr; - memslot[slotID].base_vaddr = ME_BASE + ((addr_t) (slotID - 1) << ME_ID_SHIFT); + memslot[slotID].base_vaddr = S3C_BASE + ((addr_t) (slotID - 1) << S3C_ID_SHIFT); - memslot[slotID].size = (1 << order) * ME_MEMCHUNK_SIZE; /* Readjust size */ + memslot[slotID].size = (1 << order) * S3C_MEMCHUNK_SIZE; /* Readjust size */ memslot[slotID].busy = true; - /* Map the L2 virtual address space of ME #(slotID-1) to the physical RAM */ + /* Map the L2 virtual address space of capsule #(slotID-1) to the physical RAM */ create_mapping(NULL, memslot[slotID].base_vaddr, memslot[slotID].base_paddr, memslot[slotID].size, false); - /* Create a domain context including the ME descriptor before the ME gets injected. */ - domains[slotID] = domain_create(slotID, ME_CPU); + /* Create a domain context including the capsule descriptor before the capsule gets injected. */ + domains[slotID] = domain_create(slotID, S3C_CPU); return slotID; } @@ -170,12 +170,12 @@ int get_ME_free_slot(unsigned int size, int slotID) /* * Release a slot */ -void put_ME_slot(unsigned int slotID) +void put_S3C_slot(unsigned int slotID) { release_mapping(NULL, memslot[slotID].base_vaddr, memslot[slotID].size); /* Release the allocated memchunks */ - release_memslot(memslot[slotID].base_paddr, get_power_from_size(DIV_ROUND_UP(memslot[slotID].size, ME_MEMCHUNK_SIZE))); + release_memslot(memslot[slotID].base_paddr, get_power_from_size(DIV_ROUND_UP(memslot[slotID].size, S3C_MEMCHUNK_SIZE))); memslot[slotID].busy = false; } diff --git a/so3/configs/virt64_capsule_defconfig b/so3/configs/virt64_capsule_defconfig index baf1bc4821..5b095dbdea 100644 --- a/so3/configs/virt64_capsule_defconfig +++ b/so3/configs/virt64_capsule_defconfig @@ -93,11 +93,11 @@ CONFIG_SOO=y CONFIG_MMU=y # -# SOO Mobile Entity - Smart Object Oriented subsystem +# SOO SO3 capsule - Smart Object Oriented subsystem # # -# SOO Mobile Entity frontend drivers +# SOO SO3 capsule frontend drivers # CONFIG_VDUMMY_FRONTEND=y CONFIG_VUART_FRONTEND=y diff --git a/so3/devices/irq.c b/so3/devices/irq.c index d79fb413fa..56b5125339 100644 --- a/so3/devices/irq.c +++ b/so3/devices/irq.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016-2018 Daniel Rossier + * Copyright (C) 2016-2026 Daniel Rossier * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as @@ -194,7 +194,7 @@ void irq_handle(cpu_regs_t *regs) /* * We do not check if IRQs were disabled before the handler in case of an hypercall - * path which may happen in AVZ and in the ME because hypercalls are executed during + * path which may happen in AVZ and in the capsule because hypercalls are executed during * their initialization along which a timer IRQ can be raised up and lead to their processing * here. */ diff --git a/so3/devices/serial.c b/so3/devices/serial.c index a4fe97097f..41c549a1d2 100644 --- a/so3/devices/serial.c +++ b/so3/devices/serial.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2014-2019 Daniel Rossier + * Copyright (C) 2014-2026 Daniel Rossier * Copyright (C) 2017 Alexandre Malki * * This program is free software; you can redistribute it and/or modify @@ -66,7 +66,7 @@ char serial_getc(void) /* * Emergency printk() or very early printk() before the real uart driver is ready. - * It may be used in the context of the virtualized ME SO3 as well. + * It may be used in the context of the virtualized capsule SO3 as well. */ int ll_serial_write(char *str, int len) { diff --git a/so3/devices/timer/arm_timer.c b/so3/devices/timer/arm_timer.c index bd87e94e67..6b23d81bee 100644 --- a/so3/devices/timer/arm_timer.c +++ b/so3/devices/timer/arm_timer.c @@ -84,7 +84,7 @@ static irq_return_t timer_isr(int irq, void *dev) next_event(arm_timer->reload); #ifdef CONFIG_AVZ - timer_interrupt((smp_processor_id() == ME_CPU) ? true : false); + timer_interrupt((smp_processor_id() == S3C_CPU) ? true : false); #else jiffies++; @@ -128,7 +128,7 @@ void avz_el2_timer_tick(void) /* Re-arm the timer for the next period. */ next_event(arm_timer->reload); - /* Agency tick (non-ME path). */ + /* Agency tick (non-capsule path). */ timer_interrupt(false); } #endif /* CONFIG_AVZ */ diff --git a/so3/include/banner.h b/so3/include/banner.h index 048875bc0f..7cb09bb1b6 100644 --- a/so3/include/banner.h +++ b/so3/include/banner.h @@ -5,7 +5,7 @@ #define SO3_BANNER \ "\n\n********** Smart Object Oriented SO3 Operating System **********\n\ -Copyright (c) 2014-2023 REDS Institute, HEIG-VD, Yverdon\n\ +Copyright (c) 2014-2026 REDS Institute, HEIG-VD, Yverdon\n\ Version " SO3_KERNEL_VERSION "\n\n" #endif /* BENNER_H */ diff --git a/so3/include/common.h b/so3/include/common.h index 8d33190eaf..b919952611 100644 --- a/so3/include/common.h +++ b/so3/include/common.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2014-2019 Daniel Rossier + * Copyright (C) 2014-2026 Daniel Rossier * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as @@ -36,13 +36,13 @@ * CPU #0 is the primary (non-RT) Agency CPU. * CPU #1 is the hard RT Agency CPU. * CPU #2 is the second (SMP) Agency CPU. - * CPU #3 is the ME CPU. + * CPU #3 is the capsule CPU. */ #define AGENCY_CPU 0 #define AGENCY_RT_CPU 1 -#define ME_CPU 3 +#define S3C_CPU 3 #endif /* CONFIG_AVZ */ diff --git a/so3/include/log.h b/so3/include/log.h index e6003c45de..fafa5e7e2f 100644 --- a/so3/include/log.h +++ b/so3/include/log.h @@ -48,10 +48,10 @@ #define LOG(level, fmt, ...) \ do { \ if (vlogs_ready()) \ - vlogs_write("[ME:%d][" #level "] <%s:%d> " fmt, get_ME_desc()->slotID, __func__, __LINE__, \ + vlogs_write("[S3C:%d][" #level "] <%s:%d> " fmt, get_S3C_desc()->slotID, __func__, __LINE__, \ ##__VA_ARGS__); \ else \ - lprintk("[ME:%d][" #level "] <%s:%d> " fmt, get_ME_desc()->slotID, __func__, __LINE__, ##__VA_ARGS__); \ + lprintk("[S3C:%d][" #level "] <%s:%d> " fmt, get_S3C_desc()->slotID, __func__, __LINE__, ##__VA_ARGS__); \ } while (0) #else diff --git a/so3/kernel/timer.c b/so3/kernel/timer.c index 8ae7c83f17..36e4c30df3 100644 --- a/so3/kernel/timer.c +++ b/so3/kernel/timer.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2014-2023 Daniel Rossier + * Copyright (C) 2014-2026 Daniel Rossier * Copyright (C) 2017 Baptiste Delporte * * This program is free software; you can redistribute it and/or modify @@ -359,8 +359,8 @@ static void dump_timerq(unsigned char key) printk("Dumping timer queues:\n"); - ts = &per_cpu(timers, ME_CPU); - printk("CPU #%d:\n", ME_CPU); + ts = &per_cpu(timers, S3C_CPU); + printk("CPU #%d:\n", S3C_CPU); spin_lock(&ts->lock); diff --git a/so3/soo/Kconfig b/so3/soo/Kconfig index bb28ce1652..8bca182e43 100644 --- a/so3/soo/Kconfig +++ b/so3/soo/Kconfig @@ -1,9 +1,9 @@ # -# SOO Mobile Entity configuration +# SOO SO3 capsule configuration # if SOO && !AVZ -menu "SOO Mobile Entity - Smart Object Oriented subsystem" +menu "SOO SO3 capsule - Smart Object Oriented subsystem" source "soo/drivers/Kconfig" diff --git a/so3/soo/drivers/Kconfig b/so3/soo/drivers/Kconfig index d28e2bd408..d6de4c483e 100644 --- a/so3/soo/drivers/Kconfig +++ b/so3/soo/drivers/Kconfig @@ -1,8 +1,8 @@ # -# SOO Mobile Entity configuration +# SOO SO3 capsule configuration # -menu "SOO Mobile Entity frontend drivers" +menu "SOO SO3 capsule frontend drivers" config VDUMMY_FRONTEND bool "vdummy Dummy driver support debugging and testing" diff --git a/so3/soo/drivers/vdevfront.c b/so3/soo/drivers/vdevfront.c index 5998208870..f450d8c884 100644 --- a/so3/soo/drivers/vdevfront.c +++ b/so3/soo/drivers/vdevfront.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020 Daniel Rossier + * Copyright (C) 2020-2026 Daniel Rossier * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as @@ -35,7 +35,7 @@ * * Assumptions: * - If the frontend is suspended during processing_start, it is for a short time, until the FE gets connected. - * - If the frontend is suspended and a shutdown operation is in progress, the ME will disappear! Therefore, + * - If the frontend is suspended and a shutdown operation is in progress, the capsule will disappear! Therefore, * we do not take care about ongoing activities. All will disappear... * */ @@ -129,7 +129,7 @@ static void __otherend_changed(struct vbus_device *vdev, enum vbus_state backend vdrvfront->closed(vdev); /* The processing_lock is kept forever, since it has to keep all processing activities suspended. - * Until the ME disappears... + * Until the capsule disappears... */ break; diff --git a/so3/soo/drivers/vdummyfront/vdummy.c b/so3/soo/drivers/vdummyfront/vdummy.c index fa93fe1b66..d2bfcab517 100644 --- a/so3/soo/drivers/vdummyfront/vdummy.c +++ b/so3/soo/drivers/vdummyfront/vdummy.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2019 Daniel Rossier + * Copyright (C) 2018-2026 Daniel Rossier * Copyright (C) 2018-2019 Baptiste Delporte * * This program is free software; you can redistribute it and/or modify @@ -54,7 +54,7 @@ irq_return_t vdummy_interrupt(int irq, void *dev_id) vdummy_priv_t *vdummy_priv = dev_get_drvdata(vdev->dev); vdummy_response_t *ring_rsp; - DBG("%s, %d\n", __func__, ME_domID()); + DBG("%s, %d\n", __func__, S3C_domID()); while ((ring_rsp = vdummy_get_ring_response(&vdummy_priv->vdummy.ring)) != NULL) { DBG("%s, cons=%d\n", __func__, i); diff --git a/so3/soo/drivers/vfbdevfront/vfbdev.c b/so3/soo/drivers/vfbdevfront/vfbdev.c index b50eec242c..33d7befcfd 100644 --- a/so3/soo/drivers/vfbdevfront/vfbdev.c +++ b/so3/soo/drivers/vfbdevfront/vfbdev.c @@ -254,7 +254,7 @@ static void retrieve_data(vfbdev_priv_t *priv) vdevfront_processing_end(vfbdev_dev); /* Retrieve fb address from AVZ */ - hyp_args.cmd = AVZ_FBDEV_GET_ME_ADDR; + hyp_args.cmd = AVZ_FBDEV_GET_S3C_ADDR; avz_hypercall(&hyp_args); priv->fb_paddr = hyp_args.u.avz_fbdev_addr_args.paddr; } diff --git a/so3/soo/drivers/vlogsfront/vlogs.c b/so3/soo/drivers/vlogsfront/vlogs.c index 939be05aec..e69ba35bd3 100644 --- a/so3/soo/drivers/vlogsfront/vlogs.c +++ b/so3/soo/drivers/vlogsfront/vlogs.c @@ -246,7 +246,7 @@ static int vlogs_cwrite(int fd, const void *buffer, int count) { static char msg[1024]; - sprintf(msg, "[ME:%d] %s", get_ME_desc()->capsuleID, (const char *) buffer); + sprintf(msg, "[S3C:%d] %s", get_S3C_desc()->capsuleID, (const char *) buffer); vlogs_write((char *) msg); diff --git a/so3/soo/drivers/vuihandlerfront/vuihandler.c b/so3/soo/drivers/vuihandlerfront/vuihandler.c index 561638808d..e4ff79a42f 100644 --- a/so3/soo/drivers/vuihandlerfront/vuihandler.c +++ b/so3/soo/drivers/vuihandlerfront/vuihandler.c @@ -1,6 +1,6 @@ /* * Copyright (C) 2020-2022 David Truan - * Copyright (C) 2018-2019 Daniel Rossier + * Copyright (C) 2018-2026 Daniel Rossier * Copyright (C) 2018-2019 Baptiste Delporte * * This program is free software; you can redistribute it and/or modify @@ -39,7 +39,7 @@ #include -/* Callbacks to be set by the ME app */ +/* Callbacks to be set by the capsule app */ ui_interrupt_t __ui_interrupt = NULL; ui_send_model_t __ui_send_model = NULL; diff --git a/so3/soo/include/me/agency.h b/so3/soo/include/capsule/agency.h similarity index 100% rename from so3/soo/include/me/agency.h rename to so3/soo/include/capsule/agency.h diff --git a/so3/soo/include/me/common.h b/so3/soo/include/capsule/common.h similarity index 95% rename from so3/soo/include/me/common.h rename to so3/soo/include/capsule/common.h index c7217f799d..356aa126bf 100644 --- a/so3/soo/include/me/common.h +++ b/so3/soo/include/capsule/common.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2021 Daniel Rossier + * Copyright (C) 2021-2026 Daniel Rossier * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as @@ -16,8 +16,8 @@ * */ -#ifndef ME_COMMON_H -#define ME_COMMON_H +#ifndef S3C_COMMON_H +#define S3C_COMMON_H #include @@ -61,7 +61,7 @@ typedef struct { */ uint8_t soohosts[0]; -} me_common_t; +} s3c_common_t; int concat_hosts(struct list_head *hosts, uint8_t *hosts_array); @@ -75,7 +75,7 @@ void del_host(struct list_head *hosts, uint64_t agencyUID); /** * Add a new entry in the host list. * - * @param me_common + * @param s3c_common * @param agencyUID */ void new_host(struct list_head *hosts, uint64_t agencyUID, void *priv, int priv_len); @@ -148,4 +148,4 @@ void dump_hosts(struct list_head *hosts); */ void do_local_cooperation(int domID); -#endif /* ME_COMMON_H */ +#endif /* S3C_COMMON_H */ diff --git a/so3/soo/include/me/refso3.h b/so3/soo/include/capsule/refso3.h similarity index 90% rename from so3/soo/include/me/refso3.h rename to so3/soo/include/capsule/refso3.h index 0c0597c439..1cdc8ddc2b 100644 --- a/so3/soo/include/me/refso3.h +++ b/so3/soo/include/capsule/refso3.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2021 Daniel Rossier + * Copyright (C) 2021-2026 Daniel Rossier * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as @@ -22,7 +22,7 @@ #include #include -#include +#include /* * Never use lock (completion, spinlock, etc.) in the shared page since @@ -36,7 +36,7 @@ typedef struct { * MUST BE the last field, since it contains a field at the end which is used * as "payload" for a concatened list of hosts. */ - me_common_t me_common; + s3c_common_t s3c_common; } sh_refso3_t; diff --git a/so3/soo/include/soo/avz.h b/so3/soo/include/soo/avz.h index d91bc44d8f..9edeff3867 100644 --- a/so3/soo/include/soo/avz.h +++ b/so3/soo/include/soo/avz.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016-2022 Daniel Rossier + * Copyright (C) 2016-2026 Daniel Rossier * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as @@ -18,6 +18,6 @@ #include -#define ME_domID() (avz_shared->domID) +#define S3C_domID() (avz_shared->domID) void avz_setup(void); diff --git a/so3/soo/include/soo/dev/vuihandler.h b/so3/soo/include/soo/dev/vuihandler.h index 24d8bbbc28..89e456c82f 100644 --- a/so3/soo/include/soo/dev/vuihandler.h +++ b/so3/soo/include/soo/dev/vuihandler.h @@ -61,9 +61,9 @@ typedef struct __attribute__((packed)) { #define VUIHANDLER_BEACON 0 #define VUIHANDLER_DATA 1 -#define VUIHANDLER_ASK_LIST 4 /* Ask for the XML ME list */ -#define VUIHANDLER_SEND 5 /* Specify that the packet contains an event data to be forwarded to the ME */ -#define VUIHANDLER_SELECT 6 /* Ask for the ME model */ +#define VUIHANDLER_ASK_LIST 4 /* Ask for the XML capsule list */ +#define VUIHANDLER_SEND 5 /* Specify that the packet contains an event data to be forwarded to the capsule */ +#define VUIHANDLER_SELECT 6 /* Ask for the capsule model */ #define VUIHANDLER_POST 7 #define VUIHANDLER_BT_PKT_HEADER_SIZE sizeof(vuihandler_pkt_t) @@ -153,7 +153,7 @@ typedef void (*ui_send_model_t)(void); /** * @brief Allows to register two callbacks to the vuihandler. * - * @param ui_send_model: callbacks to send the model. It is a function to let the ME app do whatever it + * @param ui_send_model: callbacks to send the model. It is a function to let the capsule app do whatever it * wants and not just pass a model char *. * @param ui_interrupt: callbacks to be called when receiving a VUIHANDLER_POST or VUIHANDLER_DATA packet. * diff --git a/so3/soo/include/soo/soo.h b/so3/soo/include/soo/soo.h index dcef818149..639b4382ec 100644 --- a/so3/soo/include/soo/soo.h +++ b/so3/soo/include/soo/soo.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016-2018 Daniel Rossier + * Copyright (C) 2016-2026 Daniel Rossier * Copyright (C) 2016-2018 Baptiste Delporte * * This program is free software; you can redistribute it and/or modify @@ -24,21 +24,21 @@ #include -int get_ME_state(void); -void set_ME_state(ME_state_t state); +int get_S3C_state(void); +void set_S3C_state(S3C_state_t state); -bool get_ME_id(uint32_t slotID, ME_id_t *ME_id); +bool get_S3C_id(uint32_t slotID, S3C_id_t *S3C_id); -void get_ME_id_array(ME_id_t *ME_id_array); -char *xml_prepare_id_array(ME_id_t *ME_id_array); +void get_S3C_id_array(S3C_id_t *S3C_id_array); +char *xml_prepare_id_array(S3C_id_t *S3C_id_array); -ME_desc_t *get_ME_desc(void); +S3C_desc_t *get_S3C_desc(void); -/* ME ID management */ -const char *get_me_shortdesc(void); +/* capsule ID management */ +const char *get_s3c_shortdesc(void); const char *get_me_name(void); u64 get_spid(void); -void vbstore_ME_ID_populate(void); +void vbstore_S3C_ID_populate(void); #endif /* SOO_H */ diff --git a/so3/soo/include/soo/uapi/soo.h b/so3/soo/include/soo/uapi/soo.h index 959906a812..7abffe9dc6 100644 --- a/so3/soo/include/soo/uapi/soo.h +++ b/so3/soo/include/soo/uapi/soo.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2014-2025 Daniel Rossier + * Copyright (C) 2014-2026 Daniel Rossier * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as @@ -23,10 +23,10 @@ #include -/* This signature is used to check the coherency of the ME image, after a migration +/* This signature is used to check the coherency of the capsule image, after a migration * or a restoration for example. */ -#define SOO_ME_SIGNATURE "SooZ" +#define SOO_S3C_SIGNATURE "SooZ" #endif /* __ASSEMBLY__ */ @@ -88,51 +88,51 @@ typedef struct fbdev_pfns { #define AVZ_SCHEDULER_FLIP 0 /* - * ME states: - * - ME_state_stopped: Capsule is stopped (right after start or later) - * - ME_state_living: ME is full-functional and activated (all frontend devices are consistent) - * - ME_state_suspended: ME is suspended before migrating. This state is maintained for the resident ME instance - * - ME_state_hibernate: ME is in a state of hibernate snapshot - * - ME_state_resuming: ME ready to perform resuming (after recovering) - * - ME_state_awakened: ME is just being awakened - * - ME_state_terminated: ME has been terminated (by a shutdown) - * - ME_state_dead: ME does not exist + * capsule states: + * - S3C_state_stopped: Capsule is stopped (right after start or later) + * - S3C_state_living: capsule is full-functional and activated (all frontend devices are consistent) + * - S3C_state_suspended: capsule is suspended before migrating. This state is maintained for the resident capsule instance + * - S3C_state_hibernate: capsule is in a state of hibernate snapshot + * - S3C_state_resuming: capsule ready to perform resuming (after recovering) + * - S3C_state_awakened: capsule is just being awakened + * - S3C_state_terminated: capsule has been terminated (by a shutdown) + * - S3C_state_dead: capsule does not exist */ typedef enum { - ME_state_stopped, - ME_state_living, - ME_state_suspended, - ME_state_hibernate, - ME_state_resuming, - ME_state_awakened, - ME_state_killed, - ME_state_terminated, - ME_state_dead -} ME_state_t; + S3C_state_stopped, + S3C_state_living, + S3C_state_suspended, + S3C_state_hibernate, + S3C_state_resuming, + S3C_state_awakened, + S3C_state_killed, + S3C_state_terminated, + S3C_state_dead +} S3C_state_t; /* Keep information about slot availability - * FREE: the slot is available (no ME) - * BUSY: the slot is allocated a ME + * FREE: the slot is available (no capsule) + * BUSY: the slot is allocated a capsule */ -typedef enum { ME_SLOT_FREE, ME_SLOT_BUSY } ME_slotState_t; +typedef enum { S3C_SLOT_FREE, S3C_SLOT_BUSY } S3C_slotState_t; -/* ME ID related information */ -#define ME_NAME_SIZE 40 -#define ME_SHORTDESC_SIZE 1024 +/* capsule ID related information */ +#define S3C_NAME_SIZE 40 +#define S3C_SHORTDESC_SIZE 1024 /* - * Definition of ME ID information used by functions which need + * Definition of capsule ID information used by functions which need * to get a list of running MEs with their information. */ typedef struct { uint32_t slotID; - ME_state_t state; + S3C_state_t state; uint64_t spid; - char name[ME_NAME_SIZE]; - char shortdesc[ME_SHORTDESC_SIZE]; -} ME_id_t; + char name[S3C_NAME_SIZE]; + char shortdesc[S3C_SHORTDESC_SIZE]; +} S3C_id_t; struct work_struct; struct semaphore; @@ -175,25 +175,25 @@ extern atomic_t dc_incoming_domID[DC_EVENT_MAX]; #define AGENCY_IOCTL_SHUTDOWN _IOW('S', 3, agency_ioctl_args_t) #define AGENCY_IOCTL_INJECT_CAPSULE _IOWR('S', 4, agency_ioctl_args_t) #define AGENCY_IOCTL_START_CAPSULE _IOWR('S', 5, agency_ioctl_args_t) -#define AGENCY_IOCTL_GET_ME_ID _IOWR('S', 6, agency_ioctl_args_t) -#define AGENCY_IOCTL_GET_ME_ID_ARRAY _IOR('S', 7, agency_ioctl_args_t) +#define AGENCY_IOCTL_GET_S3C_ID _IOWR('S', 6, agency_ioctl_args_t) +#define AGENCY_IOCTL_GET_S3C_ID_ARRAY _IOR('S', 7, agency_ioctl_args_t) #define SOO_NAME_SIZE 16 /* - * ME descriptor + * capsule descriptor * * WARNING !! Be careful when modifying this structure. It *MUST* be aligned with - * the same structure used in the ME. + * the same structure used in the capsule. */ typedef struct { unsigned int slotID; unsigned int capsuleID; /* ID handled by emiso engine */ uint64_t spid; - ME_state_t state; + S3C_state_t state; - unsigned int size; /* Size of the ME with the struct dom_context size */ + unsigned int size; /* Size of the capsule with the struct dom_context size */ unsigned int dc_evtchn; unsigned int vbstore_revtchn, vbstore_levtchn; @@ -201,7 +201,7 @@ typedef struct { void (*resume_fn)(void); -} ME_desc_t; +} S3C_desc_t; /* * Agency descriptor @@ -214,7 +214,7 @@ typedef struct { uint64_t agencyUID; /* Agency UID */ - /* Event channels used for directcomm channel between agency and agency-RT or ME */ + /* Event channels used for directcomm channel between agency and agency-RT or capsule */ unsigned int dc_evtchn[MAX_DOMAINS]; /* Event channels used by vbstore */ @@ -226,13 +226,13 @@ typedef struct { } agency_desc_t; /* - * SOO agency & ME descriptor - This structure is used in the shared info page of the agency or ME domain. + * SOO agency & capsule descriptor - This structure is used in the shared info page of the agency or capsule domain. */ typedef struct { union { agency_desc_t agency; - ME_desc_t ME; + S3C_desc_t S3C; } u; } dom_desc_t; @@ -266,7 +266,7 @@ struct avz_shared { */ u64 current_s_time; - /* Agency or ME descriptor */ + /* Agency or capsule descriptor */ dom_desc_t dom_desc; /* Used to store a signature for consistency checking, for example after a migration/restoration */ @@ -304,19 +304,19 @@ typedef struct agency_ioctl_args { /* AVZ hypercalls devoted to SOO */ -#define AVZ_ME_READ_SNAPSHOT 4 -#define AVZ_ME_WRITE_SNAPSHOT 5 +#define AVZ_S3C_READ_SNAPSHOT 4 +#define AVZ_S3C_WRITE_SNAPSHOT 5 #define AVZ_START_CAPSULE 6 #define AVZ_INJECT_CAPSULE 7 -#define AVZ_KILL_ME 8 +#define AVZ_KILL_S3C 8 #define AVZ_DC_EVENT_SET 9 -#define AVZ_GET_ME_STATE 10 -#define AVZ_SET_ME_STATE 11 +#define AVZ_GET_S3C_STATE 10 +#define AVZ_SET_S3C_STATE 11 #define AVZ_GET_DOM_DESC 12 #define AVZ_GRANT_TABLE_OP 13 #define AVZ_FBDEV_SET_PFNS 14 #define AVZ_FBDEV_CHANGE_FOCUS 15 -#define AVZ_FBDEV_GET_ME_ADDR 16 +#define AVZ_FBDEV_GET_S3C_ADDR 16 /* AVZ_INJECT_CAPSULE */ typedef struct { @@ -337,12 +337,12 @@ typedef struct { int state; } avz_dc_event_t; -/* AVZ_GET_ME_STATE */ -/* AVZ_SET_ME_STATE */ +/* AVZ_GET_S3C_STATE */ +/* AVZ_SET_S3C_STATE */ typedef struct { uint32_t slotID; int state; -} avz_me_state_t; +} avz_s3c_state_t; /* AVZ_GET_DOM_DESC */ typedef struct { @@ -350,7 +350,7 @@ typedef struct { dom_desc_t dom_desc; } avz_dom_desc_t; -/* AVZ_GET_ME_FREE_SLOT */ +/* AVZ_GET_S3C_FREE_SLOT */ typedef struct { int slotID; int size; @@ -369,10 +369,10 @@ typedef struct { int size; } avz_snapshot_t; -/* AVZ_KILL_ME */ +/* AVZ_KILL_S3C */ typedef struct { uint32_t slotID; -} avz_kill_me_t; +} avz_kill_s3c_t; /* AVZ_GRANT_TABLE_OP */ typedef struct { @@ -389,7 +389,7 @@ typedef struct { int new_slotID; } avz_fbdev_focus_t; -/* AVZ_FBDEV_GET_ME_ADDR */ +/* AVZ_FBDEV_GET_S3C_ADDR */ typedef struct { addr_t paddr; } avz_fbdev_addr_t; @@ -404,12 +404,12 @@ typedef struct { avz_inject_capsule_t avz_inject_capsule_args; avz_start_capsule_t avz_start_capsule_args; avz_dc_event_t avz_dc_event_args; - avz_me_state_t avz_me_state_args; + avz_s3c_state_t avz_s3c_state_args; avz_dom_desc_t avz_dom_desc_args; avz_free_slot_t avz_free_slot_args; avz_mig_init_t avz_mig_init_args; avz_snapshot_t avz_snapshot_args; - avz_kill_me_t avz_kill_me_args; + avz_kill_s3c_t avz_kill_s3c_args; avz_console_io_t avz_console_io_args; avz_domctl_t avz_domctl_args; avz_gnttab_t avz_gnttab_args; @@ -438,7 +438,7 @@ typedef struct { /* * SOO callback functions. * The following definitions are used as argument in domcalls or in the - * agency_ctl() function as a callback to be propagated to a specific ME. + * agency_ctl() function as a callback to be propagated to a specific capsule. * */ @@ -449,7 +449,7 @@ typedef struct { typedef struct soo_domcall_arg { /* Stores the agency ctl function. - * Possibly, the agency_ctl function can be associated to a callback operation asked by a ME + * Possibly, the agency_ctl function can be associated to a callback operation asked by a capsule */ unsigned int cmd; unsigned int slotID; /* Origin of the domcall */ @@ -459,7 +459,7 @@ typedef struct soo_domcall_arg { pre_resume_args_t pre_resume_args; post_activate_args_t post_activate_args; - ME_state_t set_me_state_args; + S3C_state_t set_s3c_state_args; } u; } soo_domcall_arg_t; @@ -488,7 +488,7 @@ void do_async_dom(int slotID, dc_event_t); void perform_task(dc_event_t dc_event); -void shutdown_ME(unsigned int ME_slotID); +void shutdown_S3C(unsigned int S3C_slotID); void cache_flush_all(void); diff --git a/so3/soo/include/soo/vbstore_me.h b/so3/soo/include/soo/vbstore_capsule.h similarity index 85% rename from so3/soo/include/soo/vbstore_me.h rename to so3/soo/include/soo/vbstore_capsule.h index 1b3aca2b36..cd57c86deb 100644 --- a/so3/soo/include/soo/vbstore_me.h +++ b/so3/soo/include/soo/vbstore_capsule.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016-2019 Daniel Rossier + * Copyright (C) 2016-2026 Daniel Rossier * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as @@ -16,12 +16,12 @@ * */ -#ifndef VBSTORE_ME_H -#define VBSTORE_ME_H +#ifndef VBSTORE_S3C_H +#define VBSTORE_S3C_H #include extern struct completion vbstore_populated_sync; extern bool vbstore_populated; -#endif /* VBSTORE_ME_H */ +#endif /* VBSTORE_S3C_H */ diff --git a/so3/soo/include/soo/vbus.h b/so3/soo/include/soo/vbus.h index f9c432212f..284f3a0f3f 100644 --- a/so3/soo/include/soo/vbus.h +++ b/so3/soo/include/soo/vbus.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2014-2019 Daniel Rossier + * Copyright (C) 2014-2026 Daniel Rossier * Copyright (C) 2016, 2018 Baptiste Delporte * * This program is free software; you can redistribute it and/or modify @@ -79,7 +79,7 @@ struct vbus_device { enum vbus_state state; - /* So far, only the ME use this completion struct. On the agency side, + /* So far, only the capsule use this completion struct. On the agency side, * the device can not be shutdown on live. */ struct completion down; @@ -147,7 +147,7 @@ bool vbus_gather(struct vbus_transaction t, const char *dir, ...); void free_otherend_watch(struct vbus_device *dev, bool with_vbus); extern void vbstore_init(void); -extern void vbstore_me_init(void); +extern void vbstore_s3c_init(void); bool is_vbstore_populated(void); diff --git a/so3/soo/kernel/debug/time.c b/so3/soo/kernel/debug/time.c index 2b436169b5..6f90988e35 100644 --- a/so3/soo/kernel/debug/time.c +++ b/so3/soo/kernel/debug/time.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016-2018 Daniel Rossier + * Copyright (C) 2016-2026 Daniel Rossier * Copyright (C) 2016-2018 Baptiste Delporte * * This program is free software; you can redistribute it and/or modify @@ -20,7 +20,7 @@ /* * Timestamp and delay measurement facility. * - * There are two sets of functions: one for a non RT domain (non RT agency or ME), one for the + * There are two sets of functions: one for a non RT domain (non RT agency or capsule), one for the * RT agency. The RT version is prefixed with rtdm_. * * Typical usage: diff --git a/so3/soo/kernel/evtchn.c b/so3/soo/kernel/evtchn.c index e919a52913..43386a4823 100644 --- a/so3/soo/kernel/evtchn.c +++ b/so3/soo/kernel/evtchn.c @@ -1,6 +1,6 @@ /* - * Copyright (C) 2014-2016 Daniel Rossier + * Copyright (C) 2014-2026 Daniel Rossier * Copyright (C) 2016 Baptiste Delporte * * This program is free software; you can redistribute it and/or modify @@ -66,7 +66,7 @@ void dump_evtchn_pending(void) { int i; - printk(" Evtchn info in Agency/ME domain %d\n\n", ME_domID()); + printk(" Evtchn info in Agency/capsule domain %d\n\n", S3C_domID()); for (i = 0; i < NR_EVTCHN; i++) printk("e:%d m:%d p:%d ", i, evtchn_info.evtchn_mask[i], avz_shared->evtchn_pending[i]); @@ -109,7 +109,7 @@ void virq_handle(unsigned irq_nr) if (loopmax > 500) /* Probably something wrong ;-) */ printk("%s: Warning trying to process evtchn: %d IRQ: %d for quite a long time (dom ID: %d) on CPU %d / masked: %d...\n", - __func__, evtchn, evtchn_info.evtchn_to_irq[evtchn], ME_domID(), smp_processor_id(), + __func__, evtchn, evtchn_info.evtchn_to_irq[evtchn], S3C_domID(), smp_processor_id(), evtchn_is_masked(evtchn)); virq = evtchn_info.evtchn_to_irq[evtchn]; diff --git a/so3/soo/kernel/setup.c b/so3/soo/kernel/setup.c index ce2c61132d..fb775b6661 100644 --- a/so3/soo/kernel/setup.c +++ b/so3/soo/kernel/setup.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2014-2023 Daniel Rossier + * Copyright (C) 2014-2026 Daniel Rossier * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as @@ -77,7 +77,7 @@ void avz_setup(void) { avz_get_shared(); - avz_shared->dom_desc.u.ME.resume_fn = resume_fn; + avz_shared->dom_desc.u.S3C.resume_fn = resume_fn; LOG_INFO("SOO Virtualizer (avz) shared page:\n\n"); @@ -92,9 +92,9 @@ void avz_setup(void) void post_init_setup(void) { - LOG_INFO("Mapping VBstore shared page pfn %lx\n", avz_shared->dom_desc.u.ME.vbstore_pfn); + LOG_INFO("Mapping VBstore shared page pfn %lx\n", avz_shared->dom_desc.u.S3C.vbstore_pfn); - __intf = (void *) io_map(pfn_to_phys(avz_shared->dom_desc.u.ME.vbstore_pfn), PAGE_SIZE); + __intf = (void *) io_map(pfn_to_phys(avz_shared->dom_desc.u.S3C.vbstore_pfn), PAGE_SIZE); BUG_ON(!__intf); /* @@ -105,9 +105,9 @@ void post_init_setup(void) * (inner-shareable) for the ring buffer protocol. * Override the Stage-1 PTE with Normal cacheable attributes. */ - create_mapping(NULL, (addr_t) __intf, pfn_to_phys(avz_shared->dom_desc.u.ME.vbstore_pfn), PAGE_SIZE, false); + create_mapping(NULL, (addr_t) __intf, pfn_to_phys(avz_shared->dom_desc.u.S3C.vbstore_pfn), PAGE_SIZE, false); - LOG_INFO("SOO Mobile Entity booting ...\n"); + LOG_INFO("SOO SO3 capsule booting ...\n"); soo_guest_activity_init(); @@ -116,15 +116,15 @@ void post_init_setup(void) /* Initialize the Vbus subsystem */ vbus_init(); - /* Write the entries related to the ME ID in vbstore */ - vbstore_ME_ID_populate(); + /* Write the entries related to the capsule ID in vbstore */ + vbstore_S3C_ID_populate(); /* How create all vbstore entries required by the frontend drivers */ vbstore_init_dev_populate(); LOG_INFO("%s", SO3_BANNER); - LOG_DEBUG("ME running as domain %d\n", ME_domID()); + LOG_DEBUG("capsule running as domain %d\n", S3C_domID()); } REGISTER_POSTINIT(post_init_setup) diff --git a/so3/soo/kernel/soo_guest_activity.c b/so3/soo/kernel/soo_guest_activity.c index 9f86bde3a4..e588db77da 100644 --- a/so3/soo/kernel/soo_guest_activity.c +++ b/so3/soo/kernel/soo_guest_activity.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016-2019 Daniel Rossier + * Copyright (C) 2016-2026 Daniel Rossier * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as @@ -67,7 +67,7 @@ void dc_stable(int dc_event) * To perform a ping from the RT domain, please use rtdm_do_sync_agency() in rtdm_vbus.c * * As for the domain table, the index 0 and 1 are for the agency and the indexes 2..MAX_DOMAINS - * are for the MEs. If a ME_slotID is provided, the proper index is given by ME_slotID. + * are for the MEs. If a S3C_slotID is provided, the proper index is given by S3C_slotID. * * @domID: the target domain * @dc_event: type of event used in the synchronization @@ -83,8 +83,8 @@ void do_sync_dom(int domID, dc_event_t dc_event) set_dc_event(domID, dc_event); - DBG("%s: notifying via evtchn %d...\n", __func__, avz_shared->dom_desc.u.ME.dc_evtchn); - notify_remote_via_evtchn(avz_shared->dom_desc.u.ME.dc_evtchn); + DBG("%s: notifying via evtchn %d...\n", __func__, avz_shared->dom_desc.u.S3C.dc_evtchn); + notify_remote_via_evtchn(avz_shared->dom_desc.u.S3C.dc_evtchn); /* Wait for the response from the outgoing domain */ DBG("%s: waiting for completion on dc_event %d...\n", __func__, dc_event); @@ -117,12 +117,12 @@ void tell_dc_stable(int dc_event) atomic_set(&dc_incoming_domID[dc_event], -1); - notify_remote_via_evtchn(avz_shared->dom_desc.u.ME.dc_evtchn); + notify_remote_via_evtchn(avz_shared->dom_desc.u.S3C.dc_evtchn); } /* - * Prepare a remote ME to react to a ping event. - * @domID: the target ME + * Prepare a remote capsule to react to a ping event. + * @domID: the target capsule */ void set_dc_event(domid_t domID, dc_event_t dc_event) { @@ -144,22 +144,22 @@ void set_dc_event(domid_t domID, dc_event_t dc_event) } /* - * Get the state of a ME. + * Get the state of a capsule. */ -int get_ME_state(void) +int get_S3C_state(void) { - return avz_shared->dom_desc.u.ME.state; + return avz_shared->dom_desc.u.S3C.state; } -void set_ME_state(ME_state_t state) +void set_S3C_state(S3C_state_t state) { - /* Be careful if the ME is in living state and suddently is set to killed. + /* Be careful if the capsule is in living state and suddently is set to killed. * Backends will be in a weird state. */ - if ((state == ME_state_killed) && (avz_shared->dom_desc.u.ME.state == ME_state_living)) - lprintk("## WARNING ! ME %d is set to killed while living!\n", ME_domID()); + if ((state == S3C_state_killed) && (avz_shared->dom_desc.u.S3C.state == S3C_state_living)) + lprintk("## WARNING ! capsule %d is set to killed while living!\n", S3C_domID()); - avz_shared->dom_desc.u.ME.state = state; + avz_shared->dom_desc.u.S3C.state = state; } void postmig_setup(void); @@ -169,15 +169,15 @@ void perform_task(dc_event_t dc_event) switch (dc_event) { case DC_SHUTDOWN: - /* The ME will initiate the shutdown processing on its own. */ + /* The capsule will initiate the shutdown processing on its own. */ - DBG("perform a CB_SHUTDOWN on capsule %d\n", ME_domID()); + DBG("perform a CB_SHUTDOWN on capsule %d\n", S3C_domID()); - BUG_ON(get_ME_state() == ME_state_stopped); + BUG_ON(get_S3C_state() == S3C_state_stopped); cb_shutdown(); - if (get_ME_state() == ME_state_terminated) { + if (get_S3C_state() == S3C_state_terminated) { /* Prepare vbus to stop everything with the frontend */ /* (interactions with vbus) */ DBG("Device shutdown...\n"); @@ -187,7 +187,7 @@ void perform_task(dc_event_t dc_event) DBG("Removing devices ...\n"); remove_devices(); - /* Remove vbstore entries related to this ME */ + /* Remove vbstore entries related to this capsule */ DBG("Removing vbstore entries ...\n"); remove_vbstore_entries(); } @@ -197,7 +197,7 @@ void perform_task(dc_event_t dc_event) case DC_RESUME: DBG("resuming vbstore...\n"); - BUG_ON((get_ME_state() != ME_state_resuming) && (get_ME_state() != ME_state_awakened)); + BUG_ON((get_S3C_state() != S3C_state_resuming) && (get_S3C_state() != S3C_state_awakened)); /* Giving a chance to perform actions before resuming devices */ args.cmd = CB_PRE_RESUME; @@ -207,7 +207,7 @@ void perform_task(dc_event_t dc_event) vbs_resume(); /* During a resuming after an awakened snapshot, re-init watch for device/ */ - if (get_ME_state() == ME_state_awakened) + if (get_S3C_state() == S3C_state_awakened) postmig_setup(); DBG("vbstore resumed.\n"); @@ -252,29 +252,29 @@ void do_soo_activity(void *arg) switch (args->cmd) { case CB_PRE_SUSPEND: /* Called by perform_pre_suspend */ - DBG("Pre-suspend callback for ME %d\n", ME_domID()); + DBG("Pre-suspend callback for capsule %d\n", S3C_domID()); cb_pre_suspend(arg); break; case CB_PRE_RESUME: /* Called from vbus/vbs.c */ - DBG("Pre-resume callback for ME %d\n", ME_domID()); + DBG("Pre-resume callback for capsule %d\n", S3C_domID()); cb_pre_resume(arg); break; case CB_POST_ACTIVATE: /* Called by perform_post_activate() */ - DBG("Post_activate callback for ME %d\n", ME_domID()); + DBG("Post_activate callback for capsule %d\n", S3C_domID()); cb_post_activate(args); break; } } -ME_desc_t *get_ME_desc(void) +S3C_desc_t *get_S3C_desc(void) { - return (ME_desc_t *) &avz_shared->dom_desc.u.ME; + return (S3C_desc_t *) &avz_shared->dom_desc.u.S3C; } agency_desc_t *get_agency_desc(void) diff --git a/so3/soo/kernel/soo_id.c b/so3/soo/kernel/soo_id.c index 43d97a6403..32cc24f733 100644 --- a/so3/soo/kernel/soo_id.c +++ b/so3/soo/kernel/soo_id.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016-2021 Daniel Rossier + * Copyright (C) 2016-2026 Daniel Rossier * Copyright (C) 2016-2018 Baptiste Delporte * * This program is free software; you can redistribute it and/or modify @@ -27,30 +27,30 @@ #include #include -/* ME ID related information management */ +/* capsule ID related information management */ /** - * Get the short description related to this ME. + * Get the short description related to this capsule. * (not mandatory) * * @return a pointer to the string in the DT if it exists, NULL otherwise. */ -const char *get_me_shortdesc(void) +const char *get_s3c_shortdesc(void) { const char *str = NULL; int node; /* Get the short description */ - node = fdt_find_node_by_name(__fdt_addr, 0, "ME"); + node = fdt_find_node_by_name(__fdt_addr, 0, "capsule"); ASSERT(node >= 0); - fdt_property_read_string(__fdt_addr, node, "me_shortdesc", &str); + fdt_property_read_string(__fdt_addr, node, "s3c_shortdesc", &str); return str; } /** - * Get the name of this ME. + * Get the name of this capsule. * (not mandatory) * * @return a pointer to the string in the DT if it exists, NULL otherwise. @@ -61,7 +61,7 @@ const char *get_me_name(void) int node; /* Get the short description */ - node = fdt_find_node_by_name(__fdt_addr, 0, "ME"); + node = fdt_find_node_by_name(__fdt_addr, 0, "capsule"); ASSERT(node >= 0); fdt_property_read_string(__fdt_addr, node, "me_name", &str); @@ -70,7 +70,7 @@ const char *get_me_name(void) } /** - * Get the SPID related to this ME. + * Get the SPID related to this capsule. * (mandatory) * * @param what Either "spid" @@ -82,9 +82,9 @@ u64 get_spid(void) int node; /* Get the short description */ - node = fdt_find_node_by_name(__fdt_addr, 0, "ME"); + node = fdt_find_node_by_name(__fdt_addr, 0, "capsule"); if (node < 0) { - printk("%s: node \"ME\" not found\n", __func__); + printk("%s: node \"capsule\" not found\n", __func__); BUG(); } @@ -98,33 +98,33 @@ u64 get_spid(void) } /** - * Write the entries related to the ME ID in vbstore + * Write the entries related to the capsule ID in vbstore */ -void vbstore_ME_ID_populate(void) +void vbstore_S3C_ID_populate(void) { const char *name, *shortdesc; u64 spid; char rootname[VBS_KEY_LENGTH], entry[VBS_KEY_LENGTH]; - /* Set all ME ID related information */ + /* Set all capsule ID related information */ - /* Set the SPID of this ME */ + /* Set the SPID of this capsule */ spid = get_spid(); - avz_shared->dom_desc.u.ME.spid = spid; + avz_shared->dom_desc.u.S3C.spid = spid; /* Set the name */ name = get_me_name(); /* And set a short description which can be used on the user GUI */ - shortdesc = get_me_shortdesc(); + shortdesc = get_s3c_shortdesc(); strcpy(rootname, "soo/me"); - sprintf(entry, "%d", ME_domID()); + sprintf(entry, "%d", S3C_domID()); vbus_mkdir(VBT_NIL, rootname, entry); - sprintf(rootname, "soo/me/%d", ME_domID()); + sprintf(rootname, "soo/me/%d", S3C_domID()); sprintf(entry, "%lx", spid); vbus_write(VBT_NIL, rootname, "spid", entry); diff --git a/so3/soo/kernel/vbstore/Makefile b/so3/soo/kernel/vbstore/Makefile index d890c46387..389046dfb1 100644 --- a/so3/soo/kernel/vbstore/Makefile +++ b/so3/soo/kernel/vbstore/Makefile @@ -1,3 +1,3 @@ -obj-y += vbstore_me.o +obj-y += vbstore_capsule.o diff --git a/so3/soo/kernel/vbstore/vbstore_me.c b/so3/soo/kernel/vbstore/vbstore_capsule.c similarity index 78% rename from so3/soo/kernel/vbstore/vbstore_me.c rename to so3/soo/kernel/vbstore/vbstore_capsule.c index 9462c9734b..8af418b376 100644 --- a/so3/soo/kernel/vbstore/vbstore_me.c +++ b/so3/soo/kernel/vbstore/vbstore_capsule.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016-2018 Daniel Rossier + * Copyright (C) 2016-2026 Daniel Rossier * Copyright (C) 2016-2018 Baptiste Delporte * * This program is free software; you can redistribute it and/or modify @@ -28,21 +28,21 @@ #include #include #include -#include +#include #include -static void vbs_me_rmdir(const char *dir, const char *node) +static void vbs_s3c_rmdir(const char *dir, const char *node) { vbus_rm(VBT_NIL, dir, node); } -static void vbs_me_mkdir(const char *dir, const char *node) +static void vbs_s3c_mkdir(const char *dir, const char *node) { vbus_mkdir(VBT_NIL, dir, node); } -static void vbs_me_write(const char *dir, const char *node, const char *string) +static void vbs_s3c_write(const char *dir, const char *node, const char *string) { vbus_write(VBT_NIL, dir, node, string); } @@ -76,41 +76,41 @@ static void vbstore_dev_init(unsigned int domID, const char *devname, bool realt /* Virtualized interface of dev config */ sprintf(propname, "%d", domID); - vbs_me_mkdir("device", propname); + vbs_s3c_mkdir("device", propname); strcpy(devrootname, "device/%d"); sprintf(rootname, devrootname, domID); - vbs_me_mkdir(rootname, devname); + vbs_s3c_mkdir(rootname, devname); strcat(devrootname, "/"); strcat(devrootname, devname); sprintf(rootname, devrootname, domID); /* "/device/%d/vuart" */ - vbs_me_mkdir(rootname, "0"); + vbs_s3c_mkdir(rootname, "0"); strcat(devrootname, "/0"); /* "/device/%d/vuart/0" */ sprintf(rootname, devrootname, domID); - vbs_me_write(rootname, "state", "1"); /* = VBusStateInitialising */ + vbs_s3c_write(rootname, "state", "1"); /* = VBusStateInitialising */ switch (realtime) { case true: - vbs_me_write(rootname, "realtime", "1"); + vbs_s3c_write(rootname, "realtime", "1"); break; case false: - vbs_me_write(rootname, "realtime", "0"); + vbs_s3c_write(rootname, "realtime", "0"); } - vbs_me_write(rootname, "backend-id", "0"); + vbs_s3c_write(rootname, "backend-id", "0"); strcpy(devrootname, "backend/"); strcat(devrootname, devname); strcat(devrootname, "/%d/0"); /* "backend/vuart/%d/0" */ sprintf(propname, devrootname, domID); - vbs_me_write(rootname, "backend", propname); + vbs_s3c_write(rootname, "backend", propname); /* Create the vbstore entries for the backend side */ @@ -118,30 +118,30 @@ static void vbstore_dev_init(unsigned int domID, const char *devname, bool realt strcpy(devrootname, "backend/"); strcat(devrootname, devname); /* "/backend/vuart" */ - vbs_me_mkdir(devrootname, propname); + vbs_s3c_mkdir(devrootname, propname); strcat(devrootname, "/%d"); /* "/backend/vuart/%d" */ sprintf(rootname, devrootname, domID); - vbs_me_mkdir(rootname, "0"); + vbs_s3c_mkdir(rootname, "0"); strcat(devrootname, "/0"); /* "/backend/vuart/%d/state/1" */ sprintf(rootname, devrootname, domID); - vbs_me_write(rootname, "state", "1"); + vbs_s3c_write(rootname, "state", "1"); switch (realtime) { case true: - vbs_me_write(rootname, "realtime", "1"); + vbs_s3c_write(rootname, "realtime", "1"); /* The two next entries are used to synchronize RT and non-RT vbus/vbstore. */ - vbs_me_write(rootname, "sync_backfront", "0"); + vbs_s3c_write(rootname, "sync_backfront", "0"); - vbs_me_write(rootname, "sync_backfront_rt", "0"); + vbs_s3c_write(rootname, "sync_backfront_rt", "0"); break; case false: - vbs_me_write(rootname, "realtime", "0"); + vbs_s3c_write(rootname, "realtime", "0"); } strcpy(devrootname, "device/%d/"); @@ -149,10 +149,10 @@ static void vbstore_dev_init(unsigned int domID, const char *devname, bool realt strcat(devrootname, "/0"); /* "device/%d/vuart/0" */ sprintf(propname, devrootname, domID); - vbs_me_write(rootname, "frontend", propname); + vbs_s3c_write(rootname, "frontend", propname); sprintf(propname, "%d", domID); - vbs_me_write(rootname, "frontend-id", propname); + vbs_s3c_write(rootname, "frontend-id", propname); /* Now, we create the corresponding device on the frontend side */ strcpy(devrootname, "device/%d/"); @@ -191,7 +191,7 @@ static void vbstore_dev_remove(unsigned int domID, const char *devname) strcat(devrootname, propname); strcat(devrootname, devname); /* "/device/vuart/" */ - vbs_me_rmdir(devrootname, "0"); + vbs_s3c_rmdir(devrootname, "0"); /* Remove the vbstore entries for the backend side */ @@ -201,63 +201,63 @@ static void vbstore_dev_remove(unsigned int domID, const char *devname) strcat(devrootname, devname); /* "/backend/vuart/" */ strcat(devrootname, propname); /* "/backend/vuart/2" */ - vbs_me_rmdir(devrootname, "0"); + vbs_s3c_rmdir(devrootname, "0"); } /* - * Remove all vbstore entries related to this ME. + * Remove all vbstore entries related to this capsule. */ void remove_vbstore_entries(void) { int fdt_node; char rootname[VBS_KEY_LENGTH], entry[VBS_KEY_LENGTH]; - /* Remove the vbstore entries related to the ME */ + /* Remove the vbstore entries related to the capsule */ strcpy(rootname, "soo/me"); - sprintf(entry, "%d", ME_domID()); + sprintf(entry, "%d", S3C_domID()); vbus_rm(VBT_NIL, rootname, entry); fdt_node = fdt_find_compatible_node(__fdt_addr, "vuihandler,frontend"); if (fdt_device_is_available(__fdt_addr, fdt_node)) { DBG("%s: Removing vUIHandler from vbstore...\n", __func__); - vbstore_dev_remove(ME_domID(), "vuihandler"); + vbstore_dev_remove(S3C_domID(), "vuihandler"); } fdt_node = fdt_find_compatible_node(__fdt_addr, "vuart,frontend"); if (fdt_device_is_available(__fdt_addr, fdt_node)) { DBG("%s: removing vuart from vbstore...\n", __func__); - vbstore_dev_remove(ME_domID(), "vuart"); + vbstore_dev_remove(S3C_domID(), "vuart"); } fdt_node = fdt_find_compatible_node(__fdt_addr, "vdummy,frontend"); if (fdt_device_is_available(__fdt_addr, fdt_node)) { DBG("%s: removing vdummy from vbstore...\n", __func__); - vbstore_dev_remove(ME_domID(), "vdummy"); + vbstore_dev_remove(S3C_domID(), "vdummy"); } fdt_node = fdt_find_compatible_node(__fdt_addr, "vsenseled,frontend"); if (fdt_device_is_available(__fdt_addr, fdt_node)) { DBG("%s: removing vsenseled from vbstore...\n", __func__); - vbstore_dev_remove(ME_domID(), "vsenseled"); + vbstore_dev_remove(S3C_domID(), "vsenseled"); } fdt_node = fdt_find_compatible_node(__fdt_addr, "vsensej,frontend"); if (fdt_device_is_available(__fdt_addr, fdt_node)) { DBG("%s: removing vsensej from vbstore...\n", __func__); - vbstore_dev_remove(ME_domID(), "vsensej"); + vbstore_dev_remove(S3C_domID(), "vsensej"); } fdt_node = fdt_find_compatible_node(__fdt_addr, "vfbdev,frontend"); if (fdt_device_is_available(__fdt_addr, fdt_node)) { DBG("%s: removing vfbdev from vbstore...\n", __func__); - vbstore_dev_remove(ME_domID(), "vfbdev"); + vbstore_dev_remove(S3C_domID(), "vfbdev"); } fdt_node = fdt_find_compatible_node(__fdt_addr, "vinput,frontend"); if (fdt_device_is_available(__fdt_addr, fdt_node)) { DBG("%s: removing vinput from vbstore...\n", __func__); - vbstore_dev_remove(ME_domID(), "vinput"); + vbstore_dev_remove(S3C_domID(), "vinput"); } } @@ -273,49 +273,49 @@ void vbstore_devices_populate(void) fdt_node = fdt_find_compatible_node(__fdt_addr, "vdummy,frontend"); if (fdt_device_is_available(__fdt_addr, fdt_node)) { DBG("%s: init vdummy...\n", __func__); - vbstore_dev_init(ME_domID(), "vdummy", false, "vdummy,frontend"); + vbstore_dev_init(S3C_domID(), "vdummy", false, "vdummy,frontend"); } fdt_node = fdt_find_compatible_node(__fdt_addr, "vuihandler,frontend"); if (fdt_device_is_available(__fdt_addr, fdt_node)) { DBG("%s: Init vUIHandler...\n", __func__); - vbstore_dev_init(ME_domID(), "vuihandler", false, "vuihandler,frontend"); + vbstore_dev_init(S3C_domID(), "vuihandler", false, "vuihandler,frontend"); } fdt_node = fdt_find_compatible_node(__fdt_addr, "vuart,frontend"); if (fdt_device_is_available(__fdt_addr, fdt_node)) { DBG("%s: init vuart...\n", __func__); - vbstore_dev_init(ME_domID(), "vuart", false, "vuart,frontend"); + vbstore_dev_init(S3C_domID(), "vuart", false, "vuart,frontend"); } fdt_node = fdt_find_compatible_node(__fdt_addr, "vsenseled,frontend"); if (fdt_device_is_available(__fdt_addr, fdt_node)) { DBG("%s: init vsenseled...\n", __func__); - vbstore_dev_init(ME_domID(), "vsenseled", false, "vsenseled,frontend"); + vbstore_dev_init(S3C_domID(), "vsenseled", false, "vsenseled,frontend"); } fdt_node = fdt_find_compatible_node(__fdt_addr, "vsensej,frontend"); if (fdt_device_is_available(__fdt_addr, fdt_node)) { DBG("%s: init vsensej...\n", __func__); - vbstore_dev_init(ME_domID(), "vsensej", false, "vsensej,frontend"); + vbstore_dev_init(S3C_domID(), "vsensej", false, "vsensej,frontend"); } fdt_node = fdt_find_compatible_node(__fdt_addr, "vlogs,frontend"); if (fdt_device_is_available(__fdt_addr, fdt_node)) { DBG("%s: init vlogs...\n", __func__); - vbstore_dev_init(ME_domID(), "vlogs", false, "vlogs,frontend"); + vbstore_dev_init(S3C_domID(), "vlogs", false, "vlogs,frontend"); } fdt_node = fdt_find_compatible_node(__fdt_addr, "vfbdev,frontend"); if (fdt_device_is_available(__fdt_addr, fdt_node)) { DBG("%s: init vfbdev...\n", __func__); - vbstore_dev_init(ME_domID(), "vfbdev", false, "vfbdev,frontend"); + vbstore_dev_init(S3C_domID(), "vfbdev", false, "vfbdev,frontend"); } fdt_node = fdt_find_compatible_node(__fdt_addr, "vinput,frontend"); if (fdt_device_is_available(__fdt_addr, fdt_node)) { DBG("%s: init vinput...\n", __func__); - vbstore_dev_init(ME_domID(), "vinput", false, "vinput,frontend"); + vbstore_dev_init(S3C_domID(), "vinput", false, "vinput,frontend"); } } @@ -328,9 +328,9 @@ void vbstore_trigger_dev_probe(void) } /* - * Prepare the vbstore entries used by this ME. + * Prepare the vbstore entries used by this capsule. */ -void vbstore_me_init(void) +void vbstore_s3c_init(void) { vbus_probe_frontend_init(); @@ -346,9 +346,9 @@ void vbstore_init_dev_populate(void) /* Now, we are ready to register vbstore entries */ vbstore_devices_populate(); - if (get_ME_state() == ME_state_stopped) { + if (get_S3C_state() == S3C_state_stopped) { /* - * If the ME is in ME_state_booting state, this means that the ME has been locally injected. + * If the capsule is in S3C_state_booting state, this means that the capsule has been locally injected. * There is no need to adjust the grant tables. The TRIGGER_DEV_PROBE event can be sent. */ vbstore_trigger_dev_probe(); diff --git a/so3/soo/kernel/vbus/vbus.c b/so3/soo/kernel/vbus/vbus.c index d173b6acc1..08f3f90776 100644 --- a/so3/soo/kernel/vbus/vbus.c +++ b/so3/soo/kernel/vbus/vbus.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016-2018 Daniel Rossier + * Copyright (C) 2016-2026 Daniel Rossier * Copyright (C) 2016-2018 Baptiste Delporte * * This program is free software; you can redistribute it and/or modify @@ -44,7 +44,7 @@ #define VBUS_TIMEOUT 120 -/* Event channels used for directcomm channel between agency and ME */ +/* Event channels used for directcomm channel between agency and capsule */ spinlock_t dc_lock; /* List of device drivers */ @@ -174,7 +174,7 @@ void vbus_otherend_changed(struct vbus_watch *watch) state = vbus_read_driver_state(vdev->otherend); - DBG("On domID: %d, otherend changed / device: %s state: %d, CPU %d\n", ME_domID(), vdev->nodename, state, + DBG("On domID: %d, otherend changed / device: %s state: %d, CPU %d\n", S3C_domID(), vdev->nodename, state, smp_processor_id()); /* @@ -257,7 +257,7 @@ int vbus_dev_probe(struct vbus_device *vdev) init_completion(&vdev->down); init_completion(&vdev->sync_backfront); - DBG("ME #%d talk_to_otherend: %s\n", ME_domID(), vdev->nodename); + DBG("capsule #%d talk_to_otherend: %s\n", S3C_domID(), vdev->nodename); talk_to_otherend(vdev); @@ -271,7 +271,7 @@ int vbus_dev_remove(struct vbus_device *vdev) unsigned int dir_exists; /* - * If the ME is running on a Smart Object which does not offer all the backends matching the ME's frontends, + * If the capsule is running on a Smart Object which does not offer all the backends matching the capsule's frontends, * some frontend related entries may not have been created. We must check here if the entry matching the dev * to remove exists. */ @@ -444,7 +444,7 @@ void vbus_dev_changed(const char *node, char *type, struct vbus_type *bus, const add_new_dev(vdev); } else { - BUG_ON(ME_domID() == DOMID_AGENCY); + BUG_ON(S3C_domID() == DOMID_AGENCY); /* Update the our state in vbstore. */ /* We force the update, this will not trigger a watch since the watch is set right afterwards */ @@ -483,14 +483,14 @@ static irq_return_t directcomm_isr(int irq, void *data) dc_event = atomic_read(&avz_shared->dc_event); - DBG("(ME domid %d): Received directcomm interrupt for event: %d\n", ME_domID(), avz_shared->dc_event); + DBG("(capsule domid %d): Received directcomm interrupt for event: %d\n", S3C_domID(), avz_shared->dc_event); /* We should not receive twice a same dc_event, before it has been fully processed. */ BUG_ON(atomic_read(&dc_incoming_domID[dc_event]) != -1); atomic_set(&dc_incoming_domID[dc_event], DOMID_AGENCY); /* At the moment, only from the agency */ - /* Work to be done in ME */ + /* Work to be done in capsule */ switch (dc_event) { case DC_RESUME: @@ -511,7 +511,7 @@ static irq_return_t directcomm_isr(int irq, void *data) return IRQ_BOTTOM; default: - printk("(ME) %s: something weird happened, directcomm interrupt was triggered, but no DC event was configured !\n", + printk("(capsule) %s: something weird happened, directcomm interrupt was triggered, but no DC event was configured !\n", __func__); break; } @@ -533,7 +533,7 @@ void vbus_init(void) spin_lock_init(&dc_lock); - vbstore_me_init(); + vbstore_s3c_init(); /* Set up the direct communication channel for post-migration activities * previously established by dom0. @@ -541,9 +541,9 @@ void vbus_init(void) vbus_transaction_start(&vbt); - sprintf(buf, "soo/directcomm/%d", ME_domID()); + sprintf(buf, "soo/directcomm/%d", S3C_domID()); - res = vbus_scanf(vbt, buf, "event-channel", "%d", &avz_shared->dom_desc.u.ME.dc_evtchn); + res = vbus_scanf(vbt, buf, "event-channel", "%d", &avz_shared->dom_desc.u.S3C.dc_evtchn); if (res != 1) { printk("%s: reading soo/directcomm failed. Error code: %d\n", __func__, res); @@ -553,8 +553,8 @@ void vbus_init(void) vbus_transaction_end(vbt); /* Binding the irqhandler to the eventchannel */ - DBG("%s: setting up the direct comm event channel (%d) ...\n", __func__, avz_shared->dom_desc.u.ME.dc_evtchn); - res = bind_interdomain_evtchn_to_irqhandler(DOMID_AGENCY, avz_shared->dom_desc.u.ME.dc_evtchn, directcomm_isr, + DBG("%s: setting up the direct comm event channel (%d) ...\n", __func__, avz_shared->dom_desc.u.S3C.dc_evtchn); + res = bind_interdomain_evtchn_to_irqhandler(DOMID_AGENCY, avz_shared->dom_desc.u.S3C.dc_evtchn, directcomm_isr, directcomm_isr_thread, NULL); if (res <= 0) { @@ -562,9 +562,9 @@ void vbus_init(void) BUG(); } - avz_shared->dom_desc.u.ME.dc_evtchn = evtchn_from_irq(res); + avz_shared->dom_desc.u.S3C.dc_evtchn = evtchn_from_irq(res); DBG("%s: local event channel bound to directcomm towards non-RT Agency : %d\n", __func__, - avz_shared->dom_desc.u.ME.dc_evtchn); + avz_shared->dom_desc.u.S3C.dc_evtchn); DBG("vbus_init OK!\n"); } diff --git a/so3/soo/kernel/vbus/vbus_frontend.c b/so3/soo/kernel/vbus/vbus_frontend.c index 8696d7f93e..c1507b8586 100644 --- a/so3/soo/kernel/vbus/vbus_frontend.c +++ b/so3/soo/kernel/vbus/vbus_frontend.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016-2018 Daniel Rossier + * Copyright (C) 2016-2026 Daniel Rossier * Copyright (C) 2016-2018 Baptiste Delporte * * This program is free software; you can redistribute it and/or modify @@ -28,7 +28,7 @@ #include #include #include -#include +#include #include #include @@ -164,7 +164,7 @@ static int remove_dev_watches(struct vbus_device *vdev, void *data) /* Process entry "device//.. */ sscanf(vdev->nodename, "device/%d/%s", &domID, item); - sprintf(vdev->nodename, "device/%d/%s", ME_domID(), item); + sprintf(vdev->nodename, "device/%d/%s", S3C_domID(), item); /* * It may happen that the related watches have been already removed during a visit on a smart @@ -179,7 +179,7 @@ static int remove_dev_watches(struct vbus_device *vdev, void *data) /* * Rename the device name stored in the bus so that we avoid to re-probe a same device (possibly - * in a different ME slot. + * in a different capsule slot. */ /* Process entry "backend///.. */ @@ -192,7 +192,7 @@ static int remove_dev_watches(struct vbus_device *vdev, void *data) ptr_item++; sscanf(ptr_item, "%d/%s", &domID, item); - sprintf(ptr_item, "%d/%s", ME_domID(), item); + sprintf(ptr_item, "%d/%s", S3C_domID(), item); DBG("%s: removing watches for %s\n", __func__, vdev->nodename); @@ -214,16 +214,16 @@ void postmig_setup(void) DBG0("Waiting for vbstore dev to be populated\n"); - sprintf(root_name, "%s/%d", initial_rootname, ME_domID()); - DBG("vbus_frontend: %s ... for domID: %d\n", root_name, ME_domID()); + sprintf(root_name, "%s/%d", initial_rootname, S3C_domID()); + DBG("vbus_frontend: %s ... for domID: %d\n", root_name, S3C_domID()); DBG0("Re-adjusting watches....\n"); /* Walk through all devices and readjust watches */ frontend_for_each(NULL, remove_dev_watches); - /* Write the entries related to the ME ID in vbstore */ - vbstore_ME_ID_populate(); + /* Write the entries related to the capsule ID in vbstore */ + vbstore_S3C_ID_populate(); /* Re-create the vbstore entries for devices */ @@ -269,7 +269,7 @@ void vbus_probe_frontend_init(void) /* Re-adjust the root node name with the dom ID */ - sprintf(root_name, "%s/%d", vbus_frontend.root, ME_domID()); + sprintf(root_name, "%s/%d", vbus_frontend.root, S3C_domID()); vbus_frontend.root = root_name; diff --git a/so3/soo/kernel/vbus/vbus_vbstore.c b/so3/soo/kernel/vbus/vbus_vbstore.c index d205487401..3ceb81f24a 100644 --- a/so3/soo/kernel/vbus/vbus_vbstore.c +++ b/so3/soo/kernel/vbus/vbus_vbstore.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016-2018 Daniel Rossier + * Copyright (C) 2016-2026 Daniel Rossier * Copyright (C) 2016-2018 Baptiste Delporte * * This program is free software; you can redistribute it and/or modify @@ -66,7 +66,7 @@ struct vbs_handle { struct completion watch_wait; - /* To manage ongoing transactions when the ME must be suspended */ + /* To manage ongoing transactions when the capsule must be suspended */ struct mutex transaction_group_mutex; /* Protect watch (de)register against save/restore. */ @@ -236,7 +236,7 @@ static void *vbs_talkv(struct vbus_transaction t, vbus_msg_type_t type, const ms smp_mb(); - notify_remote_via_evtchn(avz_shared->dom_desc.u.ME.vbstore_levtchn); + notify_remote_via_evtchn(avz_shared->dom_desc.u.S3C.vbstore_levtchn); /* Now we are waiting for the answer from vbstore */ DBG("Now, we wait for the reply / msg ID: %d (0x%lx)\n", msg.id, &msg.list); @@ -882,20 +882,20 @@ void vbus_vbstore_init(void) int vbus_irq; /* - * Bind evtchn for interdomain communication: must be executed from the agency or from a ME. + * Bind evtchn for interdomain communication: must be executed from the agency or from a capsule. */ /* dev temporary used to set up event channel used by vbstore. */ dev.otherend_id = 0; DBG("%s: binding a local event channel to the remote evtchn %d in Agency (intf: %lx) ...\n", __func__, - avz_shared->dom_desc.u.ME.vbstore_revtchn, __intf); + avz_shared->dom_desc.u.S3C.vbstore_revtchn, __intf); - vbus_bind_evtchn(&dev, avz_shared->dom_desc.u.ME.vbstore_revtchn, - (uint32_t *) &avz_shared->dom_desc.u.ME.vbstore_levtchn); + vbus_bind_evtchn(&dev, avz_shared->dom_desc.u.S3C.vbstore_revtchn, + (uint32_t *) &avz_shared->dom_desc.u.S3C.vbstore_levtchn); - DBG("Local vbstore_evtchn is %d (remote is %d)\n", avz_shared->dom_desc.u.ME.vbstore_levtchn, - avz_shared->dom_desc.u.ME.vbstore_revtchn); + DBG("Local vbstore_evtchn is %d (remote is %d)\n", avz_shared->dom_desc.u.S3C.vbstore_levtchn, + avz_shared->dom_desc.u.S3C.vbstore_revtchn); INIT_LIST_HEAD(&vbs_state.reply_list); @@ -911,7 +911,7 @@ void vbus_vbstore_init(void) init_completion(&vbs_state.watch_wait); /* Initialize the shared memory rings to talk to vbstore */ - vbus_irq = bind_evtchn_to_irq_handler(avz_shared->dom_desc.u.ME.vbstore_levtchn, vbus_vbstore_isr, NULL, NULL); + vbus_irq = bind_evtchn_to_irq_handler(avz_shared->dom_desc.u.S3C.vbstore_levtchn, vbus_vbstore_isr, NULL, NULL); if (vbus_irq < 0) { printk("VBus request irq failed %i\n", vbus_irq); BUG(); diff --git a/usr/lib/logs/capsule_log.c b/usr/lib/logs/capsule_log.c index 6463214d22..fa209a628f 100644 --- a/usr/lib/logs/capsule_log.c +++ b/usr/lib/logs/capsule_log.c @@ -25,7 +25,7 @@ /* * Generates logs messages. It does: - * 1. Add '[ME:]' prefix to the message + * 1. Add '[S3C:]' prefix to the message * 2. Send message though vLOGS * 3. The message is added in a file (`/var/log/soo/me_.log) on the * agency (SOO environment) diff --git a/usr/lib/logs/include/capsule_log.h b/usr/lib/logs/include/capsule_log.h index 5cf9583bfb..5bd81f3611 100644 --- a/usr/lib/logs/include/capsule_log.h +++ b/usr/lib/logs/include/capsule_log.h @@ -21,7 +21,7 @@ /* * Generates logs messages. It does: - * 1. Add '[ME:]' prefix to the message + * 1. Add '[S3C:]' prefix to the message * 2. Send message though vLOGS * 3. The message is added in a file (`/var/log/soo/me_.log) on the * agency (SOO environment) From b46d329e87edde14298f24270b016a9d935ef014 Mon Sep 17 00:00:00 2001 From: Daniel Rossier Date: Thu, 11 Jun 2026 08:20:35 +0200 Subject: [PATCH 3/6] Make clang happy --- so3/arch/arm64/cache_v8.c | 3 +- so3/arch/arm64/fault.c | 4 +- so3/arch/arm64/traps.c | 40 ++-- .../arm64/verdin-imx8mp/include/mach/io.h | 30 +-- .../arm64/verdin-imx8mp/include/mach/ipamap.h | 12 +- so3/avz/kernel/agency_build.c | 9 +- so3/avz/kernel/injector.c | 3 +- so3/avz/kernel/smp.c | 2 - so3/avz/kernel/timer.c | 2 +- so3/devices/irq/gic.c | 176 +++++++++++------- so3/devices/irq/vgic.c | 3 +- so3/devices/serial/imx_uart.c | 11 +- so3/include/device/arch/gic.h | 14 +- so3/include/log.h | 15 +- so3/include/percpu.h | 3 +- 15 files changed, 180 insertions(+), 147 deletions(-) diff --git a/so3/arch/arm64/cache_v8.c b/so3/arch/arm64/cache_v8.c index d680d26570..9a316ebe80 100644 --- a/so3/arch/arm64/cache_v8.c +++ b/so3/arch/arm64/cache_v8.c @@ -54,8 +54,7 @@ void mmu_setup(void *pgtable) * (single L1 root table, no concatenation), which covers all iMX8MP physical * addresses. VTTBR_EL2 must therefore point to the L1 table directly. */ - tcr = VTCR_T0SZ_VAL(39) | VTCR_SL0_L1 | VTCR_PS_40BITS | - TCR_IRGN0_WBWA | TCR_ORGN0_WBWA | TCR_SH0_INNER | VTCR_RES1; + tcr = VTCR_T0SZ_VAL(39) | VTCR_SL0_L1 | VTCR_PS_40BITS | TCR_IRGN0_WBWA | TCR_ORGN0_WBWA | TCR_SH0_INNER | VTCR_RES1; asm volatile("msr vtcr_el2, %0" : : "r"(tcr) : "memory"); asm volatile("isb"); diff --git a/so3/arch/arm64/fault.c b/so3/arch/arm64/fault.c index 63a9de82b3..ad967a7342 100644 --- a/so3/arch/arm64/fault.c +++ b/so3/arch/arm64/fault.c @@ -43,7 +43,9 @@ void __sync_serror(addr_t lr) /* Called from pre_ret_to_el1 asm to log secondary CPU state before and after drain */ void pre_ret_to_el1_diag(unsigned long cpu_id, unsigned long entry_point, int phase) { - (void)cpu_id; (void)entry_point; (void)phase; + (void) cpu_id; + (void) entry_point; + (void) phase; } /* SError at EL2 (AVZ running): log and return so the scheduler can continue */ diff --git a/so3/arch/arm64/traps.c b/so3/arch/arm64/traps.c index 36203bf9b7..81b5a49095 100644 --- a/so3/arch/arm64/traps.c +++ b/so3/arch/arm64/traps.c @@ -83,14 +83,13 @@ void trap_handle_error(addr_t lr) unsigned long elr = read_sysreg(elr_el2); unsigned long far = read_sysreg(far_el2); unsigned long hpfar = read_sysreg(hpfar_el2); - printk("CPU%d: ELR: %lx, FAR: %lx, HPFAR: %lx (IPA=0x%lx), LR(x30): %lx\n", - smp_processor_id(), elr, far, hpfar, hpfar << 8, lr); + printk("CPU%d: ELR: %lx, FAR: %lx, HPFAR: %lx (IPA=0x%lx), LR(x30): %lx\n", smp_processor_id(), elr, far, hpfar, + hpfar << 8, lr); #else unsigned long esr = read_sysreg(esr_el1); unsigned long elr = read_sysreg(elr_el1); unsigned long far = read_sysreg(far_el1); - printk("CPU%d: ELR: %lx, FAR: %lx, LR(x30): %lx\n", - smp_processor_id(), elr, far, lr); + printk("CPU%d: ELR: %lx, FAR: %lx, LR(x30): %lx\n", smp_processor_id(), elr, far, lr); #endif show_invalid_entry_message(ESR_ELx_EC(esr), esr, lr); @@ -102,14 +101,14 @@ extern addr_t cpu_entrypoints[4]; /* Called from pre_ret_to_el1 assembly before entering the WFI poll loop */ void pre_ret_debug_wfi(u32 cpu_id) { - (void)cpu_id; + (void) cpu_id; } /* Called from pre_ret_to_el1 assembly when entrypoint becomes non-zero */ void pre_ret_debug_woke(u32 cpu_id, u64 ep) { - (void)cpu_id; - (void)ep; + (void) cpu_id; + (void) ep; } #endif @@ -138,7 +137,7 @@ void pre_ret_debug_woke(u32 cpu_id, u64 ep) void avz_el2_irq_handle(cpu_regs_t *regs) { u64 intid = read_sysreg_s(SYS_ICC_IAR1_EL1); - u32 id = (u32)(intid & 0x3ff); + u32 id = (u32) (intid & 0x3ff); /* Spurious — no EOI required */ if (id >= 1020) @@ -150,9 +149,8 @@ void avz_el2_irq_handle(cpu_regs_t *regs) * every IRQ entry — the write is idempotent and per-CPU. */ { int cpu_id = smp_processor_id(); - u8 *gicr_sgi = (u8 *)gic->gicc + cpu_id * 0x20000 + 0x10000; - iowrite32(gicr_sgi + 0x100, - (1u << IRQ_ARCH_ARM_MAINT) | (1u << CNTHP_PPI_INTID)); + u8 *gicr_sgi = (u8 *) gic->gicc + cpu_id * 0x20000 + 0x10000; + iowrite32(gicr_sgi + 0x100, (1u << IRQ_ARCH_ARM_MAINT) | (1u << CNTHP_PPI_INTID)); } if (id == CNTHP_PPI_INTID) { @@ -174,7 +172,7 @@ void avz_el2_irq_handle(cpu_regs_t *regs) write_sysreg_s(intid, SYS_ICC_EOIR1_EL1); write_sysreg_s(intid, SYS_ICC_DIR_EL1); isb(); - gic_set_pending((u16)id); + gic_set_pending((u16) id); } else { /* PPIs (16–31, except 25/26) and SPIs (32+) destined for Linux. * Drop priority at EL2 so further physical IRQs can be taken; @@ -182,7 +180,7 @@ void avz_el2_irq_handle(cpu_regs_t *regs) * writes ICV_EOIR1_EL1 — DO NOT call DIR here, otherwise * level-triggered IRQs storm before Linux clears the device's * level source. */ - gic_set_pending((u16)id); + gic_set_pending((u16) id); write_sysreg_s(intid, SYS_ICC_EOIR1_EL1); isb(); } @@ -296,7 +294,7 @@ void trap_handle(cpu_regs_t *regs) /* GICv3: targeted SGI via ICC_SGI1R_EL1 system register. * ICC_SGI1R_EL1: [3:0]=SGI_ID, [23:16]=Aff1 target list (bit per Aff0). */ { - u64 sgi1r = ((u64)(1U << target_cpu) << 16) | IPI_EVENT_CHECK; + u64 sgi1r = ((u64) (1U << target_cpu) << 16) | IPI_EVENT_CHECK; write_sysreg_s(sgi1r, SYS_ICC_SGI1R_EL1); isb(); } @@ -307,8 +305,7 @@ void trap_handle(cpu_regs_t *regs) * Earlier code used (1u << 24) which is mode 01b * (all-but-self) and ignores the TargetList — broadcasting * IPI_EVENT_CHECK to every other CPU during PSCI_CPU_ON. */ - iowrite32(&gic->gicd->sgir, - ((1u << target_cpu) << 16) | IPI_EVENT_CHECK); + iowrite32(&gic->gicd->sgir, ((1u << target_cpu) << 16) | IPI_EVENT_CHECK); dsb(ish); #endif @@ -346,8 +343,7 @@ void trap_handle(cpu_regs_t *regs) break; #endif /* CONFIG_SOO */ default: - lprintk("[AVZ] HVC caught from EL1: x0=0x%lx ELR_EL2=0x%lx\n", - hvc_code, read_sysreg(elr_el2)); + lprintk("[AVZ] HVC caught from EL1: x0=0x%lx ELR_EL2=0x%lx\n", hvc_code, read_sysreg(elr_el2)); regs->x0 = PSCI_RET_NOT_SUPPORTED; break; } @@ -399,21 +395,21 @@ void trap_handle(cpu_regs_t *regs) * ICC_SGI1R_EL1 writes, which the GICv3 spec mandates trap to EL2 * when HCR_EL2.IMO=1 so the hypervisor can route the IPI. */ u64 elr = read_sysreg(elr_el2); - u32 iss = (u32)(esr & 0x1ffffff); + u32 iss = (u32) (esr & 0x1ffffff); u32 dir = iss & 1; u32 crm = (iss >> 1) & 0xf; - u32 rt = (iss >> 5) & 0x1f; + u32 rt = (iss >> 5) & 0x1f; u32 crn = (iss >> 10) & 0xf; u32 op1 = (iss >> 14) & 0x7; u32 op2 = (iss >> 17) & 0x7; u32 op0 = (iss >> 20) & 0x3; if (!dir && op0 == 3 && op1 == 0 && crn == 12 && crm == 11 && op2 == 5) { - u64 sgi_val = (rt != 31) ? ((u64 *)regs)[rt] : 0; + u64 sgi_val = (rt != 31) ? ((u64 *) regs)[rt] : 0; write_sysreg_s(sgi_val, SYS_ICC_SGI1R_EL1); isb(); } else if (dir && rt != 31) { - ((u64 *)regs)[rt] = 0; + ((u64 *) regs)[rt] = 0; } regs->pc = elr + 4; diff --git a/so3/arch/arm64/verdin-imx8mp/include/mach/io.h b/so3/arch/arm64/verdin-imx8mp/include/mach/io.h index c79bd33dcf..8027c5f1dd 100644 --- a/so3/arch/arm64/verdin-imx8mp/include/mach/io.h +++ b/so3/arch/arm64/verdin-imx8mp/include/mach/io.h @@ -24,26 +24,26 @@ * Base address: 0x30880000 (UART3, used as debug console). */ -#define IMX_UART_URXD 0x00 /* Receiver register */ -#define IMX_UART_UTXD 0x40 /* Transmitter register */ -#define IMX_UART_UCR1 0x80 /* Control register 1 */ -#define IMX_UART_UCR2 0x84 /* Control register 2 */ -#define IMX_UART_UCR3 0x88 /* Control register 3 */ -#define IMX_UART_UCR4 0x8c /* Control register 4 */ -#define IMX_UART_UFCR 0x90 /* FIFO control register */ -#define IMX_UART_USR1 0x94 /* Status register 1 */ -#define IMX_UART_USR2 0x98 /* Status register 2 */ +#define IMX_UART_URXD 0x00 /* Receiver register */ +#define IMX_UART_UTXD 0x40 /* Transmitter register */ +#define IMX_UART_UCR1 0x80 /* Control register 1 */ +#define IMX_UART_UCR2 0x84 /* Control register 2 */ +#define IMX_UART_UCR3 0x88 /* Control register 3 */ +#define IMX_UART_UCR4 0x8c /* Control register 4 */ +#define IMX_UART_UFCR 0x90 /* FIFO control register */ +#define IMX_UART_USR1 0x94 /* Status register 1 */ +#define IMX_UART_USR2 0x98 /* Status register 2 */ /* USR2 bits */ -#define IMX_UART_USR2_TXFE (1 << 14) /* TX FIFO empty */ -#define IMX_UART_USR2_TXDC (1 << 3) /* Transmitter complete */ +#define IMX_UART_USR2_TXFE (1 << 14) /* TX FIFO empty */ +#define IMX_UART_USR2_TXDC (1 << 3) /* Transmitter complete */ /* UCR1 bits */ -#define IMX_UART_UCR1_UARTEN (1 << 0) /* UART enable */ +#define IMX_UART_UCR1_UARTEN (1 << 0) /* UART enable */ /* UCR2 bits */ -#define IMX_UART_UCR2_TXEN (1 << 2) /* Transmitter enable */ -#define IMX_UART_UCR2_RXEN (1 << 1) /* Receiver enable */ -#define IMX_UART_UCR2_SRST (1 << 0) /* SW reset (active low) */ +#define IMX_UART_UCR2_TXEN (1 << 2) /* Transmitter enable */ +#define IMX_UART_UCR2_RXEN (1 << 1) /* Receiver enable */ +#define IMX_UART_UCR2_SRST (1 << 0) /* SW reset (active low) */ #endif /* MACH_IO_H */ diff --git a/so3/arch/arm64/verdin-imx8mp/include/mach/ipamap.h b/so3/arch/arm64/verdin-imx8mp/include/mach/ipamap.h index 8d4d7b3ed5..a2b06ebcd3 100644 --- a/so3/arch/arm64/verdin-imx8mp/include/mach/ipamap.h +++ b/so3/arch/arm64/verdin-imx8mp/include/mach/ipamap.h @@ -36,16 +36,16 @@ ipamap_t agency_ipamap[] = { { /* AIPS1/2/3 peripherals below the GIC distributor */ - .ipa_addr = 0x30000000, + .ipa_addr = 0x30000000, .phys_addr = 0x30000000, - .size = 0x08800000, /* 0x30000000 – 0x387FFFFF */ + .size = 0x08800000, /* 0x30000000 – 0x387FFFFF */ }, /* GICD @ 0x38800000 size 0x10000 intentionally omitted */ { /* GICR, CPU interface compat, and all peripherals above GICD */ - .ipa_addr = 0x38810000, + .ipa_addr = 0x38810000, .phys_addr = 0x38810000, - .size = 0x077F0000, /* 0x38810000 – 0x3FFFFFFF */ + .size = 0x077F0000, /* 0x38810000 – 0x3FFFFFFF */ }, }; @@ -58,9 +58,9 @@ ipamap_t agency_ipamap[] = { ipamap_t S3C_ipamap[] = { { /* GICv3 CPU interface compatibility register frame */ - .ipa_addr = 0x38C20000, + .ipa_addr = 0x38C20000, .phys_addr = 0x38C20000, - .size = 0x10000, + .size = 0x10000, }, }; diff --git a/so3/avz/kernel/agency_build.c b/so3/avz/kernel/agency_build.c index 54646f7a71..cf9953db1c 100644 --- a/so3/avz/kernel/agency_build.c +++ b/so3/avz/kernel/agency_build.c @@ -69,8 +69,7 @@ int construct_agency(struct domain *d) printk("Agency FDT device tree: 0x%lx (phys)\n", d->avz_shared->fdt_paddr); printk("Shared AVZ page is located at: %p\n", d->avz_shared); - printk("Agency entry IPA: 0x%lx FDT IPA: 0x%lx\n", - pa_to_ipa(MEMSLOT_AGENCY, memslot[MEMSLOT_AGENCY].entry_addr), + printk("Agency entry IPA: 0x%lx FDT IPA: 0x%lx\n", pa_to_ipa(MEMSLOT_AGENCY, memslot[MEMSLOT_AGENCY].entry_addr), pa_to_ipa(MEMSLOT_AGENCY, d->avz_shared->fdt_paddr)); /* Dump the first 4 instructions at the guest entry point to confirm the kernel is loaded */ @@ -78,11 +77,11 @@ int construct_agency(struct domain *d) u32 *insns = (u32 *) __xva(MEMSLOT_AGENCY, memslot[MEMSLOT_AGENCY].entry_addr); printk("Guest entry (PA 0x%lx, VA 0x%p): [0]=0x%08x [1]=0x%08x [2]=0x%08x [3]=0x%08x\n", - memslot[MEMSLOT_AGENCY].entry_addr, insns, - insns[0], insns[1], insns[2], insns[3]); + memslot[MEMSLOT_AGENCY].entry_addr, insns, insns[0], insns[1], insns[2], insns[3]); } - initialize_hyp_dom_stack(d, pa_to_ipa(MEMSLOT_AGENCY, d->avz_shared->fdt_paddr), pa_to_ipa(MEMSLOT_AGENCY, memslot[MEMSLOT_AGENCY].entry_addr)); + initialize_hyp_dom_stack(d, pa_to_ipa(MEMSLOT_AGENCY, d->avz_shared->fdt_paddr), + pa_to_ipa(MEMSLOT_AGENCY, memslot[MEMSLOT_AGENCY].entry_addr)); return 0; } diff --git a/so3/avz/kernel/injector.c b/so3/avz/kernel/injector.c index 293f472e89..5e6333d707 100644 --- a/so3/avz/kernel/injector.c +++ b/so3/avz/kernel/injector.c @@ -377,7 +377,8 @@ void write_S3C_snapshot(avz_hyp_t *args) agency->avz_shared->dom_desc.u.agency.vbstore_evtchn[slotID]); LOG_DEBUG("%s: Rebinding directcomm event channels: %d (agency) <-> %d (capsule)\n", __func__, - agency->avz_shared->dom_desc.u.agency.dc_evtchn[slotID], dom_S3C->avz_shared->dom_desc.u.S3C.dc_evtchn); + agency->avz_shared->dom_desc.u.agency.dc_evtchn[slotID], + dom_S3C->avz_shared->dom_desc.u.S3C.dc_evtchn); evtchn_bind_existing_interdomain(dom_S3C, agency, dom_S3C->avz_shared->dom_desc.u.S3C.dc_evtchn, agency->avz_shared->dom_desc.u.agency.dc_evtchn[slotID]); diff --git a/so3/avz/kernel/smp.c b/so3/avz/kernel/smp.c index 0ba704ff48..9268cb468b 100644 --- a/so3/avz/kernel/smp.c +++ b/so3/avz/kernel/smp.c @@ -103,7 +103,6 @@ void secondary_start_kernel(void) gicc_init(); - #ifndef CONFIG_SOO __mmu_switch_kernel((void *) domains[DOMID_AGENCY]->pagetable_paddr, true); #endif /* !CONFIG_SOO */ @@ -188,7 +187,6 @@ void cpu_up(unsigned int cpu) while (!booted[cpu]) ; - secondary_data.stack = NULL; secondary_data.pgdir = 0; } diff --git a/so3/avz/kernel/timer.c b/so3/avz/kernel/timer.c index cb22d81d66..dd88648b0c 100644 --- a/so3/avz/kernel/timer.c +++ b/so3/avz/kernel/timer.c @@ -45,7 +45,7 @@ void agency_timer_interrupt(void) unsigned int *count = &this_cpu(agency_tick_count); if (++(*count) >= 5 * CONFIG_HZ) { - *count = 0; + *count = 0; #if 0 /* Debug purpose */ printk("[AVZ] alive on CPU%d\n", smp_processor_id()); diff --git a/so3/devices/irq/gic.c b/so3/devices/irq/gic.c index 2568053b80..f7dc72f3cf 100644 --- a/so3/devices/irq/gic.c +++ b/so3/devices/irq/gic.c @@ -103,46 +103,96 @@ DEFINE_PER_CPU(struct pending_irqs, pending_irqs); static u64 gic_read_lr(unsigned int n) { switch (n) { - case 0: return read_sysreg_s(SYS_ICH_LR0_EL2); - case 1: return read_sysreg_s(SYS_ICH_LR1_EL2); - case 2: return read_sysreg_s(SYS_ICH_LR2_EL2); - case 3: return read_sysreg_s(SYS_ICH_LR3_EL2); - case 4: return read_sysreg_s(SYS_ICH_LR4_EL2); - case 5: return read_sysreg_s(SYS_ICH_LR5_EL2); - case 6: return read_sysreg_s(SYS_ICH_LR6_EL2); - case 7: return read_sysreg_s(SYS_ICH_LR7_EL2); - case 8: return read_sysreg_s(SYS_ICH_LR8_EL2); - case 9: return read_sysreg_s(SYS_ICH_LR9_EL2); - case 10: return read_sysreg_s(SYS_ICH_LR10_EL2); - case 11: return read_sysreg_s(SYS_ICH_LR11_EL2); - case 12: return read_sysreg_s(SYS_ICH_LR12_EL2); - case 13: return read_sysreg_s(SYS_ICH_LR13_EL2); - case 14: return read_sysreg_s(SYS_ICH_LR14_EL2); - case 15: return read_sysreg_s(SYS_ICH_LR15_EL2); - default: return 0; + case 0: + return read_sysreg_s(SYS_ICH_LR0_EL2); + case 1: + return read_sysreg_s(SYS_ICH_LR1_EL2); + case 2: + return read_sysreg_s(SYS_ICH_LR2_EL2); + case 3: + return read_sysreg_s(SYS_ICH_LR3_EL2); + case 4: + return read_sysreg_s(SYS_ICH_LR4_EL2); + case 5: + return read_sysreg_s(SYS_ICH_LR5_EL2); + case 6: + return read_sysreg_s(SYS_ICH_LR6_EL2); + case 7: + return read_sysreg_s(SYS_ICH_LR7_EL2); + case 8: + return read_sysreg_s(SYS_ICH_LR8_EL2); + case 9: + return read_sysreg_s(SYS_ICH_LR9_EL2); + case 10: + return read_sysreg_s(SYS_ICH_LR10_EL2); + case 11: + return read_sysreg_s(SYS_ICH_LR11_EL2); + case 12: + return read_sysreg_s(SYS_ICH_LR12_EL2); + case 13: + return read_sysreg_s(SYS_ICH_LR13_EL2); + case 14: + return read_sysreg_s(SYS_ICH_LR14_EL2); + case 15: + return read_sysreg_s(SYS_ICH_LR15_EL2); + default: + return 0; } } void gic_write_lr(unsigned int n, u64 value) { switch (n) { - case 0: write_sysreg_s(value, SYS_ICH_LR0_EL2); break; - case 1: write_sysreg_s(value, SYS_ICH_LR1_EL2); break; - case 2: write_sysreg_s(value, SYS_ICH_LR2_EL2); break; - case 3: write_sysreg_s(value, SYS_ICH_LR3_EL2); break; - case 4: write_sysreg_s(value, SYS_ICH_LR4_EL2); break; - case 5: write_sysreg_s(value, SYS_ICH_LR5_EL2); break; - case 6: write_sysreg_s(value, SYS_ICH_LR6_EL2); break; - case 7: write_sysreg_s(value, SYS_ICH_LR7_EL2); break; - case 8: write_sysreg_s(value, SYS_ICH_LR8_EL2); break; - case 9: write_sysreg_s(value, SYS_ICH_LR9_EL2); break; - case 10: write_sysreg_s(value, SYS_ICH_LR10_EL2); break; - case 11: write_sysreg_s(value, SYS_ICH_LR11_EL2); break; - case 12: write_sysreg_s(value, SYS_ICH_LR12_EL2); break; - case 13: write_sysreg_s(value, SYS_ICH_LR13_EL2); break; - case 14: write_sysreg_s(value, SYS_ICH_LR14_EL2); break; - case 15: write_sysreg_s(value, SYS_ICH_LR15_EL2); break; - default: break; + case 0: + write_sysreg_s(value, SYS_ICH_LR0_EL2); + break; + case 1: + write_sysreg_s(value, SYS_ICH_LR1_EL2); + break; + case 2: + write_sysreg_s(value, SYS_ICH_LR2_EL2); + break; + case 3: + write_sysreg_s(value, SYS_ICH_LR3_EL2); + break; + case 4: + write_sysreg_s(value, SYS_ICH_LR4_EL2); + break; + case 5: + write_sysreg_s(value, SYS_ICH_LR5_EL2); + break; + case 6: + write_sysreg_s(value, SYS_ICH_LR6_EL2); + break; + case 7: + write_sysreg_s(value, SYS_ICH_LR7_EL2); + break; + case 8: + write_sysreg_s(value, SYS_ICH_LR8_EL2); + break; + case 9: + write_sysreg_s(value, SYS_ICH_LR9_EL2); + break; + case 10: + write_sysreg_s(value, SYS_ICH_LR10_EL2); + break; + case 11: + write_sysreg_s(value, SYS_ICH_LR11_EL2); + break; + case 12: + write_sysreg_s(value, SYS_ICH_LR12_EL2); + break; + case 13: + write_sysreg_s(value, SYS_ICH_LR13_EL2); + break; + case 14: + write_sysreg_s(value, SYS_ICH_LR14_EL2); + break; + case 15: + write_sysreg_s(value, SYS_ICH_LR15_EL2); + break; + default: + break; } } #else /* GICv2: list registers are GICH MMIO */ @@ -162,13 +212,8 @@ void display_lr(unsigned int n) #ifdef CONFIG_GIC_V3 u64 lr = gic_read_lr(n); - printk("LR%u: virq=%lx state=%lx hw=%lx grp=%lx prio=%lx pirq=%lx\n", n, - lr & 0xfffff, - (lr >> 61) & 0x3, - (lr >> 60) & 0x1, - (lr >> 59) & 0x1, - (lr >> 48) & 0xff, - (lr >> 32) & 0xffff); + printk("LR%u: virq=%lx state=%lx hw=%lx grp=%lx prio=%lx pirq=%lx\n", n, lr & 0xfffff, (lr >> 61) & 0x3, + (lr >> 60) & 0x1, (lr >> 59) & 0x1, (lr >> 48) & 0xff, (lr >> 32) & 0xffff); #else u32 lr = gic_read_lr(n); @@ -320,8 +365,8 @@ static void gic_enable_maint_irq(bool enable) * gic_set_pending() while still letting the GICv2 vGIC LR carry the real * source CPU instead of smp_processor_id() of the receiving CPU. */ #define GIC_SGI_SRC_CPU_SHIFT 13 -#define GIC_SGI_SRC_CPU_MASK (0x7 << GIC_SGI_SRC_CPU_SHIFT) -#define GIC_SGI_PACK(intid, src_cpu) ((u16)((intid) | (((src_cpu) & 0x7) << GIC_SGI_SRC_CPU_SHIFT))) +#define GIC_SGI_SRC_CPU_MASK (0x7 << GIC_SGI_SRC_CPU_SHIFT) +#define GIC_SGI_PACK(intid, src_cpu) ((u16) ((intid) | (((src_cpu) & 0x7) << GIC_SGI_SRC_CPU_SHIFT))) static int gic_inject_irq(u16 irq_id_packed) { @@ -351,18 +396,16 @@ static int gic_inject_irq(u16 irq_id_packed) if (is_sgi(irq_id)) { /* SGIs are software-backed: EL2 already wrote EOIR before injection */ - lr64 = GICH_LR_STATE_PENDING64 | GICH_LR_GRP1_BIT64 - | ((u64)GICH_LR_DEFAULT_PRIORITY << GICH_LR_PRIORITY_SHIFT64) - | (u64)irq_id; + lr64 = GICH_LR_STATE_PENDING64 | GICH_LR_GRP1_BIT64 | + ((u64) GICH_LR_DEFAULT_PRIORITY << GICH_LR_PRIORITY_SHIFT64) | (u64) irq_id; } else { /* PPIs and SPIs: hardware-backed (HW=1). EL2 does NOT write EOIR. * The physical INTID stays Active, preventing level-triggered re-delivery * storms. The vGIC hardware deactivates the physical INTID automatically * when Linux writes ICV_EOIR1_EL1. pINTID = vINTID (1:1 pass-through). */ - lr64 = GICH_LR_STATE_PENDING64 | GICH_LR_GRP1_BIT64 | GICH_LR_HW_BIT64 - | ((u64)GICH_LR_DEFAULT_PRIORITY << GICH_LR_PRIORITY_SHIFT64) - | ((u64)irq_id << GICH_LR_PHYS_ID_SHIFT64) - | (u64)irq_id; + lr64 = GICH_LR_STATE_PENDING64 | GICH_LR_GRP1_BIT64 | GICH_LR_HW_BIT64 | + ((u64) GICH_LR_DEFAULT_PRIORITY << GICH_LR_PRIORITY_SHIFT64) | + ((u64) irq_id << GICH_LR_PHYS_ID_SHIFT64) | (u64) irq_id; } u64 hcr = read_sysreg_s(SYS_ICH_HCR_EL2); @@ -474,7 +517,6 @@ void gic_set_pending(u16 irq_id) gic_enable_maint_irq(true); } - void gic_clear_pending_irqs(void) { unsigned int n; @@ -506,7 +548,7 @@ void gich_init(void) /* Read physical CPU interface state via GICv3 system registers. */ gicc_ctlr = (u32) read_sysreg(icc_ctlr_el1); - gicc_pmr = (u32) read_sysreg(icc_pmr_el1); + gicc_pmr = (u32) read_sysreg(icc_pmr_el1); /* Reset virtual machine control register. */ write_sysreg_s(0UL, SYS_ICH_VMCR_EL2); @@ -572,14 +614,14 @@ void gich_secondary_init(void) pirqs->head = 0; pirqs->tail = 0; - vmcr = (u64)0xf0 << 24; + vmcr = (u64) 0xf0 << 24; vmcr |= GICH_VMCR_ENABLE_GRP0_MASK | GICH_VMCR_ENABLE_GRP1_MASK; /* VEOIM=0: see comment in gich_init(). */ - (void)gicc_ctlr; + (void) gicc_ctlr; write_sysreg_s(vmcr, SYS_ICH_VMCR_EL2); isb(); - write_sysreg_s((u64)GICH_HCR_EN, SYS_ICH_HCR_EL2); + write_sysreg_s((u64) GICH_HCR_EN, SYS_ICH_HCR_EL2); isb(); } @@ -590,7 +632,7 @@ void gich_secondary_init(void) void gic_clear_ppi_pending(u16 id) { int cpu_id = smp_processor_id(); - u8 *gicr_sgi = (u8 *)gic->gicc + cpu_id * 0x20000 + 0x10000; + u8 *gicr_sgi = (u8 *) gic->gicc + cpu_id * 0x20000 + 0x10000; iowrite32(gicr_sgi + 0x280, 1u << id); /* GICR_ICPENDR0 */ dsb(sy); @@ -684,7 +726,7 @@ void gich_secondary_init(void) { struct pending_irqs *pirqs = &this_cpu(pending_irqs); u32 gicc_ctlr = ioread32(&gic->gicc->ctlr); - u32 gicc_pmr = ioread32(&gic->gicc->pmr); + u32 gicc_pmr = ioread32(&gic->gicc->pmr); u32 vmcr; /* Enable banked SGIs/PPIs on this CPU (mirrors gic_init's CPU0 setup). */ @@ -701,7 +743,7 @@ void gich_secondary_init(void) vmcr |= GICH_VMCR_EOI_MODE_MASK; iowrite32(&gic->gich->vmcr, vmcr); - iowrite32(&gic->gich->hcr, GICH_HCR_EN); + iowrite32(&gic->gich->hcr, GICH_HCR_EN); } #endif /* CONFIG_GIC_V3 */ @@ -720,7 +762,7 @@ void gicc_init(void) { int i; int cpu_id = smp_processor_id(); - u8 *gicr_rd = (u8 *)gic->gicc + cpu_id * 0x20000; + u8 *gicr_rd = (u8 *) gic->gicc + cpu_id * 0x20000; u8 *gicr_sgi = gicr_rd + 0x10000; u32 waker; @@ -745,9 +787,7 @@ void gicc_init(void) * is registered, which would leave the LR Active forever. */ iowrite32(gicr_sgi + 0x280, GICD_INT_EN_CLR_PPI); /* GICR_ISENABLER0 (0x100): enable SGIs + maintenance IRQ (PPI 25) + CNTHP (PPI 26) */ - iowrite32(gicr_sgi + 0x100, GICD_INT_EN_SET_SGI - | (1u << IRQ_ARCH_ARM_MAINT) - | (1u << 26u)); + iowrite32(gicr_sgi + 0x100, GICD_INT_EN_SET_SGI | (1u << IRQ_ARCH_ARM_MAINT) | (1u << 26u)); /* GICR_IPRIORITYR[0..7] (0x400): priority 0 for all SGIs/PPIs */ for (i = 0; i < 32; i += 4) iowrite32(gicr_sgi + 0x400 + i, 0); @@ -790,12 +830,11 @@ void gicc_init(void) * single EOIR write both drops priority and deactivates. Setting * EOImode=1 here would leave every IRQ Active forever (the EL1 * handler never writes DIR), blocking all subsequent interrupts. */ - iowrite32(&gic->gicc->ctlr, - bypass | GICC_ENABLE | GIC_CPU_EOI + iowrite32(&gic->gicc->ctlr, bypass | GICC_ENABLE | GIC_CPU_EOI #ifdef CONFIG_AVZ - | GICC_CTLR_EOImode + | GICC_CTLR_EOImode #endif - ); + ); } #endif /* CONFIG_GIC_V3 */ @@ -862,8 +901,7 @@ static void gic_handle(void *data) * of pending vIRQs (queued on -EEXIST/-EBUSY) never fires — * causing RCU stalls when back-to-back SGIs arrive. Idempotent. * GICD_ISENABLER0 is banked per-CPU on GICv2 for INTIDs 0-31. */ - iowrite32(&gic->gicd->isenabler, - (1u << IRQ_ARCH_ARM_MAINT) | (1u << 26)); + iowrite32(&gic->gicd->isenabler, (1u << IRQ_ARCH_ARM_MAINT) | (1u << 26)); #endif do { @@ -947,7 +985,7 @@ void smp_cross_call(long cpu_mask, unsigned int irq) { /* GICv3: GICD_SGIR is RAZ/WI when ARE=1; use ICC_SGI1R_EL1 instead. * Format: [3:0]=INTID, [23:16]=Aff1 target list (one bit per CPU in cluster). */ - u64 sgi1r = ((u64)(cpu_mask & 0xffff) << 16) | (irq & 0xf); + u64 sgi1r = ((u64) (cpu_mask & 0xffff) << 16) | (irq & 0xf); write_sysreg_s(sgi1r, SYS_ICC_SGI1R_EL1); isb(); } diff --git a/so3/devices/irq/vgic.c b/so3/devices/irq/vgic.c index 2752a2f694..1aef79d4f4 100644 --- a/so3/devices/irq/vgic.c +++ b/so3/devices/irq/vgic.c @@ -75,8 +75,7 @@ static enum mmio_result gicv2_handle_dist_access(struct mmio_access *mmio) switch (mmio->address) { case GICD_SGIR: if (mmio->is_write) - smp_cross_call((mmio->value >> 16) & 0xff, - mmio->value & 0xf); + smp_cross_call((mmio->value >> 16) & 0xff, mmio->value & 0xf); return MMIO_HANDLED; default: diff --git a/so3/devices/serial/imx_uart.c b/so3/devices/serial/imx_uart.c index b5cc9db5ee..22b022c512 100644 --- a/so3/devices/serial/imx_uart.c +++ b/so3/devices/serial/imx_uart.c @@ -79,7 +79,7 @@ static char imx_uart_get_byte(bool polling) while (!(ioread32(imx_uart.base + IMX_UART_USR2) & (1 << 0))) ; - return (char)(ioread32(imx_uart.base + IMX_UART_URXD) & 0xFF); + return (char) (ioread32(imx_uart.base + IMX_UART_URXD) & 0xFF); } else { while (prod == cons) { schedule(); @@ -102,10 +102,10 @@ static irq_return_t imx_uart_int(int irq, void *dummy) u32 val; val = ioread32(imx_uart.base + IMX_UART_URXD); - if (!(val & (1 << 15))) /* CHARRDY bit */ + if (!(val & (1 << 15))) /* CHARRDY bit */ return IRQ_COMPLETED; - serial_buffer[prod] = (char)(val & 0xFF); + serial_buffer[prod] = (char) (val & 0xFF); if (serial_buffer[prod] == 3) { imx_uart_put_byte('^'); @@ -143,7 +143,7 @@ static int imx_uart_init(dev_t *dev, int fdt_offset) serial_ops.put_byte = imx_uart_put_byte; serial_ops.get_byte = imx_uart_get_byte; - serial_ops.enable_irq = imx_uart_enable_irq; + serial_ops.enable_irq = imx_uart_enable_irq; serial_ops.disable_irq = imx_uart_disable_irq; prop = fdt_get_property(__fdt_addr, fdt_offset, "reg", &prop_len); @@ -151,8 +151,7 @@ static int imx_uart_init(dev_t *dev, int fdt_offset) BUG_ON(prop_len != 2 * sizeof(unsigned long)); - new_base_vaddr = - io_map(fdt64_to_cpu(((const fdt64_t *) prop->data)[0]), PAGE_SIZE); + new_base_vaddr = io_map(fdt64_to_cpu(((const fdt64_t *) prop->data)[0]), PAGE_SIZE); BUG_ON(!new_base_vaddr); imx_uart.base = new_base_vaddr; diff --git a/so3/include/device/arch/gic.h b/so3/include/device/arch/gic.h index f16a8342b9..ca646b68c5 100644 --- a/so3/include/device/arch/gic.h +++ b/so3/include/device/arch/gic.h @@ -280,13 +280,13 @@ struct __attribute__((packed)) gich_regs { * [41:32] pINTID (when HW=1) * [31:0] vINTID */ -#define GICH_LR_STATE_PENDING64 (1ULL << 62) /* State[63:62]=01 */ -#define GICH_LR_STATE_ACTIVE64 (1ULL << 63) /* State[63:62]=10 */ -#define GICH_LR_HW_BIT64 (1ULL << 61) -#define GICH_LR_GRP1_BIT64 (1ULL << 60) -#define GICH_LR_PRIORITY_SHIFT64 48 -#define GICH_LR_PHYS_ID_SHIFT64 32 -#define GICH_LR_DEFAULT_PRIORITY 0xa0 +#define GICH_LR_STATE_PENDING64 (1ULL << 62) /* State[63:62]=01 */ +#define GICH_LR_STATE_ACTIVE64 (1ULL << 63) /* State[63:62]=10 */ +#define GICH_LR_HW_BIT64 (1ULL << 61) +#define GICH_LR_GRP1_BIT64 (1ULL << 60) +#define GICH_LR_PRIORITY_SHIFT64 48 +#define GICH_LR_PHYS_ID_SHIFT64 32 +#define GICH_LR_DEFAULT_PRIORITY 0xa0 #define GIC_SGI_UNKNOWN 0 #define GIC_SGI_EVENT 1 diff --git a/so3/include/log.h b/so3/include/log.h index fafa5e7e2f..82d89d25f1 100644 --- a/so3/include/log.h +++ b/so3/include/log.h @@ -45,13 +45,14 @@ #elif defined(CONFIG_VLOGS_FRONTEND) -#define LOG(level, fmt, ...) \ - do { \ - if (vlogs_ready()) \ - vlogs_write("[S3C:%d][" #level "] <%s:%d> " fmt, get_S3C_desc()->slotID, __func__, __LINE__, \ - ##__VA_ARGS__); \ - else \ - lprintk("[S3C:%d][" #level "] <%s:%d> " fmt, get_S3C_desc()->slotID, __func__, __LINE__, ##__VA_ARGS__); \ +#define LOG(level, fmt, ...) \ + do { \ + if (vlogs_ready()) \ + vlogs_write("[S3C:%d][" #level "] <%s:%d> " fmt, get_S3C_desc()->slotID, __func__, __LINE__, \ + ##__VA_ARGS__); \ + else \ + lprintk("[S3C:%d][" #level "] <%s:%d> " fmt, get_S3C_desc()->slotID, __func__, __LINE__, \ + ##__VA_ARGS__); \ } while (0) #else diff --git a/so3/include/percpu.h b/so3/include/percpu.h index 9a76cb67e0..1b4bce3d75 100644 --- a/so3/include/percpu.h +++ b/so3/include/percpu.h @@ -44,7 +44,8 @@ extern unsigned long __per_cpu_offset[CONFIG_NR_CPUS]; * * Also fixed: the `suffix` arg now actually affects the section name, * so DEFINE_PER_CPU_READ_MOSTLY properly lands in .percpu_data.read_mostly. */ -#define __DEFINE_PER_CPU(type, name, suffix) __attribute__((__section__(".percpu_data" #suffix))) __typeof__(type) per_cpu_##name +#define __DEFINE_PER_CPU(type, name, suffix) \ + __attribute__((__section__(".percpu_data" #suffix))) __typeof__(type) per_cpu_##name #define DECLARE_PER_CPU(type, name) extern __typeof__(type) per_cpu__##name From 18617835c7d5cc3713b8a2962597bb9bfe68d1aa Mon Sep 17 00:00:00 2001 From: Daniel Rossier Date: Thu, 11 Jun 2026 17:53:17 +0200 Subject: [PATCH 4/6] Fix various regression --- so3/arch/arm64/asm-offsets.c | 5 +++++ so3/arch/arm64/domain.c | 4 ++++ so3/arch/arm64/exception.S | 27 +++++++++++++++++++++++++- so3/arch/arm64/include/asm/processor.h | 4 ---- so3/arch/arm64/thread.c | 1 + so3/devices/mem.c | 2 +- 6 files changed, 37 insertions(+), 6 deletions(-) diff --git a/so3/arch/arm64/asm-offsets.c b/so3/arch/arm64/asm-offsets.c index 7eee77e697..0ff10b146a 100644 --- a/so3/arch/arm64/asm-offsets.c +++ b/so3/arch/arm64/asm-offsets.c @@ -86,6 +86,11 @@ int main(void) DEFINE(OFFSET_PC, offsetof(struct cpu_regs, pc)); DEFINE(OFFSET_PSTATE, offsetof(struct cpu_regs, pstate)); DEFINE(OFFSET_TLS_USR, offsetof(struct cpu_regs, tls_usr)); +#ifdef CONFIG_AVZ + DEFINE(OFFSET_ELR_EL1, offsetof(struct cpu_regs, elr_el1)); + DEFINE(OFFSET_SPSR_EL1, offsetof(struct cpu_regs, spsr_el1)); +#endif + DEFINE(S_FRAME_SIZE, sizeof(struct cpu_regs)); BLANK(); diff --git a/so3/arch/arm64/domain.c b/so3/arch/arm64/domain.c index 562997ec2e..c6fba13953 100644 --- a/so3/arch/arm64/domain.c +++ b/so3/arch/arm64/domain.c @@ -28,6 +28,10 @@ #include +#ifdef CONFIG_SOO +#include +#endif + /** * @brief Initialize the content of the EL2 stack associated to this domain. * diff --git a/so3/arch/arm64/exception.S b/so3/arch/arm64/exception.S index 9bc3c9312c..b5679c32a8 100644 --- a/so3/arch/arm64/exception.S +++ b/so3/arch/arm64/exception.S @@ -387,7 +387,7 @@ ENTRY(pre_ret_to_el1) #endif /* CONFIG_CPU_PSCI */ -// Enter macro to jump into EL1 from EL0 *or* from EL1 +// Enter macro to jump into EL2 from EL0 or from EL1 .macro prepare_to_enter_to_el2 mrs x0, elr_el2 str x0, [sp, #OFFSET_PC] @@ -397,6 +397,19 @@ ENTRY(pre_ret_to_el1) mrs x0, spsr_el2 str x0, [sp, #OFFSET_PSTATE] + + // Save EL0 register. Use OFFSET_SP as it is not used on the stack frame. + mrs x0, sp_el0 + str x0, [sp, #OFFSET_SP] + mrs x0, tpidr_el0 + str x0, [sp, #OFFSET_TLS_USR] + + // Save EL1 exception register as they may not yet be saved. + mrs x0, spsr_el1 + str x0, [sp, #OFFSET_SPSR_EL1] + mrs x0, elr_el1 + str x0, [sp, #OFFSET_ELR_EL1] + .endm @@ -411,6 +424,18 @@ ENTRY(pre_ret_to_el1) ldr x0, [sp, #OFFSET_PSTATE] msr spsr_el2, x0 + + // Restore EL0 register + ldr x0, [sp, #OFFSET_SP] + msr sp_el0, x0 + ldr x0, [sp, #OFFSET_TLS_USR] + msr tpidr_el0, x0 + + // Restore EL1 exception register as they may not yet be saved. + ldr x0, [sp, #OFFSET_SPSR_EL1] + msr spsr_el1, x0 + ldr x0, [sp, #OFFSET_ELR_EL1] + msr elr_el1, x0 .endm .align 5 diff --git a/so3/arch/arm64/include/asm/processor.h b/so3/arch/arm64/include/asm/processor.h index 6cf91c7d16..5b1968a52e 100644 --- a/so3/arch/arm64/include/asm/processor.h +++ b/so3/arch/arm64/include/asm/processor.h @@ -881,10 +881,6 @@ /* Safe value for MPIDR_EL1: Bit31:RES1, Bit30:U:0, Bit24:MT:0 */ #define SYS_MPIDR_SAFE_VAL (BIT(31)) -/* The stack must be 16-byte aligned */ - -#define S_FRAME_SIZE (8 * 36) - #ifdef __ASSEMBLY__ .macro current_cpu reg diff --git a/so3/arch/arm64/thread.c b/so3/arch/arm64/thread.c index 9ad64bae3a..ca4730ea35 100644 --- a/so3/arch/arm64/thread.c +++ b/so3/arch/arm64/thread.c @@ -18,6 +18,7 @@ #include #include +#include /** * Set the CPU registers with thread related information diff --git a/so3/devices/mem.c b/so3/devices/mem.c index 716c4214e5..cc03dd0e0b 100644 --- a/so3/devices/mem.c +++ b/so3/devices/mem.c @@ -72,7 +72,7 @@ static int mem_mmap(int fd, addr_t virt_addr, uint32_t page_count, off_t offset) if (remaining_size > 0) create_mapping(pcb->pgtable, next_virt_addr, next_phys_addr, remaining_size, true); - return virt_addr; + return 0; } static struct file_operations mem_fops = { From 812bae5cdcef3c977afa0a87218625002c037580 Mon Sep 17 00:00:00 2001 From: Daniel Rossier Date: Thu, 11 Jun 2026 17:54:37 +0200 Subject: [PATCH 5/6] Increase version --- so3/include/version.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/so3/include/version.h b/so3/include/version.h index 747b822075..272ecd95ec 100644 --- a/so3/include/version.h +++ b/so3/include/version.h @@ -27,6 +27,6 @@ * - Upgrade U-boot to 2022.04 */ -#define SO3_KERNEL_VERSION "6.1.0" +#define SO3_KERNEL_VERSION "6.2.0" #endif /* VERSION_H */ From fd5b14bcaa798220c6abee0b6ec5eefaf046044c Mon Sep 17 00:00:00 2001 From: Daniel Rossier Date: Thu, 11 Jun 2026 18:02:51 +0200 Subject: [PATCH 6/6] Fix wrong doc for net --- doc/source/img/gen_so3_diagrams.py | 2 +- doc/source/img/so3.drawio | 2 +- doc/source/img/so3_architecture.png | Bin 104918 -> 105972 bytes doc/source/kernel.rst | 12 ++++++------ doc/source/lwip.rst | 23 +++++++++++++++-------- 5 files changed, 23 insertions(+), 16 deletions(-) diff --git a/doc/source/img/gen_so3_diagrams.py b/doc/source/img/gen_so3_diagrams.py index 03656bc003..370a024abb 100644 --- a/doc/source/img/gen_so3_diagrams.py +++ b/doc/source/img/gen_so3_diagrams.py @@ -136,7 +136,7 @@ def xml(self): x = 70 + i*188 p.box(x, 310, 175, 80, f"{t}\n\n{d}", KERNEL, 10) p.box(70, 410, 940, 80, "Device model & drivers (devices/)\n" - "FDT probe · GIC (irq) · timer · pl011 serial · mmc · framebuffer · input · virtio-net · ramdev", + "FDT probe · GIC (irq) · timer · pl011 serial · mmc · framebuffer · input · net (smc911x) · ramdev", KERNEL, 10) p.box(40, 540, 1000, 60, "Hardware — described by a Device Tree (dts/*.dtb)", HW, 12) pages.append(p) diff --git a/doc/source/img/so3.drawio b/doc/source/img/so3.drawio index d4aad28a5c..8e417eba83 100644 --- a/doc/source/img/so3.drawio +++ b/doc/source/img/so3.drawio @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/doc/source/img/so3_architecture.png b/doc/source/img/so3_architecture.png index 443a8ad32b260c2b8b9e7f1e8419023bcdb5cf75..02a031cf878f0343399fd410e666a3679f8d2ef9 100644 GIT binary patch delta 33042 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