)]}'
{
  "commit": "3b994d2852b7875987ac69713e2602b565f2d181",
  "tree": "0ce0c0736db70a80e6051ea1381eae7ea442335e",
  "parents": [
    "5e50441e01568600c0a56b0a9f753ba3007b29cc"
  ],
  "author": {
    "name": "Steven Lee",
    "email": "steven_lee@aspeedtech.com",
    "time": "Thu Jun 04 16:17:10 2026 +0800"
  },
  "committer": {
    "name": "Steven Lee",
    "email": "steven_lee@aspeedtech.com",
    "time": "Fri Jul 24 12:41:07 2026 +0800"
  },
  "message": "Decouple the I3C ISR from thread-owned state\n\nThe ISR no longer fabricates a \u0026mut over any thread-owned object. The\nper-bus registry now parks an IsrCtx (an ISR-side register handle plus\nthe role flag) instead of a raw context pointer, and the service routine\nworks exclusively through \u0026self register methods, per-bus ISR_EVENTS\natomics, and the global IBI rings. Master transfer completion follows\nthe SMC flag-and-defer model: the ISR masks the completion sources and\nlatches the status; the polling thread drains the response queue into\nits own transfer and re-enables the sources. Target-mode completions\nand the master-assigned dynamic address move into the per-bus event\nblock; ISR-side halt/resume recovery (which needs the wait policy) is\ndeferred to the thread as a fault flag.\n\nThis dissolves the machinery the old design needed: the curr_xfer\nAtomicPtr handoff and its unsafe reconstruction, I3cXfer\u0027s completion\nflag, and the pinned \u0027static I3cCore (with its singleton! storage and\nPin plumbing) are all gone. The controller is a plain owned value with\nzero unsafe; in-flight transfer overlap is structurally impossible\nbecause the transfer never leaves the thread.\n\nThe controller borrows its I3cConfig (\u0026\u0027c mut) rather than owning it:\nthe config embeds ~0.5 KiB of device tables, and the typestate\ntransition moves the controller by value, so owning the config would\ntransiently stack multiple copies and overflow the 2 KiB kernel\nbootstrap stack (observed as a silent hang during bring-up on the EVB).\nBorrowing keeps exactly one config alive in the caller\u0027s frame, the\nsame footprint as the validated pre-rework layout, and matches the I2C\ndriver\u0027s caller-owned-resource convention.\n\nBehavioral deltas from the reference ISR, all thread-visible only:\nSIR address validation moves from the ISR to the consumer (which\nalready validates), and target error recovery runs at the next\noperation instead of inside the interrupt.\n\nVerified on a two-board AST1060 setup: the dual-device IBI exchange\ntest passes 10/10 exchanges.\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "2a52499ad8fdc6c289982fc0fa02beb2ca5628f7",
      "old_mode": 33188,
      "old_path": "target/ast10x0/peripherals/i3c/config.rs",
      "new_id": "d3a1caa956627142a36b55651718e6fe03400b6d",
      "new_mode": 33188,
      "new_path": "target/ast10x0/peripherals/i3c/config.rs"
    },
    {
      "type": "modify",
      "old_id": "71cd71bef229d77d876a26cd27130bea19e3a1c8",
      "old_mode": 33188,
      "old_path": "target/ast10x0/peripherals/i3c/controller.rs",
      "new_id": "9593e4123d5b0b58a1aa2eb63fb3c52cd29e99d7",
      "new_mode": 33188,
      "new_path": "target/ast10x0/peripherals/i3c/controller.rs"
    },
    {
      "type": "modify",
      "old_id": "98e639ed70c60cf02dd938375a7d4fcb088d4a37",
      "old_mode": 33188,
      "old_path": "target/ast10x0/peripherals/i3c/hardware.rs",
      "new_id": "6d98d349f04caf92697804100fbd344cd156a3ad",
      "new_mode": 33188,
      "new_path": "target/ast10x0/peripherals/i3c/hardware.rs"
    },
    {
      "type": "modify",
      "old_id": "e44de6cc339a6169bf858f4ed0dc3b01e59bc50e",
      "old_mode": 33188,
      "old_path": "target/ast10x0/peripherals/i3c/ibi.rs",
      "new_id": "8ae17d13a43ac6d30d303b5cdd70f4336ac4db2a",
      "new_mode": 33188,
      "new_path": "target/ast10x0/peripherals/i3c/ibi.rs"
    },
    {
      "type": "modify",
      "old_id": "f96ce5e0d7c030ec6f757553411cd55d288bd1a9",
      "old_mode": 33188,
      "old_path": "target/ast10x0/peripherals/i3c/mod.rs",
      "new_id": "635b9844d89d16df81c7d8b00599f4385595da57",
      "new_mode": 33188,
      "new_path": "target/ast10x0/peripherals/i3c/mod.rs"
    },
    {
      "type": "modify",
      "old_id": "d11e41ca4734732bff053029e206421ec2b887a9",
      "old_mode": 33188,
      "old_path": "target/ast10x0/peripherals/i3c/registers.rs",
      "new_id": "2e7c447085699c3a7960942476c6441d69f5d026",
      "new_mode": 33188,
      "new_path": "target/ast10x0/peripherals/i3c/registers.rs"
    },
    {
      "type": "modify",
      "old_id": "6955a7c90e210d110cab247c5b18580cc503782c",
      "old_mode": 33188,
      "old_path": "target/ast10x0/peripherals/i3c/types.rs",
      "new_id": "70d91cd317362883521ebffcabac6495d87d5dfd",
      "new_mode": 33188,
      "new_path": "target/ast10x0/peripherals/i3c/types.rs"
    },
    {
      "type": "modify",
      "old_id": "a5807ce0bc232cb3f8cc46ed3f0c128c8b4596a6",
      "old_mode": 33188,
      "old_path": "target/ast10x0/tests/peripherals/i3c/i3c_init/target.rs",
      "new_id": "0e9f6f78705b10e7ac2ce7a5050d4dbcfd9227ba",
      "new_mode": 33188,
      "new_path": "target/ast10x0/tests/peripherals/i3c/i3c_init/target.rs"
    },
    {
      "type": "modify",
      "old_id": "af22bced5251986192bed4aba9a49eaf882ee9b6",
      "old_mode": 33188,
      "old_path": "target/ast10x0/tests/peripherals/i3c/i3c_irq/slave_target.rs",
      "new_id": "a8838bde48995ad7c9d8dddbfd00a01a5d5f207e",
      "new_mode": 33188,
      "new_path": "target/ast10x0/tests/peripherals/i3c/i3c_irq/slave_target.rs"
    },
    {
      "type": "modify",
      "old_id": "095f0a80d9898ef89c60da22bdfe02d716a151ac",
      "old_mode": 33188,
      "old_path": "target/ast10x0/tests/peripherals/i3c/i3c_irq/target.rs",
      "new_id": "030518057a87daac57d84ce195c6ddb071142908",
      "new_mode": 33188,
      "new_path": "target/ast10x0/tests/peripherals/i3c/i3c_irq/target.rs"
    }
  ]
}
