fix(tab5): place ST7121 display buffers in PSRAM - #51
Conversation
|
🦞👀 Pull request received. I will update this pull request when review starts. ClawSweeper review completeClawSweeper finished reviewing this revision. The review result is being finalized. |
|
Codex review: blocked before merge. Reviewed September 12, 2026, 12:13 PM ET / 16:13 UTC (Revision 5). ClawSweeper reviewWhat this changesThe branch moves unencrypted ST7121 display buffers into PSRAM while preserving encrypted-device allocation, and includes predecessor camera compatibility, geometry, allocation diagnostics, tests, and packaging changes. Merge readiness⛔ Blocked before merge - 2 items remain The change remains necessary, and the earlier encryption finding is fixed. No new blocking code defect was found; the accepted stacked work still needs conflict resolution and cumulative-tree validation. Priority: P2 Review scores
Verification
How this fits togetherThe Tab5 board adapter connects the room-node application to its display and camera hardware. It configures graphics buffers and camera transforms, while transport diagnostics and firmware packaging help operators inspect failures and identify the compiled SDK profile. flowchart TD
A[Tab5 room application] --> B[Board adapter]
B --> C{Flash encryption active}
C -->|Yes| D[Existing DMA buffers]
C -->|No| E[PSRAM graphics buffers]
D --> F[Rotated display]
E --> F
B --> G[Camera format and geometry]
G --> H[JPEG response]
Before merge
Agent review detailsSecurityNone. Review metrics
Merge-risk optionsMaintainer options:
Technical reviewBest possible solution: Retain the encryption-aware board allocation and accepted predecessor repairs in a verified cumulative tree, without treating configured buffer payload as measured heap recovery or release qualification. Do we have a high-confidence way to reproduce the issue? Yes, source inspection establishes that current main requests DMA buffers without explicitly selecting PSRAM on ST7121. It does not establish that this allocation caused the reported WebSocket startup failure. Is this the best way to solve the issue? Yes, using the existing per-display allocation flags with the SDK-required encrypted fallback is a narrow solution; a global allocator or stack-size change is unnecessary. AGENTS.md: not found in the target repository. Codex review notes: model internal, reasoning medium; reviewed against 6b63951f0ac5. LabelsLabel justifications:
EvidenceWhat I checked:
Likely related people:
Rating scale
Overall follows the weaker of proof and patch quality. Workflow
HistoryReview history (4 earlier review cycles)
|
Problem
The ST7121 display path requests DMA-capable LVGL buffers without explicitly
selecting PSRAM, unlike the sibling Tab5 panel path. On the current test board,
retained boot logs identify touch firmware revision 1, selecting ST7121.
A later node-role WebSocket startup failed while requesting an 8192-byte
internal/8-bit allocation. That observation motivates protecting internal memory;
it does not prove these display buffers caused the failure.
Change
buff_dma=falseandbuff_spiram=true, selecting PSRAM for the two drawbuffers and PPA rotation buffer.
true,falseallocationflags. The pinned PPA SRM implementation rejects external buffers in this
mode. Sample the public runtime encryption predicate once and declare its
existing
bootloader_supportcomponent as a private build dependency.this campaign's ST7121 panel and LVGL startup evidence.
panels, task stacks, SDK/dependency versions, and global allocation settings
unchanged.
The three configured RGB565 buffer payloads total 172,800 bytes, excluding
allocation overhead. This calculation is not a measurement of recovered memory.
The encrypted fallback preserves the original allocation request; it does not
qualify encrypted camera, media, or voice. Public bundles still reject encrypted
builds.
Repair Validation
DMA allocation assertion. Both encrypted and unencrypted cases pass after
the repair with ASan/UBSan, executing the production display configuration.
They also retain geometry, buffering, handles, rotation and DSI settings.
must validate the actual SDK header and component linkage.
actionlintandgit diff --checkpassed. Independent review and fresh scopedP2 autoreview found no actionable findings.
0160b153db80069e19e18513a18330ce29fd4647.All five jobs passed in CI run 34504342813,
including the host regressions and native Tab5 SDK/header/component linkage.
The artifact evidence below predates this encryption-aware repair.
No encrypted-device or voice proof is claimed.
Prior Build Evidence
protect unchanged board-adapter behavior, not physical display placement.
for original head
e166026c7616e1c7eaeea1c023585d6c2748c02e.The compiled test merge was
d9bbea660bcfcd571df1bba81a9d121d594e97e9,with expected base/head parents and a tree matching that head.
10155641928was verified: 2,898,637 bytes, API/archive SHA2568ba18ef61f6dd20a58c9683af4dbb91f93ab4058daa7c3da27e068da3a7f347d.All 11 internal checksums, 10 manifest file records, four image mappings,
and non-overlap with protected partitions passed.
362a1776ec212788fda95f75b733bfdde3a0c394,v5.5.5-648-g362a1776ec2-dirty, with the existing tracked patches.SDK/component patch records, BSP, tools, generated configuration, and parsed
dependency lock matched the verified
6be43e8baseline. The 1024-bytethreshold, 32768-byte reserve, and both 8192-byte node/transport stacks remain
unchanged by this repair.
Stacked on #50. This is a
bounded board-specific allocation change, not a stack-size or global allocator
workaround. No release or complete media/voice qualification is claimed.
Maintainer Disposition
Accept the board-specific placement change with its encryption-aware fallback,
actual-owner regressions and exact-head native CI. The configured payload
calculation is not a guaranteed heap gain or a claim that WebSocket startup
is fixed. Encrypted-device media and voice qualification remain open.
Land after #50 with a merge
commit and exact cumulative-tree verification. Preserve the signed original
change and accepted encryption repair, along with earlier privacy, packaging
and qualified SDK-image changes. This disposition does not authorize a release.