misc: Merge branch 'release-staging-v22-0' into stable
diff --git a/RELEASE-NOTES.md b/RELEASE-NOTES.md
index 133282a..d199fed 100644
--- a/RELEASE-NOTES.md
+++ b/RELEASE-NOTES.md
@@ -43,15 +43,15 @@
 These changes include stability improvements and bugs fixes.
 The gem5 testing suite has also been expanded to include gem5 in SystemC tests.
 
-### Improved GPU support.
+### Improved GPU support
 
 Users may now simulate an AMD GPU device in full system mode using the ROCm 4.2 compute stack.
 Until v21.2, gem5 only supported GPU simulation in Syscall-Emulation mode with ROCm 4.0.
 See [`src/gpu-fs/README.md`](https://gem5.googlesource.com/public/gem5-resources/+/refs/heads/stable/src/gpu-fs/) in gem5-resources and example scripts in [`configs/example/gpufs/`](https://gem5.googlesource.com/public/gem5/+/refs/tags/v22.0.0.0/configs/example/gpufs/) for example scripts which run GPU full system simulations.
 
-A [GPU Ruby random tester has been added](https://gem5-review.googlesource.com/c/public/gem5/+/59272) to help validate the correctness of the CPU and GPU Ruby coherence protocols as part of every kokoro check-in.  
-This helps validate the correctness of the protocols before new changes are checked in.  
-Currently the tester focuses on the protocols used with the GPU, but the ideas are extensible to other protocols.  
+A [GPU Ruby random tester has been added](https://gem5-review.googlesource.com/c/public/gem5/+/59272) to help validate the correctness of the CPU and GPU Ruby coherence protocols as part of every kokoro check-in.
+This helps validate the correctness of the protocols before new changes are checked in.
+Currently the tester focuses on the protocols used with the GPU, but the ideas are extensible to other protocols.
 The work is based on "Autonomous Data-Race-Free GPU Testing", IISWC 2019, Tuan Ta, Xianwei Zhang, Anthony Gutierrez, and Bradford M. Beckmann.
 
 ### An Arm board has been added to the gem5 Standard Library
@@ -113,6 +113,25 @@
 - New bootloader is required for Arm VExpress_GEM5_Foundation platform. See https://gem5.atlassian.net/browse/GEM5-1222 for details.
 - The MemCtrl interface has been updated to use more inheritance to make extending it to other memory types (e.g., HBM pseudo channels) easier.
 
+# Version 21.2.1.1
+
+**[HOTFIX]** In order to ensure v21 of gem5 remains compatible with future changes, the gem5 stdlib downloader has been updated to obtain the resources.json file from <https://resources.gem5.org/resources.json>.
+As this domain is under the gem5 project control, unlike the previous googlesource URL, we can ensure longer-term stability.
+The fix also ensures the downloader can parse plain-text JSON and base64 encoding of the resources.json file.
+
+# Version 21.2.1.0
+
+Version 21.2.1 is a minor gem5 release consisting of bug fixes. The 21.2.1 release:
+
+* Fixes a bug in which [a RCV instruction is wrongly regarded as a branch](https://gem5.atlassian.net/browse/GEM5-1137).
+* Removes outdated and incomplete standard library documentation.
+Users wishing to learn more about the gem5 standard library should consult materials [on the gem5 website](https://www.gem5.org/documentation/gem5-stdlib/overview).
+* Adds a VirtIO entropy device (VirtIORng) to RISC-V.
+Without this, [RISCV Disk images can take considerable time to boot and occasionally do so in error](https://gem5.atlassian.net/browse/GEM5-1151).
+* Removes the 'typing.final' decorator from the standard library.
+'typing.final' was introduced in Python 3.8, but v21.2 of gem5 supports Python 3.6.
+* Fixes the broken NPB stdlib example test.
+
 # Version 21.2.0.0
 
 ## API (user-facing) changes
diff --git a/src/dev/virtio/VirtIORng 2.py b/src/dev/virtio/VirtIORng 2.py
new file mode 100644
index 0000000..13df059
--- /dev/null
+++ b/src/dev/virtio/VirtIORng 2.py
@@ -0,0 +1,48 @@
+# -*- mode:python -*-
+
+# Copyright (c) 2022  Institute of Computing Technology, Chinese
+#                     Academy of Sciences
+# All rights reserved.
+#
+# The license below extends only to copyright in the software and shall
+# not be construed as granting a license to any other intellectual
+# property including but not limited to intellectual property relating
+# to a hardware implementation of the functionality of the software
+# licensed hereunder.  You may use the software subject to the license
+# terms below provided that you ensure that this notice is replicated
+# unmodified and in its entirety in all distributions of the software,
+# modified or unmodified, in source code or in binary form.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met: redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer;
+# redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution;
+# neither the name of the copyright holders nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+from m5.params import *
+from m5.proxy import *
+from m5.objects.VirtIO import VirtIODeviceBase
+
+class VirtIORng(VirtIODeviceBase):
+    type = 'VirtIORng'
+    cxx_header = 'dev/virtio/rng.hh'
+    cxx_class = 'gem5::VirtIORng'
+
+    qSize = Param.Unsigned(16, "Request queue size")
diff --git a/src/dev/virtio/rng 2.cc b/src/dev/virtio/rng 2.cc
new file mode 100644
index 0000000..c26568e
--- /dev/null
+++ b/src/dev/virtio/rng 2.cc
@@ -0,0 +1,94 @@
+/*
+ * Copyright (c) 2022  Institute of Computing Technology, Chinese Academy
+ *                     of Sciences
+ * All rights reserved
+ *
+ * The license below extends only to copyright in the software and shall
+ * not be construed as granting a license to any other intellectual
+ * property including but not limited to intellectual property relating
+ * to a hardware implementation of the functionality of the software
+ * licensed hereunder.  You may use the software subject to the license
+ * terms below provided that you ensure that this notice is replicated
+ * unmodified and in its entirety in all distributions of the software,
+ * modified or unmodified, in source code or in binary form.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "dev/virtio/rng.hh"
+
+#include "base/random.hh"
+#include "debug/VIORng.hh"
+#include "params/VirtIORng.hh"
+#include "sim/system.hh"
+
+namespace gem5
+{
+
+VirtIORng::VirtIORng(const Params &params)
+    : VirtIODeviceBase(params, ID_RNG, 0, 0),
+      qReq(params.system->physProxy, byteOrder, params.qSize, *this)
+{
+    registerQueue(qReq);
+}
+
+VirtIORng::~VirtIORng()
+{
+}
+
+VirtIORng::RngQueue::RngQueue(PortProxy &proxy, ByteOrder bo, uint16_t size,
+    VirtIORng &_parent)
+    : VirtQueue(proxy, bo, size), parent(_parent)
+{
+}
+
+void
+VirtIORng::readConfig(PacketPtr pkt, Addr cfgOffset)
+{
+    // There are no configuration for RNG device
+    pkt->makeResponse();
+}
+
+void
+VirtIORng::RngQueue::trySend()
+{
+    DPRINTF(VIORng, "try send\n");
+
+    VirtDescriptor *d;
+    while ((d = consumeDescriptor())) {
+        DPRINTF(VIORng, "Got descriptor (len: %i)\n", d->size());
+        size_t len = 0;
+        while (len < d->size()) {
+            uint8_t byte = gem5::random_mt.random<uint8_t>();
+            d->chainWrite(len, &byte, sizeof(uint8_t));
+            ++len;
+        }
+
+        // Tell the guest that we are done with this descriptor.
+        produceDescriptor(d, len);
+        parent.kick();
+    }
+}
+
+} // namespace gem5
diff --git a/src/dev/virtio/rng 2.hh b/src/dev/virtio/rng 2.hh
new file mode 100644
index 0000000..7be2354
--- /dev/null
+++ b/src/dev/virtio/rng 2.hh
@@ -0,0 +1,97 @@
+/*
+ * Copyright (c) 2022  Institute of Computing Technology, Chinese Academy
+ *                     of Sciences
+ * All rights reserved
+ *
+ * The license below extends only to copyright in the software and shall
+ * not be construed as granting a license to any other intellectual
+ * property including but not limited to intellectual property relating
+ * to a hardware implementation of the functionality of the software
+ * licensed hereunder.  You may use the software subject to the license
+ * terms below provided that you ensure that this notice is replicated
+ * unmodified and in its entirety in all distributions of the software,
+ * modified or unmodified, in source code or in binary form.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef __DEV_VIRTIO_RNG_HH__
+#define __DEV_VIRTIO_RNG_HH__
+
+#include "base/compiler.hh"
+#include "dev/virtio/base.hh"
+
+namespace gem5
+{
+
+struct VirtIORngParams;
+
+/**
+ * VirtIO Rng
+ *
+ * @see https://github.com/rustyrussell/virtio-spec
+ * @see http://docs.oasis-open.org/virtio/virtio/v1.0/virtio-v1.0.html
+ */
+class VirtIORng : public VirtIODeviceBase
+{
+  public:
+    typedef VirtIORngParams Params;
+    VirtIORng(const Params &params);
+    virtual ~VirtIORng();
+
+    void readConfig(PacketPtr pkt, Addr cfgOffset);
+
+  protected:
+    /** VirtIO device ID */
+    static const DeviceId ID_RNG = 0x04;
+
+  protected:
+    /**
+     * Virtqueue for data going from the host to the guest.
+     */
+    class RngQueue
+        : public VirtQueue
+    {
+      public:
+        RngQueue(PortProxy &proxy, ByteOrder bo, uint16_t size,
+                 VirtIORng &_parent);
+        virtual ~RngQueue() {}
+
+        void onNotify() { trySend(); }
+
+        /** Try to send data pending data from the terminal. */
+        void trySend();
+
+        std::string name() const { return parent.name() + ".qRecv"; }
+
+      protected:
+        VirtIORng &parent;
+    };
+    /** Receive queue for port 0 */
+    RngQueue qReq;
+};
+
+} // namespace gem5
+
+#endif // __DEV_VIRTIO_RNG_HH__