#
14056:d8e21ca49871 |
|
17-May-2019 |
Tiago Muck <tiago.muck@arm.com> |
base: AddrRange does not merge single interleaved ranges
AddrRange does not attempt to merge interleaved address ranges if it has only one of the ranges.
This is needed to allow XBars to accept request targeting only one part of a interleaved address range. A use case for this would be modeling distributed LLCs in which a XBar is used solely to encapsulate the snoop filter of a single LLC slice.
Change-Id: If71c9cf1444ee11916611afb51eab3a4f1d93985 Signed-off-by: Tiago Muck <tiago.muck@arm.com> Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/18788 Reviewed-by: Nikos Nikoleris <nikos.nikoleris@arm.com> Maintainer: Jason Lowe-Power <jason@lowepower.com> Tested-by: kokoro <noreply+kokoro@google.com>
|
#
14047:91279ed7ec5e |
|
26-May-2019 |
Nikos Nikoleris <nikos.nikoleris@arm.com> |
base: Extend AddrRange to support more flexible addressing
Previously an AddrRange could express interleaving using a number of consecutive bits and in additional optionally a second number of consecutive bits. The two sets of consecutive bits would be xored and matched against a value to determine if an address is in the AddrRange. For example:
sel[0] = a[8] ^ a[12] sel[1] = a[9] ^ a[13] where sel == intlvMatch
This change extends AddrRange to allow more flexible interleavings with an abritary number of set of bits which do not need be consecutive. For example:
sel[0] = a[8] ^ a[11] ^ a[13] sel[1] = a[15] ^ a[17] ^ a[19] where sel == intlvMatch
Change-Id: I42220a6d5011a31f0560535762a25bfc823c3ebb Signed-off-by: Nikos Nikoleris <nikos.nikoleris@arm.com> Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/19130 Maintainer: Jason Lowe-Power <jason@lowepower.com> Tested-by: kokoro <noreply+kokoro@google.com> Reviewed-by: Daniel Carvalho <odanrc@yahoo.com.br>
|
#
12977:cdc78a6e54d7 |
|
29-Aug-2018 |
Nikos Nikoleris <nikos.nikoleris@arm.com> |
base: Fix isSubset() for addr ranges with interleaving
This change extends isSubset() which checks whether the range is a subset of an input range to support address ranges with interleaving and hashing.
Change-Id: I3dc9ceccb189b7c8665de0355f0555fc2c37d872 Reviewed-on: https://gem5-review.googlesource.com/12319 Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Maintainer: Nikos Nikoleris <nikos.nikoleris@arm.com>
|
#
12334:e0ab29a34764 |
|
30-Nov-2017 |
Gabe Black <gabeblack@google.com> |
misc: Rename misc.(hh|cc) to logging.(hh|cc)
These files aren't a collection of miscellaneous stuff, they're the definition of the Logger interface, and a few utility macros for calling into that interface (panic, warn, etc.).
Change-Id: I84267ac3f45896a83c0ef027f8f19c5e9a5667d1 Reviewed-on: https://gem5-review.googlesource.com/6226 Reviewed-by: Brandon Potter <Brandon.Potter@amd.com> Maintainer: Gabe Black <gabeblack@google.com>
|
#
12065:e3e51756dfef |
|
13-Mar-2017 |
Nikos Nikoleris <nikos.nikoleris@arm.com> |
ruby: Add support for address ranges in the directory
Previously the directory covered a flat address range that always started from address 0. This change adds a vector of address ranges with interleaving and hashing that each directory keeps track of and the necessary flexibility to support systems with non continuous memory ranges.
Change-Id: I6ea1c629bdf4c5137b7d9c89dbaf6c826adfd977 Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-on: https://gem5-review.googlesource.com/2903 Reviewed-by: Bradford Beckmann <brad.beckmann@amd.com> Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Maintainer: Jason Lowe-Power <jason@lowepower.com>
|
#
11990:5fad911cc326 |
|
29-Jan-2017 |
Andreas Sandberg <andreas.sandberg@arm.com> |
base, sim, dev: Remove SWIG
Remove SWIG guards and SWIG-specific C++ code.
Change-Id: Icaad6720513b6f48153727ef3f70e0dba0df4bee Signed-off-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-by: Andreas Hansson <andreas.hansson@arm.com> Reviewed-by: Curtis Dunham <curtis.dunham@arm.com> Reviewed-on: https://gem5-review.googlesource.com/2921 Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Reviewed-by: Tony Gutierrez <anthony.gutierrez@amd.com>
|
#
10853:5312e4cb6547 |
|
26-May-2015 |
Andreas Hansson <andreas.hansson@arm.com> |
base: Allow multiple interleaved ranges
This patch changes how the address range calculates intersection such that a system can have a number of non-overlapping interleaved ranges without complaining. Without this patch we end up with a panic.
|
#
10678:d95e81d44e36 |
|
03-Feb-2015 |
Curtis Dunham <Curtis.Dunham@arm.com> |
base: add an accessor and operators ==,!= to address ranges
|
#
10676:f6c168692b20 |
|
03-Feb-2015 |
Andreas Hansson <andreas.hansson@arm.com> |
base: Add XOR-based hashed address interleaving
This patch extends the current address interleaving with basic hashing support. Instead of directly comparing a number of address bits with a matching value, it is now possible to use two independent set of address bits XOR'ed together. This avoids issues where strided address patterns are heavily biased to a subset of the interleaved ranges.
|
#
10481:59fb5779ec6e |
|
16-Oct-2014 |
Andreas Hansson <andreas.hansson@arm.com> |
misc: Move AddrRangeList from port.hh to addr_range.hh
The new location seems like a better fit. The iterator typedefs are removed in favour of using C++11 auto.
|
#
10435:97d6ed3054ae |
|
11-Oct-2014 |
Nilay Vaish <nilay@cs.wisc.edu> |
base: addr range: slight change to validity check The validity check is being changed from < to <= since the end of the range is considered to be a part of it.
|
#
9780:704c03c216f7 |
|
27-Jun-2013 |
Andreas Hansson <andreas.hansson@arm.com> |
base: Fix address range granularity calculation
This patch fixes a bug in the granularity calculation. For example, if the high bit is 6 (counting from 0) and we have one interleaving bit, then the granularity is now 2 ** (6 - 1 + 1) = 64.
|
#
9581:e507dc092ca3 |
|
07-Mar-2013 |
Andreas Hansson <andreas.hansson@arm.com> |
base: Fix address range granularity calculations
This patch fixes a bug in the address range granularity calculations. Previously it incorrectly used the high bit to establish the size of the regions created, when it should really be looking at the low bit.
|
#
9541:e476d01bc6a4 |
|
19-Feb-2013 |
Andreas Hansson <andreas.hansson@arm.com> |
base: Fix a bug in the address interleaving
This patch fixes a minor (but important) typo in the matching of an address to an interleaved range.
|
#
9412:190fd0e285f6 |
|
07-Jan-2013 |
Andreas Hansson <andreas.hansson@arm.com> |
base: Add support for merging of interleaved address ranges
This patch adds support for merging a vector of interleaved address ranges into a contigous range. The functionality will be used in the interconnect and the PhysicalMemory to transform interleaved memory ranges to contigous ranges before passing them on.
The actual use of the merging is appearing in future patches.
|
#
9411:22e15f9c3fda |
|
07-Jan-2013 |
Andreas Hansson <andreas.hansson@arm.com> |
mem: Add interleaving bits to the address ranges
This patch adds support for interleaving bits for the address ranges. What was previously just a start and end address, now has an additional three fields, for the high bit, and number of bits to use for interleaving, and a match value to compare against. If the number of interleaving bits is set to zero it is effectively disabled.
A number of convenience functions are added to the range to enquire about the interleaving, its granularity and the number of stripes it is part of.
|
#
9405:c0a0593510db |
|
07-Jan-2013 |
Andreas Hansson <andreas.hansson@arm.com> |
base: Encapsulate the underlying fields in AddrRange
This patch makes the start and end address private in a move to prevent direct manipulation and matching of ranges based on these fields. This is done so that a transition to ranges with interleaving support is possible.
As a result of hiding the start and end, a number of member functions are needed to perform the comparisons and manipulations that previously took place directly on the members. An accessor function is provided for the start address, and a function is added to test if an address is within a range. As a result of the latter the != and == operator is also removed in favour of the member function. A member function that returns a string representation is also created to allow debug printing.
In general, this patch does not add any functionality, but it does take us closer to a situation where interleaving (and more cleverness) can be added under the bonnet without exposing it to the user. More on that in a later patch.
|
#
9334:0a12b040494a |
|
02-Nov-2012 |
Andreas Sandberg <Andreas.Sandberg@arm.com> |
base: Add missing header file to addr_range.hh.
|
#
9279:8b16c3804bda |
|
15-Oct-2012 |
Andreas Hansson <andreas.hansson@arm.com> |
Mem: Use range operations in bus in preparation for striping
This patch transitions the bus to use the AddrRange operations instead of directly accessing the start and end. The change facilitates the move to a more elaborate AddrRange class that also supports address striping in the bus by specifying interleaving bits in the ranges.
Two new functions are added to the AddrRange to determine if two ranges intersect, and if one is a subset of another. The bus propagation of address ranges is also tweaked such that an update is only propagated if the bus received information from all the downstream slave modules. This avoids the iteration and need for the cycle-breaking scheme that was previously used.
|
#
9235:5aa4896ed55a |
|
19-Sep-2012 |
Andreas Hansson <andreas.hansson@arm.com> |
AddrRange: Transition from Range<T> to AddrRange
This patch takes the final plunge and transitions from the templated Range class to the more specific AddrRange. In doing so it changes the obvious Range<Addr> to AddrRange, and also bumps the range_map to be AddrRangeMap.
In addition to the obvious changes, including the removal of redundant includes, this patch also does some house keeping in preparing for the introduction of address interleaving support in the ranges. The Range class is also stripped of all the functionality that is never used.
|