28 int get_psci_conduit_val()
const
30 if (p_psci_conduit.get_value() ==
"disabled") {
32 }
else if (p_psci_conduit.get_value() ==
"smc") {
34 }
else if (p_psci_conduit.get_value() ==
"hvc") {
43 cci::cci_param<bool> p_start_powered_off;
44 cci::cci_param<uint64_t> p_rvbar;
45 cci::cci_param<uint64_t> p_cntfrq_hz;
46 cci::cci_param<bool> p_has_el2;
47 cci::cci_param<std::string> p_psci_conduit;
65 , p_has_el2(
"has_el2",
true,
"ARM virtualization extensions")
66 , p_rvbar(
"rvbar", 0
ull,
"Reset vector base address register value")
67 , p_cntfrq_hz(
"cntfrq_hz", 0
ull,
"CPU Generic Timer CNTFRQ in Hz")
68 , p_start_powered_off(
"start_powered_off",
false,
69 "Start and reset the CPU "
70 "in powered-off state")
71 , p_psci_conduit(
"psci_conduit",
"disabled",
72 "Set the QEMU PSCI conduit: "
73 "disabled->no conduit, "
74 "hvc->through hvc call, "
75 "smc->through smc call")
80 , irq_timer_phys_out(
"irq_timer_phys_out")
81 , irq_timer_virt_out(
"irq_timer_virt_out")
82 , irq_timer_hyp_out(
"irq_timer_hyp_out")
83 , irq_timer_sec_out(
"irq_timer_sec_out")
87 void before_end_of_elaboration()
override
89 QemuCpuArm::before_end_of_elaboration();
93 cpu.set_prop_bool(
"start-powered-off", p_start_powered_off);
94 cpu.set_prop_int(
"rvbar", p_rvbar);
95 cpu.set_prop_int(
"psci-conduit", get_psci_conduit_val());
96 if (!p_cntfrq_hz.is_default_value()) {
97 cpu.set_prop_int(
"cntfrq", p_cntfrq_hz);
101 void end_of_elaboration()
override
103 QemuCpuArm::end_of_elaboration();
105 irq_in.
init(m_dev, 0);
106 fiq_in.
init(m_dev, 1);
107 virq_in.
init(m_dev, 2);
108 vfiq_in.
init(m_dev, 3);
110 irq_timer_phys_out.
init(m_dev, 0);
111 irq_timer_virt_out.
init(m_dev, 1);
112 irq_timer_hyp_out.
init(m_dev, 2);
113 irq_timer_sec_out.
init(m_dev, 3);
void init(qemu::Device dev, int gpio_idx)
Initialize this socket with a device and a GPIO index.
Definition qemu-initiator-signal-socket.h:137
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