quic/qbox
Loading...
Searching...
No Matches
cortex-m55.h
1/*
2 * This file is part of libqbox
3 * Copyright(c) 2023 Qualcomm Innovation Center, Inc. All Rights Reserved.
4 *
5 * SPDX-License-Identifier: BSD-3-Clause
6 */
7
8#pragma once
9
10#include <string>
11
12#include <libqemu-cxx/target/aarch64.h>
13
14#include <module_factory_registery.h>
15#include <ports/qemu-target-signal-socket.h>
16#include <irq-ctrl/armv7m_nvic/include/armv7m-nvic.h>
17#include <arm.h>
18
20{
21public:
22 static constexpr qemu::Target ARCH = qemu::Target::AARCH64;
23
24 cci::cci_param<bool> p_start_powered_off;
25 nvic_armv7m m_nvic;
26 cci::cci_param<uint64_t> p_init_nsvtor;
27 cci::cci_param<uint64_t> p_init_svtor;
29 cpu_arm_cortexM55(const sc_core::sc_module_name& name, sc_core::sc_object* o)
30 : cpu_arm_cortexM55(name, *(dynamic_cast<QemuInstance*>(o)))
31 {
32 }
33 cpu_arm_cortexM55(sc_core::sc_module_name name, QemuInstance& inst)
34 : QemuCpuArm(name, inst, "cortex-m55-arm")
35 , m_nvic("nvic", inst)
36 , p_start_powered_off("start_powered_off", false,
37 "Start and reset the CPU "
38 "in powered-off state")
39 , p_init_nsvtor("init_nsvtor", 0ull, "Non Secure Reset vector base address")
40 , p_init_svtor("init_svtor", 0ull, "Secure Reset vector base address")
41 , irq_in("irq_in")
42 {
43 m_nvic.irq_out.bind(irq_in);
44 }
45
46 void before_end_of_elaboration() override
47 {
48 QemuCpuArm::before_end_of_elaboration();
49
50 qemu::CpuArm cpu(m_dev);
51
52 cpu.add_nvic_link();
53 cpu.set_prop_bool("start-powered-off", p_start_powered_off);
54 cpu.set_prop_int("init-nsvtor", p_init_nsvtor);
55 cpu.set_prop_int("init-svtor", p_init_svtor);
56
57 /* ensure the nvic is also created */
58 m_nvic.before_end_of_elaboration();
59
60 /* setup cpu&nvic links so that we can realize both objects */
61 qemu::Device nvic = m_nvic.get_qemu_dev();
62 cpu.set_prop_link("nvic", nvic);
63 nvic.set_prop_link("cpu", cpu);
64 }
65
66 void end_of_elaboration() override
67 {
68 QemuCpuArm::end_of_elaboration();
69
70 irq_in.init(m_dev, 0);
71 }
72};
73
74extern "C" void module_register();
Definition arm.h:14
This class encapsulates a libqemu-cxx qemu::LibQemu instance. It handles QEMU parameters and instance...
Definition qemu-instance.h:89
A QEMU input GPIO exposed as a TargetSignalSocket<bool>
Definition qemu-target-signal-socket.h:29
void init(qemu::Device dev, int gpio_idx)
Initialize this socket with a device and a GPIO index.
Definition qemu-target-signal-socket.h:60
Definition target.h:160
Definition cortex-m55.h:20
Definition armv7m-nvic.h:20
Definition aarch64.h:16
Definition libqemu-cxx.h:616