)]}'
{
  "commit": "d28bde072267460cc8680bb736b8e625d87eeb7e",
  "tree": "a04dde39f4715a2b29da4761b65a46f9c9adb1b1",
  "parents": [
    "707495c9dda43cebc685606ea32c95eb99503b67"
  ],
  "author": {
    "name": "Alex Van Damme",
    "email": "atv@google.com",
    "time": "Tue Sep 09 10:15:17 2025 -0700"
  },
  "committer": {
    "name": "Alex Van Damme",
    "email": "atv@google.com",
    "time": "Tue Sep 16 17:52:23 2025 -0700"
  },
  "message": "feat(spi2tlul): Implement efficient bulk data transfers\n\nImplements a high-throughput bulk data transfer mechanism for the\nSpi2TLUL bridge. The previous implementation relied on single-byte\nread/write operations to the data buffer port, which was inefficient\nfor large data transfers due to the overhead of sending an address\nfor every byte.\n\nThis change introduces dedicated bulk read and write ports. A single\nSPI command can now initiate a transfer of up to 256 bytes,\nsignificantly improving data throughput for tasks like loading programs\nor model weights.\n\nKey changes include:\n- A new command-decoding FSM in the Spi2TLUL Chisel module to\n  distinguish between single-register access and bulk transfers.\n- A robust, double-buffered MISO path to prevent data loss during\n  back-to-back SPI transactions.\n- New `new_bulk_write` and `new_bulk_read` methods in the Python\n  `SPIMaster` test utility.\n- Enumerations for SPI register addresses and commands in the Python\n  test utilities for improved readability and maintainability.\n- Comprehensive cocotb tests verifying the new bulk transfer modes,\n  including a stress test for transfers up to 64KB.\n\nChange-Id: I72c614fadb5620c86a4150bedffef14857f47217\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "a134f9371a8cfa80458927cd8596a06b429c94cc",
      "old_mode": 33188,
      "old_path": "hdl/chisel/src/bus/Spi2TLUL.scala",
      "new_id": "8cb60276673fb11d3c34da53368499439ecddb1c",
      "new_mode": 33188,
      "new_path": "hdl/chisel/src/bus/Spi2TLUL.scala"
    },
    {
      "type": "modify",
      "old_id": "89b0269393ec988f9ec2f63b2f5e145eff7ad282",
      "old_mode": 33188,
      "old_path": "kelvin_test_utils/BUILD",
      "new_id": "06b6f252c070b86e6e2d628b7afd2ea741cd0b23",
      "new_mode": 33188,
      "new_path": "kelvin_test_utils/BUILD"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "197e63fc474c8fdc818d8ede4909509d46782b40",
      "new_mode": 33188,
      "new_path": "kelvin_test_utils/spi_constants.py"
    },
    {
      "type": "modify",
      "old_id": "32fe33e9b1ef1dd44a86736b1d121ab3b2039428",
      "old_mode": 33188,
      "old_path": "kelvin_test_utils/spi_master.py",
      "new_id": "060fba59b569947743461a68fa2c7e587bee40dd",
      "new_mode": 33188,
      "new_path": "kelvin_test_utils/spi_master.py"
    },
    {
      "type": "modify",
      "old_id": "e659183c9fc029a214798419cd7f4957845a2c33",
      "old_mode": 33188,
      "old_path": "tests/cocotb/tlul/BUILD",
      "new_id": "c8f468306e9842ad35a22ec767d7374ef703347f",
      "new_mode": 33188,
      "new_path": "tests/cocotb/tlul/BUILD"
    },
    {
      "type": "modify",
      "old_id": "0b4059b98bab7facd70aa5afc2a3353225e0319f",
      "old_mode": 33188,
      "old_path": "tests/cocotb/tlul/test_spi_to_tlul.py",
      "new_id": "419d68e7c4b89b20551300a1f834e13f15faa02c",
      "new_mode": 33188,
      "new_path": "tests/cocotb/tlul/test_spi_to_tlul.py"
    }
  ]
}
