)]}'
{
  "commit": "5a939934a8a92dc1f58e99a3bb4e2ff1f701e838",
  "tree": "b8e6e1decc0dbd10b5bbb2ef64fe98a3872d4dc6",
  "parents": [
    "efab607b8b738224c27b5e9e6410f8c74da43373"
  ],
  "author": {
    "name": "HiFiPhile",
    "email": "admin@hifiphile.com",
    "time": "Sun Oct 11 20:32:40 2026 +0200"
  },
  "committer": {
    "name": "HiFiPhile",
    "email": "admin@hifiphile.com",
    "time": "Sun Oct 11 20:32:48 2026 +0200"
  },
  "message": "lpc43: FLASH_BANK\u003dB links into flash bank B; hfp runs lpcxpresso43s67 from it\n\nThe hfp rig\u0027s lpcxpresso43s67 executes corrupted instruction fetches from flash bank A:\none bit of a fetched halfword reads 0 (push {r4-r9,lr} run as push {r4,r5,r7-r9,lr},\nmov r0,r6 run as mov r0,r2), giving the random HardFaults and silent stalls behind its\n1-4 failed examples per HIL run. A USB-free stress firmware reproduces it at ~1 error/s\nfrom bank A, and finds none in RAM or in bank B over millions of iterations; J-Link also\nfails verifying bank A sector 0. CI reflashes that sector for every example, well past\nthe 10k-cycle endurance.\n\n- hw/bsp/lpc43: FLASH_BANK\u003dA|B (CMake and Make, default A, byte-identical to before).\n  The board linker scripts place code through REGION_ALIAS(\"FlashCode\") from\n  linker/flash_bank_\u003cA|B\u003e/lpc43_flash_bank.ld (GNU ld and lld via -L); IAR gets\n  linker/lpc43xx_iflash_bank_b.icf.\n- tools/lpc_vector_checksum.py patches the boot checksum (vector word 7) into bank-B\n  images: J-Link patches it at bank A only. It refuses an address that holds no vector\n  table. Run as a CMake POST_BUILD step and the new make POST_LINK hook;\n  .DELETE_ON_ERROR keeps a failed hook from leaving an unpatched ELF up to date.\n- The boot ROM boots bank B only while bank A holds no valid image (UM10503 5.3.1), and\n  any bank-A load makes it valid again. The jlink flasher takes an opt-in roster\n  \"erase\" list of ranges erased before every load, and refuses an image that loads\n  into one (a stale bank-A build would re-validate the bank).\n- test/hil/hfp.json: lpcxpresso43s67 builds with FLASH_BANK\u003dB and erases bank A\n  sector 0 before each load.\n- tools/change_impact.py rule 16c: a tools/ script a family.cmake runs selects that\n  family\u0027s builds and boards.\n\nVerified on the rig: hfp suite 14/14 with usbtest 30/30 on gcc (5 runs) and IAR bank-B\nbuilds, including the run after a bank-A image re-validated bank A; clang/lld bank-B\nboard_test and usbtest build and boot; all 43 examples build for gcc and IAR with\nFLASH_BANK\u003dB; code size for the default build 43/43 unchanged.\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "fdff4f84eab380bfe5003734e3d3840745ddddaf",
      "old_mode": 33188,
      "old_path": ".pre-commit-config.yaml",
      "new_id": "0020a4fbcd0ddf28c8a0633fafc99efddea92c0a",
      "new_mode": 33188,
      "new_path": ".pre-commit-config.yaml"
    },
    {
      "type": "modify",
      "old_id": "90dbabc6e847fcc459680a0aea1984e7df854ba3",
      "old_mode": 33188,
      "old_path": "docs/reference/hil_boards.md",
      "new_id": "987e5eed1a2d38d913135437b1af914cf21f627b",
      "new_mode": 33188,
      "new_path": "docs/reference/hil_boards.md"
    },
    {
      "type": "modify",
      "old_id": "3463cad482b810c6258f8506d4d081e12d7aae2b",
      "old_mode": 33188,
      "old_path": "examples/build_system/make/toolchain/gcc_rules.mk",
      "new_id": "4cf5b56995190aae4ced9bae6748ce50d8d411b5",
      "new_mode": 33188,
      "new_path": "examples/build_system/make/toolchain/gcc_rules.mk"
    },
    {
      "type": "modify",
      "old_id": "002dcaaedde1e593d3dfec65f1f3ceb43b68c953",
      "old_mode": 33188,
      "old_path": "hw/bsp/lpc43/boards/ea4357/lpc4357.ld",
      "new_id": "7fc9f1c0de28d9f59a52f80510eea87357a62215",
      "new_mode": 33188,
      "new_path": "hw/bsp/lpc43/boards/ea4357/lpc4357.ld"
    },
    {
      "type": "modify",
      "old_id": "f19350e00d24fc5e3a9322b56b888ff408085e91",
      "old_mode": 33188,
      "old_path": "hw/bsp/lpc43/boards/lpcxpresso43s67/lpc4367.ld",
      "new_id": "21c106edcdff6d8cf05475d1fdf659f52e2c58e8",
      "new_mode": 33188,
      "new_path": "hw/bsp/lpc43/boards/lpcxpresso43s67/lpc4367.ld"
    },
    {
      "type": "modify",
      "old_id": "878b0eeccd03403813f55a6c67158c5f4a14ca8a",
      "old_mode": 33188,
      "old_path": "hw/bsp/lpc43/family.cmake",
      "new_id": "a8b569c77ef0a4c6f2216dba1b4e7c46beabd2a2",
      "new_mode": 33188,
      "new_path": "hw/bsp/lpc43/family.cmake"
    },
    {
      "type": "modify",
      "old_id": "5813dfdcc1e0f68a3ec62632de120551f1e148e5",
      "old_mode": 33188,
      "old_path": "hw/bsp/lpc43/family.mk",
      "new_id": "486a3b6bbaaaa69c8a8f7e3cb265bc89ce5340d0",
      "new_mode": 33188,
      "new_path": "hw/bsp/lpc43/family.mk"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "4c4a341d108b09346c74478e2c7c580410552ed6",
      "new_mode": 33188,
      "new_path": "hw/bsp/lpc43/linker/flash_bank_A/lpc43_flash_bank.ld"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "dfff14f2723ea9a13f39c6c288773115e5f5e879",
      "new_mode": 33188,
      "new_path": "hw/bsp/lpc43/linker/flash_bank_B/lpc43_flash_bank.ld"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "4a0bfe9475178c6c8e12003743c43bcb91ae2bfa",
      "new_mode": 33188,
      "new_path": "hw/bsp/lpc43/linker/lpc43xx_iflash_bank_b.icf"
    },
    {
      "type": "modify",
      "old_id": "de9c37b3a03d7e7dca7e0b1544441f38d980b51d",
      "old_mode": 33188,
      "old_path": "test/hil/hfp.json",
      "new_id": "20681cf161082bc6e14098b9eadfcbda52c8e616",
      "new_mode": 33188,
      "new_path": "test/hil/hfp.json"
    },
    {
      "type": "modify",
      "old_id": "22872aed7a4e559f189c2632b928d3ee907c72e2",
      "old_mode": 33261,
      "old_path": "test/hil/hil_flash.py",
      "new_id": "ae56e0fe727c1cddfeb5c363827b6fe99a18df00",
      "new_mode": 33261,
      "new_path": "test/hil/hil_flash.py"
    },
    {
      "type": "modify",
      "old_id": "66a210e3e8984d445e48dbf1087700c566d54a02",
      "old_mode": 33261,
      "old_path": "test/hil/hil_test.py",
      "new_id": "75766e98019b04cc5c73225de839bfa93e48e239",
      "new_mode": 33261,
      "new_path": "test/hil/hil_test.py"
    },
    {
      "type": "modify",
      "old_id": "a03499c9d0add2acf1d0eda709dcd1aa7dfb7371",
      "old_mode": 33188,
      "old_path": "test/hil/test/test_change_impact.py",
      "new_id": "2513ee2be9a6a5686a019095e6790b43d44ea83e",
      "new_mode": 33188,
      "new_path": "test/hil/test/test_change_impact.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "98f658968c318d89bf909be3fb96d35608035923",
      "new_mode": 33188,
      "new_path": "test/hil/test/test_lpc_vector_checksum.py"
    },
    {
      "type": "modify",
      "old_id": "301151c8554fd2b437fffe5b7764c5bbed564644",
      "old_mode": 33261,
      "old_path": "tools/change_impact.py",
      "new_id": "25298b481ca6590702abb6357db208fd10d4dca6",
      "new_mode": 33261,
      "new_path": "tools/change_impact.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "eafac09a8a92363241e59afde2733d9c645dd4c9",
      "new_mode": 33188,
      "new_path": "tools/lpc_vector_checksum.py"
    }
  ]
}
