Skip to content

Release Candidate v2.71.1#1423

Draft
ruck314 wants to merge 17 commits into
mainfrom
pre-release
Draft

Release Candidate v2.71.1#1423
ruck314 wants to merge 17 commits into
mainfrom
pre-release

Conversation

ruck314 and others added 8 commits May 14, 2026 21:03
Each AXIL transaction previously wrote a single byte to the I2C MUX
channel-select register and assumed the device would atomically replace
the prior channel. On the BittWare XUP-VV8 this leaves enough sticky
state on TCA9548 channels 5 and 7 (QSFP slots 1 and 3) that the second
I2C transaction targeting those slots returns RESP=2 SLVERR and every
subsequent access cascades. Channels 4 and 6 (slots 0, 2) happen to
tolerate the same sequence, which made the failure look QSFP+ specific
when the actual differential is the TCA9548 channel mask.

Insert an explicit deselect-all write (0x00) before the channel-select
write. 0x00 is the documented "no channel selected" state for every
device in I2cMuxPkg.vhd (TCA9548, PCA9547, PCA9544A, PCA9546A, PCA9540B),
so the fix applies uniformly regardless of which decode map is used.

Two new states are added to the existing FSM:

  DESELECT_S  - waits for the 0x00 write to ack, then loads the saved
                target channel mask and pulses i2cRstL low again.
  MUX_RST_S   - mirrors RST_S but transitions straight to MUX_S so the
                deselect path does not re-enter DESELECT_S.

The chanMask record field carries the target channel mask through the
deselect-write phase. Flow is now:

  IDLE_S -> RST_S -> DESELECT_S -> MUX_RST_S -> MUX_S -> XBAR_S -> IDLE_S

Validated on a BittWare XUP-VV8 (VU13P) with QSFP28 in slot 0 and QSFP+
modules in slots 1, 2, 3:

  Before: slots 1 and 3 fail every transaction after the first one;
          Qsfp[1].ReadDevice() cascades into hundreds of SLVERRs.
  After:  300/300 ok on every slot in a sustained burst (~940 txn/s),
          Qsfp[i].ReadDevice() succeeds on all 4 slots, ErrorCount = 0.

The change is additive for existing surf users - the deselect step is a
single extra I2C byte write per AXIL transaction and gives every
MUX-fronted bus the same clean channel-select handshake regardless of
whether the previous downstream device left the bus in a marginal state.
Removed redundant description attribute causing software to fail
Post-PR #1421 cleanup pass focused on English-word typos in
user-facing prose, plus one small kwargs-collision fix retained
from the original audit. No behavioural change.

Net changes: 143 files, +237/-237 lines.

Python typos -- 24 files, 39 fixes
  Audited every .py under python/ and tests/ via 6 parallel review
  passes. tests/ was clean. Highlights:
    analog_devices/_Adt7420.py     Analod Deviced -> Analog Devices
    analog_devices/_Ad9249.py      Regsisters     -> Registers
    analog_devices/_Ad9249.py      Compliment     -> Complement
    silabs/_Si5{324,326,5345Lite,5394Lite}.py
                                   conflagration  -> configuration
    silabs/_Si5345Pages.py         Ready Only     -> Read Only
    ti/_Ads54J54.py                dcimation      -> decimation
    ti/_Lmk61e2.py                 retreived      -> retrieved
    xilinx/_AxiSysMonUltraScale.py Managment      -> Management
    xilinx/_AxiSysMonUltraScale.py defatul        -> default
    protocols/jesd204b/_JesdRx.py / _JesdTx.py
        brake/missaligned/Indicades/undeflow/funtionality/
        checkes/re-syncronisations -> fixed
  British spellings (synchronised, re-synchronisations)
  preserved where already used.

VHDL typos -- 119 files, 197 fixes
  Audited every .vhd under axi/, base/, devices/, dsp/, ethernet/,
  protocols/, and xilinx/ via 8 parallel review passes (1146 files
  total).

  Only -- comment text was touched. No signal, port, process,
  entity, generic, or component names were renamed; no string
  literals in report/assert statements were modified.

  Most prevalent (boilerplate copy-paste families):
    7Series GT clones (gtx7/gth7/gtp7)
        sucessfully -> successfully (x9)
        Tranceiver  -> Transceiver  (x3)
    PGP Axi banners
        Errror      -> Error        (x6)
    pgp2b/pgp2fc/pgp3 *Pkg / *RxPhy / *RxCell
        occured     -> occurred     (x10)
    XauiCore wrappers
        adn         -> and          (x16 in repeated boilerplate)
    AD9249/AD9681 readout
        primatives/primative/curDealy
                    -> primitives/primitive/curDelay
    xvc-udp JTAG
        paylod/paralle/the the     -> fixed

  Real-English-word substitutions verified per occurrence
  (not bulk-replaced):
    weather->whether, it->if, na->and, od->of, got->go,
    dessert->deassert, rests->resets, with->without, read->ready,
    an->and, save->same, though->through, knowns->knows,
    incase->in case, to to->to, the the->the, Interfac e->Interface

  Pre-flight verified that every misspelled string only appears in
  -- comment lines (never as an identifier or in code) before any
  bulk substitution. British spellings preserved.

AdcTester kwargs fix -- 1 file
  The only kwarg-hardening change retained from the post-PR #1421
  audit:
    python/surf/devices/analog_devices/_Ad9249.py
        AdcTester.__init__ accepts description as a named parameter,
        eliminating the TypeError: got multiple values for keyword
        argument 'description' when a caller passes description=.

  The other 8 wrappers identified in the original audit
  (AxiMonAxiL, Ltm4664, Si5345, Si5394, PhantomS711, PMBus,
  Pgp3AxiL, Pgp4AxiL) were prepared but reverted; they remain at
  their pre-release shape.

Verification:
  python -m compileall -f python/  -- clean
  flake8 --count python/           -- 0
  scripts/vsg_linter.sh            -- No issues found
  cocotb regression suite NOT run locally; it requires the
  make MODULES=$PWD import HDL pipeline only available in CI.
Typo cleanup: Python descriptions/comments and VHDL comments
AxiLiteCrossbarI2cMux: deselect TCA9548 channels between transactions
@ruck314 ruck314 requested a review from bengineerd May 20, 2026 15:28
ruck314 and others added 9 commits May 20, 2026 08:42
Add targeted cocotb regression coverage for FIFO pressure and recovery,
RAM collision and enable semantics, SynchronizerFifo read-enable gaps,
Arbiter starvation rotation, WatchDogRst near-timeout keepalive noise,
and SlvDelayFifo/SlvDelayRam reset and runtime-delay behavior. Document
the SlvDelayRam runtime maxCount contract in the RTL description header.

Formalize the cocotb regression test style guide in tests/README.md and
refine the CoaXPress regression docs and tests.
Deepen base regression coverage
Document SURF agent and contributor conventions
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants