Update RISCV-QEMU emulator to 8.2.1 (#15320)

Supports hwcap

Update the RISCV CI docker and run_riscv_test.sh QEMU flags

For RISCV bare-metal smoke tests, the docker still uses the QEMU v5.2.0,
for QEMU v8.1.2 RISC-V has more restricted memory protection by default.
diff --git a/build_tools/cmake/run_riscv_test.sh b/build_tools/cmake/run_riscv_test.sh
index e4431c9..af6759d 100755
--- a/build_tools/cmake/run_riscv_test.sh
+++ b/build_tools/cmake/run_riscv_test.sh
@@ -22,10 +22,10 @@
 # `QEMU_RV64_BIN` or `QEMU_RV32_BIN` environment variable to run the artifacts
 # under the emulator.
 if [[ "${RISCV_PLATFORM_ARCH}" == "linux-riscv_64" ]] && [[ ! -z "${QEMU_RV64_BIN}" ]]; then
-  "${QEMU_RV64_BIN}" "-cpu" "rv64,x-v=true,x-k=true,vlen=512,elen=64,vext_spec=v1.0" \
+  "${QEMU_RV64_BIN}" "-cpu" "rv64,Zve64d=true,vlen=512,elen=64,vext_spec=v1.0" \
   "-L" "${RISCV_RV64_LINUX_TOOLCHAIN_ROOT}/sysroot" "$@"
 elif [[ "${RISCV_PLATFORM_ARCH}" == "linux-riscv_32" ]] && [[ ! -z "${QEMU_RV32_BIN}" ]]; then
-  "${QEMU_RV32_BIN}" "-cpu" "rv32,x-v=true,x-k=true,vlen=512,elen=32,vext_spec=v1.0" \
+  "${QEMU_RV32_BIN}" "-cpu" "rv32,Zve32f=true,vlen=512,elen=32,vext_spec=v1.0" \
   "-L" "${RISCV_RV64_LINUX_TOOLCHAIN_ROOT}/sysroot" "$@"
 else
 # TODO(dcaballe): Add on-device run commands.
diff --git a/build_tools/docker/dockerfiles/riscv.Dockerfile b/build_tools/docker/dockerfiles/riscv.Dockerfile
index 26e064b..ddad1bb 100644
--- a/build_tools/docker/dockerfiles/riscv.Dockerfile
+++ b/build_tools/docker/dockerfiles/riscv.Dockerfile
@@ -12,14 +12,20 @@
 RUN tar -xf "toolchain_iree_manylinux_2_28_20231012.tar.gz" -C /usr/src/
 RUN wget --no-verbose "https://storage.googleapis.com/iree-shared-files/toolchain_iree_rv32imf_manylinux_2_28_20231012.tar.gz"
 RUN tar -xf "toolchain_iree_rv32imf_manylinux_2_28_20231012.tar.gz" -C /usr/src/
+RUN wget --no-verbose "https://storage.googleapis.com/iree-shared-files/qemu-riscv_8.1.2_manylinux_2.28_20231026.tar.gz"
+RUN tar -xf "qemu-riscv_8.1.2_manylinux_2.28_20231026.tar.gz" -C /usr/src/
+# Old qemu-v5.2.0 to support embedded elf (without memory protection)
+RUN mkdir -p /usr/src/qemu-v5.2.0
 RUN wget --no-verbose "https://storage.googleapis.com/iree-shared-files/qemu-riscv.tar.gz"
-RUN tar -xf "qemu-riscv.tar.gz" -C /usr/src/
+RUN tar -xf "qemu-riscv.tar.gz" -C /usr/src/qemu-v5.2.0
 
 FROM gcr.io/iree-oss/base@sha256:796fb81a11ff7e7d057c93de468b74e48b6a9641aa19b7f7673c2772e8ea3b33 AS final
 COPY --from=install-riscv "/usr/src/toolchain_iree" "/usr/src/toolchain_iree"
 COPY --from=install-riscv "/usr/src/toolchain_iree_rv32imf" "/usr/src/toolchain_iree_rv32imf"
 COPY --from=install-riscv "/usr/src/qemu-riscv" "/usr/src/qemu-riscv"
+COPY --from=install-riscv "/usr/src/qemu-v5.2.0/qemu-riscv/qemu-riscv32" "/usr/src/qemu-riscv/qemu-riscv32-v5.2.0"
 ENV RISCV_RV64_LINUX_TOOLCHAIN_ROOT="/usr/src/toolchain_iree"
 ENV RISCV_RV32_NEWLIB_TOOLCHAIN_ROOT="/usr/src/toolchain_iree_rv32imf"
 ENV QEMU_RV64_BIN="/usr/src/qemu-riscv/qemu-riscv64"
 ENV QEMU_RV32_BIN="/usr/src/qemu-riscv/qemu-riscv32"
+ENV QEMU_RV32_V5_2_BIN="/usr/src/qemu-riscv/qemu-riscv32-v5.2.0"
diff --git a/build_tools/docker/prod_digests.txt b/build_tools/docker/prod_digests.txt
index deafaa6..90674cf 100644
--- a/build_tools/docker/prod_digests.txt
+++ b/build_tools/docker/prod_digests.txt
@@ -5,7 +5,7 @@
 gcr.io/iree-oss/frontends-nvidia@sha256:c3d590c6f1a6369cd34ccf0fc6f9ca2fbf8ee06abdc58a2827fc847718c308b8
 gcr.io/iree-oss/frontends-swiftshader@sha256:1d2424dc512545a32b68e3f6b839541832fa24b5fce78cb253b3a4cd4592d9b2
 gcr.io/iree-oss/gradle-android@sha256:cf7bf0392d5125f2babb4b9de4b43b583220506ecebd6b6201b23b2575f671c0
-gcr.io/iree-oss/riscv@sha256:b827812336aeee4689b342ddba49b06325df6e89cadfd2ec1ad965cf5ae77ac1
+gcr.io/iree-oss/riscv@sha256:61af5fee01800033826d851cbcf946a548c76f09306578f8cedb48438328f464
 gcr.io/iree-oss/nvidia@sha256:4bc8f74e6f8dece34184eedfafede9c28ba3af1674e6774f5cd867802beffc9b
 gcr.io/iree-oss/emscripten@sha256:6e412f7ca51439ffce051a8a2e8fcbd7398743f461930a5f51c089441ffc3588
 gcr.io/iree-oss/android@sha256:d349a3d137d0ed0f7360af16096db682da0233679cdbb00a326150149e3c4fa4
diff --git a/build_tools/riscv/riscv_bootstrap.sh b/build_tools/riscv/riscv_bootstrap.sh
index ee71b46..fe7ca0f 100755
--- a/build_tools/riscv/riscv_bootstrap.sh
+++ b/build_tools/riscv/riscv_bootstrap.sh
@@ -26,8 +26,8 @@
   RISCV_CLANG_TOOLCHAIN_FILE_NAME="toolchain_iree_manylinux_2_28_20231012.tar.gz"
   RISCV_CLANG_TOOLCHAIN_FILE_SHA="3af56a58551ed5ae7441214822461a5368fee9403d7c883762fa902489bfbff0"
 
-  QEMU_FILE_NAME="qemu-riscv.tar.gz"
-  QEMU_FILE_SHA="6e0bca77408e606add8577d6f1b6709f6ef3165b0e241ed2ba191183dfc931ec"
+  QEMU_FILE_NAME="qemu-riscv_8.1.2_manylinux_2.28_20231026.tar.gz"
+  QEMU_FILE_SHA="dd77b39820d45b80bafab9155581578b4c625cb92fd6db9e9adbb9798fde3597"
 
   TOOLCHAIN_PATH_PREFIX=${PREBUILT_DIR}/toolchain/clang/linux/RISCV
   QEMU_PATH_PREFIX=${PREBUILT_DIR}/qemu/linux/RISCV