27 cci::cci_param<unsigned int> p_num_sources;
28 cci::cci_param<unsigned int> p_num_priorities;
29 cci::cci_param<uint64_t> p_priority_base;
30 cci::cci_param<uint64_t> p_pending_base;
31 cci::cci_param<uint64_t> p_enable_base;
32 cci::cci_param<uint64_t> p_enable_stride;
33 cci::cci_param<uint64_t> p_context_base;
34 cci::cci_param<uint64_t> p_context_stride;
35 cci::cci_param<uint64_t> p_aperture_size;
36 cci::cci_param<std::string> p_hart_config;
39 sc_core::sc_vector<QemuTargetSignalSocket> irq_in;
41 plic_sifive(
const sc_core::sc_module_name& name, sc_core::sc_object*
o)
47 , p_num_sources(
"num_sources", 0,
"Number of input IRQ lines")
48 , p_num_priorities(
"num_priorities", 0,
"Number of priorities")
49 , p_priority_base(
"priority_base", 0,
"Base address of the priority registers")
50 , p_pending_base(
"pending_base", 0,
"Base address of the pending registers")
51 , p_enable_base(
"enable_base", 0,
"Base address of the enable registers")
52 , p_enable_stride(
"enable_stride", 0,
"Size of the enable regiters")
53 , p_context_base(
"context_base", 0,
"Base address the context registers")
54 , p_context_stride(
"context_stride", 0,
"Size of the context registers")
55 , p_aperture_size(
"aperture_size", 0,
"Size of the whole PLIC address space")
56 , p_hart_config(
"hart_config",
"",
57 "HART configurations (can be U, S, H or M or "
58 "a combination of those, each HART config is "
59 "separarted by a comma) (example: \"MS,MS\" -> "
60 "two HARTs with M and S mode)")
66 void before_end_of_elaboration()
override
68 QemuDevice::before_end_of_elaboration();
70 m_dev.set_prop_str(
"hart-config", p_hart_config.get_value().c_str());
71 m_dev.set_prop_int(
"num-sources", p_num_sources);
72 m_dev.set_prop_int(
"aperture-size", p_aperture_size);
73 m_dev.set_prop_int(
"num-priorities", p_num_priorities);
74 m_dev.set_prop_int(
"priority-base", p_priority_base);
75 m_dev.set_prop_int(
"pending-base", p_pending_base);
76 m_dev.set_prop_int(
"enable-base", p_enable_base);
77 m_dev.set_prop_int(
"enable-stride", p_enable_stride);
78 m_dev.set_prop_int(
"context-base", p_context_base);
79 m_dev.set_prop_int(
"context-stride", p_context_stride);
82 void end_of_elaboration()
override
86 QemuDevice::set_sysbus_as_parent_bus();
87 QemuDevice::end_of_elaboration();
92 for (
i = 0;
i < p_num_sources;
i++) {
93 irq_in[
i].init(m_dev,
i);