[earlgrey] qemu: bump pin to v10.2.0-2026-06-14; enable UART + GPIO qemu tests

Bump the pinned lowRISC QEMU release in third_party/qemu/extensions.bzl
from v10.2.0-2026-01-15 to v10.2.0-2026-06-14.

Eenable previously stubbed-out earlgrey qemu tests:

  - //target/earlgrey/tests/uart:uart_qemu_test
  - //target/earlgrey/tests/drivers/gpio:gpio_qemu_test

Signed-off-by: Miguel Osorio <miguelosorio@google.com>
diff --git a/.bazelrc b/.bazelrc
index 243efa8..98938f8 100644
--- a/.bazelrc
+++ b/.bazelrc
@@ -103,3 +103,8 @@
 test:stress_k_ast1060_evb   --run_under="//target/ast10x0/harness:test_runner \
   --timeout 0 "
 test:stress_k_ast1060_evb   --test_env=AST1060_EVB_PI_HOST
+
+# Site-local overrides. Kept last so developer machine-specific settings (e.g. a
+# local QEMU source override via --override_repository) take precedence. This
+# file is not checked in; see third_party/qemu/setup.md.
+try-import %workspace%/.bazelrc-site
diff --git a/.gitignore b/.gitignore
index 1195f04..cd2a2e9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,6 +1,7 @@
 # Build
 rust-project.json
 user.bazelrc
+.bazelrc-site
 /bazel-*
 /out
 target/rust-analyzer/
diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock
index 23e5784..090c996 100644
--- a/MODULE.bazel.lock
+++ b/MODULE.bazel.lock
@@ -555,7 +555,7 @@
     },
     "//third_party/qemu:extensions.bzl%qemu": {
       "general": {
-        "bzlTransitiveDigest": "vYbS6zbBSUEYrJr8ZFwTQQ36P+gfjwYHsC6c3Of1Mbw=",
+        "bzlTransitiveDigest": "Rd1333rjuzM1bQseVI6A3PGgXNZR96GehAsbuOML4F8=",
         "usagesDigest": "sd4NrZaNp1CVFJ9pAaTO/LvX7gn0a5KpGnmBklHnLK4=",
         "recordedFileInputs": {},
         "recordedDirentsInputs": {},
@@ -564,9 +564,9 @@
           "qemu_opentitan_src": {
             "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive",
             "attributes": {
-              "url": "https://github.com/lowRISC/qemu/releases/download/v10.2.0-2026-01-15/qemu-ot-earlgrey-v10.2.0-2026-01-15-x86_64-unknown-linux-gnu.tar.gz",
+              "url": "https://github.com/lowRISC/qemu/releases/download/v10.2.0-2026-06-14/qemu-ot-earlgrey-v10.2.0-2026-06-14-x86_64-unknown-linux-gnu.tar.gz",
               "build_file": "@@//third_party/qemu:BUILD.qemu_opentitan.bazel",
-              "sha256": "9e97f93b09912c904e84f06571e7b49023ccb405dd3caa232ad1e82a3f7b381c",
+              "sha256": "0162acd6a5d262669910592304cd7771a4b4944889305357a22dcf10706dab36",
               "patch_cmds": [
                 "touch .this.is.the.archive"
               ]
diff --git a/target/earlgrey/tests/drivers/gpio/BUILD.bazel b/target/earlgrey/tests/drivers/gpio/BUILD.bazel
index d1e737b..453b5a3 100644
--- a/target/earlgrey/tests/drivers/gpio/BUILD.bazel
+++ b/target/earlgrey/tests/drivers/gpio/BUILD.bazel
@@ -91,5 +91,10 @@
     target = ":gpio",
 )
 
-# TODO: QEMU ot-earlgrey machine has no ot_gpio device model — DIRECT_OUT reads
-# return 0. Re-enable when upstream lowRISC QEMU lands ot_gpio emulation.
+opentitan_test(
+    name = "gpio_qemu_test",
+    timeout = "moderate",
+    interface = "qemu",
+    tags = ["qemu"],
+    target = ":gpio",
+)
diff --git a/target/earlgrey/tests/uart/BUILD.bazel b/target/earlgrey/tests/uart/BUILD.bazel
index ae5b0a4..c14f2f4 100644
--- a/target/earlgrey/tests/uart/BUILD.bazel
+++ b/target/earlgrey/tests/uart/BUILD.bazel
@@ -142,6 +142,10 @@
     target = ":uart",
 )
 
-# TODO: QEMU ot-earlgrey machine doesn't fire UART1 RX-watermark interrupts —
-# the loopback test hangs waiting for an interrupt that never arrives.
-# Re-enable when lowRISC QEMU validates interrupt-driven UART under ot-earlgrey.
+opentitan_test(
+    name = "uart_qemu_test",
+    timeout = "moderate",
+    interface = "qemu",
+    tags = ["qemu"],
+    target = ":uart",
+)
diff --git a/third_party/qemu/extensions.bzl b/third_party/qemu/extensions.bzl
index 464119f..1355979 100644
--- a/third_party/qemu/extensions.bzl
+++ b/third_party/qemu/extensions.bzl
@@ -3,7 +3,7 @@
 # SPDX-License-Identifier: Apache-2.0
 #
 # Ported from opentitan/third_party/qemu/extensions.bzl.
-# Pinned to QEMU tag v10.2.0-2026-01-15.
+# Pinned to QEMU tag v10.2.0-2026-06-14.
 
 load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
 
@@ -84,7 +84,7 @@
 )
 
 def _qemu_opentitan_repos():
-    QEMU_VERSION = "v10.2.0-2026-01-15"
+    QEMU_VERSION = "v10.2.0-2026-06-14"
 
     url = "/".join([
         "https://github.com/lowRISC/qemu/releases/download",
@@ -96,7 +96,7 @@
         name = "qemu_opentitan_src",
         url = url,
         build_file = Label(":BUILD.qemu_opentitan.bazel"),
-        sha256 = "9e97f93b09912c904e84f06571e7b49023ccb405dd3caa232ad1e82a3f7b381c",
+        sha256 = "0162acd6a5d262669910592304cd7771a4b4944889305357a22dcf10706dab36",
         patch_cmds = ["touch {}".format(_ARCHIVE_MARKER_FILE)],
     )