)]}'
{
  "commit": "eb06fecc8d96f441305d96cac9a91ddfd7a314e3",
  "tree": "496c4e4c70bbce76ac69750f7f2fd2aa12d20fc3",
  "parents": [
    "55cf2ea0b9b2ac69c62b53915899f685e331d485"
  ],
  "author": {
    "name": "Miguel Osorio",
    "email": "miguelosorio@google.com",
    "time": "Thu May 21 15:05:07 2026 -0700"
  },
  "committer": {
    "name": "Miguel O",
    "email": "migue48@gmail.com",
    "time": "Thu May 28 14:51:30 2026 -0700"
  },
  "message": "[earlgrey] add QEMU support\n\nWire the lowRISC QEMU ot-earlgrey machine into target/earlgrey as a\ntarget (parallel to verilator). QEMU runs ~50x faster\nthan verilator (2.6s vs minutes) and is part of the earlgrey_qemu_tests\nworkflow within ci so the tests run on every PR.\n\nActive QEMU tests:\n- //target/earlgrey/tests/ipc/user:ipc_runner_qemu_test        PASS 2.6s\n- //target/earlgrey/tests/threads/kernel:threads_runner_qemu_test  PASS 12.5s\n50/50 stability runs, zero flakes.\n\nBuild changes:\n- third_party/qemu/: lowRISC QEMU release archive pinned to\n  v10.2.0-2026-01-15; hermetic pip-parse for hjson + pyelftools\n  (@openprot_python_deps, Bazel-managed Python 3.11).\n- third_party/opentitan_rtl/: vendored RTL constants for cfggen.\n  RMA OTP vmem consumed from @opentitan_devbundle (no local copy).\n- target/earlgrey/tooling/qemu.bzl: qemu_cfg / qemu_otp / qemu_flash\n  rules + pure-function helpers callable from opentitan_runner.bzl.\n- target/earlgrey/tooling/qemu_runner.py + qemu_start.sh: Python\n  harness with HMP cont, UART Unix-socket reader, pw_tokenizer\n  detokenization, SIGTERM-safe cleanup.\n\nTarget glue:\n- target_type\u003dqemu added; entry.rs .fake_rom_ext cfg widened from\n  `verilator` to `any(verilator, qemu)`.\n  Silicon ROM delta verified at 0 bytes.\n- config.rs gets qemu SYSTEM_CLOCK_HZ \u003d 24_000_000 (matches\n  opentitan/sw/device/lib/arch/device_sim_qemu.c).\n- opentitan_runner.bzl gains interface\u003d\"qemu\" branch with _QEMU_ATTRS\n  separated from _BASE_ATTRS to avoid testonly contamination of\n  non-test opentitan_runner targets. interface attr gained values\u003d[...]\n  constraint.\n\nCI: new earlgrey_qemu_tests workflow added to workflows.json, wired\ninto ci group; ci_tests filters now exclude -qemu to prevent\ndouble-counting.\n\nSigned-off-by: Miguel Osorio \u003cmiguelosorio@google.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "e90698a28839d685787a04f6716a20b2ec3fca5d",
      "old_mode": 33188,
      "old_path": ".gitignore",
      "new_id": "1195f04aca4a20b639deac63ae6535ca64066ced",
      "new_mode": 33188,
      "new_path": ".gitignore"
    },
    {
      "type": "modify",
      "old_id": "065bb35bf23d2688c6369bc51dde34862899e34f",
      "old_mode": 33188,
      "old_path": "MODULE.bazel",
      "new_id": "332ce626587bf7c0b934961f6fc2179c41d5b34d",
      "new_mode": 33188,
      "new_path": "MODULE.bazel"
    },
    {
      "type": "modify",
      "old_id": "a3a6cfa678ef4e8c68452624603585d469822344",
      "old_mode": 33188,
      "old_path": "MODULE.bazel.lock",
      "new_id": "8a91f250ded49a8f05bab1da7068640b1c3a2ae0",
      "new_mode": 33188,
      "new_path": "MODULE.bazel.lock"
    },
    {
      "type": "modify",
      "old_id": "cfc9ce95c9d8664d1356b820807dbcff442cf89b",
      "old_mode": 33188,
      "old_path": "presubmit/license.py",
      "new_id": "055d4fe4ee200fdd77bba4ae5bbe3409e8253f10",
      "new_mode": 33188,
      "new_path": "presubmit/license.py"
    },
    {
      "type": "modify",
      "old_id": "4dd3c83ed0593288f5646e5fad1085c02132bb20",
      "old_mode": 33188,
      "old_path": "target/earlgrey/BUILD.bazel",
      "new_id": "43cafb56f9ad78cab2ba52eb91ef5e593e6acce2",
      "new_mode": 33188,
      "new_path": "target/earlgrey/BUILD.bazel"
    },
    {
      "type": "modify",
      "old_id": "64312f258b60a8a794e56e1b63e221d48d5e335e",
      "old_mode": 33188,
      "old_path": "target/earlgrey/README.md",
      "new_id": "38deb0ac0c74de9d445e7e3e7e0f4462ed46d79c",
      "new_mode": 33188,
      "new_path": "target/earlgrey/README.md"
    },
    {
      "type": "modify",
      "old_id": "0125590be4cdff6db22706a669dd82fa5a7b2f9a",
      "old_mode": 33188,
      "old_path": "target/earlgrey/config.rs",
      "new_id": "80f994455a2661de9fbbf4555fec9c24b289be60",
      "new_mode": 33188,
      "new_path": "target/earlgrey/config.rs"
    },
    {
      "type": "modify",
      "old_id": "99ec235a0e5ab1ba0216a13d9501e310d9810891",
      "old_mode": 33188,
      "old_path": "target/earlgrey/entry.rs",
      "new_id": "d7b39f3e5c5ed116b2a1dab719baa257737ad8c8",
      "new_mode": 33188,
      "new_path": "target/earlgrey/entry.rs"
    },
    {
      "type": "modify",
      "old_id": "edf85737e8fa9af455c17011c3d77fed4eb7a859",
      "old_mode": 33188,
      "old_path": "target/earlgrey/syscall_latency/BUILD.bazel",
      "new_id": "1db2c523adfd100b09f9d2bdebc1704108dd02e2",
      "new_mode": 33188,
      "new_path": "target/earlgrey/syscall_latency/BUILD.bazel"
    },
    {
      "type": "modify",
      "old_id": "d9899898183d45b2bee7c45fc4adbb3e0819210e",
      "old_mode": 33188,
      "old_path": "target/earlgrey/syscall_latency/main.rs",
      "new_id": "f96026d099a326c5defdc047482d2b9659c61380",
      "new_mode": 33188,
      "new_path": "target/earlgrey/syscall_latency/main.rs"
    },
    {
      "type": "modify",
      "old_id": "12f26dcc722c703a3e348a47dd7f5577b78752a1",
      "old_mode": 33188,
      "old_path": "target/earlgrey/tests/drivers/gpio/BUILD.bazel",
      "new_id": "d1e737b930f3e468a6f8169d24ece5446821e437",
      "new_mode": 33188,
      "new_path": "target/earlgrey/tests/drivers/gpio/BUILD.bazel"
    },
    {
      "type": "modify",
      "old_id": "c2f2ac8d0bcee9d225cae1522367fb4b89558b97",
      "old_mode": 33188,
      "old_path": "target/earlgrey/tests/ipc/user/BUILD.bazel",
      "new_id": "0d7946e1feaa3e780fabdf1673297ac20aec9197",
      "new_mode": 33188,
      "new_path": "target/earlgrey/tests/ipc/user/BUILD.bazel"
    },
    {
      "type": "modify",
      "old_id": "e8d84e2e848655405beb4b984a1a3936ef4262a3",
      "old_mode": 33188,
      "old_path": "target/earlgrey/tests/threads/kernel/BUILD.bazel",
      "new_id": "63ba1871edd4de081c5136492a69141c408f1d0b",
      "new_mode": 33188,
      "new_path": "target/earlgrey/tests/threads/kernel/BUILD.bazel"
    },
    {
      "type": "modify",
      "old_id": "8b07ea45df58bffa527003554c9bdf08c0131c7b",
      "old_mode": 33188,
      "old_path": "target/earlgrey/tests/uart/BUILD.bazel",
      "new_id": "ae5b0a40078135e4bee922a30c168c696a1d2abc",
      "new_mode": 33188,
      "new_path": "target/earlgrey/tests/uart/BUILD.bazel"
    },
    {
      "type": "modify",
      "old_id": "10a2f11461175bf171653c45cf16b7e0aec049cd",
      "old_mode": 33188,
      "old_path": "target/earlgrey/tooling/BUILD.bazel",
      "new_id": "f2bfe649191fc6af6822c2f3bae0152afb1d31f1",
      "new_mode": 33188,
      "new_path": "target/earlgrey/tooling/BUILD.bazel"
    },
    {
      "type": "modify",
      "old_id": "fcde8db6005ec70bb275227cbab3cb71a570ee80",
      "old_mode": 33188,
      "old_path": "target/earlgrey/tooling/opentitan_runner.bzl",
      "new_id": "81042bb6dab17e4839be4b5d88fd01571e49d6ab",
      "new_mode": 33188,
      "new_path": "target/earlgrey/tooling/opentitan_runner.bzl"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "b411b05e449a30965021c6128ca1544e73537ba2",
      "new_mode": 33188,
      "new_path": "target/earlgrey/tooling/qemu.bzl"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "b3927be5ff5d8eeb6ff4711a908c0c44e26e78b8",
      "new_mode": 33261,
      "new_path": "target/earlgrey/tooling/qemu_cfg_gen.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "e33fe2f9cbc2e696401609193148e7458621b91f",
      "new_mode": 33261,
      "new_path": "target/earlgrey/tooling/qemu_constants_dumper.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "1efdf7d3cc6f0b3dc295424c9da0c3270f9688c0",
      "new_mode": 33188,
      "new_path": "target/earlgrey/tooling/qemu_runner.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "6d8b8e9e6ef08b4a1142371c1a562bc432255b64",
      "new_mode": 33261,
      "new_path": "target/earlgrey/tooling/qemu_start.sh"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "86712aad4a85d172188f4ecd8ced2f6fb54762c6",
      "new_mode": 33188,
      "new_path": "third_party/opentitan_rtl/BUILD.bazel"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "c26945b99ed6222ee55ebb50352a1baf5a306ed2",
      "new_mode": 33188,
      "new_path": "third_party/opentitan_rtl/VENDORED_FROM.md"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "5e003bd993fdb40f0550f095f0676b64492e1cf8",
      "new_mode": 33188,
      "new_path": "third_party/opentitan_rtl/qemu_constants.json"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "ff2173585e912629ca9e4090bca4899334c63fdc",
      "new_mode": 33188,
      "new_path": "third_party/qemu/BUILD"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "a55f9a4f62378ae356cbebd38966cae46289fb42",
      "new_mode": 33188,
      "new_path": "third_party/qemu/BUILD.qemu_opentitan.bazel"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "bb5c76c53ae16619d8bcd5256788bd0980bc145f",
      "new_mode": 33188,
      "new_path": "third_party/qemu/README.md"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "16c12340303154b2f69155b2e947c317efdf3633",
      "new_mode": 33261,
      "new_path": "third_party/qemu/build_qemu.sh"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "464119fd9bc127525f80f1b77a7cd67130298195",
      "new_mode": 33188,
      "new_path": "third_party/qemu/extensions.bzl"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "ab59f3e8b5239679a6380094547d941f80fc6b25",
      "new_mode": 33188,
      "new_path": "third_party/qemu/requirements.in"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "b29322da7828e905b32651013e9bb5514ff45b97",
      "new_mode": 33188,
      "new_path": "third_party/qemu/requirements.txt"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "97ba1f2e57271b64fa2378242b6e5da1ae39fce3",
      "new_mode": 33188,
      "new_path": "third_party/qemu/setup.md"
    },
    {
      "type": "modify",
      "old_id": "5d9ca2a70f14b80359159e7f96706ba930a39adf",
      "old_mode": 33188,
      "old_path": "workflows.json",
      "new_id": "261827cd0ead968f1d77092d8bd369fef9b11c65",
      "new_mode": 33188,
      "new_path": "workflows.json"
    }
  ]
}
