#
14295:16025a55b380 |
|
11-Sep-2019 |
Gabe Black <gabeblack@google.com> |
x86: Templatize the IntMasterPort.
This makes the IntMasterPort usable with any class, making it possible to avoid inheriting from IntDevice.
It also makes IntMasterPort inherit directly from QueuedMasterPort, skipping over MessageMasterPort.
Change-Id: I9d218556c838ea567ced5f6fa4d57a3ec9d28d31 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/20821 Maintainer: Gabe Black <gabeblack@google.com> Tested-by: kokoro <noreply+kokoro@google.com> Reviewed-by: Jason Lowe-Power <jason@lowepower.com>
|
#
14294:d86488e6b60b |
|
10-Sep-2019 |
Gabe Black <gabeblack@google.com> |
x86: Templatize IntSlavePort.
This makes the device IntSlavePort calls back into based on a template parameter so that IntDevice doesn't have to be in the inheritance hierarchy to use it.
It also makes IntSlavePort inherit from SimpleTimingPort directly, skipping over MessageSlavePort.
Change-Id: Ic3213edc9c3ed5e506ee1e9f5e082cd47d7c7998 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/20820 Maintainer: Gabe Black <gabeblack@google.com> Tested-by: kokoro <noreply+kokoro@google.com> Reviewed-by: Jason Lowe-Power <jason@lowepower.com>
|
#
14293:e8bb3f77458a |
|
09-Sep-2019 |
Gabe Black <gabeblack@google.com> |
x86: Turn the local APIC into a PioDevice instead of a BasicPioDevice.
This will let us accept several address ranges through our pio port instead of just one, and that will in turn let us accept interrupt requests and pio requests through the same port.
Change-Id: I70b78c8cd0edca7fe58b3d4cd241e41d9e0f2c20 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/20819 Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Maintainer: Jason Lowe-Power <jason@lowepower.com> Tested-by: kokoro <noreply+kokoro@google.com>
|
#
13784:1941dc118243 |
|
07-Mar-2019 |
Gabe Black <gabeblack@google.com> |
arch, cpu, dev, gpu, mem, sim, python: start using getPort.
Replace the getMasterPort, getSlavePort, and getEthPort functions with getPort, and remove extraneous mechanisms that are no longer necessary.
Change-Id: Iab7e3c02d2f3a0cf33e7e824e18c28646b5bc318 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/17040 Reviewed-by: Daniel Carvalho <odanrc@yahoo.com.br> Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Maintainer: Andreas Sandberg <andreas.sandberg@arm.com>
|
#
12124:6edbfe40f4e8 |
|
16-Jun-2017 |
Sean Wilson <spwilson2@wisc.edu> |
mips, x86: Refactor some Event subclasses into lambdas
Change-Id: I09570e569efe55f5502bc201e03456738999e714 Signed-off-by: Sean Wilson <spwilson2@wisc.edu> Reviewed-on: https://gem5-review.googlesource.com/3920 Maintainer: Jason Lowe-Power <jason@lowepower.com> Reviewed-by: Jason Lowe-Power <jason@lowepower.com>
|
#
11175:2324ed5fa9f4 |
|
23-Oct-2015 |
Andreas Hansson <andreas.hansson@arm.com> |
x86: Add missing explicit overrides for X86 devices
Make clang >= 3.5 happy when compiling build/X86/gem5.opt on OSX.
|
#
11168:f98eb2da15a4 |
|
12-Oct-2015 |
Andreas Hansson <andreas.hansson@arm.com> |
misc: Remove redundant compiler-specific defines
This patch moves away from using M5_ATTR_OVERRIDE and the m5::hashmap (and similar) abstractions, as these are no longer needed with gcc 4.7 and clang 3.1 as minimum compiler versions.
|
#
10905:a6ca6831e775 |
|
07-Jul-2015 |
Andreas Sandberg <andreas.sandberg@arm.com> |
sim: Refactor the serialization base class
Objects that are can be serialized are supposed to inherit from the Serializable class. This class is meant to provide a unified API for such objects. However, so far it has mainly been used by SimObjects due to some fundamental design limitations. This changeset redesigns to the serialization interface to make it more generic and hide the underlying checkpoint storage. Specifically:
* Add a set of APIs to serialize into a subsection of the current object. Previously, objects that needed this functionality would use ad-hoc solutions using nameOut() and section name generation. In the new world, an object that implements the interface has the methods serializeSection() and unserializeSection() that serialize into a named /subsection/ of the current object. Calling serialize() serializes an object into the current section.
* Move the name() method from Serializable to SimObject as it is no longer needed for serialization. The fully qualified section name is generated by the main serialization code on the fly as objects serialize sub-objects.
* Add a scoped ScopedCheckpointSection helper class. Some objects need to serialize data structures, that are not deriving from Serializable, into subsections. Previously, this was done using nameOut() and manual section name generation. To simplify this, this changeset introduces a ScopedCheckpointSection() helper class. When this class is instantiated, it adds a new /subsection/ and subsequent serialization calls during the lifetime of this helper class happen inside this section (or a subsection in case of nested sections).
* The serialize() call is now const which prevents accidental state manipulation during serialization. Objects that rely on modifying state can use the serializeOld() call instead. The default implementation simply calls serialize(). Note: The old-style calls need to be explicitly called using the serializeOld()/serializeSectionOld() style APIs. These are used by default when serializing SimObjects.
* Both the input and output checkpoints now use their own named types. This hides underlying checkpoint implementation from objects that need checkpointing and makes it easier to change the underlying checkpoint storage code.
|
#
10541:9f100bac04f1 |
|
17-Nov-2014 |
Gabe Black <gabeblack@google.com> |
x86: APIC: Fix the getRegArrayBit function.
The getRegArrayBit function extracts a bit from a series of registers which are treated as a single large bit array. A previous change had modified the logic which figured out which bit to extract from ">> 5" to "% 5" which seems wrong, especially when other, similar functions were changed to use "% 32".
|
#
10112:1a2f64842044 |
|
16-Mar-2014 |
Andreas Sandberg <andreas@sandberg.pp.se> |
kvm: x86: Add support for x86 INIT and STARTUP handling
This changeset adds support for INIT and STARTUP IPI handling. We currently handle both of these interrupts in gem5 and transfer the state to KVM. Since we do not have a BIOS loaded, we pretend that the INIT interrupt suspends the CPU after reset.
|
#
9874:81c0ae6ffb9e |
|
18-Sep-2013 |
Andreas Sandberg <andreas@sandberg.pp.se> |
x86: Add support for checking the raw state of an interrupt
In order to support hardware virtualization, we need to be able to check if there are any interrupts pending irregardless of the rflags.intf value. This changeset adds the checkInterruptsRaw() method to the x86 interrupt control. It returns true if there are pending interrupts that can be delivered as soon as the CPU is ready for interrupt delivery.
|
#
9807:63d7362bbdf2 |
|
11-Jul-2013 |
Steve Reinhardt <stever@gmail.com> |
dev: consistently end device classes in 'Device'
PciDev and IntDev stuck out as the only device classes that ended in 'Dev' rather than 'Device'. This patch takes care of that inconsistency.
Note that you may need to delete pre-existing files matching build/*/python/m5/internal/param_* as scons does not pick up indirect dependencies on imported python modules when generating params, and the PciDev -> PciDevice rename takes place in a file (dev/Device.py) that gets imported quite a bit.
Committed by: Nilay Vaish <nilay@cs.wisc.edu>
|
#
9805:a4339e26b429 |
|
11-Jul-2013 |
Steve Reinhardt <stever@gmail.com> |
devices: make more classes derive from BasicPioDevice A couple of devices that have single fixed memory mapped regions were not derived from BasicPioDevice, when that's exactly the functionality that BasicPioDevice provides. This patch gets rid of a little bit of redundant code by making those devices actually do so.
Also fixed the weird case of X86ISA::Interrupts, where the class already did derive from BasicPioDevice but didn't actually use all the features it could have.
Committed by: Nilay Vaish <nilay@cs.wisc.edu>
|
#
9554:406fbcf60223 |
|
19-Feb-2013 |
Andreas Hansson <andreas.hansson@arm.com> |
scons: Add warning for missing declarations
This patch enables warnings for missing declarations. To avoid issues with SWIG-generated code, the warning is only applied to non-SWIG code.
|
#
9544:1a075d9bc1bc |
|
19-Feb-2013 |
Andreas Hansson <andreas.hansson@arm.com> |
x86: Move APIC clock divider to Python
This patch moves the 16x APIC clock divider to the Python code to avoid the post-instantiation modifications to the clock. The x86 APIC was the only object setting the clock after creation time and this required some custom functionality and configuration. With this patch, the clock multiplier is moved to the Python code and the objects are instantiated with the appropriate clock.
|
#
9294:8fb03b13de02 |
|
15-Oct-2012 |
Andreas Hansson <andreas.hansson@arm.com> |
Port: Add protocol-agnostic ports in the port hierarchy
This patch adds an additional level of ports in the inheritance hierarchy, separating out the protocol-specific and protocl-agnostic parts. All the functionality related to the binding of ports is now confined to use BaseMaster/BaseSlavePorts, and all the protocol-specific parts stay in the Master/SlavePort. In the future it will be possible to add other protocol-specific implementations.
The functions used in the binding of ports, i.e. getMaster/SlavePort now use the base classes, and the index parameter is updated to use the PortID typedef with the symbolic InvalidPortID as the default.
|
#
9157:e0bad9d7bbd6 |
|
21-Aug-2012 |
Andreas Hansson <andreas.hansson@arm.com> |
Clock: Move the clock and related functions to ClockedObject
This patch moves the clock of the CPU, bus, and numerous devices to the new class ClockedObject, that sits in between the SimObject and MemObject in the class hierarchy. Although there are currently a fair amount of MemObjects that do not make use of the clock, they potentially should do so, e.g. the caches should at some point have the same clock as the CPU, potentially with a 1:n ratio. This patch does not introduce any new clock objects or object hierarchies (clusters, clock domains etc), but is still a step in the direction of having a more structured approach clock domains.
The most contentious part of this patch is the serialisation of clocks that some of the modules (but not all) did previously. This serialisation should not be needed as the clock is set through the parameters even when restoring from the checkpoint. In other words, the state is "stored" in the Python code that creates the modules.
The nextCycle methods are also simplified and the clock phase parameter of the CPU is removed (this could be part of a clock object once they are introduced).
|
#
9090:e4e22240398f |
|
09-Jul-2012 |
Andreas Hansson <andreas.hansson@arm.com> |
Port: Make getAddrRanges const
This patch makes getAddrRanges const throughout the code base. There is no reason why it should not be, and making it const prevents adding any unintentional side-effects.
|
#
8922:17f037ad8918 |
|
30-Mar-2012 |
William Wang <william.wang@arm.com> |
MEM: Introduce the master/slave port sub-classes in C++
This patch introduces the notion of a master and slave port in the C++ code, thus bringing the previous classification from the Python classes into the corresponding simulation objects and memory objects.
The patch enables us to classify behaviours into the two bins and add assumptions and enfore compliance, also simplifying the two interfaces. As a starting point, isSnooping is confined to a master port, and getAddrRanges to slave ports. More of these specilisations are to come in later patches.
The getPort function is not getMasterPort and getSlavePort, and returns a port reference rather than a pointer as NULL would never be a valid return value. The default implementation of these two functions is placed in MemObject, and calls fatal.
The one drawback with this specific patch is that it requires some code duplication, e.g. QueuedPort becomes QueuedMasterPort and QueuedSlavePort, and BusPort becomes BusMasterPort and BusSlavePort (avoiding multiple inheritance). With the later introduction of the port interfaces, moving the functionality outside the port itself, a lot of the duplicated code will disappear again.
|
#
8851:7e966326ef5b |
|
24-Feb-2012 |
Andreas Hansson <andreas.hansson@arm.com> |
MEM: Move port creation to the memory object(s) construction
This patch moves all port creation from the getPort method to be consistently done in the MemObject's constructor. This is possible thanks to the Swig interface passing the length of the vector ports. Previously there was a mix of: 1) creating the ports as members (at object construction time) and using getPort for the name resolution, or 2) dynamically creating the ports in the getPort call. This is now uniform. Furthermore, objects that would not be complete without a port have these ports as members rather than having pointers to dynamically allocated ports.
This patch also enables an elaboration-time enumeration of all the ports in the system which can be used to determine the masterId.
|
#
8839:eeb293859255 |
|
13-Feb-2012 |
Andreas Hansson <andreas.hansson@arm.com> |
MEM: Introduce the master/slave port roles in the Python classes
This patch classifies all ports in Python as either Master or Slave and enforces a binding of master to slave. Conceptually, a master (such as a CPU or DMA port) issues requests, and receives responses, and conversely, a slave (such as a memory or a PIO device) receives requests and sends back responses. Currently there is no differentiation between coherent and non-coherent masters and slaves.
The classification as master/slave also involves splitting the dual role port of the bus into a master and slave port and updating all the system assembly scripts to use the appropriate port. Similarly, the interrupt devices have to have their int_port split into a master and slave port. The intdev and its children have minimal changes to facilitate the extra port.
Note that this patch does not enforce any port typing in the C++ world, it merely ensures that the Python objects have a notion of the port roles and are connected in an appropriate manner. This check is carried when two ports are connected, e.g. bus.master = memory.port. The following patches will make use of the classifications and specialise the C++ ports into masters and slaves.
|
#
8799:dac1e33e07b0 |
|
28-Jan-2012 |
Gabe Black <gblack@eecs.umich.edu> |
Merge with the main repo.
|
#
8768:314eb1e2fa94 |
|
30-Oct-2011 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Get rid of more uses of FULL_SYSTEM.
|
#
8746:42d3554b1c35 |
|
09-Oct-2011 |
Gabe Black <gblack@eecs.umich.edu> |
Interrupts: Make the IO APIC go get the local APICs.
This is so they don't have to declare themselves to the IO APIC and don't have to have a pointer to the platform object.
|
#
8742:9df38d259935 |
|
04-Oct-2011 |
Gabe Black <gblack@eecs.umich.edu> |
SE/FS: Put platform pointers in fewer objects.
Not all objects need a platform pointer, and having one creates a dependence on their being a platform object. This change removes the platform pointer to from the base device object and moves it into subclasses that actually need it.
|
#
8711:c7e14f52c682 |
|
17-Jan-2012 |
Andreas Hansson <andreas.hansson@arm.com> |
MEM: Separate queries for snooping and address ranges
This patch simplifies the address-range determination mechanism and also unifies the naming across ports and devices. It further splits the queries for determining if a port is snooping and what address ranges it responds to (aiming towards a separation of cache-maintenance ports and pure memory-mapped ports). Default behaviours are such that most ports do not have to define isSnooping, and master ports need not implement getAddrRanges.
|
#
8229:78bf55f23338 |
|
15-Apr-2011 |
Nathan Binkert <nate@binkert.org> |
includes: sort all includes
|
#
7902:aafb4a7384d4 |
|
07-Feb-2011 |
Joel Hestness <hestness@cs.utexas.edu> |
x86: Add checkpointing capability to arch components
Add checkpointing capability to the x86 interrupt device and the TLBs
|
#
7629:0f0c231e3e97 |
|
23-Aug-2010 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Create a directory for files that define register indexes.
This is to help tidy up arch/x86. These files should not be used external to the ISA.
|
#
7533:b4aa25440bdd |
|
17-Aug-2010 |
Steve Reinhardt <steve.reinhardt@amd.com> |
x86: minor checkpointing bug fixes
|
#
7087:fb8d5786ff30 |
|
24-May-2010 |
Nathan Binkert <nate@binkert.org> |
copyright: Change HP copyright on x86 code to be more friendly
|
#
6137:d3ee4e0d690c |
|
26-Apr-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make the local APICs register themselves with the IO APIC. This is a hack so that the IO APIC can figure out information about the local APICs. The local APICs still have no way to find out about each other. Ideally, when the local APICs update state that's relevant to somebody else, they'd send an update to everyone. Without being able to do a broadcast, that would still require knowing who else there is to notify. Other broadcasts are implemented using assumptions that may not always be true.
|
#
6136:4f8af2f3185f |
|
26-Apr-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Record the initial APIC ID which identifies an APIC in M5. The ID as exposed to software can be changed. Tracking those changes in M5 would be cumbersome, especially since there's no guarantee the IDs will remain unique.
|
#
6101:860df2c586a3 |
|
19-Apr-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix the functions that manipulate large bit arrays in the local APIC.
|
#
6069:cb5b778785a6 |
|
19-Apr-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement broadcast IPIs.
|
#
6066:a9fe0813039f |
|
19-Apr-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Only recognize the first startup IPI after INIT or reset.
|
#
6064:46d327d42036 |
|
19-Apr-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Add a function which gets called when an interrupt message has been delivered.
|
#
6050:852ba59fa8d9 |
|
19-Apr-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: The startup IPI delivery mode is not reserved.
|
#
6041:949a8304e7f9 |
|
19-Apr-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Set the local APIC ID to something meaningful.
|
#
5810:606de5b3d116 |
|
25-Jan-2009 |
Gabe Black <gblack@eecs.umich.edu> |
CPU: Add a setCPU function to the interrupt objects.
|
#
5704:98224505352a |
|
21-Oct-2008 |
Nathan Binkert <nate@binkert.org> |
style: Use the correct m5 style for things relating to interrupts.
|
#
5691:28d6ff8b94e2 |
|
13-Oct-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make the local APIC timer event generate an interrupt.
|
#
5655:74f76480407f |
|
12-Oct-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make the local APIC process interrupts and send them to the CPU.
|
#
5654:340254de2031 |
|
12-Oct-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make the local APIC handle interrupt messages from the IO APIC.
|
#
5651:7f0c8006c3d7 |
|
12-Oct-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make APICs communicate through the memory system.
|
#
5648:e8abda6e0980 |
|
12-Oct-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make the local APIC accessible through the memory system directly, and make the timer work.
|
#
5647:b06b49498c79 |
|
12-Oct-2008 |
Gabe Black <gblack@eecs.umich.edu> |
Turn Interrupts objects into SimObjects. Also, move local APIC state into x86's Interrupts object.
|
#
5646:0a488a147fb8 |
|
12-Oct-2008 |
Gabe Black <gblack@eecs.umich.edu> |
CPU: Eliminate the get_vec function.
|
#
5134:1cdc6876bc9e |
|
07-Oct-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make the Interrupts class complain less.
|
#
5133:a88763dd4a84 |
|
07-Oct-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Adjust the config scripts for x86 fs.
|
#
5086:e7913ffb379d |
|
24-Sep-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Get X86_FS to compile.
|
#
4120:3e09b5d32c45 |
|
03-Mar-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Add build hooks for x86.
|