SANBlaze I3C Controller — Release Notes
V1530 (April 2026)
Previous release: V1529
Summary
V1530 fixes a critical SMBus multi-chunk read bug where mi commands requesting more
than 56 bytes via the SMBus path returned the first 56 bytes repeated to fill the
requested length. The fix required a coordinated change between the firmware and the
SANBlaze i2c-tiny-usb kernel module. This release resolves the V1529 known issue
“VPD Full Read (256 bytes) — Partial Response.” All V1529 features and fixes are
preserved unchanged.
Bug Fixes
Multi-Chunk SMBus Read Returns Repeated Data (Critical)
Fixed:
mi -t 18 -T smbus -s 1 -d <slot> -o 0 -l 256(and any SMBus read requesting more than 56 bytes) returned the first 56 bytes of the response repeated to fill the full requested length. VPD data beyond the first 56 bytes was silently wrong. Shorter reads (-l 56or less, fitting in one USB chunk) were unaffected.Root cause: The SANBlaze i2c-tiny-usb kernel module splits large reads into 56-byte USB chunks and issues a separate
i2c_read_timeout_uscall per chunk in the firmware. Each call toi2c_read_timeout_usgenerates a REPEATED START condition on the I2C bus. NVMe-MI SMBus devices (including the Samsung PM1763 and Micron 9650) reset their internal read-pointer on every START/REPEATED START, so each chunk read from offset 0, returning the same first 56 bytes.Fix (firmware): On the first read chunk in I2C mode, the firmware now reads the full requested length in a single
i2c_read_timeout_uscall (one START, one STOP, no REPEATED STARTs), buffers the complete response ing_restart_read_buf, and returns the first 56 bytes. Subsequent chunk requests are served directly from the buffer with no I2C bus activity. The fix is gated to I2C mode and non-PRIVATE reads only; I3C reads are unaffected.Fix (kernel module): The SANBlaze i2c-tiny-usb kernel module was updated to send
wIndex = total message length(instead ofwIndex = chunk length) on the first read chunk of each transfer. This allows the firmware to issue the correctly-sized single I2C transaction. On subsequent chunkswIndexalso carries total length; the firmware ignores it after the first chunk since the buffer is already populated.Validated:
mi -t 18 -T smbus -s 1 -d <slot> -o 0 -l 256now returns 256 unique sequential bytes. Full VPD including Product Info Area, MultiRecord NVMe, PCIe Port, and Topology records parsed correctly on Samsung PM1763.Resolves: V1529 known issue “VPD Full Read (256 bytes) — Partial Response.”
New Features
None. This is a targeted bug-fix release.
Test Suite Updates
sb_i3c_test.sh (V28)
Fixed: TEST40 and TEST41 were skipping on V1530 firmware due to a version gate that excluded any version beyond V1529 from the manual
i3c_pollpath. The gate was written in anticipation of an autonomous IBI handler in V1530 that was subsequently deferred to V1531. The skip condition now explicitly excludes V1530 alongside V1528 and V1529, so TEST40 and TEST41 run normally on V1530.EXPECTED_VERSIONupdated from1528to1530.ACCEPTED_VERSIONSupdated to include1530.
Known Issues
None at time of release.
Upgrade Notes
Firmware binary replaces V1529 with no configuration changes required.
Kernel module updated alongside firmware as part of this release.
CLI binary (
sb_i3c) unchanged from V1529; no update required.Test script
sb_i3c_test.shmust be updated to V28 to pick up the TEST40/41 version gate fix.Python test wrappers: no changes required.