quic/qbox
Loading...
Searching...
No Matches
remote_cpu.h
1/*
2 * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All Rights Reserved.
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
7/* Quic Module Cortex-M55 */
8#ifndef __REMOTE_CORTEX_M55__
9#define __REMOTE_CORTEX_M55__
10
11#include <systemc>
12#include <tlm>
13#include <cci_configuration>
14#include <libgsutils.h>
15#include <limits>
16#include <cpu_arm/cpu_arm_cortex_m55/include/cortex-m55.h>
17#include <qemu-instance.h>
18#include "gs_memory/include/gs_memory.h"
19#include "router/include/router.h"
20#include "remote.h"
21#include "pass/include/pass.h"
22#include <module_factory_registery.h>
23
24class RemoteCPU : public sc_core::sc_module
25{
26 SCP_LOGGER();
27
28public:
29 RemoteCPU(const sc_core::sc_module_name& n, sc_core::sc_object* obj)
30 : RemoteCPU(n, *(dynamic_cast<QemuInstance*>(obj)))
31 {
32 }
33 RemoteCPU(const sc_core::sc_module_name& n, QemuInstance& qemu_inst)
34 : sc_core::sc_module(n)
35 , m_broker(cci::cci_get_broker())
36 , m_gdb_port("gdb_port", 0, "GDB port")
37 , m_qemu_inst(qemu_inst)
38 , m_router("router")
39 , m_cpu("cpu", m_qemu_inst)
40 {
41 unsigned int m_irq_num = m_broker.get_param_handle(std::string(this->name()) + ".cpu.nvic.num_irq")
42 .get_cci_value()
43 .get_uint();
44
45 if (!m_gdb_port.is_default_value()) m_cpu.p_gdb_port = m_gdb_port;
46
47 SCP_INFO(()) << "number of irqs = " << m_irq_num;
48
49 m_router.initiator_socket.bind(m_cpu.m_nvic.socket);
50 m_cpu.socket.bind(m_router.target_socket);
51 }
52
53private:
54 cci::cci_broker_handle m_broker;
55 cci::cci_param<int> m_gdb_port;
56 QemuInstance& m_qemu_inst;
57 gs::router<> m_router;
59};
60GSC_MODULE_REGISTER(RemoteCPU, sc_core::sc_object*);
61#endif
This class encapsulates a libqemu-cxx qemu::LibQemu instance. It handles QEMU parameters and instance...
Definition qemu-instance.h:89
Definition remote_cpu.h:25
Definition cortex-m55.h:20
Definition router.h:43