Commit Graph

5748 Commits

Author SHA1 Message Date
Bobby R. Bruce
a2e7bd4698 arch-riscv: Support combination of privilege modes configuration (#522)
The user can select privilege modes witch is included in the system, not
always enable the user and supervisor privilege modes.
2023-11-29 10:12:57 -08:00
Adrià Armejach
b0cefac9b2 arch-riscv: Fix narrow datatypes in RVV isa files (#606)
Some variables hava narrow datatypes that overflow on large VLEN values.
For example, the maximum number of microops for LMUL=8 SEW=8 and
VLEN=64K is 2^16.

Change-Id: I5cce759f040884e09ce83bee7e54a62c4b42c5aa

Co-authored-by: Adrià Armejach <adria.armejach@bsc.es>
2023-11-29 10:11:06 -08:00
Harshil Patel
089b82b2e9 arch-riscv: fix tlb bug (#610)
- one tlb miss was getting counted twice by the lookup function.

Change-Id: I5fee08bd6e936896704e7dbbd242720b8d23b547
2023-11-29 08:39:02 -08:00
Jason Lowe-Power
3fe5e58f28 arch-x86: Fix misc registers in mov instructions (#593)
MOV instructions 8C and 8E can be prefixed with a REX prefix to extend
the source/destination register.
However, the R bit in REX will be applied to the segment register.  
The decoder file checks for valid segment registers, checking the
MODRM_REG only, however, later this will be extended with the REX_R when
adding the register to the sources/destinations of the instruction.
This will trigger an assert.

Additionally, MOV instructions of various miscelaneous registers are
also not check for being valid when taking into account the REX_R bit.

This patch checks that the REX_R is not set, otherwise, UD2 will be
generated.
2023-11-28 11:14:53 -08:00
Roger Chang
9a0c671cce arch-riscv: Handle the exception following the privilege mode set
Change-Id: I4867941ec286fe485e01db848b8c7357488f6cf4
2023-11-28 09:26:27 +08:00
Roger Chang
d56801c240 arch-riscv: Add misa rvs check for memory translation
The memory translation require supervisor mode implement. If the
supervisor mode is not implemented, the satp CSR is not exists and
should not do address translation

Change-Id: Ie6c8a1a130d0aab0647b35e0f731f6b930834176
2023-11-28 09:26:27 +08:00
Roger Chang
6fd4feb797 arch-riscv: fatal_if the process run without SU modes
Change-Id: Ifce7eec6cea10881964c29d206a92f3d10271de6
2023-11-28 09:26:27 +08:00
Roger Chang
9e738a65ea arch-riscv: Add isaExts field for CSR registers
Change-Id: Idd94af57f3a721d455ea7fb9d335fab7b16a0f7e
2023-11-28 09:26:27 +08:00
Roger Chang
0e4f82a119 arch-riscv: define the CSR masks for each privilege modes
Change-Id: I9936d9bc816921a827b94550847d4898b3aa3292
2023-11-28 09:26:27 +08:00
Roger Chang
f745e8cf89 arch-riscv: Initial the privilege modes configuration
1. Declare the new enum type PrivilegeModes
2. Disallow setting the MISA register RVU and RVS.

Change-Id: I932d714bc70c9720a706353c557a5be76c950f81
2023-11-28 09:26:27 +08:00
Bobby R. Bruce
d4b7c8a26d Merge branch 'develop' into develop-kconfig 2023-11-27 09:39:08 -08:00
Matthew Poremba
cc9f81b08a arch-vega,arch-gcn3: Bugfix V_PERM_B32 and V_OR3_B32 (#599)
The V_PERM_B32 instruction is selecting the correct byte, but is
shifting into place moving by bits instead of bytes. The V_OR3_B32
instruction is calling the wrong instruction implementation in the
decoder.

This patch fixes both issues plus a bonus fix for GCN3's V_PERM_B32.
(GCN3 does not have V_OR3_B32).

Change-Id: Ied66c43981bc4236f680db42a9868f760becc284
2023-11-26 23:22:01 -08:00
Eduardo José Gómez Hernández
670bf6a488 arch-x86: Check REX_R for MOV misc registers
Change-Id: I08ea37ffe695df500ea84cbddd94be246f916caf
2023-11-24 13:41:24 +01:00
Eduardo José Gómez Hernández
cea169f5e7 arch-x86: Fix segment registers in instructions 8C and 8E
MOV instructions 8C and 8E can be prefixed with a REX prefix to extend
the source/destination register. However, the R bit in REX will be
applied to the segment register.  The decoder file checks for valid
segment registers, checking the MODRM_REG only, however, later this
will be extended with the REX_R when adding the register to the
sources/destinations of the instruction.  This will trigger an assert.

This patch checks that the REX_R is not set, otherwise, UD2 will be
generated.

Change-Id: I78a93c35116232fe37e5ec50025e721b8c633c5f
2023-11-23 10:18:17 +01:00
Roger Chang
92670e9745 fastmodel: Simply the logic of USE_ARM_FASTMODEL setting
Change-Id: Ib00cf83ca881727987050a987a2adb1e9f9d31ef
2023-11-23 14:15:28 +08:00
Roger Chang
d758df4b5c scons: Update the Kconfig build options
The CL updates the Kconfig:
1. Replace the USE_NULL_ISA with BUILD_ISA
2. The USE_XXX_ISAs are depends on BUILD_ISA
3. If the BUILD_ISA is set, at least one of USE_XXX_ISAs must be set
4. Refactor the USE_KVM option

Change-Id: I2a600dea9fb671263b0191c46c5790ebbe91a7b8
2023-11-23 08:26:11 +08:00
Gabe Black
db3a6e8e84 scons: Use Kconfig to configure gem5.
These are not yet consumed by anything, but convert all the settings
from SCons variables to Kconfig variables.

If you have existing SConsopts files which need to be converted, you
should take a look at KCONFIG.md to learn about how kconfig is used in
gem5. You should decide if any variables need to be available to C++ or
kconfig itself, and whether those are options which should be detected
automatically, or should be up to the user. Options which should be
measured automatically should still be in SConsopts files, while user
facing options should be added to new or existing Kconfig files.

Generally, make sure you're storing c++/kconfig visible options in
env['CONF'][...]. Also remove references to sticky_vars since persistent
options should now be handled with kconfig, and export_vars since
everything in env['CONF'] is now exported automatically.

Switch SCons/gem5 to use Kconfig for configuration, except EXTRAS which
is still a sticky SCons variable. This is necessary because EXTRAS also
controls what config options exist. If it came from Kconfig itself, then
there would be a circular dependency. This dependency could
theoretically be handled by reparsing the Kconfig when EXTRAS
directories were added or removed, but that would be complicated, and
isn't supported by kconfiglib. It wouldn't be worth the significant
effort it would take to add it, just to use Kconfig more purely.

Change-Id: I29ab1940b2d7b0e6635a490452d05befe5b4a2c9
2023-11-23 08:26:10 +08:00
Giacomo Travaglini
098feb4042 arch-arm: Fix WFI sleeping in secure mode
The CPU should not sleep with a pending virtual interrupt
if secure mode EL2 is supported (FEAT_SEL2)

Change-Id: Ib71c4a09d76a790331cf6750da45f83694946aee
Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com>
2023-11-21 13:39:41 +00:00
Giacomo Travaglini
b8fabc15d9 arch-arm: Revamp takeVirtualInt to take FEAT_SEL2 into account
Similarly to the physical version [1], we rewrite the
masking logic to account for FEAT_SEL2.

The interrupt table is taken from the Arm architecture reference
manual (version DDI 0487H.a, section D1.3.6, table R_BKHXL)

[1]: https://github.com/gem5/gem5/pull/430

Change-Id: Icb6eb1944d8241293b3ef3c349b20f3981bcc558
Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com>
2023-11-21 13:39:41 +00:00
Giacomo Travaglini
49d07578de arch-arm: Call take(Virtual)Int only when needed
There is no need to call the methods for every kind
of interrupt. A pending one should short-circuit the
remaining checks

Change-Id: I2c9eb680a7baa4644745b8cbe48183ff6f8e3102
Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com>
2023-11-21 13:39:41 +00:00
Giacomo Travaglini
bb323923f2 arch-arm: Simplify get/checkInterrupts with takeVirtualInt
With this patch we align virtual interrupts with respect to
the physical ones by introducing a matching takeVirtualInt
method.

Change-Id: Ib7835a21b85e4330ba9f051bc8fed691d6e1382e
Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com>
2023-11-21 13:39:41 +00:00
Giacomo Travaglini
3d41339366 arch-arm: Fix ISR_EL1 register read in secure mode
Vitual interrupts are enabled in secure mode as well
after the introduction of FEAT_SEL2. Replacing the
secure mode check with the EL2Enabled one

Change-Id: Id685a05d5adfa87b2a366f6be42bf344168927d4
Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com>
2023-11-21 13:39:41 +00:00
Giacomo Travaglini
90b711e879 arch-arm: Define an ISR type register
Change-Id: I358050a507fb76654e87165720dfb3b2ea6ca838
Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com>
2023-11-21 13:39:41 +00:00
Yu-Cheng Chang
ceabe86b31 arch-riscv: Add overrides to RISC-V Interrupts class (#568) 2023-11-15 18:36:15 -08:00
wmin0
a8440f367d arch-riscv: Move fault handler addr logic to ISA (#554)
mtvec.mode is extended in the new riscv proposal, like fast interrupt.
This change moves that part from Fault class to ISA class for
extendable.

Ref: https://github.com/riscv/riscv-fast-interrupt
2023-11-15 10:04:01 -08:00
Matt Sinclair
75ca2c4282 gpu-compute: Fix typo with GPUTLB print (#529)
gpu-compute: Fix typo with GPUTLB print

Print was not properly ending in a newline, which caused confusion when
looking a trace with GPUTLB enabled. This fixes that.
2023-11-13 14:40:27 -08:00
Bobby R. Bruce
b62308dfa3 base,sim: Add the SymbolType field to the Symbol object (#512)
Symbol type is part of the info provided by an ELF object's symtab.
It indicates whether a symbol is a file symbol, or a function symbol,
etc.

This chain of commits introduces a way to only load function symbols
to the gem5's symbol table. The RISC-V BootloaderKernelWorkload now
loads only function symbols from the bootloader and the kernel binaries
by default.
2023-11-13 08:14:05 -08:00
Bobby R. Bruce
52354662aa arch-riscv: Fixing CMO instructions and allowing using CMO instructions in FS mode (#517)
arch-riscv: Fix implementation of CMO extension instructions

This change introduces a template for store instruction's mem access.
The new template is called CacheBlockBasedStore.

The reasons for not reusing the current Store's mem access template
are as follows,
- The CMO extension instructions operate on cache block size
granularity,
while regular load/store instructions operate on data of size 64 bits or
fewer.
- The writeMemAtomicLE/writeMemTimingLE interfaces do not allow passing
nullptr as data. However, CPUs in gem5 rely on (data == NULL) to detect
CACHE_BLOCK_ZERO instructions. Setting `Mem = 0;` to `uint64_t Mem;`
does not solve the problem as the reference is allocated and thus,
it's always true that `&Mem != NULL`. This change uses the
writeMemAtomic/writeMemTiming interfaces instead.
- Per CMO v1.0.1, the instructions in the spec do not generate
address misaligned faults.
- The CMO extension instructions do not use IMM.

---

arch-riscv: Fix generateDisassembly for Store with 1 source reg

Currently, store instructions are assumed to have two source registers.
However, since we are supporting the RISC-V CMO instructions, which
are Store instructions in gem5 but they only have one source register.
This change allows printing disassembly of Store instructions with
one source register.

---

arch-riscv: Make Zicbom/Zicboz extensions optional in FS mode

Currently, we're enable Zicbom/Zicboz by default. Since those
extensions might be buggy as they are not well-tested, making
those entensions optional allows running simulation where
the performance implication of the instructions do not matter.

Effectively, by turning off the extensions, we simply remove
those extensions from the device tree, so the OS would not
use them. It doesn't prohibit the userspace application to
use those instructions, however.

---

arch-riscv: Add all supporting Z extensions to RISC-V isa string
2023-11-13 03:38:49 -08:00
Giacomo Travaglini
1f1e15e48f arch-arm,kvm: Fix copy-paste error (#541)
This was probably a copy paste error introduced by [1]. Luckily armv7
KVM mode has been superseeded by the armv8 one.

[1]: https://gem5-review.googlesource.com/c/public/gem5/+/52059

Change-Id: I260229c94077d856510976bda58383f0564fc15b

Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com>
2023-11-08 08:35:02 +00:00
Yu-Cheng Chang
e4cdd73a59 arch-riscv: Fix line length of CSRData declaration (#519)
The length of CSRData declaration must less than 79 characters

Change-Id: I3767b069664690d7b4498a73536880cfa491c6e5
2023-11-06 10:26:08 -08:00
Hoa Nguyen
68287604ee arch-riscv: Make Zicbom/Zicboz extensions optional in FS mode
Currently, we're enable Zicbom/Zicboz by default. Since those
extensions might be buggy as they are not well-tested, making
those entensions optional allows running simulation where
the performance implication of the instructions do not matter.

Effectively, by turning off the extensions, we simply remove
those extensions from the device tree, so the OS would not
use them. It doesn't prohibit the userspace application to
use those instructions, however.

Change-Id: Ib30e98c4c39f741dec5f7d31bd7b832391686840
Signed-off-by: Hoa Nguyen <hn@hnpl.org>
2023-10-30 21:45:13 +00:00
Hoa Nguyen
7c6fcb3838 arch-riscv: Add all supporting Z extensions to RISC-V isa string
Change-Id: I809744fc546bc5c0e27380f9b75bdf99f8520583
Signed-off-by: Hoa Nguyen <hn@hnpl.org>
2023-10-30 21:45:10 +00:00
Hoa Nguyen
f615ee4cd4 arch-riscv: Fix generateDisassembly for Store with 1 source reg
Currently, store instructions are assumed to have two source registers.
However, since we are supporting the RISC-V CMO instructions, which
are Store instructions in gem5 but they only have one source register.
This change allows printing disassembly of Store instructions with
one source register.

Change-Id: I4dd7818c9ac8a89d5e10e77db72248942a25e938
Signed-off-by: Hoa Nguyen <hn@hnpl.org>
2023-10-30 21:44:18 +00:00
Hoa Nguyen
2521ba0664 arch-riscv: Fix implementation of CMO extension instructions
This change introduces a template for store instruction's mem access.
The new template is called CacheBlockBasedStore.

The reasons for not reusing the current Store's mem access template
are as follows,
- The CMO extension instructions operate on cache block size granularity,
while regular load/store instructions operate on data of size 64 bits or
fewer.
- The writeMemAtomicLE/writeMemTimingLE interfaces do not allow passing
nullptr as data. However, CPUs in gem5 rely on (data == NULL) to detect
CACHE_BLOCK_ZERO instructions. Setting `Mem = 0;` to `uint64_t Mem;`
does not solve the problem as the reference is allocated and thus,
it's always true that `&Mem != NULL`. This change uses the
writeMemAtomic/writeMemTiming interfaces instead.
- Per CMO v1.0.1, the instructions in the spec do not generate
address misaligned faults.
- The CMO extension instructions do not use IMM.

Change-Id: I323615639a4ba882fe40a55ed32c7632e0251421
Signed-off-by: Hoa Nguyen <hn@hnpl.org>
2023-10-30 21:44:18 +00:00
Hoa Nguyen
4fdfb96cad arch-riscv: Load function symbols for BootloaderKernelWorkload
Change-Id: Iade91b2cdf6701ed3fe6f5583127c8c3d669d695
Signed-off-by: Hoa Nguyen <hn@hnpl.org>
2023-10-30 21:36:34 +00:00
Jason Lowe-Power
d0113185c6 arch-riscv: Dynamically add V extension to device tree (#464)
Currently, we are hardcoding the ISA string in the device tree
generator. The ISA string from the device tree affects which
ISA extensions will be used by the bootloader/kernel.

This function allows generating the ISA string from the gem5's
ISA object rather than using hardcoded values.

This series of changes also correct a couple of hardcoded
RISC-V ISA strings in the standard library, as well as not
enable RVV instructions for the U74 core model.

Signed-off-by: Hoa Nguyen <hn@hnpl.org>
2023-10-30 10:29:25 -07:00
Hoa Nguyen
0218103162 arch-riscv: Correct BootloaderKernelWorkload symbol table (#511)
Currently, the kernel's symbols are shifted by `kernel_paddr_offset`,
which is where the kernel is located in the physcial address space.
However, the symbols are mapped to virtual addresses, which stay the
same even though the physical address space is shifted.

This patch removes the offset for the kernel's symbols virtual
addresses.

Change-Id: I7c35f925777220f56bd8c69bba14c267d2048ade

Signed-off-by: Hoa Nguyen <hn@hnpl.org>
2023-10-30 09:56:10 -07:00
Giacomo Travaglini
d131ff488e arch-arm: Set UNCACHEABLE flag in Request in SE mode (#515)
As pointed out by [1], Arm doesn't seem to respect the cacheability
attribute when mapping uncacheable memory. This is because the request
is not tagged as uncacheable during SE translation With this patch we
are checking for the cacheability attribute before finalizing
translation

[1]: https://github.com/gem5/gem5/issues/509

Change-Id: I42df0e119af61763971d5766ae764a540055781b

Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com>
2023-10-30 10:43:22 +00:00
Roger Chang
e561f3b6f1 arch-riscv: Move insts/vector from header to source
Move the implemention of following classes
- VMaskMergeMicroInst
- VxsatMicroInst

Change-Id: I42ec45681064a0f599c3b2313c2125da7cfc849b
2023-10-26 18:04:58 +08:00
Roger Chang
62af678d5c arch-riscv: Move VArith implementations from header to source
Move VArith implementations from heaher_output to decoder_output
and exec_output respectively

Change-Id: I406eedbd9dd625aa939ec0e20aa29ef4f18ba79c
2023-10-26 18:04:58 +08:00
Roger Chang
605ec6899e arch-riscv: Move VMem implementation from header to source
Move the VMem implementation from header_output to
decoder_output and exec_output respectively.

Change-Id: I699e197f37f22a59ecb9f92a64b5e296d2e9f5fa
2023-10-26 18:04:58 +08:00
Hoa Nguyen
a47ca9dadc arch-riscv: Add a function generating the ISA string
Currently, we are hardcoding the ISA string in the device tree
generator. The ISA string from the device tree affects which
ISA extensions will be used by the bootloader/kernel.

This function allows generating the ISA string from the gem5's
ISA object rather than using hardcoded values.

Change-Id: I2f3720fb6da24347f38f26d9a49939484b11d3bb
Signed-off-by: Hoa Nguyen <hn@hnpl.org>
2023-10-25 20:12:55 +00:00
Giacomo Travaglini
6ddf8c94ee arch-arm: Fix KVM Failed to set register (0x603000000013808c) (#486)
Some debug registers were incorrectly tagged
(e.g. as being writeable). This was causing a bug in some gem5-KVM runs
where gem5 was trying to initialize the state of those registers
(OSLSR_EL1) [1] but KVM was returning an error (as the registers were
RO).

[1]: https://github.com/gem5/gem5/blob/stable/\
    src/arch/arm/kvm/armv8_cpu.cc#L408
2023-10-20 11:30:19 -07:00
Giacomo Travaglini
8233aa8a9b arch-arm: Implement a CapstoneDisassembler for Arm
Change-Id: Id3135bda065efa9b4f3ab36972957fd00c05a53c
Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com>
2023-10-20 09:27:51 +01:00
Giacomo Travaglini
34336208b7 arch-arm: Disassemble through InstDisassembler in TarmacTracer
Change-Id: I5407338501084c016522749be697dd688ca51735
Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com>
2023-10-20 09:27:51 +01:00
Giacomo Travaglini
27ce721ad3 arch-arm: Pass a reference of the parent tracer to TarmacContext
Change-Id: I7ab0442353a8b5854bb6b50bd54dac89f83ecc1d
Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com>
2023-10-20 09:27:51 +01:00
Giacomo Travaglini
81b6e296dd arch-arm: disassemble member variable not used by TarmacParser
We move it to the child class which is what the TarmacTracer
actually uses.

Change-Id: Ia30892723d2e1f7306dae87c6c9c1d69d00ad73d
Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com>
2023-10-20 09:27:50 +01:00
Alvaro Moreno
edf1d69257 arch-riscv: Define vlwhole/vswhole mem acceses using vlen.
This patch fixes the size of the memory acceses in vswhole and
vlwhole instructions to the maximum vector length.

Change-Id: Ib86b5356d9f1dfa277cb4b367893e3b08242f93e
2023-10-19 00:27:58 +02:00
Alvaro Moreno
52219e5e6f arch-riscv: Add elen configuration to vector config instructions
This patch adds elen as a member of vector configuration instructions so it can be used with the especulative execution

Change-Id: Iaf79015717a006374c5198aaa36e050edde40cee
2023-10-19 00:27:58 +02:00
Alvaro Moreno
2c9fca7b60 arch-riscv: Add vlen configuration to vector instructions
In first place, vlen is added as a member of Vector Macro Instructions
where it is needed to split the instruction in Micro Instructions.

Then, new PCState methods are used to get dynamic vlen and vlenb
values at execution.

Finally, vector length data types are fixed to 32 bits so every vlen value
is considered.

Change-Id: I5b8ceb0d291f456a30a4b0ae2f58601231d33a7a
2023-10-19 00:27:58 +02:00