Login
BeagleBadge Requests
Login

This file holds explicit requests from bq2 to the live beaglebadge validation agent. Treat it as the repo-backed handoff channel for hardware work.

2026-05-09: Validate recv-len payload tracing

Source State To Build

Build and copy back a new BeagleBadge vendor-edge-k3 kernel artifact from the repo state containing:

The new build should be distinct from the already-tested P5248 artifact. Record the new package suffix and build summary path before installing.

Install And Test

After installing and rebooting into the new distinct artifact, run the recv-len tests sequentially to keep memory pressure low:

./scripts/test_j7_to_j6_smbus_block_proc_call.sh
./scripts/validate_j7_to_j6_testunit_features.sh

Also run the direct I2C_RDWR | I2C_M_RECV_LEN probe used for the P3659, Pa309, and P5248 comparisons.

Required Log Capture

Capture the new master-side recv-len diagnostics immediately after the direct recv-len probe:

dmesg | grep 'recv-len'

Record enough surrounding dmesg to correlate the direct probe with J6 slave-side TX traces.

What bq2 Needs From The Result

Classify the J7 master-side failure into one of these cases:

For each run, record:

2026-05-10 live validation result

Completed on BeagleBadge with distinct kernel artifact:

Classification:

Observed outputs:

Relevant master-side recv-len lines:

recv-len byte value=0x4 offset=1
recv-len count=4
recv-len byte value=0x0 offset=2
recv-len byte value=0x0 offset=3
recv-len byte value=0x0 offset=4
recv-len byte value=0x0 offset=5

Relevant J6 slave TX trace:

slave tx-requested stat=0x200 value=0x4
slave tx-processed stat=0x400 value=0x3
slave tx-processed stat=0x10 value=0x2
slave tx-processed stat=0x400 value=0x1
slave tx-processed stat=0x10 value=0x0

2026-05-10: Validate recv-len without CNT rewrite

Source State To Build

Build and copy back a new BeagleBadge vendor-edge-k3 kernel artifact from the repo state containing:

The new build should be distinct from the already-tested P7f58 payload tracing artifact. Record the new package suffix and build summary path before installing.

Purpose

P7f58 proved that J7 reaches the payload receive path but reads zeros from DATA_REG after count-byte reprogramming. This experiment avoids rewriting CNT and buf_len after the first recv-len byte. It keeps the original full-length controller transfer running while trimming msg->len so the caller should still see only 1 + count + extra bytes.

This tests whether the mid-read CNT rewrite is what makes OMAP lose the target's early non-zero payload bytes.

Install And Test

After installing and rebooting into the new distinct artifact, run:

./scripts/test_j7_to_j6_smbus_block_proc_call.sh
./scripts/validate_j7_to_j6_testunit_features.sh

Also run the direct I2C_RDWR | I2C_M_RECV_LEN probe used in the previous comparisons.

Required Log Capture

Capture the recv-len diagnostics immediately after the direct recv-len probe:

dmesg | grep 'recv-len'

What bq2 Needs From The Result

Record whether the direct recv-len userspace output changes from:

0x04 0x00 0x00 0x00 0x00

to any form containing the non-zero payload bytes:

0x04 0x03 0x02 0x01 ...

Also record whether the new recv-len count=... keep_buf_len=... log appears and what subsequent recv-len byte value=... lines show.

2026-05-10 live validation result

Completed on BeagleBadge with distinct kernel artifact:

Observed outputs:

Required new log evidence:

recv-len count=4 extra=0 remaining=4 msg_len=5 keep_buf_len=32 cnt=0x0f threshold=16
recv-len byte value=0x3 offset=2
recv-len byte value=0x2 offset=3
recv-len byte value=0x1 offset=4
recv-len byte value=0x0 offset=5

Relevant J6 slave TX trace:

slave tx-requested stat=0x200 value=0x4
slave tx-processed stat=0x400 value=0x3
slave tx-processed stat=0x10 value=0x2
slave tx-processed stat=0x400 value=0x1
slave tx-processed stat=0x10 value=0x0

Conclusion:

2026-05-10: Validate cleaned recv-len patch

Source State To Build

Build and copy back a new BeagleBadge vendor-edge-k3 kernel artifact from the repo state containing:

The new build should be distinct from Pac0a.

Purpose

Pac0a proved that keeping the original controller transfer active after the recv-len count byte restores payload bytes on true SMBus block-proc-call and direct I2C_RDWR | I2C_M_RECV_LEN.

This cleaned state preserves that behavior but removes the temporary successful-path recv-len dev_info_ratelimited() diagnostics from i2c-omap.c. The expected result is behavioral parity with Pac0a, not new raw-surrogate behavior.

Install And Test

After installing and rebooting into the new distinct artifact, run:

./scripts/test_j7_to_j6_smbus_block_proc_call.sh

Also run the direct I2C_RDWR | I2C_M_RECV_LEN probe used in the previous comparisons.

What bq2 Needs From The Result

Record:

Expected functional outputs remain:

count=4
data=0x03 0x02 0x01 0x00

and:

0x04 0x03 0x02 0x01 0x00

2026-05-11 live validation result

Completed on BeagleBadge with distinct kernel artifact:

Observed outputs:

Successful-run recv-len log check:

dmesg | grep 'recv-len'

returned no lines after the direct recv-len probe.

Conclusion:

2026-05-11: Validate J6/J7 role reversal before Zepto

Purpose

Before connecting BeagleConnect Zepto boards, validate the remaining multi-controller boundary with only the BeagleBadge J6/J7 shorted-bus setup.

The current P5910 result proves a controlled J7-initiator to J6-target path. It does not yet prove a general multi-master arbitration transport.

Keep Zepto Disconnected

For this validation pass, keep Zepto boards disconnected. The goal is to reduce the problem to the two AM62L OMAP adapters first.

Test 1: Reverse The Current Topology

Run the existing feature checks with J7 hosting slave-testunit and J6 acting as initiator:

BADGESNAKE_SLAVE_BUS=3 BADGESNAKE_MASTER_BUS=1 ./scripts/test_j7_to_j6_smbus_block_proc_call.sh
BADGESNAKE_SLAVE_BUS=3 BADGESNAKE_MASTER_BUS=1 ./scripts/validate_j7_to_j6_testunit_features.sh

Record whether:

Test 2: Two-Address Dual-Listener Setup

If Test 1 passes, try keeping both adapters target-capable on the same shorted bus at different target addresses:

Then run alternating transactions:

Record the exact commands used, outputs, and dmesg after each direction.

What bq2 Needs From The Result

Record:

2026-05-11 live validation result

Completed on BeagleBadge on the already-booted P5910 kernel:

Test 1: Reverse topology

Commands:

BADGESNAKE_SLAVE_BUS=3 BADGESNAKE_MASTER_BUS=1 ./scripts/test_j7_to_j6_smbus_block_proc_call.sh
BADGESNAKE_SLAVE_BUS=3 BADGESNAKE_MASTER_BUS=1 ./scripts/validate_j7_to_j6_testunit_features.sh

Observed result:

Relevant dmesg:

omap_i2c 20010000.i2c: slave xfer-msg stat=0x00 con=0x8400 ie=0x61f oa=0x30 sa=0x30 bufstat=0x8000 read=0 threshold=3
omap_i2c 20010000.i2c: Transmit underflow
omap_i2c 20020000.i2c: slave irq stat=0x208 ...

J7 target status after failure:

So J7 can still bind as a target, but J6 acting as initiator is not yet a working mirror of the validated J7 -> J6 direction.

Test 2: Dual-listener setup

Target setup:

Commands used:

./scripts/bringup_i2c_slave_testunit.sh start 1 0x30
./scripts/bringup_i2c_slave_testunit.sh start 3 0x31
i2ctransfer -f -y 3 w1@0x30 0x00
i2ctransfer -f -y 3 r1@0x30
i2ctransfer -f -y 1 w1@0x31 0x00
i2ctransfer -f -y 1 r1@0x31

Observed result:

J7 -> J6 at 0x30:

Relevant dmesg:

omap_i2c 20020000.i2c: Transmit underflow
omap_i2c 20020000.i2c: slave irq stat=0x04 con=0x8200 ie=0x661f oa=0x31 sa=0x30 ...
omap_i2c 20010000.i2c: slave irq stat=0x208 ...
omap_i2c 20010000.i2c: slave irq stat=0x610 ...

J6 -> J7 at 0x31:

Relevant dmesg:

omap_i2c 20010000.i2c: Transmit underflow
omap_i2c 20010000.i2c: slave irq stat=0x04 con=0x8200 ie=0x661f oa=0x30 sa=0x31 ...
omap_i2c 20020000.i2c: slave tx-requested stat=0x400 value=0x0 read=1 write=0

Target status after both failed directions:

So both adapters do return to a bound target state after acting as initiators, but the presence of the second active listener appears to poison the bus-level transaction path.

Recommendation

The next step should stay J6/J7, not move to Zepto yet.

Reason:

2026-05-11: Validate role IRQ-mask follow-up

Source State To Build

Build and copy back a new BeagleBadge vendor-edge-k3 kernel artifact from the repo state containing:

The new build should be distinct from P5910.

Purpose

The latest badge-only failures have a common shape: the adapter acting as initiator also has a slave backend registered, and the live interrupt mask still contains slave-only XUDF.

The new patch switches to the normal master interrupt mask while an adapter is temporarily acting as a master, then restores the slave interrupt mask when it returns to target-listen mode.

Keep Zepto Disconnected

Keep BeagleConnect Zepto disconnected for this pass. The goal is still to clear the J6/J7 badge-only boundary first.

Test 1: Clean Reverse Topology

Before running the reverse test, explicitly remove any stale J6 target at 0x30:

./scripts/bringup_i2c_slave_testunit.sh stop 1 0x30
./scripts/bringup_i2c_slave_testunit.sh stop 3 0x30
BADGESNAKE_SLAVE_BUS=3 BADGESNAKE_MASTER_BUS=1 ./scripts/test_j7_to_j6_smbus_block_proc_call.sh
BADGESNAKE_SLAVE_BUS=3 BADGESNAKE_MASTER_BUS=1 ./scripts/validate_j7_to_j6_testunit_features.sh

Record:

Test 2: Dual-Listener Setup

If Test 1 passes, retry the two-listener setup:

./scripts/bringup_i2c_slave_testunit.sh stop 1 0x30
./scripts/bringup_i2c_slave_testunit.sh stop 3 0x31
./scripts/bringup_i2c_slave_testunit.sh start 1 0x30
./scripts/bringup_i2c_slave_testunit.sh start 3 0x31
i2ctransfer -f -y 3 w1@0x30 0x00
i2ctransfer -f -y 3 r1@0x30
i2ctransfer -f -y 1 w1@0x31 0x00
i2ctransfer -f -y 1 r1@0x31

Record:

What bq2 Needs From The Result

Record whether Transmit underflow disappears when a target-capable adapter initiates after the role IRQ-mask patch.

If reverse topology and dual-listener tests both pass, the next validation can move to one Zepto. If either still fails, keep the work on J6/J7 and capture the new dmesg signature.

2026-05-11 live validation result

Completed on BeagleBadge with distinct kernel artifact:

Test 1: Clean reverse topology

Commands:

./scripts/bringup_i2c_slave_testunit.sh stop 1 0x30
./scripts/bringup_i2c_slave_testunit.sh stop 3 0x30
BADGESNAKE_SLAVE_BUS=3 BADGESNAKE_MASTER_BUS=1 ./scripts/test_j7_to_j6_smbus_block_proc_call.sh
BADGESNAKE_SLAVE_BUS=3 BADGESNAKE_MASTER_BUS=1 ./scripts/validate_j7_to_j6_testunit_features.sh

Observed result:

Important dmesg difference from the old failure:

omap_i2c 20010000.i2c: master-xfer addr=0x30 no registered slave

So the role IRQ-mask patch clears the old hard reverse-topology failure, but the raw surrogate is still malformed.

Test 2: Dual-listener setup

Target setup:

Commands:

./scripts/bringup_i2c_slave_testunit.sh start 1 0x30
./scripts/bringup_i2c_slave_testunit.sh start 3 0x31
i2ctransfer -f -y 3 w1@0x30 0x00
i2ctransfer -f -y 3 r1@0x30
i2ctransfer -f -y 1 w1@0x31 0x00
i2ctransfer -f -y 1 r1@0x31

Observed result:

J7 -> J6 at 0x30:

Relevant dmesg:

omap_i2c 20020000.i2c: Transmit underflow
omap_i2c 20020000.i2c: slave irq stat=0x04 con=0x8200 ie=0x661f oa=0x31 sa=0x30 ...

J6 -> J7 at 0x31:

Relevant dmesg:

omap_i2c 20010000.i2c: Transmit underflow
omap_i2c 20010000.i2c: slave irq stat=0x04 con=0x8200 ie=0x661f oa=0x30 sa=0x31 ...

After both failed directions:

So the dual-listener boundary is still not clear even after the role IRQ-mask patch.

Recommendation

Do not move to Zepto yet.

The role IRQ-mask patch fixes the old reverse-topology hard failure, but the dual-listener setup still breaks both directions with Transmit underflow. Continue on J6/J7 until that boundary is understood.

2026-05-11: Validate IRQENABLE clear follow-up

Source State To Build

Build and copy back a new BeagleBadge vendor-edge-k3 kernel artifact from the repo state containing:

The new build should be distinct from P957d.

Purpose

P957d fixed the reverse-topology hard failure, but the dual-listener setup still shows ie=0x661f and target-side Transmit underflow.

The likely remaining bug is that AM62L/IP-v2 maps the normal interrupt-enable register to I2C_IRQENABLE_SET. Writing a new role mask there can leave old role bits enabled. The new patch clears I2C_IRQENABLE_CLR before writing the desired mask, so role changes should replace the live interrupt mask rather than accumulate it.

Keep Zepto Disconnected

Keep BeagleConnect Zepto disconnected for this pass.

Install And Test

After installing and rebooting into the distinct artifact, rerun the dual-listener setup:

./scripts/bringup_i2c_slave_testunit.sh stop 1 0x30
./scripts/bringup_i2c_slave_testunit.sh stop 3 0x31
./scripts/bringup_i2c_slave_testunit.sh start 1 0x30
./scripts/bringup_i2c_slave_testunit.sh start 3 0x31
i2ctransfer -f -y 3 w1@0x30 0x00
i2ctransfer -f -y 3 r1@0x30
i2ctransfer -f -y 1 w1@0x31 0x00
i2ctransfer -f -y 1 r1@0x31

Also rerun the clean reverse-topology true SMBus path as a regression check:

./scripts/bringup_i2c_slave_testunit.sh stop 1 0x30
./scripts/bringup_i2c_slave_testunit.sh stop 3 0x30
BADGESNAKE_SLAVE_BUS=3 BADGESNAKE_MASTER_BUS=1 ./scripts/test_j7_to_j6_smbus_block_proc_call.sh

What bq2 Needs From The Result

Record:

If the live ie= values no longer contain stale role bits and the dual-listener case still fails, that is the point where a concise TI E2E question becomes worth preparing.

2026-05-12 live validation result

Completed on BeagleBadge with distinct kernel artifact:

Dual-listener setup

Setup:

./scripts/bringup_i2c_slave_testunit.sh stop 1 0x30
./scripts/bringup_i2c_slave_testunit.sh stop 3 0x31
./scripts/bringup_i2c_slave_testunit.sh start 1 0x30
./scripts/bringup_i2c_slave_testunit.sh start 3 0x31

Observed:

J7 -> J6 at 0x30:

Relevant dmesg:

omap_i2c 20010000.i2c: slave irq ... ie=0x61f ...
omap_i2c 20020000.i2c: slave irq ... ie=0x601f ...

J6 -> J7 at 0x31:

No Transmit underflow was observed in this pass.

Reverse-topology regression check

Commands:

./scripts/bringup_i2c_slave_testunit.sh stop 1 0x30
./scripts/bringup_i2c_slave_testunit.sh stop 3 0x31
./scripts/bringup_i2c_slave_testunit.sh stop 3 0x30
BADGESNAKE_SLAVE_BUS=3 BADGESNAKE_MASTER_BUS=1 ./scripts/test_j7_to_j6_smbus_block_proc_call.sh

Observed:

Conclusion

2026-05-12: Capture TI E2E reproduction log

Purpose

bq2 prepared the TI E2E draft and a focused reproduction helper:

Before posting, capture one fresh log from the currently validated Pb163 state.

Request

Keep Zepto disconnected and run:

./scripts/reproduce_omap_i2c_dual_listener_timeout.sh

Record:

The log should be attached to or pasted under the TI E2E post body from docs/TI-E2E-OMAP-I2C-Dual-Listener-Timeout.md.

2026-05-12 live capture result

The reproduction helper was run successfully on the live Pb163 kernel:

./scripts/reproduce_omap_i2c_dual_listener_timeout.sh

Reported output directory:

Preserved in the repo at:

Captured result:

This artifact set is the one to attach to or paste under the TI E2E draft in:

2026-05-11 copied-build check

The first copied build after this request did not satisfy the requested source state.

Observed copied summary:

Observed package version:

Why it is stale:

Current superproject pointers are already correct:

So the next required step is to rebuild from the updated submodule state and copy back a distinct post-P5910 artifact before attempting live validation.