mirror of
https://github.com/genodelabs/genode.git
synced 2025-06-17 06:38:28 +00:00
tz_vmm: support USB-Armory board
For the USB-Armory, we use a newer version of Linux (3.18) as for the i.MX53-QSB. The main difference is, that the newer Linux uses a DTB instead of ATAGs. Fixes #1422
This commit is contained in:
committed by
Christian Helmuth
parent
be392b3bf9
commit
9737b5d966
@ -21,7 +21,6 @@
|
||||
|
||||
/* local includes */
|
||||
#include <vm.h>
|
||||
#include <atag.h>
|
||||
#include <m4if.h>
|
||||
|
||||
using namespace Genode;
|
||||
|
9
repos/os/src/server/tz_vmm/imx53/target.inc
Normal file
9
repos/os/src/server/tz_vmm/imx53/target.inc
Normal file
@ -0,0 +1,9 @@
|
||||
TARGET = tz_vmm
|
||||
REQUIRES += trustzone platform_imx53
|
||||
LIBS = base
|
||||
SRC_CC = main.cc
|
||||
INC_DIR += $(PRG_DIR) \
|
||||
$(PRG_DIR)/../include \
|
||||
$(PRG_DIR)/../imx53
|
||||
|
||||
vpath main.cc $(PRG_DIR)/../imx53
|
@ -1,5 +0,0 @@
|
||||
TARGET = tz_vmm
|
||||
REQUIRES = trustzone platform_imx53
|
||||
LIBS = base
|
||||
SRC_CC = main.cc
|
||||
INC_DIR += $(PRG_DIR) $(PRG_DIR)/../include
|
3
repos/os/src/server/tz_vmm/imx53_qsb/target.mk
Normal file
3
repos/os/src/server/tz_vmm/imx53_qsb/target.mk
Normal file
@ -0,0 +1,3 @@
|
||||
REQUIRES = hw_imx53_qsb
|
||||
|
||||
include $(PRG_DIR)/../imx53/target.inc
|
43
repos/os/src/server/tz_vmm/imx53_qsb/vm.h
Normal file
43
repos/os/src/server/tz_vmm/imx53_qsb/vm.h
Normal file
@ -0,0 +1,43 @@
|
||||
/*
|
||||
* \brief Virtual Machine implementation using device trees
|
||||
* \author Stefan Kalkowski
|
||||
* \date 2015-02-27
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (C) 2015 Genode Labs GmbH
|
||||
*
|
||||
* This file is part of the Genode OS framework, which is distributed
|
||||
* under the terms of the GNU General Public License version 2.
|
||||
*/
|
||||
|
||||
#include <vm_base.h>
|
||||
#include <atag.h>
|
||||
|
||||
class Vm : public Vm_base
|
||||
{
|
||||
private:
|
||||
|
||||
enum { ATAG_OFFSET = 0x100 };
|
||||
|
||||
Genode::addr_t _load_board_info()
|
||||
{
|
||||
Atag tag((void*)(_ram.local() + ATAG_OFFSET));
|
||||
tag.setup_mem_tag(_ram.base(), _ram.size());
|
||||
tag.setup_cmdline_tag(_cmdline);
|
||||
tag.setup_initrd2_tag(_ram.base() + INITRD_OFFSET, _initrd_cap.size());
|
||||
if (_board_rev)
|
||||
tag.setup_rev_tag(_board_rev);
|
||||
tag.setup_end_tag();
|
||||
return ATAG_OFFSET;
|
||||
}
|
||||
|
||||
public:
|
||||
|
||||
Vm(const char *kernel, const char *initrd, const char *cmdline,
|
||||
Genode::addr_t ram_base, Genode::size_t ram_size,
|
||||
Genode::addr_t kernel_offset, unsigned long mach_type,
|
||||
unsigned long board_rev = 0)
|
||||
: Vm_base(kernel, initrd, cmdline, ram_base, ram_size,
|
||||
kernel_offset, mach_type, board_rev) {}
|
||||
};
|
@ -23,16 +23,12 @@
|
||||
|
||||
/* local includes */
|
||||
#include <mmu.h>
|
||||
#include <atag.h>
|
||||
|
||||
class Vm {
|
||||
class Vm_base {
|
||||
|
||||
private:
|
||||
protected:
|
||||
|
||||
enum {
|
||||
ATAG_OFFSET = 0x100,
|
||||
INITRD_OFFSET = 0x1000000,
|
||||
};
|
||||
enum { INITRD_OFFSET = 0x1000000, };
|
||||
|
||||
Genode::Vm_connection _vm_con;
|
||||
Genode::Rom_connection _kernel_rom;
|
||||
@ -68,23 +64,14 @@ class Vm {
|
||||
env()->rm_session()->detach((void*)addr);
|
||||
}
|
||||
|
||||
void _prepare_atag()
|
||||
{
|
||||
Atag tag((void*)(_ram.local() + ATAG_OFFSET));
|
||||
tag.setup_mem_tag(_ram.base(), _ram.size());
|
||||
tag.setup_cmdline_tag(_cmdline);
|
||||
tag.setup_initrd2_tag(_ram.base() + INITRD_OFFSET, _initrd_cap.size());
|
||||
if (_board_rev)
|
||||
tag.setup_rev_tag(_board_rev);
|
||||
tag.setup_end_tag();
|
||||
}
|
||||
virtual Genode::addr_t _load_board_info() = 0;
|
||||
|
||||
public:
|
||||
|
||||
Vm(const char *kernel, const char *initrd, const char *cmdline,
|
||||
Genode::addr_t ram_base, Genode::size_t ram_size,
|
||||
Genode::addr_t kernel_offset, unsigned long mach_type,
|
||||
unsigned long board_rev = 0)
|
||||
Vm_base(const char *kernel, const char *initrd, const char *cmdline,
|
||||
Genode::addr_t ram_base, Genode::size_t ram_size,
|
||||
Genode::addr_t kernel_offset, unsigned long mach_type,
|
||||
unsigned long board_rev = 0)
|
||||
: _kernel_rom(kernel),
|
||||
_initrd_rom(initrd),
|
||||
_kernel_cap(_kernel_rom.dataspace()),
|
||||
@ -102,10 +89,10 @@ class Vm {
|
||||
Genode::memset((void*)_state, 0, sizeof(Genode::Vm_state));
|
||||
_load_kernel();
|
||||
_load_initrd();
|
||||
_prepare_atag();
|
||||
_state->cpsr = 0x93; /* SVC mode and IRQs disabled */
|
||||
_state->r0 = 0;
|
||||
_state->r1 = _mach_type;
|
||||
_state->r2 = _ram.base() + ATAG_OFFSET; /* ATAG addr */
|
||||
_state->r2 = _ram.base() + _load_board_info(); /* board info addr */
|
||||
}
|
||||
|
||||
void sig_handler(Genode::Signal_context_capability sig_cap) {
|
3
repos/os/src/server/tz_vmm/usb_armory/target.mk
Normal file
3
repos/os/src/server/tz_vmm/usb_armory/target.mk
Normal file
@ -0,0 +1,3 @@
|
||||
REQUIRES = hw_usb_armory
|
||||
|
||||
include $(PRG_DIR)/../imx53/target.inc
|
44
repos/os/src/server/tz_vmm/usb_armory/vm.h
Normal file
44
repos/os/src/server/tz_vmm/usb_armory/vm.h
Normal file
@ -0,0 +1,44 @@
|
||||
/*
|
||||
* \brief Virtual Machine implementation using device trees
|
||||
* \author Stefan Kalkowski
|
||||
* \date 2015-02-27
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (C) 2015 Genode Labs GmbH
|
||||
*
|
||||
* This file is part of the Genode OS framework, which is distributed
|
||||
* under the terms of the GNU General Public License version 2.
|
||||
*/
|
||||
|
||||
#include <vm_base.h>
|
||||
|
||||
class Vm : public Genode::Rom_connection,
|
||||
public Genode::Dataspace_client,
|
||||
public Vm_base
|
||||
{
|
||||
private:
|
||||
|
||||
enum { DTB_OFFSET = 0x2000000 };
|
||||
|
||||
Genode::addr_t _load_board_info()
|
||||
{
|
||||
using namespace Genode;
|
||||
|
||||
addr_t addr = env()->rm_session()->attach(*this);
|
||||
memcpy((void*)(_ram.local() + DTB_OFFSET), (void*)addr, size());
|
||||
env()->rm_session()->detach((void*)addr);
|
||||
return DTB_OFFSET;
|
||||
}
|
||||
|
||||
public:
|
||||
|
||||
Vm(const char *kernel, const char *initrd, const char *cmdline,
|
||||
Genode::addr_t ram_base, Genode::size_t ram_size,
|
||||
Genode::addr_t kernel_offset, unsigned long mach_type,
|
||||
unsigned long board_rev = 0)
|
||||
: Genode::Rom_connection("dtb"),
|
||||
Genode::Dataspace_client(dataspace()),
|
||||
Vm_base(kernel, initrd, cmdline, ram_base, ram_size,
|
||||
kernel_offset, mach_type, board_rev) {}
|
||||
};
|
Reference in New Issue
Block a user