mirror of
https://github.com/genodelabs/genode.git
synced 2025-02-20 09:46:20 +00:00
sel4: remove x86_32/pc and imx7-sabre
The imx7 is not supported officially [0] anymore and the 32bit pc version is not used nor intended to be used. https://github.com/seL4/seL4/issues/254 Issue #4910
This commit is contained in:
parent
22bee79534
commit
7351aa1670
@ -1,5 +0,0 @@
|
||||
PLAT := imx7
|
||||
CPU := cortex-a7
|
||||
override BOARD := imx7d_sabre
|
||||
|
||||
-include $(REP_DIR)/lib/mk/spec/arm/kernel-sel4.inc
|
@ -1,8 +0,0 @@
|
||||
PLAT := imx7
|
||||
ARCH := arm
|
||||
|
||||
SEL4_ARCH := aarch32
|
||||
PLAT_BOARD := /imx7d_sabre
|
||||
SEL4_WORDBITS := 32
|
||||
|
||||
include $(REP_DIR)/lib/mk/syscall-sel4.inc
|
@ -1,21 +0,0 @@
|
||||
GEN_SRC_CC = \
|
||||
spec/x86/io_port_session_component.cc \
|
||||
vm_session_common.cc
|
||||
|
||||
REP_SRC_CC = \
|
||||
spec/x86/io_port_session_support.cc \
|
||||
spec/x86/irq.cc \
|
||||
spec/x86/platform_services.cc \
|
||||
spec/x86/platform_thread.cc \
|
||||
spec/x86/vm_space.cc \
|
||||
spec/x86/vm_session_component.cc \
|
||||
spec/x86_32/boot_info.cc \
|
||||
spec/x86_32/platform.cc \
|
||||
spec/x86_32/platform_pd.cc \
|
||||
spec/x86_32/thread.cc \
|
||||
spec/x86_32/vm_space.cc
|
||||
|
||||
INC_DIR += $(REP_DIR)/src/core/spec/x86_32
|
||||
INC_DIR += $(REP_DIR)/src/core/spec/x86
|
||||
|
||||
include $(REP_DIR)/lib/mk/core-sel4.inc
|
@ -1,19 +0,0 @@
|
||||
SEL4_DIR := $(call select_from_ports,sel4)/src/kernel/sel4
|
||||
|
||||
#
|
||||
# Execute the kernel build only at the second build stage when we know
|
||||
# about the complete build settings (e.g., the 'CROSS_DEV_PREFIX') and the
|
||||
# current working directory is the library location.
|
||||
#
|
||||
ifeq ($(called_from_lib_mk),yes)
|
||||
all: build_kernel
|
||||
else
|
||||
all:
|
||||
endif
|
||||
|
||||
build_kernel:
|
||||
$(VERBOSE)$(MAKE) \
|
||||
TOOLPREFIX=$(CROSS_DEV_PREFIX) \
|
||||
BOARD=ia32 ARCH=x86 SEL4_ARCH=ia32 PLAT=pc99 DEBUG=1 \
|
||||
SOURCE_ROOT=$(SEL4_DIR) -f$(SEL4_DIR)/Makefile
|
||||
|
@ -1,3 +0,0 @@
|
||||
BASE_LIBS += base-sel4-common base-sel4
|
||||
|
||||
include $(BASE_DIR)/lib/mk/spec/x86_32/ld-platform.inc
|
@ -1,10 +0,0 @@
|
||||
#
|
||||
# Make the includes of src/base/include/ available to the startup lib. This is
|
||||
# needed because the seL4-specific src/platform/_main_parent_cap.h as included
|
||||
# by the startup lib depends on base/internal/capability_space_sel4.h.
|
||||
#
|
||||
INC_DIR += $(REP_DIR)/src/include $(BASE_DIR)/src/include
|
||||
|
||||
LIBS += syscall-sel4
|
||||
|
||||
include $(BASE_DIR)/lib/mk/spec/x86_32/startup.inc
|
@ -1,10 +0,0 @@
|
||||
PLAT := pc99
|
||||
ARCH := x86
|
||||
|
||||
SEL4_ARCH := ia32
|
||||
PLAT_BOARD := /$(SEL4_ARCH)
|
||||
SEL4_WORDBITS := 32
|
||||
|
||||
ARCH_INCLUDES := exIPC.h vmenter.h
|
||||
|
||||
include $(REP_DIR)/lib/mk/syscall-sel4.inc
|
@ -1,4 +0,0 @@
|
||||
# \deprecated
|
||||
|
||||
SPECS += x86_32
|
||||
include $(call select_from_repositories,mk/spec/x86_32.mk)
|
@ -1,7 +0,0 @@
|
||||
This archive contains the seL4-specific part of Genode.
|
||||
|
||||
It also contains the source code of the seL4 kernel in the
|
||||
'src/kernel/sel4' directory.
|
||||
|
||||
Please note that seL4 has a license distinct from Genode. seL4's
|
||||
license can be found at 'src/kernel/sel4/LICENSE_GPLv2.txt'.
|
@ -1,41 +0,0 @@
|
||||
include $(GENODE_DIR)/repos/base/recipes/src/base_content.inc
|
||||
|
||||
content: include/os/attached_mmio.h
|
||||
|
||||
include/%.h:
|
||||
mkdir -p $(dir $@)
|
||||
cp $(GENODE_DIR)/repos/os/$@ $@
|
||||
|
||||
content: README
|
||||
README:
|
||||
cp $(REP_DIR)/recipes/src/base-sel4-imx7d_sabre/README $@
|
||||
|
||||
content: lib/import etc include/sel4
|
||||
lib/import etc include/sel4:
|
||||
$(mirror_from_rep_dir)
|
||||
|
||||
content: src/tool/sel4_tools
|
||||
src/kernel:
|
||||
$(mirror_from_rep_dir)
|
||||
|
||||
KERNEL_PORT_DIR := $(call port_dir,$(REP_DIR)/ports/sel4)
|
||||
|
||||
src/kernel/sel4: src/kernel
|
||||
cp -r $(KERNEL_PORT_DIR)/src/kernel/sel4/* $@
|
||||
|
||||
ELFLOADER_PORT_DIR := $(call port_dir,$(REP_DIR)/ports/sel4_tools)
|
||||
src/tool/sel4_tools: src/kernel/sel4
|
||||
mkdir -p $@
|
||||
cp -r $(ELFLOADER_PORT_DIR)/src/tool/sel4_tools/* $@
|
||||
|
||||
content: etc/board.conf
|
||||
|
||||
etc/board.conf:
|
||||
echo "BOARD = imx7d_sabre" > etc/board.conf
|
||||
|
||||
content:
|
||||
mv lib/mk/spec/arm/ld-sel4.mk lib/mk/spec/arm/ld.mk;
|
||||
sed -i "s/imx7_timer_drv/timer/" src/timer/gpt/imx7/target.inc
|
||||
find lib/mk/spec -name kernel-sel4-*.mk -o -name syscall-sel4-*.mk |\
|
||||
grep -v "sel4-imx7d_sabre.mk" | xargs rm -rf
|
||||
|
@ -1 +0,0 @@
|
||||
2023-04-25 2ea2eeff7d241d57aee30e6a4178198d1ddedc1a
|
@ -1 +0,0 @@
|
||||
base
|
@ -1,54 +0,0 @@
|
||||
/*
|
||||
* \brief Utilities for creating seL4 kernel objects
|
||||
* \author Norman Feske
|
||||
* \date 2015-05-08
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (C) 2015-2017 Genode Labs GmbH
|
||||
*
|
||||
* This file is part of the Genode OS framework, which is distributed
|
||||
* under the terms of the GNU Affero General Public License version 3.
|
||||
*/
|
||||
|
||||
#ifndef _CORE__X86_32_ARCH_KERNEL_OBJECT_H_
|
||||
#define _CORE__X86_32_ARCH_KERNEL_OBJECT_H_
|
||||
|
||||
#include <sel4/objecttype.h>
|
||||
#include <platform.h>
|
||||
|
||||
namespace Core {
|
||||
|
||||
Phys_allocator &phys_alloc_16k(Allocator * core_mem_alloc = nullptr);
|
||||
|
||||
enum {
|
||||
PAGE_TABLE_LOG2_SIZE = 22 /* 4M region */
|
||||
};
|
||||
|
||||
struct Page_table_kobj
|
||||
{
|
||||
enum { SEL4_TYPE = seL4_X86_PageTableObject, SIZE_LOG2 = 12 };
|
||||
static char const *name() { return "page table"; }
|
||||
};
|
||||
|
||||
|
||||
struct Page_directory_kobj
|
||||
{
|
||||
enum { SEL4_TYPE = seL4_X86_PageDirectoryObject, SIZE_LOG2 = 12 };
|
||||
static char const *name() { return "page directory"; }
|
||||
};
|
||||
|
||||
struct Vcpu_kobj
|
||||
{
|
||||
enum { SEL4_TYPE = seL4_X86_VCPUObject, SIZE_LOG2 = 14 };
|
||||
static char const *name() { return "vcpu"; }
|
||||
};
|
||||
|
||||
struct Ept_kobj
|
||||
{
|
||||
enum { SEL4_TYPE = seL4_X86_EPTPML4Object, SIZE_LOG = 12 };
|
||||
static char const *name() { return "ept pml4"; }
|
||||
};
|
||||
};
|
||||
|
||||
#endif /* _CORE__X86_32_ARCH_KERNEL_OBJECT_H_ */
|
@ -1,33 +0,0 @@
|
||||
/*
|
||||
* \brief Access to seL4 boot info
|
||||
* \author Norman Feske
|
||||
* \date 2015-05-04
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (C) 2015-2017 Genode Labs GmbH
|
||||
*
|
||||
* This file is part of the Genode OS framework, which is distributed
|
||||
* under the terms of the GNU Affero General Public License version 3.
|
||||
*/
|
||||
|
||||
/* Genode includes */
|
||||
#include <base/stdint.h>
|
||||
|
||||
/* core includes */
|
||||
#include <sel4_boot_info.h>
|
||||
|
||||
using namespace Core;
|
||||
|
||||
|
||||
/* provided by the assembly startup code */
|
||||
extern addr_t __initial_bx;
|
||||
|
||||
|
||||
/**
|
||||
* Obtain seL4 boot info structure
|
||||
*/
|
||||
seL4_BootInfo const &Core::sel4_boot_info()
|
||||
{
|
||||
return *(seL4_BootInfo const *)__initial_bx;
|
||||
}
|
@ -1,94 +0,0 @@
|
||||
/*
|
||||
* \brief Platform interface implementation - x86_32 specific
|
||||
* \author Norman Feske
|
||||
* \date 2015-05-01
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (C) 2015-2017 Genode Labs GmbH
|
||||
*
|
||||
* This file is part of the Genode OS framework, which is distributed
|
||||
* under the terms of the GNU Affero General Public License version 3.
|
||||
*/
|
||||
|
||||
/* base includes */
|
||||
#include <base/internal/crt0.h>
|
||||
|
||||
/* core includes */
|
||||
#include <boot_modules.h>
|
||||
#include <platform.h>
|
||||
|
||||
#include <thread_sel4.h>
|
||||
#include "arch_kernel_object.h"
|
||||
|
||||
using namespace Core;
|
||||
|
||||
|
||||
seL4_Word Untyped_memory::smallest_page_type() { return seL4_X86_4K; }
|
||||
|
||||
|
||||
void Platform::init_sel4_ipc_buffer()
|
||||
{
|
||||
asm volatile ("movl %0, %%fs" :: "r"(IPCBUF_GDT_SELECTOR) : "memory");
|
||||
}
|
||||
|
||||
|
||||
long Platform::_unmap_page_frame(Cap_sel const &sel) {
|
||||
return seL4_X86_Page_Unmap(sel.value()); }
|
||||
|
||||
|
||||
void Platform::_init_core_page_table_registry()
|
||||
{
|
||||
seL4_BootInfo const &bi = sel4_boot_info();
|
||||
|
||||
addr_t virt_addr = (addr_t)(&_prog_img_beg);
|
||||
unsigned sel = bi.userImagePaging.start;
|
||||
|
||||
/* we don't know the physical location of some objects XXX */
|
||||
enum { XXX_PHYS_UNKNOWN = ~0UL };
|
||||
|
||||
/*
|
||||
* Register initial page tables
|
||||
*/
|
||||
for (; sel < bi.userImagePaging.end; sel++) {
|
||||
_core_page_table_registry.insert_page_table(virt_addr, Cap_sel(sel),
|
||||
XXX_PHYS_UNKNOWN,
|
||||
PAGE_TABLE_LOG2_SIZE);
|
||||
virt_addr += 1024 * get_page_size();
|
||||
}
|
||||
|
||||
/* initialize 16k memory allocator */
|
||||
phys_alloc_16k(&core_mem_alloc());
|
||||
|
||||
/* reserve some memory for VCPUs - must be 16k */
|
||||
enum { MAX_VCPU_COUNT = 16 };
|
||||
addr_t const max_pd_mem = MAX_VCPU_COUNT * (1UL << Vcpu_kobj::SIZE_LOG2);
|
||||
|
||||
_initial_untyped_pool.turn_into_untyped_object(Core_cspace::TOP_CNODE_UNTYPED_16K,
|
||||
[&] (addr_t const phys, addr_t const size, bool) {
|
||||
phys_alloc_16k().add_range(phys, size);
|
||||
_unused_phys_alloc.remove_range(phys, size);
|
||||
},
|
||||
Vcpu_kobj::SIZE_LOG2, max_pd_mem);
|
||||
|
||||
log(":phys_mem_16k: ", phys_alloc_16k());
|
||||
/*
|
||||
* Register initial page frames
|
||||
* - actually we don't use them in core -> skip
|
||||
*/
|
||||
#if 0
|
||||
addr_t const modules_start = reinterpret_cast<addr_t>(&_boot_modules_binaries_begin);
|
||||
addr_t const modules_end = reinterpret_cast<addr_t>(&_boot_modules_binaries_end);
|
||||
|
||||
virt_addr = (addr_t)(&_prog_img_beg);
|
||||
for (unsigned sel = bi.userImageFrames.start;
|
||||
sel < bi.userImageFrames.end;
|
||||
sel++, virt_addr += get_page_size()) {
|
||||
/* skip boot modules */
|
||||
if (modules_start <= virt_addr && virt_addr <= modules_end)
|
||||
continue;
|
||||
|
||||
_core_page_table_registry.insert_page_table_entry(virt_addr, sel);
|
||||
}
|
||||
#endif
|
||||
}
|
@ -1,52 +0,0 @@
|
||||
/*
|
||||
* \brief Protection-domain facility
|
||||
* \author Norman Feske
|
||||
* \date 2015-05-01
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (C) 2015-2017 Genode Labs GmbH
|
||||
*
|
||||
* This file is part of the Genode OS framework, which is distributed
|
||||
* under the terms of the GNU Affero General Public License version 3.
|
||||
*/
|
||||
|
||||
/* core includes */
|
||||
#include <platform_pd.h>
|
||||
|
||||
#include "arch_kernel_object.h"
|
||||
|
||||
using namespace Core;
|
||||
|
||||
|
||||
addr_t Platform_pd::_init_page_directory() const
|
||||
{
|
||||
addr_t const phys_addr = Untyped_memory::alloc_page(platform().ram_alloc());
|
||||
seL4_Untyped const service = Untyped_memory::untyped_sel(phys_addr).value();
|
||||
|
||||
create<Page_directory_kobj>(service,
|
||||
platform_specific().core_cnode().sel(),
|
||||
_page_directory_sel);
|
||||
|
||||
long ret = seL4_X86_ASIDPool_Assign(platform_specific().asid_pool().value(),
|
||||
_page_directory_sel.value());
|
||||
|
||||
if (ret != seL4_NoError)
|
||||
error("seL4_X86_ASIDPool_Assign returned ", ret);
|
||||
|
||||
return phys_addr;
|
||||
}
|
||||
|
||||
|
||||
void Platform_pd::_deinit_page_directory(addr_t phys_addr) const
|
||||
{
|
||||
int ret = seL4_CNode_Delete(seL4_CapInitThreadCNode,
|
||||
_page_directory_sel.value(), 32);
|
||||
if (ret != seL4_NoError) {
|
||||
error(__FUNCTION__, ": could not free ASID entry, "
|
||||
"leaking physical memory ", ret);
|
||||
return;
|
||||
}
|
||||
|
||||
Untyped_memory::free_page(platform().ram_alloc(), phys_addr);
|
||||
}
|
@ -1,88 +0,0 @@
|
||||
/*
|
||||
* \brief Utilities for thread creation on seL4
|
||||
* \author Norman Feske
|
||||
* \date 2015-05-12
|
||||
*
|
||||
* This file is used by both the core-specific implementation of the Thread API
|
||||
* and the platform-thread implementation for managing threads outside of core.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (C) 2015-2017 Genode Labs GmbH
|
||||
*
|
||||
* This file is part of the Genode OS framework, which is distributed
|
||||
* under the terms of the GNU Affero General Public License version 3.
|
||||
*/
|
||||
|
||||
/* base includes */
|
||||
#include <base/thread_state.h>
|
||||
|
||||
/* core includes */
|
||||
#include <thread_sel4.h>
|
||||
#include <platform_thread.h>
|
||||
|
||||
using namespace Genode;
|
||||
|
||||
|
||||
void Core::start_sel4_thread(Cap_sel tcb_sel, addr_t ip, addr_t sp, unsigned cpu)
|
||||
{
|
||||
/* set register values for the instruction pointer and stack pointer */
|
||||
seL4_UserContext regs;
|
||||
memset(®s, 0, sizeof(regs));
|
||||
size_t const num_regs = sizeof(regs)/sizeof(seL4_Word);
|
||||
|
||||
regs.eip = ip;
|
||||
regs.esp = sp;
|
||||
regs.fs = IPCBUF_GDT_SELECTOR;
|
||||
|
||||
long const ret = seL4_TCB_WriteRegisters(tcb_sel.value(), false, 0,
|
||||
num_regs, ®s);
|
||||
ASSERT(ret == 0);
|
||||
|
||||
affinity_sel4_thread(tcb_sel, cpu);
|
||||
|
||||
seL4_TCB_Resume(tcb_sel.value());
|
||||
}
|
||||
|
||||
|
||||
void Core::affinity_sel4_thread(Cap_sel const &tcb_sel, unsigned cpu)
|
||||
{
|
||||
seL4_TCB_SetAffinity(tcb_sel.value(), cpu);
|
||||
}
|
||||
|
||||
|
||||
Thread_state Core::Platform_thread::state()
|
||||
{
|
||||
seL4_TCB const thread = _info.tcb_sel.value();
|
||||
seL4_Bool const suspend_source = false;
|
||||
seL4_Uint8 const arch_flags = 0;
|
||||
seL4_UserContext registers;
|
||||
seL4_Word const register_count = sizeof(registers) / sizeof(registers.eip);
|
||||
|
||||
long const ret = seL4_TCB_ReadRegisters(thread, suspend_source, arch_flags,
|
||||
register_count, ®isters);
|
||||
if (ret != seL4_NoError) {
|
||||
error("reading thread state ", ret);
|
||||
throw Cpu_thread::State_access_failed();
|
||||
}
|
||||
|
||||
Thread_state state;
|
||||
memset(&state, 0, sizeof(state));
|
||||
|
||||
state.ip = registers.eip;
|
||||
state.sp = registers.esp;
|
||||
state.edi = registers.edi;
|
||||
state.esi = registers.esi;
|
||||
state.ebp = registers.ebp;
|
||||
state.ebx = registers.ebx;
|
||||
state.edx = registers.edx;
|
||||
state.ecx = registers.ecx;
|
||||
state.eax = registers.eax;
|
||||
state.gs = registers.gs;
|
||||
state.fs = registers.fs;
|
||||
state.eflags = registers.eflags;
|
||||
state.trapno = 0; /* XXX detect/track if in exception and report here */
|
||||
/* registers.tls_base unused */
|
||||
|
||||
return state;
|
||||
}
|
@ -1,47 +0,0 @@
|
||||
/*
|
||||
* \brief Virtual-memory space
|
||||
* \author Norman Feske
|
||||
* \date 2015-05-04
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (C) 2015-2017 Genode Labs GmbH
|
||||
*
|
||||
* This file is part of the Genode OS framework, which is distributed
|
||||
* under the terms of the GNU Affero General Public License version 3.
|
||||
*/
|
||||
|
||||
/* core includes */
|
||||
#include <vm_space.h>
|
||||
|
||||
#include "arch_kernel_object.h"
|
||||
|
||||
using namespace Core;
|
||||
|
||||
|
||||
static long map_page_table(Cap_sel const pagetable,
|
||||
Cap_sel const vroot,
|
||||
addr_t const virt)
|
||||
{
|
||||
return seL4_X86_PageTable_Map(pagetable.value(), vroot.value(), virt,
|
||||
seL4_X86_Default_VMAttributes);
|
||||
}
|
||||
|
||||
void Vm_space::unsynchronized_alloc_page_tables(addr_t const start,
|
||||
addr_t const size)
|
||||
{
|
||||
addr_t constexpr PAGE_TABLE_AREA = 1UL << PAGE_TABLE_LOG2_SIZE;
|
||||
addr_t virt = start & ~(PAGE_TABLE_AREA - 1);
|
||||
for (; virt < start + size; virt += PAGE_TABLE_AREA) {
|
||||
|
||||
if (_page_table_registry.page_table_at(virt, PAGE_TABLE_LOG2_SIZE))
|
||||
continue;
|
||||
|
||||
addr_t phys = 0;
|
||||
|
||||
/* 4 MB range - page table */
|
||||
Cap_sel const pt = _alloc_and_map<Page_table_kobj>(virt, map_page_table, phys);
|
||||
_page_table_registry.insert_page_table(virt, pt, phys,
|
||||
PAGE_TABLE_LOG2_SIZE);
|
||||
}
|
||||
}
|
@ -1 +0,0 @@
|
||||
include $(call select_from_repositories,src/timer/gpt/imx7/target.inc)
|
Loading…
x
Reference in New Issue
Block a user